Fireball
This commit is contained in:
parent
144502729a
commit
64939816fb
|
@ -7322,13 +7322,9 @@ static const char *const STATE_LIST[] = { // array length left dynamic for sanit
|
||||||
"S_FIREFLOWER2",
|
"S_FIREFLOWER2",
|
||||||
"S_FIREFLOWER3",
|
"S_FIREFLOWER3",
|
||||||
"S_FIREFLOWER4",
|
"S_FIREFLOWER4",
|
||||||
"S_FIREBALL1",
|
"S_FIREBALL",
|
||||||
"S_FIREBALL2",
|
"S_FIREBALLTRAIL1",
|
||||||
"S_FIREBALL3",
|
"S_FIREBALLTRAIL2",
|
||||||
"S_FIREBALL4",
|
|
||||||
"S_FIREBALLEXP1",
|
|
||||||
"S_FIREBALLEXP2",
|
|
||||||
"S_FIREBALLEXP3",
|
|
||||||
"S_SHELL",
|
"S_SHELL",
|
||||||
"S_PUMA_START1",
|
"S_PUMA_START1",
|
||||||
"S_PUMA_START2",
|
"S_PUMA_START2",
|
||||||
|
@ -8317,6 +8313,7 @@ static const char *const MOBJTYPE_LIST[] = { // array length left dynamic for s
|
||||||
"MT_BLUEGOOMBA",
|
"MT_BLUEGOOMBA",
|
||||||
"MT_FIREFLOWER",
|
"MT_FIREFLOWER",
|
||||||
"MT_FIREBALL",
|
"MT_FIREBALL",
|
||||||
|
"MT_FIREBALLTRAIL",
|
||||||
"MT_SHELL",
|
"MT_SHELL",
|
||||||
"MT_PUMA",
|
"MT_PUMA",
|
||||||
"MT_PUMATRAIL",
|
"MT_PUMATRAIL",
|
||||||
|
|
57
src/info.c
57
src/info.c
|
@ -3527,13 +3527,9 @@ state_t states[NUMSTATES] =
|
||||||
{SPR_FFWR, 3, 3, {NULL}, 0, 0, S_FIREFLOWER1}, // S_FIREFLOWER4
|
{SPR_FFWR, 3, 3, {NULL}, 0, 0, S_FIREFLOWER1}, // S_FIREFLOWER4
|
||||||
|
|
||||||
// Thrown Mario Fireball
|
// Thrown Mario Fireball
|
||||||
{SPR_FBLL, FF_FULLBRIGHT, 3, {NULL}, 0, 0, S_FIREBALL2}, // S_FIREBALL1
|
{SPR_FBLL, FF_FULLBRIGHT, 1, {A_SpawnObjectRelative}, 0, MT_FIREBALLTRAIL, S_FIREBALL}, // S_FIREBALL
|
||||||
{SPR_FBLL, FF_FULLBRIGHT|1, 3, {NULL}, 0, 0, S_FIREBALL3}, // S_FIREBALL2
|
{SPR_FBLL, 1|FF_FULLBRIGHT|FF_TRANS50, 1, {A_SetScale}, FRACUNIT*3/4, 0, S_FIREBALLTRAIL2}, // S_FIREBALLTRAIL1
|
||||||
{SPR_FBLL, FF_FULLBRIGHT|2, 3, {NULL}, 0, 0, S_FIREBALL4}, // S_FIREBALL3
|
{SPR_FBLL, 1|FF_FULLBRIGHT|FF_TRANS50, 8, {A_SetScale}, FRACUNIT/6, 1, S_NULL}, // S_FIREBALLTRAIL2
|
||||||
{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
|
|
||||||
|
|
||||||
// Turtle Shell
|
// Turtle Shell
|
||||||
{SPR_SHLL, 0, -1, {NULL}, 0, 0, S_NULL}, // S_SHELL
|
{SPR_SHLL, 0, -1, {NULL}, 0, 0, S_NULL}, // S_SHELL
|
||||||
|
@ -18910,31 +18906,58 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
|
||||||
|
|
||||||
{ // MT_FIREBALL
|
{ // MT_FIREBALL
|
||||||
-1, // doomednum
|
-1, // doomednum
|
||||||
S_FIREBALL1, // spawnstate
|
S_FIREBALL, // spawnstate
|
||||||
1000, // spawnhealth
|
1000, // spawnhealth
|
||||||
S_FIREBALLEXP1, // seestate
|
S_NULL, // seestate
|
||||||
sfx_None, // seesound
|
sfx_fbll, // seesound
|
||||||
8, // reactiontime
|
8, // reactiontime
|
||||||
sfx_None, // attacksound
|
sfx_None, // attacksound
|
||||||
S_NULL, // painstate
|
S_NULL, // painstate
|
||||||
0, // painchance
|
0, // painchance
|
||||||
sfx_None, // painsound
|
sfx_None, // painsound
|
||||||
S_FIREBALLEXP1, // meleestate
|
S_NULL, // meleestate
|
||||||
S_FIREBALLEXP1, // missilestate
|
S_NULL, // missilestate
|
||||||
S_FIREBALLEXP1, // deathstate
|
S_NULL, // deathstate
|
||||||
S_FIREBALLEXP1, // xdeathstate
|
S_NULL, // xdeathstate
|
||||||
sfx_mario1, // deathsound
|
sfx_fblldi, // deathsound
|
||||||
10*FRACUNIT, // speed
|
40*FRACUNIT, // speed
|
||||||
4*FRACUNIT, // radius
|
4*FRACUNIT, // radius
|
||||||
8*FRACUNIT, // height
|
8*FRACUNIT, // height
|
||||||
0, // display offset
|
0, // display offset
|
||||||
DMG_FIRE, // mass
|
DMG_FIRE, // mass
|
||||||
1, // damage
|
1, // damage
|
||||||
sfx_None, // activesound
|
sfx_None, // activesound
|
||||||
MF_NOBLOCKMAP|MF_FIRE|MF_MISSILE, // flags
|
MF_FIRE|MF_BOUNCE|MF_MISSILE, // flags
|
||||||
S_NULL // raisestate
|
S_NULL // raisestate
|
||||||
},
|
},
|
||||||
|
|
||||||
|
{ // MT_FIREBALLTRAIL
|
||||||
|
-1, // doomednum
|
||||||
|
S_FIREBALLTRAIL1, // spawnstate
|
||||||
|
1000, // spawnhealth
|
||||||
|
S_NULL, // seestate
|
||||||
|
sfx_None, // seesound
|
||||||
|
8, // reactiontime
|
||||||
|
sfx_None, // attacksound
|
||||||
|
S_NULL, // painstate
|
||||||
|
0, // painchance
|
||||||
|
sfx_None, // painsound
|
||||||
|
S_NULL, // meleestate
|
||||||
|
S_NULL, // missilestate
|
||||||
|
S_NULL, // deathstate
|
||||||
|
S_NULL, // xdeathstate
|
||||||
|
sfx_None, // deathsound
|
||||||
|
0, // speed
|
||||||
|
16*FRACUNIT, // radius
|
||||||
|
16*FRACUNIT, // height
|
||||||
|
0, // display offset
|
||||||
|
0, // mass
|
||||||
|
1, // damage
|
||||||
|
sfx_None, // activesound
|
||||||
|
MF_NOBLOCKMAP|MF_NOGRAVITY|MF_NOCLIP|MF_RUNSPAWNFUNC, // flags
|
||||||
|
S_NULL // raisestate
|
||||||
|
},
|
||||||
|
|
||||||
{ // MT_SHELL
|
{ // MT_SHELL
|
||||||
1804, // doomednum
|
1804, // doomednum
|
||||||
S_SHELL, // spawnstate
|
S_SHELL, // spawnstate
|
||||||
|
|
11
src/info.h
11
src/info.h
|
@ -3637,13 +3637,9 @@ typedef enum state
|
||||||
S_FIREFLOWER2,
|
S_FIREFLOWER2,
|
||||||
S_FIREFLOWER3,
|
S_FIREFLOWER3,
|
||||||
S_FIREFLOWER4,
|
S_FIREFLOWER4,
|
||||||
S_FIREBALL1,
|
S_FIREBALL,
|
||||||
S_FIREBALL2,
|
S_FIREBALLTRAIL1,
|
||||||
S_FIREBALL3,
|
S_FIREBALLTRAIL2,
|
||||||
S_FIREBALL4,
|
|
||||||
S_FIREBALLEXP1,
|
|
||||||
S_FIREBALLEXP2,
|
|
||||||
S_FIREBALLEXP3,
|
|
||||||
S_SHELL,
|
S_SHELL,
|
||||||
S_PUMA_START1,
|
S_PUMA_START1,
|
||||||
S_PUMA_START2,
|
S_PUMA_START2,
|
||||||
|
@ -4654,6 +4650,7 @@ typedef enum mobj_type
|
||||||
MT_BLUEGOOMBA,
|
MT_BLUEGOOMBA,
|
||||||
MT_FIREFLOWER,
|
MT_FIREFLOWER,
|
||||||
MT_FIREBALL,
|
MT_FIREBALL,
|
||||||
|
MT_FIREBALLTRAIL,
|
||||||
MT_SHELL,
|
MT_SHELL,
|
||||||
MT_PUMA,
|
MT_PUMA,
|
||||||
MT_PUMATRAIL,
|
MT_PUMATRAIL,
|
||||||
|
|
|
@ -1301,6 +1301,11 @@ static boolean PIT_CheckThing(mobj_t *thing)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Fireball touched an enemy
|
||||||
|
// Don't bounce though, just despawn right there
|
||||||
|
if ((tmthing->type == MT_FIREBALL) && (thing->flags & MF_ENEMY))
|
||||||
|
P_KillMobj(tmthing, NULL, NULL, 0);
|
||||||
|
|
||||||
// damage / explode
|
// damage / explode
|
||||||
if (tmthing->flags & MF_ENEMY) // An actual ENEMY! (Like the deton, for example)
|
if (tmthing->flags & MF_ENEMY) // An actual ENEMY! (Like the deton, for example)
|
||||||
P_DamageMobj(thing, tmthing, tmthing, 1, 0);
|
P_DamageMobj(thing, tmthing, tmthing, 1, 0);
|
||||||
|
|
|
@ -8690,6 +8690,13 @@ void P_MobjThinker(mobj_t *mobj)
|
||||||
case MT_KOOPA:
|
case MT_KOOPA:
|
||||||
P_KoopaThinker(mobj);
|
P_KoopaThinker(mobj);
|
||||||
break;
|
break;
|
||||||
|
case MT_FIREBALL:
|
||||||
|
if (P_AproxDistance(mobj->momx, mobj->momy) <= 16*FRACUNIT) // Once fireballs lose enough speed, kill them
|
||||||
|
{
|
||||||
|
P_KillMobj(mobj, NULL, NULL, 0);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
break;
|
||||||
case MT_REDRING:
|
case MT_REDRING:
|
||||||
if (((mobj->z < mobj->floorz) || (mobj->z + mobj->height > mobj->ceilingz))
|
if (((mobj->z < mobj->floorz) || (mobj->z + mobj->height > mobj->ceilingz))
|
||||||
&& mobj->flags & MF_MISSILE)
|
&& mobj->flags & MF_MISSILE)
|
||||||
|
|
|
@ -3993,12 +3993,12 @@ static void P_DoFiring(player_t *player, ticcmd_t *cmd)
|
||||||
if (player->pflags & PF_ATTACKDOWN || player->climbing || (G_TagGametype() && !(player->pflags & PF_TAGIT)))
|
if (player->pflags & PF_ATTACKDOWN || player->climbing || (G_TagGametype() && !(player->pflags & PF_TAGIT)))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if ((player->powers[pw_shield] & SH_STACK) == SH_FIREFLOWER)
|
if (((player->powers[pw_shield] & SH_STACK) == SH_FIREFLOWER) && !(player->weapondelay))
|
||||||
{
|
{
|
||||||
player->pflags |= PF_ATTACKDOWN;
|
player->pflags |= PF_ATTACKDOWN;
|
||||||
mo = P_SpawnPlayerMissile(player->mo, MT_FIREBALL, 0);
|
mo = P_SpawnPlayerMissile(player->mo, MT_FIREBALL, 0);
|
||||||
P_InstaThrust(mo, player->mo->angle, ((mo->info->speed>>FRACBITS)*player->mo->scale) + player->speed);
|
P_InstaThrust(mo, player->mo->angle, ((mo->info->speed>>FRACBITS)*player->mo->scale) + player->speed);
|
||||||
S_StartSound(player->mo, sfx_mario7);
|
P_SetWeaponDelay(player, TICRATE); // Short delay between fireballs so you can't spam them everywhere
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -277,6 +277,8 @@ sfxinfo_t S_sfx[NUMSFX] =
|
||||||
{"mario9", true, 120, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Emerging power-up"},
|
{"mario9", true, 120, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Emerging power-up"},
|
||||||
{"marioa", true, 192, 0, -1, NULL, 0, -1, -1, LUMPERROR, "One-up"},
|
{"marioa", true, 192, 0, -1, NULL, 0, -1, -1, LUMPERROR, "One-up"},
|
||||||
{"thwomp", true, 127, 8, -1, NULL, 0, -1, -1, LUMPERROR, "Thwomp"},
|
{"thwomp", true, 127, 8, -1, NULL, 0, -1, -1, LUMPERROR, "Thwomp"},
|
||||||
|
{"fbll", false, 32, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Fireball throw"},
|
||||||
|
{"fblldi", false, 60, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Fireball hit"},
|
||||||
|
|
||||||
// Black Eggman
|
// Black Eggman
|
||||||
{"bebomb", false, 64, 64, -1, NULL, 0, -1, -1, LUMPERROR, "Big explosion"},
|
{"bebomb", false, 64, 64, -1, NULL, 0, -1, -1, LUMPERROR, "Big explosion"},
|
||||||
|
|
|
@ -326,6 +326,8 @@ typedef enum
|
||||||
sfx_mario9,
|
sfx_mario9,
|
||||||
sfx_marioa,
|
sfx_marioa,
|
||||||
sfx_thwomp,
|
sfx_thwomp,
|
||||||
|
sfx_fbll,
|
||||||
|
sfx_fblldi,
|
||||||
|
|
||||||
// Black Eggman
|
// Black Eggman
|
||||||
sfx_bebomb,
|
sfx_bebomb,
|
||||||
|
|
Loading…
Reference in New Issue