mirror of
https://git.do.srb2.org/KartKrew/Kart-Public.git
synced 2025-02-20 19:02:37 +00:00
Ghost sink "shield"
Sink shield that makes it double-press to use, gives the trailing item slowdown, and shows other people that you have it, but doesn't have any collision
This commit is contained in:
parent
b84e9a4133
commit
001d46873d
6 changed files with 57 additions and 5 deletions
|
@ -6481,6 +6481,7 @@ static const char *const STATE_LIST[] = { // array length left dynamic for sanit
|
|||
|
||||
// The legend
|
||||
"S_SINK",
|
||||
"S_SINK_SHIELD",
|
||||
"S_SINKTRAIL1",
|
||||
"S_SINKTRAIL2",
|
||||
"S_SINKTRAIL3",
|
||||
|
@ -7249,6 +7250,7 @@ static const char *const MOBJTYPE_LIST[] = { // array length left dynamic for s
|
|||
"MT_THUNDERSHIELD", // Thunder Shield stuff
|
||||
|
||||
"MT_SINK", // Kitchen Sink Stuff
|
||||
"MT_SINK_SHIELD",
|
||||
"MT_SINKTRAIL",
|
||||
|
||||
"MT_BATTLEBUMPER", // Battle Mode bumper
|
||||
|
|
36
src/info.c
36
src/info.c
|
@ -2795,10 +2795,11 @@ state_t states[NUMSTATES] =
|
|||
{SPR_THNS, 10, 2, {NULL}, 0, 0, S_THUNDERSHIELD24}, // S_THUNDERSHIELD23
|
||||
{SPR_THNS, 11, 2, {NULL}, 0, 0, S_THUNDERSHIELD1}, // S_THUNDERSHIELD24
|
||||
|
||||
{SPR_SINK, 0, 4, {A_SmokeTrailer}, MT_SINKTRAIL, 0, S_SINK}, // S_SINK
|
||||
{SPR_SITR, 0, 1, {NULL}, 0, 0, S_SINKTRAIL2}, // S_SINKTRAIL1
|
||||
{SPR_SITR, 1, 5, {NULL}, 0, 0, S_SINKTRAIL3}, // S_SINKTRAIL2
|
||||
{SPR_SITR, 2, 3, {NULL}, 0, 0, S_NULL}, // S_SINKTRAIL3
|
||||
{SPR_SINK, 0, 4, {A_SmokeTrailer}, MT_SINKTRAIL, 0, S_SINK}, // S_SINK
|
||||
{SPR_SINK, 0|FF_TRANS80|FF_FULLBRIGHT, -1, {NULL}, 0, 0, S_SINK_SHIELD}, // S_SINK_SHIELD
|
||||
{SPR_SITR, 0, 1, {NULL}, 0, 0, S_SINKTRAIL2}, // S_SINKTRAIL1
|
||||
{SPR_SITR, 1, 5, {NULL}, 0, 0, S_SINKTRAIL3}, // S_SINKTRAIL2
|
||||
{SPR_SITR, 2, 3, {NULL}, 0, 0, S_NULL}, // S_SINKTRAIL3
|
||||
|
||||
{SPR_KBLN, FF_FULLBRIGHT, -1, {NULL}, 0, 0, S_BATTLEBUMPER1}, // S_BATTLEBUMPER1
|
||||
{SPR_KBLN, FF_FULLBRIGHT|1, -1, {NULL}, 0, 0, S_BATTLEBUMPER2}, // S_BATTLEBUMPER2
|
||||
|
@ -15199,6 +15200,33 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
|
|||
S_NULL // raisestate
|
||||
},
|
||||
|
||||
{ // MT_SINK_SHIELD
|
||||
-1, // doomednum
|
||||
S_SINK_SHIELD, // spawnstate
|
||||
1000, // spawnhealth
|
||||
S_NULL, // seestate
|
||||
sfx_None, // seesound
|
||||
8, // reactiontime
|
||||
sfx_None, // attacksound
|
||||
S_NULL, // painstate
|
||||
100, // painchance
|
||||
sfx_None, // painsound
|
||||
S_NULL, // meleestate
|
||||
S_NULL, // missilestate
|
||||
S_NULL, // deathstate
|
||||
S_NULL, // xdeathstate
|
||||
sfx_None, // deathsound
|
||||
0, // speed
|
||||
16*FRACUNIT, // radius
|
||||
24*FRACUNIT, // height
|
||||
0, // display offset
|
||||
100, // mass
|
||||
1, // damage
|
||||
sfx_None, // activesound
|
||||
MF_NOGRAVITY|MF_SCENERY, // flags
|
||||
S_NULL // raisestate
|
||||
},
|
||||
|
||||
{ // MT_SINKTRAIL
|
||||
-1, // doomednum
|
||||
S_SINKTRAIL1, // spawnstate
|
||||
|
|
|
@ -3326,6 +3326,7 @@ typedef enum state
|
|||
|
||||
// The legend
|
||||
S_SINK,
|
||||
S_SINK_SHIELD,
|
||||
S_SINKTRAIL1,
|
||||
S_SINKTRAIL2,
|
||||
S_SINKTRAIL3,
|
||||
|
@ -4111,6 +4112,7 @@ typedef enum mobj_type
|
|||
MT_THUNDERSHIELD, // Thunder Shield stuff
|
||||
|
||||
MT_SINK, // Kitchen Sink Stuff
|
||||
MT_SINK_SHIELD,
|
||||
MT_SINKTRAIL,
|
||||
|
||||
MT_BATTLEBUMPER, // Battle Mode bumpers
|
||||
|
|
18
src/k_kart.c
18
src/k_kart.c
|
@ -2986,6 +2986,7 @@ static void K_MoveHeldObjects(player_t *player)
|
|||
case MT_BANANA_SHIELD: // Kart trailing items
|
||||
case MT_SSMINE_SHIELD:
|
||||
case MT_FAKESHIELD:
|
||||
case MT_SINK_SHIELD:
|
||||
{
|
||||
mobj_t *cur = player->mo->hnext;
|
||||
mobj_t *targ = player->mo;
|
||||
|
@ -4239,11 +4240,28 @@ void K_MoveKartPlayer(player_t *player, boolean onground)
|
|||
break;
|
||||
case KITEM_KITCHENSINK:
|
||||
if (ATTACK_IS_DOWN && !HOLDING_ITEM && NO_HYUDORO)
|
||||
{
|
||||
mobj_t *mo;
|
||||
player->kartstuff[k_itemheld] = 1;
|
||||
S_StartSound(player->mo, sfx_s254);
|
||||
mo = P_SpawnMobj(player->mo->x, player->mo->y, player->mo->z, MT_SINK_SHIELD);
|
||||
if (mo)
|
||||
{
|
||||
mo->flags |= MF_NOCLIPTHING;
|
||||
mo->threshold = 10;
|
||||
mo->movecount = 1;
|
||||
mo->movedir = 1;
|
||||
P_SetTarget(&mo->target, player->mo);
|
||||
P_SetTarget(&player->mo->hnext, mo);
|
||||
}
|
||||
}
|
||||
else if (ATTACK_IS_DOWN && HOLDING_ITEM && player->kartstuff[k_itemheld]) // Sink thrown
|
||||
{
|
||||
K_ThrowKartItem(player, false, MT_SINK, 1, true);
|
||||
K_PlayTauntSound(player->mo);
|
||||
player->kartstuff[k_itemamount]--;
|
||||
player->kartstuff[k_itemheld] = 0;
|
||||
K_CleanHnextList(player->mo);
|
||||
}
|
||||
break;
|
||||
case KITEM_SAD:
|
||||
|
|
|
@ -2219,7 +2219,8 @@ void P_KillMobj(mobj_t *target, mobj_t *inflictor, mobj_t *source)
|
|||
if (target->target->player->kartstuff[k_itemheld])
|
||||
{
|
||||
if ((target->type == MT_BANANA_SHIELD && target->target->player->kartstuff[k_itemtype] == KITEM_BANANA) // trail items
|
||||
|| (target->type == MT_SSMINE_SHIELD && target->target->player->kartstuff[k_itemtype] == KITEM_MINE))
|
||||
|| (target->type == MT_SSMINE_SHIELD && target->target->player->kartstuff[k_itemtype] == KITEM_MINE)
|
||||
|| (target->type == MT_SINK_SHIELD && target->target->player->kartstuff[k_itemtype] == KITEM_KITCHENSINK))
|
||||
{
|
||||
if (target->movedir != 0 && target->movedir < (UINT16)target->target->player->kartstuff[k_itemamount])
|
||||
{
|
||||
|
|
|
@ -6720,6 +6720,7 @@ void P_MobjThinker(mobj_t *mobj)
|
|||
case MT_BANANA_SHIELD:
|
||||
case MT_SSMINE_SHIELD:
|
||||
case MT_FAKESHIELD:
|
||||
case MT_SINK_SHIELD:
|
||||
/*if (mobj->health > 0 && mobj->target && mobj->target->player
|
||||
&& mobj->target->player->health > 0 && !mobj->target->player->spectator)
|
||||
{
|
||||
|
|
Loading…
Reference in a new issue