mirror of
https://git.do.srb2.org/KartKrew/Kart-Public.git
synced 2025-02-21 03:11:24 +00:00
Star colormap is decided to be used per mobj with mobj->colorize
Star creates afterimages that are colorized and fullbright Star makes the player fullbright
This commit is contained in:
parent
483921f1fa
commit
4b06594dd0
9 changed files with 91 additions and 11 deletions
|
@ -5276,7 +5276,7 @@ static void HWR_ProjectSprite(mobj_t *thing)
|
|||
// New colormap stuff for skins Tails 06-07-2002
|
||||
if (thing->skin && thing->sprite == SPR_PLAY) // This thing is a player!
|
||||
{
|
||||
if (thing->player && thing->player->kartstuff[k_startimer])
|
||||
if (thing->colorized)
|
||||
vis->colormap = R_GetTranslationColormap(TC_STARMAN, thing->color, GTC_CACHE);
|
||||
else
|
||||
{
|
||||
|
@ -5285,7 +5285,12 @@ static void HWR_ProjectSprite(mobj_t *thing)
|
|||
}
|
||||
}
|
||||
else
|
||||
vis->colormap = R_GetTranslationColormap(TC_DEFAULT, vis->mobj->color ? vis->mobj->color : SKINCOLOR_CYAN, GTC_CACHE);
|
||||
{
|
||||
if (vis->mobj && vis->mobj->colorized)
|
||||
vis->colormap = R_GetTranslationColormap(TC_STARMAN, vis->mobj->color ? vis->mobj->color : SKINCOLOR_CYAN, GTC_CACHE);
|
||||
else
|
||||
vis->colormap = R_GetTranslationColormap(TC_DEFAULT, vis->mobj->color ? vis->mobj->color : SKINCOLOR_CYAN, GTC_CACHE);
|
||||
}
|
||||
}
|
||||
else
|
||||
vis->colormap = colormaps;
|
||||
|
|
56
src/k_kart.c
56
src/k_kart.c
|
@ -1453,6 +1453,20 @@ void K_KartPlayerThink(player_t *player, ticcmd_t *cmd)
|
|||
{
|
||||
K_UpdateOffroad(player);
|
||||
|
||||
// setting players to use the star colormap and spawning afterimages
|
||||
if (player->kartstuff[k_startimer])
|
||||
{
|
||||
mobj_t *ghost;
|
||||
player->mo->colorized = true;
|
||||
ghost = P_SpawnGhostMobj(player->mo);
|
||||
ghost->fuse = 4;
|
||||
ghost->frame |= FF_FULLBRIGHT;
|
||||
}
|
||||
else
|
||||
{
|
||||
player->mo->colorized = false;
|
||||
}
|
||||
|
||||
if (player->kartstuff[k_itemclose])
|
||||
player->kartstuff[k_itemclose]--;
|
||||
|
||||
|
@ -1615,6 +1629,19 @@ void K_KartPlayerThink(player_t *player, ticcmd_t *cmd)
|
|||
S_ChangeMusicInternal(mapmusname, true);
|
||||
}
|
||||
|
||||
void K_KartPlayerAfterThink(player_t *player)
|
||||
{
|
||||
if (player->kartstuff[k_startimer])
|
||||
{
|
||||
player->mo->frame |= FF_FULLBRIGHT;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!(player->mo->state->frame & FF_FULLBRIGHT))
|
||||
player->mo->frame &= ~FF_FULLBRIGHT;
|
||||
}
|
||||
}
|
||||
|
||||
static void K_PlayTauntSound(mobj_t *source)
|
||||
{
|
||||
switch (P_RandomFixed() % 4)
|
||||
|
@ -4739,6 +4766,15 @@ static void K_drawKartPositionFaces(void)
|
|||
else
|
||||
{
|
||||
colormap = R_GetTranslationColormap(players[rankplayer[i]].skin, players[rankplayer[i]].mo->color, GTC_CACHE);
|
||||
if (players[rankplayer[i]].mo->colorized)
|
||||
{
|
||||
colormap = R_GetTranslationColormap(TC_STARMAN, players[rankplayer[i]].mo->color, GTC_CACHE);
|
||||
}
|
||||
else
|
||||
{
|
||||
colormap = R_GetTranslationColormap(players[rankplayer[i]].skin, players[rankplayer[i]].mo->color, GTC_CACHE);
|
||||
}
|
||||
|
||||
if (rankplayer[i] != myplayer)
|
||||
{
|
||||
V_DrawSmallTranslucentMappedPatch(FACE_X, Y, V_HUDTRANS|V_SNAPTOLEFT, faceprefix[players[rankplayer[i]].skin], colormap);
|
||||
|
@ -5087,7 +5123,15 @@ static void K_drawKartMinimap(void)
|
|||
V_DrawSciencePatch(amxpos, amypos, splitflags|V_FLIP, iconprefix[players[i].skin], FRACUNIT/2);
|
||||
else
|
||||
{
|
||||
UINT8 *colormap = R_GetTranslationColormap(players[i].skin, players[i].skincolor, 0); //transtables[players[i].skin] - 256 + (players[i].skincolor<<8);
|
||||
UINT8 *colormap;
|
||||
if (players[i].mo->colorized)
|
||||
{
|
||||
colormap = R_GetTranslationColormap(TC_STARMAN, players[i].mo->color, 0);
|
||||
}
|
||||
else
|
||||
{
|
||||
colormap = R_GetTranslationColormap(players[i].skin, players[i].mo->color, 0);
|
||||
}
|
||||
V_DrawFixedPatch(amxpos, amypos, FRACUNIT/2, splitflags|V_FLIP, iconprefix[players[i].skin], colormap);
|
||||
}
|
||||
}
|
||||
|
@ -5097,7 +5141,15 @@ static void K_drawKartMinimap(void)
|
|||
V_DrawSciencePatch(amxpos, amypos, splitflags, iconprefix[players[i].skin], FRACUNIT/2);
|
||||
else
|
||||
{
|
||||
UINT8 *colormap = R_GetTranslationColormap(players[i].skin, players[i].skincolor, 0); //transtables[players[i].skin] - 256 + (players[i].skincolor<<8);
|
||||
UINT8 *colormap;
|
||||
if (players[i].mo->colorized)
|
||||
{
|
||||
colormap = R_GetTranslationColormap(TC_STARMAN, players[i].mo->color, 0);
|
||||
}
|
||||
else
|
||||
{
|
||||
colormap = R_GetTranslationColormap(players[i].skin, players[i].mo->color, 0);
|
||||
}
|
||||
V_DrawFixedPatch(amxpos, amypos, FRACUNIT/2, splitflags, iconprefix[players[i].skin], colormap);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -21,6 +21,7 @@ void K_KartBouncing(mobj_t *mobj1, mobj_t *mobj2, boolean bounce, boolean solid)
|
|||
void K_LakituChecker(player_t *player);
|
||||
void K_KartMoveAnimation(player_t *player);
|
||||
void K_KartPlayerThink(player_t *player, ticcmd_t *cmd);
|
||||
void K_KartPlayerAfterThink(player_t *player);
|
||||
void K_SpinPlayer(player_t *player, mobj_t *source);
|
||||
void K_SquishPlayer(player_t *player, mobj_t *source);
|
||||
void K_ExplodePlayer(player_t *player, mobj_t *source);
|
||||
|
|
|
@ -80,7 +80,8 @@ enum mobj_e {
|
|||
mobj_extravalue1,
|
||||
mobj_extravalue2,
|
||||
mobj_cusval,
|
||||
mobj_cvmem
|
||||
mobj_cvmem,
|
||||
mobj_colorized
|
||||
};
|
||||
|
||||
static const char *const mobj_opt[] = {
|
||||
|
@ -140,6 +141,7 @@ static const char *const mobj_opt[] = {
|
|||
"extravalue2",
|
||||
"cusval",
|
||||
"cvmem",
|
||||
"colorized",
|
||||
NULL};
|
||||
|
||||
#define UNIMPLEMENTED luaL_error(L, LUA_QL("mobj_t") " field " LUA_QS " is not implemented for Lua and cannot be accessed.", mobj_opt[field])
|
||||
|
@ -343,6 +345,9 @@ static int mobj_get(lua_State *L)
|
|||
case mobj_cvmem:
|
||||
lua_pushinteger(L, mo->cvmem);
|
||||
break;
|
||||
case mobj_colorized:
|
||||
lua_pushboolean(L, mo->colorized);
|
||||
break;
|
||||
default: // extra custom variables in Lua memory
|
||||
lua_getfield(L, LUA_REGISTRYINDEX, LREG_EXTVARS);
|
||||
I_Assert(lua_istable(L, -1));
|
||||
|
@ -638,6 +643,9 @@ static int mobj_set(lua_State *L)
|
|||
case mobj_cvmem:
|
||||
mo->cvmem = luaL_checkinteger(L, 3);
|
||||
break;
|
||||
case mobj_colorized:
|
||||
mo->colorized = luaL_checkboolean(L, 3);
|
||||
break;
|
||||
default:
|
||||
lua_getfield(L, LUA_REGISTRYINDEX, LREG_EXTVARS);
|
||||
I_Assert(lua_istable(L, -1));
|
||||
|
|
|
@ -8547,6 +8547,8 @@ mobj_t *P_SpawnMobj(fixed_t x, fixed_t y, fixed_t z, mobjtype_t type)
|
|||
else
|
||||
mobj->z = z;
|
||||
|
||||
mobj->colorized = false;
|
||||
|
||||
#ifdef HAVE_BLUA
|
||||
// DANGER! This can cause P_SpawnMobj to return NULL!
|
||||
// Avoid using P_RemoveMobj on the newly created mobj in "MobjSpawn" Lua hooks!
|
||||
|
|
|
@ -360,6 +360,8 @@ typedef struct mobj_s
|
|||
struct pslope_s *standingslope; // The slope that the object is standing on (shouldn't need synced in savegames, right?)
|
||||
#endif
|
||||
|
||||
boolean colorized; // Whether the mobj uses the starman colormap
|
||||
|
||||
// WARNING: New fields must be added separately to savegame and Lua.
|
||||
} mobj_t;
|
||||
|
||||
|
|
|
@ -946,9 +946,11 @@ typedef enum
|
|||
MD2_HNEXT = 1<<7,
|
||||
#ifdef ESLOPE
|
||||
MD2_HPREV = 1<<8,
|
||||
MD2_SLOPE = 1<<9
|
||||
MD2_SLOPE = 1<<9,
|
||||
MD2_COLORIZED = 1<<10
|
||||
#else
|
||||
MD2_HPREV = 1<<8
|
||||
MD2_HPREV = 1<<8,
|
||||
MD2_COLORIZED = 1<<9
|
||||
#endif
|
||||
} mobj_diff2_t;
|
||||
|
||||
|
@ -1143,6 +1145,8 @@ static void SaveMobjThinker(const thinker_t *th, const UINT8 type)
|
|||
if (mobj->standingslope)
|
||||
diff2 |= MD2_SLOPE;
|
||||
#endif
|
||||
if (mobj->colorized)
|
||||
diff2 |= MD2_COLORIZED;
|
||||
if (diff2 != 0)
|
||||
diff |= MD_MORE;
|
||||
|
||||
|
@ -1262,6 +1266,8 @@ static void SaveMobjThinker(const thinker_t *th, const UINT8 type)
|
|||
if (diff2 & MD2_SLOPE)
|
||||
WRITEUINT16(save_p, mobj->standingslope->id);
|
||||
#endif
|
||||
if (diff2 & MD2_COLORIZED)
|
||||
WRITEUINT8(save_p, mobj->colorized);
|
||||
|
||||
WRITEUINT32(save_p, mobj->mobjnum);
|
||||
}
|
||||
|
@ -2131,7 +2137,8 @@ static void LoadMobjThinker(actionf_p1 thinker)
|
|||
if (diff2 & MD2_SLOPE)
|
||||
mobj->standingslope = P_SlopeById(READUINT16(save_p));
|
||||
#endif
|
||||
|
||||
if (diff2 & MD2_COLORIZED)
|
||||
mobj->colorized = READUINT8(save_p);
|
||||
|
||||
if (diff & MD_REDFLAG)
|
||||
{
|
||||
|
|
|
@ -1513,6 +1513,7 @@ mobj_t *P_SpawnGhostMobj(mobj_t *mobj)
|
|||
}
|
||||
|
||||
ghost->color = mobj->color;
|
||||
ghost->colorized = mobj->colorized; // Kart: they should also be colorized if their origin is
|
||||
|
||||
ghost->angle = mobj->angle;
|
||||
ghost->sprite = mobj->sprite;
|
||||
|
@ -9518,7 +9519,7 @@ void P_PlayerThink(player_t *player)
|
|||
#if 1
|
||||
// "Blur" a bit when you have speed shoes and are going fast enough
|
||||
if ((player->powers[pw_super] || player->powers[pw_sneakers]
|
||||
|| player->kartstuff[k_driftboost] || player->kartstuff[k_mushroomtimer]) // SRB2kart
|
||||
|| player->kartstuff[k_driftboost] || player->kartstuff[k_mushroomtimer]) && !player->kartstuff[k_startimer] // SRB2kart
|
||||
&& (player->speed + abs(player->mo->momz)) > FixedMul(20*FRACUNIT,player->mo->scale))
|
||||
{
|
||||
mobj_t *gmobj = P_SpawnGhostMobj(player->mo);
|
||||
|
@ -10073,4 +10074,6 @@ void P_PlayerAfterThink(player_t *player)
|
|||
|
||||
if (P_IsObjectOnGround(player->mo))
|
||||
player->mo->pmomz = 0;
|
||||
|
||||
K_KartPlayerAfterThink(player);
|
||||
}
|
||||
|
|
|
@ -827,7 +827,7 @@ static void R_DrawVisSprite(vissprite_t *vis)
|
|||
dc_transmap = vis->transmap;
|
||||
if (vis->mobj->skin && vis->mobj->sprite == SPR_PLAY) // MT_GHOST LOOKS LIKE A PLAYER SO USE THE PLAYER TRANSLATION TABLES. >_>
|
||||
{
|
||||
if (vis->mobj->player && vis->mobj->player->kartstuff[k_startimer])
|
||||
if (vis->mobj->colorized)
|
||||
dc_translation = R_GetTranslationColormap(TC_STARMAN, vis->mobj->color, GTC_CACHE);
|
||||
else
|
||||
{
|
||||
|
@ -851,7 +851,7 @@ static void R_DrawVisSprite(vissprite_t *vis)
|
|||
// New colormap stuff for skins Tails 06-07-2002
|
||||
if (vis->mobj->skin && vis->mobj->sprite == SPR_PLAY) // This thing is a player!
|
||||
{
|
||||
if (vis->mobj->player && vis->mobj->player->kartstuff[k_startimer])
|
||||
if (vis->mobj->colorized)
|
||||
dc_translation = R_GetTranslationColormap(TC_STARMAN, vis->mobj->color, GTC_CACHE);
|
||||
else
|
||||
{
|
||||
|
|
Loading…
Reference in a new issue