Remove Droptarget.
This commit is contained in:
parent
d69c999890
commit
1d6dd4125a
17 changed files with 6 additions and 385 deletions
|
|
@ -81,7 +81,7 @@
|
|||
#include <tracy/tracy/Tracy.hpp>
|
||||
|
||||
// Put hashes here to get them out of header hell.
|
||||
#define ASSET_HASH_MAIN_PK3 0x5279ddf80ca46f97
|
||||
#define ASSET_HASH_MAIN_PK3 0xae19fdf0a8e4d9a4
|
||||
#define ASSET_HASH_SRB2_SRB 0xf3ec1ea4d0eca4a9
|
||||
#define ASSET_HASH_GFX_KART 0xc91b0d43f5ba131f
|
||||
#define ASSET_HASH_TEXTURES_KART 0xb4211b2f32b6a291
|
||||
|
|
|
|||
|
|
@ -388,7 +388,6 @@ consvar_t cv_superring = CVAR_INIT ("superring", "On", CV_NETVAR|CV_CHEAT,
|
|||
consvar_t cv_landmine = CVAR_INIT ("landmine", "On", CV_NETVAR|CV_CHEAT, CV_OnOff, NULL);
|
||||
consvar_t cv_bubbleshield = CVAR_INIT ("bubbleshield", "On", CV_NETVAR|CV_CHEAT, CV_OnOff, NULL);
|
||||
consvar_t cv_flameshield = CVAR_INIT ("flameshield", "On", CV_NETVAR|CV_CHEAT, CV_OnOff, NULL);
|
||||
consvar_t cv_droptarget = CVAR_INIT ("droptarget", "On", CV_NETVAR|CV_CHEAT, CV_OnOff, NULL);
|
||||
|
||||
consvar_t cv_dualsneaker = CVAR_INIT ("dualsneaker", "On", CV_NETVAR|CV_CHEAT, CV_OnOff, NULL);
|
||||
consvar_t cv_triplesneaker = CVAR_INIT ("triplesneaker", "On", CV_NETVAR|CV_CHEAT, CV_OnOff, NULL);
|
||||
|
|
|
|||
|
|
@ -91,8 +91,7 @@ extern consvar_t
|
|||
cv_superring,
|
||||
cv_landmine,
|
||||
cv_bubbleshield,
|
||||
cv_flameshield,
|
||||
cv_droptarget;
|
||||
cv_flameshield;
|
||||
|
||||
extern consvar_t
|
||||
cv_dualsneaker,
|
||||
|
|
|
|||
|
|
@ -162,8 +162,7 @@ Run this macro, then #undef FOREACH afterward
|
|||
FOREACH (SUPERRING, 17),\
|
||||
FOREACH (LANDMINE, 18),\
|
||||
FOREACH (BUBBLESHIELD, 19),\
|
||||
FOREACH (FLAMESHIELD, 20),\
|
||||
FOREACH (DROPTARGET, 21)
|
||||
FOREACH (FLAMESHIELD, 20)
|
||||
|
||||
typedef enum
|
||||
{
|
||||
|
|
|
|||
|
|
@ -604,9 +604,6 @@ _(BOOMPARTICLE)
|
|||
|
||||
_(LANDMINE) // Land Mine
|
||||
|
||||
_(DROPTARGET) // Drop Target
|
||||
_(DROPTARGET_SHIELD)
|
||||
|
||||
_(BALLHOG) // Ballhog
|
||||
_(BALLHOGBOOM)
|
||||
|
||||
|
|
|
|||
|
|
@ -847,11 +847,6 @@ _(typri1)
|
|||
_(typri2)
|
||||
_(eggspr)
|
||||
|
||||
// SRB2Kart - Drop target sounds
|
||||
_(kdtrg1)
|
||||
_(kdtrg2)
|
||||
_(kdtrg3)
|
||||
|
||||
// Chaining Sound
|
||||
_(bstchn)
|
||||
|
||||
|
|
|
|||
|
|
@ -442,7 +442,6 @@ _(JAWZ) // Jawz
|
|||
_(SSMN) // SS Mine
|
||||
_(KRBM) // SS Mine BOOM
|
||||
_(LNDM) // Land Mine
|
||||
_(DTRG) // Drop Target
|
||||
_(BHOG) // Ballhog
|
||||
_(BHBM) // Ballhog BOOM
|
||||
_(SPBM) // Self-Propelled Bomb
|
||||
|
|
|
|||
|
|
@ -2815,10 +2815,6 @@ _(SLOWBOOM10)
|
|||
_(LANDMINE)
|
||||
_(LANDMINE_EXPLODE)
|
||||
|
||||
// Drop Target
|
||||
_(DROPTARGET)
|
||||
_(DROPTARGET_SPIN)
|
||||
|
||||
// Ballhog
|
||||
_(BALLHOG1)
|
||||
_(BALLHOG2)
|
||||
|
|
|
|||
|
|
@ -1028,73 +1028,6 @@ static void K_BotItemBallhog(player_t *player, ticcmd_t *cmd)
|
|||
}
|
||||
}
|
||||
|
||||
/*--------------------------------------------------
|
||||
static void K_BotItemDropTarget(const player_t *player, ticcmd_t *cmd, INT16 turnamt)
|
||||
|
||||
Item usage for Drop Target throwing.
|
||||
|
||||
Input Arguments:-
|
||||
player - Bot to do this for.
|
||||
cmd - Bot's ticcmd to edit.
|
||||
turnamt - How hard they currently are turning.
|
||||
|
||||
Return:-
|
||||
None
|
||||
--------------------------------------------------*/
|
||||
static void K_BotItemDropTarget(player_t *player, ticcmd_t *cmd, INT16 turnamt)
|
||||
{
|
||||
ZoneScoped;
|
||||
|
||||
const fixed_t topspeed = K_GetKartSpeed(player, false, true);
|
||||
fixed_t radius = FixedMul(1280 * mapobjectscale, K_GetKartGameSpeedScalar(gamespeed));
|
||||
SINT8 throwdir = -1;
|
||||
boolean tryLookback = false;
|
||||
UINT8 snipeMul = 2;
|
||||
player_t *target = NULL;
|
||||
|
||||
if (player->speed > topspeed)
|
||||
{
|
||||
radius = FixedMul(radius, FixedDiv(player->speed, topspeed));
|
||||
snipeMul = 3; // Confirm faster when you'll throw it with a bunch of extra speed!!
|
||||
}
|
||||
|
||||
cmd->bot.itemconfirm++;
|
||||
|
||||
if (abs(turnamt) >= KART_FULLTURN/2)
|
||||
{
|
||||
cmd->bot.itemconfirm += player->botvars.difficulty / 2;
|
||||
throwdir = -1;
|
||||
}
|
||||
|
||||
target = K_PlayerInCone(player, radius, 15, false);
|
||||
if (target != NULL)
|
||||
{
|
||||
K_ItemConfirmForTarget(player, cmd, target, player->botvars.difficulty * snipeMul);
|
||||
throwdir = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
target = K_PlayerInCone(player, radius, 15, true);
|
||||
|
||||
if (target != NULL)
|
||||
{
|
||||
K_ItemConfirmForTarget(player, cmd, target, player->botvars.difficulty);
|
||||
throwdir = -1;
|
||||
tryLookback = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (tryLookback == true && throwdir == -1)
|
||||
{
|
||||
cmd->buttons |= BT_LOOKBACK;
|
||||
}
|
||||
|
||||
if (player->botvars.itemconfirm > 10*TICRATE || player->bananadrag >= TICRATE)
|
||||
{
|
||||
K_BotGenericPressItem(player, cmd, throwdir);
|
||||
}
|
||||
}
|
||||
|
||||
/*--------------------------------------------------
|
||||
static void K_BotItemJawz(const player_t *player, ticcmd_t *cmd)
|
||||
|
||||
|
|
@ -1559,16 +1492,6 @@ void K_BotItemUsage(player_t *player, ticcmd_t *cmd, INT16 turnamt)
|
|||
case KITEM_BALLHOG:
|
||||
K_BotItemBallhog(player, cmd);
|
||||
break;
|
||||
case KITEM_DROPTARGET:
|
||||
if (!(player->itemflags & IF_ITEMOUT))
|
||||
{
|
||||
K_BotItemGenericTrapShield(player, cmd, turnamt, false);
|
||||
}
|
||||
else
|
||||
{
|
||||
K_BotItemDropTarget(player, cmd, turnamt);
|
||||
}
|
||||
break;
|
||||
case KITEM_THUNDERSHIELD:
|
||||
K_BotItemLightning(player, cmd);
|
||||
break;
|
||||
|
|
|
|||
|
|
@ -465,8 +465,6 @@ static BlockItReturn_t K_FindObjectsForNudging(mobj_t *thing)
|
|||
case MT_SSMINE:
|
||||
case MT_SSMINE_SHIELD:
|
||||
case MT_LANDMINE:
|
||||
case MT_DROPTARGET:
|
||||
case MT_DROPTARGET_SHIELD:
|
||||
case MT_BALLHOG:
|
||||
case MT_SPB:
|
||||
case MT_BUBBLESHIELDTRAP:
|
||||
|
|
|
|||
111
src/k_collide.c
111
src/k_collide.c
|
|
@ -430,113 +430,6 @@ boolean K_LandMineCollide(mobj_t *t1, mobj_t *t2)
|
|||
return true;
|
||||
}
|
||||
|
||||
boolean K_DropTargetCollide(mobj_t *t1, mobj_t *t2)
|
||||
{
|
||||
mobj_t *draggeddroptarget = (t1->type == MT_DROPTARGET_SHIELD) ? t1->target : NULL;
|
||||
|
||||
if (((t1->target == t2) || (t1->target == t2->target)) && ((t1->threshold > 0 && t2->type == MT_PLAYER) || (t2->type != MT_PLAYER && t2->threshold > 0)))
|
||||
return true;
|
||||
|
||||
if (t1->health <= 0 || t2->health <= 0)
|
||||
return true;
|
||||
|
||||
if (t2->player && (t2->player->hyudorotimer || t2->player->justbumped))
|
||||
return true;
|
||||
|
||||
// Intensify bumps if already spinning...
|
||||
P_Thrust(t1, R_PointToAngle2(t1->x, t1->y, t2->x, t2->y),
|
||||
(t1->reactiontime && !draggeddroptarget) ? 35*mapobjectscale : 20*mapobjectscale);
|
||||
|
||||
if (draggeddroptarget)
|
||||
{
|
||||
// "Pass through" the shock of the impact, part 1.
|
||||
t1->momx = t1->target->momx;
|
||||
t1->momy = t1->target->momy;
|
||||
t1->momz = t1->target->momz;
|
||||
}
|
||||
|
||||
{
|
||||
angle_t t2angle = R_PointToAngle2(t2->momx, t2->momy, 0, 0);
|
||||
angle_t t2deflect;
|
||||
fixed_t t1speed, t2speed;
|
||||
K_KartBouncing(t1, t2, false, false);
|
||||
t1speed = FixedHypot(t1->momx, t1->momy);
|
||||
t2speed = FixedHypot(t2->momx, t2->momy);
|
||||
|
||||
t2deflect = t2angle - R_PointToAngle2(0, 0, t2->momx, t2->momy);
|
||||
if (t2deflect > ANGLE_180)
|
||||
t2deflect = InvAngle(t2deflect);
|
||||
if (t2deflect < ANG10)
|
||||
P_InstaThrust(t2, t2angle, t2speed);
|
||||
|
||||
t1->angle = t1->old_angle = R_PointToAngle2(0, 0, t1->momx, t1->momy);
|
||||
|
||||
t1->reactiontime = 7*(t1speed+t2speed)/mapobjectscale;
|
||||
if (t1->reactiontime < 10)
|
||||
t1->reactiontime = 10;
|
||||
t1->threshold = 10;
|
||||
}
|
||||
|
||||
t1->renderflags &= ~RF_FULLDARK; // brightest on the bump
|
||||
|
||||
if (draggeddroptarget)
|
||||
{
|
||||
// "Pass through" the shock of the impact, part 2.
|
||||
draggeddroptarget->momx = t1->momx;
|
||||
draggeddroptarget->momy = t1->momy;
|
||||
draggeddroptarget->momz = t1->momz;
|
||||
|
||||
// Have the drop target travel between them.
|
||||
t1->momx = (t1->momx + t2->momx)/2;
|
||||
t1->momy = (t1->momy + t2->momy)/2;
|
||||
t1->momz = (t1->momz + t2->momz)/2;
|
||||
}
|
||||
|
||||
{
|
||||
mobj_t *ghost = P_SpawnGhostMobj(t1);
|
||||
|
||||
P_SetScale(ghost, 3*ghost->destscale/2);
|
||||
ghost->destscale = 15*ghost->destscale/2;
|
||||
ghost->fuse = 10;
|
||||
ghost->scalespeed = (ghost->destscale - ghost->scale)/ghost->fuse;
|
||||
}
|
||||
|
||||
t1->flags |= MF_SHOOTABLE;
|
||||
// The following sets t1->target to t2, so draggeddroptarget keeps it persisting...
|
||||
P_DamageMobj(t1, t2, (t2->target ? t2->target : t2), 1, DMG_NORMAL);
|
||||
t1->color = (t1->health > 1)
|
||||
? SKINCOLOR_GOLD
|
||||
: SKINCOLOR_CRIMSON;
|
||||
t1->flags &= ~MF_SHOOTABLE;
|
||||
|
||||
if (!t2->player)
|
||||
{
|
||||
t2->angle += ANGLE_180;
|
||||
if (t2->type == MT_JAWZ)
|
||||
P_SetTarget(&t2->tracer, t2->target); // Back to the source!
|
||||
t2->threshold = 10;
|
||||
}
|
||||
|
||||
if (t1->reactiontime > 1000) {
|
||||
S_StartSound(t2, sfx_kdtrg3);
|
||||
} else if (t1->reactiontime > 500) {
|
||||
S_StartSound(t2, sfx_kdtrg2);
|
||||
} else {
|
||||
S_StartSound(t2, sfx_kdtrg1);
|
||||
}
|
||||
|
||||
if (draggeddroptarget && draggeddroptarget->player)
|
||||
{
|
||||
// The following removes t1, be warned
|
||||
// (its newly assigned properties are moved across)
|
||||
K_DropHnextList(draggeddroptarget->player, true);
|
||||
// Do NOT modify or reference t1 after this line
|
||||
// I mean it! Do not even absentmindedly try it
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
static mobj_t *lightningSource;
|
||||
static fixed_t lightningDist;
|
||||
|
||||
|
|
@ -649,7 +542,7 @@ boolean K_BubbleShieldReflect(mobj_t *t1, mobj_t *t2)
|
|||
{
|
||||
mobj_t *owner = t1->player ? t1 : t1->target;
|
||||
|
||||
if (t2->target != owner || !t2->threshold || t2->type == MT_DROPTARGET)
|
||||
if (t2->target != owner || !t2->threshold)
|
||||
{
|
||||
if (!t2->momx && !t2->momy)
|
||||
{
|
||||
|
|
@ -677,7 +570,6 @@ boolean K_BubbleShieldCanReflect(mobj_t *t1, mobj_t *t2)
|
|||
return (t2->type == MT_ORBINAUT || t2->type == MT_JAWZ
|
||||
|| t2->type == MT_BANANA || t2->type == MT_EGGMANITEM || t2->type == MT_BALLHOG
|
||||
|| t2->type == MT_SSMINE || t2->type == MT_LANDMINE || t2->type == MT_SINK
|
||||
|| t2->type == MT_DROPTARGET
|
||||
|| t2->type == MT_KART_LEFTOVER
|
||||
|| (t2->type == MT_PLAYER && t1->target != t2));
|
||||
}
|
||||
|
|
@ -779,7 +671,6 @@ boolean K_SMKIceBlockCollide(mobj_t *t1, mobj_t *t2)
|
|||
if (t2->type == MT_BANANA || t2->type == MT_BANANA_SHIELD
|
||||
|| t2->type == MT_EGGMANITEM || t2->type == MT_EGGMANITEM_SHIELD
|
||||
|| t2->type == MT_SSMINE || t2->type == MT_SSMINE_SHIELD
|
||||
|| t2->type == MT_DROPTARGET_SHIELD
|
||||
|| t2->type == MT_ORBINAUT_SHIELD || t2->type == MT_JAWZ_SHIELD)
|
||||
return false;
|
||||
|
||||
|
|
|
|||
|
|
@ -15,7 +15,6 @@ boolean K_EggItemCollide(mobj_t *t1, mobj_t *t2);
|
|||
boolean K_MineCollide(mobj_t *t1, mobj_t *t2);
|
||||
boolean K_MineExplosionCollide(mobj_t *t1, mobj_t *t2);
|
||||
boolean K_LandMineCollide(mobj_t *t1, mobj_t *t2);
|
||||
boolean K_DropTargetCollide(mobj_t *t1, mobj_t *t2);
|
||||
void K_ThunderShieldAttack(mobj_t *actor, fixed_t size);
|
||||
|
||||
boolean K_BubbleShieldReflect(mobj_t *t1, mobj_t *t2);
|
||||
|
|
|
|||
|
|
@ -175,7 +175,6 @@ static patch_t *kp_superring[2];
|
|||
static patch_t *kp_landmine[2];
|
||||
static patch_t *kp_bubbleshield[2];
|
||||
static patch_t *kp_flameshield[2];
|
||||
static patch_t *kp_droptarget[2];
|
||||
|
||||
static patch_t *kp_check[6];
|
||||
|
||||
|
|
@ -457,7 +456,6 @@ void K_LoadKartHUDGraphics(void)
|
|||
HU_UpdatePatch(&kp_landmine[0], "K_ITLNDM");
|
||||
HU_UpdatePatch(&kp_bubbleshield[0], "K_ITBUBS");
|
||||
HU_UpdatePatch(&kp_flameshield[0], "K_ITFLMS");
|
||||
HU_UpdatePatch(&kp_droptarget[0], "K_ITDTRG");
|
||||
|
||||
// Splitscreen
|
||||
HU_UpdatePatch(&kp_itembg[2], "K_ISBG");
|
||||
|
|
@ -494,7 +492,6 @@ void K_LoadKartHUDGraphics(void)
|
|||
HU_UpdatePatch(&kp_landmine[1], "K_ISLNDM");
|
||||
HU_UpdatePatch(&kp_bubbleshield[1], "K_ISBUBS");
|
||||
HU_UpdatePatch(&kp_flameshield[1], "K_ISFLMS");
|
||||
HU_UpdatePatch(&kp_droptarget[1], "K_ISDTRG");
|
||||
|
||||
// CHECK indicators
|
||||
sprintf(buffer, "K_CHECKx");
|
||||
|
|
@ -642,8 +639,6 @@ const char *K_GetItemPatch(UINT8 item, boolean tiny)
|
|||
return (tiny ? "K_ISBUBS" : "K_ITBUBS");
|
||||
case KITEM_FLAMESHIELD:
|
||||
return (tiny ? "K_ISFLMS" : "K_ITFLMS");
|
||||
case KITEM_DROPTARGET:
|
||||
return (tiny ? "K_ISDTRG" : "K_ITDTRG");
|
||||
case KRITEM_DUALSNEAKER:
|
||||
return (tiny ? "K_ISSHOE" : "K_ITSHO2");
|
||||
case KRITEM_TRIPLESNEAKER:
|
||||
|
|
@ -688,7 +683,6 @@ static patch_t *K_GetCachedItemPatch(INT32 item, UINT8 offset)
|
|||
kp_landmine,
|
||||
kp_bubbleshield,
|
||||
kp_flameshield,
|
||||
kp_droptarget,
|
||||
};
|
||||
|
||||
if (item == KITEM_SAD || (item > KITEM_NONE && item < NUMKARTITEMS))
|
||||
|
|
|
|||
61
src/k_kart.c
61
src/k_kart.c
|
|
@ -228,7 +228,6 @@ void K_RegisterKartStuff(void)
|
|||
CV_RegisterVar(&cv_landmine);
|
||||
CV_RegisterVar(&cv_bubbleshield);
|
||||
CV_RegisterVar(&cv_flameshield);
|
||||
CV_RegisterVar(&cv_droptarget);
|
||||
|
||||
CV_RegisterVar(&cv_dualsneaker);
|
||||
CV_RegisterVar(&cv_triplesneaker);
|
||||
|
|
@ -412,7 +411,6 @@ consvar_t *KartItemCVars[NUMKARTRESULTS-1] =
|
|||
&cv_landmine,
|
||||
&cv_bubbleshield,
|
||||
&cv_flameshield,
|
||||
&cv_droptarget,
|
||||
&cv_dualsneaker,
|
||||
&cv_triplesneaker,
|
||||
&cv_triplebanana,
|
||||
|
|
@ -448,7 +446,6 @@ static UINT8 K_KartItemOddsRace[NUMKARTRESULTS-1][8] =
|
|||
{ 3, 0, 0, 0, 0, 0, 0, 0 }, // Land Mine
|
||||
{ 0, 1, 2, 1, 0, 0, 0, 0 }, // Bubble Shield
|
||||
{ 0, 0, 0, 0, 2, 5, 5, 0 }, // Flame Shield
|
||||
{ 1, 0, 0, 0, 0, 0, 0, 0 }, // Drop Target
|
||||
{ 0, 0, 3, 4, 3, 0, 0, 0 }, // Sneaker x2
|
||||
{ 0, 0, 0, 1, 5, 6, 3, 0 }, // Sneaker x3
|
||||
{ 0, 1, 1, 0, 0, 0, 0, 0 }, // Banana x3
|
||||
|
|
@ -481,7 +478,6 @@ static UINT8 K_KartItemOddsBattle[NUMKARTRESULTS][2] =
|
|||
{ 2, 0 }, // Land Mine
|
||||
{ 1, 0 }, // Bubble Shield
|
||||
{ 1, 0 }, // Flame Shield
|
||||
{ 2, 0 }, // Drop Target
|
||||
{ 0, 0 }, // Sneaker x2
|
||||
{ 0, 1 }, // Sneaker x3
|
||||
{ 0, 0 }, // Banana x3
|
||||
|
|
@ -796,7 +792,6 @@ INT32 K_KartGetItemOdds(
|
|||
case KITEM_ROCKETSNEAKER:
|
||||
case KITEM_JAWZ:
|
||||
case KITEM_LANDMINE:
|
||||
case KITEM_DROPTARGET:
|
||||
case KITEM_BALLHOG:
|
||||
case KRITEM_TRIPLESNEAKER:
|
||||
case KRITEM_TRIPLEORBINAUT:
|
||||
|
|
@ -990,7 +985,6 @@ INT32 K_KartGetLegacyItemOdds(UINT8 pos, SINT8 item, fixed_t mashed, boolean spb
|
|||
case KITEM_JAWZ:
|
||||
case KITEM_BALLHOG:
|
||||
case KITEM_LANDMINE:
|
||||
case KITEM_DROPTARGET:
|
||||
case KRITEM_TRIPLESNEAKER:
|
||||
case KRITEM_TRIPLEBANANA:
|
||||
case KRITEM_TENFOLDBANANA:
|
||||
|
|
@ -1865,10 +1859,6 @@ fixed_t K_GetMobjWeight(mobj_t *mobj, mobj_t *against)
|
|||
else
|
||||
weight += 3*FRACUNIT;
|
||||
break;
|
||||
case MT_DROPTARGET:
|
||||
case MT_DROPTARGET_SHIELD:
|
||||
if (against->player)
|
||||
weight = K_PlayerWeight(against, NULL);
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
|
@ -1896,7 +1886,6 @@ boolean K_KartBouncing(mobj_t *mobj1, mobj_t *mobj2, boolean bounce, boolean sol
|
|||
|| (mobj2->player && mobj2->player->respawn))
|
||||
return false;
|
||||
|
||||
if (mobj1->type != MT_DROPTARGET && mobj1->type != MT_DROPTARGET_SHIELD)
|
||||
{ // Don't bump if you're flashing
|
||||
INT32 flash;
|
||||
|
||||
|
|
@ -3282,9 +3271,7 @@ boolean K_ItemMobjAllowedtoWaterRun(mobj_t *item)
|
|||
case MT_ORBINAUT:
|
||||
case MT_JAWZ:
|
||||
case MT_JAWZ_DUD:
|
||||
case MT_DROPTARGET:
|
||||
case MT_BANANA_SHIELD:
|
||||
case MT_DROPTARGET_SHIELD:
|
||||
case MT_SSMINE_SHIELD:
|
||||
return true;
|
||||
break;
|
||||
|
|
@ -3301,7 +3288,6 @@ boolean K_WaterRun(mobj_t *mobj)
|
|||
switch (mobj->type)
|
||||
{
|
||||
case MT_BANANA_SHIELD:
|
||||
case MT_DROPTARGET_SHIELD:
|
||||
case MT_SSMINE_SHIELD:
|
||||
if (mobj->target && (mobj->target->flags2 & MF2_WATERRUN))
|
||||
return true;
|
||||
|
|
@ -5130,12 +5116,6 @@ mobj_t *K_ThrowKartItem(player_t *player, boolean missile, mobjtype_t mapthing,
|
|||
// Shoot forward
|
||||
mo = K_SpawnKartMissile(player->mo, mapthing, player->mo->angle, 0, PROJSPEED);
|
||||
}
|
||||
|
||||
if (mapthing == MT_DROPTARGET && mo)
|
||||
{
|
||||
mo->reactiontime = TICRATE/2;
|
||||
P_SetMobjState(mo, mo->info->painstate);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
|
|
@ -5631,8 +5611,7 @@ static void K_DoShrink(player_t *user)
|
|||
|
||||
if (mobj->type == MT_BANANA_SHIELD || mobj->type == MT_JAWZ_SHIELD ||
|
||||
mobj->type == MT_SSMINE_SHIELD || mobj->type == MT_EGGMANITEM_SHIELD ||
|
||||
mobj->type == MT_SINK_SHIELD || mobj->type == MT_ORBINAUT_SHIELD ||
|
||||
mobj->type == MT_DROPTARGET_SHIELD)
|
||||
mobj->type == MT_SINK_SHIELD || mobj->type == MT_ORBINAUT_SHIELD)
|
||||
{
|
||||
if (mobj->target && mobj->target->player)
|
||||
{
|
||||
|
|
@ -5894,11 +5873,6 @@ void K_DropHnextList(player_t *player, boolean keepshields)
|
|||
dropall = false;
|
||||
type = MT_SSMINE;
|
||||
break;
|
||||
case MT_DROPTARGET_SHIELD:
|
||||
orbit = false;
|
||||
dropall = false;
|
||||
type = MT_DROPTARGET;
|
||||
break;
|
||||
case MT_EGGMANITEM_SHIELD:
|
||||
orbit = false;
|
||||
type = MT_EGGMANITEM;
|
||||
|
|
@ -6470,7 +6444,6 @@ static void K_MoveHeldObjects(player_t *player)
|
|||
break;
|
||||
case MT_BANANA_SHIELD: // Kart trailing items
|
||||
case MT_SSMINE_SHIELD:
|
||||
case MT_DROPTARGET_SHIELD:
|
||||
case MT_EGGMANITEM_SHIELD:
|
||||
case MT_SINK_SHIELD:
|
||||
{
|
||||
|
|
@ -6495,10 +6468,6 @@ static void K_MoveHeldObjects(player_t *player)
|
|||
// Decided that this should use their "canon" color.
|
||||
cur->color = SKINCOLOR_BLACK;
|
||||
}
|
||||
else if (cur->type == MT_DROPTARGET_SHIELD)
|
||||
{
|
||||
cur->renderflags = (cur->renderflags|RF_FULLBRIGHT) ^ RF_FULLDARK; // the difference between semi and fullbright
|
||||
}
|
||||
|
||||
cur->flags &= ~MF_NOCLIPTHING;
|
||||
|
||||
|
|
@ -10343,34 +10312,6 @@ void K_MoveKartPlayer(player_t *player, boolean onground)
|
|||
player->botvars.itemconfirm = 0;
|
||||
}
|
||||
break;
|
||||
case KITEM_DROPTARGET:
|
||||
if (ATTACK_IS_DOWN && !HOLDING_ITEM && NO_HYUDORO)
|
||||
{
|
||||
mobj_t *mo;
|
||||
K_SetItemOut(player);
|
||||
S_StartSound(player->mo, sfx_s254);
|
||||
mo = P_SpawnMobj(player->mo->x, player->mo->y, player->mo->z, MT_DROPTARGET_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);
|
||||
}
|
||||
player->botvars.itemconfirm = 0;
|
||||
}
|
||||
else if (ATTACK_IS_DOWN && (player->itemflags & IF_ITEMOUT))
|
||||
{
|
||||
player->itemamount--;
|
||||
K_ThrowKartItem(player, (player->throwdir > 0), MT_DROPTARGET, -1, 0);
|
||||
K_PlayAttackTaunt(player->mo);
|
||||
player->itemflags &= ~IF_ITEMOUT;
|
||||
K_UpdateHnextList(player, true);
|
||||
player->botvars.itemconfirm = 0;
|
||||
}
|
||||
break;
|
||||
case KITEM_BALLHOG:
|
||||
if (ATTACK_IS_DOWN && !HOLDING_ITEM && NO_HYUDORO)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -1317,7 +1317,6 @@ void P_KillMobj(mobj_t *target, mobj_t *inflictor, mobj_t *source, UINT8 damaget
|
|||
&& !(target->type == MT_ORBINAUT || target->type == MT_ORBINAUT_SHIELD
|
||||
|| target->type == MT_JAWZ || target->type == MT_JAWZ_DUD || target->type == MT_JAWZ_SHIELD
|
||||
|| target->type == MT_BANANA || target->type == MT_BANANA_SHIELD
|
||||
|| target->type == MT_DROPTARGET || target->type == MT_DROPTARGET_SHIELD
|
||||
|| target->type == MT_EGGMANITEM || target->type == MT_EGGMANITEM_SHIELD
|
||||
|| target->type == MT_BALLHOG || target->type == MT_SPB)) // kart dead items
|
||||
target->flags |= MF_NOGRAVITY; // Don't drop Tails 03-08-2000
|
||||
|
|
@ -1359,7 +1358,6 @@ void P_KillMobj(mobj_t *target, mobj_t *inflictor, mobj_t *source, UINT8 damaget
|
|||
{
|
||||
if ((target->type == MT_BANANA_SHIELD && target->target->player->itemtype == KITEM_BANANA) // trail items
|
||||
|| (target->type == MT_SSMINE_SHIELD && target->target->player->itemtype == KITEM_MINE)
|
||||
|| (target->type == MT_DROPTARGET_SHIELD && target->target->player->itemtype == KITEM_DROPTARGET)
|
||||
|| (target->type == MT_SINK_SHIELD && target->target->player->itemtype == KITEM_KITCHENSINK))
|
||||
{
|
||||
if (target->movedir != 0 && target->movedir < (UINT16)target->target->player->itemamount)
|
||||
|
|
@ -1753,11 +1751,6 @@ void P_KillMobj(mobj_t *target, mobj_t *inflictor, mobj_t *source, UINT8 damaget
|
|||
}
|
||||
break;
|
||||
|
||||
case MT_DROPTARGET:
|
||||
case MT_DROPTARGET_SHIELD:
|
||||
target->fuse = 1;
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
|
|
|||
35
src/p_map.c
35
src/p_map.c
|
|
@ -717,41 +717,6 @@ static BlockItReturn_t PIT_CheckThing(mobj_t *thing)
|
|||
if (thing->type == MT_BUBBLESHIELD || g_tm.thing->type == MT_BUBBLESHIELD)
|
||||
return BMIT_CONTINUE;
|
||||
|
||||
// Droptarget reflect
|
||||
if ((thing->type == MT_DROPTARGET || thing->type == MT_DROPTARGET_SHIELD)
|
||||
&& (g_tm.thing->type == MT_ORBINAUT || g_tm.thing->type == MT_JAWZ || g_tm.thing->type == MT_JAWZ_DUD
|
||||
|| g_tm.thing->type == MT_BANANA || g_tm.thing->type == MT_EGGMANITEM || g_tm.thing->type == MT_BALLHOG
|
||||
|| g_tm.thing->type == MT_SSMINE || g_tm.thing->type == MT_LANDMINE || g_tm.thing->type == MT_SINK
|
||||
|| (g_tm.thing->type == MT_PLAYER)))
|
||||
{
|
||||
// see if it went over / under
|
||||
if (g_tm.thing->z > thing->z + thing->height)
|
||||
return BMIT_CONTINUE; // overhead
|
||||
if (g_tm.thing->z + g_tm.thing->height < thing->z)
|
||||
return BMIT_CONTINUE; // underneath
|
||||
|
||||
return K_DropTargetCollide(thing, g_tm.thing) ? BMIT_CONTINUE : BMIT_ABORT;
|
||||
}
|
||||
else if ((g_tm.thing->type == MT_DROPTARGET || g_tm.thing->type == MT_DROPTARGET_SHIELD)
|
||||
&& (thing->type == MT_ORBINAUT || thing->type == MT_JAWZ || thing->type == MT_JAWZ_DUD
|
||||
|| thing->type == MT_BANANA || thing->type == MT_EGGMANITEM || thing->type == MT_BALLHOG
|
||||
|| thing->type == MT_SSMINE || thing->type == MT_LANDMINE || thing->type == MT_SINK
|
||||
|| (thing->type == MT_PLAYER)))
|
||||
{
|
||||
// see if it went over / under
|
||||
if (g_tm.thing->z > thing->z + thing->height)
|
||||
return BMIT_CONTINUE; // overhead
|
||||
if (g_tm.thing->z + g_tm.thing->height < thing->z)
|
||||
return BMIT_CONTINUE; // underneath
|
||||
|
||||
return K_DropTargetCollide(g_tm.thing, thing) ? BMIT_CONTINUE : BMIT_ABORT;
|
||||
}
|
||||
|
||||
// double make sure drop targets won't collide with anything else
|
||||
if (thing->type == MT_DROPTARGET || g_tm.thing->type == MT_DROPTARGET
|
||||
|| thing->type == MT_DROPTARGET_SHIELD || g_tm.thing->type == MT_DROPTARGET_SHIELD)
|
||||
return BMIT_CONTINUE;
|
||||
|
||||
if (g_tm.thing->type == MT_ORBINAUT || g_tm.thing->type == MT_JAWZ || g_tm.thing->type == MT_JAWZ_DUD
|
||||
|| g_tm.thing->type == MT_ORBINAUT_SHIELD || g_tm.thing->type == MT_JAWZ_SHIELD)
|
||||
{
|
||||
|
|
|
|||
69
src/p_mobj.c
69
src/p_mobj.c
|
|
@ -1219,7 +1219,6 @@ fixed_t P_GetMobjGravity(mobj_t *mo)
|
|||
case MT_EGGMANITEM:
|
||||
case MT_SSMINE:
|
||||
case MT_LANDMINE:
|
||||
case MT_DROPTARGET:
|
||||
case MT_SINK:
|
||||
if (mo->extravalue2 > 0)
|
||||
{
|
||||
|
|
@ -1801,12 +1800,6 @@ void P_XYMovement(mobj_t *mo)
|
|||
S_StartSound(mo, sfx_s3k44); // Bubble bounce
|
||||
break;
|
||||
|
||||
case MT_DROPTARGET:
|
||||
// This prevents an item thrown at a wall from
|
||||
// phasing through you on its return.
|
||||
mo->threshold = 0;
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
|
@ -6498,7 +6491,6 @@ boolean P_IsKartFieldItem(INT32 type)
|
|||
case MT_BALLHOG:
|
||||
case MT_BUBBLESHIELDTRAP:
|
||||
case MT_SINK:
|
||||
case MT_DROPTARGET:
|
||||
return true;
|
||||
|
||||
default:
|
||||
|
|
@ -6512,7 +6504,6 @@ boolean P_IsKartItem(INT32 type)
|
|||
{
|
||||
case MT_EGGMANITEM_SHIELD:
|
||||
case MT_BANANA_SHIELD:
|
||||
case MT_DROPTARGET_SHIELD:
|
||||
case MT_ORBINAUT_SHIELD:
|
||||
case MT_JAWZ_SHIELD:
|
||||
case MT_SSMINE_SHIELD:
|
||||
|
|
@ -7814,7 +7805,6 @@ static boolean P_MobjDeadThink(mobj_t *mobj)
|
|||
case MT_BANANA:
|
||||
case MT_EGGMANITEM:
|
||||
case MT_LANDMINE:
|
||||
//case MT_DROPTARGET:
|
||||
case MT_SPB:
|
||||
if (P_IsObjectOnGround(mobj))
|
||||
{
|
||||
|
|
@ -8600,51 +8590,6 @@ static boolean P_MobjRegularThink(mobj_t *mobj)
|
|||
mobj->health = 1;
|
||||
}
|
||||
|
||||
if (mobj->threshold > 0)
|
||||
mobj->threshold--;
|
||||
break;
|
||||
case MT_DROPTARGET:
|
||||
if (mobj->reactiontime > 0)
|
||||
{
|
||||
// Slippery tipping mode.
|
||||
INT32 slippytip = 1 + (mobj->reactiontime/2);
|
||||
if (slippytip > 64)
|
||||
slippytip = 64;
|
||||
else if (slippytip < 8)
|
||||
slippytip = 8;
|
||||
if (!(mobj->health & 1) == !(mobj->flags2 & MF2_AMBUSH))
|
||||
{
|
||||
slippytip = -slippytip;
|
||||
}
|
||||
mobj->angle += slippytip*ANG2;
|
||||
|
||||
mobj->friction = ((2*ORIG_FRICTION)+FRACUNIT)/3; // too low still?
|
||||
|
||||
/*if (mobj->momx || mobj->momy || mobj->momz)
|
||||
{
|
||||
mobj_t *ghost = P_SpawnGhostMobj(mobj);
|
||||
ghost->colorized = true; // already has color!
|
||||
}*/
|
||||
|
||||
if (!--mobj->reactiontime)
|
||||
{
|
||||
P_SetMobjState(mobj, mobj->info->spawnstate);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// Time to stop, ramp up the friction...
|
||||
mobj->friction = ORIG_FRICTION/4; // too high still?
|
||||
}
|
||||
|
||||
mobj->renderflags = (mobj->renderflags|RF_FULLBRIGHT) ^ RF_FULLDARK; // the difference between semi and fullbright
|
||||
|
||||
if (P_AproxDistance(mobj->momx, mobj->momy) <= 14*mobj->scale)
|
||||
{
|
||||
// Not moving fast enough to water run.
|
||||
mobj->flags2 &= ~MF2_WATERRUN;
|
||||
}
|
||||
|
||||
if (mobj->threshold > 0)
|
||||
mobj->threshold--;
|
||||
break;
|
||||
|
|
@ -10396,8 +10341,7 @@ void P_MobjThinker(mobj_t *mobj)
|
|||
|| mobj->type == MT_BIGTUMBLEWEED
|
||||
|| mobj->type == MT_LITTLETUMBLEWEED
|
||||
|| mobj->type == MT_CANNONBALLDECOR
|
||||
|| mobj->type == MT_FALLINGROCK
|
||||
|| (mobj->type == MT_DROPTARGET && mobj->reactiontime))
|
||||
|| mobj->type == MT_FALLINGROCK)
|
||||
{
|
||||
P_TryMove(mobj, mobj->x, mobj->y, true, NULL); // Sets mo->standingslope correctly
|
||||
|
||||
|
|
@ -10696,11 +10640,6 @@ static void P_DefaultMobjShadowScale(mobj_t *thing)
|
|||
thing->shadowscale = 3*FRACUNIT/2;
|
||||
thing->whiteshadow = false;
|
||||
break;
|
||||
case MT_DROPTARGET:
|
||||
case MT_DROPTARGET_SHIELD:
|
||||
thing->shadowscale = 5*FRACUNIT/4;
|
||||
thing->whiteshadow = true;
|
||||
break;
|
||||
case MT_THUNDERSHIELD:
|
||||
case MT_BUBBLESHIELD:
|
||||
case MT_BUBBLESHIELDTRAP:
|
||||
|
|
@ -11161,12 +11100,6 @@ mobj_t *P_SpawnMobj(fixed_t x, fixed_t y, fixed_t z, mobjtype_t type)
|
|||
}
|
||||
}
|
||||
break;
|
||||
case MT_DROPTARGET:
|
||||
case MT_DROPTARGET_SHIELD:
|
||||
mobj->color = SKINCOLOR_LIME;
|
||||
mobj->colorized = true;
|
||||
mobj->renderflags |= RF_FULLBRIGHT;
|
||||
break;
|
||||
case MT_SMK_MOLE:
|
||||
mobj->reactiontime = P_RandomRange(0, 3*mobj->info->reactiontime/2); // Random delay on start of level
|
||||
break;
|
||||
|
|
|
|||
Loading…
Reference in a new issue