mirror of
https://github.com/KartKrewDev/RingRacers.git
synced 2025-12-27 10:22:32 +00:00
Oni's suggestions
- Only look for players who can pick up the item. Serves as a subtle tell for other players holding onto items, and lets you see the canon color more often - Held eggman item uses black instead of player color - Fix karma items not animating
This commit is contained in:
parent
266ad99374
commit
69a67376b3
3 changed files with 30 additions and 24 deletions
22
src/k_kart.c
22
src/k_kart.c
|
|
@ -542,16 +542,21 @@ UINT8 K_GetKartColorByName(const char *name)
|
|||
|
||||
//}
|
||||
|
||||
UINT8 K_GetClosestPlayersColor(mobj_t *mobj)
|
||||
player_t *K_GetItemBoxPlayer(mobj_t *mobj)
|
||||
{
|
||||
fixed_t closest = INT32_MAX;
|
||||
UINT8 color = SKINCOLOR_NONE;
|
||||
player_t *player = NULL;
|
||||
UINT8 i;
|
||||
|
||||
for (i = 0; i < MAXPLAYERS; i++)
|
||||
{
|
||||
if (playeringame[i] && players[i].mo && !P_MobjWasRemoved(players[i].mo)
|
||||
&& !players[i].spectator && !players[i].exiting)
|
||||
if (!(playeringame[i] && players[i].mo && !P_MobjWasRemoved(players[i].mo) && !players[i].spectator))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
// Always use normal item box rules -- could pass in "2" for fakes but they blend in better like this
|
||||
if (P_CanPickupItem(&players[i], 1))
|
||||
{
|
||||
fixed_t dist = P_AproxDistance(P_AproxDistance(
|
||||
players[i].mo->x - mobj->x,
|
||||
|
|
@ -566,13 +571,13 @@ UINT8 K_GetClosestPlayersColor(mobj_t *mobj)
|
|||
|
||||
if (dist < closest)
|
||||
{
|
||||
color = players[i].skincolor;
|
||||
player = &players[i];
|
||||
closest = dist;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return color;
|
||||
return player;
|
||||
}
|
||||
|
||||
//{ SRB2kart Net Variables
|
||||
|
|
@ -5220,9 +5225,8 @@ static void K_MoveHeldObjects(player_t *player)
|
|||
|
||||
if (cur->type == MT_EGGMANITEM_SHIELD)
|
||||
{
|
||||
// K_GetClosestPlayersColor will practically always get our player anyway
|
||||
// so we might as well save the effort
|
||||
cur->color = player->skincolor;
|
||||
// Decided that this should use their "canon" color.
|
||||
cur->color = SKINCOLOR_BLACK;
|
||||
}
|
||||
|
||||
cur->flags &= ~MF_NOCLIPTHING;
|
||||
|
|
|
|||
|
|
@ -18,7 +18,7 @@ extern const UINT8 KartColor_Opposite[MAXSKINCOLORS*2];
|
|||
void K_RainbowColormap(UINT8 *dest_colormap, UINT8 skincolor);
|
||||
void K_GenerateKartColormap(UINT8 *dest_colormap, INT32 skinnum, UINT8 color);
|
||||
UINT8 K_GetKartColorByName(const char *name);
|
||||
UINT8 K_GetClosestPlayersColor(mobj_t *mobj);
|
||||
player_t *K_GetItemBoxPlayer(mobj_t *mobj);
|
||||
|
||||
void K_RegisterKartStuff(void);
|
||||
|
||||
|
|
|
|||
30
src/p_mobj.c
30
src/p_mobj.c
|
|
@ -8109,11 +8109,12 @@ void P_MobjThinker(mobj_t *mobj)
|
|||
}
|
||||
case MT_EGGMANITEM:
|
||||
{
|
||||
UINT8 color = K_GetClosestPlayersColor(mobj);
|
||||
player_t *player = K_GetItemBoxPlayer(mobj);
|
||||
UINT8 color = SKINCOLOR_BLACK;
|
||||
|
||||
if (color == SKINCOLOR_NONE)
|
||||
if (player != NULL)
|
||||
{
|
||||
color = SKINCOLOR_BLACK;
|
||||
color = player->skincolor;
|
||||
}
|
||||
|
||||
mobj->color = color;
|
||||
|
|
@ -8872,8 +8873,8 @@ void P_MobjThinker(mobj_t *mobj)
|
|||
|
||||
if (mobj->target->player->kartstuff[k_comebacktimer] > 0)
|
||||
{
|
||||
if (state < mobj->info->spawnstate || state > mobj->info->spawnstate+19)
|
||||
P_SetMobjState(mobj, mobj->info->spawnstate);
|
||||
if (state < S_PLAYERBOMB1 || state > S_PLAYERBOMB20)
|
||||
P_SetMobjState(mobj, S_PLAYERBOMB1);
|
||||
if (mobj->target->player->kartstuff[k_comebacktimer] < TICRATE && (leveltime & 1))
|
||||
mobj->flags2 &= ~MF2_DONTDRAW;
|
||||
else
|
||||
|
|
@ -8882,14 +8883,14 @@ void P_MobjThinker(mobj_t *mobj)
|
|||
else
|
||||
{
|
||||
if (!mobj->target->player->kartstuff[k_comebackmode]
|
||||
&& (state < mobj->info->spawnstate || state > mobj->info->spawnstate+19))
|
||||
P_SetMobjState(mobj, mobj->info->spawnstate);
|
||||
&& (state < S_PLAYERBOMB1 || state > S_PLAYERBOMB20))
|
||||
P_SetMobjState(mobj, S_PLAYERBOMB1);
|
||||
else if (mobj->target->player->kartstuff[k_comebackmode] == 1
|
||||
&& state != mobj->info->seestate)
|
||||
P_SetMobjState(mobj, mobj->info->seestate);
|
||||
&& (state < S_PLAYERITEM1 || state > S_PLAYERITEM12))
|
||||
P_SetMobjState(mobj, S_PLAYERITEM1);
|
||||
else if (mobj->target->player->kartstuff[k_comebackmode] == 2
|
||||
&& state != mobj->info->painstate)
|
||||
P_SetMobjState(mobj, mobj->info->painstate);
|
||||
&& (state < S_PLAYERFAKE1 || state > S_PLAYERFAKE12))
|
||||
P_SetMobjState(mobj, S_PLAYERFAKE1);
|
||||
|
||||
if (mobj->target->player->powers[pw_flashing] && (leveltime & 1))
|
||||
mobj->flags2 |= MF2_DONTDRAW;
|
||||
|
|
@ -9969,11 +9970,12 @@ void P_MobjThinker(mobj_t *mobj)
|
|||
}
|
||||
else
|
||||
{
|
||||
UINT8 color = K_GetClosestPlayersColor(mobj);
|
||||
player_t *player = K_GetItemBoxPlayer(mobj);
|
||||
UINT8 color = SKINCOLOR_BLACK;
|
||||
|
||||
if (color == SKINCOLOR_NONE)
|
||||
if (player != NULL)
|
||||
{
|
||||
color = SKINCOLOR_BLACK;
|
||||
color = player->skincolor;
|
||||
}
|
||||
|
||||
mobj->color = color;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue