Skip to content

Commit

Permalink
- Exhumed: Remove gotos in doPlayerItemPickups() and use flag syste…
Browse files Browse the repository at this point in the history
…m like PowerslaveGDX.
  • Loading branch information
mjr4077au committed Mar 24, 2023
1 parent 3f6a066 commit 48803b3
Showing 1 changed file with 69 additions and 64 deletions.
133 changes: 69 additions & 64 deletions source/games/exhumed/src/playerpickups.cpp
Expand Up @@ -81,6 +81,13 @@ static DExhumedActor* feebtag(const DVector3& pos, sectortype* pSector, int nVal
//
//---------------------------------------------------------------------------

enum
{
kPickupProcess = 1,
kPickupOnConsole = 2,
kPickupDefaults = kPickupProcess | kPickupOnConsole,
};

void doPlayerItemPickups(Player* const pPlayer)
{
const auto pPlayerActor = pPlayer->pActor;
Expand All @@ -99,53 +106,17 @@ void doPlayerItemPickups(Player* const pPlayer)
int tintRed = 0;
int tintGreen = 16;
int nSound = -1;
int pickFlag = 0;
int var_40;

switch (itemtype)
{
do_default:
default:
{
// loc_1B3C7

// CHECKME - is order of evaluation correct?
if (!mplevel || (statBase >= 25 && (statBase <= 25 || statBase == 50)))
{
// If this is an anim we need to properly destroy it so we need to do some proper detection and not wild guesses.
if (pPickupActor->nRun == pPickupActor->nDamage && pPickupActor->nRun != 0 && pPickupActor->nPhase == ITEM_MAGIC)
DestroyAnim(pPickupActor);
else
DeleteActor(pPickupActor);
}
else
{
StartRegenerate(pPickupActor);
}
do_default_b:
// loc_1BA74
if (pPlayer->nPlayer == nLocalPlayer)
{
if (nItemText[statBase] > -1 && nTotalPlayers == 1)
{
pickupMessage(statBase);
}

TintPalette(tintRed * 4, tintGreen * 4, 0);

if (nSound > -1)
{
PlayLocalSound(nSound, 0);
}
}

break;
}
case 0: // Speed Loader
{
if (AddAmmo(pPlayer->nPlayer, 1, pPickupActor->spr.hitag))
{
nSound = StaticSound[kSoundAmmoPickup];
goto do_default;
pickFlag |= kPickupDefaults;
}

break;
Expand All @@ -155,7 +126,7 @@ void doPlayerItemPickups(Player* const pPlayer)
if (AddAmmo(pPlayer->nPlayer, 3, pPickupActor->spr.hitag))
{
nSound = StaticSound[kSoundAmmoPickup];
goto do_default;
pickFlag |= kPickupDefaults;
}
break;
}
Expand All @@ -165,7 +136,7 @@ void doPlayerItemPickups(Player* const pPlayer)
{
nSound = StaticSound[kSoundAmmoPickup];
CheckClip(pPlayer->nPlayer);
goto do_default;
pickFlag |= kPickupDefaults;
}
break;
}
Expand Down Expand Up @@ -206,7 +177,7 @@ void doPlayerItemPickups(Player* const pPlayer)
}
else
{
goto do_default;
pickFlag |= kPickupDefaults;
}
}
break;
Expand All @@ -229,13 +200,13 @@ void doPlayerItemPickups(Player* const pPlayer)
case 45:
case 52:
{
goto do_default;
pickFlag |= kPickupDefaults;
}

case 5: // Map
{
GrabMap();
goto do_default;
pickFlag |= kPickupDefaults;
}

case 6: // Berry Twig
Expand Down Expand Up @@ -304,7 +275,7 @@ void doPlayerItemPickups(Player* const pPlayer)
tintGreen = 0;
}

goto do_default;
pickFlag |= kPickupDefaults;
}
}

Expand Down Expand Up @@ -373,7 +344,7 @@ void doPlayerItemPickups(Player* const pPlayer)
tintGreen = 0;
}

goto do_default;
pickFlag |= kPickupDefaults;
}
}

Expand Down Expand Up @@ -442,7 +413,7 @@ void doPlayerItemPickups(Player* const pPlayer)
tintGreen = 0;
}

goto do_default;
pickFlag |= kPickupDefaults;
}
}

Expand All @@ -468,7 +439,7 @@ void doPlayerItemPickups(Player* const pPlayer)
case 12: // Still Beating Heart
{
if (GrabItem(pPlayer->nPlayer, kItemHeart)) {
goto do_default;
pickFlag |= kPickupDefaults;
}

break;
Expand All @@ -477,7 +448,7 @@ void doPlayerItemPickups(Player* const pPlayer)
case 13: // Scarab amulet(Invicibility)
{
if (GrabItem(pPlayer->nPlayer, kItemInvincibility)) {
goto do_default;
pickFlag |= kPickupDefaults;
}

break;
Expand All @@ -486,7 +457,7 @@ void doPlayerItemPickups(Player* const pPlayer)
case 14: // Severed Slave Hand(double damage)
{
if (GrabItem(pPlayer->nPlayer, kItemDoubleDamage)) {
goto do_default;
pickFlag |= kPickupDefaults;
}

break;
Expand All @@ -495,7 +466,7 @@ void doPlayerItemPickups(Player* const pPlayer)
case 15: // Unseen eye(Invisibility)
{
if (GrabItem(pPlayer->nPlayer, kItemInvisibility)) {
goto do_default;
pickFlag |= kPickupDefaults;
}

break;
Expand All @@ -504,7 +475,7 @@ void doPlayerItemPickups(Player* const pPlayer)
case 16: // Torch
{
if (GrabItem(pPlayer->nPlayer, kItemTorch)) {
goto do_default;
pickFlag |= kPickupDefaults;
}

break;
Expand All @@ -513,7 +484,7 @@ void doPlayerItemPickups(Player* const pPlayer)
case 17: // Sobek Mask
{
if (GrabItem(pPlayer->nPlayer, kItemMask)) {
goto do_default;
pickFlag |= kPickupDefaults;
}

break;
Expand All @@ -531,7 +502,7 @@ void doPlayerItemPickups(Player* const pPlayer)

tintGreen = 32;
tintRed = 32;
goto do_default;
pickFlag |= kPickupDefaults;
}

// FIXME - lots of repeated code from here down!!
Expand Down Expand Up @@ -570,7 +541,7 @@ void doPlayerItemPickups(Player* const pPlayer)
}

if (statBase <= 50) {
goto do_default;
pickFlag |= kPickupDefaults;
}

pPickupActor->spr.cstat = CSTAT_SPRITE_INVISIBLE;
Expand Down Expand Up @@ -632,7 +603,7 @@ void doPlayerItemPickups(Player* const pPlayer)
}

if (statBase <= 50) {
goto do_default;
pickFlag |= kPickupDefaults;
}

pPickupActor->spr.cstat = CSTAT_SPRITE_INVISIBLE;
Expand Down Expand Up @@ -694,7 +665,7 @@ void doPlayerItemPickups(Player* const pPlayer)
}

if (statBase <= 50) {
goto do_default;
pickFlag |= kPickupDefaults;
}

pPickupActor->spr.cstat = CSTAT_SPRITE_INVISIBLE;
Expand Down Expand Up @@ -756,7 +727,7 @@ void doPlayerItemPickups(Player* const pPlayer)
}

if (statBase <= 50) {
goto do_default;
pickFlag |= kPickupDefaults;
}

pPickupActor->spr.cstat = CSTAT_SPRITE_INVISIBLE;
Expand Down Expand Up @@ -818,7 +789,7 @@ void doPlayerItemPickups(Player* const pPlayer)
}

if (statBase <= 50) {
goto do_default;
pickFlag |= kPickupDefaults;
}

pPickupActor->spr.cstat = CSTAT_SPRITE_INVISIBLE;
Expand Down Expand Up @@ -880,7 +851,7 @@ void doPlayerItemPickups(Player* const pPlayer)
}

if (statBase <= 50) {
goto do_default;
pickFlag |= kPickupDefaults;
}

pPickupActor->spr.cstat = CSTAT_SPRITE_INVISIBLE;
Expand Down Expand Up @@ -910,7 +881,7 @@ void doPlayerItemPickups(Player* const pPlayer)
{
if (AddAmmo(pPlayer->nPlayer, 5, 1)) {
nSound = StaticSound[kSoundAmmoPickup];
goto do_default;
pickFlag |= kPickupDefaults;
}

break;
Expand All @@ -920,7 +891,7 @@ void doPlayerItemPickups(Player* const pPlayer)
{
if (AddAmmo(pPlayer->nPlayer, 6, pPickupActor->spr.hitag)) {
nSound = StaticSound[kSoundAmmoPickup];
goto do_default;
pickFlag |= kPickupDefaults;
}

break;
Expand All @@ -941,11 +912,11 @@ void doPlayerItemPickups(Player* const pPlayer)

if (nTotalPlayers > 1)
{
goto do_default_b;
pickFlag |= kPickupOnConsole;
}
else
{
goto do_default;
pickFlag |= kPickupDefaults;
}
}

Expand All @@ -966,7 +937,7 @@ void doPlayerItemPickups(Player* const pPlayer)
pPlayer->nMagic = 1000;
}

goto do_default;
pickFlag |= kPickupDefaults;
}

case 53: // Scarab (Checkpoint)
Expand Down Expand Up @@ -996,6 +967,40 @@ void doPlayerItemPickups(Player* const pPlayer)
break;
}
}

if (pickFlag & kPickupProcess)
{
if (!mplevel || (statBase >= 25 && (statBase <= 25 || statBase == 50)))
{
// If this is an anim we need to properly destroy it so we need to do some proper detection and not wild guesses.
if (pPickupActor->nRun == pPickupActor->nDamage && pPickupActor->nRun != 0 && pPickupActor->nPhase == ITEM_MAGIC)
{
DestroyAnim(pPickupActor);
}
else
{
DeleteActor(pPickupActor);
}
}
else
{
StartRegenerate(pPickupActor);
}
}

if (pickFlag & kPickupOnConsole)
{
if (pPlayer->nPlayer == nLocalPlayer)
{
if (nItemText[statBase] > -1 && nTotalPlayers == 1)
pickupMessage(statBase);

if (nSound > -1)
PlayLocalSound(nSound, 0);

TintPalette(tintRed * 4, tintGreen * 4, 0);
}
}
}
}
}
Expand Down

0 comments on commit 48803b3

Please sign in to comment.