implement the egg brick proper

This commit is contained in:
minenice55 2026-02-07 23:11:52 -05:00
parent d738ad5957
commit dd1022b18c
8 changed files with 34 additions and 4 deletions

View file

@ -93,7 +93,7 @@
#define ASSET_HASH_TEXTURES_KART 0xb4211b2f32b6a291
#define ASSET_HASH_CHARS_KART 0x1e68a3e01aa5c68b
#define ASSET_HASH_MAPS_KART 0x38558ed00da41ce9
#define ASSET_HASH_MAIN_PK3 0xc3e04c64e2048a84
#define ASSET_HASH_MAIN_PK3 0x87b47ede26ba6c0d
#define ASSET_HASH_MAPPATCH_PK3 0xbbc2c6a7a685da3a
#define ASSET_HASH_BONUSCHARS_KART 0x60e6f13d822a7461
#ifdef USE_PATCH_FILE

View file

@ -673,6 +673,7 @@ struct player_t
SINT8 throwdir; // Held dir of controls; 1 = forward, 0 = none, -1 = backward (was "player->heldDir")
UINT8 sadtimer; // How long you've been sad
UINT8 bricktimer; // How long you've been brick'ed up
// player's ring count
SINT8 rings;

View file

@ -19,3 +19,4 @@ _(SUPERRING)
_(LANDMINE)
_(BUBBLESHIELD)
_(FLAMESHIELD)
_(EGGBRICK)

View file

@ -1415,6 +1415,13 @@ static void K_drawKartItem(void)
itembar = FixedDiv(stplyr->bubblehealth, MAXBUBBLEHEALTH);
}
else if (stplyr->bricktimer > 0)
{
if (leveltime & 2)
localpatch = K_GetCachedItemPatch(KITEM_EGGBRICK, tiny, 0);
else
localpatch = kp_nodraw;
}
else if (stplyr->sadtimer > 0)
{
if (leveltime & 2)

View file

@ -2580,6 +2580,15 @@ void K_PlayerItemThink(player_t *player, boolean onground)
K_BotResetItemConfirm(player, false);
}
break;
case KITEM_EGGBRICK:
if (ATTACK_IS_DOWN && !HOLDING_ITEM && NO_HYUDORO
&& !player->bricktimer)
{
player->bricktimer = stealtime;
player->itemamount--;
K_BotResetItemConfirm(player, false);
}
break;
case MAXKARTITEMS: // aka KITEM_SAD
if (ATTACK_IS_DOWN && !HOLDING_ITEM && NO_HYUDORO
&& !player->sadtimer)
@ -2651,7 +2660,7 @@ void K_DoEggMineStrip(mobj_t *tmo, mobj_t *inflictor, mobj_t *source)
(void)source;
if (inflictor && (inflictor->type == MT_LANDMINE || inflictor->type == MT_EGGMINE))
{
if (tmo->player)
if (tmo->player && P_CanPickupItem(tmo->player, PICKUPITEM_EGGMAN))
{
S_StartSound(tmo, sfx_bewar3);
K_DropItems(tmo->player);
@ -2663,11 +2672,11 @@ void K_DoEggMineStrip(mobj_t *tmo, mobj_t *inflictor, mobj_t *source)
if (cv_karteggmine_slotbrick.value)
{
tmo->player->itemtype = MAXKARTITEMS; // aka KITEM_SAD
tmo->player->itemtype = KITEM_EGGBRICK;
tmo->player->itemamount = 1;
if (itemlistactive)
K_AddItemRollToList((INT32)(tmo->player - players), MAXKARTITEMS, 1);
K_AddItemRollToList((INT32)(tmo->player - players), KITEM_EGGBRICK, 1);
tmo->player->itemblink = TICRATE;
tmo->player->itemblinkmode = KITEMBLINK_MASHED;

View file

@ -7598,6 +7598,9 @@ void K_KartPlayerThink(player_t *player, ticcmd_t *cmd)
if (player->sadtimer)
player->sadtimer--;
if (player->bricktimer)
player->bricktimer--;
if (player->stealingtimer)
player->stealingtimer--;
@ -10833,6 +10836,7 @@ void K_StripItems(player_t *player)
player->flametimer = 0;
player->sadtimer = 0;
player->bricktimer = 0;
K_UpdateHnextList(player, true);
}

View file

@ -378,6 +378,7 @@ static int lib_lenLocalplayers(lua_State *L)
X(itemusecooldownmax) \
X(throwdir) \
X(sadtimer) \
X(bricktimer) \
X(rings) \
X(ringmin) \
X(ringmax) \
@ -794,6 +795,9 @@ static int player_get(lua_State *L)
case player_sadtimer:
lua_pushinteger(L, plr->sadtimer);
break;
case player_bricktimer:
lua_pushinteger(L, plr->bricktimer);
break;
case player_rings:
lua_pushinteger(L, plr->rings);
break;
@ -1578,6 +1582,9 @@ static int player_set(lua_State *L)
case player_sadtimer:
plr->sadtimer = luaL_checkinteger(L, 3);
break;
case player_bricktimer:
plr->bricktimer = luaL_checkinteger(L, 3);
break;
case player_rings:
plr->rings = luaL_checkinteger(L, 3);
break;

View file

@ -698,6 +698,7 @@ static void P_NetSyncPlayers(savebuffer_t *save)
SYNC(players[i].throwdir);
SYNC(players[i].sadtimer);
SYNC(players[i].bricktimer);
SYNC(players[i].rings);
SYNC(players[i].ringmin);