- first large batch of NewStateGroup calls.

This commit is contained in:
Christoph Oelckers 2021-10-30 23:12:31 +02:00
parent d98fe4af73
commit 02031c77d0
17 changed files with 99 additions and 89 deletions

View file

@ -551,7 +551,7 @@ void KeepActorOnFloor(DSWActor* actor)
if (u->Rot == u->ActorActionSet->Run) if (u->Rot == u->ActorActionSet->Run)
{ {
NewStateGroup_(u->SpriteNum, u->ActorActionSet->Swim); NewStateGroup(actor, u->ActorActionSet->Swim);
} }
// are swimming // are swimming
@ -563,7 +563,7 @@ void KeepActorOnFloor(DSWActor* actor)
// only start swimming if you are running // only start swimming if you are running
if (u->Rot == u->ActorActionSet->Run || u->Rot == u->ActorActionSet->Swim) if (u->Rot == u->ActorActionSet->Run || u->Rot == u->ActorActionSet->Swim)
{ {
NewStateGroup_(u->SpriteNum, u->ActorActionSet->Swim); NewStateGroup(actor, u->ActorActionSet->Swim);
u->oz = sp->z = u->loz - Z(depth); u->oz = sp->z = u->loz - Z(depth);
sp->backupz(); sp->backupz();
SET(u->Flags, SPR_SWIMMING); SET(u->Flags, SPR_SWIMMING);
@ -667,9 +667,9 @@ int DoActorBeginJump(DSWActor* actor)
if (u->ActorActionSet) if (u->ActorActionSet)
{ {
if (TEST(u->Flags, SPR_DEAD)) if (TEST(u->Flags, SPR_DEAD))
NewStateGroup_(SpriteNum, u->ActorActionSet->DeathJump); NewStateGroup(actor, u->ActorActionSet->DeathJump);
else else
NewStateGroup_(SpriteNum, u->ActorActionSet->Jump); NewStateGroup(actor, u->ActorActionSet->Jump);
} }
u->StateFallOverride = nullptr; u->StateFallOverride = nullptr;
@ -739,14 +739,14 @@ int DoActorBeginFall(DSWActor* actor)
{ {
if (TEST(u->Flags, SPR_DEAD)) if (TEST(u->Flags, SPR_DEAD))
{ {
NewStateGroup_(u, u->ActorActionSet->DeathFall); NewStateGroup(actor, u->ActorActionSet->DeathFall);
} }
else else
NewStateGroup_(u, u->ActorActionSet->Fall); NewStateGroup(actor, u->ActorActionSet->Fall);
if (u->StateFallOverride) if (u->StateFallOverride)
{ {
NewStateGroup_(u, u->StateFallOverride); NewStateGroup(actor, u->StateFallOverride);
} }
} }
@ -807,19 +807,19 @@ int DoActorStopFall(DSWActor* actor)
{ {
if (TEST(u->Flags, SPR_DEAD)) if (TEST(u->Flags, SPR_DEAD))
{ {
NewStateGroup_(SpriteNum, u->ActorActionSet->Dead); NewStateGroup(actor, u->ActorActionSet->Dead);
PlaySound(DIGI_ACTORBODYFALL1, sp, v3df_none); PlaySound(DIGI_ACTORBODYFALL1, sp, v3df_none);
} }
else else
{ {
PlaySound(DIGI_ACTORHITGROUND, sp, v3df_none); PlaySound(DIGI_ACTORHITGROUND, sp, v3df_none);
NewStateGroup_(SpriteNum, u->ActorActionSet->Run); NewStateGroup(actor, u->ActorActionSet->Run);
if ((u->track >= 0) && (u->jump_speed) > 800 && (u->ActorActionSet->Sit)) if ((u->track >= 0) && (u->jump_speed) > 800 && (u->ActorActionSet->Sit))
{ {
u->WaitTics = 80; u->WaitTics = 80;
NewStateGroup_(SpriteNum, u->ActorActionSet->Sit); NewStateGroup(actor, u->ActorActionSet->Sit);
} }
} }
} }

View file

@ -554,7 +554,7 @@ int DoActorOperate(DSWActor* actor)
{ {
u->WaitTics = 2 * 120; u->WaitTics = 2 * 120;
NewStateGroup_(SpriteNum, u->ActorActionSet->Stand); NewStateGroup(actor, u->ActorActionSet->Stand);
} }
} }
#endif #endif
@ -567,7 +567,7 @@ int DoActorOperate(DSWActor* actor)
{ {
u->WaitTics = 2 * 120; u->WaitTics = 2 * 120;
NewStateGroup_(SpriteNum, u->ActorActionSet->Sit); NewStateGroup(actor, u->ActorActionSet->Sit);
} }
} }
@ -577,7 +577,7 @@ int DoActorOperate(DSWActor* actor)
{ {
u->WaitTics = 2 * 120; u->WaitTics = 2 * 120;
NewStateGroup_(SpriteNum, u->ActorActionSet->Stand); NewStateGroup(actor, u->ActorActionSet->Stand);
} }
} }
return true; return true;
@ -843,7 +843,7 @@ int DoActorDecide(DSWActor* actor)
else else
{ {
// Actually staying put // Actually staying put
NewStateGroup_(SpriteNum, u->ActorActionSet->Stand); NewStateGroup(actor, u->ActorActionSet->Stand);
//CON_Message("DoActorDecide: Staying put"); //CON_Message("DoActorDecide: Staying put");
} }
@ -971,7 +971,7 @@ int InitActorMoveCloser(DSWActor* actor)
u->ActorActionFunc = DoActorMoveCloser; u->ActorActionFunc = DoActorMoveCloser;
if (u->Rot != u->ActorActionSet->Run) if (u->Rot != u->ActorActionSet->Run)
NewStateGroup_(SpriteNum, u->ActorActionSet->Run); NewStateGroup(actor, u->ActorActionSet->Run);
(*u->ActorActionFunc)(actor); (*u->ActorActionFunc)(actor);
@ -996,7 +996,7 @@ int DoActorCantMoveCloser(DSWActor* actor)
SET(u->Flags, SPR_FIND_PLAYER); SET(u->Flags, SPR_FIND_PLAYER);
u->ActorActionFunc = DoActorDecide; u->ActorActionFunc = DoActorDecide;
NewStateGroup_(SpriteNum, u->ActorActionSet->Run); NewStateGroup(actor, u->ActorActionSet->Run);
//MONO_PRINT("Trying to get to the track point\n"); //MONO_PRINT("Trying to get to the track point\n");
} }
else else
@ -1262,7 +1262,7 @@ int InitActorRunAway(DSWActor* actor)
//MONO_PRINT("Init Actor RunAway\n"); //MONO_PRINT("Init Actor RunAway\n");
u->ActorActionFunc = DoActorDecide; u->ActorActionFunc = DoActorDecide;
NewStateGroup_(SpriteNum, u->ActorActionSet->Run); NewStateGroup(actor, u->ActorActionSet->Run);
u->track = FindTrackAwayFromPlayer(actor); u->track = FindTrackAwayFromPlayer(actor);
@ -1292,7 +1292,7 @@ int InitActorRunToward(DSWActor* actor)
//MONO_PRINT("InitActorRunToward\n"); //MONO_PRINT("InitActorRunToward\n");
u->ActorActionFunc = DoActorDecide; u->ActorActionFunc = DoActorDecide;
NewStateGroup_(SpriteNum, u->ActorActionSet->Run); NewStateGroup(actor, u->ActorActionSet->Run);
InitActorReposition(actor); InitActorReposition(actor);
DoActorSetSpeed(actor, FAST_SPEED); DoActorSetSpeed(actor, FAST_SPEED);
@ -1357,7 +1357,7 @@ int InitActorAttack(DSWActor* actor)
u->ActorActionFunc = DoActorAttack; u->ActorActionFunc = DoActorAttack;
// move into standing frame // move into standing frame
//NewStateGroup_(SpriteNum, u->ActorActionSet->Stand); //NewStateGroup(actor, u->ActorActionSet->Stand);
// face player when attacking // face player when attacking
sp->ang = NORM_ANGLE(getangle(u->targetActor->s().x - sp->x, u->targetActor->s().y - sp->y)); sp->ang = NORM_ANGLE(getangle(u->targetActor->s().x - sp->x, u->targetActor->s().y - sp->y));
@ -1397,7 +1397,7 @@ int InitActorAttack(DSWActor* actor)
if (CHOOSE2(100)) if (CHOOSE2(100))
{ {
u->ActorActionFunc = DoActorDecide; u->ActorActionFunc = DoActorDecide;
NewStateGroup_(SpriteNum, u->ActorActionSet->Death2); NewStateGroup(actor, u->ActorActionSet->Death2);
return 0; return 0;
} }
} }
@ -1428,7 +1428,7 @@ int DoActorAttack(DSWActor* actor)
{ {
rand_num = ChooseActionNumber(u->ActorActionSet->CloseAttackPercent); rand_num = ChooseActionNumber(u->ActorActionSet->CloseAttackPercent);
NewStateGroup_(SpriteNum, u->ActorActionSet->CloseAttack[rand_num]); NewStateGroup(actor, u->ActorActionSet->CloseAttack[rand_num]);
} }
else else
{ {
@ -1438,7 +1438,7 @@ int DoActorAttack(DSWActor* actor)
ASSERT(rand_num < u->WeaponNum); ASSERT(rand_num < u->WeaponNum);
NewStateGroup_(SpriteNum, u->ActorActionSet->Attack[rand_num]); NewStateGroup(actor, u->ActorActionSet->Attack[rand_num]);
u->ActorActionFunc = DoActorDecide; u->ActorActionFunc = DoActorDecide;
} }
@ -1460,7 +1460,7 @@ int InitActorEvade(DSWActor* actor)
// you stop and take up the fight again. // you stop and take up the fight again.
u->ActorActionFunc = DoActorDecide; u->ActorActionFunc = DoActorDecide;
NewStateGroup_(SpriteNum, u->ActorActionSet->Run); NewStateGroup(actor, u->ActorActionSet->Run);
u->track = FindTrackAwayFromPlayer(actor); u->track = FindTrackAwayFromPlayer(actor);
@ -1485,7 +1485,7 @@ int InitActorWanderAround(DSWActor* actor)
//MONO_PRINT(ds); //MONO_PRINT(ds);
u->ActorActionFunc = DoActorDecide; u->ActorActionFunc = DoActorDecide;
NewStateGroup_(SpriteNum, u->ActorActionSet->Run); NewStateGroup(actor, u->ActorActionSet->Run);
DoActorPickClosePlayer(actor); DoActorPickClosePlayer(actor);
@ -1511,7 +1511,7 @@ int InitActorFindPlayer(DSWActor* actor)
//MONO_PRINT(ds); //MONO_PRINT(ds);
u->ActorActionFunc = DoActorDecide; u->ActorActionFunc = DoActorDecide;
NewStateGroup_(SpriteNum, u->ActorActionSet->Run); NewStateGroup(actor, u->ActorActionSet->Run);
u->track = FindTrackToPlayer(actor); u->track = FindTrackToPlayer(actor);
@ -1522,7 +1522,7 @@ int InitActorFindPlayer(DSWActor* actor)
SET(u->Flags, SPR_FIND_PLAYER); SET(u->Flags, SPR_FIND_PLAYER);
u->ActorActionFunc = DoActorDecide; u->ActorActionFunc = DoActorDecide;
NewStateGroup_(SpriteNum, u->ActorActionSet->Run); NewStateGroup(actor, u->ActorActionSet->Run);
} }
else else
{ {
@ -1549,7 +1549,7 @@ int InitActorDuck(DSWActor* actor)
} }
u->ActorActionFunc = DoActorDuck; u->ActorActionFunc = DoActorDuck;
NewStateGroup_(SpriteNum, u->ActorActionSet->Duck); NewStateGroup(actor, u->ActorActionSet->Duck);
dist = Distance(sp->x, sp->y, u->targetActor->s().x, u->targetActor->s().y); dist = Distance(sp->x, sp->y, u->targetActor->s().x, u->targetActor->s().y);
@ -1576,7 +1576,7 @@ int DoActorDuck(DSWActor* actor)
if ((u->WaitTics -= ACTORMOVETICS) < 0) if ((u->WaitTics -= ACTORMOVETICS) < 0)
{ {
NewStateGroup_(SpriteNum, u->ActorActionSet->Rise); NewStateGroup(actor, u->ActorActionSet->Rise);
u->ActorActionFunc = DoActorDecide; u->ActorActionFunc = DoActorDecide;
// InitActorDecide(SpriteNum); // InitActorDecide(SpriteNum);
RESET(u->Flags, SPR_TARGETED); RESET(u->Flags, SPR_TARGETED);
@ -1914,7 +1914,7 @@ int InitActorReposition(DSWActor* actor)
u->ActorActionFunc = DoActorReposition; u->ActorActionFunc = DoActorReposition;
if (!TEST(u->Flags, SPR_SWIMMING)) if (!TEST(u->Flags, SPR_SWIMMING))
NewStateGroup_(SpriteNum, u->ActorActionSet->Run); NewStateGroup(actor, u->ActorActionSet->Run);
(*u->ActorActionFunc)(actor); (*u->ActorActionFunc)(actor);
@ -1961,7 +1961,7 @@ int InitActorPause(DSWActor* actor)
// !JIM! This makes actors not animate // !JIM! This makes actors not animate
//if (!TEST(u->Flags, SPR_SWIMMING)) //if (!TEST(u->Flags, SPR_SWIMMING))
//NewStateGroup_(SpriteNum, u->ActorActionSet->Stand); //NewStateGroup(actor, u->ActorActionSet->Stand);
(*u->ActorActionFunc)(actor); (*u->ActorActionFunc)(actor);

View file

@ -1089,7 +1089,7 @@ DoBunnyQuickJump(DSWActor* actor)
u->Vis = sp->ang; // Remember angles for later u->Vis = sp->ang; // Remember angles for later
tu->Vis = tsp->ang; tu->Vis = tsp->ang;
NewStateGroup_(SpriteNum, sg_BunnyScrew); NewStateGroup(actor, sg_BunnyScrew);
NewStateGroup_(hit_sprite, sg_BunnyScrew); NewStateGroup_(hit_sprite, sg_BunnyScrew);
u->WaitTics = tu->WaitTics = SEC(10); // Mate for this long u->WaitTics = tu->WaitTics = SEC(10); // Mate for this long
return true; return true;
@ -1148,7 +1148,7 @@ int DoBunnyRipHeart(DSWActor* actor)
SPRITEp tsp = u->tgt_sp(); SPRITEp tsp = u->tgt_sp();
NewStateGroup_(SpriteNum, sg_BunnyHeart); NewStateGroup(actor, sg_BunnyHeart);
u->WaitTics = 6 * 120; u->WaitTics = 6 * 120;
// player face bunny // player face bunny
@ -1169,7 +1169,7 @@ int DoBunnyStandKill(DSWActor* actor)
PlaySound(DIGI_BUNNYATTACK, sp, v3df_none); PlaySound(DIGI_BUNNYATTACK, sp, v3df_none);
if ((u->WaitTics -= ACTORMOVETICS) <= 0) if ((u->WaitTics -= ACTORMOVETICS) <= 0)
NewStateGroup_(SpriteNum, sg_BunnyRun); NewStateGroup(actor, sg_BunnyRun);
return 0; return 0;
} }

View file

@ -705,7 +705,7 @@ int InitCoolgCircle(DSWActor* actor)
u->ActorActionFunc = DoCoolgCircle; u->ActorActionFunc = DoCoolgCircle;
NewStateGroup_(SpriteNum, u->ActorActionSet->Run); NewStateGroup(actor, u->ActorActionSet->Run);
// set it close // set it close
DoActorSetSpeed(actor, FAST_SPEED); DoActorSetSpeed(actor, FAST_SPEED);
@ -812,7 +812,7 @@ int DoCoolgDeath(DSWActor* actor)
{ {
RESET(u->Flags, SPR_FALLING|SPR_SLIDING); RESET(u->Flags, SPR_FALLING|SPR_SLIDING);
RESET(sp->cstat, CSTAT_SPRITE_YFLIP); // If upside down, reset it RESET(sp->cstat, CSTAT_SPRITE_YFLIP); // If upside down, reset it
NewStateGroup_(SpriteNum, u->ActorActionSet->Dead); NewStateGroup(actor, u->ActorActionSet->Dead);
return 0; return 0;
} }

View file

@ -505,7 +505,7 @@ void EnemyDefaults(short SpriteNum, ACTOR_ACTION_SETp action, PERSONALITYp perso
if (!action) if (!action)
return; return;
NewStateGroup_(SpriteNum, u->ActorActionSet->Run); NewStateGroup(actor, u->ActorActionSet->Run);
u->ActorActionFunc = DoActorDecide; u->ActorActionFunc = DoActorDecide;
@ -658,7 +658,7 @@ int InitCoolieCharge(DSWActor* actor)
InitActorMoveCloser(actor); InitActorMoveCloser(actor);
NewStateGroup_(SpriteNum, sg_CoolieCharge); NewStateGroup(actor, sg_CoolieCharge);
return 0; return 0;
} }

View file

@ -565,7 +565,7 @@ DoEelDeath(DSWActor* actor)
SET(sp->cstat, CSTAT_SPRITE_XFLIP); SET(sp->cstat, CSTAT_SPRITE_XFLIP);
if (RandomRange(1000) > 500) if (RandomRange(1000) > 500)
SET(sp->cstat, CSTAT_SPRITE_YFLIP); SET(sp->cstat, CSTAT_SPRITE_YFLIP);
NewStateGroup_(SpriteNum, u->ActorActionSet->Dead); NewStateGroup(actor, u->ActorActionSet->Dead);
return 0; return 0;
} }
@ -580,7 +580,7 @@ int DoEelMove(DSWActor* actor)
ASSERT(u->Rot != nullptr); ASSERT(u->Rot != nullptr);
if (SpriteOverlap(SpriteNum, int16_t(u->tgt_sp() - sprite))) if (SpriteOverlap(SpriteNum, int16_t(u->tgt_sp() - sprite)))
NewStateGroup_(SpriteNum, u->ActorActionSet->CloseAttack[0]); NewStateGroup(actor, u->ActorActionSet->CloseAttack[0]);
if (TEST(u->Flags,SPR_SLIDING)) if (TEST(u->Flags,SPR_SLIDING))
DoActorSlide(actor); DoActorSlide(actor);

View file

@ -1861,6 +1861,7 @@ int Distance(int x1, int y1, int x2, int y2);
int NewStateGroup_(short SpriteNum, STATEp SpriteGroup[]); int NewStateGroup_(short SpriteNum, STATEp SpriteGroup[]);
int NewStateGroup_(USERp user, STATEp SpriteGroup[]); int NewStateGroup_(USERp user, STATEp SpriteGroup[]);
int NewStateGroup(DSWActor* actor, STATEp SpriteGroup[]);
void SectorMidPoint(short sectnum, int *xmid, int *ymid, int *zmid); void SectorMidPoint(short sectnum, int *xmid, int *ymid, int *zmid);
USERp SpawnUser(short SpriteNum, short id, STATEp state); USERp SpawnUser(short SpriteNum, short id, STATEp state);
USERp SpawnUser(DSWActor* actor, short id, STATEp state); USERp SpawnUser(DSWActor* actor, short id, STATEp state);

View file

@ -431,7 +431,7 @@ int InitHornetCircle(DSWActor* actor)
u->ActorActionFunc = DoHornetCircle; u->ActorActionFunc = DoHornetCircle;
NewStateGroup_(SpriteNum, u->ActorActionSet->Run); NewStateGroup(actor, u->ActorActionSet->Run);
// set it close // set it close
DoActorSetSpeed(actor, FAST_SPEED); DoActorSetSpeed(actor, FAST_SPEED);
@ -546,7 +546,7 @@ DoHornetDeath(DSWActor* actor)
{ {
RESET(u->Flags, SPR_FALLING|SPR_SLIDING); RESET(u->Flags, SPR_FALLING|SPR_SLIDING);
RESET(sp->cstat, CSTAT_SPRITE_YFLIP); // If upside down, reset it RESET(sp->cstat, CSTAT_SPRITE_YFLIP); // If upside down, reset it
NewStateGroup_(SpriteNum, u->ActorActionSet->Dead); NewStateGroup(actor, u->ActorActionSet->Dead);
DeleteNoSoundOwner(SpriteNum); DeleteNoSoundOwner(SpriteNum);
return 0; return 0;
} }

View file

@ -2018,9 +2018,9 @@ DoNinjaMove(DSWActor* actor)
if (TEST(u->Flags2, SPR2_DYING)) if (TEST(u->Flags2, SPR2_DYING))
{ {
if (sw_ninjahack) if (sw_ninjahack)
NewStateGroup_(SpriteNum, sg_NinjaHariKari); NewStateGroup(actor, sg_NinjaHariKari);
else else
NewStateGroup_(SpriteNum, sg_NinjaGrabThroat); NewStateGroup(actor, sg_NinjaGrabThroat);
return 0; return 0;
} }
@ -2120,9 +2120,9 @@ int DoNinjaPain(DSWActor* actor)
if (TEST(u->Flags2, SPR2_DYING)) if (TEST(u->Flags2, SPR2_DYING))
{ {
if (sw_ninjahack) if (sw_ninjahack)
NewStateGroup_(SpriteNum, sg_NinjaHariKari); NewStateGroup(actor, sg_NinjaHariKari);
else else
NewStateGroup_(SpriteNum, sg_NinjaGrabThroat); NewStateGroup(actor, sg_NinjaGrabThroat);
return 0; return 0;
} }

View file

@ -6818,7 +6818,7 @@ PlayerStateControl(int16_t SpriteNum)
if (!u->State->Pic) if (!u->State->Pic)
{ {
NewStateGroup_(SpriteNum, (STATEp *) u->State->NextState); NewStateGroup(actor, (STATEp *) u->State->NextState);
} }
} }

View file

@ -981,7 +981,7 @@ InitRipperHang(DSWActor* actor)
return 0; return 0;
} }
NewStateGroup_(SpriteNum, sg_RipperHangJump); NewStateGroup(actor, sg_RipperHangJump);
u->StateFallOverride = sg_RipperHangFall; u->StateFallOverride = sg_RipperHangFall;
DoActorSetSpeed(actor, FAST_SPEED); DoActorSetSpeed(actor, FAST_SPEED);
@ -1008,7 +1008,7 @@ DoRipperHang(DSWActor* actor)
if ((u->WaitTics -= ACTORMOVETICS) > 0) if ((u->WaitTics -= ACTORMOVETICS) > 0)
return 0; return 0;
NewStateGroup_(SpriteNum, sg_RipperJumpAttack); NewStateGroup(actor, sg_RipperJumpAttack);
// move to the 2nd frame - past the pause frame // move to the 2nd frame - past the pause frame
u->Tics += u->State->Tics; u->Tics += u->State->Tics;
return 0; return 0;
@ -1038,7 +1038,7 @@ DoRipperMoveHang(DSWActor* actor)
hit_wall = NORM_WALL(u->ret); hit_wall = NORM_WALL(u->ret);
NewStateGroup_(SpriteNum, u->ActorActionSet->Special[1]); NewStateGroup(actor, u->ActorActionSet->Special[1]);
u->WaitTics = 2 + ((RANDOM_P2(4 << 8) >> 8) * 120); u->WaitTics = 2 + ((RANDOM_P2(4 << 8) >> 8) * 120);
// hang flush with the wall // hang flush with the wall
@ -1167,7 +1167,7 @@ DoRipperQuickJump(DSWActor* actor)
if (TEST(tsp->extra, SPRX_PLAYER_OR_ENEMY)) if (TEST(tsp->extra, SPRX_PLAYER_OR_ENEMY))
{ {
NewStateGroup_(SpriteNum, sg_RipperJumpAttack); NewStateGroup(actor, sg_RipperJumpAttack);
// move past the first state // move past the first state
u->Tics = 30; u->Tics = 30;
return true; return true;
@ -1211,12 +1211,13 @@ int DoRipperPain(DSWActor* actor)
int DoRipperRipHeart(short SpriteNum) int DoRipperRipHeart(short SpriteNum)
// CTW MODIFICATION END // CTW MODIFICATION END
{ {
auto actor = &swActors[SpriteNum];
SPRITEp sp = &sprite[SpriteNum]; SPRITEp sp = &sprite[SpriteNum];
USERp u = User[SpriteNum].Data(); USERp u = User[SpriteNum].Data();
SPRITEp tsp = u->tgt_sp(); SPRITEp tsp = u->tgt_sp();
NewStateGroup_(SpriteNum, sg_RipperHeart); NewStateGroup(actor, sg_RipperHeart);
u->WaitTics = 6 * 120; u->WaitTics = 6 * 120;
// player face ripper // player face ripper
@ -1234,7 +1235,7 @@ int DoRipperStandHeart(DSWActor* actor)
NullRipper(actor); NullRipper(actor);
if ((u->WaitTics -= ACTORMOVETICS) <= 0) if ((u->WaitTics -= ACTORMOVETICS) <= 0)
NewStateGroup_(SpriteNum, sg_RipperRun); NewStateGroup(actor, sg_RipperRun);
return 0; return 0;
} }

View file

@ -978,7 +978,7 @@ InitRipper2Hang(DSWActor* actor)
return 0; return 0;
} }
NewStateGroup_(SpriteNum, sg_Ripper2HangJump); NewStateGroup(actor, sg_Ripper2HangJump);
u->StateFallOverride = sg_Ripper2HangFall; u->StateFallOverride = sg_Ripper2HangFall;
DoActorSetSpeed(actor, FAST_SPEED); DoActorSetSpeed(actor, FAST_SPEED);
@ -1005,7 +1005,7 @@ DoRipper2Hang(DSWActor* actor)
if ((u->WaitTics -= ACTORMOVETICS) > 0) if ((u->WaitTics -= ACTORMOVETICS) > 0)
return 0; return 0;
NewStateGroup_(SpriteNum, sg_Ripper2JumpAttack); NewStateGroup(actor, sg_Ripper2JumpAttack);
// move to the 2nd frame - past the pause frame // move to the 2nd frame - past the pause frame
u->Tics += u->State->Tics; u->Tics += u->State->Tics;
@ -1040,7 +1040,7 @@ DoRipper2MoveHang(DSWActor* actor)
hit_wall = NORM_WALL(u->ret); hit_wall = NORM_WALL(u->ret);
NewStateGroup_(SpriteNum, u->ActorActionSet->Special[1]); NewStateGroup(actor, u->ActorActionSet->Special[1]);
if (RANDOM_P2(1024<<8)>>8 > 500) if (RANDOM_P2(1024<<8)>>8 > 500)
u->WaitTics = ((RANDOM_P2(2 << 8) >> 8) * 120); u->WaitTics = ((RANDOM_P2(2 << 8) >> 8) * 120);
else else
@ -1180,7 +1180,7 @@ DoRipper2QuickJump(DSWActor* actor)
if (TEST(tsp->extra, SPRX_PLAYER_OR_ENEMY)) if (TEST(tsp->extra, SPRX_PLAYER_OR_ENEMY))
{ {
NewStateGroup_(SpriteNum, sg_Ripper2JumpAttack); NewStateGroup(actor, sg_Ripper2JumpAttack);
// move past the first state // move past the first state
u->Tics = 30; u->Tics = 30;
return true; return true;
@ -1220,12 +1220,13 @@ int DoRipper2Pain(DSWActor* actor)
int DoRipper2RipHeart(short SpriteNum) int DoRipper2RipHeart(short SpriteNum)
{ {
auto actor = &swActors[SpriteNum];
SPRITEp sp = &sprite[SpriteNum]; SPRITEp sp = &sprite[SpriteNum];
USERp u = User[SpriteNum].Data(); USERp u = User[SpriteNum].Data();
SPRITEp tsp = u->tgt_sp(); SPRITEp tsp = u->tgt_sp();
NewStateGroup_(SpriteNum, sg_Ripper2Heart); NewStateGroup(actor, sg_Ripper2Heart);
u->WaitTics = 6 * 120; u->WaitTics = 6 * 120;
// player face ripper2 // player face ripper2
@ -1245,7 +1246,7 @@ int DoRipper2StandHeart(DSWActor* actor)
PlaySound(DIGI_RIPPER2HEARTOUT, sp, v3df_none, CHAN_RipHeart); PlaySound(DIGI_RIPPER2HEARTOUT, sp, v3df_none, CHAN_RipHeart);
if ((u->WaitTics -= ACTORMOVETICS) <= 0) if ((u->WaitTics -= ACTORMOVETICS) <= 0)
NewStateGroup_(SpriteNum, sg_Ripper2Run); NewStateGroup(actor, sg_Ripper2Run);
return 0; return 0;
} }
@ -1358,7 +1359,7 @@ int InitRipper2Charge(DSWActor* actor)
InitActorMoveCloser(actor); InitActorMoveCloser(actor);
NewStateGroup_(SpriteNum, sg_Ripper2RunFast); NewStateGroup(actor, sg_Ripper2RunFast);
return 0; return 0;
} }

View file

@ -790,7 +790,7 @@ int DoSerpMove(DSWActor* actor)
case 0: case 0:
if (u->Health != u->MaxHealth) if (u->Health != u->MaxHealth)
{ {
NewStateGroup_(SpriteNum, sg_SerpSkullSpell); NewStateGroup(actor, sg_SerpSkullSpell);
u->Counter2++; u->Counter2++;
} }
break; break;
@ -799,7 +799,7 @@ int DoSerpMove(DSWActor* actor)
//if (u->Health <= DIV2(u->MaxHealth)) //if (u->Health <= DIV2(u->MaxHealth))
{ {
if (u->Counter <= 0) if (u->Counter <= 0)
NewStateGroup_(SpriteNum, sg_SerpSkullSpell); NewStateGroup(actor, sg_SerpSkullSpell);
} }
break; break;
} }

View file

@ -484,7 +484,7 @@ int DoSkullWait(DSWActor* actor)
{ {
sp->xvel = 0; sp->xvel = 0;
u->jump_speed = -600; u->jump_speed = -600;
NewStateGroup_(SpriteNum, sg_SkullJump); NewStateGroup(actor, sg_SkullJump);
DoBeginJump(actor); DoBeginJump(actor);
} }
} }
@ -500,7 +500,7 @@ int DoSkullWait(DSWActor* actor)
sp->ang = getangle(u->targetActor->s().x - sp->x, u->targetActor->s().y - sp->y); sp->ang = getangle(u->targetActor->s().x - sp->x, u->targetActor->s().y - sp->y);
sp->xvel = 128 + (RANDOM_P2(256<<8)>>8); sp->xvel = 128 + (RANDOM_P2(256<<8)>>8);
u->jump_speed = -700; u->jump_speed = -700;
NewStateGroup_(SpriteNum, sg_SkullJump); NewStateGroup(actor, sg_SkullJump);
DoBeginJump(actor); DoBeginJump(actor);
} }
} }
@ -897,7 +897,7 @@ int DoBettyWait(DSWActor* actor)
{ {
sp->xvel = 0; sp->xvel = 0;
u->jump_speed = -600; u->jump_speed = -600;
NewStateGroup_(SpriteNum, sg_BettyJump); NewStateGroup(actor, sg_BettyJump);
DoBeginJump(actor); DoBeginJump(actor);
} }
} }
@ -913,7 +913,7 @@ int DoBettyWait(DSWActor* actor)
sp->ang = getangle(u->targetActor->s().x - sp->x, u->targetActor->s().y - sp->y); sp->ang = getangle(u->targetActor->s().x - sp->x, u->targetActor->s().y - sp->y);
sp->xvel = 128 + (RANDOM_P2(256<<8)>>8); sp->xvel = 128 + (RANDOM_P2(256<<8)>>8);
u->jump_speed = -700; u->jump_speed = -700;
NewStateGroup_(SpriteNum, sg_BettyJump); NewStateGroup(actor, sg_BettyJump);
DoBeginJump(actor); DoBeginJump(actor);
} }
} }

View file

@ -4721,6 +4721,11 @@ int NewStateGroup_(USERp user, STATEp StateGroup[])
return NewStateGroup_(user->SpriteNum, StateGroup); return NewStateGroup_(user->SpriteNum, StateGroup);
} }
int NewStateGroup(DSWActor* actor, STATEp StateGroup[])
{
return NewStateGroup_(actor->GetSpriteIndex(), StateGroup);
}
bool bool
SpriteOverlap(int16_t spritenum_a, int16_t spritenum_b) SpriteOverlap(int16_t spritenum_a, int16_t spritenum_b)
@ -6622,7 +6627,7 @@ StateControl(int16_t SpriteNum)
if (!u->State->Pic) if (!u->State->Pic)
{ {
NewStateGroup_(SpriteNum, (STATEp *) u->State->NextState); NewStateGroup(actor, (STATEp *) u->State->NextState);
} }
} }

View file

@ -3184,7 +3184,7 @@ ActorTrackDecide(TRACK_POINTp tpoint, short SpriteNum)
break; break;
case TRACK_ACTOR_STAND: case TRACK_ACTOR_STAND:
NewStateGroup_(SpriteNum, u->ActorActionSet->Stand); NewStateGroup(actor, u->ActorActionSet->Stand);
break; break;
case TRACK_ACTOR_JUMP: case TRACK_ACTOR_JUMP:
@ -3343,7 +3343,7 @@ ActorTrackDecide(TRACK_POINTp tpoint, short SpriteNum)
else else
u->WaitTics = tpoint->tag_high * 128; u->WaitTics = tpoint->tag_high * 128;
NewStateGroup_(SpriteNum, u->ActorActionSet->Stand); NewStateGroup(actor, u->ActorActionSet->Stand);
} }
} }
} }
@ -3357,7 +3357,7 @@ ActorTrackDecide(TRACK_POINTp tpoint, short SpriteNum)
else else
u->WaitTics = tpoint->tag_high * 128; u->WaitTics = tpoint->tag_high * 128;
NewStateGroup_(SpriteNum, u->ActorActionSet->Sit); NewStateGroup(actor, u->ActorActionSet->Sit);
} }
} }
@ -3370,7 +3370,7 @@ ActorTrackDecide(TRACK_POINTp tpoint, short SpriteNum)
else else
u->WaitTics = tpoint->tag_high * 128; u->WaitTics = tpoint->tag_high * 128;
NewStateGroup_(SpriteNum, u->ActorActionSet->Stand); NewStateGroup(actor, u->ActorActionSet->Stand);
} }
} }
@ -3405,20 +3405,20 @@ ActorTrackDecide(TRACK_POINTp tpoint, short SpriteNum)
case TRACK_ACTOR_CRAWL: case TRACK_ACTOR_CRAWL:
if (u->Rot != u->ActorActionSet->Crawl) if (u->Rot != u->ActorActionSet->Crawl)
NewStateGroup_(SpriteNum, u->ActorActionSet->Crawl); NewStateGroup(actor, u->ActorActionSet->Crawl);
else else
NewStateGroup_(SpriteNum, u->ActorActionSet->Rise); NewStateGroup(actor, u->ActorActionSet->Rise);
break; break;
case TRACK_ACTOR_SWIM: case TRACK_ACTOR_SWIM:
if (u->Rot != u->ActorActionSet->Swim) if (u->Rot != u->ActorActionSet->Swim)
NewStateGroup_(SpriteNum, u->ActorActionSet->Swim); NewStateGroup(actor, u->ActorActionSet->Swim);
else else
NewStateGroup_(SpriteNum, u->ActorActionSet->Rise); NewStateGroup(actor, u->ActorActionSet->Rise);
break; break;
case TRACK_ACTOR_FLY: case TRACK_ACTOR_FLY:
NewStateGroup_(SpriteNum, u->ActorActionSet->Fly); NewStateGroup(actor, u->ActorActionSet->Fly);
break; break;
case TRACK_ACTOR_SIT: case TRACK_ACTOR_SIT:
@ -3430,7 +3430,7 @@ ActorTrackDecide(TRACK_POINTp tpoint, short SpriteNum)
else else
u->WaitTics = tpoint->tag_high * 128; u->WaitTics = tpoint->tag_high * 128;
NewStateGroup_(SpriteNum, u->ActorActionSet->Sit); NewStateGroup(actor, u->ActorActionSet->Sit);
} }
break; break;
@ -3439,7 +3439,7 @@ ActorTrackDecide(TRACK_POINTp tpoint, short SpriteNum)
if (u->ActorActionSet->Death2) if (u->ActorActionSet->Death2)
{ {
u->WaitTics = 4 * 120; u->WaitTics = 4 * 120;
NewStateGroup_(SpriteNum, u->ActorActionSet->Death1); NewStateGroup(actor, u->ActorActionSet->Death1);
} }
break; break;
@ -3448,7 +3448,7 @@ ActorTrackDecide(TRACK_POINTp tpoint, short SpriteNum)
if (u->ActorActionSet->Death2) if (u->ActorActionSet->Death2)
{ {
u->WaitTics = 4 * 120; u->WaitTics = 4 * 120;
NewStateGroup_(SpriteNum, u->ActorActionSet->Death2); NewStateGroup(actor, u->ActorActionSet->Death2);
} }
break; break;
@ -3461,7 +3461,7 @@ ActorTrackDecide(TRACK_POINTp tpoint, short SpriteNum)
sp->xvel <<= 1; sp->xvel <<= 1;
u->jump_speed = -495; u->jump_speed = -495;
DoActorBeginJump(actor); DoActorBeginJump(actor);
NewStateGroup_(SpriteNum, u->ActorActionSet->DeathJump); NewStateGroup(actor, u->ActorActionSet->DeathJump);
} }
break; break;
@ -3475,7 +3475,7 @@ ActorTrackDecide(TRACK_POINTp tpoint, short SpriteNum)
else else
u->WaitTics = tpoint->tag_high * 128; u->WaitTics = tpoint->tag_high * 128;
NewStateGroup_(SpriteNum, u->ActorActionSet->CloseAttack[0]); NewStateGroup(actor, u->ActorActionSet->CloseAttack[0]);
} }
break; break;
@ -3489,7 +3489,7 @@ ActorTrackDecide(TRACK_POINTp tpoint, short SpriteNum)
else else
u->WaitTics = tpoint->tag_high * 128; u->WaitTics = tpoint->tag_high * 128;
NewStateGroup_(SpriteNum, u->ActorActionSet->CloseAttack[1]); NewStateGroup(actor, u->ActorActionSet->CloseAttack[1]);
} }
break; break;
@ -3511,7 +3511,7 @@ ActorTrackDecide(TRACK_POINTp tpoint, short SpriteNum)
else else
u->WaitTics = tpoint->tag_high * 128; u->WaitTics = tpoint->tag_high * 128;
NewStateGroup_(SpriteNum, *ap); NewStateGroup(actor, *ap);
} }
break; break;
@ -3604,7 +3604,7 @@ ActorTrackDecide(TRACK_POINTp tpoint, short SpriteNum)
// //
SET(u->Flags, SPR_CLIMBING); SET(u->Flags, SPR_CLIMBING);
NewStateGroup_(SpriteNum, u->ActorActionSet->Climb); NewStateGroup(actor, u->ActorActionSet->Climb);
sp->zvel = -Z(1); sp->zvel = -Z(1);
} }
@ -3677,7 +3677,7 @@ ActorFollowTrack(short SpriteNum, short locktics)
if (u->WaitTics <= 0) if (u->WaitTics <= 0)
{ {
RESET(u->Flags, SPR_DONT_UPDATE_ANG); RESET(u->Flags, SPR_DONT_UPDATE_ANG);
NewStateGroup_(SpriteNum, u->ActorActionSet->Run); NewStateGroup(actor, u->ActorActionSet->Run);
u->WaitTics = 0; u->WaitTics = 0;
} }

View file

@ -5259,6 +5259,7 @@ ActorChooseDeath(short SpriteNum, short Weapon)
int int
ActorHealth(short SpriteNum, short amt) ActorHealth(short SpriteNum, short amt)
{ {
auto actor = &swActors[SpriteNum];
SPRITEp sp = &sprite[SpriteNum]; SPRITEp sp = &sprite[SpriteNum];
USERp u = User[SpriteNum].Data(); USERp u = User[SpriteNum].Data();
extern int FinishAnim; extern int FinishAnim;
@ -5349,9 +5350,9 @@ ActorHealth(short SpriteNum, short amt)
sp->ang = NORM_ANGLE(getangle(u->targetActor->s().x - sp->x, u->targetActor->s().y - sp->y) + 1024); sp->ang = NORM_ANGLE(getangle(u->targetActor->s().x - sp->x, u->targetActor->s().y - sp->y) + 1024);
RESET(sp->cstat, CSTAT_SPRITE_YFLIP); RESET(sp->cstat, CSTAT_SPRITE_YFLIP);
if (sw_ninjahack) if (sw_ninjahack)
NewStateGroup_(SpriteNum, sg_NinjaHariKari); NewStateGroup(actor, sg_NinjaHariKari);
else else
NewStateGroup_(SpriteNum, sg_NinjaGrabThroat); NewStateGroup(actor, sg_NinjaGrabThroat);
} }
break; break;
} }
@ -5411,6 +5412,7 @@ SopCheckKill(SECTOR_OBJECTp sop)
int int
ActorPain(short SpriteNum) ActorPain(short SpriteNum)
{ {
auto actor = &swActors[SpriteNum];
USERp u = User[SpriteNum].Data(); USERp u = User[SpriteNum].Data();
//if (u->LastDamage < u->PainThreshold) // This doesn't work well at all because of //if (u->LastDamage < u->PainThreshold) // This doesn't work well at all because of
@ -5436,7 +5438,7 @@ ActorPain(short SpriteNum)
{ {
ActorLeaveTrack(SpriteNum); ActorLeaveTrack(SpriteNum);
u->WaitTics = 60; u->WaitTics = 60;
NewStateGroup_(SpriteNum, u->ActorActionSet->Pain); NewStateGroup(actor, u->ActorActionSet->Pain);
return true; return true;
} }
} }
@ -5455,7 +5457,7 @@ ActorPainPlasma(short SpriteNum)
if (u->ActorActionSet && u->ActorActionSet->Pain) if (u->ActorActionSet && u->ActorActionSet->Pain)
{ {
u->WaitTics = PLASMA_FOUNTAIN_TIME; u->WaitTics = PLASMA_FOUNTAIN_TIME;
NewStateGroup_(SpriteNum, u->ActorActionSet->Pain); NewStateGroup(actor, u->ActorActionSet->Pain);
return true; return true;
} }
else else
@ -12724,7 +12726,7 @@ InitSpellRing(PLAYERp pp)
u->floor_dist = Z(10); u->floor_dist = Z(10);
//u->RotNum = 5; //u->RotNum = 5;
//NewStateGroup_(SpriteNum, &sg_Ring); //NewStateGroup(actor, &sg_Ring);
//SET(u->Flags, SPR_XFLIP_TOGGLE); //SET(u->Flags, SPR_XFLIP_TOGGLE);
// put it out there // put it out there