Misc stuff 4 (#59)

* playrget progress and match treasuremanager remaining functions

* some docs

* fix build issues

* random docs

* match func_ov094_02172290

* random docs

* actor cleanup

* match freestanding item funcs

* mType -> mpProfile

* decompile random functions

* docs and start of wip chest stuff

* random docs

* more random docs

* match func_ov036_0211d0a8

* match func_ov036_0211d2dc & func_ov036_0211d570

* match func_ov110_02184a40

* random doc

* document letter/stamps system

* match func_ov001_020bb9f8

* fix build issues

* decompile tres

* start decomp chest base

* fix regressions

* name TRES

* name UnkStruct_ov024_020d86b0

* name stamp types and update save struct stuff

* name things and document BMG IDs
This commit is contained in:
Yanis
2026-05-03 18:57:01 +02:00
committed by GitHub
parent e6eae481b8
commit 645ed65b76
97 changed files with 2680 additions and 688 deletions
+375 -127
View File
@@ -3,6 +3,8 @@
#include "Actor/ActorId.hpp"
#include "Actor/ActorManager.hpp"
#include "Actor/ActorUnkNSHD.hpp"
#include "MainGame/MiscAdvManager.hpp"
#include "MapObject/MapObjectChestBase.hpp"
#include "MapObject/MapObjectManager.hpp"
#include "Player/PlayerGet.hpp"
#include "System/OverlayManager.hpp"
@@ -13,11 +15,13 @@
#include "Unknown/UnkStruct_027e09bc.hpp"
#include "Unknown/UnkStruct_027e0cd8.hpp"
#include "Unknown/UnkStruct_027e0cec.hpp"
#include "Unknown/UnkStruct_027e0cf8.hpp"
#include "Unknown/UnkStruct_ov000_02067bc4.hpp"
#include "Unknown/UnkStruct_ov000_020b34c4.hpp"
#include "Unknown/UnkStruct_ov000_020b51b8.hpp"
#include "Unknown/UnkStruct_ov000_020b51c0.hpp"
#include "versions.h"
#include <nitro/math.h>
struct UnkStruct_02186240 {
@@ -26,6 +30,9 @@ struct UnkStruct_02186240 {
};
UnkStruct_02186240 data_ov110_02186240;
extern const char *data_ov000_020aa240; // .nsbtx
extern const char *data_ov000_020aa248; // .nsbmd
extern "C" void func_ov000_0205ca74(unk32);
extern "C" void func_01ffb6e4(unk32, const void *, void *);
extern "C" void func_01ffc5a0(UnkSystem4 *, unk32, u16, void *, unk32);
@@ -33,18 +40,15 @@ extern "C" void func_ov000_0208f820();
extern "C" unk32 func_ov024_020d5354(unk32 *, u16 *);
extern "C" void func_ov000_02058fc4(unk32 *, UnkStruct_PlayerGet_74 *, Vec3p *);
extern unk32 *data_027e0958;
extern "C" void func_ov024_020d6370(unk32 *, ItemId);
extern unk32 *data_ov024_020d86b0;
extern "C" void func_ov000_0208ba10(char *, void *, unk32);
extern "C" unk32 func_ov000_020a4c00(ItemId itemId);
extern "C" void func_02015ea8(unk32, unk16 *);
extern "C" void func_ov000_0208ba10(void *, void *, unk32);
extern "C" void func_02015ea8(unk32, void *);
extern "C" void func_02015628(char *, char *, unk32, void *, size_t);
extern "C" void func_02015664(char *, unk32);
extern "C" void func_020156c8(char *, char *, unk32);
extern "C" void func_020156f4(char *);
extern "C" void func_02015644(char *);
extern "C" UnkResourceStruct *func_ov000_0205abcc(char *, char *, unk32, unk32, unk32);
extern "C" UnkResourceStruct *func_ov000_0205abcc(void *, void *, unk32, unk32, unk32);
extern "C" unk32 func_ov000_02077590(unk32);
static const unk32 data_ov110_02185dc4[1] = {8};
@@ -56,14 +60,17 @@ static const UnkStruct_ov110_02185dc8 data_ov110_02185dc8[] = {
{ItemId_AncientShield, ItemFlag_AncientShield}, {ItemId_PanFlute, ItemFlag_PanFlute},
};
// non-matching
ARM bool ItemManager::func_ov110_02184a40(ItemId itemId) {
s16 itemFlag_s16;
ItemFlag itemFlag;
ItemFlag temp_r0_5;
u32 temp_r2;
u32 i;
static inline s16 GetItemFlag(ItemId itemId) {
for (u32 i = 0; i < ARRAY_LEN(data_ov110_02185dc8); i++) {
if (itemId == data_ov110_02185dc8[i].mItemId) {
return data_ov110_02185dc8[i].mItemFlag;
}
}
return ItemFlag_None;
}
ARM bool ItemManager::func_ov110_02184a40(ItemId itemId) {
switch (itemId) {
case ItemId_NormalKey:
this->func_ov000_020a87c8(1);
@@ -128,7 +135,7 @@ ARM bool ItemManager::func_ov110_02184a40(ItemId itemId) {
}
break;
default:
itemFlag = ItemManager::func_ov000_020a8984(itemId);
ItemFlag itemFlag = ItemManager::func_ov000_020a8984(itemId);
if (itemFlag != ItemFlag_None) {
this->func_ov000_020a863c(itemFlag);
@@ -148,35 +155,28 @@ ARM bool ItemManager::func_ov110_02184a40(ItemId itemId) {
if (this->mEquippedItem == ItemFlag_None) {
this->mEquippedItem = itemFlag;
data_ov024_020d8698->func_ov024_020cd458(itemFlag, 0);
data_ov024_020d8698->func_ov024_020cd458(this->mEquippedItem, 0);
}
} else {
itemFlag_s16 = ItemFlag_None;
itemFlag = GetItemFlag(itemId);
for (i = 0; i < ARRAY_LEN(data_ov110_02185dc8); i++) {
if (itemId == data_ov110_02185dc8[i].mItemId) {
itemFlag_s16 = data_ov110_02185dc8[i].mItemFlag;
break;
}
}
if (itemFlag_s16 != ItemFlag_None) {
this->func_ov000_020a863c(itemFlag_s16);
if (itemFlag != ItemFlag_None) {
this->func_ov000_020a863c(itemFlag);
}
}
break;
}
temp_r0_5 = ItemManager::func_ov110_02185db4(itemId);
AdventureFlag advFlag = ItemManager::GetAdvFlagFromItem(itemId);
if (temp_r0_5 != 0) {
temp_r0_5 &= 0xFFFF;
SET_FLAG(data_027e09b8->mAdventureFlags, temp_r0_5);
if (advFlag != AdventureFlag_Nothing) {
advFlag &= 0xFFFF;
SET_FLAG(data_027e09b8->mAdventureFlags, advFlag);
}
data_027e0ce0->mUnk_34->func_ov110_02185d3c(itemId);
data_ov000_020b6510->func_ov000_020aa0ac(itemId);
func_ov024_020d6370(data_ov024_020d86b0, itemId);
gpMiscAdvManager->GiveLetterOrPriceCard(itemId);
if (!GET_FLAG(this->mUnk_08, ItemFlag_LokomoSword) && itemId == ItemId_TearLight &&
this->mTearsAmount == MAX_TEARS_OF_LIGHT && (gOverlayManager.mLoadedOverlays[OverlaySlot_8] == OverlayIndex_Tower)) {
@@ -186,29 +186,246 @@ ARM bool ItemManager::func_ov110_02184a40(ItemId itemId) {
return false;
}
static const unk32 data_ov110_02185de8[] = {
0x30001, 0x30002, 0xB00D6, 0x8007A, 0x30003, 0x8007B, 0x8007C, 0x8007D, 0x8007E, 0x30004, 0x30005, 0x30006, 0x30007,
0x30008, 0x30009, 0x3000A, 0x3000B, 0x3000C, 0x3000D, 0x3000E, 0x3000F, 0xD0000, 0xD0001, 0xD0002, 0xD0003, 0xF00EB,
0x100000, 0x110000, 0x1C008E, 0x1E0048, 0x30010, 0x30011, 0x30012, 0x30013, 0x30014, 0x30015, 0x30016, 0x30017, 0xB00D7,
0x30018, 0x30019, 0x3001A, 0x3001B, 0x3001C, 0x3001D, 0x3001E, 0x3001F, 0x30020, 0x30021, 0x30022, 0x30023, 0x30024,
0x30025, 0x30026, 0x30027, 0x30028, 0x30029, 0x3002A, 0x3002B, 0x3002C, 0x3002D, 0x3002E, 0x3002F, 0x1400F7, 0x8007F,
0x30030, 0x30031, 0x30032, 0x30033, 0x30034, 0x30035, 0x30036, 0x30037, 0x30038, 0x30039, 0x3003A, 0x3003B, 0x3003C,
0x3003D, 0x3003E, 0x3003F, 0x30040, 0x30041, 0x30042, 0x30043, 0x30044, 0x30045, 0x30046, 0x30047, 0x1400F8, 0x30048,
0x30049, 0x3004A, 0x3004B, 0x3004C, 0x3004D, 0xD0004, 0xD0005, 0x3004E, 0x3004F, 0x1400F9, 0xF00EC, 0x80080, 0x110001,
0x1400FA, 0x100001, 0x30050, 0x30051, 0x30052, 0x30053, 0x30054, 0x30055, 0x30056, 0x30057, 0x30058, 0x030059, 0x3005A,
// BMG IDs
static const u32 sBMGItemMap[] = {
BMG_ID(BMGGroup_maingame, 0x01), // ItemId_Nothing
BMG_ID(BMGGroup_maingame, 0x02), // ItemId_NormalShield
BMG_ID(BMGGroup_castle, 0xD6), // ItemId_NormalSword
BMG_ID(BMGGroup_dungeon, 0x7A), // ItemId_Whirlwind
BMG_ID(BMGGroup_maingame, 0x03), // ItemId_BombBag
BMG_ID(BMGGroup_dungeon, 0x7B), // ItemId_NormalBow
BMG_ID(BMGGroup_dungeon, 0x7C), // ItemId_Boomerang
BMG_ID(BMGGroup_dungeon, 0x7D), // ItemId_Whip
BMG_ID(BMGGroup_dungeon, 0x7E), // ItemId_SandRod
BMG_ID(BMGGroup_maingame, 0x04), // ItemId_9
BMG_ID(BMGGroup_maingame, 0x05), // ItemId_NormalKey
BMG_ID(BMGGroup_maingame, 0x06), // ItemId_BossKey
BMG_ID(BMGGroup_maingame, 0x07), // ItemId_GreenRupee
BMG_ID(BMGGroup_maingame, 0x08), // ItemId_BlueRupee
BMG_ID(BMGGroup_maingame, 0x09), // ItemId_RedRupee
BMG_ID(BMGGroup_maingame, 0x0A), // ItemId_BigGreenRupee
BMG_ID(BMGGroup_maingame, 0x0B), // ItemId_BigRedRupee
BMG_ID(BMGGroup_maingame, 0x0C), // ItemId_BigGoldRupee
BMG_ID(BMGGroup_maingame, 0x0D), // ItemId_ForceGem_18
BMG_ID(BMGGroup_maingame, 0x0E), // ItemId_ForceGem_19
BMG_ID(BMGGroup_maingame, 0x0F), // ItemId_ForceGem_20
BMG_ID(BMGGroup_tower, 0x00), // ItemId_ForestGlyph
BMG_ID(BMGGroup_tower, 0x01), // ItemId_SnowGlyph
BMG_ID(BMGGroup_tower, 0x02), // ItemId_OceanGlyph
BMG_ID(BMGGroup_tower, 0x03), // ItemId_FireGlyph
BMG_ID(BMGGroup_forest, 0xEB), // ItemId_25
BMG_ID(BMGGroup_snow, 0x00), // ItemId_26
BMG_ID(BMGGroup_water, 0x00), // ItemId_27
BMG_ID(BMGGroup_flame_fld, 0x8E), // ItemId_28
BMG_ID(BMGGroup_desert, 0x48), // ItemId_29
BMG_ID(BMGGroup_maingame, 0x10), // ItemId_FinalTrack
BMG_ID(BMGGroup_maingame, 0x11), // ItemId_31
BMG_ID(BMGGroup_maingame, 0x12), // ItemId_32
BMG_ID(BMGGroup_maingame, 0x13), // ItemId_33
BMG_ID(BMGGroup_maingame, 0x14), // ItemId_34
BMG_ID(BMGGroup_maingame, 0x15), // ItemId_ForceGem_35
BMG_ID(BMGGroup_maingame, 0x16), // ItemId_ForceGem_36
BMG_ID(BMGGroup_maingame, 0x17), // ItemId_ForceGem_37
BMG_ID(BMGGroup_castle, 0xD7), // ItemId_RecruitUniform
BMG_ID(BMGGroup_maingame, 0x18), // ItemId_PostmasterLetter
BMG_ID(BMGGroup_maingame, 0x19), // ItemId_HeartContainer
BMG_ID(BMGGroup_maingame, 0x1A), // ItemId_QuiverMedium
BMG_ID(BMGGroup_maingame, 0x1B), // ItemId_BombBagMedium
BMG_ID(BMGGroup_maingame, 0x1C), // ItemId_ForceGem_43
BMG_ID(BMGGroup_maingame, 0x1D), // ItemId_ForceGem_44
BMG_ID(BMGGroup_maingame, 0x1E), // ItemId_ForceGem_45
BMG_ID(BMGGroup_maingame, 0x1F), // ItemId_ForceGem_46
BMG_ID(BMGGroup_maingame, 0x20), // ItemId_ForceGem_47
BMG_ID(BMGGroup_maingame, 0x21), // ItemId_ForceGem_48
BMG_ID(BMGGroup_maingame, 0x22), // ItemId_ForceGem_49
BMG_ID(BMGGroup_maingame, 0x23), // ItemId_ForceGem_50
BMG_ID(BMGGroup_maingame, 0x24), // ItemId_ForceGem_51
BMG_ID(BMGGroup_maingame, 0x25), // ItemId_ForceGem_52
BMG_ID(BMGGroup_maingame, 0x26), // ItemId_ForceGem_53
BMG_ID(BMGGroup_maingame, 0x27), // ItemId_ForceGem_54
BMG_ID(BMGGroup_maingame, 0x28), // ItemId_ForceGem_55
BMG_ID(BMGGroup_maingame, 0x29), // ItemId_ForceGem_56
BMG_ID(BMGGroup_maingame, 0x2A), // ItemId_ForceGem_57
BMG_ID(BMGGroup_maingame, 0x2B), // ItemId_ForceGem_58
BMG_ID(BMGGroup_maingame, 0x2C), // ItemId_ForceGem_59
BMG_ID(BMGGroup_maingame, 0x2D), // ItemId_ForceGem_60
BMG_ID(BMGGroup_maingame, 0x2E), // ItemId_ForceGem_61
BMG_ID(BMGGroup_maingame, 0x2F), // ItemId_PanFlute
BMG_ID(BMGGroup_village, 0xF7), // ItemId_StampBook
BMG_ID(BMGGroup_dungeon, 0x7F), // ItemId_LightBow
BMG_ID(BMGGroup_maingame, 0x30), // ItemId_LokomoSword
BMG_ID(BMGGroup_maingame, 0x31), // ItemId_TenPriceCard
BMG_ID(BMGGroup_maingame, 0x32), // ItemId_RedPotion
BMG_ID(BMGGroup_maingame, 0x33), // ItemId_PurplePotion
BMG_ID(BMGGroup_maingame, 0x34), // ItemId_YellowPotion
BMG_ID(BMGGroup_maingame, 0x35), // ItemId_DemonFossil
BMG_ID(BMGGroup_maingame, 0x36), // ItemId_StalfosSkull
BMG_ID(BMGGroup_maingame, 0x37), // ItemId_StarFragment
BMG_ID(BMGGroup_maingame, 0x38), // ItemId_BeeLarvae
BMG_ID(BMGGroup_maingame, 0x39), // ItemId_WoodHeart
BMG_ID(BMGGroup_maingame, 0x3A), // ItemId_DarkPearlLoop
BMG_ID(BMGGroup_maingame, 0x3B), // ItemId_WhitePearlLoop
BMG_ID(BMGGroup_maingame, 0x3C), // ItemId_RutoCrown
BMG_ID(BMGGroup_maingame, 0x3D), // ItemId_DragonScale
BMG_ID(BMGGroup_maingame, 0x3E), // ItemId_PirateNecklace
BMG_ID(BMGGroup_maingame, 0x3F), // ItemId_PalaceDish
BMG_ID(BMGGroup_maingame, 0x40), // ItemId_GoronAmber
BMG_ID(BMGGroup_maingame, 0x41), // ItemId_MysticJade
BMG_ID(BMGGroup_maingame, 0x42), // ItemId_AncientCoin
BMG_ID(BMGGroup_maingame, 0x43), // ItemId_PricelessStone
BMG_ID(BMGGroup_maingame, 0x44), // ItemId_RegalRing
BMG_ID(BMGGroup_maingame, 0x45), // ItemId_ArrowsRefill
BMG_ID(BMGGroup_maingame, 0x46), // ItemId_BombsRefill
BMG_ID(BMGGroup_maingame, 0x47), // ItemId_SoldOutSign
BMG_ID(BMGGroup_village, 0xF8), // ItemId_AncientShield
BMG_ID(BMGGroup_maingame, 0x48), // ItemId_QuiverLarge
BMG_ID(BMGGroup_maingame, 0x49), // ItemId_BombBagLarge
BMG_ID(BMGGroup_maingame, 0x4A), // ItemId_RandCommonTreasure
BMG_ID(BMGGroup_maingame, 0x4B), // ItemId_RandUncommonTreasure
BMG_ID(BMGGroup_maingame, 0x4C), // ItemId_RandRareTreasure
BMG_ID(BMGGroup_maingame, 0x4D), // ItemId_RandLegendaryTreasure
BMG_ID(BMGGroup_tower, 0x04), // ItemId_TearLight
BMG_ID(BMGGroup_tower, 0x05), // ItemId_LightCompass
BMG_ID(BMGGroup_maingame, 0x4E), // ItemId_ScrollSpinAttack
BMG_ID(BMGGroup_maingame, 0x4F), // ItemId_ScrollBeam
BMG_ID(BMGGroup_village, 0xF9), // ItemId_LinebeckLetter
BMG_ID(BMGGroup_forest, 0xEC), // ItemId_PanFluteSong_101
BMG_ID(BMGGroup_dungeon, 0x80), // ItemId_PanFluteSong_102
BMG_ID(BMGGroup_water, 0x01), // ItemId_PanFluteSong_103
BMG_ID(BMGGroup_village, 0xFA), // ItemId_PanFluteSong_104
BMG_ID(BMGGroup_snow, 0x01), // ItemId_PanFluteSong_105
BMG_ID(BMGGroup_maingame, 0x50), // ItemId_RabbitNet
BMG_ID(BMGGroup_maingame, 0x51), // ItemId_BeedleCard
BMG_ID(BMGGroup_maingame, 0x52), // ItemId_SilverCard
BMG_ID(BMGGroup_maingame, 0x53), // ItemId_GoldCard
BMG_ID(BMGGroup_maingame, 0x54), // ItemId_PlatinumCard
BMG_ID(BMGGroup_maingame, 0x55), // ItemId_DiamondCard
BMG_ID(BMGGroup_maingame, 0x56), // ItemId_FreebieCard
BMG_ID(BMGGroup_maingame, 0x57), // ItemId_QuintupleCard
BMG_ID(BMGGroup_maingame, 0x58), // ItemId_CarbenLetter
BMG_ID(BMGGroup_maingame, 0x59), // ItemId_RecruitUniform2
BMG_ID(BMGGroup_maingame, 0x5A), // ItemId_EngineerUniform
};
static const unk32 data_ov110_02185fbc[] = {
0x000, 0x000, 0x003, 0x000, 0x000, 0x1A3, 0x000, 0x27B, 0x0CB, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
0x000, 0x076, 0x077, 0x078, 0x00F, 0x010, 0x011, 0x012, 0x008, 0x009, 0x00A, 0x00B, 0x00C, 0x00D, 0x002, 0x01F, 0x020,
0x021, 0x079, 0x07A, 0x07B, 0x000, 0x000, 0x000, 0x000, 0x000, 0x068, 0x069, 0x06A, 0x06B, 0x06C, 0x06D, 0x06E, 0x06F,
0x070, 0x071, 0x072, 0x073, 0x074, 0x075, 0x0A6, 0x0A7, 0x0A8, 0x0A9, 0x0AA, 0x000, 0x000, 0x0B0, 0x0B1,
};
static const unk32 data_ov110_021860c4[] = {
0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x12D, 0x000, 0x000,
0x03C, 0x000, 0x000, 0x000, 0x000, 0x000, 0x0D6, 0x194, 0x18E, 0x18F, 0x190, 0x191, 0x192, 0x193, 0x046, 0x000, 0x000,
// Adventure Flags
static const AdventureFlag sAdvFlagItemMap[] = {
AdventureFlag_Nothing, // ItemId_Nothing
AdventureFlag_Nothing, // ItemId_NormalShield
AdventureFlag_ObtainedRecruitSword, // ItemId_NormalSword
AdventureFlag_Nothing, // ItemId_Whirlwind
AdventureFlag_Nothing, // ItemId_BombBag
AdventureFlag_ObtainedBowAndArrows, // ItemId_NormalBow
AdventureFlag_Nothing, // ItemId_Boomerang
AdventureFlag_ObtainedWhip, // ItemId_Whip
AdventureFlag_ObtainedSandWand, // ItemId_SandRod
AdventureFlag_Nothing, // ItemId_9
AdventureFlag_Nothing, // ItemId_NormalKey
AdventureFlag_Nothing, // ItemId_BossKey
AdventureFlag_Nothing, // ItemId_GreenRupee
AdventureFlag_Nothing, // ItemId_BlueRupee
AdventureFlag_Nothing, // ItemId_RedRupee
AdventureFlag_Nothing, // ItemId_BigGreenRupee
AdventureFlag_Nothing, // ItemId_BigRedRupee
AdventureFlag_Nothing, // ItemId_BigGoldRupee
AdventureFlag_ObtainedWadatsumiForceGem, // ItemId_ForceGem_18
AdventureFlag_ObtainedNiboshiForceGem, // ItemId_ForceGem_19
AdventureFlag_ObtainedGoronAdultMegaIceForceGem, // ItemId_ForceGem_20
AdventureFlag_ObtainedForestGlyph, // ItemId_ForestGlyph
AdventureFlag_ObtainedSnowGlyph, // ItemId_SnowGlyph
AdventureFlag_ObtainedOceanGlyph, // ItemId_OceanGlyph
AdventureFlag_ObtainedFireGlyph, // ItemId_FireGlyph
AdventureFlag_CompletedForestRestorationSong, // ItemId_25
AdventureFlag_CompletedOceanRestorationSong, // ItemId_26
AdventureFlag_CompletedSnowRestorationSong, // ItemId_27
AdventureFlag_CompletedFireRestorationSong, // ItemId_28
AdventureFlag_CompletedSandRestorationSong, // ItemId_29
AdventureFlag_OpenedDarkRealmPortal, // ItemId_FinalTrack
AdventureFlag_ObtainedSpiritTrain, // ItemId_31
AdventureFlag_ObtainedTrainCannon, // ItemId_32
AdventureFlag_Unk_020, // ItemId_33
AdventureFlag_ObtainedTrainWagon, // ItemId_34
AdventureFlag_ObtainedFerrusForceGem2, // ItemId_ForceGem_35
AdventureFlag_ObtainedKofuForceGem, // ItemId_ForceGem_36
AdventureFlag_ObtainedChildGoronForceGem, // ItemId_ForceGem_37
AdventureFlag_Nothing, // ItemId_RecruitUniform
AdventureFlag_Nothing, // ItemId_PostmasterLetter
AdventureFlag_Nothing, // ItemId_HeartContainer
AdventureFlag_Nothing, // ItemId_QuiverMedium
AdventureFlag_Nothing, // ItemId_BombBagMedium
AdventureFlag_ObtainedLuciaForceGem, // ItemId_ForceGem_43
AdventureFlag_ObtainedOrcaForceGem, // ItemId_ForceGem_44
AdventureFlag_ObtainedCarbenForceGem, // ItemId_ForceGem_45
AdventureFlag_ObtainedRaelForceGem, // ItemId_ForceGem_46
AdventureFlag_ObtainedJoeForceGem, // ItemId_ForceGem_47
AdventureFlag_ObtainedMonaForceGem, // ItemId_ForceGem_48
AdventureFlag_ObtainedHarryForceGem, // ItemId_ForceGem_49
AdventureFlag_ObtainedMashForceGem, // ItemId_ForceGem_50
AdventureFlag_ObtainedFerrusForceGem1, // ItemId_ForceGem_51
AdventureFlag_ObtainedYekoForceGem, // ItemId_ForceGem_52
AdventureFlag_ObtainedNokoForceGem, // ItemId_ForceGem_53
AdventureFlag_ObtainedGoronAdultAnoukiForceGem, // ItemId_ForceGem_54
AdventureFlag_ObtainedSteemForceGem, // ItemId_ForceGem_55
AdventureFlag_ObtainedLinebeckForceGem, // ItemId_ForceGem_56
AdventureFlag_ObtainedAnjeanDesertForceGem, // ItemId_ForceGem_57
AdventureFlag_Unk_0A7, // ItemId_ForceGem_58
AdventureFlag_Unk_0A8, // ItemId_ForceGem_59
AdventureFlag_Unk_0A9, // ItemId_ForceGem_60
AdventureFlag_Unk_0AA, // ItemId_ForceGem_61
AdventureFlag_Nothing, // ItemId_PanFlute
AdventureFlag_Nothing, // ItemId_StampBook
AdventureFlag_ObtainedBowOfLight, // ItemId_LightBow
AdventureFlag_Unk_0B1, // ItemId_LokomoSword
AdventureFlag_Nothing, // ItemId_TenPriceCard
AdventureFlag_Nothing, // ItemId_RedPotion
AdventureFlag_Nothing, // ItemId_PurplePotion
AdventureFlag_Nothing, // ItemId_YellowPotion
AdventureFlag_Nothing, // ItemId_DemonFossil
AdventureFlag_Nothing, // ItemId_StalfosSkull
AdventureFlag_Nothing, // ItemId_StarFragment
AdventureFlag_Nothing, // ItemId_BeeLarvae
AdventureFlag_Nothing, // ItemId_WoodHeart
AdventureFlag_Nothing, // ItemId_DarkPearlLoop
AdventureFlag_Nothing, // ItemId_WhitePearlLoop
AdventureFlag_Nothing, // ItemId_RutoCrown
AdventureFlag_Nothing, // ItemId_DragonScale
AdventureFlag_Nothing, // ItemId_PirateNecklace
AdventureFlag_Nothing, // ItemId_PalaceDish
AdventureFlag_Nothing, // ItemId_GoronAmber
AdventureFlag_Nothing, // ItemId_MysticJade
AdventureFlag_Nothing, // ItemId_AncientCoin
AdventureFlag_Nothing, // ItemId_PricelessStone
AdventureFlag_Nothing, // ItemId_RegalRing
AdventureFlag_Nothing, // ItemId_ArrowsRefill
AdventureFlag_Nothing, // ItemId_BombsRefill
AdventureFlag_Nothing, // ItemId_SoldOutSign
AdventureFlag_Nothing, // ItemId_AncientShield
AdventureFlag_Nothing, // ItemId_QuiverLarge
AdventureFlag_Nothing, // ItemId_BombBagLarge
AdventureFlag_Nothing, // ItemId_RandCommonTreasure
AdventureFlag_Nothing, // ItemId_RandUncommonTreasure
AdventureFlag_Nothing, // ItemId_RandRareTreasure
AdventureFlag_Nothing, // ItemId_RandLegendaryTreasure
AdventureFlag_Nothing, // ItemId_TearLight
AdventureFlag_ObtainedCompassOfLight, // ItemId_LightCompass
AdventureFlag_Nothing, // ItemId_ScrollSpinAttack
AdventureFlag_Nothing, // ItemId_ScrollBeam
AdventureFlag_ObtainedLinebecksLetter, // ItemId_LinebeckLetter
AdventureFlag_Nothing, // ItemId_PanFluteSong_101
AdventureFlag_Nothing, // ItemId_PanFluteSong_102
AdventureFlag_Nothing, // ItemId_PanFluteSong_103
AdventureFlag_Nothing, // ItemId_PanFluteSong_104
AdventureFlag_Nothing, // ItemId_PanFluteSong_105
AdventureFlag_ObtainedRabbitNet, // ItemId_RabbitNet
AdventureFlag_ObtainedBeedlePointsCard, // ItemId_BeedleCard
AdventureFlag_Unk_18E, // ItemId_SilverCard
AdventureFlag_Unk_18F, // ItemId_GoldCard
AdventureFlag_Unk_190, // ItemId_PlatinumCard
AdventureFlag_Unk_191, // ItemId_DiamondCard
AdventureFlag_ObtainedBeedleFreebieCard, // ItemId_FreebieCard
AdventureFlag_ObtainedBeedleQuintuplePointsCard, // ItemId_QuintupleCard
AdventureFlag_ReceivedCarbensLetter, // ItemId_CarbenLetter
AdventureFlag_Nothing, // ItemId_RecruitUniform2
AdventureFlag_Nothing, // ItemId_EngineerUniform
};
// non-matching
@@ -243,9 +460,9 @@ ARM PlayerGet::~PlayerGet() {
UnkStruct_ov000_0208f820_28_98 *pUnk_28_98 = this->mUnk_28->mUnk_98;
if (pUnk_28_98 != 0) {
pUnk_28_98->mUnk_40 &= ~0x10;
pUnk_28_98->mUnk_38.mUnk_40 &= ~0x10;
if (pUnk_28_98->mUnk_40 == 0) {
if (pUnk_28_98->mUnk_38.mUnk_40 == 0) {
// real?
pUnk_28_98->mUnk_38.~UnkStruct_PlayerGet_64();
}
@@ -273,24 +490,25 @@ ARM bool PlayerGet::func_ov110_02186b8c() {
}
#endif
// https://decomp.me/scratch/ZAW2N
ARM void PlayerGet::vfunc_0c(UnkStruct_PlayerGet_vfunc_0c_param1 *param1) {
ItemManager *pItemManager;
ItemId itemId;
ItemManager *pItemManager;
Actor *iVar10;
Vec3p *pUnk_38;
Vec3p *pUnk_3c;
char auStack_108[12];
Vec3p VStack_fc;
unk32 uStack_f0[4];
unk32 auStack_30[5];
switch (param1->mUnk_04) {
case 0x39:
*(u32 *) this->mUnk_54.mUnk_00 = param1->mUnk_10.x;
*(u32 *) this->mUnk_54.mUnk_04 = param1->mUnk_10.y;
this->mUnk_54.mUnk_08 = param1->mUnk_10.z;
pItemManager = this->mUnk_28->pItemManager;
itemId = param1->mUnk_1C;
Vec3p temp;
itemId = param1->mUnk_1C;
temp.x = param1->mUnk_10.x;
temp.y = param1->mUnk_10.y;
temp.z = param1->mUnk_10.z;
this->mUnk_54.mUnk_08 = temp.z;
this->mUnk_54.mUnk_00_s32 = temp.x;
this->mUnk_54.mUnk_04_s32 = temp.y;
pItemManager = this->mUnk_28->pItemManager;
switch (itemId) {
case ItemId_BombBag:
@@ -323,8 +541,9 @@ ARM void PlayerGet::vfunc_0c(UnkStruct_PlayerGet_vfunc_0c_param1 *param1) {
this->mUnk_54.mItemId = itemId;
this->mUnk_70 = 0;
this->mUnk_2C->mUnk_58 = 0;
func_ov000_0208ba10(auStack_108, &this->mUnk_24->mUnk_25, 0);
this->mUnk_40->mUnk_00 = 0x8000;
char auStack_108[12];
func_ov000_0208ba10(auStack_108, &this->mUnk_24->mUnk_94, 0);
*(s16 *) &this->mUnk_40->mUnk_00 = 0x8000;
pUnk_38 = this->mUnk_38;
pUnk_38->x = 0;
@@ -335,7 +554,7 @@ ARM void PlayerGet::vfunc_0c(UnkStruct_PlayerGet_vfunc_0c_param1 *param1) {
pUnk_3c->y = 0;
pUnk_3c->z = 0;
if (((*(u16 *) this->mUnk_54.mUnk_00 << 0x10) >> 0x1E) != 1) {
if (((u32) (u16) this->mUnk_54.mUnk_00_s16 << 16) >> 30 != 1) {
return;
}
@@ -352,48 +571,44 @@ ARM void PlayerGet::vfunc_0c(UnkStruct_PlayerGet_vfunc_0c_param1 *param1) {
break;
case 0x3A:
if (this->mUnk_54.mItemId != ItemId_Nothing) {
if (func_ov000_020a4c00(this->mUnk_54.mItemId) == 0) {
this->mUnk_8C.vfunc_08(0);
} else {
unk32 niVar10;
u32 niVar10 = func_ov000_020a4c00(this->mUnk_54.mItemId);
if (niVar10 == GIModel_None) {
this->mUnk_8C.vfunc_08(NULL);
} else {
if (this->mUnk_54.mItemId == ItemId_LokomoSword) {
niVar10 = func_ov000_020a4c00(ItemId_NormalSword);
}
unk16 auStack_110[2];
unk16 acStack_a6[2];
unk16 auStack_48[2];
unk16 auStack_64[2];
unk16 acStack_e0[2];
size_t len;
wchar_t pathBuffer[32];
char modelPath[64];
u16 idStr[5];
auStack_110[0] = 0;
auStack_110[1] = 0;
func_02015ea8(niVar10, auStack_110);
acStack_a6[1] = 0;
strncpy((char *) acStack_e0, "Player/get/", 0x39);
len = strlen((char *) acStack_e0);
strncpy((char *) acStack_e0 + len, (char *) auStack_110, 0x39 - len);
auStack_64[1] = 0;
strncpy((char *) acStack_a6, (char *) acStack_e0, 0x3f);
len = strlen((char *) acStack_a6);
strncpy((char *) acStack_a6 + len, ".nsbmd", 0x3f - len);
func_02015628((char *) auStack_64, (char *) acStack_a6, 0, &data_ov110_02186240,
sizeof(UnkStruct_02186240));
func_02015664((char *) auStack_64, 0x10);
strncpy((char *) acStack_a6, (char *) acStack_e0, 0x3f);
len = strlen((char *) acStack_a6);
strncpy((char *) acStack_a6 + len, ".nsbtx", 0x3f - len);
func_020156c8((char *) auStack_48, (char *) acStack_a6, 0);
idStr[0] = 0;
idStr[1] = 0;
func_02015ea8(niVar10, idStr);
idStr[4] = '\0';
unk32 var_r1_2;
UnkResourceStruct *ret =
func_ov000_0205abcc((char *) auStack_64, (char *) auStack_48, 0, 1, this->mUnk_30->mUnk_24);
strncpy((char *) pathBuffer, "Player/get/", 0x39);
size_t l = strlen((char *) pathBuffer);
strncpy((char *) pathBuffer + l, (char *) idStr, 0x39 - l);
pathBuffer[31] = '\0';
this->mUnk_8C.vfunc_08(GetUnkPointer1_Impl(ret));
func_020156f4((char *) auStack_48);
func_02015644((char *) auStack_64);
strncpy(modelPath, (char *) pathBuffer, 0x3F);
l = strlen(modelPath);
strncpy(modelPath + l, data_ov000_020aa248, 0x3F - l);
UnkFileSystem4 fs4(modelPath, 0, (unk32) &data_ov110_02186240, sizeof(UnkStruct_02186240));
fs4.vfunc_08(0x10);
strncpy(modelPath, (char *) pathBuffer, 0x3F);
l = strlen(modelPath);
strncpy(modelPath + l, data_ov000_020aa240, 0x3F - l);
UnkFileSystem2 fs2(modelPath, 0);
UnkResourceStruct *res = func_ov000_0205abcc((void *) &fs4, (void *) &fs2, 0, 1, this->mUnk_30->mUnk_24);
this->mUnk_8C.vfunc_08(GetUnkPointer1_Impl(res));
}
switch (this->mUnk_54.mItemId) {
@@ -409,8 +624,7 @@ ARM void PlayerGet::vfunc_0c(UnkStruct_PlayerGet_vfunc_0c_param1 *param1) {
}
UnkStruct_027e09bc_0c *uVar11 = data_027e09bc->mUnk_0C;
unk32 uVar6 = func_ov000_02077590(4);
uVar11->func_ov000_0207834c(this->mUnk_34, uVar6, 0);
uVar11->func_ov000_0207834c(this->mUnk_34, func_ov000_02077590(4), 0);
UnkStruct_PlayerGet_48 *pUnk_48 = this->mUnk_48;
pUnk_48->mUnk_42 = 0x1000;
@@ -418,19 +632,48 @@ ARM void PlayerGet::vfunc_0c(UnkStruct_PlayerGet_vfunc_0c_param1 *param1) {
pUnk_48->mUnk_5E = 0x1000;
pUnk_48->mUnk_63 = 0;
if (this->mUnk_44 != NULL) {
if (this->mUnk_44->mUnk_00 != NULL) {
this->mUnk_64.func_ov000_0208a100();
}
// pUnk24 = this->mUnk_24;
bool bVar8;
bool var_r1_4 = 0;
void **temp_r5_2 = this->mUnk_24->mUnk_78;
if (temp_r5_2 != NULL) {
u16 temp_r6 = *(u16 *) temp_r5_2;
bool var_r3 = 1;
bool var_r2 = 0;
// ...
if ((temp_r6 != 0x100) && (temp_r6 != 0x101)) {
var_r3 = 0;
}
UnkStruct_ov000_0208f820_28_98 *pUnk28_98 = this->mUnk_28->mUnk_98;
if (!bVar8 && pUnk28_98 != NULL) {
pUnk28_98->mUnk_40 |= 0x10;
this->mUnk_64.func_ov000_0208a100();
if (var_r3 != 0) {
bool var_r0_2;
if (temp_r6 == 0x101) {
var_r0_2 = 0;
} else {
var_r0_2 = ((u16 *) temp_r5_2)[1];
}
if (var_r0_2 == 1) {
var_r2 = 1;
}
}
if (var_r2 != 0) {
var_r1_4 = 1;
}
}
if (!var_r1_4) {
UnkStruct_ov000_0208f820_28_98 *pUnk28_98 = this->mUnk_28->mUnk_98;
if (pUnk28_98 != NULL) {
UnkStruct_PlayerGet_64 *ptr = &pUnk28_98->mUnk_38;
ptr->mUnk_40 |= 0x10;
this->mUnk_64.func_ov000_0208a100();
}
}
this->mUnk_73 = 0;
@@ -441,28 +684,33 @@ ARM void PlayerGet::vfunc_0c(UnkStruct_PlayerGet_vfunc_0c_param1 *param1) {
case ItemId_27:
case ItemId_28:
case ItemId_29:
data_ov000_020b51b8.func_ov000_0206c96c(data_027e0cd8->mUnk_0C->func_ov000_02080a44());
this->mUnk_73 = 1;
break;
default:
return;
break;
}
data_ov000_020b51b8.func_ov000_0206c96c(data_027e0cd8->mUnk_0C->func_ov000_02080a44());
this->mUnk_73 = 1;
break;
case 0x3B:
this->mUnk_72 = 0;
if (this->mUnk_54.mItemId != ItemId_Nothing) {
unk32 uStack_f0[4];
Vec3p VStack_fc;
Vec3p_Add(this->mUnk_34, &data_ov110_021861ec.mUnk_00, &VStack_fc);
data_027e0cec->func_ov000_0209feac(0x874, &VStack_fc, 1, 0, 0);
uStack_f0[0] = 0x870;
uStack_f0[1] = 0x871;
uStack_f0[2] = 0x872;
uStack_f0[0] = 0x870;
uStack_f0[3] = 0x873;
data_027e0cec->func_ov000_020a0000(this->mUnk_EC, this->mUnk_FC, uStack_f0, &VStack_fc, 1);
data_027e0cec->func_ov000_020a0000(this->mUnk_EC, &this->mUnk_FC, uStack_f0, &VStack_fc, 1);
}
data_027e0cf8->func_ov024_020c7828(this->mUnk_54.mItemId);
UnkStruct_ov000_02067bc4::UnkStruct1 auStack_30;
data_ov000_020b504c.func_ov000_02067cf8(ItemManager::func_ov110_02185da4(this->mUnk_54.mItemId), 0, &auStack_30);
data_ov000_020b504c.func_ov000_02067cf8(ItemManager::GetBmgIDFromItem(this->mUnk_54.mItemId), 0, &auStack_30);
break;
default:
break;
@@ -473,7 +721,6 @@ const UnkStruct_ov110_021861ec data_ov110_021861ec(0x5E3, 0x152D, 0xCD);
ARM void PlayerGet::vfunc_10(unk32 param1, unk32 param2) {
unk32 var_r1;
MapObject **temp_r0_6;
s32 temp_r5;
bool temp_r6;
s32 var_r0;
@@ -644,9 +891,9 @@ ARM void PlayerGet::vfunc_10(unk32 param1, unk32 param2) {
}
if (*(u16 *) this->mUnk_54.mUnk_00 == 0x1000) {
UnkStruct_func_01fff498 stack;
stack.ptrIndex = this->mUnk_54.mUnk_00[0];
stack.valueIndex = this->mUnk_54.mUnk_00[1];
Vec2b stack;
stack.x = this->mUnk_54.mUnk_00[0];
stack.y = this->mUnk_54.mUnk_00[1];
MapObject *pMapObj = gpMapObjManager->func_01fff498(stack);
@@ -665,10 +912,11 @@ ARM void PlayerGet::vfunc_10(unk32 param1, unk32 param2) {
}
if (var_r5_2 != MapObjectId_None) {
data_ov000_020b34c4.mUnk_04 = var_r5_2;
temp_r0_6 = gpMapObjManager->func_01fff520(&data_ov000_020b34c4, gpMapObjManager->mMapObjTable);
data_ov000_020b34c4.mUnk_04 = var_r5_2;
MapObjectChestBase **temp_r0_6 = (MapObjectChestBase **) gpMapObjManager->func_01fff520(
&data_ov000_020b34c4, gpMapObjManager->mMapObjTable);
if (temp_r0_6 == gpMapObjManager->mUnk_08) {
if ((MapObject **) temp_r0_6 == gpMapObjManager->mUnk_08) {
(*temp_r0_6)->func_ov031_02103878();
}
}
@@ -797,10 +1045,10 @@ THUMB void UnkStruct_027e0ce0_34::func_ov110_02185d3c(ItemId itemId) {
}
}
ARM unk32 ItemManager::func_ov110_02185da4(unk32 param1) {
return data_ov110_02185de8[param1];
ARM u32 ItemManager::GetBmgIDFromItem(ItemId itemId) {
return sBMGItemMap[itemId];
}
ARM ItemFlag ItemManager::func_ov110_02185db4(ItemId itemId) {
return data_ov110_02185fbc[itemId];
ARM AdventureFlag ItemManager::GetAdvFlagFromItem(ItemId itemId) {
return sAdvFlagItemMap[itemId];
}