mirror of
https://git.do.srb2.org/KartKrew/Kart-Public.git
synced 2025-02-20 19:02:37 +00:00
Fireballs work, added to roulette.
Removed [k_fireballtimer] since it is not going to be used.
This commit is contained in:
parent
e72b2921fb
commit
2972dc9b67
8 changed files with 158 additions and 85 deletions
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
34
src/info.c
34
src/info.c
|
@ -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
|
||||
},
|
||||
|
||||
|
|
|
@ -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,
|
||||
|
|
118
src/k_kart.c
118
src/k_kart.c
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
18
src/p_map.c
18
src/p_map.c
|
@ -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;
|
||||
|
|
49
src/p_mobj.c
49
src/p_mobj.c
|
@ -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);
|
||||
|
|
Loading…
Reference in a new issue