diff --git a/source/games/exhumed/src/aistuff.h b/source/games/exhumed/src/aistuff.h index 26c20fc6b..77146fe9e 100644 --- a/source/games/exhumed/src/aistuff.h +++ b/source/games/exhumed/src/aistuff.h @@ -118,7 +118,7 @@ enum struct Weapon { - int16_t nSeq; + FName nSeqFile; int16_t b[12]; // seq offsets? int16_t nAmmoType; int16_t c; diff --git a/source/games/exhumed/src/grenade.cpp b/source/games/exhumed/src/grenade.cpp index 3915cf436..be49a187e 100644 --- a/source/games/exhumed/src/grenade.cpp +++ b/source/games/exhumed/src/grenade.cpp @@ -272,7 +272,7 @@ void AIGrenade::Tick(RunListEvent* ev) if (pActor->nTurn < 0) { PlayerList[nPlayer].nState = 0; - PlayerList[nPlayer].nSeqSize2 = 0; + PlayerList[nPlayer].nWeapFrame = 0; if (PlayerList[nPlayer].nAmmo[kWeaponGrenade]) { diff --git a/source/games/exhumed/src/gun.cpp b/source/games/exhumed/src/gun.cpp index 3472fa5a5..e4c9c3380 100644 --- a/source/games/exhumed/src/gun.cpp +++ b/source/games/exhumed/src/gun.cpp @@ -32,17 +32,17 @@ BEGIN_PS_NS Weapon WeaponInfo[] = { - { kSeqSword, { 0, 1, 3, 7, -1, 2, 4, 5, 6, 8, 9, 10 }, 0, 0, 0, true }, - { kSeqPistol, { 0, 3, 2, 4, -1, 1, 0, 0, 0, 0, 0, 0 }, 1, 0, 1, false }, - { kSeqM60, { 0, 5, 6, 16, -1, 21, 0, 0, 0, 0, 0, 0 }, 2, 0, 1, false }, - { kSeqFlamer, { 0, 2, 5, 5, 6, 1, 0, 0, 0, 0, 0, 0 }, 3, 4, 1, false }, - { kSeqGrenade, { 0, 2, 3, 4, -1, 1, 0, 0, 0, 0, 0, 0 }, 4, 0, 1, true }, - { kSeqCobra, { 0, 1, 2, 2, -1, 4, 0, 0, 0, 0, 0, 0 }, 5, 0, 1, true }, - { kSeqRavolt, { 0, 1, 2, 3, -1, 4, 0, 0, 0, 0, 0, 0 }, 6, 0, 1, true }, - { kSeqRothands,{ 0, 1, 2, -1, -1, -1, 0, 0, 0, 0, 0, 0 }, 7, 0, 0, true }, - { kSeqDead, { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0, 1, 0, false }, - { kSeqDeadEx, { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0, 1, 0, false }, - { kSeqDeadBrn, { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0, 1, 0, false } + { "sword", { 0, 1, 3, 7, -1, 2, 4, 5, 6, 8, 9, 10 }, 0, 0, 0, true }, + { "pistol", { 0, 3, 2, 4, -1, 1, 0, 0, 0, 0, 0, 0 }, 1, 0, 1, false }, + { "m_60", { 0, 5, 6, 16, -1, 21, 0, 0, 0, 0, 0, 0 }, 2, 0, 1, false }, + { "flamer", { 0, 2, 5, 5, 6, 1, 0, 0, 0, 0, 0, 0 }, 3, 4, 1, false }, + { "grenade", { 0, 2, 3, 4, -1, 1, 0, 0, 0, 0, 0, 0 }, 4, 0, 1, true }, + { "cobra", { 0, 1, 2, 2, -1, 4, 0, 0, 0, 0, 0, 0 }, 5, 0, 1, true }, + { "ravolt", { 0, 1, 2, 3, -1, 4, 0, 0, 0, 0, 0, 0 }, 6, 0, 1, true }, + { "rothands",{ 0, 1, 2, -1, -1, -1, 0, 0, 0, 0, 0, 0 }, 7, 0, 0, true }, + { "dead", { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0, 1, 0, false }, + { "deadex", { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0, 1, 0, false }, + { "deadbrn", { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0, 1, 0, false } }; static const uint8_t nMinAmmo[] = { 0, 24, 51, 50, 1, 0, 0 }; @@ -123,7 +123,7 @@ void ResetPlayerWeapons(int nPlayer) PlayerList[nPlayer].nCurrentWeapon = 0; PlayerList[nPlayer].nState = 0; - PlayerList[nPlayer].nSeqSize2 = 0; + PlayerList[nPlayer].nWeapFrame = 0; PlayerList[nPlayer].pPlayerGrenade = nullptr; PlayerList[nPlayer].nPlayerWeapons = 0x1; // turn on bit 1 only @@ -149,7 +149,7 @@ void SetNewWeapon(int nPlayer, int nWeapon) PlayerList[nPlayer].nState = 5; SetPlayerMummified(nPlayer, true); - PlayerList[nPlayer].nSeqSize2 = 0; + PlayerList[nPlayer].nWeapFrame = 0; } else { @@ -170,7 +170,7 @@ void SetNewWeapon(int nPlayer, int nWeapon) else { PlayerList[nPlayer].nCurrentWeapon = nWeapon; - PlayerList[nPlayer].nSeqSize2 = 0; + PlayerList[nPlayer].nWeapFrame = 0; } } else { @@ -193,7 +193,7 @@ void SetNewWeaponImmediate(int nPlayer, int nWeapon) PlayerList[nPlayer].nCurrentWeapon = nWeapon; PlayerList[nPlayer].nNextWeapon = -1; - PlayerList[nPlayer].nSeqSize2 = 0; + PlayerList[nPlayer].nWeapFrame = 0; PlayerList[nPlayer].nState = 0; } @@ -365,35 +365,32 @@ void MoveWeapons(int nPlayer) { pPlayer->nCurrentWeapon = pPlayer->nNextWeapon; pPlayer->nState = 0; - pPlayer->nSeqSize2 = 0; + pPlayer->nWeapFrame = 0; pPlayer->nNextWeapon = -1; } return; } - // loc_26ACC - int eax = pPlayer->nState; - int nSeq = WeaponInfo[nWeapon].nSeq; - - int var_3C = getSeqFromId(nSeq, WeaponInfo[nWeapon].b[eax]); + const auto nSeqFile = WeaponInfo[nWeapon].nSeqFile; + auto weapSeq = std::ref(getSequence(nSeqFile, WeaponInfo[nWeapon].b[pPlayer->nState])); + auto seqFrame = std::ref(weapSeq.get()[pPlayer->nWeapFrame]); int var_1C = (pPlayer->nDouble > 0) + 1; - - frames = var_1C - 1; + int frames = var_1C - 1; for (frames = var_1C; frames > 0; frames--) { - seq_MoveSequence(pPlayerActor, var_3C, pPlayer->nSeqSize2); + playFrameSound(pPlayerActor, seqFrame.get()); - pPlayer->nSeqSize2++; + pPlayer->nWeapFrame++; dword_96E22++; if (dword_96E22 >= 15) { dword_96E22 = 0; } - if (pPlayer->nSeqSize2 >= getSeqFrameCount(var_3C)) + if (pPlayer->nWeapFrame >= weapSeq.get().Size()) { if (pPlayer->nNextWeapon == -1) { @@ -457,7 +454,7 @@ void MoveWeapons(int nPlayer) if (nWeapon == kWeaponPistol && pPlayer->nPistolClip <= 0) { pPlayer->nState = 3; - pPlayer->nSeqSize2 = 0; + pPlayer->nWeapFrame = 0; pPlayer->nPistolClip = min(6, pPlayer->nAmmo[kWeaponPistol]); break; @@ -471,7 +468,7 @@ void MoveWeapons(int nPlayer) } else { - pPlayer->nSeqSize2 = getSeqFrameCount(var_3C) - 1; + pPlayer->nWeapFrame = weapSeq.get().Size() - 1; continue; } } @@ -568,7 +565,7 @@ void MoveWeapons(int nPlayer) SelectNewWeapon(nPlayer); pPlayer->nState = 5; - pPlayer->nSeqSize2 = getSeqFrameCount(getSeqFromId(nSeq, WeaponInfo[kWeaponGrenade].b[0])) - 1; // CHECKME + pPlayer->nWeapFrame = getSequence(nSeqFile, WeaponInfo[kWeaponGrenade].b[0]).Size() - 1; // CHECKME goto loc_flag; // FIXME } } @@ -617,9 +614,8 @@ void MoveWeapons(int nPlayer) } } - // loc_26FC5 - var_3C = getSeqFromId(WeaponInfo[nWeapon].nSeq, WeaponInfo[nWeapon].b[pPlayer->nState]); - pPlayer->nSeqSize2 = 0; + weapSeq = std::ref(getSequence(WeaponInfo[nWeapon].nSeqFile, WeaponInfo[nWeapon].b[pPlayer->nState])); + pPlayer->nWeapFrame = 0; } else { @@ -637,17 +633,15 @@ void MoveWeapons(int nPlayer) pPlayer->nState = 5; } - pPlayer->nSeqSize2 = 0; + pPlayer->nWeapFrame = 0; continue; } - } // end of if (pPlayer->field_34 >= getSeqFrameCount(var_3C)) + } loc_flag: + seqFrame = std::ref(weapSeq.get()[pPlayer->nWeapFrame]); - // loc_27001 - int nFrameFlag = getSeqFrameFlags(getSeqFrame(var_3C, pPlayer->nSeqSize2)); - - if (((!(nSectFlag & kSectUnderwater)) || nWeapon == kWeaponRing) && (nFrameFlag & 4)) + if (((!(nSectFlag & kSectUnderwater)) || nWeapon == kWeaponRing) && (seqFrame.get().flags & 4)) { BuildFlash(nPlayer, 512); AddFlash( @@ -656,7 +650,7 @@ loc_flag: 0); } - if (nFrameFlag & 0x80) + if (seqFrame.get().flags & 0x80) { int nAction = pPlayer->nAction; @@ -678,7 +672,7 @@ loc_flag: { pPlayer->nTemperature = 0; pPlayer->nState = 4; - pPlayer->nSeqSize2 = 0; + pPlayer->nWeapFrame = 0; } } @@ -714,13 +708,13 @@ loc_flag: thePos.Z += nHeight; - int var_28; + int newState; if (pPlayer->nState == 2) { - var_28 = 6; + newState = 6; } else { - var_28 = 9; + newState = 9; } auto cRange = CheckCloseRange(nPlayer, thePos, &pSectorB); @@ -738,7 +732,7 @@ loc_flag: if (cRange.type == kHitWall) { // loc_2730E: - var_28 += 2; + newState += 2; } else if (cRange.type == kHitSprite) { @@ -746,14 +740,14 @@ loc_flag: if (pActor2->spr.cstat & (CSTAT_SPRITE_ALIGNMENT_WALL | CSTAT_SPRITE_ONE_SIDE)) { - var_28 += 2; + newState += 2; } else if (pActor2->spr.statnum > 90 && pActor2->spr.statnum <= 199) { runlist_DamageEnemy(pActor2, pPlayerActor, nDamage); if (pActor2->spr.statnum < 102) { - var_28++; + newState++; } else if (pActor2->spr.statnum == 102) { @@ -761,10 +755,10 @@ loc_flag: BuildAnim(nullptr, "poof", 0, thePos, pSectorB, 0.46875, 0); } else if (pActor2->spr.statnum == kStatExplodeTrigger) { - var_28 += 2; + newState += 2; } else { - var_28++; + newState++; } } else @@ -777,8 +771,8 @@ loc_flag: } // loc_27399: - pPlayer->nState = var_28; - pPlayer->nSeqSize2 = 0; + pPlayer->nState = newState; + pPlayer->nWeapFrame = 0; break; } case kWeaponFlamer: @@ -787,7 +781,7 @@ loc_flag: { DoBubbles(nPlayer); pPlayer->nState = 1; - pPlayer->nSeqSize2 = 0; + pPlayer->nWeapFrame = 0; StopActorSound(pPlayerActor); break; } @@ -887,7 +881,7 @@ loc_flag: if (nWeapon == kWeaponM60 && pPlayer->nPlayerClip <= 0) { pPlayer->nState = 3; - pPlayer->nSeqSize2 = 0; + pPlayer->nWeapFrame = 0; // goto loc_27609: } } @@ -917,11 +911,9 @@ void DrawWeapons(double interpfrac) if (nWeapon < -1) { return; } - int var_34 = PlayerList[nLocalPlayer].nState; - int var_30 = getSeqFromId(WeaponInfo[nWeapon].nSeq); - - int var_28 = var_30 + WeaponInfo[nWeapon].b[var_34]; + int nState = PlayerList[nLocalPlayer].nState; + const auto weapSeqs = getFileSeqs(WeaponInfo[nWeapon].nSeqFile); int8_t nShade = PlayerList[nLocalPlayer].pActor->sector()->ceilingshade; @@ -959,7 +951,7 @@ void DrawWeapons(double interpfrac) yOffset = nVal * fabs(BobVal(nBobAngle)) * (1. / 16.); - if (var_34 == 1) + if (nState == 1) { xOffset = nVal * BobVal(nBobAngle + 512) * (1. / 8.); } @@ -969,7 +961,7 @@ void DrawWeapons(double interpfrac) obobangle = bobangle = 512; } - if (nWeapon == 3 && var_34 == 1) { + if (nWeapon == 3 && nState == 1) { seq_DrawPilotLightSeq(xOffset, yOffset); } else if (nWeapon == 8 || nWeapon == 9) @@ -986,18 +978,26 @@ void DrawWeapons(double interpfrac) xOffset += weaponOffsets.first.X; yOffset += weaponOffsets.first.Y; - seq_DrawGunSequence(var_28, PlayerList[nLocalPlayer].nSeqSize2, xOffset, yOffset, nShade, nPal, angle, screenalign); + seq_DrawGunSequence(weapSeqs->operator[](WeaponInfo[nWeapon].b[nState]), PlayerList[nLocalPlayer].nWeapFrame, xOffset, yOffset, nShade, nPal, angle, screenalign); if (nWeapon != kWeaponM60) return; - switch (var_34) + switch (nState) { default: return; case 0: + case 5: { + static constexpr int offsetTable[2][4] = { + {1, 2, 3, 4}, + {20, 19, 18, 17} + }; + + const auto& offsets = offsetTable[nState == 5]; + int nClip = PlayerList[nLocalPlayer].nPlayerClip; if (nClip <= 0) @@ -1007,121 +1007,58 @@ void DrawWeapons(double interpfrac) if (nClip <= 3) { - nSeqOffset = var_30 + 1; + nSeqOffset = offsets[0]; } else if (nClip <= 6) { - nSeqOffset = var_30 + 2; + nSeqOffset = offsets[1]; } else if (nClip <= 25) { - nSeqOffset = var_30 + 3; + nSeqOffset = offsets[2]; } else //if (nClip > 25) { - nSeqOffset = var_30 + 4; + nSeqOffset = offsets[3]; } - seq_DrawGunSequence(nSeqOffset, PlayerList[nLocalPlayer].nSeqSize2, xOffset, yOffset, nShade, nPal, angle); + seq_DrawGunSequence(weapSeqs->operator[](nSeqOffset), PlayerList[nLocalPlayer].nWeapFrame, xOffset, yOffset, nShade, nPal, angle); return; } case 1: - { - int nClip = PlayerList[nLocalPlayer].nPlayerClip; - - int edx = (nClip % 3) * 4; - - if (nClip <= 0) { - return; - } - - seq_DrawGunSequence(var_30 + 8, edx, xOffset, yOffset, nShade, nPal, angle); - - if (nClip <= 3) { - return; - } - - seq_DrawGunSequence(var_30 + 9, edx, xOffset, yOffset, nShade, nPal, angle); - - if (nClip <= 6) { - return; - } - - seq_DrawGunSequence(var_30 + 10, edx, xOffset, yOffset, nShade, nPal, angle); - - if (nClip <= 25) { - return; - } - - seq_DrawGunSequence(var_30 + 11, edx, xOffset, yOffset, nShade, nPal, angle); - return; - } case 2: { int nClip = PlayerList[nLocalPlayer].nPlayerClip; - - int dx = PlayerList[nLocalPlayer].nSeqSize2; + int nFrame = nState == 1 ? (nClip % 3) * 4 : PlayerList[nLocalPlayer].nWeapFrame; if (nClip <= 0) { return; } - seq_DrawGunSequence(var_30 + 8, dx, xOffset, yOffset, nShade, nPal, angle); + seq_DrawGunSequence(weapSeqs->operator[](8), nFrame, xOffset, yOffset, nShade, nPal, angle); if (nClip <= 3) { return; } - seq_DrawGunSequence(var_30 + 9, dx, xOffset, yOffset, nShade, nPal, angle); + seq_DrawGunSequence(weapSeqs->operator[](9), nFrame, xOffset, yOffset, nShade, nPal, angle); if (nClip <= 6) { return; } - seq_DrawGunSequence(var_30 + 10, dx, xOffset, yOffset, nShade, nPal, angle); + seq_DrawGunSequence(weapSeqs->operator[](10), nFrame, xOffset, yOffset, nShade, nPal, angle); if (nClip <= 25) { return; } - seq_DrawGunSequence(var_30 + 11, dx, xOffset, yOffset, nShade, nPal, angle); + seq_DrawGunSequence(weapSeqs->operator[](11), nFrame, xOffset, yOffset, nShade, nPal, angle); return; } - case 3: case 4: - return; - - case 5: { - int nClip = PlayerList[nLocalPlayer].nPlayerClip; - - int ax = PlayerList[nLocalPlayer].nSeqSize2; - - if (nClip <= 0) { - return; - } - - int nSeqOffset; - - if (nClip <= 3) - { - nSeqOffset = var_30 + 20; - } - else if (nClip <= 6) - { - nSeqOffset = var_30 + 19; - } - else if (nClip <= 25) - { - nSeqOffset = var_30 + 18; - } - else - { - nSeqOffset = var_30 + 17; - } - - seq_DrawGunSequence(nSeqOffset, ax, xOffset, yOffset, nShade, nPal, angle); return; } } diff --git a/source/games/exhumed/src/player.cpp b/source/games/exhumed/src/player.cpp index 5e563ad73..bc8146b40 100644 --- a/source/games/exhumed/src/player.cpp +++ b/source/games/exhumed/src/player.cpp @@ -286,7 +286,7 @@ void RestartPlayer(int nPlayer) pPlayer->nMaskAmount = 0; pPlayer->nInvisible = 0; pPlayer->bIsFiring = 0; - pPlayer->nSeqSize2 = 0; + pPlayer->nWeapFrame = 0; pPlayer->nState = 0; pPlayer->nDouble = 0; pPlayer->nSeq = kSeqJoe; @@ -2078,7 +2078,7 @@ FSerializer& Serialize(FSerializer& arc, const char* keyname, Player& w, Player* .Array("ammo", w.nAmmo, countof(w.nAmmo)) ("weapon", w.nCurrentWeapon) ("isfiring", w.bIsFiring) - ("field3f", w.nSeqSize2) + ("field3f", w.nWeapFrame) ("field38", w.nNextWeapon) ("field3a", w.nState) ("field3c", w.nLastWeapon) @@ -2171,7 +2171,7 @@ DEFINE_FIELD_X(ExhumedPlayer, Player, nAmmo); // TODO - kMaxWeapons? DEFINE_FIELD_X(ExhumedPlayer, Player, nPlayerWeapons); DEFINE_FIELD_X(ExhumedPlayer, Player, nCurrentWeapon); -DEFINE_FIELD_X(ExhumedPlayer, Player, nSeqSize2); +DEFINE_FIELD_X(ExhumedPlayer, Player, nWeapFrame); DEFINE_FIELD_X(ExhumedPlayer, Player, bIsFiring); DEFINE_FIELD_X(ExhumedPlayer, Player, nNextWeapon); DEFINE_FIELD_X(ExhumedPlayer, Player, nState); diff --git a/source/games/exhumed/src/player.h b/source/games/exhumed/src/player.h index 01e13b8ca..bd24b72dc 100644 --- a/source/games/exhumed/src/player.h +++ b/source/games/exhumed/src/player.h @@ -70,7 +70,7 @@ struct Player int16_t nAmmo[7]; // TODO - kMaxWeapons? int16_t nCurrentWeapon; - int16_t nSeqSize2; + uint16_t nWeapFrame; int16_t bIsFiring; int16_t nNextWeapon; int16_t nState; diff --git a/source/games/exhumed/src/sequence.cpp b/source/games/exhumed/src/sequence.cpp index 9a897ad7a..14338bf5a 100644 --- a/source/games/exhumed/src/sequence.cpp +++ b/source/games/exhumed/src/sequence.cpp @@ -277,9 +277,9 @@ int getSeqFrameChunkFlags(const int nChunk) // //--------------------------------------------------------------------------- -const SeqFrameArray& getSequence(const FName nSeqFile, const unsigned nSeqIndex) +SeqArray* getFileSeqs(const FName nSeqFile) { - return FileSeqMap.CheckKey(nSeqFile)->operator[](nSeqIndex); + return FileSeqMap.CheckKey(nSeqFile); } //--------------------------------------------------------------------------- @@ -691,46 +691,36 @@ void seq_DrawPilotLightSeq(double xOffset, double yOffset) // //--------------------------------------------------------------------------- -int seq_DrawGunSequence(int nSeqOffset, int16_t dx, double xOffs, double yOffs, int nShade, int nPal, DAngle angle, bool align) +void seq_DrawGunSequence(const SeqFrameArray& weapSeq, int16_t frameIndex, double xOffs, double yOffs, int nShade, int nPal, DAngle angle, bool align) { - int nFrame = getSeqFrame(nSeqOffset, dx); - int nFrameBase = getSeqFrameChunk(nFrame); - int nFrameSize = getSeqFrameChunkCount(nFrame); - int frameFlag = getSeqFrameFlags(nFrame); + const auto& seqFrame = weapSeq[frameIndex]; - while (1) + if (seqFrame.flags & 4) + nShade = -100; + + for (unsigned i = 0; i < seqFrame.chunks.Size(); i++) { - nFrameSize--; - if (nFrameSize < 0) - break; + const auto& frameChunk = seqFrame.chunks[i]; - int x = getSeqFrameChunkPosX(nFrameBase) + 160; - int y = getSeqFrameChunkPosY(nFrameBase) + 100; + int x = frameChunk.xpos + 160; + int y = frameChunk.ypos + 100; int stat = 0; - if (getSeqFrameChunkFlags(nFrameBase) & 1) + if (frameChunk.flags & 1) stat |= RS_XFLIPHUD; - if (getSeqFrameChunkFlags(nFrameBase) & 2) + if (frameChunk.flags & 2) stat |= RS_YFLIPHUD; if (align) stat |= RS_ALIGN_R; - int16_t nTile = getSeqFrameChunkPicnum(nFrameBase); - - if (frameFlag & 4) - nShade = -100; - double alpha = 1; if (PlayerList[nLocalPlayer].nInvisible) { alpha = 0.3; } - hud_drawsprite(x + xOffs, y + yOffs, 65536, angle.Degrees(), nTile, nShade, nPal, stat, alpha); - nFrameBase++; + hud_drawsprite(x + xOffs, y + yOffs, 65536, angle.Degrees(), frameChunk.picnum, nShade, nPal, stat, alpha); } - - return frameFlag; } int seq_GetFrameSound(int val, int edx) @@ -867,8 +857,9 @@ void seq_PlotSequence(const int nSprite, const FName seqFile, const int16_t seqI seqOffset = (((pTSprite->Angles.Yaw + DAngle22_5 - nAngle).Buildang()) & kAngleMask) >> 8; } - const auto& baseFrame = getSequence(seqFile, seqIndex)[frameIndex]; - const auto& drawFrame = getSequence(seqFile, seqIndex + seqOffset)[frameIndex]; + const auto fileSeqs = getFileSeqs(seqFile); + const auto& baseFrame = fileSeqs->operator[](seqIndex)[frameIndex]; + const auto& drawFrame = fileSeqs->operator[](seqIndex + seqOffset)[frameIndex]; const auto chunkCount = drawFrame.chunks.Size(); const auto nShade = (baseFrame.flags & 4) ? pTSprite->shade - 100 : pTSprite->shade; diff --git a/source/games/exhumed/src/sequence.h b/source/games/exhumed/src/sequence.h index d44f1366d..8f8e646f3 100644 --- a/source/games/exhumed/src/sequence.h +++ b/source/games/exhumed/src/sequence.h @@ -126,8 +126,6 @@ struct SeqFrame using SeqFrameArray = TArray; using SeqArray = TArray; -extern int16_t frames; - extern int16_t nShadowWidth; extern int16_t nFlameHeight; @@ -142,7 +140,7 @@ int seq_GetSeqPicnum2(int16_t nSeq, int16_t nFrame); int seq_GetSeqPicnum(int16_t nSeq, int16_t edx, int16_t ebx); void seq_DrawStatusSequence(int16_t nSequence, uint16_t edx, int16_t ebx); -int seq_DrawGunSequence(int nSeqOffset, int16_t dx, double xOffs, double yOffs, int nShade, int nPal, DAngle angle, bool align = false); +void seq_DrawGunSequence(const SeqFrameArray& weapSeq, int16_t frameIndex, double xOffs, double yOffs, int nShade, int nPal, DAngle angle, bool align = false); void seq_PlotSequence(const int nSprite, const FName seqFile, const int16_t seqIndex, const int16_t frameIndex, const int16_t nFlags); void seq_PlotArrowSequence(const int nSprite, const FName seqFile, const int16_t seqIndex, const int frameIndex); void seq_DrawPilotLightSeq(double xOffset, double yOffset); @@ -158,8 +156,13 @@ int getSeqFrameChunkPosY(const int nChunk); int getSeqFrameChunkPicnum(const int nChunk); int getSeqFrameChunkFlags(const int nChunk); -const SeqFrameArray& getSequence(const FName nSeqFile, const unsigned nSeqIndex = 0); +SeqArray* getFileSeqs(const FName nSeqFile); void playFrameSound(DExhumedActor* actor, const SeqFrame& seqFrame); +inline const SeqFrameArray& getSequence(const FName nSeqFile, const unsigned nSeqIndex = 0) +{ + return getFileSeqs(nSeqFile)->operator[](nSeqIndex); +} + END_PS_NS diff --git a/wadsrc/static/zscript/games/exhumed/exhumedgame.zs b/wadsrc/static/zscript/games/exhumed/exhumedgame.zs index 961a480d0..b96fafd16 100644 --- a/wadsrc/static/zscript/games/exhumed/exhumedgame.zs +++ b/wadsrc/static/zscript/games/exhumed/exhumedgame.zs @@ -55,7 +55,7 @@ struct ExhumedPlayer native native int16 nPlayerWeapons; native int16 nCurrentWeapon; - native int16 nSeqSize2; + native int16 nWeapFrame; native int16 nNextWeapon; native int16 nState; native int16 nLastWeapon;