mirror of
https://github.com/KartKrewDev/RingRacers.git
synced 2026-04-27 12:31:54 +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);
|
void Obj_MonitorPartThink(mobj_t *part);
|
||||||
fixed_t Obj_MonitorGetDamage(mobj_t *monitor, mobj_t *inflictor, UINT8 damagetype);
|
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_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);
|
void Obj_MonitorShardThink(mobj_t *shard);
|
||||||
UINT32 Obj_MonitorGetEmerald(const mobj_t *monitor);
|
UINT32 Obj_MonitorGetEmerald(const mobj_t *monitor);
|
||||||
void Obj_MonitorSetItemSpot(mobj_t *monitor, mobj_t *spot);
|
void Obj_MonitorSetItemSpot(mobj_t *monitor, mobj_t *spot);
|
||||||
|
|
|
||||||
|
|
@ -670,7 +670,9 @@ Obj_MonitorOnDamage
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
Obj_MonitorOnDeath (mobj_t *monitor)
|
Obj_MonitorOnDeath
|
||||||
|
( mobj_t * monitor,
|
||||||
|
mobj_t * source)
|
||||||
{
|
{
|
||||||
const UINT8 itemcount = get_monitor_itemcount(monitor);
|
const UINT8 itemcount = get_monitor_itemcount(monitor);
|
||||||
const angle_t ang = ANGLE_MAX / itemcount;
|
const angle_t ang = ANGLE_MAX / itemcount;
|
||||||
|
|
@ -686,13 +688,21 @@ Obj_MonitorOnDeath (mobj_t *monitor)
|
||||||
const SINT8 result = get_item_result();
|
const SINT8 result = get_item_result();
|
||||||
const UINT32 localseed = restore_item_rng(sharedseed);
|
const UINT32 localseed = restore_item_rng(sharedseed);
|
||||||
|
|
||||||
adjust_monitor_drop(monitor,
|
mobj_t *drop = adjust_monitor_drop(monitor,
|
||||||
K_FlingPaperItem(
|
K_FlingPaperItem(
|
||||||
monitor->x, monitor->y, monitor->z + (128 * mapobjectscale * flip),
|
monitor->x, monitor->y, monitor->z + (128 * mapobjectscale * flip),
|
||||||
i * ang, flip,
|
i * ang, flip,
|
||||||
K_ItemResultToType(result),
|
K_ItemResultToType(result),
|
||||||
K_ItemResultToAmount(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
|
// K_FlingPaperItem may advance RNG, so update our
|
||||||
// copy of the seed afterward
|
// copy of the seed afterward
|
||||||
sharedseed = restore_item_rng(localseed);
|
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);
|
P_InstaThrust(player->mo, player->mo->angle, 20<<FRACBITS);
|
||||||
return;
|
return;
|
||||||
case MT_FLOATINGITEM: // SRB2Kart
|
case MT_FLOATINGITEM: // SRB2Kart
|
||||||
|
if (special->extravalue1 > 0 && toucher != special->tracer)
|
||||||
|
{
|
||||||
|
player->pflags |= PF_CASTSHADOW;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (special->threshold >= FIRSTPOWERUP)
|
if (special->threshold >= FIRSTPOWERUP)
|
||||||
{
|
{
|
||||||
if (P_PlayerInPain(player))
|
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:
|
case MT_MONITOR:
|
||||||
Obj_MonitorOnDeath(target);
|
Obj_MonitorOnDeath(target, source);
|
||||||
break;
|
break;
|
||||||
case MT_BATTLEUFO:
|
case MT_BATTLEUFO:
|
||||||
Obj_BattleUFODeath(target, inflictor);
|
Obj_BattleUFODeath(target, inflictor);
|
||||||
|
|
|
||||||
|
|
@ -7587,6 +7587,15 @@ static boolean P_MobjRegularThink(mobj_t *mobj)
|
||||||
}
|
}
|
||||||
|
|
||||||
K_UpdateMobjItemOverlay(mobj, mobj->threshold, mobj->movecount);
|
K_UpdateMobjItemOverlay(mobj, mobj->threshold, mobj->movecount);
|
||||||
|
|
||||||
|
if (mobj->extravalue1 > 0)
|
||||||
|
{
|
||||||
|
mobj->extravalue1--;
|
||||||
|
if (mobj->extravalue1 < TICRATE)
|
||||||
|
{
|
||||||
|
mobj->colorized = mobj->extravalue1 & 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case MT_ITEMCAPSULE:
|
case MT_ITEMCAPSULE:
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue