Misc tweaks just about everywhere
- More Jawz states for later - Jawz orbit their user in the right direction now. - Banana trails made closer to each other - wheels.lua hardcoded - All held items take a double press, for consistency. - Fixed Karma Items not being able to be collected by invincibility or hyudoro users
This commit is contained in:
parent
e2f60d56d2
commit
612b2a151f
|
@ -303,7 +303,7 @@ typedef enum
|
||||||
// Item held stuff
|
// Item held stuff
|
||||||
k_itemtype, // KITEM_ constant for item number
|
k_itemtype, // KITEM_ constant for item number
|
||||||
k_itemamount, // Amount of said item
|
k_itemamount, // Amount of said item
|
||||||
k_itemheld, // Are you holding an item? 1 = normal hold, 2 = rotation hold
|
k_itemheld, // Are you holding an item?
|
||||||
|
|
||||||
// Some items use timers for their duration or effects
|
// Some items use timers for their duration or effects
|
||||||
k_attractiontimer, // Duration of Lightning Shield's item-break and item box pull
|
k_attractiontimer, // Duration of Lightning Shield's item-break and item box pull
|
||||||
|
|
|
@ -6325,8 +6325,24 @@ static const char *const STATE_LIST[] = { // array length left dynamic for sanit
|
||||||
"S_DEADGREEN",
|
"S_DEADGREEN",
|
||||||
//}
|
//}
|
||||||
//{ Jawz
|
//{ Jawz
|
||||||
"S_JAWZ",
|
"S_JAWZ1",
|
||||||
"S_JAWZ_SHIELD",
|
"S_JAWZ2",
|
||||||
|
"S_JAWZ3",
|
||||||
|
"S_JAWZ4",
|
||||||
|
"S_JAWZ5",
|
||||||
|
"S_JAWZ6",
|
||||||
|
"S_JAWZ_DUD1",
|
||||||
|
"S_JAWZ_DUD2",
|
||||||
|
"S_JAWZ_DUD3",
|
||||||
|
"S_JAWZ_DUD4",
|
||||||
|
"S_JAWZ_DUD5",
|
||||||
|
"S_JAWZ_DUD6",
|
||||||
|
"S_JAWZ_SHIELD1",
|
||||||
|
"S_JAWZ_SHIELD2",
|
||||||
|
"S_JAWZ_SHIELD3",
|
||||||
|
"S_JAWZ_SHIELD4",
|
||||||
|
"S_JAWZ_SHIELD5",
|
||||||
|
"S_JAWZ_SHIELD6",
|
||||||
"S_JAWZ_DEAD",
|
"S_JAWZ_DEAD",
|
||||||
//}
|
//}
|
||||||
|
|
||||||
|
@ -6583,7 +6599,8 @@ static const char *const STATE_LIST[] = { // array length left dynamic for sanit
|
||||||
|
|
||||||
"S_PLAYERBOMB", // Player bomb overlay
|
"S_PLAYERBOMB", // Player bomb overlay
|
||||||
"S_PLAYERITEM", // Player item overlay
|
"S_PLAYERITEM", // Player item overlay
|
||||||
"S_PLAYERBOMB_WHEEL",
|
|
||||||
|
"S_KARMAWHEEL", // Karma player wheels
|
||||||
|
|
||||||
#ifdef SEENAMES
|
#ifdef SEENAMES
|
||||||
"S_NAMECHECK",
|
"S_NAMECHECK",
|
||||||
|
@ -7212,7 +7229,9 @@ static const char *const MOBJTYPE_LIST[] = { // array length left dynamic for s
|
||||||
"MT_FIREDITEM",
|
"MT_FIREDITEM",
|
||||||
|
|
||||||
"MT_PLAYERARROW",
|
"MT_PLAYERARROW",
|
||||||
|
|
||||||
"MT_KARMAHITBOX",
|
"MT_KARMAHITBOX",
|
||||||
|
"MT_KARMAWHEEL",
|
||||||
|
|
||||||
#ifdef SEENAMES
|
#ifdef SEENAMES
|
||||||
"MT_NAMECHECK",
|
"MT_NAMECHECK",
|
||||||
|
|
96
src/info.c
96
src/info.c
|
@ -2638,27 +2638,43 @@ state_t states[NUMSTATES] =
|
||||||
{SPR_BANA, 0, -1, {NULL}, 0, 0, S_NULL}, // S_BANANA
|
{SPR_BANA, 0, -1, {NULL}, 0, 0, S_NULL}, // S_BANANA
|
||||||
{SPR_BANA, 1, 175, {NULL}, 0, 0, S_NULL}, // S_BANANA_DEAD
|
{SPR_BANA, 1, 175, {NULL}, 0, 0, S_NULL}, // S_BANANA_DEAD
|
||||||
|
|
||||||
{SPR_GSHE, 0, 1, {NULL}, 0, 0, S_GREENSHIELD2}, // S_GREENSHIELD1
|
{SPR_GSHE, 0, 1, {NULL}, 0, 0, S_GREENSHIELD2}, // S_GREENSHIELD1
|
||||||
{SPR_GSHE, 1, 1, {NULL}, 0, 0, S_GREENSHIELD3}, // S_GREENSHIELD2
|
{SPR_GSHE, 1, 1, {NULL}, 0, 0, S_GREENSHIELD3}, // S_GREENSHIELD2
|
||||||
{SPR_GSHE, 2, 1, {NULL}, 0, 0, S_GREENSHIELD4}, // S_GREENSHIELD3
|
{SPR_GSHE, 2, 1, {NULL}, 0, 0, S_GREENSHIELD4}, // S_GREENSHIELD3
|
||||||
{SPR_GSHE, 3, 1, {NULL}, 0, 0, S_GREENSHIELD5}, // S_GREENSHIELD4
|
{SPR_GSHE, 3, 1, {NULL}, 0, 0, S_GREENSHIELD5}, // S_GREENSHIELD4
|
||||||
{SPR_GSHE, 4, 1, {NULL}, 0, 0, S_GREENSHIELD6}, // S_GREENSHIELD5
|
{SPR_GSHE, 4, 1, {NULL}, 0, 0, S_GREENSHIELD6}, // S_GREENSHIELD5
|
||||||
{SPR_GSHE, 5, 1, {NULL}, 0, 0, S_GREENSHIELD7}, // S_GREENSHIELD6
|
{SPR_GSHE, 5, 1, {NULL}, 0, 0, S_GREENSHIELD7}, // S_GREENSHIELD6
|
||||||
{SPR_GSHE, 6, 1, {NULL}, 0, 0, S_GREENSHIELD8}, // S_GREENSHIELD7
|
{SPR_GSHE, 6, 1, {NULL}, 0, 0, S_GREENSHIELD8}, // S_GREENSHIELD7
|
||||||
{SPR_GSHE, 7, 1, {NULL}, 0, 0, S_GREENSHIELD1}, // S_GREENSHIELD8
|
{SPR_GSHE, 7, 1, {NULL}, 0, 0, S_GREENSHIELD1}, // S_GREENSHIELD8
|
||||||
{SPR_GSHE, 0, 1, {NULL}, 0, 0, S_GREENITEM2}, // S_GREENITEM1
|
{SPR_GSHE, 0, 1, {NULL}, 0, 0, S_GREENITEM2}, // S_GREENITEM1
|
||||||
{SPR_GSHE, 1, 1, {NULL}, 0, 0, S_GREENITEM3}, // S_GREENITEM2
|
{SPR_GSHE, 1, 1, {NULL}, 0, 0, S_GREENITEM3}, // S_GREENITEM2
|
||||||
{SPR_GSHE, 2, 1, {NULL}, 0, 0, S_GREENITEM4}, // S_GREENITEM3
|
{SPR_GSHE, 2, 1, {NULL}, 0, 0, S_GREENITEM4}, // S_GREENITEM3
|
||||||
{SPR_GSHE, 3, 1, {NULL}, 0, 0, S_GREENITEM5}, // S_GREENITEM4
|
{SPR_GSHE, 3, 1, {NULL}, 0, 0, S_GREENITEM5}, // S_GREENITEM4
|
||||||
{SPR_GSHE, 4, 1, {NULL}, 0, 0, S_GREENITEM6}, // S_GREENITEM5
|
{SPR_GSHE, 4, 1, {NULL}, 0, 0, S_GREENITEM6}, // S_GREENITEM5
|
||||||
{SPR_GSHE, 5, 1, {NULL}, 0, 0, S_GREENITEM7}, // S_GREENITEM6
|
{SPR_GSHE, 5, 1, {NULL}, 0, 0, S_GREENITEM7}, // S_GREENITEM6
|
||||||
{SPR_GSHE, 6, 1, {NULL}, 0, 0, S_GREENITEM8}, // S_GREENITEM7
|
{SPR_GSHE, 6, 1, {NULL}, 0, 0, S_GREENITEM8}, // S_GREENITEM7
|
||||||
{SPR_GSHE, 7, 1, {NULL}, 0, 0, S_GREENITEM1}, // S_GREENITEM8
|
{SPR_GSHE, 7, 1, {NULL}, 0, 0, S_GREENITEM1}, // S_GREENITEM8
|
||||||
{SPR_GSHE, 8, 175, {NULL}, 0, 0, S_NULL}, // S_DEADGREEN
|
{SPR_GSHE, 8, 175, {NULL}, 0, 0, S_NULL}, // S_DEADGREEN
|
||||||
|
|
||||||
{SPR_JAWZ, 0, 1, {A_JawzChase}, 0, 0, S_JAWZ}, // S_JAWZ
|
{SPR_JAWZ, 0, 1, {A_JawzChase}, 0, 0, S_JAWZ2}, // S_JAWZ1
|
||||||
{SPR_JAWZ, 0, 1, {NULL}, 0, 0, S_JAWZ_SHIELD}, // S_JAWZ_SHIELD
|
{SPR_JAWZ, 3, 1, {A_JawzChase}, 0, 0, S_JAWZ3}, // S_JAWZ2
|
||||||
{SPR_JAWZ, 0, 1, {NULL}, 0, 0, S_NULL}, // S_JAWZ_DEAD
|
{SPR_JAWZ, 1, 1, {A_JawzChase}, 0, 0, S_JAWZ4}, // S_JAWZ3
|
||||||
|
{SPR_JAWZ, 3, 1, {A_JawzChase}, 0, 0, S_JAWZ5}, // S_JAWZ4
|
||||||
|
{SPR_JAWZ, 2, 1, {A_JawzChase}, 0, 0, S_JAWZ6}, // S_JAWZ5
|
||||||
|
{SPR_JAWZ, 3, 1, {A_JawzChase}, 0, 0, S_JAWZ1}, // S_JAWZ6
|
||||||
|
{SPR_JAWZ, 0, 1, {NULL}, 0, 0, S_JAWZ_DUD2}, // S_JAWZ_DUD1
|
||||||
|
{SPR_JAWZ, 3, 1, {NULL}, 0, 0, S_JAWZ_DUD3}, // S_JAWZ_DUD2
|
||||||
|
{SPR_JAWZ, 1, 1, {NULL}, 0, 0, S_JAWZ_DUD4}, // S_JAWZ_DUD3
|
||||||
|
{SPR_JAWZ, 3, 1, {NULL}, 0, 0, S_JAWZ_DUD5}, // S_JAWZ_DUD4
|
||||||
|
{SPR_JAWZ, 2, 1, {NULL}, 0, 0, S_JAWZ_DUD6}, // S_JAWZ_DUD5
|
||||||
|
{SPR_JAWZ, 3, 1, {NULL}, 0, 0, S_JAWZ_DUD1}, // S_JAWZ_DUD6
|
||||||
|
{SPR_JAWZ, 4, 1, {NULL}, 0, 0, S_JAWZ_SHIELD2}, // S_JAWZ_SHIELD1
|
||||||
|
{SPR_JAWZ, 7, 1, {NULL}, 0, 0, S_JAWZ_SHIELD3}, // S_JAWZ_SHIELD2
|
||||||
|
{SPR_JAWZ, 5, 1, {NULL}, 0, 0, S_JAWZ_SHIELD4}, // S_JAWZ_SHIELD3
|
||||||
|
{SPR_JAWZ, 7, 1, {NULL}, 0, 0, S_JAWZ_SHIELD5}, // S_JAWZ_SHIELD4
|
||||||
|
{SPR_JAWZ, 6, 1, {NULL}, 0, 0, S_JAWZ_SHIELD6}, // S_JAWZ_SHIELD5
|
||||||
|
{SPR_JAWZ, 7, 1, {NULL}, 0, 0, S_JAWZ_SHIELD1}, // S_JAWZ_SHIELD6
|
||||||
|
{SPR_JAWZ, 8, 175, {NULL}, 0, 0, S_NULL}, // S_JAWZ_DEAD
|
||||||
|
|
||||||
{SPR_FBLL, 13, 3, {NULL}, 0, 0, S_FIRETRAIL2}, // S_FIRETRAIL1
|
{SPR_FBLL, 13, 3, {NULL}, 0, 0, S_FIRETRAIL2}, // S_FIRETRAIL1
|
||||||
{SPR_FBLL, 14, 3, {NULL}, 0, 0, S_FIRETRAIL3}, // S_FIRETRAIL2
|
{SPR_FBLL, 14, 3, {NULL}, 0, 0, S_FIRETRAIL3}, // S_FIRETRAIL2
|
||||||
|
@ -2899,7 +2915,8 @@ state_t states[NUMSTATES] =
|
||||||
|
|
||||||
{SPR_PBOM, FF_ANIMATE, -1, {NULL}, 3, 3, S_NULL}, // S_PLAYERBOMB
|
{SPR_PBOM, FF_ANIMATE, -1, {NULL}, 3, 3, S_NULL}, // S_PLAYERBOMB
|
||||||
{SPR_RNDM, FF_ANIMATE, -1, {NULL}, 23, 3, S_NULL}, // S_PLAYERITEM
|
{SPR_RNDM, FF_ANIMATE, -1, {NULL}, 23, 3, S_NULL}, // S_PLAYERITEM
|
||||||
{SPR_PBOM, 4, -1, {NULL}, 0, 0, S_NULL}, // S_PLAYERWHEEL
|
|
||||||
|
{SPR_PBOM, 4, -1, {NULL}, 0, 0, S_NULL}, // S_KARMAWHEEL
|
||||||
|
|
||||||
#ifdef SEENAMES
|
#ifdef SEENAMES
|
||||||
{SPR_NULL, 0, 1, {NULL}, 0, 0, S_NULL}, // S_NAMECHECK
|
{SPR_NULL, 0, 1, {NULL}, 0, 0, S_NULL}, // S_NAMECHECK
|
||||||
|
@ -14483,7 +14500,7 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
|
||||||
|
|
||||||
{ // MT_BANANA
|
{ // MT_BANANA
|
||||||
-1, // doomednum
|
-1, // doomednum
|
||||||
S_BANANA, // spawnstate
|
S_BANANA, // spawnstate
|
||||||
2, // spawnhealth
|
2, // spawnhealth
|
||||||
S_NULL, // seestate
|
S_NULL, // seestate
|
||||||
sfx_tossed, // seesound
|
sfx_tossed, // seesound
|
||||||
|
@ -14494,7 +14511,7 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
|
||||||
sfx_None, // painsound
|
sfx_None, // painsound
|
||||||
S_NULL, // meleestate
|
S_NULL, // meleestate
|
||||||
S_NULL, // missilestate
|
S_NULL, // missilestate
|
||||||
S_BANANA_DEAD, // deathstate
|
S_BANANA_DEAD, // deathstate
|
||||||
S_NULL, // xdeathstate
|
S_NULL, // xdeathstate
|
||||||
sfx_None, // deathsound
|
sfx_None, // deathsound
|
||||||
0, // speed
|
0, // speed
|
||||||
|
@ -14618,7 +14635,7 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
|
||||||
|
|
||||||
{ // MT_JAWZ
|
{ // MT_JAWZ
|
||||||
-1, // doomednum
|
-1, // doomednum
|
||||||
S_JAWZ, // spawnstate
|
S_JAWZ1, // spawnstate
|
||||||
1, // spawnhealth
|
1, // spawnhealth
|
||||||
S_NULL, // seestate
|
S_NULL, // seestate
|
||||||
sfx_tossed, // seesound
|
sfx_tossed, // seesound
|
||||||
|
@ -14645,7 +14662,7 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
|
||||||
|
|
||||||
{ // MT_JAWZ_DUD
|
{ // MT_JAWZ_DUD
|
||||||
-1, // doomednum
|
-1, // doomednum
|
||||||
S_JAWZ, // spawnstate
|
S_JAWZ_DUD1, // spawnstate
|
||||||
1, // spawnhealth
|
1, // spawnhealth
|
||||||
S_NULL, // seestate
|
S_NULL, // seestate
|
||||||
sfx_tossed, // seesound
|
sfx_tossed, // seesound
|
||||||
|
@ -14672,7 +14689,7 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
|
||||||
|
|
||||||
{ // MT_JAWZ_SHIELD
|
{ // MT_JAWZ_SHIELD
|
||||||
-1, // doomednum
|
-1, // doomednum
|
||||||
S_JAWZ_SHIELD, // spawnstate
|
S_JAWZ_SHIELD1, // spawnstate
|
||||||
1000, // spawnhealth
|
1000, // spawnhealth
|
||||||
S_NULL, // seestate
|
S_NULL, // seestate
|
||||||
sfx_None, // seesound
|
sfx_None, // seesound
|
||||||
|
@ -16587,6 +16604,33 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
|
||||||
S_NULL // raisestate
|
S_NULL // raisestate
|
||||||
},
|
},
|
||||||
|
|
||||||
|
{ // MT_KARMAWHEEL
|
||||||
|
-1, // doomednum
|
||||||
|
S_KARMAWHEEL, // 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
|
||||||
|
8*FRACUNIT, // radius
|
||||||
|
16*FRACUNIT, // height
|
||||||
|
0, // display offset
|
||||||
|
0, // mass
|
||||||
|
0, // damage
|
||||||
|
sfx_None, // activesound
|
||||||
|
MF_NOTHINK|MF_NOCLIP|MF_NOCLIPHEIGHT, // flags
|
||||||
|
S_NULL // raisestate
|
||||||
|
},
|
||||||
|
|
||||||
// ============================================================================================================================//
|
// ============================================================================================================================//
|
||||||
|
|
||||||
#ifdef SEENAMES
|
#ifdef SEENAMES
|
||||||
|
|
25
src/info.h
25
src/info.h
|
@ -3167,8 +3167,24 @@ typedef enum state
|
||||||
S_DEADGREEN,
|
S_DEADGREEN,
|
||||||
//}
|
//}
|
||||||
//{ Jawz
|
//{ Jawz
|
||||||
S_JAWZ,
|
S_JAWZ1,
|
||||||
S_JAWZ_SHIELD,
|
S_JAWZ2,
|
||||||
|
S_JAWZ3,
|
||||||
|
S_JAWZ4,
|
||||||
|
S_JAWZ5,
|
||||||
|
S_JAWZ6,
|
||||||
|
S_JAWZ_DUD1,
|
||||||
|
S_JAWZ_DUD2,
|
||||||
|
S_JAWZ_DUD3,
|
||||||
|
S_JAWZ_DUD4,
|
||||||
|
S_JAWZ_DUD5,
|
||||||
|
S_JAWZ_DUD6,
|
||||||
|
S_JAWZ_SHIELD1,
|
||||||
|
S_JAWZ_SHIELD2,
|
||||||
|
S_JAWZ_SHIELD3,
|
||||||
|
S_JAWZ_SHIELD4,
|
||||||
|
S_JAWZ_SHIELD5,
|
||||||
|
S_JAWZ_SHIELD6,
|
||||||
S_JAWZ_DEAD,
|
S_JAWZ_DEAD,
|
||||||
//}
|
//}
|
||||||
|
|
||||||
|
@ -3425,7 +3441,8 @@ typedef enum state
|
||||||
|
|
||||||
S_PLAYERBOMB,
|
S_PLAYERBOMB,
|
||||||
S_PLAYERITEM,
|
S_PLAYERITEM,
|
||||||
S_PLAYERWHEEL,
|
|
||||||
|
S_KARMAWHEEL,
|
||||||
|
|
||||||
#ifdef SEENAMES
|
#ifdef SEENAMES
|
||||||
S_NAMECHECK,
|
S_NAMECHECK,
|
||||||
|
@ -4071,7 +4088,9 @@ typedef enum mobj_type
|
||||||
MT_FIREDITEM,
|
MT_FIREDITEM,
|
||||||
|
|
||||||
MT_PLAYERARROW,
|
MT_PLAYERARROW,
|
||||||
|
|
||||||
MT_KARMAHITBOX,
|
MT_KARMAHITBOX,
|
||||||
|
MT_KARMAWHEEL,
|
||||||
|
|
||||||
#ifdef SEENAMES
|
#ifdef SEENAMES
|
||||||
MT_NAMECHECK,
|
MT_NAMECHECK,
|
||||||
|
|
148
src/k_kart.c
148
src/k_kart.c
|
@ -2079,7 +2079,7 @@ static mobj_t *K_ThrowKartItem(player_t *player, boolean missile, mobjtype_t map
|
||||||
dir = defaultDir;
|
dir = defaultDir;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (missile)
|
if (missile) // Shootables
|
||||||
{
|
{
|
||||||
if (mapthing == MT_FIREBALL) // Messy
|
if (mapthing == MT_FIREBALL) // Messy
|
||||||
{
|
{
|
||||||
|
@ -2102,7 +2102,7 @@ static mobj_t *K_ThrowKartItem(player_t *player, boolean missile, mobjtype_t map
|
||||||
K_SpawnKartMissile(player->mo, mapthing, player->mo->angle + 0x06000000, 0, PROJSPEED);
|
K_SpawnKartMissile(player->mo, mapthing, player->mo->angle + 0x06000000, 0, PROJSPEED);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else // Shells
|
else
|
||||||
{
|
{
|
||||||
if (dir == -1)
|
if (dir == -1)
|
||||||
{
|
{
|
||||||
|
@ -2986,14 +2986,15 @@ void K_MoveKartPlayer(player_t *player, boolean onground)
|
||||||
|
|
||||||
if (player && player->mo && player->mo->health > 0 && !player->spectator && !player->exiting && player->kartstuff[k_spinouttimer] == 0)
|
if (player && player->mo && player->mo->health > 0 && !player->spectator && !player->exiting && player->kartstuff[k_spinouttimer] == 0)
|
||||||
{
|
{
|
||||||
// Eggman Monitor dropping
|
// First, the really specific, finicky items that function without the item being directly in your item slot.
|
||||||
if (!(cmd->buttons & BT_ATTACK) && player->kartstuff[k_eggmanheld])
|
// Eggman Monitor throwing
|
||||||
|
if (ATTACK_IS_DOWN && player->kartstuff[k_eggmanheld])
|
||||||
{
|
{
|
||||||
K_ThrowKartItem(player, false, MT_FAKEITEM, -1, false);
|
K_ThrowKartItem(player, false, MT_FAKEITEM, -1, false);
|
||||||
K_PlayTauntSound(player->mo);
|
K_PlayTauntSound(player->mo);
|
||||||
player->kartstuff[k_eggmanheld] = 0;
|
player->kartstuff[k_eggmanheld] = 0;
|
||||||
}
|
}
|
||||||
// Rocket Sneaker power
|
// Rocket Sneaker
|
||||||
else if (ATTACK_IS_DOWN && !HOLDING_ITEM && onground && NO_HYUDORO
|
else if (ATTACK_IS_DOWN && !HOLDING_ITEM && onground && NO_HYUDORO
|
||||||
&& player->kartstuff[k_rocketsneakertimer] > 1)
|
&& player->kartstuff[k_rocketsneakertimer] > 1)
|
||||||
{
|
{
|
||||||
|
@ -3052,13 +3053,8 @@ void K_MoveKartPlayer(player_t *player, boolean onground)
|
||||||
mobj_t *mo;
|
mobj_t *mo;
|
||||||
mobj_t *prev = NULL;
|
mobj_t *prev = NULL;
|
||||||
|
|
||||||
if (player->kartstuff[k_itemamount] > 1)
|
//K_PlayTauntSound(player->mo);
|
||||||
{
|
player->kartstuff[k_itemheld] = 1;
|
||||||
K_PlayTauntSound(player->mo);
|
|
||||||
player->kartstuff[k_itemheld] = 2;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
player->kartstuff[k_itemheld] = 1;
|
|
||||||
player->pflags |= PF_ATTACKDOWN;
|
player->pflags |= PF_ATTACKDOWN;
|
||||||
|
|
||||||
for (moloop = 0; moloop < player->kartstuff[k_itemamount]; moloop++)
|
for (moloop = 0; moloop < player->kartstuff[k_itemamount]; moloop++)
|
||||||
|
@ -3082,14 +3078,7 @@ void K_MoveKartPlayer(player_t *player, boolean onground)
|
||||||
prev = mo;
|
prev = mo;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (!(cmd->buttons & BT_ATTACK) && player->kartstuff[k_itemheld] == 1)
|
else if (ATTACK_IS_DOWN && player->kartstuff[k_itemheld]) // Banana x3 thrown
|
||||||
{
|
|
||||||
K_ThrowKartItem(player, false, MT_BANANA, -1, false);
|
|
||||||
K_PlayTauntSound(player->mo);
|
|
||||||
player->kartstuff[k_itemamount]--;
|
|
||||||
player->kartstuff[k_itemheld] = 0;
|
|
||||||
}
|
|
||||||
else if (ATTACK_IS_DOWN && player->kartstuff[k_itemheld] == 2) // Banana x3 thrown
|
|
||||||
{
|
{
|
||||||
K_ThrowKartItem(player, false, MT_BANANA, -1, false);
|
K_ThrowKartItem(player, false, MT_BANANA, -1, false);
|
||||||
K_PlayTauntSound(player->mo);
|
K_PlayTauntSound(player->mo);
|
||||||
|
@ -3126,61 +3115,34 @@ void K_MoveKartPlayer(player_t *player, boolean onground)
|
||||||
case KITEM_ORBINAUT:
|
case KITEM_ORBINAUT:
|
||||||
if (ATTACK_IS_DOWN && !HOLDING_ITEM && NO_HYUDORO)
|
if (ATTACK_IS_DOWN && !HOLDING_ITEM && NO_HYUDORO)
|
||||||
{
|
{
|
||||||
/*if (player->kartstuff[k_itemamount] == 1) // Orbinaut x1 held
|
INT32 moloop;
|
||||||
|
|
||||||
|
player->kartstuff[k_itemheld] = 1;
|
||||||
|
player->pflags |= PF_ATTACKDOWN;
|
||||||
|
//K_PlayTauntSound(player->mo);
|
||||||
|
S_StartSound(player->mo, sfx_s3k3a);
|
||||||
|
|
||||||
|
for (moloop = 0; moloop < player->kartstuff[k_itemamount]; moloop++)
|
||||||
{
|
{
|
||||||
angle_t newangle;
|
angle_t newangle;
|
||||||
fixed_t newx;
|
fixed_t newx;
|
||||||
fixed_t newy;
|
fixed_t newy;
|
||||||
mobj_t *mo;
|
mobj_t *mo;
|
||||||
player->kartstuff[k_itemheld] = 1;
|
|
||||||
player->pflags |= PF_ATTACKDOWN;
|
|
||||||
newangle = player->mo->angle;
|
newangle = player->mo->angle;
|
||||||
newx = player->mo->x + P_ReturnThrustX(player->mo, newangle + ANGLE_180, 64*FRACUNIT);
|
newx = player->mo->x + P_ReturnThrustX(player->mo, newangle + ANGLE_180, 64*FRACUNIT);
|
||||||
newy = player->mo->y + P_ReturnThrustY(player->mo, newangle + ANGLE_180, 64*FRACUNIT);
|
newy = player->mo->y + P_ReturnThrustY(player->mo, newangle + ANGLE_180, 64*FRACUNIT);
|
||||||
mo = P_SpawnMobj(newx, newy, player->mo->z, MT_GREENSHIELD);
|
mo = P_SpawnMobj(newx, newy, player->mo->z, MT_GREENSHIELD);
|
||||||
mo->threshold = 10;
|
|
||||||
if (mo)
|
if (mo)
|
||||||
P_SetTarget(&mo->target, player->mo);
|
|
||||||
}
|
|
||||||
else if (player->kartstuff[k_itemamount] > 1) // Orbinaut x3 held
|
|
||||||
{*/
|
|
||||||
INT32 moloop;
|
|
||||||
|
|
||||||
player->kartstuff[k_itemheld] = 2;
|
|
||||||
player->pflags |= PF_ATTACKDOWN;
|
|
||||||
//K_PlayTauntSound(player->mo);
|
|
||||||
S_StartSound(player->mo, sfx_s3k3a);
|
|
||||||
|
|
||||||
for (moloop = 0; moloop < player->kartstuff[k_itemamount]; moloop++)
|
|
||||||
{
|
{
|
||||||
angle_t newangle;
|
mo->threshold = 10;
|
||||||
fixed_t newx;
|
mo->lastlook = moloop+1;
|
||||||
fixed_t newy;
|
P_SetTarget(&mo->target, player->mo);
|
||||||
mobj_t *mo;
|
mo->angle = FixedAngle(((360/player->kartstuff[k_itemamount])*moloop)*FRACUNIT) + ANGLE_90;
|
||||||
|
|
||||||
newangle = player->mo->angle;
|
|
||||||
newx = player->mo->x + P_ReturnThrustX(player->mo, newangle + ANGLE_180, 64*FRACUNIT);
|
|
||||||
newy = player->mo->y + P_ReturnThrustY(player->mo, newangle + ANGLE_180, 64*FRACUNIT);
|
|
||||||
mo = P_SpawnMobj(newx, newy, player->mo->z, MT_GREENSHIELD);
|
|
||||||
if (mo)
|
|
||||||
{
|
|
||||||
mo->threshold = 10;
|
|
||||||
mo->lastlook = moloop+1;
|
|
||||||
P_SetTarget(&mo->target, player->mo);
|
|
||||||
mo->angle = FixedAngle(((360/player->kartstuff[k_itemamount])*moloop)*FRACUNIT);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
//}
|
}
|
||||||
}
|
}
|
||||||
else if (!(cmd->buttons & BT_ATTACK) && player->kartstuff[k_itemheld] == 1)
|
else if (ATTACK_IS_DOWN && player->kartstuff[k_itemheld]) // Orbinaut x3 thrown
|
||||||
{
|
|
||||||
player->kartstuff[k_itemamount]--;
|
|
||||||
player->kartstuff[k_itemheld] = 0;
|
|
||||||
|
|
||||||
K_ThrowKartItem(player, true, MT_GREENITEM, 1, false);
|
|
||||||
K_PlayTauntSound(player->mo);
|
|
||||||
}
|
|
||||||
else if (ATTACK_IS_DOWN && player->kartstuff[k_itemheld] == 2) // Orbinaut x3 thrown
|
|
||||||
{
|
{
|
||||||
K_ThrowKartItem(player, true, MT_GREENITEM, 1, false);
|
K_ThrowKartItem(player, true, MT_GREENITEM, 1, false);
|
||||||
K_PlayTauntSound(player->mo);
|
K_PlayTauntSound(player->mo);
|
||||||
|
@ -3194,63 +3156,34 @@ void K_MoveKartPlayer(player_t *player, boolean onground)
|
||||||
case KITEM_JAWZ:
|
case KITEM_JAWZ:
|
||||||
if (ATTACK_IS_DOWN && !HOLDING_ITEM && NO_HYUDORO)
|
if (ATTACK_IS_DOWN && !HOLDING_ITEM && NO_HYUDORO)
|
||||||
{
|
{
|
||||||
/*if (player->kartstuff[k_itemamount] == 1) // Jawz x1 held
|
INT32 moloop;
|
||||||
|
|
||||||
|
player->kartstuff[k_itemheld] = 1;
|
||||||
|
player->pflags |= PF_ATTACKDOWN;
|
||||||
|
//K_PlayTauntSound(player->mo);
|
||||||
|
S_StartSound(player->mo, sfx_s3k3a);
|
||||||
|
|
||||||
|
for (moloop = 0; moloop < player->kartstuff[k_itemamount]; moloop++)
|
||||||
{
|
{
|
||||||
angle_t newangle;
|
angle_t newangle;
|
||||||
fixed_t newx;
|
fixed_t newx;
|
||||||
fixed_t newy;
|
fixed_t newy;
|
||||||
mobj_t *mo;
|
mobj_t *mo;
|
||||||
player->kartstuff[k_itemheld] = 1;
|
|
||||||
player->pflags |= PF_ATTACKDOWN;
|
|
||||||
newangle = player->mo->angle;
|
newangle = player->mo->angle;
|
||||||
newx = player->mo->x + P_ReturnThrustX(player->mo, newangle + ANGLE_180, 64*FRACUNIT);
|
newx = player->mo->x + P_ReturnThrustX(player->mo, newangle + ANGLE_180, 64*FRACUNIT);
|
||||||
newy = player->mo->y + P_ReturnThrustY(player->mo, newangle + ANGLE_180, 64*FRACUNIT);
|
newy = player->mo->y + P_ReturnThrustY(player->mo, newangle + ANGLE_180, 64*FRACUNIT);
|
||||||
mo = P_SpawnMobj(newx, newy, player->mo->z, MT_JAWZ_SHIELD);
|
mo = P_SpawnMobj(newx, newy, player->mo->z, MT_JAWZ_SHIELD);
|
||||||
mo->threshold = 10;
|
|
||||||
if (mo)
|
if (mo)
|
||||||
P_SetTarget(&mo->target, player->mo);
|
|
||||||
}
|
|
||||||
else if (player->kartstuff[k_itemamount] > 1) // Jawz x2 held
|
|
||||||
{*/
|
|
||||||
INT32 moloop;
|
|
||||||
|
|
||||||
player->kartstuff[k_itemheld] = 2;
|
|
||||||
player->pflags |= PF_ATTACKDOWN;
|
|
||||||
//K_PlayTauntSound(player->mo);
|
|
||||||
S_StartSound(player->mo, sfx_s3k3a);
|
|
||||||
|
|
||||||
for (moloop = 0; moloop < player->kartstuff[k_itemamount]; moloop++)
|
|
||||||
{
|
{
|
||||||
angle_t newangle;
|
mo->threshold = 10;
|
||||||
fixed_t newx;
|
mo->lastlook = moloop+1;
|
||||||
fixed_t newy;
|
P_SetTarget(&mo->target, player->mo);
|
||||||
mobj_t *mo;
|
mo->angle = FixedAngle(((360/player->kartstuff[k_itemamount])*moloop)*FRACUNIT) + ANGLE_90;
|
||||||
|
|
||||||
newangle = player->mo->angle;
|
|
||||||
newx = player->mo->x + P_ReturnThrustX(player->mo, newangle + ANGLE_180, 64*FRACUNIT);
|
|
||||||
newy = player->mo->y + P_ReturnThrustY(player->mo, newangle + ANGLE_180, 64*FRACUNIT);
|
|
||||||
mo = P_SpawnMobj(newx, newy, player->mo->z, MT_JAWZ_SHIELD);
|
|
||||||
if (mo)
|
|
||||||
{
|
|
||||||
mo->threshold = 10;
|
|
||||||
mo->lastlook = moloop+1;
|
|
||||||
P_SetTarget(&mo->target, player->mo);
|
|
||||||
mo->angle = FixedAngle(((360/player->kartstuff[k_itemamount])*moloop)*FRACUNIT);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
//}
|
}
|
||||||
}
|
}
|
||||||
else if (!(cmd->buttons & BT_ATTACK) && HOLDING_ITEM && player->kartstuff[k_itemheld] == 1) // Jawz x1 thrown
|
else if (ATTACK_IS_DOWN && HOLDING_ITEM && player->kartstuff[k_itemheld]) // Jawz thrown
|
||||||
{
|
|
||||||
player->kartstuff[k_itemamount]--;
|
|
||||||
player->kartstuff[k_itemheld] = 0;
|
|
||||||
if (player->kartstuff[k_throwdir] == 1 || player->kartstuff[k_throwdir] == 0)
|
|
||||||
K_ThrowKartItem(player, true, MT_JAWZ, 1, false);
|
|
||||||
else if (player->kartstuff[k_throwdir] == -1) // Throwing backward gives you a dud that doesn't home in
|
|
||||||
K_ThrowKartItem(player, true, MT_JAWZ_DUD, -1, false);
|
|
||||||
K_PlayTauntSound(player->mo);
|
|
||||||
}
|
|
||||||
else if (ATTACK_IS_DOWN && HOLDING_ITEM && player->kartstuff[k_itemheld] == 2) // Jawz x2 thrown
|
|
||||||
{
|
{
|
||||||
if (player->kartstuff[k_throwdir] == 1 || player->kartstuff[k_throwdir] == 0)
|
if (player->kartstuff[k_throwdir] == 1 || player->kartstuff[k_throwdir] == 0)
|
||||||
K_ThrowKartItem(player, true, MT_JAWZ, 1, false);
|
K_ThrowKartItem(player, true, MT_JAWZ, 1, false);
|
||||||
|
@ -3258,6 +3191,7 @@ void K_MoveKartPlayer(player_t *player, boolean onground)
|
||||||
K_ThrowKartItem(player, true, MT_JAWZ_DUD, -1, false);
|
K_ThrowKartItem(player, true, MT_JAWZ_DUD, -1, false);
|
||||||
K_PlayTauntSound(player->mo);
|
K_PlayTauntSound(player->mo);
|
||||||
player->pflags |= PF_ATTACKDOWN;
|
player->pflags |= PF_ATTACKDOWN;
|
||||||
|
|
||||||
player->kartstuff[k_itemamount]--;
|
player->kartstuff[k_itemamount]--;
|
||||||
if (!player->kartstuff[k_itemamount])
|
if (!player->kartstuff[k_itemamount])
|
||||||
player->kartstuff[k_itemheld] = 0;
|
player->kartstuff[k_itemheld] = 0;
|
||||||
|
@ -3285,7 +3219,7 @@ void K_MoveKartPlayer(player_t *player, boolean onground)
|
||||||
P_SetTarget(&player->mo->hnext, mo);
|
P_SetTarget(&player->mo->hnext, mo);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (!(cmd->buttons & BT_ATTACK) && HOLDING_ITEM)
|
else if (!(cmd->buttons & BT_ATTACK) && HOLDING_ITEM && player->kartstuff[k_itemheld])
|
||||||
{
|
{
|
||||||
K_ThrowKartItem(player, false, MT_SSMINE, 1, true);
|
K_ThrowKartItem(player, false, MT_SSMINE, 1, true);
|
||||||
K_PlayTauntSound(player->mo);
|
K_PlayTauntSound(player->mo);
|
||||||
|
|
|
@ -427,10 +427,7 @@ void P_TouchSpecialThing(mobj_t *special, mobj_t *toucher, boolean heightcheck)
|
||||||
return;
|
return;
|
||||||
if (player == special->target->player)
|
if (player == special->target->player)
|
||||||
return;
|
return;
|
||||||
if (player->kartstuff[k_growshrinktimer] || player->kartstuff[k_squishedtimer]
|
if (player->kartstuff[k_balloon] <= 0)
|
||||||
|| player->kartstuff[k_hyudorotimer] || player->kartstuff[k_spinouttimer]
|
|
||||||
|| player->kartstuff[k_invincibilitytimer] || player->powers[pw_flashing]
|
|
||||||
|| player->kartstuff[k_balloon] <= 0)
|
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (special->target->player->kartstuff[k_comebacktimer]
|
if (special->target->player->kartstuff[k_comebacktimer]
|
||||||
|
@ -440,25 +437,32 @@ void P_TouchSpecialThing(mobj_t *special, mobj_t *toucher, boolean heightcheck)
|
||||||
|
|
||||||
if (special->target->player->kartstuff[k_comebackmode] == 0)
|
if (special->target->player->kartstuff[k_comebackmode] == 0)
|
||||||
{
|
{
|
||||||
mobj_t *boom = P_SpawnMobj(special->target->x, special->target->y, special->target->z, MT_BOOMPARTICLE);
|
if (player->kartstuff[k_growshrinktimer] || player->kartstuff[k_squishedtimer]
|
||||||
boom->scale = special->target->scale;
|
|| player->kartstuff[k_hyudorotimer] || player->kartstuff[k_spinouttimer]
|
||||||
boom->destscale = special->target->scale;
|
|| player->kartstuff[k_invincibilitytimer] || player->powers[pw_flashing])
|
||||||
boom->momz = 5*FRACUNIT;
|
return;
|
||||||
if (special->target->color)
|
|
||||||
boom->color = special->target->color;
|
|
||||||
else
|
else
|
||||||
boom->color = SKINCOLOR_RED;
|
{
|
||||||
S_StartSound(boom, special->info->attacksound);
|
mobj_t *boom = P_SpawnMobj(special->target->x, special->target->y, special->target->z, MT_BOOMPARTICLE);
|
||||||
|
boom->scale = special->target->scale;
|
||||||
|
boom->destscale = special->target->scale;
|
||||||
|
boom->momz = 5*FRACUNIT;
|
||||||
|
if (special->target->color)
|
||||||
|
boom->color = special->target->color;
|
||||||
|
else
|
||||||
|
boom->color = SKINCOLOR_RED;
|
||||||
|
S_StartSound(boom, special->info->attacksound);
|
||||||
|
|
||||||
K_ExplodePlayer(player, special->target);
|
K_ExplodePlayer(player, special->target);
|
||||||
|
|
||||||
special->target->player->kartstuff[k_comebackpoints] += 2;
|
special->target->player->kartstuff[k_comebackpoints] += 2;
|
||||||
if (netgame && cv_hazardlog.value)
|
if (netgame && cv_hazardlog.value)
|
||||||
CONS_Printf(M_GetText("%s bombed %s!\n"), player_names[special->target->player-players], player_names[player-players]);
|
CONS_Printf(M_GetText("%s bombed %s!\n"), player_names[special->target->player-players], player_names[player-players]);
|
||||||
if (special->target->player->kartstuff[k_comebackpoints] >= 3)
|
if (special->target->player->kartstuff[k_comebackpoints] >= 3)
|
||||||
K_StealBalloon(special->target->player, player, true);
|
K_StealBalloon(special->target->player, player, true);
|
||||||
|
|
||||||
special->target->player->kartstuff[k_comebacktimer] = comebacktime;
|
special->target->player->kartstuff[k_comebacktimer] = comebacktime;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else if (special->target->player->kartstuff[k_comebackmode] == 1 && P_CanPickupItem(player, true))
|
else if (special->target->player->kartstuff[k_comebackmode] == 1 && P_CanPickupItem(player, true))
|
||||||
{
|
{
|
||||||
|
|
|
@ -1633,13 +1633,11 @@ static boolean PIT_CheckThing(mobj_t *thing)
|
||||||
if (thing->player->kartstuff[k_growshrinktimer] || thing->player->kartstuff[k_squishedtimer]
|
if (thing->player->kartstuff[k_growshrinktimer] || thing->player->kartstuff[k_squishedtimer]
|
||||||
|| thing->player->kartstuff[k_hyudorotimer] || thing->player->kartstuff[k_spinouttimer]
|
|| thing->player->kartstuff[k_hyudorotimer] || thing->player->kartstuff[k_spinouttimer]
|
||||||
|| thing->player->kartstuff[k_invincibilitytimer] || thing->player->kartstuff[k_justbumped]
|
|| thing->player->kartstuff[k_invincibilitytimer] || thing->player->kartstuff[k_justbumped]
|
||||||
|| (G_BattleGametype() && (thing->player->kartstuff[k_balloon] <= 0
|
|| (G_BattleGametype() && thing->player->kartstuff[k_balloon] <= 0)
|
||||||
&& (thing->player->kartstuff[k_comebacktimer])))
|
|
||||||
|| tmthing->player->kartstuff[k_growshrinktimer] || tmthing->player->kartstuff[k_squishedtimer]
|
|| tmthing->player->kartstuff[k_growshrinktimer] || tmthing->player->kartstuff[k_squishedtimer]
|
||||||
|| tmthing->player->kartstuff[k_hyudorotimer] || tmthing->player->kartstuff[k_spinouttimer]
|
|| tmthing->player->kartstuff[k_hyudorotimer] || tmthing->player->kartstuff[k_spinouttimer]
|
||||||
|| tmthing->player->kartstuff[k_invincibilitytimer] || tmthing->player->kartstuff[k_justbumped]
|
|| tmthing->player->kartstuff[k_invincibilitytimer] || tmthing->player->kartstuff[k_justbumped]
|
||||||
|| (G_BattleGametype() && (tmthing->player->kartstuff[k_balloon] <= 0
|
|| (G_BattleGametype() && tmthing->player->kartstuff[k_balloon] <= 0))
|
||||||
&& (tmthing->player->kartstuff[k_comebacktimer]))))
|
|
||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
81
src/p_mobj.c
81
src/p_mobj.c
|
@ -6695,11 +6695,8 @@ void P_MobjThinker(mobj_t *mobj)
|
||||||
fixed_t z;
|
fixed_t z;
|
||||||
const fixed_t radius = FixedHypot(mobj->target->radius, mobj->target->radius) + FixedHypot(mobj->radius, mobj->radius); // mobj's distance from its Target, or Radius.
|
const fixed_t radius = FixedHypot(mobj->target->radius, mobj->target->radius) + FixedHypot(mobj->radius, mobj->radius); // mobj's distance from its Target, or Radius.
|
||||||
|
|
||||||
//mobj->angle += FixedAngle(12*FRACUNIT); // mobj's actual speed.
|
mobj->angle -= ANGLE_90;
|
||||||
if (mobj->lastlook > 0)
|
mobj->angle += FixedAngle(mobj->info->speed);
|
||||||
mobj->angle += FixedAngle(mobj->info->speed);
|
|
||||||
else
|
|
||||||
mobj->angle = (mobj->target->angle + ANGLE_180);
|
|
||||||
|
|
||||||
// If the player is on the ceiling, then flip your items as well.
|
// If the player is on the ceiling, then flip your items as well.
|
||||||
if (mobj->target->player && mobj->target->eflags & MFE_VERTICALFLIP)
|
if (mobj->target->player && mobj->target->eflags & MFE_VERTICALFLIP)
|
||||||
|
@ -6750,6 +6747,7 @@ void P_MobjThinker(mobj_t *mobj)
|
||||||
}
|
}
|
||||||
mobj->z = z;
|
mobj->z = z;
|
||||||
mobj->momx = mobj->momy = 0;
|
mobj->momx = mobj->momy = 0;
|
||||||
|
mobj->angle += ANGLE_90;
|
||||||
|
|
||||||
// Was this so hard?
|
// Was this so hard?
|
||||||
if ((mobj->type == MT_GREENSHIELD && mobj->target->player->kartstuff[k_itemtype] != KITEM_ORBINAUT)
|
if ((mobj->type == MT_GREENSHIELD && mobj->target->player->kartstuff[k_itemtype] != KITEM_ORBINAUT)
|
||||||
|
@ -6778,7 +6776,7 @@ void P_MobjThinker(mobj_t *mobj)
|
||||||
{
|
{
|
||||||
if (mobj->lastlook == 1)
|
if (mobj->lastlook == 1)
|
||||||
{
|
{
|
||||||
const fixed_t spacing = FixedMul(mobj->info->radius, mobj->target->scale);
|
const fixed_t spacing = FixedMul(3*mobj->info->radius/2, mobj->target->scale);
|
||||||
mobj_t *cur = mobj;
|
mobj_t *cur = mobj;
|
||||||
mobj_t *targ = mobj->target;
|
mobj_t *targ = mobj->target;
|
||||||
|
|
||||||
|
@ -6789,27 +6787,31 @@ void P_MobjThinker(mobj_t *mobj)
|
||||||
fixed_t targy;
|
fixed_t targy;
|
||||||
fixed_t targz;
|
fixed_t targz;
|
||||||
fixed_t speed;
|
fixed_t speed;
|
||||||
|
fixed_t dist = spacing;
|
||||||
|
|
||||||
if (cur != mobj)
|
if (cur != mobj)
|
||||||
|
{
|
||||||
targ = cur->hprev;
|
targ = cur->hprev;
|
||||||
|
dist = spacing/2;
|
||||||
|
}
|
||||||
|
|
||||||
if (!targ || P_MobjWasRemoved(targ))
|
if (!targ || P_MobjWasRemoved(targ))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
ang = targ->angle;
|
ang = targ->angle;
|
||||||
targx = targ->x + P_ReturnThrustX(cur, ang + ANGLE_180, spacing);
|
targx = targ->x + P_ReturnThrustX(cur, ang + ANGLE_180, dist);
|
||||||
targy = targ->y + P_ReturnThrustY(cur, ang + ANGLE_180, spacing);
|
targy = targ->y + P_ReturnThrustY(cur, ang + ANGLE_180, dist);
|
||||||
targz = targ->z;
|
targz = targ->z;
|
||||||
speed = FixedMul(R_PointToDist2(cur->x, cur->y, targx, targy), FRACUNIT/2);
|
speed = FixedMul(R_PointToDist2(cur->x, cur->y, targx, targy), 3*FRACUNIT/4);
|
||||||
if (P_IsObjectOnGround(targ))
|
if (P_IsObjectOnGround(targ))
|
||||||
targz = cur->floorz;
|
targz = cur->floorz;
|
||||||
|
|
||||||
cur->angle = R_PointToAngle2(cur->x, cur->y, targx, targy);
|
cur->angle = R_PointToAngle2(cur->x, cur->y, targx, targy);
|
||||||
|
|
||||||
if (speed > spacing/2)
|
if (speed > dist)
|
||||||
P_InstaThrust(cur, cur->angle, speed-(spacing/2));
|
P_InstaThrust(cur, cur->angle, speed-dist);
|
||||||
|
|
||||||
P_SetObjectMomZ(cur, FixedMul(targz - cur->z, FRACUNIT/2), false);
|
P_SetObjectMomZ(cur, FixedMul(targz - cur->z, 3*FRACUNIT/4) - gravity, false);
|
||||||
|
|
||||||
if (R_PointToDist2(cur->x, cur->y, targx, targy) > 768*FRACUNIT)
|
if (R_PointToDist2(cur->x, cur->y, targx, targy) > 768*FRACUNIT)
|
||||||
P_TeleportMove(cur, targx, targy, cur->z);
|
P_TeleportMove(cur, targx, targy, cur->z);
|
||||||
|
@ -8240,6 +8242,32 @@ void P_MobjThinker(mobj_t *mobj)
|
||||||
else
|
else
|
||||||
mobj->flags2 &= ~MF2_DONTDRAW;
|
mobj->flags2 &= ~MF2_DONTDRAW;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Now for the wheels
|
||||||
|
{
|
||||||
|
const fixed_t rad = mobjinfo[MT_PLAYER].radius;
|
||||||
|
mobj_t *cur = mobj->hnext;
|
||||||
|
|
||||||
|
while (cur && !P_MobjWasRemoved(cur))
|
||||||
|
{
|
||||||
|
fixed_t offx = rad;
|
||||||
|
fixed_t offy = rad;
|
||||||
|
|
||||||
|
if (cur->lastlook == 1 || cur->lastlook == 3)
|
||||||
|
offx *= -1;
|
||||||
|
if (cur->lastlook == 2 || cur->lastlook == 3)
|
||||||
|
offy *= -1;
|
||||||
|
|
||||||
|
P_TeleportMove(cur, mobj->x + offx, mobj->y + offy, mobj->z);
|
||||||
|
|
||||||
|
if (mobj->flags2 & MF2_DONTDRAW)
|
||||||
|
cur->flags2 |= MF2_DONTDRAW;
|
||||||
|
else
|
||||||
|
cur->flags2 &= ~MF2_DONTDRAW;
|
||||||
|
|
||||||
|
cur = cur->hnext;
|
||||||
|
}
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
//}
|
//}
|
||||||
case MT_TURRET:
|
case MT_TURRET:
|
||||||
|
@ -9001,6 +9029,35 @@ mobj_t *P_SpawnMobj(fixed_t x, fixed_t y, fixed_t z, mobjtype_t type)
|
||||||
case MT_BLUEBALL:
|
case MT_BLUEBALL:
|
||||||
nummaprings++;
|
nummaprings++;
|
||||||
break;
|
break;
|
||||||
|
case MT_KARMAHITBOX: // SRB2Kart
|
||||||
|
{
|
||||||
|
const fixed_t rad = mobjinfo[MT_PLAYER].radius;
|
||||||
|
mobj_t *cur, *prev = mobj;
|
||||||
|
INT32 i;
|
||||||
|
|
||||||
|
for (i = 0; i < 4; i++)
|
||||||
|
{
|
||||||
|
fixed_t offx = rad;
|
||||||
|
fixed_t offy = rad;
|
||||||
|
|
||||||
|
if (i == 1 || i == 3)
|
||||||
|
offx *= -1;
|
||||||
|
if (i == 2 || i == 3)
|
||||||
|
offy *= -1;
|
||||||
|
|
||||||
|
cur = P_SpawnMobj(mobj->x + offx, mobj->y + offy, mobj->z, MT_KARMAWHEEL);
|
||||||
|
cur->destscale = mobj->scale;
|
||||||
|
P_SetScale(cur, mobj->scale);
|
||||||
|
|
||||||
|
cur->lastlook = i;
|
||||||
|
|
||||||
|
P_SetTarget(&cur->hprev, prev);
|
||||||
|
P_SetTarget(&prev->hnext, cur);
|
||||||
|
|
||||||
|
prev = cur;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1029,7 +1029,6 @@ static void SaveMobjThinker(const thinker_t *th, const UINT8 type)
|
||||||
const mobj_t *mobj = (const mobj_t *)th;
|
const mobj_t *mobj = (const mobj_t *)th;
|
||||||
UINT32 diff;
|
UINT32 diff;
|
||||||
UINT16 diff2;
|
UINT16 diff2;
|
||||||
UINT8 i;
|
|
||||||
|
|
||||||
// Ignore stationary hoops - these will be respawned from mapthings.
|
// Ignore stationary hoops - these will be respawned from mapthings.
|
||||||
if (mobj->type == MT_HOOP)
|
if (mobj->type == MT_HOOP)
|
||||||
|
|
10
src/p_spec.c
10
src/p_spec.c
|
@ -4182,13 +4182,9 @@ DoneSection2:
|
||||||
//except the time!
|
//except the time!
|
||||||
player->starposttime = player->realtime;
|
player->starposttime = player->realtime;
|
||||||
|
|
||||||
if (P_IsLocalPlayer(player))
|
if (P_IsLocalPlayer(player) && (player->laps <= (UINT8)(cv_numlaps.value - 1)))
|
||||||
{
|
S_StartSound(NULL, sfx_s221);
|
||||||
if (player->laps < (UINT8)(cv_numlaps.value - 1))
|
|
||||||
S_StartSound(NULL, sfx_mlap);
|
|
||||||
else if (player->laps == (UINT8)(cv_numlaps.value - 1))
|
|
||||||
S_StartSound(NULL, sfx_mlap);
|
|
||||||
}
|
|
||||||
//
|
//
|
||||||
//player->starpostangle = player->starposttime = player->starpostnum = 0;
|
//player->starpostangle = player->starposttime = player->starpostnum = 0;
|
||||||
//player->starpostx = player->starposty = player->starpostz = 0;
|
//player->starpostx = player->starposty = player->starpostz = 0;
|
||||||
|
|
|
@ -316,7 +316,7 @@ sfxinfo_t S_sfx[NUMSFX] =
|
||||||
|
|
||||||
// Sonic 2 sounds
|
// Sonic 2 sounds
|
||||||
{"s220", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR},
|
{"s220", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR},
|
||||||
{"s221", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR},
|
{"s221", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, // Lap sound
|
||||||
{"s222", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR},
|
{"s222", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR},
|
||||||
{"s223", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR},
|
{"s223", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR},
|
||||||
{"s224", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR},
|
{"s224", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR},
|
||||||
|
|
Loading…
Reference in New Issue