Make balloons use UDMF arg 0, MTF_AMBUSH not being set turns on respawning

This commit is contained in:
yamamama 2026-04-24 02:17:16 -04:00
parent 677075bfbf
commit 72931e7713
3 changed files with 34 additions and 1 deletions

View file

@ -196,6 +196,7 @@ _(A_SpawnParticleRelative, SPAWNPARTICLERELATIVE)
_(A_ParticleSpawn, PARTICLESPAWN)
_(A_MultiShotDist, MULTISHOTDIST)
_(A_CheckFlags2, CHECKFLAGS2)
_(A_CheckScriptArg, CHECKSCRIPTARG)
_(A_DoNPCSkid, DONPCSKID)
_(A_DoNPCPain, DONPCPAIN)
_(A_PrepareRepeat, PREPAREREPEAT)

View file

@ -9747,6 +9747,11 @@ void A_SpawnFreshCopy(void *thing)
newObject = P_SpawnMobjFromMobj(actor, 0, 0, 0, actor->type);
newObject->flags2 = actor->flags2 & MF2_AMBUSH;
INT32 i;
for (i = 0; i < NUM_SCRIPT_ARGS; i++)
newObject->script_args[i] = actor->script_args[i];
newObject->angle = actor->angle;
newObject->color = actor->color;
P_SetTarget(&newObject->target, actor->target);
@ -10577,6 +10582,29 @@ void A_CheckFlags2(void *thing)
P_SetMobjState(actor, (statenum_t)locvar2);
}
// Function: A_CheckScriptArg
//
// Description: If actor->script_args[var1] != 0, goto var2.
//
// var1 = mask
// var2 = state to go
//
void A_CheckScriptArg(void *thing)
{
mobj_t *actor = thing;
INT32 locvar1 = var1;
INT32 locvar2 = var2;
if (locvar1 >= NUM_SCRIPT_ARGS)
return;
if (LUA_CallAction(A_CHECKSCRIPTARG, actor))
return;
if (actor->script_args[locvar1])
P_SetMobjState(actor, (statenum_t)locvar2);
}
// Function: A_DoNPCSkid
//
// Description: Something that looks like a player is skidding.

View file

@ -7182,6 +7182,8 @@ static void P_ConvertBinarySectorTypes(void)
}
}
// TODO: Check to make sure every object that sets flags such as ambush properly get converted to UDMF
static void P_ConvertBinaryThingTypes(void)
{
size_t i;
@ -7342,7 +7344,9 @@ static void P_ConvertBinaryThingTypes(void)
mapthings[i].args[2] = !(mapthings[i].options & (MTF_AMBUSH|MTF_OBJECTSPECIAL));
break;
case 462: //Balloon
mapthings[i].args[0] = !!(mapthings[i].options & MTF_AMBUSH);
mapthings[i].args[0] = !(mapthings[i].options & MTF_AMBUSH);
mapthings[i].options &= ~MTF_AMBUSH;
if (mapthings[i].angle > 0)
P_WriteSkincolor(((mapthings[i].angle - 1) % (numskincolors - 1)) + 1, &mapthings[i].stringargs[0]);
break;