From a84e09048ebcc39e3db9b70595b29dd8d9b8a990 Mon Sep 17 00:00:00 2001 From: Mitchell Richters Date: Sun, 27 Nov 2022 11:34:39 +1100 Subject: [PATCH] - Change wrapper internals for current yaw to the actor's sprite DRotator and make sure all the games load a level. --- source/core/gameinput.h | 3 +-- source/games/duke/src/premap.cpp | 9 +++------ source/games/duke/src/sounds.cpp | 9 +++++++-- source/games/exhumed/src/player.cpp | 8 +++----- source/games/sw/src/game.cpp | 5 ++--- source/games/sw/src/misc.h | 4 ++-- source/games/sw/src/ninja.cpp | 10 +++++----- source/games/sw/src/player.cpp | 11 +++++------ source/games/sw/src/player.h | 2 +- source/games/sw/src/sounds.cpp | 4 ++-- 10 files changed, 31 insertions(+), 34 deletions(-) diff --git a/source/core/gameinput.h b/source/core/gameinput.h index 0b016a5ce..c1fb86d3a 100644 --- a/source/core/gameinput.h +++ b/source/core/gameinput.h @@ -11,8 +11,7 @@ struct PlayerAngles // Temporary wrappers. DAngle& ZzHORIZON() { return pActor->spr.Angles.Pitch; } DAngle& ZzOLDHORIZON() { return pActor->PrevAngles.Pitch; } - DAngle thisAngle; - DAngle& ZzANGLE() { return thisAngle; } + DAngle& ZzANGLE() { return pActor->spr.Angles.Yaw; } DAngle prevAngle; DAngle& ZzOLDANGLE() { return prevAngle; } diff --git a/source/games/duke/src/premap.cpp b/source/games/duke/src/premap.cpp index b15a34ca7..cce9f2305 100644 --- a/source/games/duke/src/premap.cpp +++ b/source/games/duke/src/premap.cpp @@ -504,7 +504,7 @@ void resetprestat(int snum,int g) // //--------------------------------------------------------------------------- -void resetpspritevars(int g, const DVector3& startpos) +void resetpspritevars(int g, const DVector3& startpos, const DAngle startang) { int i, j; int circ; @@ -512,7 +512,7 @@ void resetpspritevars(int g, const DVector3& startpos) STATUSBARTYPE tsbar[MAXPLAYERS]; auto newActor = CreateActor(ps[0].cursector, startpos.plusZ(gs.playerheight), - TILE_APLAYER, 0, DVector2(0, 0), ps[0].Angles.ZzANGLE(), 0., 0., nullptr, 10); + TILE_APLAYER, 0, DVector2(0, 0), startang, 0., 0., nullptr, 10); newActor->spr.Angles.Pitch = DAngle::fromDeg(-17.354); newActor->viewzoffset = -gs.playerheight; @@ -627,7 +627,6 @@ void resetpspritevars(int g, const DVector3& startpos) act->SetOwner(act); ps[j].setbobpos(); - ps[j].Angles.ZzOLDANGLE() = ps[j].Angles.ZzANGLE() = act->spr.Angles.Yaw; // check me out later. updatesector(act->spr.pos, &ps[j].cursector); @@ -982,8 +981,6 @@ static int LoadTheMap(MapRecord *mi, player_struct*p, int gamemode) SECRET_SetMapName(mi->DisplayName(), mi->name); STAT_NewLevel(mi->fileName); TITLE_InformName(mi->name); - - p->Angles.ZzANGLE() = mapangle(lbang); gotpic.Zero(); @@ -995,7 +992,7 @@ static int LoadTheMap(MapRecord *mi, player_struct*p, int gamemode) SpawnPortals(); allignwarpelevators(); - resetpspritevars(gamemode, pos); + resetpspritevars(gamemode, pos, mapangle(lbang)); if (isRR()) cacheit_r(); else cacheit_d(); return 0; diff --git a/source/games/duke/src/sounds.cpp b/source/games/duke/src/sounds.cpp index 1a7e96018..c65224a01 100644 --- a/source/games/duke/src/sounds.cpp +++ b/source/games/duke/src/sounds.cpp @@ -348,13 +348,18 @@ void S_GetCamera(DVector3* c, DAngle* ca, sectortype** cs) if (ud.cameraactor == nullptr) { auto p = &ps[screenpeek]; + auto pact = p->GetActor(); if (c) { - if (p->GetActor()) *c = p->GetActor()->getPosWithOffsetZ(); + if (pact) *c = pact->getPosWithOffsetZ(); else c->Zero(); } if (cs) *cs = p->cursector; - if (ca) *ca = p->Angles.ZzANGLE(); + if (ca) + { + if (pact) *ca = pact->spr.Angles.Yaw; + else *ca = nullAngle; + } } else { diff --git a/source/games/exhumed/src/player.cpp b/source/games/exhumed/src/player.cpp index 11801d00e..a36070179 100644 --- a/source/games/exhumed/src/player.cpp +++ b/source/games/exhumed/src/player.cpp @@ -296,8 +296,7 @@ void RestartPlayer(int nPlayer) pActor->spr.pos = nNStartSprite->spr.pos; ChangeActorSect(pActor, nNStartSprite->sector()); - plr->Angles.ZzANGLE() = nNStartSprite->spr.Angles.Yaw; // check me out later. - pActor->spr.Angles.Yaw = plr->Angles.ZzANGLE(); // check me out later. + pActor->spr.Angles.Yaw = nNStartSprite->spr.Angles.Yaw; floorsprt = insertActor(pActor->sector(), 0); @@ -310,13 +309,12 @@ void RestartPlayer(int nPlayer) { pActor->spr.pos.XY() = plr->sPlayerSave.pos.XY(); pActor->spr.pos.Z = plr->sPlayerSave.pSector->floorz; - plr->Angles.ZzANGLE() = plr->sPlayerSave.nAngle; - pActor->spr.Angles.Yaw = plr->Angles.ZzANGLE(); // check me out later. + pActor->spr.Angles.Yaw = plr->sPlayerSave.nAngle; floorsprt = nullptr; } - plr->Angles.backupYaw(); + pActor->backuploc(); plr->pPlayerFloorSprite = floorsprt; diff --git a/source/games/sw/src/game.cpp b/source/games/sw/src/game.cpp index e8655df52..ca91005d2 100644 --- a/source/games/sw/src/game.cpp +++ b/source/games/sw/src/game.cpp @@ -414,7 +414,6 @@ void InitLevel(MapRecord *maprec) SECRET_SetMapName(currentLevel->DisplayName(), currentLevel->name); STAT_NewLevel(currentLevel->fileName); TITLE_InformName(currentLevel->name); - Player[0].Angles.ZzANGLE() = DAngle::fromBuild(ang); auto vissect = §or[0]; // hack alert! if (vissect->extra != -1) @@ -433,8 +432,8 @@ void InitLevel(MapRecord *maprec) QueueReset(); PreMapCombineFloors(); - InitMultiPlayerInfo(ppos); - InitAllPlayerSprites(ppos); + InitMultiPlayerInfo(ppos, mapangle(ang)); + InitAllPlayerSprites(ppos, mapangle(ang)); // // Do setup for sprite, track, panel, sector, etc diff --git a/source/games/sw/src/misc.h b/source/games/sw/src/misc.h index fd6695404..a91b03987 100644 --- a/source/games/sw/src/misc.h +++ b/source/games/sw/src/misc.h @@ -71,8 +71,8 @@ int DoActorSectorDamage(DSWActor* actor); int DoScaleSprite(DSWActor* actor); int DoActorStopFall(DSWActor* actor); -void InitPlayerSprite(PLAYER* pp, const DVector3& spawnpos); -void InitAllPlayerSprites(const DVector3& spawnpos); +void InitPlayerSprite(PLAYER* pp, const DVector3& spawnpos, const DAngle startang); +void InitAllPlayerSprites(const DVector3& spawnpos, const DAngle startang); void PlayerPanelSetup(void); void PlayerDeathReset(PLAYER* pp); void SpawnPlayerUnderSprite(PLAYER* pp); diff --git a/source/games/sw/src/ninja.cpp b/source/games/sw/src/ninja.cpp index bd63efc27..89a5ae809 100644 --- a/source/games/sw/src/ninja.cpp +++ b/source/games/sw/src/ninja.cpp @@ -2166,13 +2166,13 @@ int DoNinjaCeiling(DSWActor* actor) // too convienent to put it here. // -void InitAllPlayerSprites(const DVector3& spawnpos) +void InitAllPlayerSprites(const DVector3& spawnpos, const DAngle startang) { short i; TRAVERSE_CONNECT(i) { - InitPlayerSprite(Player + i, spawnpos); + InitPlayerSprite(Player + i, spawnpos, startang); } } @@ -2385,7 +2385,7 @@ extern ACTOR_ACTION_SET PlayerNinjaActionSet; // //--------------------------------------------------------------------------- -void InitPlayerSprite(PLAYER* pp, const DVector3& spawnpos) +void InitPlayerSprite(PLAYER* pp, const DVector3& spawnpos, const DAngle startang) { int pnum = int(pp - Player); double fz,cz; @@ -2393,7 +2393,7 @@ void InitPlayerSprite(PLAYER* pp, const DVector3& spawnpos) COVER_SetReverb(0); // Turn off any echoing that may have been going before pp->Reverb = 0; - auto actor = SpawnActor(STAT_PLAYER0 + pnum, NINJA_RUN_R0, nullptr, pp->cursector, spawnpos.plusZ(PLAYER_HEIGHTF), pp->Angles.ZzANGLE()); + auto actor = SpawnActor(STAT_PLAYER0 + pnum, NINJA_RUN_R0, nullptr, pp->cursector, spawnpos.plusZ(PLAYER_HEIGHTF), startang); actor->viewzoffset = -PLAYER_HEIGHTF; // if too close to the floor - stand up @@ -2402,7 +2402,7 @@ void InitPlayerSprite(PLAYER* pp, const DVector3& spawnpos) { actor->spr.pos.Z = fz; } - actor->backuppos(); + actor->backuploc(); pp->actor = actor; pp->pnum = pnum; diff --git a/source/games/sw/src/player.cpp b/source/games/sw/src/player.cpp index 28bc6dae0..19c364bbd 100644 --- a/source/games/sw/src/player.cpp +++ b/source/games/sw/src/player.cpp @@ -7045,7 +7045,6 @@ void InitAllPlayers(void) // Initialize all [MAX_SW_PLAYERS] arrays here! for (pp = Player; pp < &Player[MAX_SW_PLAYERS]; pp++) { - pp->Angles.ZzANGLE() = pp->Angles.ZzOLDANGLE() = pfirst->Angles.ZzANGLE(); pp->cursector = pfirst->cursector; // set like this so that player can trigger something on start of the level pp->lastcursector = pfirst->cursector+1; @@ -7200,14 +7199,14 @@ void PlayerSpawnPosition(PLAYER* pp) ASSERT(spawn_sprite != nullptr); - pp->Angles.ZzANGLE() = pp->Angles.ZzOLDANGLE() = spawn_sprite->spr.Angles.Yaw; // check me out later. pp->setcursector(spawn_sprite->sector()); if (pp->actor) { + pp->actor->spr.Angles.Yaw = spawn_sprite->spr.Angles.Yaw; pp->actor->spr.pos = spawn_sprite->spr.pos; pp->actor->viewzoffset = spawn_sprite->viewzoffset; - pp->actor->backuppos(); + pp->actor->backuploc(); } } @@ -7217,7 +7216,7 @@ void PlayerSpawnPosition(PLAYER* pp) // //--------------------------------------------------------------------------- -void InitMultiPlayerInfo(const DVector3& spawnpos) +void InitMultiPlayerInfo(const DVector3& spawnpos, const DAngle startang) { PLAYER* pp; short pnum; @@ -7263,7 +7262,7 @@ void InitMultiPlayerInfo(const DVector3& spawnpos) continue; } - auto start0 = SpawnActor(MultiStatList[stat], ST1, nullptr, pp->cursector, spawnpos.plusZ(PLAYER_HEIGHTF), pp->Angles.ZzANGLE()); + auto start0 = SpawnActor(MultiStatList[stat], ST1, nullptr, pp->cursector, spawnpos.plusZ(PLAYER_HEIGHTF), startang); start0->viewzoffset = -PLAYER_HEIGHTF; // if too close to the floor - stand up @@ -7272,7 +7271,7 @@ void InitMultiPlayerInfo(const DVector3& spawnpos) { start0->spr.pos.Z = fz; } - start0->backuppos(); + start0->backuploc(); start0->clearUser(); start0->spr.picnum = ST1; } diff --git a/source/games/sw/src/player.h b/source/games/sw/src/player.h index 2e663a3b1..8ed65f575 100644 --- a/source/games/sw/src/player.h +++ b/source/games/sw/src/player.h @@ -130,7 +130,7 @@ void HeadBobStateControl(void); void DoPlayer(void); void domovethings(void); void InitAllPlayers(void); -void InitMultiPlayerInfo(const DVector3& spawnpos); +void InitMultiPlayerInfo(const DVector3& spawnpos, const DAngle startang); void MoveScrollMode2D(PLAYER* pp, ControlInfo* const hidInput); void DoPlayerDivePalette(PLAYER* pp); void DoPlayerNightVisionPalette(PLAYER* pp); diff --git a/source/games/sw/src/sounds.cpp b/source/games/sw/src/sounds.cpp index bbd2c04d8..a6aeb6797 100644 --- a/source/games/sw/src/sounds.cpp +++ b/source/games/sw/src/sounds.cpp @@ -598,12 +598,12 @@ void GameInterface::UpdateSounds(void) if (pp->sop_remote) { DSWActor* rsp = pp->remoteActor; - if (TEST_BOOL1(rsp)) + if (rsp && TEST_BOOL1(rsp)) tang = rsp->spr.Angles.Yaw; else tang = (pp->sop_remote->pmid.XY() - pp->actor->spr.pos.XY()).Angle(); } - else tang = pp->Angles.ZzANGLE(); + else tang = pp->actor ? pp->actor->spr.Angles.Yaw : nullAngle; listener.angle = float(-tang.Radians()); listener.velocity.Zero();