From dd1022b18c43a64950b05f6ee6e0a3aad800f871 Mon Sep 17 00:00:00 2001 From: minenice55 Date: Sat, 7 Feb 2026 23:11:52 -0500 Subject: [PATCH] implement the egg brick proper --- src/d_main.cpp | 2 +- src/d_player.h | 1 + src/info/kartitems.h | 1 + src/k_hud.c | 7 +++++++ src/k_items.c | 15 ++++++++++++--- src/k_kart.c | 4 ++++ src/lua_playerlib.c | 7 +++++++ src/p_saveg.c | 1 + 8 files changed, 34 insertions(+), 4 deletions(-) diff --git a/src/d_main.cpp b/src/d_main.cpp index f5208bae5..e93d68fea 100644 --- a/src/d_main.cpp +++ b/src/d_main.cpp @@ -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 diff --git a/src/d_player.h b/src/d_player.h index 1263cf1ba..41bb802ba 100644 --- a/src/d_player.h +++ b/src/d_player.h @@ -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; diff --git a/src/info/kartitems.h b/src/info/kartitems.h index 6bff304ca..279c1b77d 100644 --- a/src/info/kartitems.h +++ b/src/info/kartitems.h @@ -19,3 +19,4 @@ _(SUPERRING) _(LANDMINE) _(BUBBLESHIELD) _(FLAMESHIELD) +_(EGGBRICK) diff --git a/src/k_hud.c b/src/k_hud.c index 6df3470ad..62ce47ed9 100644 --- a/src/k_hud.c +++ b/src/k_hud.c @@ -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) diff --git a/src/k_items.c b/src/k_items.c index 737548729..cdbad1d39 100644 --- a/src/k_items.c +++ b/src/k_items.c @@ -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; diff --git a/src/k_kart.c b/src/k_kart.c index 9e2848f02..c5e80d62f 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -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); } diff --git a/src/lua_playerlib.c b/src/lua_playerlib.c index 893e3b594..950b959e0 100644 --- a/src/lua_playerlib.c +++ b/src/lua_playerlib.c @@ -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; diff --git a/src/p_saveg.c b/src/p_saveg.c index cf66ead84..6b75ad90b 100644 --- a/src/p_saveg.c +++ b/src/p_saveg.c @@ -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);