mirror of
https://github.com/KartKrewDev/RingRacers.git
synced 2026-01-10 08:44:25 +00:00
Monitors: for 6 seconds, dropped items can only be picked up by the player who destroyed the monitor
- Paper items colorize to player color
- Color flickers back to normal 1 second before the item
can be picked up by anyone
- If a player who can't pick it up steps on the paper
item, that player becomes shadowed
This commit is contained in:
parent
9cd426dd3d
commit
91fdba650f
4 changed files with 29 additions and 4 deletions
|
|
@ -95,7 +95,7 @@ void Obj_MonitorThink(mobj_t *monitor);
|
|||
void Obj_MonitorPartThink(mobj_t *part);
|
||||
fixed_t Obj_MonitorGetDamage(mobj_t *monitor, mobj_t *inflictor, UINT8 damagetype);
|
||||
void Obj_MonitorOnDamage(mobj_t *monitor, mobj_t *inflictor, INT32 damage);
|
||||
void Obj_MonitorOnDeath(mobj_t *monitor);
|
||||
void Obj_MonitorOnDeath(mobj_t *monitor, mobj_t *source);
|
||||
void Obj_MonitorShardThink(mobj_t *shard);
|
||||
UINT32 Obj_MonitorGetEmerald(const mobj_t *monitor);
|
||||
void Obj_MonitorSetItemSpot(mobj_t *monitor, mobj_t *spot);
|
||||
|
|
|
|||
|
|
@ -670,7 +670,9 @@ Obj_MonitorOnDamage
|
|||
}
|
||||
|
||||
void
|
||||
Obj_MonitorOnDeath (mobj_t *monitor)
|
||||
Obj_MonitorOnDeath
|
||||
( mobj_t * monitor,
|
||||
mobj_t * source)
|
||||
{
|
||||
const UINT8 itemcount = get_monitor_itemcount(monitor);
|
||||
const angle_t ang = ANGLE_MAX / itemcount;
|
||||
|
|
@ -686,13 +688,21 @@ Obj_MonitorOnDeath (mobj_t *monitor)
|
|||
const SINT8 result = get_item_result();
|
||||
const UINT32 localseed = restore_item_rng(sharedseed);
|
||||
|
||||
adjust_monitor_drop(monitor,
|
||||
mobj_t *drop = adjust_monitor_drop(monitor,
|
||||
K_FlingPaperItem(
|
||||
monitor->x, monitor->y, monitor->z + (128 * mapobjectscale * flip),
|
||||
i * ang, flip,
|
||||
K_ItemResultToType(result),
|
||||
K_ItemResultToAmount(result)));
|
||||
|
||||
if (!P_MobjWasRemoved(source) && source->player)
|
||||
{
|
||||
P_SetTarget(&drop->tracer, source);
|
||||
drop->extravalue1 = 6*TICRATE;
|
||||
drop->colorized = true;
|
||||
drop->color = source->player->skincolor;
|
||||
}
|
||||
|
||||
// K_FlingPaperItem may advance RNG, so update our
|
||||
// copy of the seed afterward
|
||||
sharedseed = restore_item_rng(localseed);
|
||||
|
|
|
|||
|
|
@ -396,6 +396,12 @@ void P_TouchSpecialThing(mobj_t *special, mobj_t *toucher, boolean heightcheck)
|
|||
P_InstaThrust(player->mo, player->mo->angle, 20<<FRACBITS);
|
||||
return;
|
||||
case MT_FLOATINGITEM: // SRB2Kart
|
||||
if (special->extravalue1 > 0 && toucher != special->tracer)
|
||||
{
|
||||
player->pflags |= PF_CASTSHADOW;
|
||||
return;
|
||||
}
|
||||
|
||||
if (special->threshold >= FIRSTPOWERUP)
|
||||
{
|
||||
if (P_PlayerInPain(player))
|
||||
|
|
@ -2366,7 +2372,7 @@ void P_KillMobj(mobj_t *target, mobj_t *inflictor, mobj_t *source, UINT8 damaget
|
|||
}
|
||||
|
||||
case MT_MONITOR:
|
||||
Obj_MonitorOnDeath(target);
|
||||
Obj_MonitorOnDeath(target, source);
|
||||
break;
|
||||
case MT_BATTLEUFO:
|
||||
Obj_BattleUFODeath(target, inflictor);
|
||||
|
|
|
|||
|
|
@ -7587,6 +7587,15 @@ static boolean P_MobjRegularThink(mobj_t *mobj)
|
|||
}
|
||||
|
||||
K_UpdateMobjItemOverlay(mobj, mobj->threshold, mobj->movecount);
|
||||
|
||||
if (mobj->extravalue1 > 0)
|
||||
{
|
||||
mobj->extravalue1--;
|
||||
if (mobj->extravalue1 < TICRATE)
|
||||
{
|
||||
mobj->colorized = mobj->extravalue1 & 1;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
case MT_ITEMCAPSULE:
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue