mirror of
https://git.do.srb2.org/KartKrew/Kart-Public.git
synced 2025-02-21 19:31:04 +00:00
Balloon stealing! Mushroom is back!
This commit is contained in:
parent
d0a455c7dd
commit
9a822fae80
5 changed files with 154 additions and 84 deletions
|
@ -2708,9 +2708,9 @@ state_t states[NUMSTATES] =
|
||||||
{SPR_SITR, 1, 5, {NULL}, 0, 0, S_SINKTRAIL3}, // S_SINKTRAIL2
|
{SPR_SITR, 1, 5, {NULL}, 0, 0, S_SINKTRAIL3}, // S_SINKTRAIL2
|
||||||
{SPR_SITR, 2, 3, {NULL}, 0, 0, S_NULL}, // S_SINKTRAIL3
|
{SPR_SITR, 2, 3, {NULL}, 0, 0, S_NULL}, // S_SINKTRAIL3
|
||||||
|
|
||||||
{SPR_KBLN, FF_FULLBRIGHT, 1, {NULL}, 0, 0, S_BATTLEBALLOON1}, // S_BATTLEBALLOON1
|
{SPR_KBLN, FF_FULLBRIGHT, -1, {NULL}, 0, 0, S_BATTLEBALLOON1}, // S_BATTLEBALLOON1
|
||||||
{SPR_KBLN, FF_FULLBRIGHT|1, 1, {NULL}, 0, 0, S_BATTLEBALLOON2}, // S_BATTLEBALLOON2
|
{SPR_KBLN, FF_FULLBRIGHT|1, -1, {NULL}, 0, 0, S_BATTLEBALLOON2}, // S_BATTLEBALLOON2
|
||||||
{SPR_KBLN, FF_FULLBRIGHT|2, 1, {NULL}, 0, 0, S_BATTLEBALLOON3}, // S_BATTLEBALLOON3
|
{SPR_KBLN, FF_FULLBRIGHT|2, -1, {NULL}, 0, 0, S_BATTLEBALLOON3}, // S_BATTLEBALLOON3
|
||||||
|
|
||||||
{SPR_LAKI, 0, 64, {NULL}, 1, 0, S_LAKITU2}, // S_LAKITU1
|
{SPR_LAKI, 0, 64, {NULL}, 1, 0, S_LAKITU2}, // S_LAKITU1
|
||||||
{SPR_LAKI, 1, 35, {NULL}, 0, 0, S_NULL}, // S_LAKITU2
|
{SPR_LAKI, 1, 35, {NULL}, 0, 0, S_NULL}, // S_LAKITU2
|
||||||
|
@ -15155,7 +15155,7 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
|
||||||
S_NULL, // deathstate
|
S_NULL, // deathstate
|
||||||
S_NULL, // xdeathstate
|
S_NULL, // xdeathstate
|
||||||
sfx_None, // deathsound
|
sfx_None, // deathsound
|
||||||
5*FRACUNIT, // speed
|
4*FRACUNIT, // speed
|
||||||
8*FRACUNIT, // radius
|
8*FRACUNIT, // radius
|
||||||
16*FRACUNIT, // height
|
16*FRACUNIT, // height
|
||||||
0, // display offset
|
0, // display offset
|
||||||
|
|
94
src/k_kart.c
94
src/k_kart.c
|
@ -692,16 +692,16 @@ static INT32 K_KartItemOddsDistance_Retro[NUMKARTITEMS][10] =
|
||||||
//P-Odds 0 1 2 3 4 5 6 7 8 9
|
//P-Odds 0 1 2 3 4 5 6 7 8 9
|
||||||
/*Magnet*/ { 0, 0, 1, 2, 0, 0, 0, 0, 0, 0 }, // Magnet
|
/*Magnet*/ { 0, 0, 1, 2, 0, 0, 0, 0, 0, 0 }, // Magnet
|
||||||
/*Boo*/ { 0, 0, 0, 2, 2, 1, 0, 0, 0, 0 }, // Boo
|
/*Boo*/ { 0, 0, 0, 2, 2, 1, 0, 0, 0, 0 }, // Boo
|
||||||
/*Mushroom*/ { 0, 1, 0, 0, 3, 7, 5, 0, 0, 0 }, // Mushroom
|
/*Mushroom*/ { 5, 1, 0, 0, 3, 7, 5, 0, 0, 0 }, // Mushroom
|
||||||
/*Triple Mushroom*/ { 0, 0, 0, 0, 0, 3,10, 6, 4, 0 }, // Triple Mushroom
|
/*Triple Mushroom*/ { 0, 0, 0, 0, 0, 3,10, 6, 4, 0 }, // Triple Mushroom
|
||||||
/*Mega Mushroom*/ { 1, 0, 0, 0, 0, 0, 1, 1, 0, 0 }, // Mega Mushroom
|
/*Mega Mushroom*/ { 1, 0, 0, 0, 0, 0, 1, 1, 0, 0 }, // Mega Mushroom
|
||||||
/*Gold Mushroom*/ { 0, 0, 0, 0, 0, 0, 1, 6, 8,12 }, // Gold Mushroom
|
/*Gold Mushroom*/ { 0, 0, 0, 0, 0, 0, 1, 6, 8,12 }, // Gold Mushroom
|
||||||
/*Star*/ { 1, 0, 0, 0, 0, 0, 0, 4, 6, 8 }, // Star
|
/*Star*/ { 1, 0, 0, 0, 0, 0, 0, 4, 6, 8 }, // Star
|
||||||
|
|
||||||
/*Triple Banana*/ { 2, 0, 0, 1, 1, 0, 0, 0, 0, 0 }, // Triple Banana
|
/*Triple Banana*/ { 2, 0, 0, 1, 1, 0, 0, 0, 0, 0 }, // Triple Banana
|
||||||
/*Fake Item*/ { 6, 0, 4, 2, 1, 0, 0, 0, 0, 0 }, // Fake Item
|
/*Fake Item*/ { 5, 0, 4, 2, 1, 0, 0, 0, 0, 0 }, // Fake Item
|
||||||
/*Banana*/ { 6, 0, 9, 4, 2, 1, 0, 0, 0, 0 }, // Banana
|
/*Banana*/ { 5, 0, 9, 4, 2, 1, 0, 0, 0, 0 }, // Banana
|
||||||
/*Green Shell*/ { 6, 0, 6, 4, 3, 2, 0, 0, 0, 0 }, // Green Shell
|
/*Green Shell*/ { 5, 0, 6, 4, 3, 2, 0, 0, 0, 0 }, // Green Shell
|
||||||
/*Red Shell*/ { 2, 0, 0, 3, 2, 2, 1, 0, 0, 0 }, // Red Shell
|
/*Red Shell*/ { 2, 0, 0, 3, 2, 2, 1, 0, 0, 0 }, // Red Shell
|
||||||
/*Triple Green Shell*/ { 2, 0, 0, 0, 1, 1, 1, 0, 0, 0 }, // Triple Green Shell
|
/*Triple Green Shell*/ { 2, 0, 0, 0, 1, 1, 1, 0, 0, 0 }, // Triple Green Shell
|
||||||
/*Bob-omb*/ { 2, 0, 0, 1, 2, 1, 0, 0, 0, 0 }, // Bob-omb
|
/*Bob-omb*/ { 2, 0, 0, 1, 2, 1, 0, 0, 0, 0 }, // Bob-omb
|
||||||
|
@ -1184,6 +1184,12 @@ void K_KartBouncer(void)
|
||||||
K_SwapMomentum(players[j].mo, players[i].mo, true);
|
K_SwapMomentum(players[j].mo, players[i].mo, true);
|
||||||
else
|
else
|
||||||
K_SwapMomentum(players[i].mo, players[j].mo, false);
|
K_SwapMomentum(players[i].mo, players[j].mo, false);
|
||||||
|
|
||||||
|
if (players[i].kartstuff[k_mushroomtimer] && !(players[j].kartstuff[k_mushroomtimer]))
|
||||||
|
K_StealBalloon(&players[i], &players[j]);
|
||||||
|
else if (players[j].kartstuff[k_mushroomtimer] && !(players[i].kartstuff[k_mushroomtimer]))
|
||||||
|
K_StealBalloon(&players[j], &players[i]);
|
||||||
|
|
||||||
players[i].collide[j] = true;
|
players[i].collide[j] = true;
|
||||||
players[j].collide[i] = true;
|
players[j].collide[i] = true;
|
||||||
}
|
}
|
||||||
|
@ -1776,8 +1782,13 @@ void K_ExplodePlayer(player_t *player, mobj_t *source) // A bit of a hack, we ju
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*void K_StealBalloon(player_t *player, player_t *victim)
|
void K_StealBalloon(player_t *player, player_t *victim)
|
||||||
{
|
{
|
||||||
|
INT32 newballoon;
|
||||||
|
angle_t newangle, diff;
|
||||||
|
fixed_t newx, newy;
|
||||||
|
mobj_t *newmo;
|
||||||
|
|
||||||
//(void) source;
|
//(void) source;
|
||||||
if (gametype == GT_RACE)
|
if (gametype == GT_RACE)
|
||||||
return;
|
return;
|
||||||
|
@ -1785,13 +1796,13 @@ void K_ExplodePlayer(player_t *player, mobj_t *source) // A bit of a hack, we ju
|
||||||
if (player->health <= 0 || victim->health <= 0)
|
if (player->health <= 0 || victim->health <= 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (player == victim)
|
if (victim->kartstuff[k_balloon] <= 0) // || player->kartstuff[k_balloon] >= cv_kartballoons.value+2
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if ((player->powers[pw_flashing] > 0 || player->kartstuff[k_squishedtimer] > 0 || (player->kartstuff[k_spinouttimer] > 0 && player->kartstuff[k_spinout] > 0)
|
if ((player->powers[pw_flashing] > 0 || player->kartstuff[k_squishedtimer] > 0 || (player->kartstuff[k_spinouttimer] > 0 && player->kartstuff[k_spinout] > 0)
|
||||||
|| player->kartstuff[k_startimer] > 0 || player->kartstuff[k_growshrinktimer] > 0 || player->kartstuff[k_bootaketimer] > 0 || player->kartstuff[k_balloon] >= 3)
|
|| player->kartstuff[k_startimer] > 0 || player->kartstuff[k_growshrinktimer] > 0 || player->kartstuff[k_bootaketimer] > 0)
|
||||||
|| (victim->powers[pw_flashing] > 0 || victim->kartstuff[k_squishedtimer] > 0 || (victim->kartstuff[k_spinouttimer] > 0 && victim->kartstuff[k_spinout] > 0)
|
|| (victim->powers[pw_flashing] > 0 || victim->kartstuff[k_squishedtimer] > 0 || (victim->kartstuff[k_spinouttimer] > 0 && victim->kartstuff[k_spinout] > 0)
|
||||||
|| victim->kartstuff[k_startimer] > 0 || victim->kartstuff[k_growshrinktimer] > 0 || victim->kartstuff[k_bootaketimer] > 0 || victim->kartstuff[k_balloon] <= 0))
|
|| victim->kartstuff[k_startimer] > 0 || victim->kartstuff[k_growshrinktimer] > 0 || victim->kartstuff[k_bootaketimer] > 0))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
victim->kartstuff[k_mushroomtimer] = 0;
|
victim->kartstuff[k_mushroomtimer] = 0;
|
||||||
|
@ -1799,31 +1810,30 @@ void K_ExplodePlayer(player_t *player, mobj_t *source) // A bit of a hack, we ju
|
||||||
|
|
||||||
CONS_Printf(M_GetText("%s stole a balloon from %s!\n"), player_names[player-players], player_names[victim-players]);
|
CONS_Printf(M_GetText("%s stole a balloon from %s!\n"), player_names[player-players], player_names[victim-players]);
|
||||||
|
|
||||||
|
newballoon = player->kartstuff[k_balloon];
|
||||||
|
newangle = player->mo->angle;
|
||||||
|
if (newballoon <= 1)
|
||||||
|
diff = 0;
|
||||||
|
else
|
||||||
|
diff = FixedAngle(360*FRACUNIT/newballoon);
|
||||||
|
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);
|
||||||
|
|
||||||
|
newmo = P_SpawnMobj(newx, newy, player->mo->z, MT_BATTLEBALLOON);
|
||||||
|
newmo->threshold = newballoon;
|
||||||
|
P_SetTarget(&newmo->tracer, victim->mo);
|
||||||
|
P_SetTarget(&newmo->target, player->mo);
|
||||||
|
newmo->angle = (diff * (newballoon-1));
|
||||||
|
newmo->color = victim->skincolor;
|
||||||
|
|
||||||
|
if (newballoon+1 <= 1)
|
||||||
|
P_SetMobjState(newmo, S_BATTLEBALLOON3);
|
||||||
|
else if (newballoon+1 == 2)
|
||||||
|
P_SetMobjState(newmo, S_BATTLEBALLOON2);
|
||||||
|
else
|
||||||
|
P_SetMobjState(newmo, S_BATTLEBALLOON1);
|
||||||
|
|
||||||
player->kartstuff[k_balloon]++;
|
player->kartstuff[k_balloon]++;
|
||||||
|
|
||||||
{
|
|
||||||
angle_t newangle, diff;
|
|
||||||
fixed_t newx;
|
|
||||||
fixed_t newy;
|
|
||||||
mobj_t *mo;
|
|
||||||
|
|
||||||
newangle = player->mo->angle;
|
|
||||||
diff = FixedAngle(360*FRACUNIT/cv_kartballoons.value);
|
|
||||||
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_BATTLEBALLOON);
|
|
||||||
mo->threshold = 10;
|
|
||||||
P_SetTarget(&mo->target, player->mo);
|
|
||||||
P_SetTarget(&mo->tracer, victim->mo);
|
|
||||||
mo->angle = 0;
|
|
||||||
mo->color = player->mo->color;
|
|
||||||
if (player->mo->flags2 & MF2_DONTDRAW)
|
|
||||||
mo->flags2 |= MF2_DONTDRAW;
|
|
||||||
else
|
|
||||||
mo->flags2 &= ~MF2_DONTDRAW;
|
|
||||||
}
|
|
||||||
|
|
||||||
victim->kartstuff[k_balloon]--;
|
victim->kartstuff[k_balloon]--;
|
||||||
|
|
||||||
if (victim->kartstuff[k_balloon] <= 0)
|
if (victim->kartstuff[k_balloon] <= 0)
|
||||||
|
@ -1832,27 +1842,27 @@ void K_ExplodePlayer(player_t *player, mobj_t *source) // A bit of a hack, we ju
|
||||||
P_AddPlayerScore(player, 1);
|
P_AddPlayerScore(player, 1);
|
||||||
K_CheckBalloons();
|
K_CheckBalloons();
|
||||||
|
|
||||||
player->kartstuff[k_spinouttype] = 1;
|
victim->kartstuff[k_spinouttype] = 1;
|
||||||
player->kartstuff[k_spinouttimer] = 2*TICRATE+(TICRATE/2);
|
victim->kartstuff[k_spinouttimer] = 2*TICRATE+(TICRATE/2);
|
||||||
player->kartstuff[k_spinout] = player->kartstuff[k_spinouttimer];
|
victim->kartstuff[k_spinout] = victim->kartstuff[k_spinouttimer];
|
||||||
|
|
||||||
player->powers[pw_flashing] = flashingtics;
|
victim->powers[pw_flashing] = flashingtics;
|
||||||
|
|
||||||
if (!(player->mo->state >= &states[S_KART_SPIN1] && player->mo->state <= &states[S_KART_SPIN8]))
|
if (!(victim->mo->state >= &states[S_KART_SPIN1] && victim->mo->state <= &states[S_KART_SPIN8]))
|
||||||
P_SetPlayerMobjState(player->mo, S_KART_SPIN1);
|
P_SetPlayerMobjState(victim->mo, S_KART_SPIN1);
|
||||||
|
|
||||||
player->kartstuff[k_spinouttype] = 0;
|
victim->kartstuff[k_spinouttype] = 0;
|
||||||
|
|
||||||
P_PlayRinglossSound(player->mo);
|
P_PlayRinglossSound(victim->mo);
|
||||||
|
|
||||||
if (P_IsLocalPlayer(player))
|
if (P_IsLocalPlayer(victim))
|
||||||
{
|
{
|
||||||
quake.intensity = 64*FRACUNIT;
|
quake.intensity = 64*FRACUNIT;
|
||||||
quake.time = 5;
|
quake.time = 5;
|
||||||
}
|
}
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}*/
|
}
|
||||||
|
|
||||||
void K_SpawnKartExplosion(fixed_t x, fixed_t y, fixed_t z, fixed_t radius, INT32 number, mobjtype_t type, angle_t rotangle, boolean spawncenter, boolean ghostit)
|
void K_SpawnKartExplosion(fixed_t x, fixed_t y, fixed_t z, fixed_t radius, INT32 number, mobjtype_t type, angle_t rotangle, boolean spawncenter, boolean ghostit)
|
||||||
{
|
{
|
||||||
|
|
|
@ -20,6 +20,7 @@ void K_KartPlayerThink(player_t *player, ticcmd_t *cmd);
|
||||||
void K_SpinPlayer(player_t *player, mobj_t *source);
|
void K_SpinPlayer(player_t *player, mobj_t *source);
|
||||||
void K_SquishPlayer(player_t *player, mobj_t *source);
|
void K_SquishPlayer(player_t *player, mobj_t *source);
|
||||||
void K_ExplodePlayer(player_t *player, mobj_t *source);
|
void K_ExplodePlayer(player_t *player, mobj_t *source);
|
||||||
|
void K_StealBalloon(player_t *player, player_t *victim);
|
||||||
void K_SpawnKartExplosion(fixed_t x, fixed_t y, fixed_t z, fixed_t radius, INT32 number, mobjtype_t type, angle_t rotangle, boolean spawncenter, boolean ghostit);
|
void K_SpawnKartExplosion(fixed_t x, fixed_t y, fixed_t z, fixed_t radius, INT32 number, mobjtype_t type, angle_t rotangle, boolean spawncenter, boolean ghostit);
|
||||||
void K_SpawnDriftTrail(player_t *player);
|
void K_SpawnDriftTrail(player_t *player);
|
||||||
void K_DoMushroom(player_t *player, boolean doPFlag, boolean startboost);
|
void K_DoMushroom(player_t *player, boolean doPFlag, boolean startboost);
|
||||||
|
|
|
@ -2019,8 +2019,8 @@ void P_KillMobj(mobj_t *target, mobj_t *inflictor, mobj_t *source)
|
||||||
target->target->player->kartstuff[k_triplebanana] &= ~2;
|
target->target->player->kartstuff[k_triplebanana] &= ~2;
|
||||||
else if (target->type == MT_TRIPLEBANANASHIELD3 && target->target->player->kartstuff[k_triplebanana] & 4)
|
else if (target->type == MT_TRIPLEBANANASHIELD3 && target->target->player->kartstuff[k_triplebanana] & 4)
|
||||||
target->target->player->kartstuff[k_triplebanana] &= ~4;
|
target->target->player->kartstuff[k_triplebanana] &= ~4;
|
||||||
else if (target->type == MT_BATTLEBALLOON && target->target->player->kartstuff[k_balloon] >= target->threshold)
|
/*else if (target->type == MT_BATTLEBALLOON && target->target->player->kartstuff[k_balloon] > target->threshold-1)
|
||||||
target->target->player->kartstuff[k_triplebanana] = target->threshold-1;
|
target->target->player->kartstuff[k_balloon] = target->threshold-1;*/
|
||||||
}
|
}
|
||||||
//
|
//
|
||||||
|
|
||||||
|
|
131
src/p_mobj.c
131
src/p_mobj.c
|
@ -6582,28 +6582,21 @@ void P_MobjThinker(mobj_t *mobj)
|
||||||
case MT_TRIPLEBANANASHIELD1:
|
case MT_TRIPLEBANANASHIELD1:
|
||||||
case MT_TRIPLEBANANASHIELD2:
|
case MT_TRIPLEBANANASHIELD2:
|
||||||
case MT_TRIPLEBANANASHIELD3:
|
case MT_TRIPLEBANANASHIELD3:
|
||||||
case MT_BATTLEBALLOON:
|
|
||||||
if (mobj->health > 0 && mobj->target && mobj->target->player && mobj->target->player->mo
|
if (mobj->health > 0 && mobj->target && mobj->target->player && mobj->target->player->mo
|
||||||
&& mobj->target->player->health > 0 && !mobj->target->player->spectator)
|
&& mobj->target->player->health > 0 && !mobj->target->player->spectator)
|
||||||
{
|
{
|
||||||
fixed_t HEIGHT;
|
fixed_t HEIGHT;
|
||||||
fixed_t radius = 56*mobj->target->scale; // mobj's distance from its Target, or Radius.
|
fixed_t radius; // mobj's distance from its Target, or Radius.
|
||||||
|
|
||||||
if (mobj->type == MT_BANANASHIELD || mobj->type == MT_TRIPLEBANANASHIELD1 || mobj->type == MT_TRIPLEBANANASHIELD2 || mobj->type == MT_TRIPLEBANANASHIELD3)
|
if (mobj->type == MT_BANANASHIELD || mobj->type == MT_TRIPLEBANANASHIELD1 || mobj->type == MT_TRIPLEBANANASHIELD2 || mobj->type == MT_TRIPLEBANANASHIELD3)
|
||||||
radius = 64*mobj->target->scale;
|
radius = 64*mobj->target->scale;
|
||||||
else if (mobj->type == MT_BATTLEBALLOON)
|
|
||||||
radius = 32*mobj->target->scale;
|
|
||||||
else
|
else
|
||||||
radius = 56*mobj->target->scale;
|
radius = 56*mobj->target->scale;
|
||||||
|
|
||||||
//mobj->angle += FixedAngle(12*FRACUNIT); // mobj's actual speed.
|
//mobj->angle += FixedAngle(12*FRACUNIT); // mobj's actual speed.
|
||||||
if (mobj->type == MT_TRIPLEGREENSHIELD1 || mobj->type == MT_TRIPLEGREENSHIELD2 || mobj->type == MT_TRIPLEGREENSHIELD3
|
if (mobj->type == MT_TRIPLEGREENSHIELD1 || mobj->type == MT_TRIPLEGREENSHIELD2 || mobj->type == MT_TRIPLEGREENSHIELD3
|
||||||
|| mobj->type == MT_TRIPLEREDSHIELD1 || mobj->type == MT_TRIPLEREDSHIELD2 || mobj->type == MT_TRIPLEREDSHIELD3
|
|| mobj->type == MT_TRIPLEREDSHIELD1 || mobj->type == MT_TRIPLEREDSHIELD2 || mobj->type == MT_TRIPLEREDSHIELD3)
|
||||||
|| mobj->type == MT_BATTLEBALLOON)
|
mobj->angle += FixedAngle(mobj->info->speed);
|
||||||
if ((mobj->type == MT_BATTLEBALLOON) && !((mobj->target->player-players) & 1))
|
|
||||||
mobj->angle -= FixedAngle(mobj->info->speed);
|
|
||||||
else
|
|
||||||
mobj->angle += FixedAngle(mobj->info->speed);
|
|
||||||
else if (mobj->type == MT_TRIPLEBANANASHIELD2)
|
else if (mobj->type == MT_TRIPLEBANANASHIELD2)
|
||||||
mobj->angle = (mobj->target->angle + ANGLE_135);
|
mobj->angle = (mobj->target->angle + ANGLE_135);
|
||||||
else if (mobj->type == MT_TRIPLEBANANASHIELD3)
|
else if (mobj->type == MT_TRIPLEBANANASHIELD3)
|
||||||
|
@ -6623,26 +6616,6 @@ void P_MobjThinker(mobj_t *mobj)
|
||||||
HEIGHT = mobj->target->height / 5;
|
HEIGHT = mobj->target->height / 5;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mobj->type == MT_BATTLEBALLOON)
|
|
||||||
{
|
|
||||||
mobj->color = mobj->target->color;
|
|
||||||
|
|
||||||
if (mobj->target->player->kartstuff[k_balloon] <= 1)
|
|
||||||
P_SetMobjState(mobj, S_BATTLEBALLOON3);
|
|
||||||
else if (mobj->target->player->kartstuff[k_balloon] == 2)
|
|
||||||
P_SetMobjState(mobj, S_BATTLEBALLOON2);
|
|
||||||
|
|
||||||
if (mobj->target->flags2 & MF2_DONTDRAW)
|
|
||||||
mobj->flags2 |= MF2_DONTDRAW;
|
|
||||||
else
|
|
||||||
mobj->flags2 &= ~MF2_DONTDRAW;
|
|
||||||
|
|
||||||
if (mobj->target->eflags & MFE_VERTICALFLIP)
|
|
||||||
HEIGHT += 4*FRACUNIT;
|
|
||||||
else
|
|
||||||
HEIGHT -= 4*FRACUNIT;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Shrink your items if the player shrunk too.
|
// Shrink your items if the player shrunk too.
|
||||||
mobj->scale = mobj->target->scale;
|
mobj->scale = mobj->target->scale;
|
||||||
|
|
||||||
|
@ -6669,8 +6642,90 @@ void P_MobjThinker(mobj_t *mobj)
|
||||||
|| (mobj->type == MT_TRIPLEBANANASHIELD2 && !(mobj->target->player->kartstuff[k_triplebanana] & 2))
|
|| (mobj->type == MT_TRIPLEBANANASHIELD2 && !(mobj->target->player->kartstuff[k_triplebanana] & 2))
|
||||||
|| (mobj->type == MT_TRIPLEBANANASHIELD3 && !(mobj->target->player->kartstuff[k_triplebanana] & 4))
|
|| (mobj->type == MT_TRIPLEBANANASHIELD3 && !(mobj->target->player->kartstuff[k_triplebanana] & 4))
|
||||||
|| (mobj->type == MT_BOMBSHIELD && !(mobj->target->player->kartstuff[k_bobomb] & 1))
|
|| (mobj->type == MT_BOMBSHIELD && !(mobj->target->player->kartstuff[k_bobomb] & 1))
|
||||||
|| (mobj->type == MT_FAKESHIELD && !(mobj->target->player->kartstuff[k_fakeitem] & 1))
|
|| (mobj->type == MT_FAKESHIELD && !(mobj->target->player->kartstuff[k_fakeitem] & 1)))
|
||||||
|| (mobj->type == MT_BATTLEBALLOON && (mobj->target->player->kartstuff[k_balloon] <= mobj->threshold)))
|
{
|
||||||
|
P_RemoveMobj(mobj);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
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)
|
||||||
|
|| P_CheckDeathPitCollide(mobj)) // When in death state
|
||||||
|
{
|
||||||
|
P_RemoveMobj(mobj);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case MT_BATTLEBALLOON:
|
||||||
|
if (mobj->health > 0 && mobj->target && mobj->target->player && mobj->target->player->mo
|
||||||
|
&& mobj->target->player->health > 0 && !mobj->target->player->spectator)
|
||||||
|
{
|
||||||
|
fixed_t rad = 32*mobj->target->scale;
|
||||||
|
fixed_t offz;
|
||||||
|
angle_t ang, diff;
|
||||||
|
|
||||||
|
if (!((mobj->target->player-players) & 1))
|
||||||
|
ang = (FixedAngle(mobj->info->speed) * -1);
|
||||||
|
else
|
||||||
|
ang = FixedAngle(mobj->info->speed);
|
||||||
|
|
||||||
|
if (mobj->target->player->kartstuff[k_balloon] <= 1)
|
||||||
|
diff = 0;
|
||||||
|
else
|
||||||
|
diff = FixedAngle(360*FRACUNIT/mobj->target->player->kartstuff[k_balloon]);
|
||||||
|
|
||||||
|
ang = (ang*leveltime) + (diff * (mobj->threshold-1));
|
||||||
|
|
||||||
|
// If the player is on the ceiling, then flip your items as well.
|
||||||
|
if (mobj->target->eflags & MFE_VERTICALFLIP)
|
||||||
|
{
|
||||||
|
mobj->eflags |= MFE_VERTICALFLIP;
|
||||||
|
offz = mobj->target->height / 2;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
mobj->eflags &= ~MFE_VERTICALFLIP;
|
||||||
|
offz = mobj->target->height / 5;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (mobj->target->flags2 & MF2_DONTDRAW)
|
||||||
|
mobj->flags2 |= MF2_DONTDRAW;
|
||||||
|
else
|
||||||
|
mobj->flags2 &= ~MF2_DONTDRAW;
|
||||||
|
|
||||||
|
if (mobj->target->eflags & MFE_VERTICALFLIP)
|
||||||
|
offz += 4*FRACUNIT;
|
||||||
|
else
|
||||||
|
offz -= 4*FRACUNIT;
|
||||||
|
|
||||||
|
if (mobj->tracer && mobj->tracer->player && mobj->tracer->player->mo
|
||||||
|
&& mobj->tracer->player->health > 0 && !mobj->tracer->player->spectator) // STOLEN
|
||||||
|
mobj->color = mobj->tracer->player->skincolor; // don't do star flashing for stolen balloons
|
||||||
|
else
|
||||||
|
mobj->color = mobj->target->color; // but do so if it belongs to you :B
|
||||||
|
|
||||||
|
if (mobj->target->player->kartstuff[k_balloon] <= 1)
|
||||||
|
P_SetMobjState(mobj, S_BATTLEBALLOON3);
|
||||||
|
else if (mobj->target->player->kartstuff[k_balloon] == 2)
|
||||||
|
P_SetMobjState(mobj, S_BATTLEBALLOON2);
|
||||||
|
else
|
||||||
|
P_SetMobjState(mobj, S_BATTLEBALLOON1);
|
||||||
|
|
||||||
|
// Shrink your items if the player shrunk too.
|
||||||
|
mobj->scale = mobj->target->scale;
|
||||||
|
|
||||||
|
P_UnsetThingPosition(mobj);
|
||||||
|
{
|
||||||
|
const angle_t fa = ang>>ANGLETOFINESHIFT;
|
||||||
|
mobj->x = mobj->target->x + FixedMul(FINECOSINE(fa), rad);
|
||||||
|
mobj->y = mobj->target->y + FixedMul(FINESINE(fa), rad);
|
||||||
|
mobj->z = mobj->target->z + offz;
|
||||||
|
P_SetThingPosition(mobj);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Was this so hard?
|
||||||
|
if (mobj->target->player->kartstuff[k_balloon] <= mobj->threshold)
|
||||||
{
|
{
|
||||||
P_RemoveMobj(mobj);
|
P_RemoveMobj(mobj);
|
||||||
return;
|
return;
|
||||||
|
@ -9400,7 +9455,7 @@ void P_SpawnPlayer(INT32 playernum)
|
||||||
overheadarrow->flags2 |= MF2_DONTDRAW;
|
overheadarrow->flags2 |= MF2_DONTDRAW;
|
||||||
P_SetScale(overheadarrow, mobj->destscale);
|
P_SetScale(overheadarrow, mobj->destscale);
|
||||||
|
|
||||||
if (gametype != GT_RACE && (leveltime < 1 || p->kartstuff[k_balloon] > 0)) // srb2kart
|
if (gametype != GT_RACE && ((leveltime < 1 || D_NumPlayers() <= 1) || p->kartstuff[k_balloon] > 0)) // srb2kart
|
||||||
{
|
{
|
||||||
INT32 i;
|
INT32 i;
|
||||||
angle_t newangle, diff;
|
angle_t newangle, diff;
|
||||||
|
@ -9408,15 +9463,19 @@ void P_SpawnPlayer(INT32 playernum)
|
||||||
fixed_t newy;
|
fixed_t newy;
|
||||||
mobj_t *mo;
|
mobj_t *mo;
|
||||||
|
|
||||||
if (leveltime < 1) // Start of the map?
|
if (leveltime < 1 || D_NumPlayers() <= 1) // Start of the map?
|
||||||
p->kartstuff[k_balloon] = cv_kartballoons.value; // Reset those balloons!
|
p->kartstuff[k_balloon] = cv_kartballoons.value; // Reset those balloons!
|
||||||
|
|
||||||
|
if (p->kartstuff[k_balloon] <= 1)
|
||||||
|
diff = 0;
|
||||||
|
else
|
||||||
|
diff = FixedAngle(360*FRACUNIT/p->kartstuff[k_balloon]);
|
||||||
|
|
||||||
newangle = mobj->angle;
|
newangle = mobj->angle;
|
||||||
diff = FixedAngle(360*FRACUNIT/cv_kartballoons.value);
|
|
||||||
newx = mobj->x + P_ReturnThrustX(mobj, newangle + ANGLE_180, 64*FRACUNIT);
|
newx = mobj->x + P_ReturnThrustX(mobj, newangle + ANGLE_180, 64*FRACUNIT);
|
||||||
newy = mobj->y + P_ReturnThrustY(mobj, newangle + ANGLE_180, 64*FRACUNIT);
|
newy = mobj->y + P_ReturnThrustY(mobj, newangle + ANGLE_180, 64*FRACUNIT);
|
||||||
|
|
||||||
for (i = 0; i < cv_kartballoons.value; i++)
|
for (i = 0; i < p->kartstuff[k_balloon]; i++)
|
||||||
{
|
{
|
||||||
mo = P_SpawnMobj(newx, newy, mobj->z, MT_BATTLEBALLOON);
|
mo = P_SpawnMobj(newx, newy, mobj->z, MT_BATTLEBALLOON);
|
||||||
mo->threshold = i;
|
mo->threshold = i;
|
||||||
|
|
Loading…
Reference in a new issue