diff --git a/source/games/sw/src/actor.cpp b/source/games/sw/src/actor.cpp index d7bfeb046..8c6852684 100644 --- a/source/games/sw/src/actor.cpp +++ b/source/games/sw/src/actor.cpp @@ -1086,7 +1086,7 @@ void DSWActor::callAction() void DSWActor::callStateAction() { - user.__legacyState.State->CallAction(this); + user.State->CallAction(this); } END_SW_NS diff --git a/source/games/sw/src/break.cpp b/source/games/sw/src/break.cpp index 5be50c509..7ed97034b 100644 --- a/source/games/sw/src/break.cpp +++ b/source/games/sw/src/break.cpp @@ -1005,7 +1005,7 @@ bool NullActor(DSWActor* actor) return true; // does not have a STATE or FUNC to control it - if (!actor->user.__legacyState.State) + if (!actor->user.State) return true; // does not have a STATE or FUNC to control it diff --git a/source/games/sw/src/draw.cpp b/source/games/sw/src/draw.cpp index 2978eec8f..ed0d376bf 100644 --- a/source/games/sw/src/draw.cpp +++ b/source/games/sw/src/draw.cpp @@ -107,11 +107,11 @@ int SetActorRotation(tspriteArray& tsprites, int tSpriteNum, const DVector2& vie tspritetype* tsp = tsprites.get(tSpriteNum); auto ownerActor = static_cast(tsp->ownerActor); - if (!ownerActor->hasU() || ownerActor->user.__legacyState.State == nullptr) + if (!ownerActor->hasU() || ownerActor->user.State == nullptr) return 0; - unsigned sprite = ownerActor->user.__legacyState.State->sprite; - unsigned frame = ownerActor->user.__legacyState.State->Frame - 'A'; + unsigned sprite = ownerActor->user.State->sprite; + unsigned frame = ownerActor->user.State->Frame - 'A'; if (SpriteDefs.Size() <= sprite) return 0; auto spdef = &SpriteDefs[sprite]; @@ -479,9 +479,9 @@ void DoStarView(tspritetype* tsp, DSWActor* tActor, double viewz) if (abs(zdiff) > 24) { if (tActor->user.__legacyState.StateStart == s_StarStuck) - tsp->setspritetexture(picFromState(&s_StarDownStuck[tActor->user.__legacyState.State - s_StarStuck])); + tsp->setspritetexture(picFromState(&s_StarDownStuck[tActor->user.State - s_StarStuck])); else - tsp->setspritetexture(picFromState(&s_StarDown[tActor->user.__legacyState.State - s_Star])); + tsp->setspritetexture(picFromState(&s_StarDown[tActor->user.State - s_Star])); if (zdiff > 0) tsp->cstat |= (CSTAT_SPRITE_YFLIP); @@ -1059,7 +1059,7 @@ void PreDrawStackedWater(void) // copy everything reasonable from the user that // analyzesprites() needs to draw the image - actorNew->user.__legacyState.State = itActor2->user.__legacyState.State; + actorNew->user.State = itActor2->user.State; actorNew->user.__legacyState.Rot = itActor2->user.__legacyState.Rot; actorNew->user.__legacyState.StateStart = itActor2->user.__legacyState.StateStart; actorNew->user.__legacyState.StateEnd = itActor2->user.__legacyState.StateEnd; diff --git a/source/games/sw/src/game.h b/source/games/sw/src/game.h index 42aa6e3dc..834922372 100644 --- a/source/games/sw/src/game.h +++ b/source/games/sw/src/game.h @@ -697,9 +697,10 @@ struct USER VMFunction* ActorActionFunc; PERSONALITY* Personality; + FState* State; + struct LegacyState { - FState* State; FState* Rot; FState* StateStart; FState* StateEnd; diff --git a/source/games/sw/src/girlninj.cpp b/source/games/sw/src/girlninj.cpp index ba967000d..4b3db3831 100644 --- a/source/games/sw/src/girlninj.cpp +++ b/source/games/sw/src/girlninj.cpp @@ -156,7 +156,7 @@ FState s_GirlNinjaRise[] = {SPR_GIRLNINJA_STAND, 'A', GIRLNINJA_STAND_RATE, &AF(NullGirlNinja), &s_GirlNinjaRise[2]}, {SPR_NULL, 0, 0, nullptr, &s_GirlNinjaRun[0]}, // JBF: s_GirlNinjaRun really is supposed to be the // pointer to the state group. See StateControl() where - // it says "if (!actor->user.__legacyState.State->Pic)". + // it says "if (!actor->user.State->Pic)". }; diff --git a/source/games/sw/src/ninja.cpp b/source/games/sw/src/ninja.cpp index 3ba9f575c..0acb0f234 100644 --- a/source/games/sw/src/ninja.cpp +++ b/source/games/sw/src/ninja.cpp @@ -1544,7 +1544,7 @@ void SpawnPlayerUnderSprite(DSWPlayer* pp) actor->spr.cstat |= (CSTAT_SPRITE_BLOCK | CSTAT_SPRITE_BLOCK_HITSCAN); actor->spr.extra |= (SPRX_PLAYER_OR_ENEMY); - actor->user.__legacyState.State = plActor->user.__legacyState.State; + actor->user.State = plActor->user.State; NewStateGroup(pp->PlayerUnderActor, plActor->user.__legacyState.Rot); actor->user.Radius = plActor->user.Radius; diff --git a/source/games/sw/src/player.cpp b/source/games/sw/src/player.cpp index e0cf77771..812dace04 100644 --- a/source/games/sw/src/player.cpp +++ b/source/games/sw/src/player.cpp @@ -1117,7 +1117,7 @@ void UpdatePlayerUnderSprite(DSWPlayer* pp) // add diff to ceiling act_under->spr.pos.Z = act_under->sector()->ceilingz + zdiff; - act_under->user.__legacyState.State = act_over->user.__legacyState.State; + act_under->user.State = act_over->user.State; act_under->user.__legacyState.Rot = act_over->user.__legacyState.Rot; act_under->user.__legacyState.StateStart = act_over->user.__legacyState.StateStart; act_under->spr.setspritetexture(act_over->spr.spritetexture()); @@ -5889,31 +5889,31 @@ void PlayerStateControl(DSWActor* actor) actor->user.Tics += synctics; // Skip states if too much time has passed - while (actor->user.Tics >= (actor->user.__legacyState.State->Tics & SF_TICS_MASK)) + while (actor->user.Tics >= (actor->user.State->Tics & SF_TICS_MASK)) { // Set Tics - actor->user.Tics -= (actor->user.__legacyState.State->Tics & SF_TICS_MASK); + actor->user.Tics -= (actor->user.State->Tics & SF_TICS_MASK); // Transition to the next state - actor->user.__legacyState.State = actor->user.__legacyState.State->NextState; + actor->user.State = actor->user.State->NextState; // !JIM! Added this so I can do quick calls in player states! // Need this in order for floor blood and footprints to not get called more than once. - while ((actor->user.__legacyState.State->Tics & SF_QUICK_CALL)) + while ((actor->user.State->Tics & SF_QUICK_CALL)) { // Call it once and go to the next state actor->callStateAction(); // if still on the same QUICK_CALL should you // go to the next state. - if ((actor->user.__legacyState.State->Tics & SF_QUICK_CALL)) - actor->user.__legacyState.State = actor->user.__legacyState.State->NextState; + if ((actor->user.State->Tics & SF_QUICK_CALL)) + actor->user.State = actor->user.State->NextState; } - if (actor->user.__legacyState.State->sprite == SPR_NULL) + if (actor->user.State->sprite == SPR_NULL) { - NewStateGroup(actor, actor->user.__legacyState.State->NextState); + NewStateGroup(actor, actor->user.State->NextState); } } @@ -5921,7 +5921,7 @@ void PlayerStateControl(DSWActor* actor) actor->setPicFromState(); // Call the correct animator - if ((actor->user.__legacyState.State->Tics & SF_PLAYER_FUNC)) + if ((actor->user.State->Tics & SF_PLAYER_FUNC)) actor->callStateAction(); return; diff --git a/source/games/sw/src/ripper.cpp b/source/games/sw/src/ripper.cpp index d1cc92c57..060fa1f2d 100644 --- a/source/games/sw/src/ripper.cpp +++ b/source/games/sw/src/ripper.cpp @@ -604,7 +604,7 @@ int DoRipperHang(DSWActor* actor) NewStateGroup(actor, s_RipperJumpAttack); // move to the 2nd frame - past the pause frame - actor->user.Tics += actor->user.__legacyState.State->Tics; + actor->user.Tics += actor->user.State->Tics; return 0; } diff --git a/source/games/sw/src/ripper2.cpp b/source/games/sw/src/ripper2.cpp index 2c02039ae..691ed4f17 100644 --- a/source/games/sw/src/ripper2.cpp +++ b/source/games/sw/src/ripper2.cpp @@ -558,7 +558,7 @@ int DoRipper2Hang(DSWActor* actor) NewStateGroup(actor, s_Ripper2JumpAttack); // move to the 2nd frame - past the pause frame - actor->user.Tics += actor->user.__legacyState.State->Tics; + actor->user.Tics += actor->user.State->Tics; return 0; } diff --git a/source/games/sw/src/save.cpp b/source/games/sw/src/save.cpp index 0f722ac57..5d49cf30e 100644 --- a/source/games/sw/src/save.cpp +++ b/source/games/sw/src/save.cpp @@ -593,13 +593,13 @@ FSerializer& Serialize(FSerializer& arc, const char* keyname, USER& w, USER* def if (arc.BeginObject(keyname)) { // The default serializer cannot handle the statically defined states so call these functons explicitly. - _Serialize(arc, "State", w.__legacyState.State, &def->__legacyState.State); + _Serialize(arc, "State", w.State, &def->State); _Serialize(arc, "Rot", w.__legacyState.Rot, &def->__legacyState.Rot); _Serialize(arc, "StateStart", w.__legacyState.StateStart, &def->__legacyState.StateStart); _Serialize(arc, "StateEnd", w.__legacyState.StateEnd, &def->__legacyState.StateEnd); _Serialize(arc, "StateFallOverride", w.__legacyState.StateFallOverride, &def->__legacyState.StateFallOverride); /* - ("State", w.__legacyState.State, def->__legacyState.State) + ("State", w.State, def->State) ("Rot", w.__legacyState.Rot, def->__legacyState.Rot) ("StateStart", w.__legacyState.StateStart, def->__legacyState.StateStart) ("StateEnd", w.__legacyState.StateEnd, def->__legacyState.StateEnd) diff --git a/source/games/sw/src/sprite.cpp b/source/games/sw/src/sprite.cpp index 019b84edf..7f7cd5103 100644 --- a/source/games/sw/src/sprite.cpp +++ b/source/games/sw/src/sprite.cpp @@ -690,7 +690,7 @@ void ChangeState(DSWActor* actor, FState* statep) return; actor->user.Tics = 0; - actor->user.__legacyState.State = actor->user.__legacyState.StateStart = statep; + actor->user.State = actor->user.__legacyState.StateStart = statep; actor->spr.cstat2 |= CSTAT2_SPRITE_NOANIMATE; // just in case } @@ -761,7 +761,7 @@ void SpawnUser(DSWActor* actor, short id, FState* state) PRODUCTION_ASSERT(actor->hasU()); // be careful State can be nullptr - actor->user.__legacyState.State = actor->user.__legacyState.StateStart = state; + actor->user.State = actor->user.__legacyState.StateStart = state; change_actor_stat(actor, actor->spr.statnum); @@ -822,7 +822,7 @@ DSWActor* SpawnActor(int stat, int id, FState* state, sectortype* sect, const DV SpawnUser(spawnedActor, id, state); // be careful State can be nullptr - if (spawnedActor->user.__legacyState.State) + if (spawnedActor->user.State) { spawnedActor->setPicFromState(); spawnedActor->spr.cstat2 |= CSTAT2_SPRITE_NOANIMATE; // just in case @@ -4198,11 +4198,11 @@ int NewStateGroup(DSWActor* actor, FState* StateGroup) // Kind of a goofy check, but it should catch alot of invalid states! - if (actor->user.__legacyState.State && (actor->user.__legacyState.State->sprite < 0 || actor->user.__legacyState.State->sprite > SPR_MAX)) // JBF: verify this! + if (actor->user.State && (actor->user.State->sprite < 0 || actor->user.State->sprite > SPR_MAX)) // JBF: verify this! return 0; actor->user.__legacyState.Rot = StateGroup; - actor->user.__legacyState.State = actor->user.__legacyState.StateStart = StateGroup; + actor->user.State = actor->user.__legacyState.StateStart = StateGroup; actor->user.Tics = 0; @@ -4698,18 +4698,18 @@ int DoCoin(DSWActor* actor) { if (actor->user.__legacyState.StateStart != s_GreenCoin) { - offset = int(actor->user.__legacyState.State - actor->user.__legacyState.StateStart); + offset = int(actor->user.State - actor->user.__legacyState.StateStart); ChangeState(actor, s_GreenCoin); - actor->user.__legacyState.State = actor->user.__legacyState.StateStart + offset; + actor->user.State = actor->user.__legacyState.StateStart + offset; } } else if (actor->user.WaitTics < 20*120) { if (actor->user.__legacyState.StateStart != s_YellowCoin) { - offset = int(actor->user.__legacyState.State - actor->user.__legacyState.StateStart); + offset = int(actor->user.State - actor->user.__legacyState.StateStart); ChangeState(actor, s_YellowCoin); - actor->user.__legacyState.State = actor->user.__legacyState.StateStart + offset; + actor->user.State = actor->user.__legacyState.StateStart + offset; } } @@ -5918,7 +5918,7 @@ int StateControl(DSWActor* actor) { short StateTics; - if (!actor->user.__legacyState.State) + if (!actor->user.State) { actor->callAction(); return 0; @@ -5930,11 +5930,11 @@ int StateControl(DSWActor* actor) actor->user.Tics += ACTORMOVETICS; // Skip states if too much time has passed - while (actor->user.Tics >= (actor->user.__legacyState.State->Tics & SF_TICS_MASK)) + while (actor->user.Tics >= (actor->user.State->Tics & SF_TICS_MASK)) { - StateTics = (actor->user.__legacyState.State->Tics & SF_TICS_MASK); + StateTics = (actor->user.State->Tics & SF_TICS_MASK); - if ((actor->user.__legacyState.State->Tics & SF_TIC_ADJUST)) + if ((actor->user.State->Tics & SF_TIC_ADJUST)) { ASSERT(actor->user.__legacyState.Attrib); ASSERT(actor->user.speed < MAX_SPEED); @@ -5947,10 +5947,10 @@ int StateControl(DSWActor* actor) actor->user.Tics -= StateTics; // Transition to the next state - actor->user.__legacyState.State = actor->user.__legacyState.State->NextState; + actor->user.State = actor->user.State->NextState; // Look for flags embedded into the Tics variable - while ((actor->user.__legacyState.State->Tics & SF_QUICK_CALL)) + while ((actor->user.State->Tics & SF_QUICK_CALL)) { // Call it once and go to the next state actor->callStateAction(); @@ -5962,27 +5962,27 @@ int StateControl(DSWActor* actor) // if still on the same QUICK_CALL should you // go to the next state. - if ((actor->user.__legacyState.State->Tics & SF_QUICK_CALL)) - actor->user.__legacyState.State = actor->user.__legacyState.State->NextState; + if ((actor->user.State->Tics & SF_QUICK_CALL)) + actor->user.State = actor->user.State->NextState; } if (!actor->hasU()) break; - if (actor->user.__legacyState.State->sprite == SPR_NULL) + if (actor->user.State->sprite == SPR_NULL) { - NewStateGroup(actor, actor->user.__legacyState.State->NextState); + NewStateGroup(actor, actor->user.State->NextState); } } if (actor->hasU()) { - ASSERT(actor->user.__legacyState.State); + ASSERT(actor->user.State); // Set the correct pic - if ((actor->user.__legacyState.State->Tics & SF_WALL_STATE)) // never used anywhere... + if ((actor->user.State->Tics & SF_WALL_STATE)) // never used anywhere... { ASSERT(actor->user.WallP); - actor->user.WallP->setwalltexture(picFromState(actor->user.__legacyState.State)); + actor->user.WallP->setwalltexture(picFromState(actor->user.State)); } else { diff --git a/source/games/sw/src/swactor.h b/source/games/sw/src/swactor.h index 1d55193bc..11f687a26 100644 --- a/source/games/sw/src/swactor.h +++ b/source/games/sw/src/swactor.h @@ -64,7 +64,7 @@ public: bool hasState(FName label, int substate = 0); void callAction(); void callStateAction(); - void setPicFromState() { spr.setspritetexture(picFromState(user.__legacyState.State)); } + void setPicFromState() { spr.setspritetexture(picFromState(user.State)); } }; inline void UpdateChangeXY(DSWActor* actor)