enabled nnext's grow and shrink shrooms by feature flag.

This is a contained feature with no wide reaching impact so it's fine to support.
This commit is contained in:
Christoph Oelckers 2023-10-10 23:58:41 +02:00
parent 065de5979d
commit 3e17a9cc88
11 changed files with 159 additions and 731 deletions

View file

@ -658,587 +658,6 @@ const VECTORDATA gVectorData[] = {
},
};
const THINGINFO thingInfo[] = {
//TNT Barrel
{
25,
250,
32,
11,
4096,
80,
CSTAT_SPRITE_YCENTER | CSTAT_SPRITE_BLOCK_HITSCAN,
907,
0,
0,
0,
0,
256, 256, 128, 64, 0, 0, 128,
},
// Armed Proxy Dynamite
{
5,
5,
16,
3,
24576,
1600,
CSTAT_SPRITE_BLOCK_HITSCAN,
3444,
-16,
0,
32,
32,
256, 256, 256, 64, 0, 0, 512,
},
// Armed Remote Dynamite
{
5,
5,
16,
3,
24576,
1600,
CSTAT_SPRITE_BLOCK_HITSCAN,
3457,
-16,
0,
32,
32,
256, 256, 256, 64, 0, 0, 512,
},
// Vase1
{
1,
20,
32,
3,
32768,
80,
0,
739,
0,
0,
0,
0,
256, 0, 256, 128, 0, 0, 0,
},
// Vase2
{
1,
150,
32,
3,
32768,
80,
0,
642,
0,
0,
0,
0,
256, 256, 256, 128, 0, 0, 0,
},
// Crate face
{
10,
0,
0,
0,
0,
0,
0,
462,
0,
0,
0,
0,
0, 0, 0, 256, 0, 0, 0,
},
// Glass window
{
1,
0,
0,
0,
0,
0,
0,
266,
0,
0,
0,
0,
256, 0, 256, 256, 0, 0, 0,
},
// Flourescent Light
{
1,
0,
0,
0,
0,
0,
0,
796,
0,
0,
0,
0,
256, 0, 256, 256, 0, 0, 512,
},
// Wall Crack
{
50,
0,
0,
0,
0,
0,
0,
1127,
0,
0,
0,
0,
0, 0, 0, 256, 0, 0, 0,
},
// Wood Beam
{
8,
0,
0,
0,
0,
0,
0,
1142,
0,
0,
0,
0,
256, 0, 256, 128, 0, 0, 0,
},
// Spider's Web
{
4,
0,
0,
0,
0,
0,
0,
1069,
0,
0,
0,
0,
256, 256, 64, 256, 0, 0, 128,
},
// Metal Grate
{
40,
0,
0,
0,
0,
0,
0,
483,
0,
0,
0,
0,
64, 0, 128, 256, 0, 0, 0,
},
// Flammable Tree
{
1,
0,
0,
0,
0,
0,
0,
-1,
0,
0,
0,
0,
0, 256, 0, 256, 0, 0, 128,
},
// MachineGun Trap
{
1000,
0,
0,
8,
0,
0,
0,
-1,
0,
0,
0,
0,
0, 0, 128, 256, 0, 0, 512,
},
// Falling Rock
{
0,
15,
8,
3,
32768,
0,
0,
-1,
0,
0,
0,
0,
0, 0, 0, 0, 0, 0, 0,
},
// Kickable Pail
{
0,
8,
48,
3,
49152,
0,
0,
-1,
0,
0,
0,
0,
0, 0, 0, 0, 0, 0, 0,
},
// Gib Object
{
10,
2,
0,
0,
32768,
0,
0,
-1,
0,
0,
0,
0,
256, 0, 256, 256, 0, 0, 128,
},
// Explode Object
{
20,
2,
0,
0,
32768,
0,
0,
-1,
0,
0,
0,
0,
0, 0, 0, 256, 0, 0, 128,
},
// Armed stick Of TNT
{
5,
14,
16,
3,
24576,
1600,
CSTAT_SPRITE_BLOCK_HITSCAN,
3422,
-32,
0,
32,
32,
64, 256, 128, 64, 0, 0, 256,
},
// Armed bundle Of TNT
{
5,
14,
16,
3,
24576,
1600,
CSTAT_SPRITE_BLOCK_HITSCAN,
3433,
-32,
0,
32,
32,
64, 256, 128, 64, 0, 0, 256,
},
// Armed aerosol
{
5,
14,
16,
3,
32768,
1600,
CSTAT_SPRITE_BLOCK_HITSCAN,
3467,
-128,
0,
32,
32,
64, 256, 128, 64, 0, 0, 256,
},
// Bone (Flesh Garg.)
{
5,
6,
16,
3,
32768,
1600,
CSTAT_SPRITE_BLOCK_HITSCAN,
1462,
0,
0,
32,
32,
0, 0, 0, 0, 0, 0, 0,
},
// Some alpha stuff
{
8,
3,
16,
11,
32768,
1600,
CSTAT_SPRITE_BLOCK_HITSCAN,
-1,
0,
0,
0,
0,
256, 0, 256, 256, 0, 0, 0,
},
// WaterDrip
{
0,
1,
1,
2,
0,
0,
0,
1147,
0,
10,
0,
0,
0, 0, 0, 0, 0, 0, 0,
},
// BloodDrip
{
0,
1,
1,
2,
0,
0,
0,
1160,
0,
2,
0,
0,
0, 0, 0, 0, 0, 0, 0,
},
// Blood chucks1
{
15,
4,
4,
3,
24576,
0,
CSTAT_SPRITE_BLOCK_ALL,
-1,
0,
0,
0,
0,
128, 64, 256, 256, 0, 0, 256,
},
// Blood chucks2
{
30,
30,
8,
3,
8192,
0,
CSTAT_SPRITE_BLOCK_ALL,
-1,
0,
0,
0,
0,
128, 64, 256, 256, 0, 0, 64,
},
// Axe Zombie Head
{
60,
5,
32,
3,
40960,
1280,
CSTAT_SPRITE_BLOCK_ALL,
3405,
0,
0,
40,
40,
128, 64, 256, 256, 0, 0, 64,
},
// Napalm's Alt Fire explosion
{
80,
30,
32,
3,
57344,
1600,
CSTAT_SPRITE_BLOCK_HITSCAN,
3281,
-128,
0,
32,
32,
0, 0, 0, 0, 0, 0, 0,
},
// Fire Pod Explosion
{
80,
30,
32,
3,
57344,
1600,
CSTAT_SPRITE_BLOCK_HITSCAN,
2020,
-128,
0,
32,
32,
256, 0, 256, 256, 0, 0, 0,
},
// Green Pod Explosion
{
80,
30,
32,
3,
57344,
1600,
CSTAT_SPRITE_BLOCK_HITSCAN,
1860,
-128,
0,
32,
32,
256, 0, 256, 256, 0, 0, 0,
},
// Life Leech
{
150,
30,
48,
3,
32768,
1600,
CSTAT_SPRITE_BLOCK_ALL,
800,
-128,
0,
48,
48,
64, 64, 112, 64, 0, 96, 96,
},
// Voodoo Head
{
1,
30,
48,
3,
32768,
1600,
0,
2443,
-128,
0,
16,
16,
0, 0, 0, 0, 0, 0, 0,
},
// 433 - kModernThingTNTProx
{
5,
5,
16,
3,
24576,
1600,
CSTAT_SPRITE_BLOCK_HITSCAN,
3444,
-16,
7,
32,
32,
256, 256, 256, 64, 0, 0, 512,
},
// 434 - kModernThingThrowableRock
{
5,
6,
16,
3,
32768,
1600,
CSTAT_SPRITE_BLOCK_HITSCAN,
1462,
0,
0,
32,
32,
0, 0, 0, 0, 0, 0, 0,
},
// 435 - kModernThingEnemyLifeLeech
{
150,
30,
48,
3,
32768,
1600,
CSTAT_SPRITE_BLOCK_ALL,
800,
-128,
0,
44,
44,
0, 1024, 512, 1024, 0, 64, 512,
},
};
const EXPLOSION explodeInfo[] = {
{
40,
@ -2859,12 +2278,12 @@ static void checkCeilHit(DBloodActor* actor)
else
{
actor2->spr.flags |= 5;
#ifdef NOONE_EXTENSIONS
// add size shroom abilities
if ((actor->IsPlayerActor() && isShrunk(actor)) || (actor2->IsPlayerActor() && isGrown(actor2))) {
if ((actor->IsPlayerActor() && isShrunk(actor)) || (actor2->IsPlayerActor() && isGrown(actor2)))
{
int mass1 = getDudeInfo(actor2)->mass;
int mass2 = getDudeInfo(actor)->mass;
#ifdef NOONE_EXTENSIONS
switch (actor->GetType())
{
case kDudeModernCustom:
@ -2872,6 +2291,7 @@ static void checkCeilHit(DBloodActor* actor)
mass2 = getSpriteMassBySize(actor);
break;
}
#endif
if (mass1 > mass2)
{
int dmg = int(4 * (abs((mass1 - mass2) * actor2->clipdist) - actor->clipdist));
@ -2882,7 +2302,6 @@ static void checkCeilHit(DBloodActor* actor)
}
}
}
#endif
if (!actor->IsPlayerActor() || getPlayer(actor)->godMode == 0)
{
switch (actor2->GetType())
@ -2927,6 +2346,33 @@ static void checkCeilHit(DBloodActor* actor)
}
}
//---------------------------------------------------------------------------
//
//
//
//---------------------------------------------------------------------------
bool IsBurningDude(DBloodActor* actor)
{
if (actor == NULL) return false;
switch (actor->GetType())
{
case kDudeBurningInnocent:
case kDudeBurningCultist:
case kDudeBurningZombieAxe:
case kDudeBurningZombieButcher:
case kDudeBurningTinyCaleb:
case kDudeBurningBeast:
#ifdef NOONE_EXTENSIONS
case kDudeModernCustomBurning:
#endif
return true;
}
return false;
}
//---------------------------------------------------------------------------
//
//
@ -2945,7 +2391,6 @@ static void checkHit(DBloodActor* actor)
{
auto actor2 = coll.actor();
#ifdef NOONE_EXTENSIONS
// add size shroom abilities
if ((actor2->IsPlayerActor() && isShrunk(actor2)) || (actor->IsPlayerActor() && isGrown(actor)))
{
@ -2953,6 +2398,7 @@ static void checkHit(DBloodActor* actor)
{
int mass1 = getDudeInfo(actor)->mass;
int mass2 = getDudeInfo(actor2)->mass;
#ifdef NOONE_EXTENSIONS
switch (actor2->GetType())
{
case kDudeModernCustom:
@ -2960,6 +2406,7 @@ static void checkHit(DBloodActor* actor)
mass2 = getSpriteMassBySize(actor2);
break;
}
#endif
if (mass1 > mass2)
{
actKickObject(actor, actor2);
@ -2969,7 +2416,6 @@ static void checkHit(DBloodActor* actor)
}
}
}
#endif
switch (actor2->GetType())
{
@ -2983,13 +2429,13 @@ static void checkHit(DBloodActor* actor)
actDamageSprite(nullptr, actor2, kDamageFall, 80);
break;
case kDudeBurningInnocent:
case kDudeBurningCultist:
case kDudeBurningZombieAxe:
case kDudeBurningZombieButcher:
// This does not make sense
actor->xspr.burnTime = ClipLow(actor->xspr.burnTime - 4, 0);
actDamageSprite(actor->GetBurnSource(), actor, kDamageBurn, 8);
default:
if (IsBurningDude(actor))
{
// This does not make sense
//actor->xspr.burnTime = ClipLow(actor->xspr.burnTime - 4, 0);
actDamageSprite(actor->GetBurnSource(), actor, kDamageBurn, 8);
}
break;
}
}
@ -3018,13 +2464,13 @@ static void checkFloorHit(DBloodActor* actor)
{
auto actor2 = coll.actor();
#ifdef NOONE_EXTENSIONS
// add size shroom abilities
if ((actor2->IsPlayerActor() && isShrunk(actor2)) || (actor->IsPlayerActor() && isGrown(actor)))
{
int mass1 = getDudeInfo(actor)->mass;
int mass2 = getDudeInfo(actor2)->mass;
#ifdef NOONE_EXTENSIONS
switch (actor2->GetType())
{
case kDudeModernCustom:
@ -3032,7 +2478,7 @@ static void checkFloorHit(DBloodActor* actor)
mass2 = getSpriteMassBySize(actor2);
break;
}
#endif
if (mass1 > mass2 && actor2->IsDudeActor())
{
if ((actor2->IsPlayerActor() && Chance(0x500)) || !actor2->IsPlayerActor())
@ -3042,7 +2488,6 @@ static void checkFloorHit(DBloodActor* actor)
if (dmg > 0) actDamageSprite(actor, actor2, (Chance(0x2000)) ? kDamageFall : kDamageBullet, dmg);
}
}
#endif
DBloodPlayer* pPlayer = nullptr;
if (actor->IsPlayerActor()) pPlayer = getPlayer(actor);
@ -3111,11 +2556,7 @@ static void checkFloorHit(DBloodActor* actor)
case kDudePlayer6:
case kDudePlayer7:
case kDudePlayer8:
#ifdef NOONE_EXTENSIONS
if (pPlayer && !isShrunk(actor))
#else
if (pPlayer)
#endif
actDamageSprite(actor, actor2, kDamageBullet, 8);
break;
}
@ -4620,32 +4061,6 @@ static void actCheckTraps()
//
//---------------------------------------------------------------------------
bool IsBurningDude(DBloodActor* actor)
{
if (actor == NULL) return false;
switch (actor->GetType())
{
case kDudeBurningInnocent:
case kDudeBurningCultist:
case kDudeBurningZombieAxe:
case kDudeBurningZombieButcher:
case kDudeBurningTinyCaleb:
case kDudeBurningBeast:
#ifdef NOONE_EXTENSIONS
case kDudeModernCustomBurning:
#endif
return true;
}
return false;
}
//---------------------------------------------------------------------------
//
//
//
//---------------------------------------------------------------------------
static void actCheckDudes()
{
BloodStatIterator it(kStatDude);
@ -5543,6 +4958,47 @@ void actBurnSprite(DBloodActor* pSource, DBloodActor* pTarget, int nTime)
pTarget->SetBurnSource(pSource);
}
//---------------------------------------------------------------------------
//
//
//
//---------------------------------------------------------------------------
bool ceilIsTooLow(DBloodActor* actor)
{
if (actor != nullptr)
{
sectortype* pSector = actor->sector();
double a = pSector->ceilingz - pSector->floorz;
double top, bottom;
GetActorExtents(actor, &top, &bottom);
if (a > top - bottom) return true;
}
return false;
}
//---------------------------------------------------------------------------
//
//
//
//---------------------------------------------------------------------------
bool isGrown(DBloodActor* actor)
{
if (!(currentLevel->featureflags & kFeaturePlayerSize)) return false;
if (powerupCheck(getPlayer(actor), kPwUpGrowShroom) > 0) return true;
else if (actor->hasX() && actor->xspr.scale >= 512) return true;
else return false;
}
bool isShrunk(DBloodActor* actor)
{
if (!(currentLevel->featureflags & kFeaturePlayerSize)) return false;
if (powerupCheck(getPlayer(actor), kPwUpShrinkShroom) > 0) return true;
else if (actor->hasX() && actor->xspr.scale > 0 && actor->xspr.scale <= 128) return true;
else return false;
}
//---------------------------------------------------------------------------
//
//

View file

@ -154,6 +154,9 @@ DBloodActor* actFireThing(DBloodActor* actor, double xyoff, double zoff, double
DBloodActor* actFireMissile(DBloodActor* actor, double xyoff, double zoff, DVector3 dc, int nType);
void actBurnSprite(DBloodActor* pSource, DBloodActor* pTarget, int nTime);
bool isGrown(DBloodActor* pSprite);
bool isShrunk(DBloodActor* pSprite);
bool ceilIsTooLow(DBloodActor* actor);
int actGetRespawnTime(DBloodActor *pSprite);
bool actCheckRespawn(DBloodActor *pSprite);

View file

@ -435,7 +435,7 @@ static void unicultThinkGoto(DBloodActor* actor)
static void unicultThinkChase(DBloodActor* actor)
{
if (actor->GetType() < kDudeBase || actor->GetType() >= kDudeMax) return;
if (!actor->IsDudeActor()) return;
auto const target = actor->GetTarget();
if (target == nullptr)

View file

@ -283,6 +283,7 @@ enum EFeatureFlags
kFeatureCustomClipdist = 4,
kFeatureCustomTrapExploder = 8,
kFeatureCustomEnemyHealth = 16,
kFeaturePlayerSize = 32,
};
constexpr int BMAX_PATH = 260;

View file

@ -102,17 +102,17 @@ public:
bool IsPlayerActor()
{
return GetType() >= kDudePlayer1 && GetType() <= kDudePlayer8;
return IsKindOf(BloodPlayerBaseClass);
}
bool IsDudeActor()
{
return GetType() >= kDudeBase && GetType() < kDudeMax;
return IsKindOf(BloodDudeBaseClass);
}
bool IsThingActor()
{
return GetType() >= kThingBase && GetType() < kThingMax;
return IsKindOf(BloodThingBaseClass);
}
bool IsItemActor()

View file

@ -1,2 +1,6 @@
xx(BloodMissileBase)
xx(BloodDudeBase)
xx(BloodPlayerBase)
xx(BloodThingBase)
xx(BloodDudeZombieButcher)

View file

@ -234,6 +234,8 @@ enum {
kItemReflectShots = 124,
kItemBeastVision = 125,
kItemShroomDelirium = 128,
kItemShroomGrow = 129,
kItemShroomShrink = 130,
kItemArmorAsbest = 139,
kItemArmorBasic = 140,

View file

@ -1860,25 +1860,6 @@ void debrisMove(int listIndex)
//
//---------------------------------------------------------------------------
bool ceilIsTooLow(DBloodActor* actor)
{
if (actor != nullptr)
{
sectortype* pSector = actor->sector();
double a = pSector->ceilingz - pSector->floorz;
double top, bottom;
GetActorExtents(actor, &top, &bottom);
if (a > top - bottom) return true;
}
return false;
}
//---------------------------------------------------------------------------
//
//
//
//---------------------------------------------------------------------------
void aiSetGenIdleState(DBloodActor* actor)
{
switch (actor->GetType())
@ -7376,36 +7357,6 @@ void playerQavSceneReset(DBloodPlayer* pPlayer)
pQavScene->qavResrc = NULL;
}
bool playerSizeShrink(DBloodPlayer* pPlayer, int divider)
{
pPlayer->GetActor()->xspr.scale = 256 / divider;
playerSetRace(pPlayer, kModeHumanShrink);
return true;
}
bool playerSizeGrow(DBloodPlayer* pPlayer, int multiplier)
{
pPlayer->GetActor()->xspr.scale = 256 * multiplier;
playerSetRace(pPlayer, kModeHumanGrown);
return true;
}
bool playerSizeReset(DBloodPlayer* pPlayer)
{
playerSetRace(pPlayer, kModeHuman);
pPlayer->GetActor()->xspr.scale = 0;
return true;
}
void playerDeactivateShrooms(DBloodPlayer* pPlayer)
{
powerupDeactivate(pPlayer, kPwUpGrowShroom);
pPlayer->pwUpTime[kPwUpGrowShroom] = 0;
powerupDeactivate(pPlayer, kPwUpShrinkShroom);
pPlayer->pwUpTime[kPwUpShrinkShroom] = 0;
}
//---------------------------------------------------------------------------
//
//
@ -7452,20 +7403,6 @@ bool IsKillableDude(DBloodActor* actor)
}
}
bool isGrown(DBloodActor* actor)
{
if (powerupCheck(getPlayer(actor), kPwUpGrowShroom) > 0) return true;
else if (actor->hasX() && actor->xspr.scale >= 512) return true;
else return false;
}
bool isShrunk(DBloodActor* actor)
{
if (powerupCheck(getPlayer(actor), kPwUpShrinkShroom) > 0) return true;
else if (actor->hasX() && actor->xspr.scale > 0 && actor->xspr.scale <= 128) return true;
else return false;
}
bool isActive(DBloodActor* actor)
{
if (!actor->hasX())

View file

@ -340,11 +340,6 @@ bool modernTypeOperateSprite(DBloodActor*, EVENT& event);
bool modernTypeOperateWall(walltype* pWall, const EVENT& event);
void modernTypeSendCommand(DBloodActor* nSprite, int channel, COMMAND_ID command, DBloodActor* initiator);
// ------------------------------------------------------------------------- //
bool playerSizeShrink(DBloodPlayer* pPlayer, int divider);
bool playerSizeGrow(DBloodPlayer* pPlayer, int multiplier);
bool playerSizeReset(DBloodPlayer* pPlayer);
void playerDeactivateShrooms(DBloodPlayer* pPlayer);
// ------------------------------------------------------------------------- //
QAV* playerQavSceneLoad(int qavId);
void playerQavSceneProcess(DBloodPlayer* pPlayer, QAVSCENE* pQavScene);
void playerQavScenePlay(DBloodPlayer* pPlayer);
@ -356,8 +351,6 @@ void callbackMakeMissileBlocking(DBloodActor* actor);
void callbackGenDudeUpdate(DBloodActor* actor);
// ------------------------------------------------------------------------- //
DBloodPlayer* getPlayerById(int id);
bool isGrown(DBloodActor* pSprite);
bool isShrunk(DBloodActor* pSprite);
bool IsBurningDude(DBloodActor* pSprite);
bool IsKillableDude(DBloodActor* pSprite);
bool isActive(DBloodActor* nSprite);

View file

@ -266,6 +266,41 @@ int powerupCheck(DBloodPlayer* pPlayer, int nPowerUp)
return pPlayer->pwUpTime[nPowerUp];
}
//---------------------------------------------------------------------------
//
//
//
//---------------------------------------------------------------------------
bool playerSizeShrink(DBloodPlayer* pPlayer, int divider)
{
pPlayer->GetActor()->xspr.scale = 256 / divider;
playerSetRace(pPlayer, kModeHumanShrink);
return true;
}
bool playerSizeGrow(DBloodPlayer* pPlayer, int multiplier)
{
pPlayer->GetActor()->xspr.scale = 256 * multiplier;
playerSetRace(pPlayer, kModeHumanGrown);
return true;
}
bool playerSizeReset(DBloodPlayer* pPlayer)
{
playerSetRace(pPlayer, kModeHuman);
pPlayer->GetActor()->xspr.scale = 0;
return true;
}
void playerDeactivateShrooms(DBloodPlayer* pPlayer)
{
powerupDeactivate(pPlayer, kPwUpGrowShroom);
pPlayer->pwUpTime[kPwUpGrowShroom] = 0;
powerupDeactivate(pPlayer, kPwUpShrinkShroom);
pPlayer->pwUpTime[kPwUpShrinkShroom] = 0;
}
//---------------------------------------------------------------------------
//
@ -288,17 +323,21 @@ bool powerupActivate(DBloodPlayer* pPlayer, int nPowerUp)
case kItemModernMapLevel:
if (gModernMap) gFullMap = true;
break;
#endif
case kItemShroomShrink:
if (!gModernMap) break;
if (!(currentLevel->featureflags & kFeaturePlayerSize)) break;
else if (isGrown(pPlayer->GetActor())) playerDeactivateShrooms(pPlayer);
else playerSizeShrink(pPlayer, 2);
break;
case kItemShroomGrow:
if (!gModernMap) break;
if (!(currentLevel->featureflags & kFeaturePlayerSize)) break;
else if (isShrunk(pPlayer->GetActor())) playerDeactivateShrooms(pPlayer);
else {
else
{
playerSizeGrow(pPlayer, 2);
if (powerupCheck(getPlayer(pPlayer->GetActor()), kPwUpShadowCloak) > 0) {
if (powerupCheck(getPlayer(pPlayer->GetActor()), kPwUpShadowCloak) > 0)
{
powerupDeactivate(pPlayer, kPwUpShadowCloak);
pPlayer->pwUpTime[kPwUpShadowCloak] = 0;
}
@ -307,7 +346,6 @@ bool powerupActivate(DBloodPlayer* pPlayer, int nPowerUp)
actDamageSprite(pPlayer->GetActor(), pPlayer->GetActor(), kDamageExplode, 65535);
}
break;
#endif
case kItemFeatherFall:
case kItemJumpBoots:
pPlayer->damageControl[0]++;
@ -352,19 +390,21 @@ void powerupDeactivate(DBloodPlayer* pPlayer, int nPowerUp)
if (nPack >= 0)
pPlayer->packSlots[nPack].isActive = 0;
switch (nPowerUp + kItemBase) {
#ifdef NOONE_EXTENSIONS
switch (nPowerUp + kItemBase)
{
case kItemShroomShrink:
if (gModernMap) {
if (currentLevel->featureflags & kFeaturePlayerSize)
{
playerSizeReset(pPlayer);
if (ceilIsTooLow(pPlayer->GetActor()))
actDamageSprite(pPlayer->GetActor(), pPlayer->GetActor(), kDamageExplode, 65535);
}
break;
case kItemShroomGrow:
if (gModernMap) playerSizeReset(pPlayer);
if (currentLevel->featureflags & kFeaturePlayerSize)
playerSizeReset(pPlayer);
break;
#endif
case kItemFeatherFall:
case kItemJumpBoots:
pPlayer->damageControl[0]--;
@ -1029,31 +1069,24 @@ bool PickupItem(DBloodPlayer* pPlayer, DBloodActor* itemactor)
switch (itemactor->GetType()) {
case kItemShadowCloak:
#ifdef NOONE_EXTENSIONS
if (isGrown(pPlayer->GetActor()) || !powerupActivate(pPlayer, nType)) return false;
#else
if (!powerupActivate(pPlayer, nType)) return false;
#endif
break;
#ifdef NOONE_EXTENSIONS
case kItemShroomShrink:
case kItemShroomGrow:
if (gModernMap) {
switch (itemactor->GetType()) {
case kItemShroomShrink:
if (isShrunk(pPlayer->GetActor())) return false;
break;
case kItemShroomGrow:
if (isGrown(pPlayer->GetActor())) return false;
break;
}
if (currentLevel->featureflags & kFeaturePlayerSize)
{
if (isShrunk(pPlayer->GetActor())) return false;
powerupActivate(pPlayer, nType);
}
break;
#endif
case kItemShroomGrow:
if (currentLevel->featureflags & kFeaturePlayerSize)
{
if (isGrown(pPlayer->GetActor())) return false;
powerupActivate(pPlayer, nType);
}
break;
case kItemFlagABase:
case kItemFlagBBase: {
if (gGameOptions.nGameType != 3 || !itemactor->hasX()) return 0;

View file

@ -356,7 +356,6 @@ static void fakeMoveDude(DBloodActor* actor)
int bottom, top;
if (IsPlayerSprite(pSprite))
pPlayer = &gPlayer[pSprite->type - kDudePlayer1];
assert(pSprite->type >= kDudeBase && pSprite->type < kDudeMax);
GetSpriteExtents(pSprite, &top, &bottom);
top += predict.z - pSprite->z;
bottom += predict.z - pSprite->z;