mirror of
https://github.com/ZDoom/Raze.git
synced 2025-02-16 16:51:08 +00:00
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:
parent
065de5979d
commit
3e17a9cc88
11 changed files with 159 additions and 731 deletions
|
@ -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;
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
//
|
||||
//
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -283,6 +283,7 @@ enum EFeatureFlags
|
|||
kFeatureCustomClipdist = 4,
|
||||
kFeatureCustomTrapExploder = 8,
|
||||
kFeatureCustomEnemyHealth = 16,
|
||||
kFeaturePlayerSize = 32,
|
||||
};
|
||||
|
||||
constexpr int BMAX_PATH = 260;
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -1,2 +1,6 @@
|
|||
xx(BloodMissileBase)
|
||||
xx(BloodDudeBase)
|
||||
xx(BloodPlayerBase)
|
||||
xx(BloodThingBase)
|
||||
xx(BloodDudeZombieButcher)
|
||||
|
||||
|
|
|
@ -234,6 +234,8 @@ enum {
|
|||
kItemReflectShots = 124,
|
||||
kItemBeastVision = 125,
|
||||
kItemShroomDelirium = 128,
|
||||
kItemShroomGrow = 129,
|
||||
kItemShroomShrink = 130,
|
||||
|
||||
kItemArmorAsbest = 139,
|
||||
kItemArmorBasic = 140,
|
||||
|
|
|
@ -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())
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Reference in a new issue