mirror of
https://github.com/HarbourMasters/Shipwright.git
synced 2024-08-13 17:03:47 -04:00
Implements new getItem table in game.
This commit is contained in:
parent
4a87ed709b
commit
bfdf814a1f
@ -179,7 +179,7 @@
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="ItemTableManager.cpp" />
|
||||
<ClCompile Include="soh\Enhancements\item-tables\ItemTableManager.cpp" />
|
||||
<ClCompile Include="soh\Enhancements\cosmetics\CosmeticsEditor.cpp" />
|
||||
<ClCompile Include="soh\Enhancements\debugger\actorViewer.cpp" />
|
||||
<ClCompile Include="soh\Enhancements\gfx.c" />
|
||||
@ -944,11 +944,11 @@
|
||||
<ClCompile Include="src\overlays\misc\ovl_map_mark_data\z_map_mark_data.c" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="ItemTableManager.h" />
|
||||
<ClInclude Include="soh\Enhancements\cosmetics\CosmeticsEditor.h" />
|
||||
<ClInclude Include="soh\Enhancements\debugger\actorViewer.h" />
|
||||
<ClCompile Include="soh\Enhancements\randomizer\randomizer.h" />
|
||||
<ClInclude Include="soh\Enhancements\gfx.h" />
|
||||
<ClInclude Include="soh\Enhancements\item-tables\ItemTableManager.h" />
|
||||
<ClInclude Include="soh\Enhancements\randomizer\3drando\category.hpp" />
|
||||
<ClInclude Include="soh\Enhancements\randomizer\3drando\cosmetics.hpp" />
|
||||
<ClInclude Include="soh\Enhancements\randomizer\3drando\custom_messages.hpp" />
|
||||
|
@ -2379,7 +2379,7 @@
|
||||
<ClCompile Include="soh\Enhancements\randomizer\randomizer_item_tracker.cpp">
|
||||
<Filter>Source Files\src</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="ItemTableManager.cpp">
|
||||
<ClCompile Include="soh\Enhancements\item-tables\ItemTableManager.cpp">
|
||||
<Filter>Source Files\soh\Enhancements\item-tables</Filter>
|
||||
</ClCompile>
|
||||
</ItemGroup>
|
||||
@ -4067,8 +4067,8 @@
|
||||
<ClInclude Include="soh\Enhancements\randomizer\randomizer_item_tracker.h">
|
||||
<Filter>Source Files\src</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="ItemTableManager.h">
|
||||
<Filter>Header Files\soh\Enhancements\item-tables</Filter>
|
||||
<ClInclude Include="soh\Enhancements\item-tables\ItemTableManager.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
|
@ -12,9 +12,7 @@ bool ItemTableManager::AddItemTable(std::string tableID) {
|
||||
return itemTables.emplace(tableID, newItemTable).second;
|
||||
}
|
||||
|
||||
bool ItemTableManager::AddItemEntry(std::string tableID, uint8_t getItemID, uint8_t itemID, uint16_t objectID,
|
||||
int8_t drawID,
|
||||
uint8_t textID, uint8_t field, bool chestAnim) {
|
||||
bool ItemTableManager::AddItemEntry(std::string tableID, uint8_t getItemID, uint8_t itemID, uint16_t objectID, int8_t drawID, uint8_t textID, uint8_t field, bool chestAnim) {
|
||||
ItemTable* itemTable = RetrieveItemTable(tableID);
|
||||
if (itemTable == NULL) {
|
||||
return false;
|
||||
@ -23,6 +21,14 @@ bool ItemTableManager::AddItemEntry(std::string tableID, uint8_t getItemID, uint
|
||||
return itemTable->emplace(getItemID, getItemEntry).second;
|
||||
}
|
||||
|
||||
bool ItemTableManager::AddItemEntry(std::string tableID, uint8_t getItemID, GetItemEntry getItemEntry) {
|
||||
ItemTable* itemTable = RetrieveItemTable(tableID);
|
||||
if (itemTable == NULL) {
|
||||
return false;
|
||||
}
|
||||
return itemTable->emplace(getItemID, getItemEntry).second;
|
||||
}
|
||||
|
||||
GetItemEntry ItemTableManager::RetrieveItemEntry(std::string tableID, uint8_t itemID) {
|
||||
ItemTable* itemTable = RetrieveItemTable(tableID);
|
||||
if (itemTable != NULL) {
|
@ -1,7 +1,6 @@
|
||||
#pragma once
|
||||
#include <unordered_map>
|
||||
#include "z64item.h"
|
||||
#include "z64object.h"
|
||||
|
||||
#include <ultra64/gbi.h>
|
||||
|
||||
#define CHEST_ANIM_SHORT 0
|
||||
#define CHEST_ANIM_LONG 1
|
||||
@ -20,6 +19,12 @@ typedef struct {
|
||||
#define GET_ITEM_NONE \
|
||||
{ ITEM_NONE, 0, 0, 0, OBJECT_INVALID }
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
||||
#include <unordered_map>
|
||||
#include "z64item.h"
|
||||
#include "z64object.h"
|
||||
|
||||
typedef std::unordered_map<uint8_t, GetItemEntry> ItemTable;
|
||||
|
||||
class ItemTableManager {
|
||||
@ -28,8 +33,8 @@ class ItemTableManager {
|
||||
ItemTableManager();
|
||||
~ItemTableManager();
|
||||
bool AddItemTable(std::string tableID);
|
||||
bool AddItemEntry(std::string tableID, uint8_t getItemID, uint8_t itemID, uint16_t objectID, int8_t drawID,
|
||||
uint8_t textID, uint8_t field, bool chestAnim);
|
||||
bool AddItemEntry(std::string tableID, uint8_t getItemID, uint8_t itemID, uint16_t objectID, int8_t drawID, uint8_t textID, uint8_t field, bool chestAnim);
|
||||
bool AddItemEntry(std::string tableID, uint8_t getItemID, GetItemEntry getItemEntry);
|
||||
GetItemEntry RetrieveItemEntry(std::string tableID, uint8_t itemID);
|
||||
bool ClearItemTable(std::string tableID);
|
||||
|
||||
@ -38,3 +43,5 @@ class ItemTableManager {
|
||||
|
||||
ItemTable* RetrieveItemTable(std::string tableID);
|
||||
};
|
||||
|
||||
#endif
|
@ -56,9 +56,11 @@
|
||||
#endif
|
||||
|
||||
#include <Audio.h>
|
||||
#include <soh/Enhancements/item-tables/ItemTableManager.h>
|
||||
|
||||
OTRGlobals* OTRGlobals::Instance;
|
||||
SaveManager* SaveManager::Instance;
|
||||
ItemTableManager* ItemTableManager::Instance;
|
||||
|
||||
OTRGlobals::OTRGlobals() {
|
||||
context = Ship::GlobalCtx2::CreateInstance("Ship of Harkinian");
|
||||
@ -94,6 +96,142 @@ extern "C" void OTRAudio_Init()
|
||||
ResourceMgr_CacheDirectory("audio");
|
||||
}
|
||||
|
||||
#define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0]))
|
||||
|
||||
extern "C" void VanillaItemTable_Init() {
|
||||
GetItemEntry getItemTable[] = {
|
||||
GET_ITEM(ITEM_BOMBS_5, OBJECT_GI_BOMB_1, GID_BOMB, 0x32, 0x59, CHEST_ANIM_SHORT),
|
||||
GET_ITEM(ITEM_NUTS_5, OBJECT_GI_NUTS, GID_NUTS, 0x34, 0x0C, CHEST_ANIM_SHORT),
|
||||
GET_ITEM(ITEM_BOMBCHU, OBJECT_GI_BOMB_2, GID_BOMBCHU, 0x33, 0x80, CHEST_ANIM_SHORT),
|
||||
GET_ITEM(ITEM_BOW, OBJECT_GI_BOW, GID_BOW, 0x31, 0x80, CHEST_ANIM_LONG),
|
||||
GET_ITEM(ITEM_SLINGSHOT, OBJECT_GI_PACHINKO, GID_SLINGSHOT, 0x30, 0x80, CHEST_ANIM_LONG),
|
||||
GET_ITEM(ITEM_BOOMERANG, OBJECT_GI_BOOMERANG, GID_BOOMERANG, 0x35, 0x80, CHEST_ANIM_LONG),
|
||||
GET_ITEM(ITEM_STICK, OBJECT_GI_STICK, GID_STICK, 0x37, 0x0D, CHEST_ANIM_SHORT),
|
||||
GET_ITEM(ITEM_HOOKSHOT, OBJECT_GI_HOOKSHOT, GID_HOOKSHOT, 0x36, 0x80, CHEST_ANIM_LONG),
|
||||
GET_ITEM(ITEM_LONGSHOT, OBJECT_GI_HOOKSHOT, GID_LONGSHOT, 0x4F, 0x80, CHEST_ANIM_LONG),
|
||||
GET_ITEM(ITEM_LENS, OBJECT_GI_GLASSES, GID_LENS, 0x39, 0x80, CHEST_ANIM_LONG),
|
||||
GET_ITEM(ITEM_LETTER_ZELDA, OBJECT_GI_LETTER, GID_LETTER_ZELDA, 0x69, 0x80, CHEST_ANIM_LONG),
|
||||
GET_ITEM(ITEM_OCARINA_TIME, OBJECT_GI_OCARINA, GID_OCARINA_TIME, 0x3A, 0x80, CHEST_ANIM_LONG),
|
||||
GET_ITEM(ITEM_HAMMER, OBJECT_GI_HAMMER, GID_HAMMER, 0x38, 0x80, CHEST_ANIM_LONG),
|
||||
GET_ITEM(ITEM_COJIRO, OBJECT_GI_NIWATORI, GID_COJIRO, 0x02, 0x80, CHEST_ANIM_LONG),
|
||||
GET_ITEM(ITEM_BOTTLE, OBJECT_GI_BOTTLE, GID_BOTTLE, 0x42, 0x80, CHEST_ANIM_LONG),
|
||||
GET_ITEM(ITEM_POTION_RED, OBJECT_GI_LIQUID, GID_POTION_RED, 0x43, 0x80, CHEST_ANIM_LONG),
|
||||
GET_ITEM(ITEM_POTION_GREEN, OBJECT_GI_LIQUID, GID_POTION_GREEN, 0x44, 0x80, CHEST_ANIM_LONG),
|
||||
GET_ITEM(ITEM_POTION_BLUE, OBJECT_GI_LIQUID, GID_POTION_BLUE, 0x45, 0x80, CHEST_ANIM_LONG),
|
||||
GET_ITEM(ITEM_FAIRY, OBJECT_GI_BOTTLE, GID_BOTTLE, 0x46, 0x80, CHEST_ANIM_LONG),
|
||||
GET_ITEM(ITEM_MILK_BOTTLE, OBJECT_GI_MILK, GID_MILK, 0x98, 0x80, CHEST_ANIM_LONG),
|
||||
GET_ITEM(ITEM_LETTER_RUTO, OBJECT_GI_BOTTLE_LETTER, GID_LETTER_RUTO, 0x99, 0x80, CHEST_ANIM_LONG),
|
||||
GET_ITEM(ITEM_BEAN, OBJECT_GI_BEAN, GID_BEAN, 0x48, 0x80, CHEST_ANIM_SHORT),
|
||||
GET_ITEM(ITEM_MASK_SKULL, OBJECT_GI_SKJ_MASK, GID_MASK_SKULL, 0x10, 0x80, CHEST_ANIM_LONG),
|
||||
GET_ITEM(ITEM_MASK_SPOOKY, OBJECT_GI_REDEAD_MASK, GID_MASK_SPOOKY, 0x11, 0x80, CHEST_ANIM_LONG),
|
||||
GET_ITEM(ITEM_CHICKEN, OBJECT_GI_NIWATORI, GID_CHICKEN, 0x48, 0x80, CHEST_ANIM_LONG),
|
||||
GET_ITEM(ITEM_MASK_KEATON, OBJECT_GI_KI_TAN_MASK, GID_MASK_KEATON, 0x12, 0x80, CHEST_ANIM_LONG),
|
||||
GET_ITEM(ITEM_MASK_BUNNY, OBJECT_GI_RABIT_MASK, GID_MASK_BUNNY, 0x13, 0x80, CHEST_ANIM_LONG),
|
||||
GET_ITEM(ITEM_MASK_TRUTH, OBJECT_GI_TRUTH_MASK, GID_MASK_TRUTH, 0x17, 0x80, CHEST_ANIM_LONG),
|
||||
GET_ITEM(ITEM_POCKET_EGG, OBJECT_GI_EGG, GID_EGG, 0x01, 0x80, CHEST_ANIM_LONG),
|
||||
GET_ITEM(ITEM_POCKET_CUCCO, OBJECT_GI_NIWATORI, GID_CHICKEN, 0x48, 0x80, CHEST_ANIM_LONG),
|
||||
GET_ITEM(ITEM_ODD_MUSHROOM, OBJECT_GI_MUSHROOM, GID_ODD_MUSHROOM, 0x03, 0x80, CHEST_ANIM_LONG),
|
||||
GET_ITEM(ITEM_ODD_POTION, OBJECT_GI_POWDER, GID_ODD_POTION, 0x04, 0x80, CHEST_ANIM_LONG),
|
||||
GET_ITEM(ITEM_SAW, OBJECT_GI_SAW, GID_SAW, 0x05, 0x80, CHEST_ANIM_LONG),
|
||||
GET_ITEM(ITEM_SWORD_BROKEN, OBJECT_GI_BROKENSWORD, GID_SWORD_BROKEN, 0x08, 0x80, CHEST_ANIM_LONG),
|
||||
GET_ITEM(ITEM_PRESCRIPTION, OBJECT_GI_PRESCRIPTION, GID_PRESCRIPTION, 0x09, 0x80, CHEST_ANIM_LONG),
|
||||
GET_ITEM(ITEM_FROG, OBJECT_GI_FROG, GID_FROG, 0x0D, 0x80, CHEST_ANIM_LONG),
|
||||
GET_ITEM(ITEM_EYEDROPS, OBJECT_GI_EYE_LOTION, GID_EYEDROPS, 0x0E, 0x80, CHEST_ANIM_LONG),
|
||||
GET_ITEM(ITEM_CLAIM_CHECK, OBJECT_GI_TICKETSTONE, GID_CLAIM_CHECK, 0x0A, 0x80, CHEST_ANIM_LONG),
|
||||
GET_ITEM(ITEM_SWORD_KOKIRI, OBJECT_GI_SWORD_1, GID_SWORD_KOKIRI, 0xA4, 0x80, CHEST_ANIM_LONG),
|
||||
GET_ITEM(ITEM_SWORD_BGS, OBJECT_GI_LONGSWORD, GID_SWORD_BGS, 0x4B, 0x80, CHEST_ANIM_LONG),
|
||||
GET_ITEM(ITEM_SHIELD_DEKU, OBJECT_GI_SHIELD_1, GID_SHIELD_DEKU, 0x4C, 0xA0, CHEST_ANIM_SHORT),
|
||||
GET_ITEM(ITEM_SHIELD_HYLIAN, OBJECT_GI_SHIELD_2, GID_SHIELD_HYLIAN, 0x4D, 0xA0, CHEST_ANIM_SHORT),
|
||||
GET_ITEM(ITEM_SHIELD_MIRROR, OBJECT_GI_SHIELD_3, GID_SHIELD_MIRROR, 0x4E, 0x80, CHEST_ANIM_LONG),
|
||||
GET_ITEM(ITEM_TUNIC_GORON, OBJECT_GI_CLOTHES, GID_TUNIC_GORON, 0x50, 0xA0, CHEST_ANIM_LONG),
|
||||
GET_ITEM(ITEM_TUNIC_ZORA, OBJECT_GI_CLOTHES, GID_TUNIC_ZORA, 0x51, 0xA0, CHEST_ANIM_LONG),
|
||||
GET_ITEM(ITEM_BOOTS_IRON, OBJECT_GI_BOOTS_2, GID_BOOTS_IRON, 0x53, 0x80, CHEST_ANIM_LONG),
|
||||
GET_ITEM(ITEM_BOOTS_HOVER, OBJECT_GI_HOVERBOOTS, GID_BOOTS_HOVER, 0x54, 0x80, CHEST_ANIM_LONG),
|
||||
GET_ITEM(ITEM_QUIVER_40, OBJECT_GI_ARROWCASE, GID_QUIVER_40, 0x56, 0x80, CHEST_ANIM_LONG),
|
||||
GET_ITEM(ITEM_QUIVER_50, OBJECT_GI_ARROWCASE, GID_QUIVER_50, 0x57, 0x80, CHEST_ANIM_LONG),
|
||||
GET_ITEM(ITEM_BOMB_BAG_20, OBJECT_GI_BOMBPOUCH, GID_BOMB_BAG_20, 0x58, 0x80, CHEST_ANIM_LONG),
|
||||
GET_ITEM(ITEM_BOMB_BAG_30, OBJECT_GI_BOMBPOUCH, GID_BOMB_BAG_30, 0x59, 0x80, CHEST_ANIM_LONG),
|
||||
GET_ITEM(ITEM_BOMB_BAG_40, OBJECT_GI_BOMBPOUCH, GID_BOMB_BAG_40, 0x5A, 0x80, CHEST_ANIM_LONG),
|
||||
GET_ITEM(ITEM_GAUNTLETS_SILVER, OBJECT_GI_GLOVES, GID_GAUNTLETS_SILVER, 0x5B, 0x80, CHEST_ANIM_LONG),
|
||||
GET_ITEM(ITEM_GAUNTLETS_GOLD, OBJECT_GI_GLOVES, GID_GAUNTLETS_GOLD, 0x5C, 0x80, CHEST_ANIM_LONG),
|
||||
GET_ITEM(ITEM_SCALE_SILVER, OBJECT_GI_SCALE, GID_SCALE_SILVER, 0xCD, 0x80, CHEST_ANIM_LONG),
|
||||
GET_ITEM(ITEM_SCALE_GOLDEN, OBJECT_GI_SCALE, GID_SCALE_GOLDEN, 0xCE, 0x80, CHEST_ANIM_LONG),
|
||||
GET_ITEM(ITEM_STONE_OF_AGONY, OBJECT_GI_MAP, GID_STONE_OF_AGONY, 0x68, 0x80, CHEST_ANIM_LONG),
|
||||
GET_ITEM(ITEM_GERUDO_CARD, OBJECT_GI_GERUDO, GID_GERUDO_CARD, 0x7B, 0x80, CHEST_ANIM_LONG),
|
||||
GET_ITEM(ITEM_OCARINA_FAIRY, OBJECT_GI_OCARINA_0, GID_OCARINA_FAIRY, 0x4A, 0x80, CHEST_ANIM_LONG),
|
||||
GET_ITEM(ITEM_SEEDS, OBJECT_GI_SEED, GID_SEEDS, 0xDC, 0x50, CHEST_ANIM_SHORT),
|
||||
GET_ITEM(ITEM_HEART_CONTAINER, OBJECT_GI_HEARTS, GID_HEART_CONTAINER, 0xC6, 0x80, CHEST_ANIM_LONG),
|
||||
GET_ITEM(ITEM_HEART_PIECE_2, OBJECT_GI_HEARTS, GID_HEART_PIECE, 0xC2, 0x80, CHEST_ANIM_LONG),
|
||||
GET_ITEM(ITEM_KEY_BOSS, OBJECT_GI_BOSSKEY, GID_KEY_BOSS, 0xC7, 0x80, CHEST_ANIM_LONG),
|
||||
GET_ITEM(ITEM_COMPASS, OBJECT_GI_COMPASS, GID_COMPASS, 0x67, 0x80, CHEST_ANIM_LONG),
|
||||
GET_ITEM(ITEM_DUNGEON_MAP, OBJECT_GI_MAP, GID_DUNGEON_MAP, 0x66, 0x80, CHEST_ANIM_LONG),
|
||||
GET_ITEM(ITEM_KEY_SMALL, OBJECT_GI_KEY, GID_KEY_SMALL, 0x60, 0x80, CHEST_ANIM_SHORT),
|
||||
GET_ITEM(ITEM_MAGIC_SMALL, OBJECT_GI_MAGICPOT, GID_MAGIC_SMALL, 0x52, 0x6F, CHEST_ANIM_SHORT),
|
||||
GET_ITEM(ITEM_MAGIC_LARGE, OBJECT_GI_MAGICPOT, GID_MAGIC_LARGE, 0x52, 0x6E, CHEST_ANIM_SHORT),
|
||||
GET_ITEM(ITEM_WALLET_ADULT, OBJECT_GI_PURSE, GID_WALLET_ADULT, 0x5E, 0x80, CHEST_ANIM_LONG),
|
||||
GET_ITEM(ITEM_WALLET_GIANT, OBJECT_GI_PURSE, GID_WALLET_GIANT, 0x5F, 0x80, CHEST_ANIM_LONG),
|
||||
GET_ITEM(ITEM_WEIRD_EGG, OBJECT_GI_EGG, GID_EGG, 0x9A, 0x80, CHEST_ANIM_LONG),
|
||||
GET_ITEM(ITEM_HEART, OBJECT_GI_HEART, GID_HEART, 0x55, 0x80, CHEST_ANIM_LONG),
|
||||
GET_ITEM(ITEM_ARROWS_SMALL, OBJECT_GI_ARROW, GID_ARROWS_SMALL, 0xE6, 0x48, CHEST_ANIM_SHORT),
|
||||
GET_ITEM(ITEM_ARROWS_MEDIUM, OBJECT_GI_ARROW, GID_ARROWS_MEDIUM, 0xE6, 0x49, CHEST_ANIM_SHORT),
|
||||
GET_ITEM(ITEM_ARROWS_LARGE, OBJECT_GI_ARROW, GID_ARROWS_LARGE, 0xE6, 0x4A, CHEST_ANIM_SHORT),
|
||||
GET_ITEM(ITEM_RUPEE_GREEN, OBJECT_GI_RUPY, GID_RUPEE_GREEN, 0x6F, 0x00, CHEST_ANIM_SHORT),
|
||||
GET_ITEM(ITEM_RUPEE_BLUE, OBJECT_GI_RUPY, GID_RUPEE_BLUE, 0xCC, 0x01, CHEST_ANIM_SHORT),
|
||||
GET_ITEM(ITEM_RUPEE_RED, OBJECT_GI_RUPY, GID_RUPEE_RED, 0xF0, 0x02, CHEST_ANIM_SHORT),
|
||||
GET_ITEM(ITEM_HEART_CONTAINER, OBJECT_GI_HEARTS, GID_HEART_CONTAINER, 0xC6, 0x80, CHEST_ANIM_LONG),
|
||||
GET_ITEM(ITEM_MILK, OBJECT_GI_MILK, GID_MILK, 0x98, 0x80, CHEST_ANIM_LONG),
|
||||
GET_ITEM(ITEM_MASK_GORON, OBJECT_GI_GOLONMASK, GID_MASK_GORON, 0x14, 0x80, CHEST_ANIM_LONG),
|
||||
GET_ITEM(ITEM_MASK_ZORA, OBJECT_GI_ZORAMASK, GID_MASK_ZORA, 0x15, 0x80, CHEST_ANIM_LONG),
|
||||
GET_ITEM(ITEM_MASK_GERUDO, OBJECT_GI_GERUDOMASK, GID_MASK_GERUDO, 0x16, 0x80, CHEST_ANIM_LONG),
|
||||
GET_ITEM(ITEM_BRACELET, OBJECT_GI_BRACELET, GID_BRACELET, 0x79, 0x80, CHEST_ANIM_LONG),
|
||||
GET_ITEM(ITEM_RUPEE_PURPLE, OBJECT_GI_RUPY, GID_RUPEE_PURPLE, 0xF1, 0x14, CHEST_ANIM_SHORT),
|
||||
GET_ITEM(ITEM_RUPEE_GOLD, OBJECT_GI_RUPY, GID_RUPEE_GOLD, 0xF2, 0x13, CHEST_ANIM_SHORT),
|
||||
GET_ITEM(ITEM_SWORD_BGS, OBJECT_GI_LONGSWORD, GID_SWORD_BGS, 0x0C, 0x80, CHEST_ANIM_LONG),
|
||||
GET_ITEM(ITEM_ARROW_FIRE, OBJECT_GI_M_ARROW, GID_ARROW_FIRE, 0x70, 0x80, CHEST_ANIM_LONG),
|
||||
GET_ITEM(ITEM_ARROW_ICE, OBJECT_GI_M_ARROW, GID_ARROW_ICE, 0x71, 0x80, CHEST_ANIM_LONG),
|
||||
GET_ITEM(ITEM_ARROW_LIGHT, OBJECT_GI_M_ARROW, GID_ARROW_LIGHT, 0x72, 0x80, CHEST_ANIM_LONG),
|
||||
GET_ITEM(ITEM_SKULL_TOKEN, OBJECT_GI_SUTARU, GID_SKULL_TOKEN, 0xB4, 0x80, CHEST_ANIM_SHORT),
|
||||
GET_ITEM(ITEM_DINS_FIRE, OBJECT_GI_GODDESS, GID_DINS_FIRE, 0xAD, 0x80, CHEST_ANIM_LONG),
|
||||
GET_ITEM(ITEM_FARORES_WIND, OBJECT_GI_GODDESS, GID_FARORES_WIND, 0xAE, 0x80, CHEST_ANIM_LONG),
|
||||
GET_ITEM(ITEM_NAYRUS_LOVE, OBJECT_GI_GODDESS, GID_NAYRUS_LOVE, 0xAF, 0x80, CHEST_ANIM_LONG),
|
||||
GET_ITEM(ITEM_BULLET_BAG_30, OBJECT_GI_DEKUPOUCH, GID_BULLET_BAG, 0x07, 0x80, CHEST_ANIM_LONG),
|
||||
GET_ITEM(ITEM_BULLET_BAG_40, OBJECT_GI_DEKUPOUCH, GID_BULLET_BAG, 0x07, 0x80, CHEST_ANIM_LONG),
|
||||
GET_ITEM(ITEM_STICKS_5, OBJECT_GI_STICK, GID_STICK, 0x37, 0x0D, CHEST_ANIM_SHORT),
|
||||
GET_ITEM(ITEM_STICKS_10, OBJECT_GI_STICK, GID_STICK, 0x37, 0x0D, CHEST_ANIM_SHORT),
|
||||
GET_ITEM(ITEM_NUTS_5, OBJECT_GI_NUTS, GID_NUTS, 0x34, 0x0C, CHEST_ANIM_SHORT),
|
||||
GET_ITEM(ITEM_NUTS_10, OBJECT_GI_NUTS, GID_NUTS, 0x34, 0x0C, CHEST_ANIM_SHORT),
|
||||
GET_ITEM(ITEM_BOMB, OBJECT_GI_BOMB_1, GID_BOMB, 0x32, 0x59, CHEST_ANIM_SHORT),
|
||||
GET_ITEM(ITEM_BOMBS_10, OBJECT_GI_BOMB_1, GID_BOMB, 0x32, 0x59, CHEST_ANIM_SHORT),
|
||||
GET_ITEM(ITEM_BOMBS_20, OBJECT_GI_BOMB_1, GID_BOMB, 0x32, 0x59, CHEST_ANIM_SHORT),
|
||||
GET_ITEM(ITEM_BOMBS_30, OBJECT_GI_BOMB_1, GID_BOMB, 0x32, 0x59, CHEST_ANIM_SHORT),
|
||||
GET_ITEM(ITEM_SEEDS_30, OBJECT_GI_SEED, GID_SEEDS, 0xDC, 0x50, CHEST_ANIM_SHORT),
|
||||
GET_ITEM(ITEM_BOMBCHUS_5, OBJECT_GI_BOMB_2, GID_BOMBCHU, 0x33, 0x80, CHEST_ANIM_SHORT),
|
||||
GET_ITEM(ITEM_BOMBCHUS_20, OBJECT_GI_BOMB_2, GID_BOMBCHU, 0x33, 0x80, CHEST_ANIM_SHORT),
|
||||
GET_ITEM(ITEM_FISH, OBJECT_GI_FISH, GID_FISH, 0x47, 0x80, CHEST_ANIM_LONG),
|
||||
GET_ITEM(ITEM_BUG, OBJECT_GI_INSECT, GID_BUG, 0x7A, 0x80, CHEST_ANIM_LONG),
|
||||
GET_ITEM(ITEM_BLUE_FIRE, OBJECT_GI_FIRE, GID_BLUE_FIRE, 0x5D, 0x80, CHEST_ANIM_LONG),
|
||||
GET_ITEM(ITEM_POE, OBJECT_GI_GHOST, GID_POE, 0x97, 0x80, CHEST_ANIM_LONG),
|
||||
GET_ITEM(ITEM_BIG_POE, OBJECT_GI_GHOST, GID_BIG_POE, 0xF9, 0x80, CHEST_ANIM_LONG),
|
||||
GET_ITEM(ITEM_KEY_SMALL, OBJECT_GI_KEY, GID_KEY_SMALL, 0xF3, 0x80, CHEST_ANIM_SHORT),
|
||||
GET_ITEM(ITEM_RUPEE_GREEN, OBJECT_GI_RUPY, GID_RUPEE_GREEN, 0xF4, 0x00, CHEST_ANIM_SHORT),
|
||||
GET_ITEM(ITEM_RUPEE_BLUE, OBJECT_GI_RUPY, GID_RUPEE_BLUE, 0xF5, 0x01, CHEST_ANIM_SHORT),
|
||||
GET_ITEM(ITEM_RUPEE_RED, OBJECT_GI_RUPY, GID_RUPEE_RED, 0xF6, 0x02, CHEST_ANIM_SHORT),
|
||||
GET_ITEM(ITEM_RUPEE_PURPLE, OBJECT_GI_RUPY, GID_RUPEE_PURPLE, 0xF7, 0x14, CHEST_ANIM_SHORT),
|
||||
GET_ITEM(ITEM_HEART_PIECE_2, OBJECT_GI_HEARTS, GID_HEART_PIECE, 0xFA, 0x80, CHEST_ANIM_LONG),
|
||||
GET_ITEM(ITEM_STICK_UPGRADE_20, OBJECT_GI_STICK, GID_STICK, 0x90, 0x80, CHEST_ANIM_SHORT),
|
||||
GET_ITEM(ITEM_STICK_UPGRADE_30, OBJECT_GI_STICK, GID_STICK, 0x91, 0x80, CHEST_ANIM_SHORT),
|
||||
GET_ITEM(ITEM_NUT_UPGRADE_30, OBJECT_GI_NUTS, GID_NUTS, 0xA7, 0x80, CHEST_ANIM_SHORT),
|
||||
GET_ITEM(ITEM_NUT_UPGRADE_40, OBJECT_GI_NUTS, GID_NUTS, 0xA8, 0x80, CHEST_ANIM_SHORT),
|
||||
GET_ITEM(ITEM_BULLET_BAG_50, OBJECT_GI_DEKUPOUCH, GID_BULLET_BAG_50, 0x6C, 0x80, CHEST_ANIM_LONG),
|
||||
GET_ITEM_NONE,
|
||||
GET_ITEM_NONE,
|
||||
};
|
||||
ItemTableManager::Instance->AddItemTable("Vanilla");
|
||||
for (uint8_t i = 0; i < ARRAY_SIZE(getItemTable); i++) {
|
||||
ItemTableManager::Instance->AddItemEntry("Vanilla", i, getItemTable[i]);
|
||||
}
|
||||
}
|
||||
|
||||
extern "C" void OTRExtScanner() {
|
||||
auto lst = *OTRGlobals::Instance->context->GetResourceManager()->ListFiles("*.*").get();
|
||||
|
||||
@ -113,6 +251,7 @@ extern "C" void InitOTR() {
|
||||
#endif
|
||||
OTRGlobals::Instance = new OTRGlobals();
|
||||
SaveManager::Instance = new SaveManager();
|
||||
ItemTableManager::Instance = new ItemTableManager();
|
||||
auto t = OTRGlobals::Instance->context->GetResourceManager()->LoadFile("version");
|
||||
|
||||
if (!t->bHasLoadError)
|
||||
@ -130,6 +269,7 @@ extern "C" void InitOTR() {
|
||||
Rando_Init();
|
||||
InitItemTracker();
|
||||
OTRExtScanner();
|
||||
VanillaItemTable_Init();
|
||||
}
|
||||
|
||||
#ifdef _WIN32
|
||||
@ -1514,3 +1654,7 @@ extern "C" s32 Randomizer_GetRandomizedItemId(GetItemID ogId, s16 actorId, s16 a
|
||||
extern "C" s32 Randomizer_GetItemIdFromKnownCheck(RandomizerCheck randomizerCheck, GetItemID ogId) {
|
||||
return OTRGlobals::Instance->gRandomizer->GetRandomizedItemIdFromKnownCheck(randomizerCheck, ogId);
|
||||
}
|
||||
|
||||
extern "C" GetItemEntry ItemTable_Retrieve(int16_t getItemID) {
|
||||
return ItemTableManager::Instance->RetrieveItemEntry("Vanilla", getItemID);
|
||||
}
|
||||
|
@ -5,6 +5,7 @@
|
||||
|
||||
#include "GlobalCtx2.h"
|
||||
#include "SaveManager.h"
|
||||
#include <soh/Enhancements/item-tables/ItemTableManager.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
#include "Enhancements/savestates.h"
|
||||
@ -28,6 +29,7 @@ private:
|
||||
#endif
|
||||
|
||||
#ifndef __cplusplus
|
||||
void VanillaItemTable_Init();
|
||||
void OTRAudio_Init();
|
||||
void InitAudio();
|
||||
void Graph_StartFrame();
|
||||
@ -100,6 +102,7 @@ s16 Randomizer_GetItemModelFromId(s16 itemId);
|
||||
s32 Randomizer_GetItemIDFromGetItemID(s32 getItemId);
|
||||
s32 Randomizer_GetRandomizedItemId(GetItemID ogId, s16 actorId, s16 actorParams, s16 sceneNum);
|
||||
s32 Randomizer_GetItemIdFromKnownCheck(RandomizerCheck randomizerCheck, GetItemID ogId);
|
||||
GetItemEntry ItemTable_Retrieve(int16_t getItemID);
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
@ -21,13 +21,13 @@
|
||||
#include "objects/object_link_child/object_link_child.h"
|
||||
#include "textures/icon_item_24_static/icon_item_24_static.h"
|
||||
|
||||
typedef struct {
|
||||
/* 0x00 */ u8 itemId;
|
||||
/* 0x01 */ u8 field; // various bit-packed data
|
||||
/* 0x02 */ s8 gi; // defines the draw id and chest opening animation
|
||||
/* 0x03 */ u8 textId;
|
||||
/* 0x04 */ u16 objectId;
|
||||
} GetItemEntry; // size = 0x06
|
||||
//typedef struct {
|
||||
// /* 0x00 */ u8 itemId;
|
||||
// /* 0x01 */ u8 field; // various bit-packed data
|
||||
// /* 0x02 */ s8 gi; // defines the draw id and chest opening animation
|
||||
// /* 0x03 */ u8 textId;
|
||||
// /* 0x04 */ u16 objectId;
|
||||
//} GetItemEntry; // size = 0x06
|
||||
|
||||
#define GET_ITEM(itemId, objectId, drawId, textId, field, chestAnim) \
|
||||
{ itemId, field, (chestAnim != CHEST_ANIM_SHORT ? 1 : -1) * (drawId + 1), textId, objectId }
|
||||
@ -1591,9 +1591,9 @@ s32 func_808332E4(Player* this) {
|
||||
}
|
||||
|
||||
void func_808332F4(Player* this, GlobalContext* globalCtx) {
|
||||
GetItemEntry* giEntry = &sGetItemTable[this->getItemId - 1];
|
||||
GetItemEntry giEntry = ItemTable_Retrieve(this->getItemId - 1);
|
||||
|
||||
this->unk_862 = ABS(giEntry->gi);
|
||||
this->unk_862 = ABS(giEntry.gi);
|
||||
}
|
||||
|
||||
static LinkAnimationHeader* func_80833338(Player* this) {
|
||||
@ -4994,7 +4994,7 @@ static LinkAnimationHeader* D_80854548[] = {
|
||||
s32 func_8083B040(Player* this, GlobalContext* globalCtx) {
|
||||
s32 sp2C;
|
||||
s32 sp28;
|
||||
GetItemEntry* giEntry;
|
||||
GetItemEntry giEntry;
|
||||
Actor* targetActor;
|
||||
|
||||
if ((this->unk_6AD != 0) &&
|
||||
@ -5031,8 +5031,8 @@ s32 func_8083B040(Player* this, GlobalContext* globalCtx) {
|
||||
func_80835DE4(globalCtx, this, func_8084F104, 0);
|
||||
|
||||
if (sp2C >= 0) {
|
||||
giEntry = &sGetItemTable[D_80854528[sp2C] - 1];
|
||||
func_8083AE40(this, giEntry->objectId);
|
||||
giEntry = ItemTable_Retrieve(D_80854528[sp2C] - 1);
|
||||
func_8083AE40(this, giEntry.objectId);
|
||||
}
|
||||
|
||||
this->stateFlags1 |= PLAYER_STATE1_6 | PLAYER_STATE1_28 | PLAYER_STATE1_29;
|
||||
@ -6243,7 +6243,7 @@ s32 func_8083E5A8(Player* this, GlobalContext* globalCtx) {
|
||||
}
|
||||
|
||||
if (this->getItemId < GI_MAX) {
|
||||
GetItemEntry* giEntry = &sGetItemTable[this->getItemId - 1];
|
||||
GetItemEntry giEntry = ItemTable_Retrieve(this->getItemId - 1);
|
||||
|
||||
if ((interactedActor != &this->actor) && !iREG(67)) {
|
||||
interactedActor->parent = &this->actor;
|
||||
@ -6258,24 +6258,24 @@ s32 func_8083E5A8(Player* this, GlobalContext* globalCtx) {
|
||||
return;
|
||||
}
|
||||
|
||||
s32 drop = giEntry->objectId;
|
||||
s32 drop = giEntry.objectId;
|
||||
|
||||
if (gSaveContext.n64ddFlag || (globalCtx->sceneNum == SCENE_BOWLING) || !(CVar_GetS32("gFastDrops", 0) &&
|
||||
((drop == OBJECT_GI_BOMB_1) || (drop == OBJECT_GI_NUTS) || (drop == OBJECT_GI_STICK) ||
|
||||
(drop == OBJECT_GI_SEED) || (drop == OBJECT_GI_MAGICPOT) || (drop == OBJECT_GI_ARROW))) &&
|
||||
(Item_CheckObtainability(giEntry->itemId) == ITEM_NONE)) {
|
||||
(Item_CheckObtainability(giEntry.itemId) == ITEM_NONE)) {
|
||||
|
||||
if (gSaveContext.n64ddFlag &&
|
||||
((interactedActor->id == ACTOR_EN_ITEM00 &&
|
||||
(interactedActor->params != 6 && interactedActor->params != 17)) ||
|
||||
(interactedActor->id == ACTOR_EN_KAREBABA || interactedActor->id == ACTOR_EN_DEKUBABA))) {
|
||||
func_8083E4C4(globalCtx, this, giEntry);
|
||||
func_8083E4C4(globalCtx, this, &giEntry);
|
||||
this->getItemId = GI_NONE;
|
||||
return 0;
|
||||
}
|
||||
|
||||
func_808323B4(globalCtx, this);
|
||||
func_8083AE40(this, giEntry->objectId);
|
||||
func_8083AE40(this, giEntry.objectId);
|
||||
|
||||
if (!(this->stateFlags2 & PLAYER_STATE2_10) || (this->currentBoots == PLAYER_BOOTS_IRON)) {
|
||||
func_80836898(globalCtx, this, func_8083A434);
|
||||
@ -6288,29 +6288,29 @@ s32 func_8083E5A8(Player* this, GlobalContext* globalCtx) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
func_8083E4C4(globalCtx, this, giEntry);
|
||||
func_8083E4C4(globalCtx, this, &giEntry);
|
||||
this->getItemId = GI_NONE;
|
||||
}
|
||||
} else if (CHECK_BTN_ALL(sControlInput->press.button, BTN_A) && !(this->stateFlags1 & PLAYER_STATE1_11) &&
|
||||
!(this->stateFlags2 & PLAYER_STATE2_10)) {
|
||||
if (this->getItemId != GI_NONE) {
|
||||
GetItemEntry* giEntry = &sGetItemTable[-this->getItemId - 1];
|
||||
GetItemEntry giEntry = ItemTable_Retrieve(-this->getItemId - 1);
|
||||
EnBox* chest = (EnBox*)interactedActor;
|
||||
if (CVar_GetS32("gFastChests", 0) != 0) {
|
||||
giEntry->gi = -1 * abs(giEntry->gi);
|
||||
giEntry.gi = -1 * abs(giEntry.gi);
|
||||
}
|
||||
|
||||
if (giEntry->itemId != ITEM_NONE) {
|
||||
if (((Item_CheckObtainability(giEntry->itemId) == ITEM_NONE) && (giEntry->field & 0x40)) ||
|
||||
((Item_CheckObtainability(giEntry->itemId) != ITEM_NONE) && (giEntry->field & 0x20))) {
|
||||
if (giEntry.itemId != ITEM_NONE) {
|
||||
if (((Item_CheckObtainability(giEntry.itemId) == ITEM_NONE) && (giEntry.field & 0x40)) ||
|
||||
((Item_CheckObtainability(giEntry.itemId) != ITEM_NONE) && (giEntry.field & 0x20))) {
|
||||
this->getItemId = -GI_RUPEE_BLUE;
|
||||
giEntry = &sGetItemTable[GI_RUPEE_BLUE - 1];
|
||||
giEntry = ItemTable_Retrieve(GI_RUPEE_BLUE - 1);
|
||||
}
|
||||
}
|
||||
|
||||
func_80836898(globalCtx, this, func_8083A434);
|
||||
this->stateFlags1 |= PLAYER_STATE1_10 | PLAYER_STATE1_11 | PLAYER_STATE1_29;
|
||||
func_8083AE40(this, giEntry->objectId);
|
||||
func_8083AE40(this, giEntry.objectId);
|
||||
this->actor.world.pos.x =
|
||||
chest->dyna.actor.world.pos.x - (Math_SinS(chest->dyna.actor.shape.rot.y) * 29.4343f);
|
||||
this->actor.world.pos.z =
|
||||
@ -6318,8 +6318,8 @@ s32 func_8083E5A8(Player* this, GlobalContext* globalCtx) {
|
||||
this->currentYaw = this->actor.shape.rot.y = chest->dyna.actor.shape.rot.y;
|
||||
func_80832224(this);
|
||||
|
||||
if ((giEntry->itemId != ITEM_NONE) && (giEntry->gi >= 0) &&
|
||||
(Item_CheckObtainability(giEntry->itemId) == ITEM_NONE)) {
|
||||
if ((giEntry.itemId != ITEM_NONE) && (giEntry.gi >= 0) &&
|
||||
(Item_CheckObtainability(giEntry.itemId) == ITEM_NONE)) {
|
||||
func_808322D0(globalCtx, this, this->ageProperties->unk_98);
|
||||
func_80832F54(globalCtx, this, 0x28F);
|
||||
chest->unk_1F4 = 1;
|
||||
@ -12667,7 +12667,7 @@ void func_8084DFAC(GlobalContext* globalCtx, Player* this) {
|
||||
}
|
||||
|
||||
s32 func_8084DFF4(GlobalContext* globalCtx, Player* this) {
|
||||
GetItemEntry* giEntry;
|
||||
GetItemEntry giEntry;
|
||||
s32 temp1;
|
||||
s32 temp2;
|
||||
|
||||
@ -12676,7 +12676,7 @@ s32 func_8084DFF4(GlobalContext* globalCtx, Player* this) {
|
||||
}
|
||||
|
||||
if (this->unk_84F == 0) {
|
||||
giEntry = &sGetItemTable[this->getItemId - 1];
|
||||
giEntry = ItemTable_Retrieve(this->getItemId - 1);
|
||||
this->unk_84F = 1;
|
||||
|
||||
// make sure we get the BGS instead of giant's knife
|
||||
@ -12685,8 +12685,8 @@ s32 func_8084DFF4(GlobalContext* globalCtx, Player* this) {
|
||||
gSaveContext.swordHealth = 8;
|
||||
}
|
||||
|
||||
Message_StartTextbox(globalCtx, giEntry->textId, &this->actor);
|
||||
Item_Give(globalCtx, giEntry->itemId);
|
||||
Message_StartTextbox(globalCtx, giEntry.textId, &this->actor);
|
||||
Item_Give(globalCtx, giEntry.itemId);
|
||||
|
||||
if (((this->getItemId >= GI_RUPEE_GREEN) && (this->getItemId <= GI_RUPEE_RED)) ||
|
||||
((this->getItemId >= GI_RUPEE_PURPLE) && (this->getItemId <= GI_RUPEE_GOLD)) ||
|
||||
@ -13273,14 +13273,14 @@ void func_8084F104(Player* this, GlobalContext* globalCtx) {
|
||||
func_80853148(globalCtx, targetActor);
|
||||
}
|
||||
else {
|
||||
GetItemEntry* giEntry = &sGetItemTable[D_80854528[this->exchangeItemId - 1] - 1];
|
||||
GetItemEntry giEntry = ItemTable_Retrieve(D_80854528[this->exchangeItemId - 1] - 1);
|
||||
|
||||
if (this->itemActionParam >= PLAYER_AP_LETTER_ZELDA) {
|
||||
if (giEntry->gi >= 0) {
|
||||
this->unk_862 = giEntry->gi;
|
||||
if (giEntry.gi >= 0) {
|
||||
this->unk_862 = giEntry.gi;
|
||||
}
|
||||
else {
|
||||
this->unk_862 = -giEntry->gi;
|
||||
this->unk_862 = -giEntry.gi;
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user