From 83176e4c9fce0ce0140e0c80f649f1e60925087b Mon Sep 17 00:00:00 2001 From: minenice55 Date: Sat, 6 Dec 2025 00:33:51 -0500 Subject: [PATCH] make equip style a property of the items proper KNOWN ISSUE: rockets and eggman leave the item slot empty when equipped, should probably add a "equipped item type" field to the player struct --- src/d_main.cpp | 2 +- src/deh_soc.c | 4 ++++ src/deh_tables.c | 1 + src/k_items.c | 32 ++++++++------------------------ src/k_items.h | 9 +++------ src/k_kart.c | 2 +- src/lua_hook.h | 2 -- src/lua_hooklib.c | 14 -------------- 8 files changed, 18 insertions(+), 48 deletions(-) diff --git a/src/d_main.cpp b/src/d_main.cpp index 710a3c51b..ed2a36f66 100644 --- a/src/d_main.cpp +++ b/src/d_main.cpp @@ -94,7 +94,7 @@ #define ASSET_HASH_TEXTURES_KART 0xb4211b2f32b6a291 #define ASSET_HASH_CHARS_KART 0x1e68a3e01aa5c68b #define ASSET_HASH_MAPS_KART 0x38558ed00da41ce9 -#define ASSET_HASH_MAIN_PK3 0x4d652be9c2a6d2a7 +#define ASSET_HASH_MAIN_PK3 0xbd8469ee97e7f1cc #define ASSET_HASH_MAPPATCH_PK3 0x0afd8afc6fc50175 #define ASSET_HASH_BONUSCHARS_KART 0x60e6f13d822a7461 #ifdef USE_PATCH_FILE diff --git a/src/deh_soc.c b/src/deh_soc.c index 448041df9..1d939825f 100644 --- a/src/deh_soc.c +++ b/src/deh_soc.c @@ -4107,6 +4107,10 @@ void readkartitem(MYFILE *f, kartitem_t *item) { item->flags[word[5] == 'A' ? 1 : 0] = get_number(word2); } + else if (fastcmp(word, "EQUIP") || fastcmp(word, "EQUIPALT")) + { + item->equipstyle[word[5] == 'A' ? 1 : 0] = get_number(word2); + } else WARN("unknown word '%s'", word); } diff --git a/src/deh_tables.c b/src/deh_tables.c index fca1bb646..6ae22e7ff 100644 --- a/src/deh_tables.c +++ b/src/deh_tables.c @@ -1553,6 +1553,7 @@ struct int_const_s const INT_CONST[] = { {"KITEMEQUIP_ORBIT",KITEMEQUIP_ORBIT}, {"KITEMEQUIP_TRAIL",KITEMEQUIP_TRAIL}, {"KITEMEQUIP_ROCKETS",KITEMEQUIP_ROCKETS}, + {"KITEMEQUIP_SHIELD",KITEMEQUIP_SHIELD}, // kartroulettetype_e {"KROULETTETYPE_NORMAL",KROULETTETYPE_NORMAL}, diff --git a/src/k_items.c b/src/k_items.c index a8f8685ae..c86898302 100644 --- a/src/k_items.c +++ b/src/k_items.c @@ -184,6 +184,14 @@ kartitemflags_e K_GetItemFlags(kartitemtype_e itemtype) return kartitems[itemtype].flags[K_IsKartItemAlternate(itemtype) ? 1 : 0]; } +kartitemequip_e K_GetItemEquipStyle(kartitemtype_e itemtype) +{ + if (itemtype >= numkartitems) + return KITEMEQUIP_NONE; + + return kartitems[itemtype].equipstyle[K_IsKartItemAlternate(itemtype) ? 1 : 0]; +} + UINT8 K_GetItemNumberDisplayMin(kartitemtype_e type, boolean tiny) { if (type == MAXKARTITEMS) @@ -2430,28 +2438,4 @@ void K_AltShrinkPityIncrease(player_t *player) shrinktime = min(INT16_MAX, shrinktime + PITY_SHRINKINCREASE_BASE + FixedMul(PITY_SHRINKINCREASE, dimin)); player->growshrinktimer = ((INT16)shrinktime) * -1; -} - -// this shit is so ass 🥲 -kartitemequip_e K_GetItemEquipStyle(mobjtype_t mobjtype) -{ - //TODO: lua hook to use any of these for a given mobj - // if we could use tables or dicts I'd use those insteasd - switch (mobjtype) - { - case MT_ORBINAUT_SHIELD: - case MT_JAWZ_SHIELD: - return KITEMEQUIP_ORBIT; - case MT_BANANA_SHIELD: - case MT_SSMINE_SHIELD: - case MT_EGGMANITEM_SHIELD: - case MT_SINK_SHIELD: - return KITEMEQUIP_TRAIL; - case MT_ROCKETSNEAKER: - return KITEMEQUIP_ROCKETS; - default: - { - return LUA_HookGetItemEquipStyle(mobjtype); - } - } } \ No newline at end of file diff --git a/src/k_items.h b/src/k_items.h index 811b748a5..d0af9b0f4 100644 --- a/src/k_items.h +++ b/src/k_items.h @@ -49,6 +49,7 @@ typedef enum KITEMEQUIP_ORBIT, // orbiters (orbi, jawz) KITEMEQUIP_TRAIL, // dragged items (bananas, mines, sinks) KITEMEQUIP_ROCKETS, // direct player position with offset (rockets) + KITEMEQUIP_SHIELD, //TODO: spawns a shield when active (currently acts like KITEMEQUIP_NONE) } kartitemequip_e; typedef enum @@ -114,16 +115,13 @@ struct kartitemgraphics_t struct kartitem_t { dehinfo_t info; + kartitemequip_e equipstyle[2]; kartitemflags_e flags[2]; kartitemgraphics_t graphics[2]; spritedef_t spritedef; consvar_t *altcvar; // if not NULL, an altitem exists boolean altenabled; - - // note: could be how we do this? - // int (*oddsOverrideFunc)(player_t *p, int pos, int mashed, boolean spbrush, fixed_t seconddist, int pingame, int pexiting); - // int (*resultOverrideFunc)(player_t *p); }; struct kartresult_t @@ -185,6 +183,7 @@ void K_SetupItemOdds(void); boolean K_ItemResultEnabled(const kartresult_t *result); boolean K_IsKartItemAlternate(kartitemtype_e itemtype); kartitemflags_e K_GetItemFlags(kartitemtype_e itemtype); +kartitemequip_e K_GetItemEquipStyle(kartitemtype_e mobjtype); UINT8 K_GetItemNumberDisplayMin(kartitemtype_e type, boolean tiny); patch_t *K_GetCachedItemPatch(kartitemtype_e type, boolean tiny, UINT8 amount); @@ -219,8 +218,6 @@ void K_AltShrinkPityIncrease(player_t *player); void K_PlayerItemThink(player_t *player, boolean onground); -kartitemequip_e K_GetItemEquipStyle(mobjtype_t mobjtype); - #ifdef __cplusplus } // extern "C" #endif diff --git a/src/k_kart.c b/src/k_kart.c index 39f731ea6..9fff69b68 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -5666,7 +5666,7 @@ static void K_MoveHeldObjects(player_t *player) return; } - equipstyle = K_GetItemEquipStyle(player->mo->hnext->type); + equipstyle = K_GetItemEquipStyle(player->itemtype); switch (equipstyle) { diff --git a/src/lua_hook.h b/src/lua_hook.h index bac34d016..f3470f052 100644 --- a/src/lua_hook.h +++ b/src/lua_hook.h @@ -93,7 +93,6 @@ automatically. X (KartStripItems),/*SRB2KART*/\ X (KartStripOther),/*SRB2KART*/\ X (CanPickupItem),/*SRB2KART*/\ - X (GetItemEquipStyle),/*SRB2KART*/\ #define STRING_HOOK_LIST(X) \ X (SpecialExecute),\ @@ -187,7 +186,6 @@ boolean LUA_HookKartSneaker(player_t *player, int type); // SRB2Kart: Hook for K boolean LUA_HookKartStripItems(player_t *player, UINT8 item); // SRB2Kart: Hook for K_StripItems. boolean LUA_HookKartStripOther(player_t *player); // SRB2Kart: Hook for K_StripOther. boolean LUA_HookCanPickupItem(player_t *player, UINT8 weapon, boolean *force); // SRB2Kart: Hook for P_CanPickupItem. -int LUA_HookGetItemEquipStyle(mobjtype_t mobjtype); // SRB2Kart: Hook for K_GetItemEquipStyle. int LUA_HookDropHnextList(mobj_t *mobj, mobjtype_t droptype, boolean *orbit, boolean *dropall); // SRB2Kart: Hook for K_DropHnextList. #ifdef __cplusplus diff --git a/src/lua_hooklib.c b/src/lua_hooklib.c index 2f41ea85a..51c77d37f 100644 --- a/src/lua_hooklib.c +++ b/src/lua_hooklib.c @@ -1432,20 +1432,6 @@ static void res_itemequipstyle(Hook_State *hook) } } -int LUA_HookGetItemEquipStyle(mobjtype_t type) -{ - Hook_State hook; - - if (prepare_hook(&hook, 0, HOOK(GetItemEquipStyle))) - { - lua_pushinteger(gL, type); - - call_hooks(&hook, 1, res_itemequipstyle); - } - - return hook.status; -} - typedef struct { mobjtype_t droptype; boolean *orbit;