Balloon revamp

Supports arbitrary balloon counts now
This commit is contained in:
TehRealSalt 2017-11-01 18:46:35 -04:00
parent 4fce06d80e
commit cc01d2c3f0
8 changed files with 132 additions and 285 deletions

View File

@ -316,8 +316,9 @@ consvar_t cv_lightning = {"lightning", "On", CV_NETVAR|CV_CHEAT, CV_OnOff,
consvar_t cv_karthud = {"karthud", "Default", CV_SAVE|CV_CALL, karthud_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL};
consvar_t cv_kartcc = {"kartcc", "100cc", CV_NETVAR, kartcc_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL};
static CV_PossibleValue_t kartballoons_cons_t[] = {{1, "MIN"}, {5, "MAX"}, {0, NULL}};
static CV_PossibleValue_t kartballoons_cons_t[] = {{1, "MIN"}, {99, "MAX"}, {0, NULL}};
consvar_t cv_kartballoons = {"kartballoons", "3", CV_NETVAR, kartballoons_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL};
consvar_t cv_kartfrantic = {"kartfrantic", "Off", CV_NETVAR|CV_CHEAT, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL};
static CV_PossibleValue_t speedometer_cons_t[] = {{0, "Off"}, {1, "Kilometers"}, {2, "Miles"}, {3, "Fracunits"}, {0, NULL}};
consvar_t cv_speedometer = {"speedometer", "Kilometers", CV_SAVE, speedometer_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL}; // use tics in display

View File

@ -107,6 +107,7 @@ extern consvar_t cv_blueshell, cv_jaws, cv_fireflower, cv_tripleredshell, cv_lig
extern consvar_t cv_karthud;
extern consvar_t cv_kartcc;
extern consvar_t cv_kartballoons;
extern consvar_t cv_kartfrantic;
extern consvar_t cv_speedometer;
extern consvar_t cv_collideminimum;

View File

@ -6985,11 +6985,7 @@ static const char *const MOBJTYPE_LIST[] = { // array length left dynamic for s
"MT_SINK", // Kitchen Sink Stuff
"MT_SINKTRAIL",
"MT_BATTLEBALLOON1", // Battle Mode balloon stuff
"MT_BATTLEBALLOON2",
"MT_BATTLEBALLOON3",
"MT_BATTLEBALLOON4",
"MT_BATTLEBALLOON5",
"MT_BATTLEBALLOON", // Battle Mode balloon
"MT_LAKITU",

View File

@ -15139,115 +15139,7 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
S_NULL // raisestate
},
{ // MT_BATTLEBALLOON1
-1, // doomednum
S_BATTLEBALLOON1,// 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
5*FRACUNIT, // speed
8*FRACUNIT, // radius
16*FRACUNIT, // height
0, // display offset
100, // mass
1, // damage
sfx_None, // activesound
MF_NOCLIP|MF_NOCLIPHEIGHT|MF_NOGRAVITY|MF_SCENERY, // flags
S_NULL // raisestate
},
{ // MT_BATTLEBALLOON2
-1, // doomednum
S_BATTLEBALLOON1,// 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
5*FRACUNIT, // speed
8*FRACUNIT, // radius
16*FRACUNIT, // height
0, // display offset
100, // mass
1, // damage
sfx_None, // activesound
MF_NOCLIP|MF_NOCLIPHEIGHT|MF_NOGRAVITY|MF_SCENERY, // flags
S_NULL // raisestate
},
{ // MT_BATTLEBALLOON3
-1, // doomednum
S_BATTLEBALLOON1,// 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
5*FRACUNIT, // speed
8*FRACUNIT, // radius
16*FRACUNIT, // height
0, // display offset
100, // mass
1, // damage
sfx_None, // activesound
MF_NOCLIP|MF_NOCLIPHEIGHT|MF_NOGRAVITY|MF_SCENERY, // flags
S_NULL // raisestate
},
{ // MT_BATTLEBALLOON4
-1, // doomednum
S_BATTLEBALLOON1,// 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
5*FRACUNIT, // speed
8*FRACUNIT, // radius
16*FRACUNIT, // height
0, // display offset
100, // mass
1, // damage
sfx_None, // activesound
MF_NOCLIP|MF_NOCLIPHEIGHT|MF_NOGRAVITY|MF_SCENERY, // flags
S_NULL // raisestate
},
{ // MT_BATTLEBALLOON5
{ // MT_BATTLEBALLOON
-1, // doomednum
S_BATTLEBALLOON1,// spawnstate
1000, // spawnhealth

View File

@ -3977,11 +3977,7 @@ typedef enum mobj_type
MT_SINK, // Kitchen Sink Stuff
MT_SINKTRAIL,
MT_BATTLEBALLOON1, // Battle Mode balloons
MT_BATTLEBALLOON2,
MT_BATTLEBALLOON3,
MT_BATTLEBALLOON4,
MT_BATTLEBALLOON5,
MT_BATTLEBALLOON, // Battle Mode balloons
MT_LAKITU,

View File

@ -303,6 +303,7 @@ void K_RegisterKartStuff(void)
CV_RegisterVar(&cv_kartcc);
CV_RegisterVar(&cv_kartballoons);
CV_RegisterVar(&cv_kartfrantic);
CV_RegisterVar(&cv_speedometer);
CV_RegisterVar(&cv_collideminimum);
CV_RegisterVar(&cv_collidesoundnum);
@ -987,6 +988,12 @@ static void K_KartItemRouletteByDistance(player_t *player, ticcmd_t *cmd)
player->kartstuff[k_itemclose] = 0; // Reset the item window closer.
if (cv_kartfrantic.value) // Stupid items
{
pdis = (13*pdis/14); // multiply...
pdis += distvar; // then set everyone back another place...
}
if (gametype == GT_MATCH
|| gametype == GT_TEAMMATCH
|| gametype == GT_CTF) useodds = 0; // Battle Mode
@ -1636,23 +1643,12 @@ void K_SpinPlayer(player_t *player, mobj_t *source)
player->kartstuff[k_mushroomtimer] = 0;
player->kartstuff[k_driftboost] = 0;
if (gametype == GT_MATCH)
if (gametype != GT_RACE)
{
if (player->kartstuff[k_balloon] & 16)
player->kartstuff[k_balloon] &= ~16;
else if (player->kartstuff[k_balloon] & 8)
player->kartstuff[k_balloon] &= ~8;
else if (player->kartstuff[k_balloon] & 4)
player->kartstuff[k_balloon] &= ~4;
else if (player->kartstuff[k_balloon] & 2)
player->kartstuff[k_balloon] &= ~2;
else if (player->kartstuff[k_balloon] & 1)
{
player->kartstuff[k_balloon] &= ~1;
player->kartstuff[k_balloon]--;
if (player->kartstuff[k_balloon] <= 0)
CONS_Printf(M_GetText("%s lost all of their balloons!\n"), player_names[player-players]);
//P_DamageMobj(player->mo, NULL, NULL, 10000);
//return;
}
if (source && source->player && player != source->player)
P_AddPlayerScore(source->player, 1);
@ -1701,23 +1697,12 @@ void K_SquishPlayer(player_t *player, mobj_t *source)
player->kartstuff[k_mushroomtimer] = 0;
player->kartstuff[k_driftboost] = 0;
if (gametype == GT_MATCH)
if (gametype != GT_RACE)
{
if (player->kartstuff[k_balloon] & 16)
player->kartstuff[k_balloon] &= ~16;
else if (player->kartstuff[k_balloon] & 8)
player->kartstuff[k_balloon] &= ~8;
else if (player->kartstuff[k_balloon] & 4)
player->kartstuff[k_balloon] &= ~4;
else if (player->kartstuff[k_balloon] & 2)
player->kartstuff[k_balloon] &= ~2;
else if (player->kartstuff[k_balloon] & 1)
{
player->kartstuff[k_balloon] &= ~1;
player->kartstuff[k_balloon]--;
if (player->kartstuff[k_balloon] <= 0)
CONS_Printf(M_GetText("%s lost all of their balloons!\n"), player_names[player-players]);
//P_DamageMobj(player->mo, NULL, NULL, 10000);
//return;
}
if (source && source->player && player != source->player)
P_AddPlayerScore(source->player, 1);
@ -1755,23 +1740,12 @@ void K_ExplodePlayer(player_t *player, mobj_t *source) // A bit of a hack, we ju
player->kartstuff[k_mushroomtimer] = 0;
player->kartstuff[k_driftboost] = 0;
if (gametype == GT_MATCH)
if (gametype != GT_RACE)
{
if (player->kartstuff[k_balloon] & 16)
player->kartstuff[k_balloon] &= ~16;
else if (player->kartstuff[k_balloon] & 8)
player->kartstuff[k_balloon] &= ~8;
else if (player->kartstuff[k_balloon] & 4)
player->kartstuff[k_balloon] &= ~4;
else if (player->kartstuff[k_balloon] & 2)
player->kartstuff[k_balloon] &= ~2;
else if (player->kartstuff[k_balloon] & 1)
{
player->kartstuff[k_balloon] &= ~1;
player->kartstuff[k_balloon]--;
if (player->kartstuff[k_balloon] <= 0)
CONS_Printf(M_GetText("%s lost all of their balloons!\n"), player_names[player-players]);
//P_DamageMobj(player->mo, NULL, NULL, 10000);
//return;
}
if (source && source->player && player != source->player)
P_AddPlayerScore(source->player, 1);
@ -1801,6 +1775,84 @@ void K_ExplodePlayer(player_t *player, mobj_t *source) // A bit of a hack, we ju
return;
}
/*void K_StealBalloon(player_t *player, player_t *victim)
{
//(void) source;
if (gametype == GT_RACE)
return;
if (player->health <= 0 || victim->health <= 0)
return;
if (player == victim)
return;
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)
|| (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))
return;
victim->kartstuff[k_mushroomtimer] = 0;
victim->kartstuff[k_driftboost] = 0;
CONS_Printf(M_GetText("%s stole a balloon from %s!\n"), player_names[player-players], player_names[victim-players]);
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]--;
if (victim->kartstuff[k_balloon] <= 0)
CONS_Printf(M_GetText("%s lost all of their balloons!\n"), player_names[victim-players]);
P_AddPlayerScore(player, 1);
K_CheckBalloons();
player->kartstuff[k_spinouttype] = 1;
player->kartstuff[k_spinouttimer] = 2*TICRATE+(TICRATE/2);
player->kartstuff[k_spinout] = player->kartstuff[k_spinouttimer];
player->powers[pw_flashing] = flashingtics;
if (!(player->mo->state >= &states[S_KART_SPIN1] && player->mo->state <= &states[S_KART_SPIN8]))
P_SetPlayerMobjState(player->mo, S_KART_SPIN1);
player->kartstuff[k_spinouttype] = 0;
P_PlayRinglossSound(player->mo);
if (P_IsLocalPlayer(player))
{
quake.intensity = 64*FRACUNIT;
quake.time = 5;
}
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)
{
mobj_t *mobj;

View File

@ -2019,16 +2019,8 @@ void P_KillMobj(mobj_t *target, mobj_t *inflictor, mobj_t *source)
target->target->player->kartstuff[k_triplebanana] &= ~2;
else if (target->type == MT_TRIPLEBANANASHIELD3 && target->target->player->kartstuff[k_triplebanana] & 4)
target->target->player->kartstuff[k_triplebanana] &= ~4;
else if (target->type == MT_BATTLEBALLOON1 && target->target->player->kartstuff[k_balloon] & 1)
target->target->player->kartstuff[k_balloon] &= ~1;
else if (target->type == MT_BATTLEBALLOON2 && target->target->player->kartstuff[k_balloon] & 2)
target->target->player->kartstuff[k_balloon] &= ~2;
else if (target->type == MT_BATTLEBALLOON3 && target->target->player->kartstuff[k_balloon] & 4)
target->target->player->kartstuff[k_balloon] &= ~4;
else if (target->type == MT_BATTLEBALLOON4 && target->target->player->kartstuff[k_balloon] & 8)
target->target->player->kartstuff[k_balloon] &= ~8;
else if (target->type == MT_BATTLEBALLOON5 && target->target->player->kartstuff[k_balloon] & 16)
target->target->player->kartstuff[k_balloon] &= ~16;
else if (target->type == MT_BATTLEBALLOON && target->target->player->kartstuff[k_balloon] >= target->threshold)
target->target->player->kartstuff[k_triplebanana] = target->threshold-1;
}
//
@ -2751,18 +2743,14 @@ static void P_KillPlayer(player_t *player, mobj_t *source, INT32 damage)
HU_DoCEcho(va("%s\\is no longer super.\\\\\\\\", player_names[player-players]));
}*/
if (player->kartstuff[k_balloon])
if (gametype != GT_RACE)
{
if (player->kartstuff[k_balloon] & 16)
player->kartstuff[k_balloon] &= ~16;
else if (player->kartstuff[k_balloon] & 8)
player->kartstuff[k_balloon] &= ~8;
else if (player->kartstuff[k_balloon] & 4)
player->kartstuff[k_balloon] &= ~4;
else if (player->kartstuff[k_balloon] & 2)
player->kartstuff[k_balloon] &= ~2;
else if (player->kartstuff[k_balloon] & 1)
player->kartstuff[k_balloon] &= ~1;
player->kartstuff[k_balloon]--;
if (player->kartstuff[k_balloon] <= 0)
CONS_Printf(M_GetText("%s lost all of their balloons!\n"), player_names[player-players]);
K_CheckBalloons();
}
}

View File

@ -6582,11 +6582,7 @@ void P_MobjThinker(mobj_t *mobj)
case MT_TRIPLEBANANASHIELD1:
case MT_TRIPLEBANANASHIELD2:
case MT_TRIPLEBANANASHIELD3:
case MT_BATTLEBALLOON1:
case MT_BATTLEBALLOON2:
case MT_BATTLEBALLOON3:
case MT_BATTLEBALLOON4:
case MT_BATTLEBALLOON5:
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)
{
@ -6595,7 +6591,7 @@ void P_MobjThinker(mobj_t *mobj)
if (mobj->type == MT_BANANASHIELD || mobj->type == MT_TRIPLEBANANASHIELD1 || mobj->type == MT_TRIPLEBANANASHIELD2 || mobj->type == MT_TRIPLEBANANASHIELD3)
radius = 64*mobj->target->scale;
else if (mobj->type == MT_BATTLEBALLOON1 || mobj->type == MT_BATTLEBALLOON2 || mobj->type == MT_BATTLEBALLOON3 || mobj->type == MT_BATTLEBALLOON4 || mobj->type == MT_BATTLEBALLOON5)
else if (mobj->type == MT_BATTLEBALLOON)
radius = 32*mobj->target->scale;
else
radius = 56*mobj->target->scale;
@ -6603,10 +6599,8 @@ void P_MobjThinker(mobj_t *mobj)
//mobj->angle += FixedAngle(12*FRACUNIT); // mobj's actual speed.
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_BATTLEBALLOON1 || mobj->type == MT_BATTLEBALLOON2 || mobj->type == MT_BATTLEBALLOON3
|| mobj->type == MT_BATTLEBALLOON4 || mobj->type == MT_BATTLEBALLOON5)
if ((mobj->type == MT_BATTLEBALLOON1 || mobj->type == MT_BATTLEBALLOON2 || mobj->type == MT_BATTLEBALLOON3
|| mobj->type == MT_BATTLEBALLOON4 || mobj->type == MT_BATTLEBALLOON5) && !((mobj->target->player-players) & 1))
|| mobj->type == MT_BATTLEBALLOON)
if ((mobj->type == MT_BATTLEBALLOON) && !((mobj->target->player-players) & 1))
mobj->angle -= FixedAngle(mobj->info->speed);
else
mobj->angle += FixedAngle(mobj->info->speed);
@ -6629,14 +6623,13 @@ void P_MobjThinker(mobj_t *mobj)
HEIGHT = mobj->target->height / 5;
}
if (mobj->type == MT_BATTLEBALLOON1 || mobj->type == MT_BATTLEBALLOON2 || mobj->type == MT_BATTLEBALLOON3
|| mobj->type == MT_BATTLEBALLOON4 || mobj->type == MT_BATTLEBALLOON5)
if (mobj->type == MT_BATTLEBALLOON)
{
mobj->color = mobj->target->color;
if (!(mobj->target->player->kartstuff[k_balloon] & 2))
if (mobj->target->player->kartstuff[k_balloon] <= 1)
P_SetMobjState(mobj, S_BATTLEBALLOON3);
else if (!(mobj->target->player->kartstuff[k_balloon] & 4))
else if (mobj->target->player->kartstuff[k_balloon] == 2)
P_SetMobjState(mobj, S_BATTLEBALLOON2);
if (mobj->target->flags2 & MF2_DONTDRAW)
@ -6677,11 +6670,7 @@ void P_MobjThinker(mobj_t *mobj)
|| (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_FAKESHIELD && !(mobj->target->player->kartstuff[k_fakeitem] & 1))
|| (mobj->type == MT_BATTLEBALLOON1 && !(mobj->target->player->kartstuff[k_balloon] & 1))
|| (mobj->type == MT_BATTLEBALLOON2 && !(mobj->target->player->kartstuff[k_balloon] & 2))
|| (mobj->type == MT_BATTLEBALLOON3 && !(mobj->target->player->kartstuff[k_balloon] & 4))
|| (mobj->type == MT_BATTLEBALLOON4 && !(mobj->target->player->kartstuff[k_balloon] & 8))
|| (mobj->type == MT_BATTLEBALLOON5 && !(mobj->target->player->kartstuff[k_balloon] & 16)))
|| (mobj->type == MT_BATTLEBALLOON && (mobj->target->player->kartstuff[k_balloon] <= mobj->threshold)))
{
P_RemoveMobj(mobj);
return;
@ -8555,8 +8544,7 @@ mobj_t *P_SpawnMobj(fixed_t x, fixed_t y, fixed_t z, mobjtype_t type)
case MT_TRIPLEGREENSHIELD1: case MT_TRIPLEGREENSHIELD2: case MT_TRIPLEGREENSHIELD3:
case MT_REDITEM: case MT_REDSHIELD: case MT_REDITEMDUD:
case MT_TRIPLEREDSHIELD1: case MT_TRIPLEREDSHIELD2: case MT_TRIPLEREDSHIELD3:
case MT_BATTLEBALLOON1: case MT_BATTLEBALLOON2: case MT_BATTLEBALLOON3:
case MT_BATTLEBALLOON4: case MT_BATTLEBALLOON5: case MT_FIREBALL:
case MT_BATTLEBALLOON: case MT_FIREBALL:
case MT_FAKEITEM: case MT_FAKESHIELD:
case MT_BOMBITEM: case MT_BOMBSHIELD:
P_SpawnShadowMobj(mobj);
@ -9414,98 +9402,31 @@ void P_SpawnPlayer(INT32 playernum)
if (gametype != GT_RACE && (leveltime < 1 || p->kartstuff[k_balloon] > 0)) // srb2kart
{
INT32 i;
angle_t newangle, diff;
fixed_t newx;
fixed_t newy;
mobj_t *mo, *mo2, *mo3, *mo4, *mo5;
mobj_t *mo;
if (leveltime < 1) // Start of the map?
{
p->kartstuff[k_balloon] = 0; // Reset those balloons!
switch (cv_kartballoons.value)
{
case 5:
p->kartstuff[k_balloon] |= 0x16;
case 4: // Fallthru's are intentional
p->kartstuff[k_balloon] |= 0x08;
case 3:
p->kartstuff[k_balloon] |= 0x04;
case 2:
p->kartstuff[k_balloon] |= 0x02;
case 1:
p->kartstuff[k_balloon] |= 0x01;
break;
default:
p->kartstuff[k_balloon] = 0x01|0x02|0x04; // 3 balloons
break;
}
}
p->kartstuff[k_balloon] = cv_kartballoons.value; // Reset those balloons!
newangle = mobj->angle;
diff = FixedAngle(360*FRACUNIT/cv_kartballoons.value);
newx = mobj->x + P_ReturnThrustX(mobj, newangle + ANGLE_180, 64*FRACUNIT);
newy = mobj->y + P_ReturnThrustY(mobj, newangle + ANGLE_180, 64*FRACUNIT);
mo = P_SpawnMobj(newx, newy, mobj->z, MT_BATTLEBALLOON1);
mo->threshold = 10;
P_SetTarget(&mo->target, mobj);
mo->angle = 0;
mo->color = mobj->color;
if (mobj->flags2 & MF2_DONTDRAW)
mo->flags2 |= MF2_DONTDRAW;
else
mo->flags2 &= ~MF2_DONTDRAW;
if (p->kartstuff[k_balloon] & 2)
for (i = 0; i < cv_kartballoons.value; i++)
{
mo2 = P_SpawnMobj(newx, newy, mobj->z, MT_BATTLEBALLOON2);
mo2->threshold = 10;
P_SetTarget(&mo2->target, mobj);
mo2->angle = diff;
mo2->color = mobj->color;
mo = P_SpawnMobj(newx, newy, mobj->z, MT_BATTLEBALLOON);
mo->threshold = i;
P_SetTarget(&mo->target, mobj);
mo->angle = (diff * (i-1));
mo->color = mobj->color;
if (mobj->flags2 & MF2_DONTDRAW)
mo2->flags2 |= MF2_DONTDRAW;
mo->flags2 |= MF2_DONTDRAW;
else
mo2->flags2 &= ~MF2_DONTDRAW;
}
if (p->kartstuff[k_balloon] & 4)
{
mo3 = P_SpawnMobj(newx, newy, mobj->z, MT_BATTLEBALLOON3);
mo3->threshold = 10;
P_SetTarget(&mo3->target, mobj);
mo3->angle = diff*2;
mo3->color = mobj->color;
if (mobj->flags2 & MF2_DONTDRAW)
mo3->flags2 |= MF2_DONTDRAW;
else
mo3->flags2 &= ~MF2_DONTDRAW;
}
if (p->kartstuff[k_balloon] & 8)
{
mo4 = P_SpawnMobj(newx, newy, mobj->z, MT_BATTLEBALLOON4);
mo4->threshold = 10;
P_SetTarget(&mo4->target, mobj);
mo4->angle = diff*3;
mo4->color = mobj->color;
if (mobj->flags2 & MF2_DONTDRAW)
mo4->flags2 |= MF2_DONTDRAW;
else
mo4->flags2 &= ~MF2_DONTDRAW;
}
if (p->kartstuff[k_balloon] & 16)
{
mo5 = P_SpawnMobj(newx, newy, mobj->z, MT_BATTLEBALLOON5);
mo5->threshold = 10;
P_SetTarget(&mo5->target, mobj);
mo5->angle = diff*4;
mo5->color = mobj->color;
if (mobj->flags2 & MF2_DONTDRAW)
mo5->flags2 |= MF2_DONTDRAW;
else
mo5->flags2 &= ~MF2_DONTDRAW;
mo->flags2 &= ~MF2_DONTDRAW;
}
}
}