1.1 --- a/extensions/sdktools/vdecoder.cpp Thu Jul 19 03:22:10 2007 +0000
1.2 +++ b/extensions/sdktools/vdecoder.cpp Thu Jul 19 15:24:15 2007 +0000
1.3 @@ -114,6 +114,7 @@
1.4 info->flags = flags;
1.5 if (flags & PASSFLAG_ASPOINTER)
1.6 {
1.7 + needs_extra = true;
1.8 info->size = sizeof(int *);
1.9 return sizeof(int *) + sizeof(int);
1.10 } else {
1.11 @@ -127,6 +128,7 @@
1.12 info->flags = flags;
1.13 if (flags & PASSFLAG_ASPOINTER)
1.14 {
1.15 + needs_extra = true;
1.16 info->size = sizeof(bool *);
1.17 return sizeof(bool *) + sizeof(bool);
1.18 } else {
1.19 @@ -136,13 +138,15 @@
1.20 }
1.21 case Valve_Float:
1.22 {
1.23 - info->type = PassType_Float;
1.24 info->flags = flags;
1.25 if (flags & PASSFLAG_ASPOINTER)
1.26 {
1.27 + needs_extra = true;
1.28 + info->type = PassType_Basic;
1.29 info->size = sizeof(float *);
1.30 return sizeof(float *) + sizeof(float);
1.31 } else {
1.32 + info->type = PassType_Float;
1.33 info->size = sizeof(float);
1.34 return sizeof(float);
1.35 }
1.36 @@ -167,7 +171,7 @@
1.37
1.38 if (data->type == PassType_Basic)
1.39 {
1.40 - v = *(Vector **)((unsigned char *)buffer + sizeof(Vector *));
1.41 + v = *(Vector **)buffer;
1.42 } else if (data->type == PassType_Object) {
1.43 v = (Vector *)buffer;
1.44 }
1.45 @@ -187,7 +191,7 @@
1.46
1.47 if (data->type == PassType_Basic)
1.48 {
1.49 - q = *(QAngle **)((unsigned char *)buffer + sizeof(QAngle *));
1.50 + q = *(QAngle **)buffer;
1.51 } else if (data->type == PassType_Object) {
1.52 q = (QAngle *)buffer;
1.53 }
1.54 @@ -241,7 +245,7 @@
1.55
1.56 if (data->flags & PASSFLAG_ASPOINTER)
1.57 {
1.58 - buffer = (char *)buffer + sizeof(void *);
1.59 + buffer = *(cell_t **)buffer;
1.60 }
1.61
1.62 *addr = *(cell_t *)buffer;
1.63 @@ -255,7 +259,7 @@
1.64
1.65 if (data->flags & PASSFLAG_ASPOINTER)
1.66 {
1.67 - buffer = (char *)buffer + sizeof(bool *);
1.68 + buffer = *(bool **)buffer;
1.69 }
1.70
1.71 *addr = *(bool *)buffer ? 1 : 0;
1.72 @@ -565,7 +569,7 @@
1.73 }
1.74 if (data->flags & PASSFLAG_ASPOINTER)
1.75 {
1.76 - *(void **)buffer = (char *)buffer + sizeof(void *);
1.77 + *(void **)buffer = (unsigned char *)_buffer + pCall->stackEnd + data->obj_offset;
1.78 buffer = *(void **)buffer;
1.79 }
1.80 *(cell_t *)buffer = param;
1.81 @@ -581,7 +585,7 @@
1.82 }
1.83 if (data->flags & PASSFLAG_ASPOINTER)
1.84 {
1.85 - *(bool **)buffer = (bool *)((char *)buffer + sizeof(bool *));
1.86 + *(bool **)buffer = (bool *)((unsigned char *)_buffer + pCall->stackEnd + data->obj_offset);
1.87 buffer = *(bool **)buffer;
1.88 }
1.89 *(bool *)buffer = param ? true : false;