extensions/sdktools/vdecoder.cpp
changeset 1135 1a04a48f0788
parent 1031 d9cf44ddcd9c
child 1233 e9cfc03b9bb8
     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;