Fireballs work, added to roulette.

Removed [k_fireballtimer] since it is not going to be used.
This commit is contained in:
ZTsukei 2017-05-13 11:14:26 -04:00
parent e72b2921fb
commit 2972dc9b67
8 changed files with 158 additions and 85 deletions

View file

@ -273,7 +273,6 @@ typedef enum
k_startimer, // Invincibility timer
k_spinouttimer, // Wipe-out from a banana peel or oil slick (was "pw_bananacam")
k_laserwisptimer, // The duration and relative angle of the laser
k_fireflowertimer, // Duration of Fire Flower
// Each item needs its own power slot, for the HUD and held use
k_magnet, // 0x1 = Magnet in inventory

View file

@ -143,16 +143,16 @@ extern FILE *logstream;
#define DEVELOP // Disable this for release builds to remove excessive cheat commands and enable MD5 checking and stuff, all in one go. :3
#ifdef DEVELOP
#define VERSION 103 // Game version
#define SUBVERSION 14 // more precise version number
#define SUBVERSION 15 // more precise version number
#define VERSIONSTRING "Development EXE"
#define VERSIONSTRINGW "v1.3.14"
#define VERSIONSTRINGW "v1.3.15"
// most interface strings are ignored in development mode.
// we use comprevision and compbranch instead.
#else
#define VERSION 103 // Game version
#define SUBVERSION 14 // more precise version number
#define VERSIONSTRING "DevEXE v1.3.14"
#define VERSIONSTRINGW L"v1.3.14"
#define SUBVERSION 15 // more precise version number
#define VERSIONSTRING "DevEXE v1.3.15"
#define VERSIONSTRINGW L"v1.3.15"
// Hey! If you change this, add 1 to the MODVERSION below!
// Otherwise we can't force updates!
#endif

View file

@ -2127,13 +2127,19 @@ state_t states[NUMSTATES] =
{SPR_FFWR, 3, 3, {NULL}, 0, 0, S_FIREFLOWER1}, // S_FIREFLOWER4
// Thrown Mario Fireball
{SPR_FBLL, FF_FULLBRIGHT, 3, {NULL}, 0, 0, S_FIREBALL2}, // S_FIREBALL1
{SPR_FBLL, FF_FULLBRIGHT|1, 3, {NULL}, 0, 0, S_FIREBALL3}, // S_FIREBALL2
{SPR_FBLL, FF_FULLBRIGHT|2, 3, {NULL}, 0, 0, S_FIREBALL4}, // S_FIREBALL3
{SPR_FBLL, FF_FULLBRIGHT|3, 3, {NULL}, 0, 0, S_FIREBALL1}, // S_FIREBALL4
{SPR_FBLL, FF_FULLBRIGHT|4, 3, {NULL}, 0, 0, S_FIREBALLEXP2}, // S_FIREBALLEXP1
{SPR_FBLL, FF_FULLBRIGHT|5, 3, {NULL}, 0, 0, S_FIREBALLEXP3}, // S_FIREBALLEXP2
{SPR_FBLL, FF_FULLBRIGHT|6, 3, {NULL}, 0, 0, S_NULL}, // S_FIREBALLEXP3
{SPR_FBLL, FF_FULLBRIGHT, 3, {A_SmokeTrailer}, MT_GREENTRAIL, 0, S_FIREBALL2}, // S_FIREBALL1
{SPR_FBLL, FF_FULLBRIGHT|1, 3, {A_SmokeTrailer}, MT_GREENTRAIL, 0, S_FIREBALL3}, // S_FIREBALL2
{SPR_FBLL, FF_FULLBRIGHT|2, 3, {A_SmokeTrailer}, MT_GREENTRAIL, 0, S_FIREBALL4}, // S_FIREBALL3
{SPR_FBLL, FF_FULLBRIGHT|3, 3, {A_SmokeTrailer}, MT_GREENTRAIL, 0, S_FIREBALL5}, // S_FIREBALL4
{SPR_FBLL, FF_FULLBRIGHT|4, 3, {A_SmokeTrailer}, MT_GREENTRAIL, 0, S_FIREBALL6}, // S_FIREBALL5
{SPR_FBLL, FF_FULLBRIGHT|5, 3, {A_SmokeTrailer}, MT_GREENTRAIL, 0, S_FIREBALL7}, // S_FIREBALL6
{SPR_FBLL, FF_FULLBRIGHT|6, 3, {A_SmokeTrailer}, MT_GREENTRAIL, 0, S_FIREBALL1}, // S_FIREBALL7
{SPR_FBLL, FF_FULLBRIGHT|7, 3, {NULL}, 0, 0, S_FIREBALLEXP2}, // S_FIREBALLEXP1
{SPR_FBLL, FF_FULLBRIGHT|8, 3, {NULL}, 0, 0, S_FIREBALLEXP3}, // S_FIREBALLEXP2
{SPR_FBLL, FF_FULLBRIGHT|9, 3, {NULL}, 0, 0, S_FIREBALLEXP4}, // S_FIREBALLEXP3
{SPR_FBLL, FF_FULLBRIGHT|10, 3, {NULL}, 0, 0, S_FIREBALLEXP5}, // S_FIREBALLEXP4
{SPR_FBLL, FF_FULLBRIGHT|11, 3, {NULL}, 0, 0, S_FIREBALLEXP6}, // S_FIREBALLEXP5
{SPR_FBLL, FF_FULLBRIGHT|12, 3, {NULL}, 0, 0, S_NULL}, // S_FIREBALLEXP6
// Turtle Shell
{SPR_SHLL, 0, -1, {NULL}, 0, 0, S_NULL}, // S_SHELL
@ -11816,27 +11822,27 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
{ // MT_FIREBALL
-1, // doomednum
S_FIREBALL1, // spawnstate
1000, // spawnhealth
140, // spawnhealth
S_FIREBALLEXP1, // seestate
sfx_None, // seesound
8, // reactiontime
sfx_None, // attacksound
S_NULL, // painstate
0, // painstate
0, // painchance
sfx_None, // painsound
S_FIREBALLEXP1, // meleestate
S_FIREBALLEXP1, // missilestate
S_FIREBALLEXP1, // deathstate
S_FIREBALLEXP1, // xdeathstate
sfx_mario1, // deathsound
10*FRACUNIT, // speed
4*FRACUNIT, // radius
8*FRACUNIT, // height
sfx_None, // deathsound
0, // speed
16*FRACUNIT, // radius
32*FRACUNIT, // height
0, // display offset
100, // mass
1, // damage
sfx_None, // activesound
MF_NOBLOCKMAP|MF_FIRE|MF_MISSILE, // flags
MF_SHOOTABLE|MF_BOUNCE, // flags
S_NULL // raisestate
},

View file

@ -2629,9 +2629,15 @@ typedef enum state
S_FIREBALL2,
S_FIREBALL3,
S_FIREBALL4,
S_FIREBALL5,
S_FIREBALL6,
S_FIREBALL7,
S_FIREBALLEXP1,
S_FIREBALLEXP2,
S_FIREBALLEXP3,
S_FIREBALLEXP4,
S_FIREBALLEXP5,
S_FIREBALLEXP6,
S_SHELL,
S_SHELL1,
S_SHELL2,

View file

@ -680,7 +680,7 @@ static INT32 K_KartItemOddsDistance_Retro[NUMKARTITEMS][9] =
/*Triple Banana*/ { 0, 0, 1, 1, 0, 0, 0, 0, 0 }, // Triple Banana
/*Fake Item*/ { 0, 4, 3, 2, 0, 0, 0, 0, 0 }, // Fake Item
/*Banana*/ { 0, 9, 6, 2, 1, 0, 0, 0, 0 }, // Banana
/*Green Shell*/ { 1, 6, 5, 3, 2, 0, 0, 0, 0 }, // Green Shell
/*Green Shell*/ { 0, 6, 5, 3, 2, 0, 0, 0, 0 }, // Green Shell
/*Red Shell*/ { 0, 0, 1, 4, 3, 1, 0, 0, 0 }, // Red Shell
/*Triple Green Shell*/ { 0, 0, 0, 1, 1, 1, 0, 0, 0 }, // Triple Green Shell
/*Bob-omb*/ { 0, 0, 0, 1, 1, 0, 0, 0, 0 }, // Bob-omb
@ -999,7 +999,7 @@ static void K_KartItemRouletteByDistance(player_t *player, ticcmd_t *cmd)
if (cv_triplegreenshell.value) SETITEMRESULT(useodds, 13); // Triple Green Shell
if (cv_bobomb.value) SETITEMRESULT(useodds, 14); // Bob-omb
if (cv_blueshell.value && pexiting == 0) SETITEMRESULT(useodds, 15); // Blue Shell
//if (cv_fireflower.value) SETITEMRESULT(useodds, 16); // Fire Flower
if (cv_fireflower.value) SETITEMRESULT(useodds, 16); // Fire Flower
if (cv_tripleredshell.value) SETITEMRESULT(useodds, 17); // Triple Red Shell
if (cv_lightning.value && pingame > pexiting) SETITEMRESULT(useodds, 18); // Lightning
@ -1284,10 +1284,6 @@ void K_KartPlayerThink(player_t *player, ticcmd_t *cmd)
&& player->kartstuff[k_goldshroomtimer])
player->kartstuff[k_goldshroomtimer]--;
if (player->kartstuff[k_bootaketimer] == 0 && player->kartstuff[k_boostolentimer] == 0
&& player->kartstuff[k_fireflowertimer])
player->kartstuff[k_fireflowertimer]--;
if (player->kartstuff[k_bootaketimer])
player->kartstuff[k_bootaketimer]--;
@ -1810,7 +1806,7 @@ void K_SpawnDriftTrail(player_t *player)
}
}
static mobj_t *P_ThrowKartItem(player_t *player, boolean missile, mobjtype_t mapthing, INT32 defaultDir, boolean bobombthrow)
static mobj_t *K_ThrowKartItem(player_t *player, boolean missile, mobjtype_t mapthing, INT32 defaultDir, boolean bobombthrow)
{
mobj_t *mo;
INT32 dir;
@ -1840,26 +1836,78 @@ static mobj_t *P_ThrowKartItem(player_t *player, boolean missile, mobjtype_t map
if (missile)
{
if (dir == -1)
if (mapthing == MT_FIREBALL) // Messy
{
// Shoot backward
mo = K_SpawnKartMissile(player->mo, mapthing, player->mo->angle + ANGLE_180, 0, 64*FRACUNIT);
if (mo)
mobj_t *mo2;
mobj_t *mo3;
mobj_t *mo4;
mobj_t *mo5;
if (dir == -1)
{
if (player->mo->eflags & MFE_VERTICALFLIP)
mo->eflags |= MFE_VERTICALFLIP;
// Shoot backward
mo = K_SpawnKartMissile(player->mo, mapthing, player->mo->angle + ANGLE_180 - 0x08000000, 0, 64*FRACUNIT);
mo2 = K_SpawnKartMissile(player->mo, mapthing, player->mo->angle + ANGLE_180 - 0x04000000, 0, 64*FRACUNIT);
mo3 = K_SpawnKartMissile(player->mo, mapthing, player->mo->angle + ANGLE_180, 0, 64*FRACUNIT);
mo4 = K_SpawnKartMissile(player->mo, mapthing, player->mo->angle + ANGLE_180 + 0x04000000, 0, 64*FRACUNIT);
mo5 = K_SpawnKartMissile(player->mo, mapthing, player->mo->angle + ANGLE_180 + 0x08000000, 0, 64*FRACUNIT);
if (mo)
{
if (player->mo->eflags & MFE_VERTICALFLIP)
{
mo->eflags |= MFE_VERTICALFLIP;
mo2->eflags |= MFE_VERTICALFLIP;
mo3->eflags |= MFE_VERTICALFLIP;
mo4->eflags |= MFE_VERTICALFLIP;
mo5->eflags |= MFE_VERTICALFLIP;
}
}
}
else
{
// Shoot forward
mo = K_SpawnKartMissile(player->mo, mapthing, player->mo->angle - 0x08000000, 0, 64*FRACUNIT);
mo2 = K_SpawnKartMissile(player->mo, mapthing, player->mo->angle - 0x04000000, 0, 64*FRACUNIT);
mo3 = K_SpawnKartMissile(player->mo, mapthing, player->mo->angle, 0, 64*FRACUNIT);
mo4 = K_SpawnKartMissile(player->mo, mapthing, player->mo->angle + 0x04000000, 0, 64*FRACUNIT);
mo5 = K_SpawnKartMissile(player->mo, mapthing, player->mo->angle + 0x08000000, 0, 64*FRACUNIT);
if (mo)
{
if (player->mo->eflags & MFE_VERTICALFLIP)
{
mo->eflags |= MFE_VERTICALFLIP;
mo2->eflags |= MFE_VERTICALFLIP;
mo3->eflags |= MFE_VERTICALFLIP;
mo4->eflags |= MFE_VERTICALFLIP;
mo5->eflags |= MFE_VERTICALFLIP;
}
}
}
}
else
{
// Shoot forward
mo = K_SpawnKartMissile(player->mo, mapthing, player->mo->angle, 0, 64*FRACUNIT);
if (mo)
if (dir == -1)
{
if (player->mo->eflags & MFE_VERTICALFLIP)
mo->eflags |= MFE_VERTICALFLIP;
// Shoot backward
mo = K_SpawnKartMissile(player->mo, mapthing, player->mo->angle + ANGLE_180, 0, 64*FRACUNIT);
if (mo)
{
if (player->mo->eflags & MFE_VERTICALFLIP)
mo->eflags |= MFE_VERTICALFLIP;
}
}
else
{
// Shoot forward
mo = K_SpawnKartMissile(player->mo, mapthing, player->mo->angle, 0, 64*FRACUNIT);
if (mo)
{
if (player->mo->eflags & MFE_VERTICALFLIP)
mo->eflags |= MFE_VERTICALFLIP;
}
}
}
}
@ -2526,10 +2574,20 @@ void K_MoveKartPlayer(player_t *player, boolean onground)
{
player->kartstuff[k_greenshell] &= ~1;
P_ThrowKartItem(player, true, MT_GREENITEM, 1, false);
K_ThrowKartItem(player, true, MT_GREENITEM, 1, false);
K_PlayTauntSound(player->mo);
}
else if (ATTACK_IS_DOWN && !HOLDING_ITEM && player->kartstuff[k_fireflower] && NO_BOO)
{
player->kartstuff[k_fireflower] = 0;
K_ThrowKartItem(player, true, MT_FIREBALL, 1, false);
S_StartSound(player->mo, sfx_mario7);
K_PlayTauntSound(player->mo);
player->kartstuff[k_itemclose] = 10;
}
// Triple Green Shell
else if (ATTACK_IS_DOWN && !HOLDING_ITEM && player->kartstuff[k_triplegreenshell] & 8 && NO_BOO)
{
@ -2560,7 +2618,7 @@ void K_MoveKartPlayer(player_t *player, boolean onground)
}
else if (ATTACK_IS_DOWN && (player->kartstuff[k_triplegreenshell] & 1 || player->kartstuff[k_triplegreenshell] & 2 || player->kartstuff[k_triplegreenshell] & 4))
{
P_ThrowKartItem(player, true, MT_GREENITEM, 1, false);
K_ThrowKartItem(player, true, MT_GREENITEM, 1, false);
K_PlayTauntSound(player->mo);
player->pflags |= PF_ATTACKDOWN;
@ -2595,7 +2653,7 @@ void K_MoveKartPlayer(player_t *player, boolean onground)
{
player->kartstuff[k_redshell] &= ~1;
P_ThrowKartItem(player, true, MT_REDITEM, 1, false);
K_ThrowKartItem(player, true, MT_REDITEM, 1, false);
K_PlayTauntSound(player->mo);
}
// Red Shell Dud
@ -2603,7 +2661,7 @@ void K_MoveKartPlayer(player_t *player, boolean onground)
{
player->kartstuff[k_redshell] &= ~1;
P_ThrowKartItem(player, true, MT_REDITEMDUD, -1, false);
K_ThrowKartItem(player, true, MT_REDITEMDUD, -1, false);
K_PlayTauntSound(player->mo);
}
// Triple Red Shell
@ -2637,7 +2695,7 @@ void K_MoveKartPlayer(player_t *player, boolean onground)
else if (ATTACK_IS_DOWN && (player->kartstuff[k_tripleredshell] & 1 || player->kartstuff[k_tripleredshell] & 2 || player->kartstuff[k_tripleredshell] & 4)
&& (player->kartstuff[k_throwdir] == 1 || player->kartstuff[k_throwdir] == 0))
{
P_ThrowKartItem(player, true, MT_REDITEM, 1, false);
K_ThrowKartItem(player, true, MT_REDITEM, 1, false);
K_PlayTauntSound(player->mo);
player->pflags |= PF_ATTACKDOWN;
if (player->kartstuff[k_tripleredshell] & 4)
@ -2650,7 +2708,7 @@ void K_MoveKartPlayer(player_t *player, boolean onground)
else if (ATTACK_IS_DOWN && (player->kartstuff[k_tripleredshell] & 1 || player->kartstuff[k_tripleredshell] & 2 || player->kartstuff[k_tripleredshell] & 4)
&& player->kartstuff[k_throwdir] == -1)
{
P_ThrowKartItem(player, true, MT_REDITEMDUD, -1, false);
K_ThrowKartItem(player, true, MT_REDITEMDUD, -1, false);
K_PlayTauntSound(player->mo);
player->pflags |= PF_ATTACKDOWN;
if (player->kartstuff[k_tripleredshell] & 4)
@ -2681,7 +2739,7 @@ void K_MoveKartPlayer(player_t *player, boolean onground)
}
else if (!(cmd->buttons & BT_ATTACK) && player->kartstuff[k_banana] & 1)
{
P_ThrowKartItem(player, false, MT_BANANAITEM, -1, false);
K_ThrowKartItem(player, false, MT_BANANAITEM, -1, false);
K_PlayTauntSound(player->mo);
player->kartstuff[k_banana] &= ~1;
}
@ -2718,7 +2776,7 @@ void K_MoveKartPlayer(player_t *player, boolean onground)
}
else if (ATTACK_IS_DOWN && (player->kartstuff[k_triplebanana] & 1 || player->kartstuff[k_triplebanana] & 2 || player->kartstuff[k_triplebanana] & 4))
{
P_ThrowKartItem(player, false, MT_BANANAITEM, -1,false );
K_ThrowKartItem(player, false, MT_BANANAITEM, -1,false );
K_PlayTauntSound(player->mo);
player->pflags |= PF_ATTACKDOWN;
if (player->kartstuff[k_triplebanana] & 4)
@ -2750,7 +2808,7 @@ void K_MoveKartPlayer(player_t *player, boolean onground)
}
else if (!(cmd->buttons & BT_ATTACK) && player->kartstuff[k_fakeitem] & 1)
{
P_ThrowKartItem(player, false, MT_FAKEITEM, -1, false);
K_ThrowKartItem(player, false, MT_FAKEITEM, -1, false);
K_PlayTauntSound(player->mo);
player->kartstuff[k_fakeitem] &= ~1;
}
@ -2775,7 +2833,7 @@ void K_MoveKartPlayer(player_t *player, boolean onground)
}
if (!(cmd->buttons & BT_ATTACK) && player->kartstuff[k_bobomb] & 1)
{
P_ThrowKartItem(player, false, MT_BOMBITEM, 1, true);
K_ThrowKartItem(player, false, MT_BOMBITEM, 1, true);
K_PlayTauntSound(player->mo);
player->kartstuff[k_bobomb] &= ~1;
}

View file

@ -1967,8 +1967,8 @@ void P_KillMobj(mobj_t *target, mobj_t *inflictor, mobj_t *source)
mobjtype_t item;
mobj_t *mo;
if (inflictor && (inflictor->type == MT_SHELL || inflictor->type == MT_FIREBALL))
P_SetTarget(&target->tracer, inflictor);
//if (inflictor && (inflictor->type == MT_SHELL || inflictor->type == MT_FIREBALL))
// P_SetTarget(&target->tracer, inflictor);
// SRB2kart
// I wish I knew a better way to do this
@ -2019,7 +2019,8 @@ void P_KillMobj(mobj_t *target, mobj_t *inflictor, mobj_t *source)
|| target->type == MT_TRIPLEREDSHIELD1 || target->type == MT_TRIPLEREDSHIELD2 || target->type == MT_TRIPLEREDSHIELD3
|| target->type == MT_BANANAITEM || target->type == MT_BANANASHIELD
|| target->type == MT_TRIPLEBANANASHIELD1 || target->type == MT_TRIPLEBANANASHIELD2 || target->type == MT_TRIPLEBANANASHIELD3
|| target->type == MT_FAKEITEM || target->type == MT_FAKESHIELD)) // kart dead items
|| target->type == MT_FAKEITEM || target->type == MT_FAKESHIELD
|| target->type == MT_FIREBALL)) // kart dead items
target->flags |= MF_NOGRAVITY; // Don't drop Tails 03-08-2000
else
target->flags &= ~MF_NOGRAVITY; // lose it if you for whatever reason have it, I'm looking at you shields

View file

@ -630,7 +630,7 @@ static boolean PIT_CheckThing(mobj_t *thing)
|| thing->type == MT_TRIPLEREDSHIELD1 || thing->type == MT_TRIPLEREDSHIELD2 || thing->type == MT_TRIPLEREDSHIELD3
|| thing->type == MT_BANANAITEM || thing->type == MT_BANANASHIELD
|| thing->type == MT_TRIPLEBANANASHIELD1 || thing->type == MT_TRIPLEBANANASHIELD2 || thing->type == MT_TRIPLEBANANASHIELD3
)
|| thing->type == MT_FIREBALL)
{
// Other Item Damage
if (thing->eflags & MFE_VERTICALFLIP)
@ -769,7 +769,8 @@ static boolean PIT_CheckThing(mobj_t *thing)
return true; // This doesn't collide with anything, but we want it to effect the player anyway.
}
else if (tmthing->type == MT_BANANASHIELD || tmthing->type == MT_BANANAITEM
|| tmthing->type == MT_TRIPLEBANANASHIELD1 || tmthing->type == MT_TRIPLEBANANASHIELD2 || tmthing->type == MT_TRIPLEBANANASHIELD3)
|| tmthing->type == MT_TRIPLEBANANASHIELD1 || tmthing->type == MT_TRIPLEBANANASHIELD2 || tmthing->type == MT_TRIPLEBANANASHIELD3
|| tmthing->type == MT_FIREBALL)
{
// see if it went over / under
if (tmthing->z > thing->z + thing->height)
@ -788,6 +789,9 @@ static boolean PIT_CheckThing(mobj_t *thing)
&& (tmthing->target == thing->target)) // Don't hit each other if you have the same target
return true;
if (tmthing->type == MT_FIREBALL && thing->type == MT_FIREBALL)
return true; // Fireballs don't collide with eachother
if (thing->type == MT_PLAYER)
{
// Player Damage
@ -809,7 +813,8 @@ static boolean PIT_CheckThing(mobj_t *thing)
|| thing->type == MT_TRIPLEBANANASHIELD1 || thing->type == MT_TRIPLEBANANASHIELD2 || thing->type == MT_TRIPLEBANANASHIELD3
|| thing->type == MT_GREENITEM || thing->type == MT_REDITEM || thing->type == MT_REDITEMDUD
|| thing->type == MT_GREENSHIELD || thing->type == MT_TRIPLEGREENSHIELD1 || thing->type == MT_TRIPLEGREENSHIELD2 || thing->type == MT_TRIPLEGREENSHIELD3
|| thing->type == MT_REDSHIELD || thing->type == MT_TRIPLEREDSHIELD1 || thing->type == MT_TRIPLEREDSHIELD2 || thing->type == MT_TRIPLEREDSHIELD3)
|| thing->type == MT_REDSHIELD || thing->type == MT_TRIPLEREDSHIELD1 || thing->type == MT_TRIPLEREDSHIELD2 || thing->type == MT_TRIPLEREDSHIELD3
|| thing->type == MT_FIREBALL)
{
// Other Item Damage
if (thing->eflags & MFE_VERTICALFLIP)
@ -883,7 +888,7 @@ static boolean PIT_CheckThing(mobj_t *thing)
if (thing->type == MT_GREENITEM // When these items collide with the fake item, just the fake item is destroyed
|| thing->type == MT_REDITEM || thing->type == MT_REDITEMDUD
|| thing->type == MT_BOMBITEM
|| thing->type == MT_BANANAITEM)
|| thing->type == MT_BANANAITEM || thing->type == MT_FIREBALL)
{
// This Item Damage
if (tmthing->eflags & MFE_VERTICALFLIP)
@ -996,7 +1001,7 @@ static boolean PIT_CheckThing(mobj_t *thing)
|| thing->type == MT_TRIPLEBANANASHIELD1 || thing->type == MT_TRIPLEBANANASHIELD2 || thing->type == MT_TRIPLEBANANASHIELD3
|| thing->type == MT_BOMBSHIELD || thing->type == MT_BOMBITEM
|| thing->type == MT_BOMBEXPLOSION
|| thing->type == MT_SINK
|| thing->type == MT_SINK || thing->type == MT_FIREBALL
))
{
// see if it went over / under
@ -1032,7 +1037,8 @@ static boolean PIT_CheckThing(mobj_t *thing)
P_InstaThrust(thing, R_PointToAngle2(tmthing->x, tmthing->y, thing->x, thing->y)+ANGLE_90, 16*FRACUNIT);
}
else if (thing->type == MT_BANANASHIELD || thing->type == MT_BANANAITEM
|| thing->type == MT_TRIPLEBANANASHIELD1 || thing->type == MT_TRIPLEBANANASHIELD2 || thing->type == MT_TRIPLEBANANASHIELD3)
|| thing->type == MT_TRIPLEBANANASHIELD1 || thing->type == MT_TRIPLEBANANASHIELD2 || thing->type == MT_TRIPLEBANANASHIELD3
|| thing->type == MT_FIREBALL)
{
if ((thing->target == tmthing) && (thing->threshold > 0))
return true;

View file

@ -1693,6 +1693,17 @@ void P_XYMovement(mobj_t *mo)
if (CheckForBustableBlocks && mo->flags & MF_PUSHABLE)
P_PushableCheckBustables(mo);
//{ SRB2kart - Fireball
if (mo->type == MT_FIREBALL)
{
mo->health--;
if (mo->health == 0)
{
S_StartSound(mo, mo->info->deathsound);
P_SetMobjState(mo, mo->info->deathstate);
}
}
//}
if (!P_TryMove(mo, mo->x + xmove, mo->y + ymove, true) && !(mo->eflags & MFE_SPRUNG))
{
// blocked move
@ -1721,7 +1732,7 @@ void P_XYMovement(mobj_t *mo)
P_BounceMove(mo);
xmove = ymove = 0;
//S_StartSound(mo, mo->info->activesound);
//{ SRB2kart - Shell and fireball
//{ SRB2kart - Green Shell, Fireball
if (mo->type == MT_GREENITEM)
{
if (mo->health > 1)
@ -1741,15 +1752,7 @@ void P_XYMovement(mobj_t *mo)
}
}
if (mo->type == MT_FIREBALL)
{
S_StartSound(mo, mo->info->attacksound);
mo->health--;
if (mo->health <= 0)
{
S_StartSound(mo, mo->info->deathsound);
P_SetMobjState(mo, mo->info->deathstate);
}
}
else
S_StartSound(mo, mo->info->activesound);
//}
@ -1822,7 +1825,7 @@ void P_XYMovement(mobj_t *mo)
// draw damage on wall
//SPLAT TEST ----------------------------------------------------------
#ifdef WALLSPLATS
if (blockingline && mo->type != MT_REDRING && mo->type != MT_FIREBALL
if (blockingline && mo->type != MT_REDRING //&& mo->type != MT_FIREBALL
&& !(mo->flags2 & (MF2_AUTOMATIC|MF2_RAILRING|MF2_BOUNCERING|MF2_EXPLOSION|MF2_SCATTER)))
// set by last P_TryMove() that failed
{
@ -1958,7 +1961,7 @@ void P_XYMovement(mobj_t *mo)
#endif
//{ SRB2kart stuff
if (mo->type == MT_GREENITEM || mo->type == MT_REDITEMDUD || mo->type == MT_REDITEM) //(mo->type == MT_REDITEM && !mo->tracer))
if (mo->type == MT_GREENITEM || mo->type == MT_REDITEMDUD || mo->type == MT_REDITEM || mo->type == MT_FIREBALL) //(mo->type == MT_REDITEM && !mo->tracer))
return;
if (mo->player && mo->player->kartstuff[k_spinouttimer] && mo->player->speed <= mo->player->normalspeed/4)
@ -2307,22 +2310,11 @@ static boolean P_ZMovement(mobj_t *mo)
case MT_FLINGEMERALD:
// SRB2kart stuff that should die in pits
case MT_RANDOMITEM:
case MT_BANANASHIELD:
case MT_TRIPLEBANANASHIELD1:
case MT_TRIPLEBANANASHIELD2:
case MT_TRIPLEBANANASHIELD3:
case MT_BANANAITEM:
case MT_GREENSHIELD:
case MT_TRIPLEGREENSHIELD1:
case MT_TRIPLEGREENSHIELD2:
case MT_TRIPLEGREENSHIELD3:
case MT_GREENITEM:
case MT_REDSHIELD:
case MT_TRIPLEREDSHIELD1:
case MT_TRIPLEREDSHIELD2:
case MT_TRIPLEREDSHIELD3:
case MT_REDITEM:
case MT_REDITEMDUD:
case MT_FIREBALL:
// Remove flinged stuff from death pits.
if (P_CheckDeathPitCollide(mo))
{
@ -6578,7 +6570,8 @@ void P_MobjThinker(mobj_t *mobj)
}
else if ((mobj->health > 0
&& (!mobj->target || !mobj->target->player || !mobj->target->player->mo || mobj->target->player->health <= 0 || mobj->target->player->spectator))
|| (mobj->health <= 0 && mobj->z <= mobj->floorz)) // When in death state
|| (mobj->health <= 0 && mobj->z <= mobj->floorz)
|| P_CheckDeathPitCollide(mobj)) // When in death state
{
P_RemoveMobj(mobj);
return;
@ -6786,7 +6779,7 @@ void P_MobjThinker(mobj_t *mobj)
P_PushableThinker(mobj);
// Extinguish fire objects in water. (Yes, it's extraordinarily rare to have a pushable flame object, but Brak uses such a case.)
if (mobj->flags & MF_FIRE && mobj->type != MT_PUMA && mobj->type != MT_FIREBALL
if (mobj->flags & MF_FIRE && mobj->type != MT_PUMA //&& mobj->type != MT_FIREBALL
&& (mobj->eflags & (MFE_UNDERWATER|MFE_TOUCHWATER)))
{
P_KillMobj(mobj, NULL, NULL);
@ -7472,6 +7465,10 @@ void P_MobjThinker(mobj_t *mobj)
if (mobj->threshold > 0)
mobj->threshold--;
break;
case MT_FIREBALL:
if (mobj->threshold > 0)
mobj->threshold--;
break;
case MT_SINK:
if (mobj->z <= mobj->floorz)
{
@ -7599,7 +7596,7 @@ void P_MobjThinker(mobj_t *mobj)
P_MobjCheckWater(mobj);
// Extinguish fire objects in water
if (mobj->flags & MF_FIRE && mobj->type != MT_PUMA && mobj->type != MT_FIREBALL
if (mobj->flags & MF_FIRE && mobj->type != MT_PUMA //&& mobj->type != MT_FIREBALL
&& (mobj->eflags & (MFE_UNDERWATER|MFE_TOUCHWATER)))
{
P_KillMobj(mobj, NULL, NULL);