- Changed A_SetUserVar and A_SetUserArray so they affect the actor that called it, which

is not necessarily "self". The only visible change from this should be that inventory items
  now set their own variables and not their owners'.

SVN r2235 (trunk)
This commit is contained in:
Randy Heit 2010-03-21 21:05:27 +00:00
parent a2cfbec3cf
commit 41df8242c1

View file

@ -3009,7 +3009,7 @@ DEFINE_ACTION_FUNCTION_PARAMS(AActor, A_SetUserVar)
ACTION_PARAM_NAME(varname, 0);
ACTION_PARAM_INT(value, 1);
PSymbol *sym = self->GetClass()->Symbols.FindSymbol(varname, true);
PSymbol *sym = stateowner->GetClass()->Symbols.FindSymbol(varname, true);
PSymbolVariable *var;
if (sym == NULL || sym->SymbolType != SYM_Variable ||
@ -3017,11 +3017,11 @@ DEFINE_ACTION_FUNCTION_PARAMS(AActor, A_SetUserVar)
var->ValueType.Type != VAL_Int)
{
Printf("%s is not a user variable in class %s\n", varname.GetChars(),
self->GetClass()->TypeName.GetChars());
stateowner->GetClass()->TypeName.GetChars());
return;
}
// Set the value of the specified user variable.
*(int *)(reinterpret_cast<BYTE *>(self) + var->offset) = value;
*(int *)(reinterpret_cast<BYTE *>(stateowner) + var->offset) = value;
}
//===========================================================================
@ -3037,7 +3037,7 @@ DEFINE_ACTION_FUNCTION_PARAMS(AActor, A_SetUserArray)
ACTION_PARAM_INT(pos, 1);
ACTION_PARAM_INT(value, 2);
PSymbol *sym = self->GetClass()->Symbols.FindSymbol(varname, true);
PSymbol *sym = stateowner->GetClass()->Symbols.FindSymbol(varname, true);
PSymbolVariable *var;
if (sym == NULL || sym->SymbolType != SYM_Variable ||
@ -3045,17 +3045,17 @@ DEFINE_ACTION_FUNCTION_PARAMS(AActor, A_SetUserArray)
var->ValueType.Type != VAL_Array || var->ValueType.BaseType != VAL_Int)
{
Printf("%s is not a user array in class %s\n", varname.GetChars(),
self->GetClass()->TypeName.GetChars());
stateowner->GetClass()->TypeName.GetChars());
return;
}
if (pos < 0 || pos >= var->ValueType.size)
{
Printf("%d is out of bounds in array %s in class %s\n", pos, varname.GetChars(),
self->GetClass()->TypeName.GetChars());
stateowner->GetClass()->TypeName.GetChars());
return;
}
// Set the value of the specified user array at index pos.
((int *)(reinterpret_cast<BYTE *>(self) + var->offset))[pos] = value;
((int *)(reinterpret_cast<BYTE *>(stateowner) + var->offset))[pos] = value;
}
//===========================================================================