- Allow for ACS_NamedExecute and friends to be used with SetThingSpecial.

SVN r3389 (trunk)
This commit is contained in:
Randy Heit 2012-02-26 02:25:33 +00:00
parent 87f23f6d38
commit 7106c06811
2 changed files with 24 additions and 6 deletions

View File

@ -5776,6 +5776,16 @@ int DLevelScript::RunScript ()
case PCD_SETTHINGSPECIAL: case PCD_SETTHINGSPECIAL:
{ {
int specnum = STACK(6);
int arg0 = STACK(5);
// Convert named ACS "specials" into real specials.
if (specnum >= -ACSF_ACS_NamedExecuteAlways && specnum <= -ACSF_ACS_NamedExecute)
{
specnum = NamedACSToNormalACS[-specnum - ACSF_ACS_NamedExecute];
arg0 = -FName(FBehavior::StaticLookupString(arg0));
}
if (STACK(7) != 0) if (STACK(7) != 0)
{ {
FActorIterator iterator (STACK(7)); FActorIterator iterator (STACK(7));
@ -5783,8 +5793,8 @@ int DLevelScript::RunScript ()
while ( (actor = iterator.Next ()) ) while ( (actor = iterator.Next ()) )
{ {
actor->special = STACK(6); actor->special = specnum;
actor->args[0] = STACK(5); actor->args[0] = arg0;
actor->args[1] = STACK(4); actor->args[1] = STACK(4);
actor->args[2] = STACK(3); actor->args[2] = STACK(3);
actor->args[3] = STACK(2); actor->args[3] = STACK(2);
@ -5793,8 +5803,8 @@ int DLevelScript::RunScript ()
} }
else if (activator != NULL) else if (activator != NULL)
{ {
activator->special = STACK(6); activator->special = specnum;
activator->args[0] = STACK(5); activator->args[0] = arg0;
activator->args[1] = STACK(4); activator->args[1] = STACK(4);
activator->args[2] = STACK(3); activator->args[2] = STACK(3);
activator->args[3] = STACK(2); activator->args[3] = STACK(2);

View File

@ -260,8 +260,16 @@ void AActor::Serialize (FArchive &arc)
<< tracer << tracer
<< floorclip << floorclip
<< tid << tid
<< special << special;
<< args[0] << args[1] << args[2] << args[3] << args[4] if (P_IsACSSpecial(special))
{
P_SerializeACSScriptNumber(arc, args[0], false);
}
else
{
arc << args[0];
}
arc << args[1] << args[2] << args[3] << args[4]
<< goal << goal
<< waterlevel << waterlevel
<< MinMissileChance << MinMissileChance