From 249ea218f47003c9ec7a5dc782b401936c40944a Mon Sep 17 00:00:00 2001 From: Mitchell Richters Date: Tue, 3 Nov 2020 23:26:22 +1100 Subject: [PATCH] - WHaven: Uplift of ang to backend code. --- source/games/whaven/src/ai.cpp | 5 ++-- source/games/whaven/src/aidemon.cpp | 2 +- source/games/whaven/src/aidevil.cpp | 2 +- source/games/whaven/src/aifatwitch.cpp | 2 +- source/games/whaven/src/aifred.cpp | 2 +- source/games/whaven/src/aigoblin.cpp | 2 +- source/games/whaven/src/aigonzo.cpp | 2 +- source/games/whaven/src/aigron.cpp | 2 +- source/games/whaven/src/aiguardian.cpp | 2 +- source/games/whaven/src/aiimp.cpp | 2 +- source/games/whaven/src/aijudy.cpp | 2 +- source/games/whaven/src/aikatie.cpp | 2 +- source/games/whaven/src/aikobold.cpp | 2 +- source/games/whaven/src/aiminotaur.cpp | 2 +- source/games/whaven/src/ainewguy.cpp | 2 +- source/games/whaven/src/aiskully.cpp | 2 +- source/games/whaven/src/input.cpp | 41 +++++++++++--------------- source/games/whaven/src/player.h | 3 +- source/games/whaven/src/render.cpp | 19 ++++++------ source/games/whaven/src/sound.cpp | 2 +- source/games/whaven/src/spellbooks.cpp | 12 ++++---- source/games/whaven/src/weapons.cpp | 22 +++++++------- source/games/whaven/src/whani.cpp | 4 +-- source/games/whaven/src/whfx.cpp | 10 +++---- source/games/whaven/src/whldsv.cpp | 3 +- source/games/whaven/src/whmap.cpp | 4 +-- source/games/whaven/src/whplr.cpp | 10 +++---- source/games/whaven/src/whtag.cpp | 2 +- 28 files changed, 80 insertions(+), 87 deletions(-) diff --git a/source/games/whaven/src/ai.cpp b/source/games/whaven/src/ai.cpp index e554af68b..39ccfd48a 100644 --- a/source/games/whaven/src/ai.cpp +++ b/source/games/whaven/src/ai.cpp @@ -210,7 +210,7 @@ void aiProcess() { PLAYER& plr = player[0]; - // short daang = (short) plr.ang; + // short daang = plr.angle.ang.asbuild(); // int daz2 = -mulscale16(plr.horizon.horiz.asq16(), 2000); // hitscan(plr.x, plr.y, plr.z, plr.sector, // Start position // sintable[(daang + 2560) & 2047], // X vector of 3D ang @@ -663,7 +663,8 @@ void attack(PLAYER& plr, int i) { if (!droptheshield && plr.shieldpoints > 0 && plr.selectedgun > 0 && plr.selectedgun < 5) { short a = getangle(sprite[i].x - plr.x, sprite[i].y - plr.y); - if ((a < plr.ang && plr.ang - a < 128) || (a > plr.ang && (((short)plr.ang + a) & 2047) < 128)) { + auto ang = plr.angle.ang.asbuild(); + if ((a < ang && ang - a < 128) || (a > ang && ((ang + a) & 2047) < 128)) { if (krand() % 100 > 80) { spritesound(S_SWORD1 + krand() % 3, &sprite[plr.spritenum]); return; diff --git a/source/games/whaven/src/aidemon.cpp b/source/games/whaven/src/aidemon.cpp index 2596b210c..9057d3edd 100644 --- a/source/games/whaven/src/aidemon.cpp +++ b/source/games/whaven/src/aidemon.cpp @@ -83,7 +83,7 @@ static void pain(PLAYER& plr, short i) { spr.lotag -= TICSPERFRAME; if (spr.lotag < 0) { spr.picnum = DEMON; - spr.ang = (short)plr.ang; + spr.ang = plr.angle.ang.asbuild(); newstatus(i, FLEE); } diff --git a/source/games/whaven/src/aidevil.cpp b/source/games/whaven/src/aidevil.cpp index 210ca6e33..c82102be3 100644 --- a/source/games/whaven/src/aidevil.cpp +++ b/source/games/whaven/src/aidevil.cpp @@ -83,7 +83,7 @@ static void pain(PLAYER& plr, short i) { spr.lotag -= TICSPERFRAME; if (spr.lotag < 0) { spr.picnum = DEVIL; - spr.ang = (short)plr.ang; + spr.ang = plr.angle.ang.asbuild(); newstatus(i, FLEE); } diff --git a/source/games/whaven/src/aifatwitch.cpp b/source/games/whaven/src/aifatwitch.cpp index 9b6788427..43addbfb5 100644 --- a/source/games/whaven/src/aifatwitch.cpp +++ b/source/games/whaven/src/aifatwitch.cpp @@ -96,7 +96,7 @@ static void pain(PLAYER& plr, short i) { spr.lotag -= TICSPERFRAME; if (spr.lotag < 0) { spr.picnum = FATWITCH; - spr.ang = (short)plr.ang; + spr.ang = plr.angle.ang.asbuild(); newstatus(i, FLEE); } diff --git a/source/games/whaven/src/aifred.cpp b/source/games/whaven/src/aifred.cpp index f54a38e81..4ed7e21f3 100644 --- a/source/games/whaven/src/aifred.cpp +++ b/source/games/whaven/src/aifred.cpp @@ -252,7 +252,7 @@ static void pain(PLAYER& plr, short i) { spr.lotag -= TICSPERFRAME; if (spr.lotag < 0) { spr.picnum = FRED; - spr.ang = (short)plr.ang; + spr.ang = plr.angle.ang.asbuild(); newstatus(i, FLEE); } diff --git a/source/games/whaven/src/aigoblin.cpp b/source/games/whaven/src/aigoblin.cpp index a1068f334..7f4845e1a 100644 --- a/source/games/whaven/src/aigoblin.cpp +++ b/source/games/whaven/src/aigoblin.cpp @@ -110,7 +110,7 @@ static void pain(PLAYER& plr, short i) { spr.lotag -= TICSPERFRAME; if (spr.lotag < 0) { spr.picnum = GOBLIN; - spr.ang = (short)plr.ang; + spr.ang = plr.angle.ang.asbuild(); newstatus(i, FLEE); } diff --git a/source/games/whaven/src/aigonzo.cpp b/source/games/whaven/src/aigonzo.cpp index d72e2a7ed..48901356d 100644 --- a/source/games/whaven/src/aigonzo.cpp +++ b/source/games/whaven/src/aigonzo.cpp @@ -298,7 +298,7 @@ static void pain(PLAYER& plr, short i) { spr.picnum = GONZOGSH; break; } - spr.ang = (short)plr.ang; + spr.ang = plr.angle.ang.asbuild(); newstatus(i, FLEE); } diff --git a/source/games/whaven/src/aigron.cpp b/source/games/whaven/src/aigron.cpp index 63bfab7ac..6422dc019 100644 --- a/source/games/whaven/src/aigron.cpp +++ b/source/games/whaven/src/aigron.cpp @@ -226,7 +226,7 @@ static void pain(PLAYER& plr, short i) { else if (sprite[i].picnum == GRONMUPAIN) sprite[i].picnum = GRONMU; - spr.ang = (short)plr.ang; + spr.ang = plr.angle.ang.asbuild(); newstatus(i, FLEE); } diff --git a/source/games/whaven/src/aiguardian.cpp b/source/games/whaven/src/aiguardian.cpp index f8b731dd2..89449e656 100644 --- a/source/games/whaven/src/aiguardian.cpp +++ b/source/games/whaven/src/aiguardian.cpp @@ -190,7 +190,7 @@ static void pain(PLAYER& plr, short i) { spr.lotag -= TICSPERFRAME; if (spr.lotag < 0) { spr.picnum = GUARDIAN; - spr.ang = (short)plr.ang; + spr.ang = plr.angle.ang.asbuild(); newstatus(i, FLEE); } diff --git a/source/games/whaven/src/aiimp.cpp b/source/games/whaven/src/aiimp.cpp index ede55e342..cdf317b8e 100644 --- a/source/games/whaven/src/aiimp.cpp +++ b/source/games/whaven/src/aiimp.cpp @@ -103,7 +103,7 @@ static void pain(PLAYER& plr, short i) { spr.lotag -= TICSPERFRAME; if (spr.lotag < 0) { spr.picnum = IMP; - spr.ang = (short)plr.ang; + spr.ang = plr.angle.ang.asbuild(); newstatus(i, FLEE); } diff --git a/source/games/whaven/src/aijudy.cpp b/source/games/whaven/src/aijudy.cpp index 272972f9d..711a047e0 100644 --- a/source/games/whaven/src/aijudy.cpp +++ b/source/games/whaven/src/aijudy.cpp @@ -106,7 +106,7 @@ static void pain(PLAYER& plr, short i) { spr.lotag -= TICSPERFRAME; if (spr.lotag < 0) { spr.picnum = JUDY; - spr.ang = (short)plr.ang; + spr.ang = plr.angle.ang.asbuild(); newstatus(i, FLEE); } diff --git a/source/games/whaven/src/aikatie.cpp b/source/games/whaven/src/aikatie.cpp index 7dd2d026b..55d334b47 100644 --- a/source/games/whaven/src/aikatie.cpp +++ b/source/games/whaven/src/aikatie.cpp @@ -82,7 +82,7 @@ static void pain(PLAYER& plr, short i) { spr.lotag -= TICSPERFRAME; if (spr.lotag < 0) { spr.picnum = KATIE; - spr.ang = (short)plr.ang; + spr.ang = plr.angle.ang.asbuild(); newstatus(i, FLEE); } diff --git a/source/games/whaven/src/aikobold.cpp b/source/games/whaven/src/aikobold.cpp index a7e262160..a2bb7d16b 100644 --- a/source/games/whaven/src/aikobold.cpp +++ b/source/games/whaven/src/aikobold.cpp @@ -114,7 +114,7 @@ static void pain(PLAYER& plr, short i) { spr.lotag -= TICSPERFRAME; if (spr.lotag < 0) { spr.picnum = KOBOLD; - spr.ang = (short)plr.ang; + spr.ang = plr.angle.ang.asbuild(); newstatus(i, FLEE); } diff --git a/source/games/whaven/src/aiminotaur.cpp b/source/games/whaven/src/aiminotaur.cpp index 7aa6e5812..8e0dd2f1b 100644 --- a/source/games/whaven/src/aiminotaur.cpp +++ b/source/games/whaven/src/aiminotaur.cpp @@ -152,7 +152,7 @@ static void pain(PLAYER& plr, short i) { spr.lotag -= TICSPERFRAME; if (spr.lotag < 0) { spr.picnum = MINOTAUR; - spr.ang = (short)plr.ang; + spr.ang = plr.angle.ang.asbuild(); newstatus(i, FLEE); } diff --git a/source/games/whaven/src/ainewguy.cpp b/source/games/whaven/src/ainewguy.cpp index c391ee8fe..42ac935bd 100644 --- a/source/games/whaven/src/ainewguy.cpp +++ b/source/games/whaven/src/ainewguy.cpp @@ -171,7 +171,7 @@ static void pain(PLAYER& plr, short i) { spr.lotag -= TICSPERFRAME; if (spr.lotag < 0) { spr.picnum = NEWGUY; - spr.ang = (short)plr.ang; + spr.ang = plr.angle.ang.asbuild(); newstatus(i, FLEE); } diff --git a/source/games/whaven/src/aiskully.cpp b/source/games/whaven/src/aiskully.cpp index fdd1520f5..f8fb9ee37 100644 --- a/source/games/whaven/src/aiskully.cpp +++ b/source/games/whaven/src/aiskully.cpp @@ -93,7 +93,7 @@ static void pain(PLAYER& plr, short i) { spr.lotag -= TICSPERFRAME; if (spr.lotag < 0) { spr.picnum = SKULLY; - spr.ang = (short)plr.ang; + spr.ang = plr.angle.ang.asbuild(); newstatus(i, FLEE); } diff --git a/source/games/whaven/src/input.cpp b/source/games/whaven/src/input.cpp index ca83e82a7..74ba9f8a8 100644 --- a/source/games/whaven/src/input.cpp +++ b/source/games/whaven/src/input.cpp @@ -91,7 +91,6 @@ int32_t registerosdcommands(void) for (int i = 0; i < 10; i++) if (ctrlGetInputKey(whcfg.keymap[i + WhKeys.Weapon_1.getNum()], true)) loc.bits |= (i + 1) << 8; //1 << 12 // weaponsel loc.bits |= whcfg.gMouseAim ? CtrlMouseAim : 0; ~SB_AIMMODE loc.bits |= ctrlGetInputKey(GameKeys.Open, true) ? CtrlOpen : 0; SB_OPEN - loc.bits |= ctrlGetInputKey(GameKeys.Turn_Around, true) ? CtrlTurnAround : 0; SB_TURNAROUND loc.bits |= ctrlGetInputKey(WhKeys.Inventory_Use, true) ? CtrlInventory_Use : 0; SB_INVUSE loc.bits |= ctrlGetInputKey(WhKeys.Fly_up, false) ? CtrlFlyup : 0; // SB_FLYUP loc.bits |= ctrlGetInputKey(WhKeys.Fly_down, false) ? CtrlFlydown : 0; // SB_FLYDOWN @@ -114,6 +113,10 @@ void GameInterface::clearlocalinputstate() lPlayerXVel = lPlayerYVel = 0; } +static void UpdatePlayerSpriteAngle(PLAYER& plr) +{ + sprite[plr.spritenum].ang = plr.angle.ang.asbuild(); +} void GameInterface::GetInput(InputPacket* packet, ControlInfo* const hidInput) { @@ -164,8 +167,8 @@ void GameInterface::GetInput(InputPacket* packet, ControlInfo* const hidInput) if (packet) { double k = 0.92; - double sin = calcSinTableValue(plr.ang); - double cos = calcSinTableValue(plr.ang + 512); + double sin = plr.angle.ang.fsin() * 16384.; + double cos = plr.angle.ang.fcos() * 16384.; double xvel = (localInput.fvel * cos) + (localInput.svel * sin); double yvel = (localInput.fvel * sin) - (localInput.svel * cos); double len = sqrt(xvel * xvel + yvel * yvel); @@ -207,6 +210,7 @@ void processinput(int num) { oldposx = plr.x; oldposy = plr.y; + plr.angle.resetadjustment(); plr.horizon.resetadjustment(); auto& bits = plr.plInput.actions; @@ -230,7 +234,7 @@ void processinput(int num) { plr.plInput.fvel += (tics * damage_vel) << 14; plr.plInput.svel += (tics * damage_svel) << 14; - plr.plInput.avel += damage_angvel; + plr.angle.addadjustment(damage_angvel); if (damage_vel != 0) @@ -303,16 +307,9 @@ void processinput(int num) { } } - if ((bits & SB_TURNAROUND) != 0) + if (cl_syncinput) { - if (plr.turnAround == 0) - plr.turnAround = -1024; - } - - if (plr.turnAround < 0) - { - plr.turnAround = (short)std::min(plr.turnAround + 64, 0); - plr.ang = BClampAngle(plr.ang + 64); + applylook(&plr.angle, plr.plInput.avel, &bits, 1, bits & SB_CROUCH); } if (plr.sector != -1 && ((sector[plr.sector].floorpicnum != LAVA || sector[plr.sector].floorpicnum != SLIME @@ -431,13 +428,13 @@ void processinput(int num) { yvect = plr.plInput.svel; // xvect = yvect = 0; - // if (plr.pInput.fvel != 0) { - // xvect = (int) (plr.pInput.fvel * tics * BCosAngle(plr.ang)); - // yvect = (int) (plr.pInput.fvel * tics * BSinAngle(plr.ang)); + // if (plr.plInput.fvel != 0) { + // xvect = (int) (plr.plInput.fvel * tics * plr.angle.ang.bcos()); + // yvect = (int) (plr.plInput.fvel * tics * plr.angle.ang.bsin()); // } - // if (plr.pInput.svel != 0) { - // xvect += (plr.pInput.svel * tics * BSinAngle(plr.ang)); - // yvect -= (plr.pInput.svel * tics * BCosAngle(plr.ang)); + // if (plr.plInput.svel != 0) { + // xvect += (plr.plInput.svel * tics * plr.angle.ang.bsin()); + // yvect -= (plr.plInput.svel * tics * plr.angle.ang.bcos()); // } if (plr.noclip) { @@ -586,14 +583,10 @@ void processinput(int num) { runningtime = 0; } } - if (plr.plInput.avel != 0) { - plr.ang += plr.plInput.avel * TICSPERFRAME / 16.0f; - plr.ang = BClampAngle(plr.ang); - } //game.pInt.setsprinterpolate(plr.spritenum, sprite[plr.spritenum]); setsprite(plr.spritenum, plr.x, plr.y, plr.z + (plr.height << 8)); - sprite[plr.spritenum].ang = (short)plr.ang; + UpdatePlayerSpriteAngle(plr); if (plr.sector >= 0 && getceilzofslope(plr.sector, plr.x, plr.y) > getflorzofslope(plr.sector, plr.x, plr.y) - (8 << 8)) addhealth(plr, -10); diff --git a/source/games/whaven/src/player.h b/source/games/whaven/src/player.h index 19d529276..eb5479806 100644 --- a/source/games/whaven/src/player.h +++ b/source/games/whaven/src/player.h @@ -10,7 +10,7 @@ struct PLAYER { InputPacket plInput; int spellnum; int x,y,z; - float ang; + PlayerAngle angle; PlayerHorizon horizon; int height; int hvel; @@ -36,7 +36,6 @@ struct PLAYER { int fallz; boolean dead; - short turnAround; int shadowtime; int helmettime; diff --git a/source/games/whaven/src/render.cpp b/source/games/whaven/src/render.cpp index 1935bf243..34093da53 100644 --- a/source/games/whaven/src/render.cpp +++ b/source/games/whaven/src/render.cpp @@ -16,8 +16,9 @@ void drawscreen(int num, double dasmoothratio, bool sceneonly) int cposx = plr.x; int cposy = plr.y; int cposz = plr.z; - float cang = plr.ang; + binangle cang = plr.angle.sum(); fixedhoriz choriz = plr.horizon.horiz + plr.horizon.interpolatedoff(dasmoothratio); + lookangle crotscrnang = plr.angle.rotscrnang; if (!paused) { @@ -27,15 +28,12 @@ void drawscreen(int num, double dasmoothratio, bool sceneonly) cposy = prevloc.y + mulscale16(cposy - prevloc.y, dasmoothratio); cposz = prevloc.z + mulscale16(cposz - prevloc.z, dasmoothratio); - float inAngle = prevloc.ang; - inAngle += ((BClampAngle(cang - prevloc.ang + 1024) - 1024) * dasmoothratio) / 65536.0f; - if (cl_syncinput) { + cang = plr.angle.interpolatedsum(dasmoothratio); choriz = plr.horizon.interpolatedsum(dasmoothratio); + crotscrnang = plr.angle.interpolatedrotscrn(dasmoothratio); } - - cang = inAngle; } // wango @@ -55,7 +53,7 @@ void drawscreen(int num, double dasmoothratio, bool sceneonly) // Todo: render this with 30% light only. inpreparemirror = true; renderSetRollAngle(1024); - renderDrawRoomsQ16(cposx, cposy, cposz, FloatToFixed(cang), choriz.asq16(), floormirrorsector[i]); + renderDrawRoomsQ16(cposx, cposy, cposz, cang.asq16(), choriz.asq16(), floormirrorsector[i]); analyzesprites(plr, dasmoothratio); renderDrawMasks(); renderSetRollAngle(0); @@ -72,7 +70,10 @@ void drawscreen(int num, double dasmoothratio, bool sceneonly) if (cposz > floorz - lz) cposz = floorz - lz; - renderDrawRoomsQ16(cposx, cposy, cposz, FloatToFixed(cang), choriz.asq16(), plr.sector); + // do screen rotation. + renderSetRollAngle(crotscrnang.asbam() / (double)(BAMUNIT)); + + renderDrawRoomsQ16(cposx, cposy, cposz, cang.asq16(), choriz.asq16(), plr.sector); analyzesprites(plr, dasmoothratio); renderDrawMasks(); if (!sceneonly) @@ -80,7 +81,7 @@ void drawscreen(int num, double dasmoothratio, bool sceneonly) DrawHud(dasmoothratio); if (automapMode != am_off) { - DrawOverheadMap(cposx, cposy, int(cang)); + DrawOverheadMap(cposx, cposy, cang.asbuild()); } } } diff --git a/source/games/whaven/src/sound.cpp b/source/games/whaven/src/sound.cpp index 4f2537227..8a2373ae5 100644 --- a/source/games/whaven/src/sound.cpp +++ b/source/games/whaven/src/sound.cpp @@ -140,7 +140,7 @@ void GameInterface::UpdateSounds() if (player[pyrn].spritenum >= 0) { - listener.angle = -(float)player[pyrn].ang * pi::pi() / 1024; // Build uses a period of 2048. + listener.angle = -FixedToFloat(player[pyrn].angle.ang.asq16()) * pi::pi() / 1024; // Build uses a period of 2048. listener.velocity.Zero(); vec3_t ppos{ player[pyrn].x, player[pyrn].y, player[pyrn].z }; listener.position = GetSoundPos(&ppos); diff --git a/source/games/whaven/src/spellbooks.cpp b/source/games/whaven/src/spellbooks.cpp index 544791424..0b6f9d3be 100644 --- a/source/games/whaven/src/spellbooks.cpp +++ b/source/games/whaven/src/spellbooks.cpp @@ -62,7 +62,7 @@ void castaorb(PLAYER& plr) { spritesound(S_GENERALMAGIC3, &sprite[plr.spritenum]); else spritesound(S_SPELL1, &sprite[plr.spritenum]); - daang = plr.ang; + daang = plr.angle.ang.asbuild(); shootgun(plr, daang, 6); break; case 3: // MAGIC ARROW @@ -71,7 +71,7 @@ void castaorb(PLAYER& plr) { spritesound(S_GENERALMAGIC2, &sprite[plr.spritenum]); } else { - daang = BClampAngle(plr.ang - 36); + daang = BClampAngle(plr.angle.ang.asbuild() - 36); for (k = 0; k < 10; k++) { daang = BClampAngle(daang + (k << 1)); shootgun(plr, daang, 2); @@ -80,7 +80,7 @@ void castaorb(PLAYER& plr) { } break; case 4: // OPEN DOORS - daang = plr.ang; + daang = plr.angle.ang.asbuild(); shootgun(plr, daang, 7); if (isWh2()) spritesound(S_DOORSPELL, &sprite[plr.spritenum]); @@ -100,13 +100,13 @@ void castaorb(PLAYER& plr) { spritesound(S_FIRESPELL, &sprite[plr.spritenum]); } else { - daang = plr.ang; + daang = plr.angle.ang.asbuild(); shootgun(plr, daang, 3); spritesound(S_SPELL1, &sprite[plr.spritenum]); } break; case 7: // NUKE - daang = plr.ang; + daang = plr.angle.ang.asbuild(); shootgun(plr, daang, 4); if (isWh2()) spritesound(S_NUKESPELL, &sprite[plr.spritenum]); @@ -255,7 +255,7 @@ void nukespell(PLAYER& plr, short j) { sprite[j].cstat &= ~3; sprite[j].shade = 6; sprite[j].lotag = 360; - sprite[j].ang = (short) plr.ang; + sprite[j].ang = plr.angle.ang.asbuild(); sprite[j].hitag = 0; addscore(&plr, 150); diff --git a/source/games/whaven/src/weapons.cpp b/source/games/whaven/src/weapons.cpp index 615b2cda8..84c21bfa9 100644 --- a/source/games/whaven/src/weapons.cpp +++ b/source/games/whaven/src/weapons.cpp @@ -1609,7 +1609,7 @@ void shootgun(PLAYER& plr, float ang, int guntype) { } newstatus(pHitInfo.hitsprite, DIE); } - sprite[pHitInfo.hitsprite].ang = (short) (plr.ang + ((krand() & 32) - 64)); + sprite[pHitInfo.hitsprite].ang = plr.angle.ang.asbuild() + ((krand() & 32) - 64); if (sprite[pHitInfo.hitsprite].hitag > 0) newstatus(pHitInfo.hitsprite, PAIN); break; @@ -1966,11 +1966,11 @@ void shootgun(PLAYER& plr, float ang, int guntype) { sprite[j].z = plr.z + (24 << 8); sprite[j].cstat = 21; sprite[j].picnum = THROWPIKE; - sprite[j].ang = (short) ((((int) plr.ang + 2048 + 96) - 512) & 2047); + sprite[j].ang = ((plr.angle.ang.asbuild() + 2048 + 96) - 512) & 2047; sprite[j].xrepeat = 24; sprite[j].yrepeat = 24; sprite[j].clipdist = 32; - sprite[j].extra = (short) plr.ang; + sprite[j].extra = plr.angle.ang.asbuild(); sprite[j].shade = -15; sprite[j].xvel = (short) ((krand() & 256) - 128); sprite[j].yvel = (short) ((krand() & 256) - 128); @@ -1991,12 +1991,12 @@ void shootgun(PLAYER& plr, float ang, int guntype) { sprite[j].cstat = 21; sprite[j].picnum = THROWPIKE; - sprite[j].ang = (short) BClampAngle((plr.ang + 96) - 512); + sprite[j].ang = BClampAngle((plr.angle.ang.asbuild() + 96) - 512); sprite[j].xrepeat = 24; sprite[j].yrepeat = 24; sprite[j].clipdist = 24; - sprite[j].extra = (short) plr.ang; + sprite[j].extra = plr.angle.ang.asbuild(); sprite[j].shade = -15; sprite[j].xvel = (short) ((krand() & 256) - 128); sprite[j].yvel = (short) ((krand() & 256) - 128); @@ -2055,11 +2055,11 @@ void shootgun(PLAYER& plr, float ang, int guntype) { sprite[j].z = plr.z + (24 << 8); sprite[j].cstat = 21; sprite[j].picnum = THROWPIKE; - sprite[j].ang = (short) ((((int) plr.ang + 2048 + 96) - 512) & 2047); + sprite[j].ang = ((plr.angle.ang.asbuild() + 2048 + 96) - 512) & 2047; sprite[j].xrepeat = 24; sprite[j].yrepeat = 24; sprite[j].clipdist = 32; - sprite[j].extra = (short) plr.ang; + sprite[j].extra = plr.angle.ang.asbuild(); sprite[j].shade = -15; sprite[j].xvel = (short) ((krand() & 256) - 128); sprite[j].yvel = (short) ((krand() & 256) - 128); @@ -2079,12 +2079,12 @@ void shootgun(PLAYER& plr, float ang, int guntype) { sprite[j].cstat = 21; sprite[j].picnum = THROWPIKE; - sprite[j].ang = (short) BClampAngle((plr.ang) - 512); + sprite[j].ang = BClampAngle(plr.angle.ang.asbuild() - 512); sprite[j].xrepeat = 24; sprite[j].yrepeat = 24; sprite[j].clipdist = 24; - sprite[j].extra = (short) plr.ang; + sprite[j].extra = plr.angle.ang.asbuild(); sprite[j].shade = -15; sprite[j].xvel = (short) ((krand() & 256) - 128); sprite[j].yvel = (short) ((krand() & 256) - 128); @@ -2151,7 +2151,7 @@ void shootgun(PLAYER& plr, float ang, int guntype) { sprite[j].pal = 0; sprite[j].xrepeat = 64; sprite[j].yrepeat = 64; - sprite[j].ang = (short) plr.ang; + sprite[j].ang = plr.angle.ang.asbuild(); sprite[j].xvel = (short) (sintable[(daang + 2560) & 2047] >> 7); sprite[j].yvel = (short) (sintable[(daang) & 2047] >> 7); @@ -2275,7 +2275,7 @@ void swingdapunch(PLAYER& plr, int daweapon) { } void swingdaweapon(PLAYER& plr) { - float daang = plr.ang; + float daang = FixedToFloat(plr.angle.ang.asq16()); if (plr.currweaponframe == BOWWALK + 5 && plr.ammo[6] > 0) { plr.currweaponfired = 5; diff --git a/source/games/whaven/src/whani.cpp b/source/games/whaven/src/whani.cpp index 0ac75b5dd..1d1df1b16 100644 --- a/source/games/whaven/src/whani.cpp +++ b/source/games/whaven/src/whani.cpp @@ -282,8 +282,8 @@ void animateobjs(PLAYER& plr) { wall[k].shade = (byte) ((wall[k].shade + j) >> 1); } movestat = (short) movesprite((short) i, - ((sintable[((short) plr.ang + 512) & 2047]) << TICSPERFRAME) << 8, - ((sintable[(short) plr.ang & 2047]) << TICSPERFRAME) << 8, 0, 4 << 8, 4 << 8, 0); + (plr.angle.ang.bcos() << TICSPERFRAME) << 8, + (plr.angle.ang.bsin() << TICSPERFRAME) << 8, 0, 4 << 8, 4 << 8, 0); spr.cstat |= 0x8000; show2dsprite.Set(i); diff --git a/source/games/whaven/src/whfx.cpp b/source/games/whaven/src/whfx.cpp index d6163fea0..88d61e489 100644 --- a/source/games/whaven/src/whfx.cpp +++ b/source/games/whaven/src/whfx.cpp @@ -380,7 +380,7 @@ void revolvefx() { } if (plr.sector == revolvesector[i]) { - revolvesyncang = (short) plr.ang; + revolvesyncang = plr.angle.ang.asbuild(); revolvesyncrotang = 0; revolvesyncx = plr.x; revolvesyncy = plr.y; @@ -390,7 +390,7 @@ void revolvefx() { viewBackupPlayerLoc(pyrn); plr.x = out.getX(); plr.y = out.getY(); - plr.ang = ((revolvesyncang + revolvesyncrotang) & 2047); + plr.angle.settarget((revolvesyncang + revolvesyncrotang) & 2047); } } } @@ -431,7 +431,7 @@ void teleporter() { if (sector[plr.sector].lotag == 10) { if (plr.sector != plr.oldsector) { - daang = (short) plr.ang; + daang = plr.angle.ang.asbuild(); warpfxsprite(plr.spritenum); warp(plr.x, plr.y, plr.z, daang, plr.sector); viewBackupPlayerLoc(pyrn); @@ -441,7 +441,7 @@ void teleporter() { daang = (short) warpang; plr.sector = (short) warpsect; warpfxsprite(plr.spritenum); - plr.ang = (int) daang; + plr.angle.settarget(daang); justwarpedfx = 48; spritesound(S_WARP, &sprite[plr.spritenum]); setsprite(plr.spritenum, plr.x, plr.y, plr.z + (32 << 8)); @@ -997,7 +997,7 @@ void warpfxsprite(int s) { sprite[j].picnum = ANNIHILATE; short daang; if (s == plr.spritenum) { - daang = (short) plr.ang; + daang = plr.angle.ang.asbuild(); sprite[j].ang = daang; } else { daang = sprite[s].ang; diff --git a/source/games/whaven/src/whldsv.cpp b/source/games/whaven/src/whldsv.cpp index 203c6bcd2..31995057e 100644 --- a/source/games/whaven/src/whldsv.cpp +++ b/source/games/whaven/src/whldsv.cpp @@ -31,7 +31,7 @@ FSerializer& Serialize(FSerializer& arc, const char* key, PLAYER& sw, PLAYER* de arc("x", sw.x) ("y", sw.y) ("z", sw.z) - ("ang", sw.ang) + ("angle", sw.angle) ("horizon", sw.horizon) ("height", sw.height) ("hvel", sw.hvel) @@ -58,7 +58,6 @@ FSerializer& Serialize(FSerializer& arc, const char* key, PLAYER& sw, PLAYER* de ("onsomething", sw.onsomething) ("fallz", sw.fallz) ("dead", sw.dead) - ("turnaround", sw.turnAround) ("shadowtime", sw.shadowtime) ("helmettime", sw.helmettime) ("scoretime", sw.scoretime) diff --git a/source/games/whaven/src/whmap.cpp b/source/games/whaven/src/whmap.cpp index 041b739d8..dfc88614b 100644 --- a/source/games/whaven/src/whmap.cpp +++ b/source/games/whaven/src/whmap.cpp @@ -212,7 +212,7 @@ boolean prepareboard(const char* fname) { plr.x = pos.x; plr.y = pos.y; plr.z = pos.z; - plr.ang = ang; + plr.angle.ang = buildang(ang); // int ratcnt = 0; swingcnt = 0; @@ -786,7 +786,7 @@ boolean prepareboard(const char* fname) { sprite[plr.spritenum].shade = 0; sprite[plr.spritenum].xrepeat = 36; sprite[plr.spritenum].yrepeat = 36; - sprite[plr.spritenum].ang = (short) plr.ang; + sprite[plr.spritenum].ang = plr.angle.ang.asbuild(); sprite[plr.spritenum].xvel = 0; sprite[plr.spritenum].yvel = 0; sprite[plr.spritenum].zvel = 0; diff --git a/source/games/whaven/src/whplr.cpp b/source/games/whaven/src/whplr.cpp index 58ffa6a20..ed1acdd24 100644 --- a/source/games/whaven/src/whplr.cpp +++ b/source/games/whaven/src/whplr.cpp @@ -26,7 +26,7 @@ void viewBackupPlayerLoc( int nPlayer ) pPLocation.x = pSprite.x; pPLocation.y = pSprite.y; pPLocation.z = player[nPlayer].z; - pPLocation.ang = player[nPlayer].ang; + player[nPlayer].angle.backup(); player[nPlayer].horizon.backup(); } @@ -103,7 +103,7 @@ void initplayersprite(PLAYER& plr) { sprite[plr.spritenum].shade = 0; sprite[plr.spritenum].xrepeat = 36; sprite[plr.spritenum].yrepeat = 36; - sprite[plr.spritenum].ang = (short) plr.ang; + sprite[plr.spritenum].ang = plr.angle.ang.asbuild(); sprite[plr.spritenum].xvel = 0; sprite[plr.spritenum].yvel = 0; sprite[plr.spritenum].zvel = 0; @@ -237,13 +237,13 @@ void updateviewmap(PLAYER& plr) { void plruse(PLAYER& plr) { Neartag nt; - neartag(plr.x, plr.y, plr.z, (short) plr.sector, (short) plr.ang, nt, 1024, 3); + neartag(plr.x, plr.y, plr.z, (short) plr.sector, plr.angle.ang.asbuild(), nt, 1024, 3); if (nt.tagsector >= 0) { if (sector[nt.tagsector].hitag == 0) { operatesector(plr, nt.tagsector); } else { - short daang = (short) plr.ang; + short daang = plr.angle.ang.asbuild(); int daz2 = -mulscale16(plr.horizon.horiz.asq16(), 2000); Hitscan pHitInfo; hitscan(plr.x, plr.y, plr.z, plr.sector, // Start position @@ -581,7 +581,7 @@ void lockon(PLAYER& plr, int numshots, int shootguntype) { } } - daang = (short) (plr.ang - ((numshots * (128 / numshots)) >> 1)); + daang = plr.angle.ang.asbuild() - ((numshots * (128 / numshots)) >> 1); for (k = 0, s = 0; k < numshots; k++) { if (n > 0) { auto &spr = tspritelist[monsterlist[s]]; diff --git a/source/games/whaven/src/whtag.cpp b/source/games/whaven/src/whtag.cpp index d1e3c2ff2..0f56b923b 100644 --- a/source/games/whaven/src/whtag.cpp +++ b/source/games/whaven/src/whtag.cpp @@ -951,7 +951,7 @@ void animatetags(int nPlayer) { // Update sprite representation of player setsprite(plr.spritenum, plr.x, plr.y, plr.z + (plr.height)); - sprite[plr.spritenum].ang = (short) plr.ang; + sprite[plr.spritenum].ang = plr.angle.ang.asbuild(); } }