- reduce footprint of the Rot member variable.

This commit is contained in:
Christoph Oelckers 2023-06-27 18:17:09 +02:00
parent 71e44ac7ae
commit 5ee909ab6f
21 changed files with 59 additions and 62 deletions

View file

@ -1049,10 +1049,18 @@ static FState* getLegacyState(ACTOR_ACTION_SET* a, FName label, int subl)
return nullptr;
}
void DSWActor::setStateGroup(FName label, int subl)
void DSWActor::setStateGroup(FName label, int subl, bool noset)
{
auto a = user.__legacyState.ActorActionSet;
if (a) NewStateGroup(this, getLegacyState(a, label, subl));
if (a)
{
auto st = getLegacyState(a, label, subl);
if (!noset)
{
NewStateGroup(this, st);
}
else this->user.__legacyState.Rot = st;
}
}
bool DSWActor::checkStateGroup(FName label, int subl)

View file

@ -431,9 +431,6 @@ int SetupBunny(DSWActor* actor)
Bunny_Count++;
ChangeState(actor, &s_BunnyRun[0]);
actor->user.__legacyState.StateEnd = s_BunnyDie;
actor->user.__legacyState.Rot = s_BunnyRun;
actor->user.ShellNum = 0; // Not Pregnant right now
actor->user.FlagOwner = 0;
@ -469,6 +466,11 @@ int SetupBunny(DSWActor* actor)
//actor->spr.shade = 0; // darker
}
actor->setStateGroup(NAME_Run);
actor->setPicFromState();
actor->user.__legacyState.StateEnd = s_BunnyDie;
DoActorSetSpeed(actor, FAST_SPEED);
actor->user.Flags |= (SPR_XFLIP_TOGGLE);

View file

@ -325,14 +325,15 @@ int SetupCoolg(DSWActor* actor)
actor->user.Health = HEALTH_COOLIE_GHOST;
}
ChangeState(actor, s_CoolgRun[0]);
actor->user.__legacyState.Attrib = &CoolgAttrib;
DoActorSetSpeed(actor, NORM_SPEED);
actor->user.__legacyState.StateEnd = s_CoolgDie;
actor->user.__legacyState.Rot = s_CoolgRun;
EnemyDefaults(actor, &CoolgActionSet, &CoolgPersonality);
actor->setStateGroup(NAME_Run);
actor->setPicFromState();
actor->user.__legacyState.StateEnd = s_CoolgDie;
actor->user.Flags |= (SPR_NO_SCAREDZ|SPR_XFLIP_TOGGLE);
CoolgCommon(actor);
@ -360,7 +361,7 @@ int NewCoolg(DSWActor* actor)
ChangeState(actorNew, &s_CoolgBirth[0]);
actorNew->user.__legacyState.StateEnd = s_CoolgDie;
actorNew->user.__legacyState.Rot = s_CoolgRun;
actorNew->setStateGroup(NAME_Run, 0, false);
actorNew->spr.pal = actorNew->user.spal = actor->user.spal;
actorNew->user.__legacyState.ActorActionSet = &CoolgActionSet;
@ -389,9 +390,8 @@ int DoCoolgBirth(DSWActor* actor)
actor->user.__legacyState.Attrib = &CoolgAttrib;
DoActorSetSpeed(actor, NORM_SPEED);
ChangeState(actor, s_CoolgRun[0]);
actor->setStateGroup(NAME_Run);
actor->user.__legacyState.StateEnd = s_CoolgDie;
actor->user.__legacyState.Rot = s_CoolgRun;
EnemyDefaults(actor, &CoolgActionSet, &CoolgPersonality);
// special case

View file

@ -282,7 +282,7 @@ void EnemyDefaults(DSWActor* actor, ACTOR_ACTION_SET* action, PERSONALITY* perso
actor->spr.cstat |= (CSTAT_SPRITE_BLOCK|CSTAT_SPRITE_BLOCK_HITSCAN);
actor->spr.extra |= (SPRX_PLAYER_OR_ENEMY);
actor->setPicFromState();
//actor->setPicFromState();
change_actor_stat(actor, STAT_ENEMY);
actor->user.Personality = person;
@ -349,13 +349,13 @@ int SetupCoolie(DSWActor* actor)
actor->user.Health = HEALTH_COOLIE;
}
ChangeState(actor,s_CoolieRun[0]);
actor->user.__legacyState.Attrib = &CoolieAttrib;
DoActorSetSpeed(actor, NORM_SPEED);
actor->user.__legacyState.StateEnd = s_CoolieDie;
actor->user.__legacyState.Rot = s_CoolieRun;
EnemyDefaults(actor, &CoolieActionSet, &CooliePersonality);
actor->setStateGroup(NAME_Run);
actor->setPicFromState();
actor->spr.scale = DVector2(0.65625, 0.65625);

View file

@ -267,13 +267,13 @@ int SetupEel(DSWActor* actor)
actor->user.Health = 40;
}
ChangeState(actor, s_EelRun[0]);
actor->user.__legacyState.Attrib = &EelAttrib;
DoActorSetSpeed(actor, NORM_SPEED);
actor->user.__legacyState.StateEnd = s_EelDie;
actor->user.__legacyState.Rot = s_EelRun;
EnemyDefaults(actor, &EelActionSet, &EelPersonality);
actor->setStateGroup(NAME_Run);
actor->setPicFromState();
actor->user.Flags |= (SPR_NO_SCAREDZ|SPR_XFLIP_TOGGLE);

View file

@ -385,14 +385,14 @@ int SetupGirlNinja(DSWActor* actor)
}
actor->user.__legacyState.StateEnd = s_GirlNinjaDie;
actor->user.__legacyState.Rot = s_GirlNinjaRun;
actor->spr.scale = DVector2(0.796875, 0.671875);
actor->user.__legacyState.Attrib = &GirlNinjaAttrib;
actor->spr.pal = actor->user.spal = 26;
EnemyDefaults(actor, &GirlNinjaActionSet, &GirlNinjaPersonality);
ChangeState(actor, s_GirlNinjaRun[0]);
actor->setStateGroup(NAME_Run);
actor->setPicFromState();
DoActorSetSpeed(actor, NORM_SPEED);
actor->user.Radius = 280;

View file

@ -287,14 +287,14 @@ int SetupGoro(DSWActor* actor)
actor->user.Health = HEALTH_GORO;
}
ChangeState(actor, s_GoroRun[0]);
actor->user.__legacyState.Attrib = &GoroAttrib;
DoActorSetSpeed(actor, NORM_SPEED);
actor->user.__legacyState.StateEnd = s_GoroDie;
actor->user.__legacyState.Rot = s_GoroRun;
EnemyDefaults(actor, &GoroActionSet, &GoroPersonality);
actor->setStateGroup(NAME_Run);
actor->setPicFromState();
actor->clipdist = 32;
actor->user.Flags |= (SPR_XFLIP_TOGGLE);

View file

@ -224,13 +224,13 @@ int SetupHornet(DSWActor* actor)
actor->user.Health = HEALTH_HORNET;
}
ChangeState(actor, s_HornetRun[0]);
actor->user.__legacyState.Attrib = &HornetAttrib;
DoActorSetSpeed(actor, NORM_SPEED);
actor->user.__legacyState.StateEnd = s_HornetDie;
actor->user.__legacyState.Rot = s_HornetRun;
EnemyDefaults(actor, &HornetActionSet, &HornetPersonality);
actor->setStateGroup(NAME_Run);
actor->setPicFromState();
actor->user.Flags |= (SPR_NO_SCAREDZ|SPR_XFLIP_TOGGLE);
actor->spr.cstat |= (CSTAT_SPRITE_YCENTER);

View file

@ -281,14 +281,14 @@ int SetupLava(DSWActor* actor)
actor->user.Health = 100;
}
ChangeState(actor, s_LavaRun[0]);
actor->user.__legacyState.Attrib = &LavaAttrib;
DoActorSetSpeed(actor, NORM_SPEED);
actor->user.__legacyState.StateEnd = s_LavaDie;
actor->user.__legacyState.Rot = s_LavaRun;
EnemyDefaults(actor, &LavaActionSet, &LavaPersonality);
actor->spr.scale = DVector2(1.71875, 1.71875);
actor->setStateGroup(NAME_Run);
actor->setPicFromState();
actor->spr.scale = DVector2(1.71875, 1.71875);
actor->clipdist = 32;
actor->user.Flags |= (SPR_XFLIP_TOGGLE|SPR_ELECTRO_TOLERANT);

View file

@ -123,7 +123,6 @@ int SetupToiletGirl(DSWActor* actor)
ChangeState(actor,s_ToiletGirlStand);
actor->user.__legacyState.Attrib = &ToiletGirlAttrib;
actor->user.__legacyState.StateEnd = s_ToiletGirlStand;
actor->user.__legacyState.Rot = 0;
actor->spr.scale = DVector2(0.5, 0.5);
@ -377,7 +376,6 @@ int SetupWashGirl(DSWActor* actor)
ChangeState(actor,s_WashGirlStand);
actor->user.__legacyState.Attrib = &WashGirlAttrib;
actor->user.__legacyState.StateEnd = s_WashGirlStand;
actor->user.__legacyState.Rot = 0;
actor->spr.scale = DVector2(0.4374, 0.375);
@ -608,7 +606,6 @@ int SetupTrashCan(DSWActor* actor)
ChangeState(actor,s_TrashCanStand);
actor->user.__legacyState.Attrib = &TrashCanAttrib;
actor->user.__legacyState.StateEnd = s_TrashCanStand;
actor->user.__legacyState.Rot = 0;
@ -717,7 +714,6 @@ int SetupPachinkoLight(DSWActor* actor)
ChangeState(actor,s_PachinkoLightStand);
actor->user.__legacyState.Attrib = &PachinkoLightAttrib;
actor->user.__legacyState.StateEnd = s_PachinkoLightStand;
actor->user.__legacyState.Rot = 0;
actor->user.ID = PACHINKOLIGHT_R0;
@ -826,7 +822,6 @@ int SetupPachinko1(DSWActor* actor)
ChangeState(actor,s_Pachinko1Stand);
actor->user.__legacyState.Attrib = &Pachinko1Attrib;
actor->user.__legacyState.StateEnd = s_Pachinko1Stand;
actor->user.__legacyState.Rot = 0;
actor->user.ID = PACHINKO1;
@ -1003,7 +998,6 @@ int SetupPachinko2(DSWActor* actor)
ChangeState(actor,s_Pachinko2Stand);
actor->user.__legacyState.Attrib = &Pachinko2Attrib;
actor->user.__legacyState.StateEnd = s_Pachinko2Stand;
actor->user.__legacyState.Rot = 0;
actor->user.ID = PACHINKO2;
@ -1092,7 +1086,6 @@ int SetupPachinko3(DSWActor* actor)
ChangeState(actor,s_Pachinko3Stand);
actor->user.__legacyState.Attrib = &Pachinko3Attrib;
actor->user.__legacyState.StateEnd = s_Pachinko3Stand;
actor->user.__legacyState.Rot = 0;
actor->user.ID = PACHINKO3;
@ -1181,7 +1174,6 @@ int SetupPachinko4(DSWActor* actor)
ChangeState(actor,s_Pachinko4Stand);
actor->user.__legacyState.Attrib = &Pachinko4Attrib;
actor->user.__legacyState.StateEnd = s_Pachinko4Stand;
actor->user.__legacyState.Rot = 0;
actor->user.ID = PACHINKO4;
@ -1294,7 +1286,6 @@ int SetupCarGirl(DSWActor* actor)
ChangeState(actor,s_CarGirlStand);
actor->user.__legacyState.Attrib = &CarGirlAttrib;
actor->user.__legacyState.StateEnd = s_CarGirlStand;
actor->user.__legacyState.Rot = 0;
actor->spr.scale = DVector2(0.453125, 0.390625);
@ -1527,7 +1518,6 @@ int SetupMechanicGirl(DSWActor* actor)
ChangeState(actor,s_MechanicGirlStand);
actor->user.__legacyState.Attrib = &MechanicGirlAttrib;
actor->user.__legacyState.StateEnd = s_MechanicGirlStand;
actor->user.__legacyState.Rot = 0;
actor->spr.scale = DVector2(0.421875, 0.40625);
@ -1759,7 +1749,6 @@ int SetupSailorGirl(DSWActor* actor)
ChangeState(actor,s_SailorGirlStand);
actor->user.__legacyState.Attrib = &SailorGirlAttrib;
actor->user.__legacyState.StateEnd = s_SailorGirlStand;
actor->user.__legacyState.Rot = 0;
actor->spr.scale = DVector2(0.4375, 0.40625);
@ -1988,7 +1977,6 @@ int SetupPruneGirl(DSWActor* actor)
ChangeState(actor,s_PruneGirlStand);
actor->user.__legacyState.Attrib = &PruneGirlAttrib;
actor->user.__legacyState.StateEnd = s_PruneGirlStand;
actor->user.__legacyState.Rot = 0;
actor->spr.scale = DVector2(0.515625, 0.4375);

View file

@ -894,8 +894,6 @@ int SetupNinja(DSWActor* actor)
actor->user.Health = HEALTH_NINJA;
}
actor->user.__legacyState.StateEnd = s_NinjaDie;
actor->user.__legacyState.Rot = s_NinjaRun;
actor->spr.scale = DVector2(0.71875, 0.71875);
if (actor->spr.pal == PALETTE_PLAYER5)
@ -983,6 +981,9 @@ int SetupNinja(DSWActor* actor)
}
}
//actor->setStateGroup()
actor->user.__legacyState.StateEnd = s_NinjaDie;
actor->setStateGroup(NAME_Run, 0, true); // Something wrong with the sniper ninja...
ChangeState(actor, s_NinjaRun[0]);
DoActorSetSpeed(actor, NORM_SPEED);
@ -1477,8 +1478,6 @@ void InitPlayerSprite(DSWPlayer* pp, const DVector3& spawnpos, const DAngle star
actor->spr.cstat &= ~(CSTAT_SPRITE_TRANSLUCENT);
// Grouping items that need to be reset after a LoadLevel
ChangeState(actor, s_NinjaRun[0]);
actor->user.__legacyState.Rot = s_NinjaRun;
actor->user.__legacyState.ActorActionSet = &PlayerNinjaActionSet;
actor->user.Radius = 400;
@ -1487,7 +1486,6 @@ void InitPlayerSprite(DSWPlayer* pp, const DVector3& spawnpos, const DAngle star
actor->user.Flags |= (SPR_XFLIP_TOGGLE);
actor->setPicFromState();
actor->spr.shade = -60; // was 15
actor->clipdist = 16;
@ -1496,6 +1494,7 @@ void InitPlayerSprite(DSWPlayer* pp, const DVector3& spawnpos, const DAngle star
actor->user.spal = actor->spr.pal;
pp->GetActor()->setStateGroup(NAME_Run);
actor->setPicFromState();
pp->PlayerUnderActor = nullptr;
@ -1545,7 +1544,6 @@ void SpawnPlayerUnderSprite(DSWPlayer* pp)
actor->spr.cstat |= (CSTAT_SPRITE_BLOCK | CSTAT_SPRITE_BLOCK_HITSCAN);
actor->spr.extra |= (SPRX_PLAYER_OR_ENEMY);
actor->user.__legacyState.Rot = s_NinjaRun;
actor->user.__legacyState.State = plActor->user.__legacyState.State;
NewStateGroup(pp->PlayerUnderActor, plActor->user.__legacyState.Rot);

View file

@ -427,11 +427,9 @@ int SetupRipper(DSWActor* actor)
actor->user.Health = HEALTH_RIPPER/2; // Baby rippers are weaker
}
ChangeState(actor, s_RipperRun[0]);
actor->user.__legacyState.Attrib = &RipperAttrib;
DoActorSetSpeed(actor, FAST_SPEED);
actor->user.__legacyState.StateEnd = s_RipperDie;
actor->user.__legacyState.Rot = s_RipperRun;
actor->spr.scale = DVector2(1, 1);
if (actor->spr.pal == PALETTE_BROWN_RIPPER)
@ -448,6 +446,8 @@ int SetupRipper(DSWActor* actor)
{
EnemyDefaults(actor, &RipperActionSet, &RipperPersonality);
}
actor->setStateGroup(NAME_Run);
actor->setPicFromState();
actor->user.Flags |= (SPR_XFLIP_TOGGLE);

View file

@ -452,11 +452,9 @@ int SetupRipper2(DSWActor* actor)
actor->user.Health = HEALTH_RIPPER2;
}
ChangeState(actor, s_Ripper2Run[0]);
actor->user.__legacyState.Attrib = &Ripper2Attrib;
DoActorSetSpeed(actor, NORM_SPEED);
actor->user.__legacyState.StateEnd = s_Ripper2Die;
actor->user.__legacyState.Rot = s_Ripper2Run;
actor->clipdist = 32; // This actor is bigger, needs bigger box.
actor->spr.scale = DVector2(0.859375, 0.859375);
@ -475,6 +473,8 @@ int SetupRipper2(DSWActor* actor)
{
EnemyDefaults(actor, &Ripper2ActionSet, &Ripper2Personality);
}
actor->setStateGroup(NAME_Run);
actor->setPicFromState();
actor->user.Flags |= (SPR_XFLIP_TOGGLE);

View file

@ -349,13 +349,13 @@ int SetupSerp(DSWActor* actor)
if (Skill == 0) actor->user.Health = 1100;
if (Skill == 1) actor->user.Health = 2200;
ChangeState(actor, s_SerpRun[0]);
actor->user.__legacyState.Attrib = &SerpAttrib;
DoActorSetSpeed(actor, NORM_SPEED);
actor->user.__legacyState.StateEnd = s_SerpDie;
actor->user.__legacyState.Rot = s_SerpRun;
EnemyDefaults(actor, &SerpActionSet, &SerpPersonality);
actor->setStateGroup(NAME_Run);
actor->setPicFromState();
// Mini-Boss Serp
if (actor->spr.pal == 16)

View file

@ -304,13 +304,13 @@ int SetupSkel(DSWActor* actor)
actor->user.Health = HEALTH_SKEL_PRIEST;
}
ChangeState(actor, s_SkelRun[0]);
actor->user.__legacyState.Attrib = &SkelAttrib;
DoActorSetSpeed(actor, NORM_SPEED);
actor->user.__legacyState.StateEnd = s_SkelDie;
actor->user.__legacyState.Rot = s_SkelRun;
EnemyDefaults(actor, &SkelActionSet, &SkelPersonality);
actor->setStateGroup(NAME_Run);
actor->setPicFromState();
// 256 is default
//actor->clipdist = 16;

View file

@ -139,11 +139,12 @@ int SetupSkull(DSWActor* actor)
actor->user.__legacyState.Attrib = &SkullAttrib;
DoActorSetSpeed(actor, NORM_SPEED);
actor->user.__legacyState.StateEnd = s_SkullExplode;
actor->user.__legacyState.Rot = s_SkullWait;
actor->user.ID = SKULL_R0;
EnemyDefaults(actor, nullptr, nullptr);
actor->setPicFromState();
actor->clipdist = 12;
actor->user.Flags |= (SPR_XFLIP_TOGGLE);
actor->spr.cstat |= (CSTAT_SPRITE_YCENTER);
@ -495,11 +496,11 @@ int SetupBetty(DSWActor* actor)
actor->user.__legacyState.Attrib = &BettyAttrib;
DoActorSetSpeed(actor, NORM_SPEED);
actor->user.__legacyState.StateEnd = s_BettyExplode;
actor->user.__legacyState.Rot = s_BettyWait;
actor->user.ID = BETTY_R0;
EnemyDefaults(actor, nullptr, nullptr);
actor->setPicFromState();
actor->clipdist = 12;
actor->user.Flags |= (SPR_XFLIP_TOGGLE);
actor->spr.cstat |= (CSTAT_SPRITE_YCENTER);

View file

@ -322,13 +322,13 @@ int SetupSumo(DSWActor* actor)
if (Skill == 0) actor->user.Health = 2000;
if (Skill == 1) actor->user.Health = 4000;
ChangeState(actor,s_SumoRun[0]);
actor->user.__legacyState.Attrib = &SumoAttrib;
DoActorSetSpeed(actor, NORM_SPEED);
actor->user.__legacyState.StateEnd = s_SumoDie;
actor->user.__legacyState.Rot = s_SumoRun;
EnemyDefaults(actor, &SumoActionSet, &SumoPersonality);
actor->setStateGroup(NAME_Run);
actor->setPicFromState();
actor->clipdist = 32;
if (actor->spr.pal == 16)

View file

@ -59,7 +59,7 @@ public:
void ChangeStateEnd();
void clearActionFunc() { user.ActorActionFunc = nullptr; }
void setActionDecide();
void setStateGroup(FName label, int substate = 0); // substate is only valid for Attack and CloseAttack
void setStateGroup(FName label, int substate = 0, bool noset = false); // substate is only valid for Attack and CloseAttack
bool checkStateGroup(FName label, int substate = 0);
bool hasState(FName label, int substate = 0);
void callAction();

View file

@ -11219,10 +11219,10 @@ int InitSerpRing(DSWActor* actor)
actorNew->user.Counter2 = 0;
actorNew->user.__legacyState.StateEnd = s_SkullExplode;
actorNew->user.__legacyState.Rot = s_SkullRing;
// defaults do change the statnum
EnemyDefaults(actorNew, nullptr, nullptr);
actor->setPicFromState();
change_actor_stat(actorNew, STAT_SKIP4);
actorNew->spr.extra &= ~(SPRX_PLAYER_OR_ENEMY);
@ -11935,7 +11935,6 @@ int InitSumoSkull(DSWActor* actor)
actorNew->user.Flags |= (actor->user.Flags & (SPR_BOUNCE));
actorNew->user.__legacyState.StateEnd = s_SkullExplode;
actorNew->user.__legacyState.Rot = s_SkullWait;
actorNew->user.__legacyState.Attrib = &SkullAttrib;
DoActorSetSpeed(actor, NORM_SPEED);
@ -11945,6 +11944,7 @@ int InitSumoSkull(DSWActor* actor)
// defaults do change the statnum
EnemyDefaults(actorNew, nullptr, nullptr);
actor->setPicFromState();
actorNew->spr.extra |= SPRX_PLAYER_OR_ENEMY;
actorNew->clipdist = 12;

View file

@ -297,13 +297,13 @@ int SetupZilla(DSWActor* actor)
if (Skill == 0) actor->user.Health = 2000;
if (Skill == 1) actor->user.Health = 4000;
ChangeState(actor,s_ZillaRun[0]);
actor->user.__legacyState.Attrib = &ZillaAttrib;
DoActorSetSpeed(actor, NORM_SPEED);
actor->user.__legacyState.StateEnd = s_ZillaDie;
actor->user.__legacyState.Rot = s_ZillaRun;
EnemyDefaults(actor, &ZillaActionSet, &ZillaPersonality);
actor->setStateGroup(NAME_Run);
actor->setPicFromState();
actor->clipdist = 32;
actor->spr.scale = DVector2(1.515625, 1.23475);

View file

@ -355,13 +355,13 @@ int SetupZombie(DSWActor* actor)
actor->user.Health = 100;
actor->user.__legacyState.StateEnd = &s_ZombiePain[0];
actor->user.__legacyState.Rot = s_ZombieRun;
actor->spr.scale = DVector2(PLAYER_NINJA_XREPEAT, PLAYER_NINJA_YREPEAT);
actor->user.__legacyState.Attrib = &ZombieAttrib;
EnemyDefaults(actor, &ZombieActionSet, &ZombiePersonality);
ChangeState(actor, s_ZombieRun[0]);
actor->setStateGroup(NAME_Run);
actor->setPicFromState();
DoActorSetSpeed(actor, NORM_SPEED);
actor->user.Radius = 280;