mirror of
https://github.com/ZDoom/Raze.git
synced 2025-04-08 00:40:57 +00:00
- Exhumed: Remove gotos in doPlayerItemPickups()
and use flag system like PowerslaveGDX.
This commit is contained in:
parent
3f6a0661b6
commit
48803b3631
1 changed files with 69 additions and 64 deletions
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -165,7 +136,7 @@ void doPlayerItemPickups(Player* const pPlayer)
|
|||
{
|
||||
nSound = StaticSound[kSoundAmmoPickup];
|
||||
CheckClip(pPlayer->nPlayer);
|
||||
goto do_default;
|
||||
pickFlag |= kPickupDefaults;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
@ -206,7 +177,7 @@ void doPlayerItemPickups(Player* const pPlayer)
|
|||
}
|
||||
else
|
||||
{
|
||||
goto do_default;
|
||||
pickFlag |= kPickupDefaults;
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
@ -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
|
||||
|
@ -304,7 +275,7 @@ void doPlayerItemPickups(Player* const pPlayer)
|
|||
tintGreen = 0;
|
||||
}
|
||||
|
||||
goto do_default;
|
||||
pickFlag |= kPickupDefaults;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -373,7 +344,7 @@ void doPlayerItemPickups(Player* const pPlayer)
|
|||
tintGreen = 0;
|
||||
}
|
||||
|
||||
goto do_default;
|
||||
pickFlag |= kPickupDefaults;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -442,7 +413,7 @@ void doPlayerItemPickups(Player* const pPlayer)
|
|||
tintGreen = 0;
|
||||
}
|
||||
|
||||
goto do_default;
|
||||
pickFlag |= kPickupDefaults;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -504,7 +475,7 @@ void doPlayerItemPickups(Player* const pPlayer)
|
|||
case 16: // Torch
|
||||
{
|
||||
if (GrabItem(pPlayer->nPlayer, kItemTorch)) {
|
||||
goto do_default;
|
||||
pickFlag |= kPickupDefaults;
|
||||
}
|
||||
|
||||
break;
|
||||
|
@ -513,7 +484,7 @@ void doPlayerItemPickups(Player* const pPlayer)
|
|||
case 17: // Sobek Mask
|
||||
{
|
||||
if (GrabItem(pPlayer->nPlayer, kItemMask)) {
|
||||
goto do_default;
|
||||
pickFlag |= kPickupDefaults;
|
||||
}
|
||||
|
||||
break;
|
||||
|
@ -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!!
|
||||
|
@ -570,7 +541,7 @@ void doPlayerItemPickups(Player* const pPlayer)
|
|||
}
|
||||
|
||||
if (statBase <= 50) {
|
||||
goto do_default;
|
||||
pickFlag |= kPickupDefaults;
|
||||
}
|
||||
|
||||
pPickupActor->spr.cstat = CSTAT_SPRITE_INVISIBLE;
|
||||
|
@ -632,7 +603,7 @@ void doPlayerItemPickups(Player* const pPlayer)
|
|||
}
|
||||
|
||||
if (statBase <= 50) {
|
||||
goto do_default;
|
||||
pickFlag |= kPickupDefaults;
|
||||
}
|
||||
|
||||
pPickupActor->spr.cstat = CSTAT_SPRITE_INVISIBLE;
|
||||
|
@ -694,7 +665,7 @@ void doPlayerItemPickups(Player* const pPlayer)
|
|||
}
|
||||
|
||||
if (statBase <= 50) {
|
||||
goto do_default;
|
||||
pickFlag |= kPickupDefaults;
|
||||
}
|
||||
|
||||
pPickupActor->spr.cstat = CSTAT_SPRITE_INVISIBLE;
|
||||
|
@ -756,7 +727,7 @@ void doPlayerItemPickups(Player* const pPlayer)
|
|||
}
|
||||
|
||||
if (statBase <= 50) {
|
||||
goto do_default;
|
||||
pickFlag |= kPickupDefaults;
|
||||
}
|
||||
|
||||
pPickupActor->spr.cstat = CSTAT_SPRITE_INVISIBLE;
|
||||
|
@ -818,7 +789,7 @@ void doPlayerItemPickups(Player* const pPlayer)
|
|||
}
|
||||
|
||||
if (statBase <= 50) {
|
||||
goto do_default;
|
||||
pickFlag |= kPickupDefaults;
|
||||
}
|
||||
|
||||
pPickupActor->spr.cstat = CSTAT_SPRITE_INVISIBLE;
|
||||
|
@ -880,7 +851,7 @@ void doPlayerItemPickups(Player* const pPlayer)
|
|||
}
|
||||
|
||||
if (statBase <= 50) {
|
||||
goto do_default;
|
||||
pickFlag |= kPickupDefaults;
|
||||
}
|
||||
|
||||
pPickupActor->spr.cstat = CSTAT_SPRITE_INVISIBLE;
|
||||
|
@ -910,7 +881,7 @@ void doPlayerItemPickups(Player* const pPlayer)
|
|||
{
|
||||
if (AddAmmo(pPlayer->nPlayer, 5, 1)) {
|
||||
nSound = StaticSound[kSoundAmmoPickup];
|
||||
goto do_default;
|
||||
pickFlag |= kPickupDefaults;
|
||||
}
|
||||
|
||||
break;
|
||||
|
@ -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;
|
||||
|
@ -941,11 +912,11 @@ void doPlayerItemPickups(Player* const pPlayer)
|
|||
|
||||
if (nTotalPlayers > 1)
|
||||
{
|
||||
goto do_default_b;
|
||||
pickFlag |= kPickupOnConsole;
|
||||
}
|
||||
else
|
||||
{
|
||||
goto do_default;
|
||||
pickFlag |= kPickupDefaults;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -966,7 +937,7 @@ void doPlayerItemPickups(Player* const pPlayer)
|
|||
pPlayer->nMagic = 1000;
|
||||
}
|
||||
|
||||
goto do_default;
|
||||
pickFlag |= kPickupDefaults;
|
||||
}
|
||||
|
||||
case 53: // Scarab (Checkpoint)
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue