mirror of
https://github.com/KartKrewDev/RingRacers.git
synced 2026-04-28 04:51:42 +00:00
Cherry-pick e1b265df2
This commit is contained in:
parent
14b379fd27
commit
e16c7d722f
16 changed files with 256 additions and 21 deletions
|
|
@ -351,6 +351,7 @@ consvar_t cv_eggmanmonitor = CVAR_INIT ("eggmanmonitor", "On", CV_NETVAR|CV_C
|
||||||
consvar_t cv_orbinaut = CVAR_INIT ("orbinaut", "On", CV_NETVAR|CV_CHEAT, CV_OnOff, NULL);
|
consvar_t cv_orbinaut = CVAR_INIT ("orbinaut", "On", CV_NETVAR|CV_CHEAT, CV_OnOff, NULL);
|
||||||
consvar_t cv_jawz = CVAR_INIT ("jawz", "On", CV_NETVAR|CV_CHEAT, CV_OnOff, NULL);
|
consvar_t cv_jawz = CVAR_INIT ("jawz", "On", CV_NETVAR|CV_CHEAT, CV_OnOff, NULL);
|
||||||
consvar_t cv_mine = CVAR_INIT ("mine", "On", CV_NETVAR|CV_CHEAT, CV_OnOff, NULL);
|
consvar_t cv_mine = CVAR_INIT ("mine", "On", CV_NETVAR|CV_CHEAT, CV_OnOff, NULL);
|
||||||
|
consvar_t cv_landmine = CVAR_INIT ("landmine", "On", CV_NETVAR|CV_CHEAT, CV_OnOff, NULL);
|
||||||
consvar_t cv_ballhog = CVAR_INIT ("ballhog", "On", CV_NETVAR|CV_CHEAT, CV_OnOff, NULL);
|
consvar_t cv_ballhog = CVAR_INIT ("ballhog", "On", CV_NETVAR|CV_CHEAT, CV_OnOff, NULL);
|
||||||
consvar_t cv_selfpropelledbomb = CVAR_INIT ("selfpropelledbomb", "On", CV_NETVAR|CV_CHEAT, CV_OnOff, NULL);
|
consvar_t cv_selfpropelledbomb = CVAR_INIT ("selfpropelledbomb", "On", CV_NETVAR|CV_CHEAT, CV_OnOff, NULL);
|
||||||
consvar_t cv_grow = CVAR_INIT ("grow", "On", CV_NETVAR|CV_CHEAT, CV_OnOff, NULL);
|
consvar_t cv_grow = CVAR_INIT ("grow", "On", CV_NETVAR|CV_CHEAT, CV_OnOff, NULL);
|
||||||
|
|
|
||||||
|
|
@ -66,7 +66,7 @@ extern consvar_t cv_restrictskinchange, cv_allowteamchange, cv_ingamecap, cv_res
|
||||||
|
|
||||||
// SRB2kart items
|
// SRB2kart items
|
||||||
extern consvar_t cv_superring, cv_sneaker, cv_rocketsneaker, cv_invincibility, cv_banana;
|
extern consvar_t cv_superring, cv_sneaker, cv_rocketsneaker, cv_invincibility, cv_banana;
|
||||||
extern consvar_t cv_eggmanmonitor, cv_orbinaut, cv_jawz, cv_mine;
|
extern consvar_t cv_eggmanmonitor, cv_orbinaut, cv_jawz, cv_mine, cv_landmine;
|
||||||
extern consvar_t cv_ballhog, cv_selfpropelledbomb, cv_grow, cv_shrink;
|
extern consvar_t cv_ballhog, cv_selfpropelledbomb, cv_grow, cv_shrink;
|
||||||
extern consvar_t cv_thundershield, cv_bubbleshield, cv_flameshield;
|
extern consvar_t cv_thundershield, cv_bubbleshield, cv_flameshield;
|
||||||
extern consvar_t cv_hyudoro, cv_pogospring, cv_kitchensink;
|
extern consvar_t cv_hyudoro, cv_pogospring, cv_kitchensink;
|
||||||
|
|
|
||||||
|
|
@ -245,17 +245,18 @@ Run this macro, then #undef FOREACH afterward
|
||||||
FOREACH (ORBINAUT, 6),\
|
FOREACH (ORBINAUT, 6),\
|
||||||
FOREACH (JAWZ, 7),\
|
FOREACH (JAWZ, 7),\
|
||||||
FOREACH (MINE, 8),\
|
FOREACH (MINE, 8),\
|
||||||
FOREACH (BALLHOG, 9),\
|
FOREACH (LANDMINE, 9),\
|
||||||
FOREACH (SPB, 10),\
|
FOREACH (BALLHOG, 10),\
|
||||||
FOREACH (GROW, 11),\
|
FOREACH (SPB, 11),\
|
||||||
FOREACH (SHRINK, 12),\
|
FOREACH (GROW, 12),\
|
||||||
FOREACH (THUNDERSHIELD, 13),\
|
FOREACH (SHRINK, 13),\
|
||||||
FOREACH (BUBBLESHIELD, 14),\
|
FOREACH (THUNDERSHIELD, 14),\
|
||||||
FOREACH (FLAMESHIELD, 15),\
|
FOREACH (BUBBLESHIELD, 15),\
|
||||||
FOREACH (HYUDORO, 16),\
|
FOREACH (FLAMESHIELD, 16),\
|
||||||
FOREACH (POGOSPRING, 17),\
|
FOREACH (HYUDORO, 17),\
|
||||||
FOREACH (SUPERRING, 18),\
|
FOREACH (POGOSPRING, 18),\
|
||||||
FOREACH (KITCHENSINK, 19)
|
FOREACH (SUPERRING, 19),\
|
||||||
|
FOREACH (KITCHENSINK, 20)
|
||||||
|
|
||||||
typedef enum
|
typedef enum
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -8520,6 +8520,10 @@ static const char *const STATE_LIST[] = { // array length left dynamic for sanit
|
||||||
"S_SLOWBOOM9",
|
"S_SLOWBOOM9",
|
||||||
"S_SLOWBOOM10",
|
"S_SLOWBOOM10",
|
||||||
|
|
||||||
|
// Land Mine
|
||||||
|
"S_LANDMINE",
|
||||||
|
"S_LANDMINE_EXPLODE",
|
||||||
|
|
||||||
// Ballhog
|
// Ballhog
|
||||||
"S_BALLHOG1",
|
"S_BALLHOG1",
|
||||||
"S_BALLHOG2",
|
"S_BALLHOG2",
|
||||||
|
|
@ -10154,6 +10158,8 @@ static const char *const MOBJTYPE_LIST[] = { // array length left dynamic for s
|
||||||
"MT_BOOMEXPLODE",
|
"MT_BOOMEXPLODE",
|
||||||
"MT_BOOMPARTICLE",
|
"MT_BOOMPARTICLE",
|
||||||
|
|
||||||
|
"MT_LANDMINE", // Land Mine
|
||||||
|
|
||||||
"MT_BALLHOG", // Ballhog
|
"MT_BALLHOG", // Ballhog
|
||||||
"MT_BALLHOGBOOM",
|
"MT_BALLHOGBOOM",
|
||||||
|
|
||||||
|
|
|
||||||
31
src/info.c
31
src/info.c
|
|
@ -543,6 +543,7 @@ char sprnames[NUMSPRITES + 1][5] =
|
||||||
"JAWZ", // Jawz
|
"JAWZ", // Jawz
|
||||||
"SSMN", // SS Mine
|
"SSMN", // SS Mine
|
||||||
"KRBM", // SS Mine BOOM
|
"KRBM", // SS Mine BOOM
|
||||||
|
"LNDM", // Land Mine
|
||||||
"BHOG", // Ballhog
|
"BHOG", // Ballhog
|
||||||
"BHBM", // Ballhog BOOM
|
"BHBM", // Ballhog BOOM
|
||||||
"SPBM", // Self-Propelled Bomb
|
"SPBM", // Self-Propelled Bomb
|
||||||
|
|
@ -4209,6 +4210,9 @@ state_t states[NUMSTATES] =
|
||||||
{SPR_KRBM, FF_FULLBRIGHT|8, 5, {NULL}, 0, 0, S_SLOWBOOM10}, // S_SLOWBOOM9
|
{SPR_KRBM, FF_FULLBRIGHT|8, 5, {NULL}, 0, 0, S_SLOWBOOM10}, // S_SLOWBOOM9
|
||||||
{SPR_KRBM, FF_FULLBRIGHT|9, 5, {NULL}, 0, 0, S_NULL}, // S_SLOWBOOM10
|
{SPR_KRBM, FF_FULLBRIGHT|9, 5, {NULL}, 0, 0, S_NULL}, // S_SLOWBOOM10
|
||||||
|
|
||||||
|
{SPR_LNDM, 0, -1, {NULL}, 0, 0, S_LANDMINE}, // S_LANDMINE
|
||||||
|
{SPR_NULL, 0, 1, {NULL}, 0, 0, S_NULL}, // S_LANDMINE_EXPLODE
|
||||||
|
|
||||||
{SPR_BHOG, 0, 3, {A_PlaySound}, sfx_s1bd, 1, S_BALLHOG2}, // S_BALLHOG1
|
{SPR_BHOG, 0, 3, {A_PlaySound}, sfx_s1bd, 1, S_BALLHOG2}, // S_BALLHOG1
|
||||||
{SPR_BHOG, FF_FULLBRIGHT|1, 1, {NULL}, 0, 0, S_BALLHOG3}, // S_BALLHOG2
|
{SPR_BHOG, FF_FULLBRIGHT|1, 1, {NULL}, 0, 0, S_BALLHOG3}, // S_BALLHOG2
|
||||||
{SPR_BHOG, FF_FULLBRIGHT|2, 2, {NULL}, 0, 0, S_BALLHOG4}, // S_BALLHOG3
|
{SPR_BHOG, FF_FULLBRIGHT|2, 2, {NULL}, 0, 0, S_BALLHOG4}, // S_BALLHOG3
|
||||||
|
|
@ -23842,6 +23846,33 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
|
||||||
S_NULL // raisestate
|
S_NULL // raisestate
|
||||||
},
|
},
|
||||||
|
|
||||||
|
{ // MT_LANDMINE
|
||||||
|
-1, // doomednum
|
||||||
|
S_LANDMINE, // spawnstate
|
||||||
|
2, // spawnhealth
|
||||||
|
S_NULL, // seestate
|
||||||
|
sfx_tossed, // seesound
|
||||||
|
0, // reactiontime
|
||||||
|
sfx_None, // attacksound
|
||||||
|
S_NULL, // painstate
|
||||||
|
0, // painchance
|
||||||
|
sfx_None, // painsound
|
||||||
|
S_NULL, // meleestate
|
||||||
|
S_NULL, // missilestate
|
||||||
|
S_LANDMINE_EXPLODE, // deathstate
|
||||||
|
S_NULL, // xdeathstate
|
||||||
|
sfx_None, // deathsound
|
||||||
|
0, // speed
|
||||||
|
24*FRACUNIT, // radius
|
||||||
|
32*FRACUNIT, // height
|
||||||
|
0, // display offset
|
||||||
|
0, // mass
|
||||||
|
0, // damage
|
||||||
|
sfx_s3k5c, // activesound
|
||||||
|
MF_SHOOTABLE|MF_DONTENCOREMAP, // flags
|
||||||
|
S_NULL // raisestate
|
||||||
|
},
|
||||||
|
|
||||||
{ // MT_BALLHOG
|
{ // MT_BALLHOG
|
||||||
-1, // doomednum
|
-1, // doomednum
|
||||||
S_BALLHOG1, // spawnstate
|
S_BALLHOG1, // spawnstate
|
||||||
|
|
|
||||||
|
|
@ -814,6 +814,7 @@ typedef enum sprite
|
||||||
SPR_JAWZ, // Jawz
|
SPR_JAWZ, // Jawz
|
||||||
SPR_SSMN, // SS Mine
|
SPR_SSMN, // SS Mine
|
||||||
SPR_KRBM, // SS Mine BOOM
|
SPR_KRBM, // SS Mine BOOM
|
||||||
|
SPR_LNDM, // Land Mine
|
||||||
SPR_BHOG, // Ballhog
|
SPR_BHOG, // Ballhog
|
||||||
SPR_BHBM, // Ballhog BOOM
|
SPR_BHBM, // Ballhog BOOM
|
||||||
SPR_SPBM, // Self-Propelled Bomb
|
SPR_SPBM, // Self-Propelled Bomb
|
||||||
|
|
@ -4363,6 +4364,10 @@ typedef enum state
|
||||||
S_SLOWBOOM9,
|
S_SLOWBOOM9,
|
||||||
S_SLOWBOOM10,
|
S_SLOWBOOM10,
|
||||||
|
|
||||||
|
// Land mine
|
||||||
|
S_LANDMINE,
|
||||||
|
S_LANDMINE_EXPLODE,
|
||||||
|
|
||||||
// Ballhog
|
// Ballhog
|
||||||
S_BALLHOG1,
|
S_BALLHOG1,
|
||||||
S_BALLHOG2,
|
S_BALLHOG2,
|
||||||
|
|
@ -6037,6 +6042,8 @@ typedef enum mobj_type
|
||||||
MT_BOOMEXPLODE,
|
MT_BOOMEXPLODE,
|
||||||
MT_BOOMPARTICLE,
|
MT_BOOMPARTICLE,
|
||||||
|
|
||||||
|
MT_LANDMINE, // Land Mine
|
||||||
|
|
||||||
MT_BALLHOG, // Ballhog
|
MT_BALLHOG, // Ballhog
|
||||||
MT_BALLHOGBOOM,
|
MT_BALLHOGBOOM,
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1036,6 +1036,7 @@ void K_BotItemUsage(player_t *player, ticcmd_t *cmd, INT16 turnamt)
|
||||||
K_BotItemSneaker(player, cmd);
|
K_BotItemSneaker(player, cmd);
|
||||||
break;
|
break;
|
||||||
case KITEM_BANANA:
|
case KITEM_BANANA:
|
||||||
|
case KITEM_LANDMINE:
|
||||||
if (!player->kartstuff[k_itemheld])
|
if (!player->kartstuff[k_itemheld])
|
||||||
{
|
{
|
||||||
K_BotItemGenericTrapShield(player, cmd, turnamt, false);
|
K_BotItemGenericTrapShield(player, cmd, turnamt, false);
|
||||||
|
|
|
||||||
|
|
@ -589,6 +589,7 @@ static boolean K_BotSteerObjects(mobj_t *thing)
|
||||||
case MT_JAWZ_SHIELD:
|
case MT_JAWZ_SHIELD:
|
||||||
case MT_SSMINE:
|
case MT_SSMINE:
|
||||||
case MT_SSMINE_SHIELD:
|
case MT_SSMINE_SHIELD:
|
||||||
|
case MT_LANDMINE:
|
||||||
case MT_BALLHOG:
|
case MT_BALLHOG:
|
||||||
case MT_SPB:
|
case MT_SPB:
|
||||||
case MT_BUBBLESHIELDTRAP:
|
case MT_BUBBLESHIELDTRAP:
|
||||||
|
|
|
||||||
|
|
@ -68,7 +68,7 @@ boolean K_OrbinautJawzCollide(mobj_t *t1, mobj_t *t2)
|
||||||
|
|
||||||
damageitem = true;
|
damageitem = true;
|
||||||
}
|
}
|
||||||
else if (t2->type == MT_SSMINE_SHIELD || t2->type == MT_SSMINE)
|
else if (t2->type == MT_SSMINE_SHIELD || t2->type == MT_SSMINE || t2->type == MT_LANDMINE)
|
||||||
{
|
{
|
||||||
damageitem = true;
|
damageitem = true;
|
||||||
// Bomb death
|
// Bomb death
|
||||||
|
|
@ -158,6 +158,12 @@ boolean K_BananaBallhogCollide(mobj_t *t1, mobj_t *t2)
|
||||||
|
|
||||||
damageitem = true;
|
damageitem = true;
|
||||||
}
|
}
|
||||||
|
else if (t2->type == MT_SSMINE_SHIELD || t2->type == MT_SSMINE || t2->type == MT_LANDMINE)
|
||||||
|
{
|
||||||
|
damageitem = true;
|
||||||
|
// Bomb death
|
||||||
|
P_KillMobj(t2, t1, t1, DMG_NORMAL);
|
||||||
|
}
|
||||||
else if (t2->flags & MF_SHOOTABLE)
|
else if (t2->flags & MF_SHOOTABLE)
|
||||||
{
|
{
|
||||||
// Shootable damage
|
// Shootable damage
|
||||||
|
|
@ -325,6 +331,73 @@ boolean K_MineExplosionCollide(mobj_t *t1, mobj_t *t2)
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
boolean K_LandMineCollide(mobj_t *t1, mobj_t *t2)
|
||||||
|
{
|
||||||
|
if (((t1->target == t2) || (t1->target == t2->target)) && (t1->threshold > 0 || (t2->type != MT_PLAYER && t2->threshold > 0)))
|
||||||
|
return true;
|
||||||
|
|
||||||
|
if (t1->health <= 0 || t2->health <= 0)
|
||||||
|
return true;
|
||||||
|
|
||||||
|
if (t2->player)
|
||||||
|
{
|
||||||
|
if (t2->player->powers[pw_flashing])
|
||||||
|
return true;
|
||||||
|
|
||||||
|
// Banana snipe!
|
||||||
|
if (t1->health > 1)
|
||||||
|
S_StartSound(t2, sfx_bsnipe);
|
||||||
|
|
||||||
|
if (t2->player->kartstuff[k_flamedash] && t2->player->kartstuff[k_itemtype] == KITEM_FLAMESHIELD)
|
||||||
|
{
|
||||||
|
// Melt item
|
||||||
|
S_StartSound(t2, sfx_s3k43);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// Player Damage
|
||||||
|
P_DamageMobj(t2, t1, t1->target, 1, DMG_TUMBLE);
|
||||||
|
}
|
||||||
|
|
||||||
|
P_KillMobj(t1, t2, t2, DMG_NORMAL);
|
||||||
|
}
|
||||||
|
else if (t2->type == MT_BANANA || t2->type == MT_BANANA_SHIELD
|
||||||
|
|| t2->type == MT_ORBINAUT || t2->type == MT_ORBINAUT_SHIELD
|
||||||
|
|| t2->type == MT_JAWZ || t2->type == MT_JAWZ_DUD || t2->type == MT_JAWZ_SHIELD
|
||||||
|
|| t2->type == MT_BALLHOG)
|
||||||
|
{
|
||||||
|
// Other Item Damage
|
||||||
|
if (t2->eflags & MFE_VERTICALFLIP)
|
||||||
|
t2->z -= t2->height;
|
||||||
|
else
|
||||||
|
t2->z += t2->height;
|
||||||
|
|
||||||
|
S_StartSound(t2, t2->info->deathsound);
|
||||||
|
P_KillMobj(t2, t1, t1, DMG_NORMAL);
|
||||||
|
|
||||||
|
P_SetObjectMomZ(t2, 8*FRACUNIT, false);
|
||||||
|
P_InstaThrust(t2, R_PointToAngle2(t1->x, t1->y, t2->x, t2->y)+ANGLE_90, 16*FRACUNIT);
|
||||||
|
|
||||||
|
P_SpawnMobj(t2->x/2 + t1->x/2, t2->y/2 + t1->y/2, t2->z/2 + t1->z/2, MT_ITEMCLASH);
|
||||||
|
|
||||||
|
P_KillMobj(t1, t2, t2, DMG_NORMAL);
|
||||||
|
}
|
||||||
|
else if (t2->type == MT_SSMINE_SHIELD || t2->type == MT_SSMINE || t2->type == MT_LANDMINE)
|
||||||
|
{
|
||||||
|
P_KillMobj(t1, t2, t2, DMG_NORMAL);
|
||||||
|
// Bomb death
|
||||||
|
P_KillMobj(t2, t1, t1, DMG_NORMAL);
|
||||||
|
}
|
||||||
|
else if (t2->flags & MF_SHOOTABLE)
|
||||||
|
{
|
||||||
|
// Shootable damage
|
||||||
|
P_DamageMobj(t2, t1, t1->target, 1, DMG_NORMAL);
|
||||||
|
P_KillMobj(t1, t2, t2, DMG_NORMAL);
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
boolean K_KitchenSinkCollide(mobj_t *t1, mobj_t *t2)
|
boolean K_KitchenSinkCollide(mobj_t *t1, mobj_t *t2)
|
||||||
{
|
{
|
||||||
if (((t1->target == t2) || (t1->target == t2->target)) && (t1->threshold > 0 || (t2->type != MT_PLAYER && t2->threshold > 0)))
|
if (((t1->target == t2) || (t1->target == t2->target)) && (t1->threshold > 0 || (t2->type != MT_PLAYER && t2->threshold > 0)))
|
||||||
|
|
|
||||||
|
|
@ -9,6 +9,7 @@ boolean K_BananaBallhogCollide(mobj_t *t1, mobj_t *t2);
|
||||||
boolean K_EggItemCollide(mobj_t *t1, mobj_t *t2);
|
boolean K_EggItemCollide(mobj_t *t1, mobj_t *t2);
|
||||||
boolean K_MineCollide(mobj_t *t1, mobj_t *t2);
|
boolean K_MineCollide(mobj_t *t1, mobj_t *t2);
|
||||||
boolean K_MineExplosionCollide(mobj_t *t1, mobj_t *t2);
|
boolean K_MineExplosionCollide(mobj_t *t1, mobj_t *t2);
|
||||||
|
boolean K_LandMineCollide(mobj_t *t1, mobj_t *t2);
|
||||||
boolean K_KitchenSinkCollide(mobj_t *t1, mobj_t *t2);
|
boolean K_KitchenSinkCollide(mobj_t *t1, mobj_t *t2);
|
||||||
boolean K_FallingRockCollide(mobj_t *t1, mobj_t *t2);
|
boolean K_FallingRockCollide(mobj_t *t1, mobj_t *t2);
|
||||||
boolean K_SMKIceBlockCollide(mobj_t *t1, mobj_t *t2);
|
boolean K_SMKIceBlockCollide(mobj_t *t1, mobj_t *t2);
|
||||||
|
|
|
||||||
13
src/k_hud.c
13
src/k_hud.c
|
|
@ -111,6 +111,7 @@ static patch_t *kp_eggman[2];
|
||||||
static patch_t *kp_orbinaut[5];
|
static patch_t *kp_orbinaut[5];
|
||||||
static patch_t *kp_jawz[2];
|
static patch_t *kp_jawz[2];
|
||||||
static patch_t *kp_mine[2];
|
static patch_t *kp_mine[2];
|
||||||
|
static patch_t *kp_landmine[2];
|
||||||
static patch_t *kp_ballhog[2];
|
static patch_t *kp_ballhog[2];
|
||||||
static patch_t *kp_selfpropelledbomb[2];
|
static patch_t *kp_selfpropelledbomb[2];
|
||||||
static patch_t *kp_grow[2];
|
static patch_t *kp_grow[2];
|
||||||
|
|
@ -386,6 +387,7 @@ void K_LoadKartHUDGraphics(void)
|
||||||
}
|
}
|
||||||
kp_jawz[0] = W_CachePatchName("K_ITJAWZ", PU_HUDGFX);
|
kp_jawz[0] = W_CachePatchName("K_ITJAWZ", PU_HUDGFX);
|
||||||
kp_mine[0] = W_CachePatchName("K_ITMINE", PU_HUDGFX);
|
kp_mine[0] = W_CachePatchName("K_ITMINE", PU_HUDGFX);
|
||||||
|
kp_landmine[0] = W_CachePatchName("K_ITLNDM", PU_HUDGFX);
|
||||||
kp_ballhog[0] = W_CachePatchName("K_ITBHOG", PU_HUDGFX);
|
kp_ballhog[0] = W_CachePatchName("K_ITBHOG", PU_HUDGFX);
|
||||||
kp_selfpropelledbomb[0] = W_CachePatchName("K_ITSPB", PU_HUDGFX);
|
kp_selfpropelledbomb[0] = W_CachePatchName("K_ITSPB", PU_HUDGFX);
|
||||||
kp_grow[0] = W_CachePatchName("K_ITGROW", PU_HUDGFX);
|
kp_grow[0] = W_CachePatchName("K_ITGROW", PU_HUDGFX);
|
||||||
|
|
@ -435,6 +437,7 @@ void K_LoadKartHUDGraphics(void)
|
||||||
kp_orbinaut[4] = W_CachePatchName("K_ISORBN", PU_HUDGFX);
|
kp_orbinaut[4] = W_CachePatchName("K_ISORBN", PU_HUDGFX);
|
||||||
kp_jawz[1] = W_CachePatchName("K_ISJAWZ", PU_HUDGFX);
|
kp_jawz[1] = W_CachePatchName("K_ISJAWZ", PU_HUDGFX);
|
||||||
kp_mine[1] = W_CachePatchName("K_ISMINE", PU_HUDGFX);
|
kp_mine[1] = W_CachePatchName("K_ISMINE", PU_HUDGFX);
|
||||||
|
kp_landmine[1] = W_CachePatchName("K_ISLNDM", PU_HUDGFX);
|
||||||
kp_ballhog[1] = W_CachePatchName("K_ISBHOG", PU_HUDGFX);
|
kp_ballhog[1] = W_CachePatchName("K_ISBHOG", PU_HUDGFX);
|
||||||
kp_selfpropelledbomb[1] = W_CachePatchName("K_ISSPB", PU_HUDGFX);
|
kp_selfpropelledbomb[1] = W_CachePatchName("K_ISSPB", PU_HUDGFX);
|
||||||
kp_grow[1] = W_CachePatchName("K_ISGROW", PU_HUDGFX);
|
kp_grow[1] = W_CachePatchName("K_ISGROW", PU_HUDGFX);
|
||||||
|
|
@ -611,6 +614,8 @@ const char *K_GetItemPatch(UINT8 item, boolean tiny)
|
||||||
return (tiny ? "K_ISJAWZ" : "K_ITJAWZ");
|
return (tiny ? "K_ISJAWZ" : "K_ITJAWZ");
|
||||||
case KITEM_MINE:
|
case KITEM_MINE:
|
||||||
return (tiny ? "K_ISMINE" : "K_ITMINE");
|
return (tiny ? "K_ISMINE" : "K_ITMINE");
|
||||||
|
case KITEM_LANDMINE:
|
||||||
|
return (tiny ? "K_ISLNDM" : "K_ITLNDM");
|
||||||
case KITEM_BALLHOG:
|
case KITEM_BALLHOG:
|
||||||
return (tiny ? "K_ISBHOG" : "K_ITBHOG");
|
return (tiny ? "K_ISBHOG" : "K_ITBHOG");
|
||||||
case KITEM_SPB:
|
case KITEM_SPB:
|
||||||
|
|
@ -961,6 +966,10 @@ static void K_drawKartItem(void)
|
||||||
localpatch = kp_superring[offset];
|
localpatch = kp_superring[offset];
|
||||||
//localcolor = SKINCOLOR_GOLD;
|
//localcolor = SKINCOLOR_GOLD;
|
||||||
break;
|
break;
|
||||||
|
case 15: // Land Mine
|
||||||
|
localpatch = kp_landmine[offset];
|
||||||
|
//localcolor = SKINCOLOR_JET;
|
||||||
|
break;
|
||||||
/*case 15: // Pogo Spring
|
/*case 15: // Pogo Spring
|
||||||
localpatch = kp_pogospring[offset];
|
localpatch = kp_pogospring[offset];
|
||||||
localcolor = SKINCOLOR_TANGERINE;
|
localcolor = SKINCOLOR_TANGERINE;
|
||||||
|
|
@ -1046,6 +1055,9 @@ static void K_drawKartItem(void)
|
||||||
case KITEM_MINE:
|
case KITEM_MINE:
|
||||||
localpatch = kp_mine[offset];
|
localpatch = kp_mine[offset];
|
||||||
break;
|
break;
|
||||||
|
case KITEM_LANDMINE:
|
||||||
|
localpatch = kp_landmine[offset];
|
||||||
|
break;
|
||||||
case KITEM_BALLHOG:
|
case KITEM_BALLHOG:
|
||||||
localpatch = kp_ballhog[offset];
|
localpatch = kp_ballhog[offset];
|
||||||
break;
|
break;
|
||||||
|
|
@ -3722,6 +3734,7 @@ static void K_drawDistributionDebugger(void)
|
||||||
kp_orbinaut[4],
|
kp_orbinaut[4],
|
||||||
kp_jawz[1],
|
kp_jawz[1],
|
||||||
kp_mine[1],
|
kp_mine[1],
|
||||||
|
kp_landmine[1],
|
||||||
kp_ballhog[1],
|
kp_ballhog[1],
|
||||||
kp_selfpropelledbomb[1],
|
kp_selfpropelledbomb[1],
|
||||||
kp_grow[1],
|
kp_grow[1],
|
||||||
|
|
|
||||||
52
src/k_kart.c
52
src/k_kart.c
|
|
@ -151,6 +151,7 @@ void K_RegisterKartStuff(void)
|
||||||
CV_RegisterVar(&cv_orbinaut);
|
CV_RegisterVar(&cv_orbinaut);
|
||||||
CV_RegisterVar(&cv_jawz);
|
CV_RegisterVar(&cv_jawz);
|
||||||
CV_RegisterVar(&cv_mine);
|
CV_RegisterVar(&cv_mine);
|
||||||
|
CV_RegisterVar(&cv_landmine);
|
||||||
CV_RegisterVar(&cv_ballhog);
|
CV_RegisterVar(&cv_ballhog);
|
||||||
CV_RegisterVar(&cv_selfpropelledbomb);
|
CV_RegisterVar(&cv_selfpropelledbomb);
|
||||||
CV_RegisterVar(&cv_grow);
|
CV_RegisterVar(&cv_grow);
|
||||||
|
|
@ -252,6 +253,7 @@ consvar_t *KartItemCVars[NUMKARTRESULTS-1] =
|
||||||
&cv_orbinaut,
|
&cv_orbinaut,
|
||||||
&cv_jawz,
|
&cv_jawz,
|
||||||
&cv_mine,
|
&cv_mine,
|
||||||
|
&cv_landmine,
|
||||||
&cv_ballhog,
|
&cv_ballhog,
|
||||||
&cv_selfpropelledbomb,
|
&cv_selfpropelledbomb,
|
||||||
&cv_grow,
|
&cv_grow,
|
||||||
|
|
@ -281,11 +283,12 @@ static INT32 K_KartItemOddsRace[NUMKARTRESULTS-1][8] =
|
||||||
/*Sneaker*/ { 0, 0, 2, 4, 6, 0, 0, 0 }, // Sneaker
|
/*Sneaker*/ { 0, 0, 2, 4, 6, 0, 0, 0 }, // Sneaker
|
||||||
/*Rocket Sneaker*/ { 0, 0, 0, 0, 0, 2, 4, 6 }, // Rocket Sneaker
|
/*Rocket Sneaker*/ { 0, 0, 0, 0, 0, 2, 4, 6 }, // Rocket Sneaker
|
||||||
/*Invincibility*/ { 0, 0, 0, 0, 2, 4, 6, 9 }, // Invincibility
|
/*Invincibility*/ { 0, 0, 0, 0, 2, 4, 6, 9 }, // Invincibility
|
||||||
/*Banana*/ { 7, 3, 1, 0, 0, 0, 0, 0 }, // Banana
|
/*Banana*/ { 6, 3, 1, 0, 0, 0, 0, 0 }, // Banana
|
||||||
/*Eggman Monitor*/ { 3, 2, 0, 0, 0, 0, 0, 0 }, // Eggman Monitor
|
/*Eggman Monitor*/ { 2, 2, 0, 0, 0, 0, 0, 0 }, // Eggman Monitor
|
||||||
/*Orbinaut*/ { 7, 4, 2, 2, 0, 0, 0, 0 }, // Orbinaut
|
/*Orbinaut*/ { 7, 4, 2, 2, 0, 0, 0, 0 }, // Orbinaut
|
||||||
/*Jawz*/ { 0, 3, 2, 1, 1, 0, 0, 0 }, // Jawz
|
/*Jawz*/ { 0, 3, 2, 1, 1, 0, 0, 0 }, // Jawz
|
||||||
/*Mine*/ { 0, 2, 3, 1, 0, 0, 0, 0 }, // Mine
|
/*Mine*/ { 0, 2, 3, 1, 0, 0, 0, 0 }, // Mine
|
||||||
|
/*Land Mine*/ { 2, 0, 0, 0, 0, 0, 0, 0 }, // Land Mine
|
||||||
/*Ballhog*/ { 0, 0, 2, 1, 0, 0, 0, 0 }, // Ballhog
|
/*Ballhog*/ { 0, 0, 2, 1, 0, 0, 0, 0 }, // Ballhog
|
||||||
/*Self-Propelled Bomb*/ { 0, 1, 2, 3, 4, 2, 2, 0 }, // Self-Propelled Bomb
|
/*Self-Propelled Bomb*/ { 0, 1, 2, 3, 4, 2, 2, 0 }, // Self-Propelled Bomb
|
||||||
/*Grow*/ { 0, 0, 0, 1, 2, 3, 0, 0 }, // Grow
|
/*Grow*/ { 0, 0, 0, 1, 2, 3, 0, 0 }, // Grow
|
||||||
|
|
@ -317,6 +320,7 @@ static INT32 K_KartItemOddsBattle[NUMKARTRESULTS][2] =
|
||||||
/*Orbinaut*/ { 8, 0 }, // Orbinaut
|
/*Orbinaut*/ { 8, 0 }, // Orbinaut
|
||||||
/*Jawz*/ { 8, 1 }, // Jawz
|
/*Jawz*/ { 8, 1 }, // Jawz
|
||||||
/*Mine*/ { 4, 1 }, // Mine
|
/*Mine*/ { 4, 1 }, // Mine
|
||||||
|
/*Land Mine*/ { 0, 0 }, // Land Mine
|
||||||
/*Ballhog*/ { 2, 1 }, // Ballhog
|
/*Ballhog*/ { 2, 1 }, // Ballhog
|
||||||
/*Self-Propelled Bomb*/ { 0, 0 }, // Self-Propelled Bomb
|
/*Self-Propelled Bomb*/ { 0, 0 }, // Self-Propelled Bomb
|
||||||
/*Grow*/ { 2, 1 }, // Grow
|
/*Grow*/ { 2, 1 }, // Grow
|
||||||
|
|
@ -525,6 +529,7 @@ INT32 K_KartGetItemOdds(UINT8 pos, SINT8 item, fixed_t mashed, boolean spbrush,
|
||||||
case KITEM_ORBINAUT:
|
case KITEM_ORBINAUT:
|
||||||
case KITEM_JAWZ:
|
case KITEM_JAWZ:
|
||||||
case KITEM_MINE:
|
case KITEM_MINE:
|
||||||
|
case KITEM_LANDMINE:
|
||||||
case KITEM_BALLHOG:
|
case KITEM_BALLHOG:
|
||||||
case KITEM_SPB:
|
case KITEM_SPB:
|
||||||
case KITEM_GROW:
|
case KITEM_GROW:
|
||||||
|
|
@ -553,6 +558,7 @@ INT32 K_KartGetItemOdds(UINT8 pos, SINT8 item, fixed_t mashed, boolean spbrush,
|
||||||
{
|
{
|
||||||
case KITEM_ROCKETSNEAKER:
|
case KITEM_ROCKETSNEAKER:
|
||||||
case KITEM_JAWZ:
|
case KITEM_JAWZ:
|
||||||
|
case KITEM_LANDMINE:
|
||||||
case KITEM_BALLHOG:
|
case KITEM_BALLHOG:
|
||||||
case KRITEM_TRIPLESNEAKER:
|
case KRITEM_TRIPLESNEAKER:
|
||||||
case KRITEM_TRIPLEBANANA:
|
case KRITEM_TRIPLEBANANA:
|
||||||
|
|
@ -4201,6 +4207,40 @@ void K_DoPogoSpring(mobj_t *mo, fixed_t vertispeed, UINT8 sound)
|
||||||
S_StartSound(mo, (sound == 1 ? sfx_kc2f : sfx_kpogos));
|
S_StartSound(mo, (sound == 1 ? sfx_kc2f : sfx_kpogos));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void K_ThrowLandMine(player_t *player)
|
||||||
|
{
|
||||||
|
mobj_t *landMine;
|
||||||
|
mobj_t *throwmo;
|
||||||
|
|
||||||
|
landMine = P_SpawnMobj(player->mo->x, player->mo->y, player->mo->z + player->mo->height/2, MT_LANDMINE);
|
||||||
|
K_FlipFromObject(landMine, player->mo);
|
||||||
|
landMine->threshold = 10;
|
||||||
|
|
||||||
|
if (landMine->info->seesound)
|
||||||
|
S_StartSound(player->mo, landMine->info->seesound);
|
||||||
|
|
||||||
|
P_SetTarget(&landMine->target, player->mo);
|
||||||
|
|
||||||
|
P_SetScale(landMine, player->mo->scale);
|
||||||
|
landMine->destscale = player->mo->destscale;
|
||||||
|
|
||||||
|
landMine->angle = player->mo->angle;
|
||||||
|
|
||||||
|
landMine->momz = (30 * mapobjectscale * P_MobjFlip(player->mo)) + player->mo->momz;
|
||||||
|
landMine->color = player->skincolor;
|
||||||
|
|
||||||
|
throwmo = P_SpawnMobj(player->mo->x, player->mo->y, player->mo->z + player->mo->height/2, MT_FIREDITEM);
|
||||||
|
P_SetTarget(&throwmo->target, player->mo);
|
||||||
|
// Ditto:
|
||||||
|
if (player->mo->eflags & MFE_VERTICALFLIP)
|
||||||
|
{
|
||||||
|
throwmo->z -= player->mo->height;
|
||||||
|
throwmo->eflags |= MFE_VERTICALFLIP;
|
||||||
|
}
|
||||||
|
|
||||||
|
throwmo->movecount = 0; // above player
|
||||||
|
}
|
||||||
|
|
||||||
void K_KillBananaChain(mobj_t *banana, mobj_t *inflictor, mobj_t *source)
|
void K_KillBananaChain(mobj_t *banana, mobj_t *inflictor, mobj_t *source)
|
||||||
{
|
{
|
||||||
mobj_t *cachenext;
|
mobj_t *cachenext;
|
||||||
|
|
@ -7469,6 +7509,14 @@ void K_MoveKartPlayer(player_t *player, boolean onground)
|
||||||
K_UpdateHnextList(player, true);
|
K_UpdateHnextList(player, true);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case KITEM_LANDMINE:
|
||||||
|
if (ATTACK_IS_DOWN && !HOLDING_ITEM && NO_HYUDORO)
|
||||||
|
{
|
||||||
|
player->kartstuff[k_itemamount]--;
|
||||||
|
K_ThrowLandMine(player);
|
||||||
|
K_PlayAttackTaunt(player->mo);
|
||||||
|
}
|
||||||
|
break;
|
||||||
case KITEM_BALLHOG:
|
case KITEM_BALLHOG:
|
||||||
if (ATTACK_IS_DOWN && !HOLDING_ITEM && NO_HYUDORO)
|
if (ATTACK_IS_DOWN && !HOLDING_ITEM && NO_HYUDORO)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -1821,7 +1821,7 @@ boolean P_DamageMobj(mobj_t *target, mobj_t *inflictor, mobj_t *source, INT32 da
|
||||||
if (player) // Player is the target
|
if (player) // Player is the target
|
||||||
{
|
{
|
||||||
const UINT8 type = (damagetype & DMG_TYPEMASK);
|
const UINT8 type = (damagetype & DMG_TYPEMASK);
|
||||||
const boolean combo = (type == DMG_EXPLODE); // This damage type can be comboed from other damage
|
const boolean combo = (type == DMG_EXPLODE || type == DMG_TUMBLE); // This damage type can be comboed from other damage
|
||||||
INT16 ringburst = 5;
|
INT16 ringburst = 5;
|
||||||
|
|
||||||
if (player->pflags & PF_GODMODE)
|
if (player->pflags & PF_GODMODE)
|
||||||
|
|
@ -1943,7 +1943,7 @@ boolean P_DamageMobj(mobj_t *target, mobj_t *inflictor, mobj_t *source, INT32 da
|
||||||
P_PlayerRingBurst(player, ringburst);
|
P_PlayerRingBurst(player, ringburst);
|
||||||
K_PlayPainSound(player->mo);
|
K_PlayPainSound(player->mo);
|
||||||
|
|
||||||
if ((type == DMG_EXPLODE) || (cv_kartdebughuddrop.value && !modeattacking))
|
if ((combo == true) || (cv_kartdebughuddrop.value && !modeattacking))
|
||||||
{
|
{
|
||||||
K_DropItems(player);
|
K_DropItems(player);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
25
src/p_map.c
25
src/p_map.c
|
|
@ -725,7 +725,7 @@ static boolean PIT_CheckThing(mobj_t *thing)
|
||||||
|| (thing->player && thing->player->kartstuff[k_bubbleblowup]))
|
|| (thing->player && thing->player->kartstuff[k_bubbleblowup]))
|
||||||
&& (tmthing->type == MT_ORBINAUT || tmthing->type == MT_JAWZ || tmthing->type == MT_JAWZ_DUD
|
&& (tmthing->type == MT_ORBINAUT || tmthing->type == MT_JAWZ || tmthing->type == MT_JAWZ_DUD
|
||||||
|| tmthing->type == MT_BANANA || tmthing->type == MT_EGGMANITEM || tmthing->type == MT_BALLHOG
|
|| tmthing->type == MT_BANANA || tmthing->type == MT_EGGMANITEM || tmthing->type == MT_BALLHOG
|
||||||
|| tmthing->type == MT_SSMINE || tmthing->type == MT_SINK
|
|| tmthing->type == MT_SSMINE || tmthing->type == MT_LANDMINE || tmthing->type == MT_SINK
|
||||||
|| (tmthing->type == MT_PLAYER && thing->target != tmthing)))
|
|| (tmthing->type == MT_PLAYER && thing->target != tmthing)))
|
||||||
{
|
{
|
||||||
// see if it went over / under
|
// see if it went over / under
|
||||||
|
|
@ -783,7 +783,7 @@ static boolean PIT_CheckThing(mobj_t *thing)
|
||||||
|| (tmthing->player && tmthing->player->kartstuff[k_bubbleblowup]))
|
|| (tmthing->player && tmthing->player->kartstuff[k_bubbleblowup]))
|
||||||
&& (thing->type == MT_ORBINAUT || thing->type == MT_JAWZ || thing->type == MT_JAWZ_DUD
|
&& (thing->type == MT_ORBINAUT || thing->type == MT_JAWZ || thing->type == MT_JAWZ_DUD
|
||||||
|| thing->type == MT_BANANA || thing->type == MT_EGGMANITEM || thing->type == MT_BALLHOG
|
|| thing->type == MT_BANANA || thing->type == MT_EGGMANITEM || thing->type == MT_BALLHOG
|
||||||
|| thing->type == MT_SSMINE || thing->type == MT_SINK
|
|| thing->type == MT_SSMINE || tmthing->type == MT_LANDMINE || thing->type == MT_SINK
|
||||||
|| (thing->type == MT_PLAYER && tmthing->target != thing)))
|
|| (thing->type == MT_PLAYER && tmthing->target != thing)))
|
||||||
{
|
{
|
||||||
// see if it went over / under
|
// see if it went over / under
|
||||||
|
|
@ -928,6 +928,27 @@ static boolean PIT_CheckThing(mobj_t *thing)
|
||||||
return K_MineExplosionCollide(thing, tmthing);
|
return K_MineExplosionCollide(thing, tmthing);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (tmthing->type == MT_LANDMINE)
|
||||||
|
{
|
||||||
|
// see if it went over / under
|
||||||
|
if (tmthing->z > thing->z + thing->height)
|
||||||
|
return true; // overhead
|
||||||
|
if (tmthing->z + tmthing->height < thing->z)
|
||||||
|
return true; // underneath
|
||||||
|
|
||||||
|
return K_LandMineCollide(tmthing, thing);
|
||||||
|
}
|
||||||
|
else if (thing->type == MT_LANDMINE)
|
||||||
|
{
|
||||||
|
// see if it went over / under
|
||||||
|
if (tmthing->z > thing->z + thing->height)
|
||||||
|
return true; // overhead
|
||||||
|
if (tmthing->z + tmthing->height < thing->z)
|
||||||
|
return true; // underneath
|
||||||
|
|
||||||
|
return K_LandMineCollide(thing, tmthing);
|
||||||
|
}
|
||||||
|
|
||||||
if (tmthing->type == MT_SINK)
|
if (tmthing->type == MT_SINK)
|
||||||
{
|
{
|
||||||
// see if it went over / under
|
// see if it went over / under
|
||||||
|
|
|
||||||
29
src/p_mobj.c
29
src/p_mobj.c
|
|
@ -1168,6 +1168,7 @@ fixed_t P_GetMobjGravity(mobj_t *mo)
|
||||||
case MT_BANANA:
|
case MT_BANANA:
|
||||||
case MT_EGGMANITEM:
|
case MT_EGGMANITEM:
|
||||||
case MT_SSMINE:
|
case MT_SSMINE:
|
||||||
|
case MT_LANDMINE:
|
||||||
case MT_SINK:
|
case MT_SINK:
|
||||||
if (mo->extravalue2 > 0)
|
if (mo->extravalue2 > 0)
|
||||||
gravityadd *= mo->extravalue2;
|
gravityadd *= mo->extravalue2;
|
||||||
|
|
@ -2092,6 +2093,7 @@ boolean P_ZMovement(mobj_t *mo)
|
||||||
case MT_JAWZ_DUD:
|
case MT_JAWZ_DUD:
|
||||||
case MT_BALLHOG:
|
case MT_BALLHOG:
|
||||||
case MT_SSMINE:
|
case MT_SSMINE:
|
||||||
|
case MT_LANDMINE:
|
||||||
case MT_BUBBLESHIELDTRAP:
|
case MT_BUBBLESHIELDTRAP:
|
||||||
// Remove stuff from death pits.
|
// Remove stuff from death pits.
|
||||||
if (P_CheckDeathPitCollide(mo))
|
if (P_CheckDeathPitCollide(mo))
|
||||||
|
|
@ -4478,7 +4480,8 @@ boolean P_IsKartItem(INT32 type)
|
||||||
type == MT_JAWZ || type == MT_JAWZ_DUD || type == MT_JAWZ_SHIELD ||
|
type == MT_JAWZ || type == MT_JAWZ_DUD || type == MT_JAWZ_SHIELD ||
|
||||||
type == MT_SSMINE || type == MT_SSMINE_SHIELD ||
|
type == MT_SSMINE || type == MT_SSMINE_SHIELD ||
|
||||||
type == MT_SINK || type == MT_SINK_SHIELD ||
|
type == MT_SINK || type == MT_SINK_SHIELD ||
|
||||||
type == MT_SPB || type == MT_BALLHOG || type == MT_BUBBLESHIELDTRAP)
|
type == MT_SPB || type == MT_BALLHOG || type == MT_BUBBLESHIELDTRAP ||
|
||||||
|
type == MT_LANDMINE)
|
||||||
return true;
|
return true;
|
||||||
else
|
else
|
||||||
return false;
|
return false;
|
||||||
|
|
@ -5759,6 +5762,7 @@ static boolean P_MobjDeadThink(mobj_t *mobj)
|
||||||
case MT_ORBINAUT:
|
case MT_ORBINAUT:
|
||||||
case MT_BANANA:
|
case MT_BANANA:
|
||||||
case MT_EGGMANITEM:
|
case MT_EGGMANITEM:
|
||||||
|
case MT_LANDMINE:
|
||||||
case MT_SPB:
|
case MT_SPB:
|
||||||
if (P_IsObjectOnGround(mobj))
|
if (P_IsObjectOnGround(mobj))
|
||||||
{
|
{
|
||||||
|
|
@ -6369,6 +6373,25 @@ static boolean P_MobjRegularThink(mobj_t *mobj)
|
||||||
|| (mobj->state >= &states[S_SSMINE_DEPLOY8] && mobj->state <= &states[S_SSMINE_DEPLOY13]))
|
|| (mobj->state >= &states[S_SSMINE_DEPLOY8] && mobj->state <= &states[S_SSMINE_DEPLOY13]))
|
||||||
A_GrenadeRing(mobj);
|
A_GrenadeRing(mobj);
|
||||||
|
|
||||||
|
if (mobj->threshold > 0)
|
||||||
|
mobj->threshold--;
|
||||||
|
break;
|
||||||
|
case MT_LANDMINE:
|
||||||
|
mobj->friction = ORIG_FRICTION/4;
|
||||||
|
|
||||||
|
if (mobj->momx || mobj->momy || mobj->momz)
|
||||||
|
{
|
||||||
|
mobj_t *ghost = P_SpawnGhostMobj(mobj);
|
||||||
|
ghost->colorized = true; // already has color!
|
||||||
|
}
|
||||||
|
|
||||||
|
if (P_IsObjectOnGround(mobj) && mobj->health > 1)
|
||||||
|
{
|
||||||
|
S_StartSound(mobj, mobj->info->activesound);
|
||||||
|
mobj->momx = mobj->momy = 0;
|
||||||
|
mobj->health = 1;
|
||||||
|
}
|
||||||
|
|
||||||
if (mobj->threshold > 0)
|
if (mobj->threshold > 0)
|
||||||
mobj->threshold--;
|
mobj->threshold--;
|
||||||
break;
|
break;
|
||||||
|
|
@ -8508,7 +8531,8 @@ void P_MobjThinker(mobj_t *mobj)
|
||||||
if (mobj->type == MT_BANANA || mobj->type == MT_EGGMANITEM
|
if (mobj->type == MT_BANANA || mobj->type == MT_EGGMANITEM
|
||||||
|| mobj->type == MT_ORBINAUT || mobj->type == MT_BALLHOG
|
|| mobj->type == MT_ORBINAUT || mobj->type == MT_BALLHOG
|
||||||
|| mobj->type == MT_JAWZ || mobj->type == MT_JAWZ_DUD
|
|| mobj->type == MT_JAWZ || mobj->type == MT_JAWZ_DUD
|
||||||
|| mobj->type == MT_SSMINE || mobj->type == MT_BUBBLESHIELDTRAP)
|
|| mobj->type == MT_SSMINE || mobj->type == MT_BUBBLESHIELDTRAP
|
||||||
|
|| mobj->type == MT_LANDMINE)
|
||||||
{
|
{
|
||||||
if (mobj->health > 0 && P_MobjTouchingSectorSpecial(mobj, 4, 7, true))
|
if (mobj->health > 0 && P_MobjTouchingSectorSpecial(mobj, 4, 7, true))
|
||||||
{
|
{
|
||||||
|
|
@ -8889,6 +8913,7 @@ static void P_DefaultMobjShadowScale(mobj_t *thing)
|
||||||
case MT_JAWZ_SHIELD:
|
case MT_JAWZ_SHIELD:
|
||||||
case MT_SSMINE:
|
case MT_SSMINE:
|
||||||
case MT_SSMINE_SHIELD:
|
case MT_SSMINE_SHIELD:
|
||||||
|
case MT_LANDMINE:
|
||||||
case MT_BALLHOG:
|
case MT_BALLHOG:
|
||||||
case MT_SINK:
|
case MT_SINK:
|
||||||
case MT_ROCKETSNEAKER:
|
case MT_ROCKETSNEAKER:
|
||||||
|
|
|
||||||
|
|
@ -2169,6 +2169,9 @@ void P_MovePlayer(player_t *player)
|
||||||
|
|
||||||
UINT8 rollSpeed = max(1, min(8, player->tumbleHeight / 10));
|
UINT8 rollSpeed = max(1, min(8, player->tumbleHeight / 10));
|
||||||
|
|
||||||
|
if (player->tumbleLastBounce == true)
|
||||||
|
spinSpeed = 2;
|
||||||
|
|
||||||
P_SetPlayerMobjState(player->mo, S_KART_SPINOUT);
|
P_SetPlayerMobjState(player->mo, S_KART_SPINOUT);
|
||||||
player->drawangle -= (ANGLE_11hh * spinSpeed);
|
player->drawangle -= (ANGLE_11hh * spinSpeed);
|
||||||
|
|
||||||
|
|
@ -2176,6 +2179,9 @@ void P_MovePlayer(player_t *player)
|
||||||
|
|
||||||
if (player->tumbleLastBounce == true)
|
if (player->tumbleLastBounce == true)
|
||||||
{
|
{
|
||||||
|
if (abs((signed)(player->mo->angle - player->drawangle)) < ANGLE_22h)
|
||||||
|
player->drawangle = player->mo->angle;
|
||||||
|
|
||||||
if (abs((signed)player->mo->rollangle) < ANGLE_22h)
|
if (abs((signed)player->mo->rollangle) < ANGLE_22h)
|
||||||
player->mo->rollangle = 0;
|
player->mo->rollangle = 0;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue