mirror of
https://github.com/ZDoom/Raze.git
synced 2025-03-23 17:31:14 +00:00
- Exhumed: Convert the weapon code.
This commit is contained in:
parent
33bfe4601f
commit
d7161a7368
8 changed files with 101 additions and 170 deletions
|
@ -118,7 +118,7 @@ enum
|
|||
|
||||
struct Weapon
|
||||
{
|
||||
int16_t nSeq;
|
||||
FName nSeqFile;
|
||||
int16_t b[12]; // seq offsets?
|
||||
int16_t nAmmoType;
|
||||
int16_t c;
|
||||
|
|
|
@ -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])
|
||||
{
|
||||
|
|
|
@ -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<int>(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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -126,8 +126,6 @@ struct SeqFrame
|
|||
using SeqFrameArray = TArray<SeqFrame>;
|
||||
using SeqArray = TArray<SeqFrameArray>;
|
||||
|
||||
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
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Reference in a new issue