diff options
author | lunarsoap5 <40438826+lunarsoap5@users.noreply.github.com> | 2020-07-18 14:41:40 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-07-18 14:41:40 -0500 |
commit | 43bd106d3e63fbc60fd93a31586dab52f023f0ac (patch) | |
tree | a37fabfda476a0d4234b6f9ef539c5fa73d335d1 | |
parent | 580c8b01375bdb2b4499570ee758c2f2781b5267 (diff) |
Updating to 0.16.1b0.16.1b
-rw-r--r-- | include/chestRando.h | 43 | ||||
-rw-r--r-- | include/customChecks.h | 2 | ||||
-rw-r--r-- | include/defines.h | 4 | ||||
-rw-r--r-- | include/game_patches.h | 35 | ||||
-rw-r--r-- | include/item.h | 9 | ||||
-rw-r--r-- | include/mod.h | 21 | ||||
-rw-r--r-- | include/singleton.h | 15 | ||||
-rw-r--r-- | include/stage.h | 2 | ||||
-rw-r--r-- | include/tp.eu.lst | 348 | ||||
-rw-r--r-- | include/tp.jp.lst | 349 | ||||
-rw-r--r-- | include/tp.us.lst | 372 | ||||
-rw-r--r-- | include/tp/d_a_alink.h | 7 | ||||
-rw-r--r-- | include/tp/d_a_shop_item_static.h | 63 | ||||
-rw-r--r-- | include/tp/d_com_inf_game.h | 9 | ||||
-rw-r--r-- | include/tp/d_item_data.h | 52 | ||||
-rw-r--r-- | include/tp/d_meter2_info.h | 12 | ||||
-rw-r--r-- | include/tp/d_stage.h | 14 | ||||
-rw-r--r-- | include/tp/dzx.h | 11 | ||||
-rw-r--r-- | include/tp/resource.h | 11 | ||||
-rw-r--r-- | source/chestRando.cpp | 483 | ||||
-rw-r--r-- | source/game_patches.cpp | 435 | ||||
-rw-r--r-- | source/item.cpp | 36 | ||||
-rw-r--r-- | source/itemChecks.cpp | 550 | ||||
-rw-r--r-- | source/mod.cpp | 1803 | ||||
-rw-r--r-- | source/singleton.cpp | 15 | ||||
-rw-r--r-- | source/stage.cpp | 5 |
26 files changed, 2987 insertions, 1719 deletions
diff --git a/include/chestRando.h b/include/chestRando.h index 4779813..a030d77 100644 --- a/include/chestRando.h +++ b/include/chestRando.h @@ -40,6 +40,9 @@ namespace mod u8 areDungeonItemsRandomized = 1; u8 isTwilightSkipEnabled = 1; u8 isKeysanityEnabled = 1; + u8 areHeartPiecesRandomized = 1; + u8 areRupeesRandomized = 1; + u8 areAmmoRandomized = 1; u8 itemThatReplacesHalfMilk = 0; u8 itemThatReplacesSlingShot = 0; @@ -69,14 +72,14 @@ namespace mod * * excludes hyrule castle since boss doesn't spawn heart container */ - bool isStageBoss();
-
- /**
- * checks if the stage is one of the 5 grotto stages
- */
-
- bool isStageDungeon();
-
+ bool isStageBoss(); + + /** + * checks if the stage is one of the 5 grotto stages + */ + + bool isStageDungeon(); + bool isStageGrotto(); bool isStageInterior(); @@ -126,20 +129,20 @@ namespace mod */ bool isItemBombs(u8 itemID); - /**
- * checks if item given is a bottle content without a bottle
- */
+ /** + * checks if item given is a bottle content without a bottle + */ bool isItemBottleFill(u8 itemID); - /**
- *
- * places the key checks correctly
- */
- void handleKeysanity();
-
- /**
- * check if the check gotten in a grotto is the right one
- */
+ /** + * + * places the key checks correctly + */ + void handleKeysanity(); + + /** + * check if the check gotten in a grotto is the right one + */ bool isGrottoCheckOk(u16 checkID); }; }
\ No newline at end of file diff --git a/include/customChecks.h b/include/customChecks.h index 732bc3b..feee56a 100644 --- a/include/customChecks.h +++ b/include/customChecks.h @@ -38,7 +38,7 @@ namespace mod /*Sera Bottle*/
{"F_SP103", 0, 1, 0x7C, 0x65, 0x444C8DC3, 0x42AF0000, 0xC4CB2577, 0xA3E7, []() { gameInfo.scratchPad.eventBits[0x12] |= 0x8;/*can shop at Sera's shop*/ gameInfo.scratchPad.eventBits[0x14] |= 0x8;/*Sera Bottle gotten*/ }, []() { return (gameInfo.localAreaNodes.unk_0[0xC] & 0x2) != 0;/*is goats 1 done*/ } },
/*Slingshot*/
- {"F_SP103", 0, 0, 0x78, 0x4B, 0xC3EDF8A9, 0x44CD922E, 0x45F31BF5, 0x7881, nullptr /*Flag is set in game_patches to avoid interaction with vanilla check*/, []() { return gameInfo.scratchPad.counters.rupees >= 30 && (gameInfo.localAreaNodes.unk_0[0xC] & 0x2) != 0;/*is goats 1 done*/ } },
+ {"F_SP103", 0, 0, 0x78, 0x4B, 0xC3EDF8A9, 0x44CD922E, 0x45F31BF5, 0x7881, nullptr /*Flag is set in game_patches to avoid interaction with vanilla check*/, []() { return (gameInfo.localAreaNodes.unk_0[0xC] & 0x2) != 0;/*is goats 1 done*/ } },
/*Lantern*/
{"F_SP108", 0xFF, 1, 0xF8, 0x48, 0xC66D4C1B, 0x41C19A25, 0xC65D2696, 0x36EC, nullptr, []() { return true; } },
/*Zora Armor*/
diff --git a/include/defines.h b/include/defines.h index 96898c7..e44f1d4 100644 --- a/include/defines.h +++ b/include/defines.h @@ -34,12 +34,12 @@ union typeTransform { };
// Array modification
-#define MAX_LOAD_EVENTS 20 // eventListener
+#define MAX_LOAD_EVENTS 40 // eventListener
#define MAX_HUDCONSOLE_PAGES 12 // HUDConsole
// Mnemonics
#define AUTHOR "ZTPR"
-#define VERSION "v0.16b"
+#define VERSION "v0.16.1b"
#define RAND_SEED mod::tools::randomSeed
#define gameInfo tp::d_com_inf_game::dComIfG_gameInfo
#define getPlayerPos tp::d_map_path_dmap::getMapPlayerPos
diff --git a/include/game_patches.h b/include/game_patches.h index bc25d17..357613d 100644 --- a/include/game_patches.h +++ b/include/game_patches.h @@ -47,6 +47,7 @@ namespace mod::game_patch */ void removeIBLimit(); + /** * Changes the max rupee amounts for each * of the wallets @@ -189,5 +190,39 @@ namespace mod::game_patch */ void skipMDH(); + /**
+ * unset the story flag and boss flag when re-entering a dungeon
+ */ void setLanternFlag(); + + void breakBarrier(); + + /**
+ * unset the story flag and boss flag when re-entering a dungeon
+ */ + void fixFTState(); + void fixGMState(); + void fixLBTState(); + void fixAGState(); + void fixSPRState(); + void fixToTState(); + void fixCiTSState(); + + /**
+ * reset the flags for a dungeon if it has been beaten or if a skip is active
+ */ + void setFTDungeonFlag(); + void setFTBossFlag(); + void setGMDungeonFlag(); + void setGMBossFlag(); + void setLakeDungeonFlags(); + void setLBTBossFlag(); + void setAGDungeonFlag(); + void setAGBossFlag(); + void setSPRDungeonFlag(); + void setSPRBossFlag(); + void setToTDungeonFlag(); + void setToTBossFlag(); + void setCiTSDungeonFlag(); + void setCiTSBossFlag(); }
\ No newline at end of file diff --git a/include/item.h b/include/item.h index e4dfc06..cd9964e 100644 --- a/include/item.h +++ b/include/item.h @@ -38,7 +38,7 @@ namespace mod::item Coral_Earring = 0b000000000000000010000,//0x3D Wooden_Sword = 0b000000000000000001000,//0x3F Ordon_Sword = 0b000000000000000000100,//0x28 - Master_Sword = 0b000000000000000000010,//0x29 locked not randomized yet (implies transformation too) + Shadow_Crystal = 0b000000000000000000010,//0x32 Shield = 0b000000000000000000001,//0x2C }; @@ -78,8 +78,9 @@ namespace mod::item ItemCheck* destination; }; - /**
- * Contains the values for the flags to be set to skip the animations of first getting specific items
- */
+ /** + * Contains the values for the flags to be set to skip the animations of first getting specific items + */ extern u8 itemGetAnimationFlags[10]; + extern u8 itemsWithNoFieldModel[2]; }
\ No newline at end of file diff --git a/include/mod.h b/include/mod.h index 32c755b..9a650ba 100644 --- a/include/mod.h +++ b/include/mod.h @@ -7,6 +7,7 @@ #include "eventListener.h" #include "chestRando.h" #include "HUDConsole.h" +#include <string> namespace mod { @@ -124,6 +125,7 @@ namespace mod u8 bombBag1Ammo;
u8 bombBag2Ammo;
u8 bombBag3Ammo;
+ u8 lastGoodSpawn;
u8 yetaTrickOn = 0;
@@ -133,6 +135,15 @@ namespace mod u8 eventFlagToEdit = 0;
u8 newValueForEventFlag = 0;
u8 triggerEventFlagEdit = 0; + u8 innerRed = 0x50; + u8 innerGreen = 0x28; + u8 innerBlue = 0x14; + u8 outerRed = 0x28; + u8 outerGreen = 0x1E; + u8 outerBlue = 0x0A; + + char itemName[10]; + //u8 newItemId; // Functions private: @@ -155,6 +166,10 @@ namespace mod void procItem_func_UTUWA_HEART(); + bool canQuickTransform(); + + bool canChangeToD(); + /**
* gives the unlocked scent that can be seen in the current area (defaults to most advanced one obtained)
*/
@@ -202,7 +217,13 @@ namespace mod */
void doCustomTRESActor(void* mStatus_roomControl); + void changeLanternColor(); + + void fixFTTotemMonkey(); + + //void setFieldModels(); + //bool procActorCommonLayerInit(void* mStatus_roomControl, tp::d_stage::dzxChunkTypeInfo* chunkTypeInfo, s32 unk3, void* unk4); // Private members //private: diff --git a/include/singleton.h b/include/singleton.h index eabcd1b..8ae4523 100644 --- a/include/singleton.h +++ b/include/singleton.h @@ -31,6 +31,21 @@ namespace mod u8 diababaMusicFixed;
u8 midnaTimeControl;
u8 hasActorCommonLayerRan;
+ u8 isEarlyToTEnabled;
+ u8 isEarlyPoTEnabled;
+ u8 isGMStoryPatch;
+ u8 isEarlyHCEnabled;
+ u8 startWithCrystal;
+
+ //dungeon flags
+ u8 hasFTBeenBeaten;
+ u8 hasGMBeenBeaten;
+ u8 hasLBTBeenBeaten;
+ u8 hasAGBeenBeaten;
+ u8 hasSPRBeenBeaten;
+ u8 hasToTBeenBeaten;
+ u8 hasCiTSBeenBeaten;
+ u8 hasCiTSOoccoo;
private:
diff --git a/include/stage.h b/include/stage.h index 53739d9..ac4e1b7 100644 --- a/include/stage.h +++ b/include/stage.h @@ -12,5 +12,5 @@ namespace mod::stage extern const char* caveStages[6]; extern const char* interiorStages[8]; extern const char* specialStages[3]; - extern const char* timeOfDayStages[19]; + extern const char* timeOfDayStages[18]; }
\ No newline at end of file diff --git a/include/tp.eu.lst b/include/tp.eu.lst index 87ac358..04bc152 100644 --- a/include/tp.eu.lst +++ b/include/tp.eu.lst @@ -1,171 +1,181 @@ -// memory
-80003458:memset
-80003540:memcpy
-
-// m_Do_ext.o
-// text
-8000EDA8:getArchiveHeapPtr
-// data
-80452BF4:archiveHeap
-
-// d_save.o
-80032B50:getRupeeMax
-800351EC:getSave
-80035220:putSave
-
-/ d_stage.o
-80025914:actorCommonLayerInit
-80025AE0:actorInit
-// data
-803F8034:mStatus_roomControl
-
-// d_event.o
-800428A8:defaultSkipStb
-80042B04:skipper
-
-// f_op_scene_req.o
-// data
-804525D4:freezeActors
-80452CA0:isUsingOfOverlap
-
-// f_ap_game.o
-80018B14:fapGm_Execute
-
-// f_op_actor_mng.o
-8001BC90:createItemForPresentDemo
-8001BD1C:createItemForTrBoxDemo
-8001C120:createDemoItem
-8001C17C:createItemForBoss
-8001C21C:createItemForMidBoss
-8001C260:createItemForDirectGet
-8001C2A4:createItemForSimpleDemo
-
-// d_map_path_dmap.o
-8003EF8C:getMapPlayerPos
-8003F050:getMapPlayerAngleY
-
-// d_item.o
-80097FBC:execItemGet
-80098010:checkItemGet
-800983E4:item_func_UTUWA_HEART
-
-// d_a_alink.h
-8009DC6C:checkStageName
-800B2928:setStickData
-800BB6C4:checkHeavyStateOn
-800C7A00:procCoMetamorphoseInit
-8011A908:checkTreasureRupeeReturn
-803DEDF4:linkStatus
-// data
-8039038C:ladderVars
-
-// d_menu_collect.o
-801B3598:setWalletMaxNum
-
-// d_msg_flow.o
-8024BF88:query022
-
-// DynamicLink.o
-80263A5C:do_link
-
-// JKRExpHeap.o
-802CFF28:do_alloc_JKRExpHeap
-802D05AC:do_free_JKRExpHeap
-
-// OSCache.o
-// 8033C36C:DCEnable
-// 8033C380:DCInvalidateRange
-8033C3AC:DCFlushRange
-// 8033C3DC:DCStoreRange
-// 8033C40C:DCFlushRangeNoSync
-// 8033C438:DCStoreRangeNoSync
-// 8033C464:DCZeroRange
-8033C490:ICInvalidateRange
-// 8033C4C4:ICFlashInvalidate
-// 8033C4D4:ICEnable
-// 8033C4E8:__LCEnable
-// 8033C5B4:LCEnable
-// 8033C5EC:LCDisable
-// 8033C614:LCStoreBlocks
-// 8033C638:LCStoreData
-// 8033C6E4:LCQueueWait
-// 8033C6F8:L2GlobalInvalidate
-// 8033C790:DMAErrorHandler
-// 8033C8F0:__OSCacheInit
-
-// runtime.o
-80362F38:_savefpr_14
-80362F3C:_savefpr_15
-80362F40:_savefpr_16
-80362F44:_savefpr_17
-80362F48:_savefpr_18
-80362F4C:_savefpr_19
-80362F50:_savefpr_20
-80362F54:_savefpr_21
-80362F58:_savefpr_22
-80362F5C:_savefpr_23
-80362F60:_savefpr_24
-80362F64:_savefpr_25
-80362F68:_savefpr_26
-80362F6C:_savefpr_27
-80362F70:_savefpr_28
-80362F74:_savefpr_29
-80362F78:_savefpr_30
-80362F7C:_savefpr_31
-80362FD0:_savegpr_14
-80362FD4:_savegpr_15
-80362FD8:_savegpr_16
-80362FDC:_savegpr_17
-80362FE0:_savegpr_18
-80362FE4:_savegpr_19
-80362FE8:_savegpr_20
-80362FEC:_savegpr_21
-80362FF0:_savegpr_22
-80362FF4:_savegpr_23
-80362FF8:_savegpr_24
-80362FFC:_savegpr_25
-80363000:_savegpr_26
-80363004:_savegpr_27
-80363008:_savegpr_28
-8036300C:_savegpr_29
-80363010:_savegpr_30
-80363014:_savegpr_31
-8036328C:__umoddi3
-
-// mem.o
-80366EBC:memcmp
-
-// printf.o
-8036730C:sprintf
-803673EC:snprintf
-
-// string.o
-803697C4:strcmp
-8036995C:strcpy
-80369918:strncpy
-
-//currentState
-803A8393:current_state
-
-// m_Do_controller_pad.o
-// data
-803DF288:cpadInfo
-
-// d_com_inf_game.o
-// data
-80408160:dComIfG_gameInfo
-8002B414:setItemBombNumCount
-
-// d_kankyo.o
-// data
-8042EA14:env_light
-
-// JFWSystem.o
-// data
+// memory +80003458:memset +80003540:memcpy + +// m_Do_ext.o +// text +8000EDA8:getArchiveHeapPtr +// data +80452BF4:archiveHeap + +// d_save.o +80032B50:getRupeeMax +800351EC:getSave +80035220:putSave + +/ d_stage.o +80025914:actorCommonLayerInit +80025AE0:actorInit +// data +803F8034:mStatus_roomControl + +// d_event.o +800428A8:defaultSkipStb +80042B04:skipper + +// f_op_scene_req.o +// data +804525D4:freezeActors +80452CA0:isUsingOfOverlap + +// f_ap_game.o +80018B14:fapGm_Execute + +// f_op_actor_mng.o +8001BC90:createItemForPresentDemo +8001BD1C:createItemForTrBoxDemo +8001C120:createDemoItem +8001C17C:createItemForBoss +8001C21C:createItemForMidBoss +8001C260:createItemForDirectGet +8001C2A4:createItemForSimpleDemo + +// d_map_path_dmap.o +8003EF8C:getMapPlayerPos +8003F050:getMapPlayerAngleY + +// d_item.o +80097FBC:execItemGet +80098010:checkItemGet +800983E4:item_func_UTUWA_HEART + +// d_a_alink.h +8009DC6C:checkStageName +800B2928:setStickData +800BB6C4:checkHeavyStateOn +800C7A00:procCoMetamorphoseInit +8011A908:checkTreasureRupeeReturn +803DEDF4:linkStatus +8038FF7C:lanternVariables +80115E2C:checkEventRun +800CF47C:checkCanoeRide +800CF468:checkBoardRide +800CF490:checkHorseRide +800CF4D4:checkSpinnerRide +800CF4C0:checkBoarRide +// data +8039038C:ladderVars + +// d_menu_collect.o +801B3598:setWalletMaxNum + +// d_msg_flow.o +8024BF88:query022 + +// DynamicLink.o +80263A5C:do_link + +// JKRExpHeap.o +802CFF28:do_alloc_JKRExpHeap +802D05AC:do_free_JKRExpHeap + +// OSCache.o +// 8033C36C:DCEnable +// 8033C380:DCInvalidateRange +8033C3AC:DCFlushRange +// 8033C3DC:DCStoreRange +// 8033C40C:DCFlushRangeNoSync +// 8033C438:DCStoreRangeNoSync +// 8033C464:DCZeroRange +8033C490:ICInvalidateRange +// 8033C4C4:ICFlashInvalidate +// 8033C4D4:ICEnable +// 8033C4E8:__LCEnable +// 8033C5B4:LCEnable +// 8033C5EC:LCDisable +// 8033C614:LCStoreBlocks +// 8033C638:LCStoreData +// 8033C6E4:LCQueueWait +// 8033C6F8:L2GlobalInvalidate +// 8033C790:DMAErrorHandler +// 8033C8F0:__OSCacheInit + +// runtime.o +80362F38:_savefpr_14 +80362F3C:_savefpr_15 +80362F40:_savefpr_16 +80362F44:_savefpr_17 +80362F48:_savefpr_18 +80362F4C:_savefpr_19 +80362F50:_savefpr_20 +80362F54:_savefpr_21 +80362F58:_savefpr_22 +80362F5C:_savefpr_23 +80362F60:_savefpr_24 +80362F64:_savefpr_25 +80362F68:_savefpr_26 +80362F6C:_savefpr_27 +80362F70:_savefpr_28 +80362F74:_savefpr_29 +80362F78:_savefpr_30 +80362F7C:_savefpr_31 +80362FD0:_savegpr_14 +80362FD4:_savegpr_15 +80362FD8:_savegpr_16 +80362FDC:_savegpr_17 +80362FE0:_savegpr_18 +80362FE4:_savegpr_19 +80362FE8:_savegpr_20 +80362FEC:_savegpr_21 +80362FF0:_savegpr_22 +80362FF4:_savegpr_23 +80362FF8:_savegpr_24 +80362FFC:_savegpr_25 +80363000:_savegpr_26 +80363004:_savegpr_27 +80363008:_savegpr_28 +8036300C:_savegpr_29 +80363010:_savegpr_30 +80363014:_savegpr_31 +8036328C:__umoddi3 + +// mem.o +80366EBC:memcmp + +// printf.o +8036730C:sprintf +803673EC:snprintf + +// string.o +803697C4:strcmp +8036995C:strcpy +80369918:strncpy + +//currentState +803A8393:current_state + +// m_Do_controller_pad.o +// data +803DF288:cpadInfo + +// d_com_inf_game.o +// data +80408160:dComIfG_gameInfo +8002B414:setItemBombNumCount + +// d_kankyo.o +// data +8042EA14:env_light + +// JFWSystem.o +// data 80453180:systemConsole -//currentState
-803A8393:current_state
-
-//canWarp
-80408956:can_warp
+//currentState +803A8393:current_state + +//canWarp +80408956:can_warp + +//d_meter2_info.o +80432164:wZButtonPtr
\ No newline at end of file diff --git a/include/tp.jp.lst b/include/tp.jp.lst index e261bb9..b4e2fe7 100644 --- a/include/tp.jp.lst +++ b/include/tp.jp.lst @@ -1,171 +1,182 @@ -// memory
-80003458:memset
-80003540:memcpy
-
-// m_Do_ext.o
-// text
-8000EDF4:getArchiveHeapPtr
-// data
-8044AD74:archiveHeap
-
-// d_save.o
-80032AA8:getRupeeMax
-800350BC:getSave
-800350F0:putSave
-
-// d_stage.o
-8002586C:actorCommonLayerInit
-80025A38:actorInit
-// data
-803F01D4:mStatus_roomControl
-
-// d_event.o
-80042778:defaultSkipStb
-800429D4:skipper
-
-// f_op_scene_req.o
-// data
-8044A754:freezeActors
-8044AE20:isUsingOfOverlap
-
-// f_ap_game.o
-80018A6C:fapGm_Execute
-
-// f_op_actor_mng.o
-8001BBE8:createItemForPresentDemo
-8001BC74:createItemForTrBoxDemo
-8001c078:createDemoItem
-8001C0D4:createItemForBoss
-8001C174:createItemForMidBoss
-8001C1B8:createItemForDirectGet
-8001C1FC:createItemForSimpleDemo
-
-// d_map_path_dmap.o
-8003EE5C:getMapPlayerPos
-8003EF20:getMapPlayerAngleY
-
-// d_item.o
-80097ECC:execItemGet
-80097F20:checkItemGet
-800982F4:item_func_UTUWA_HEART
-
-// d_a_alink.h
-8009DA98:checkStageName
-800B2754:setStickData
-800BB4F0:checkHeavyStateOn
-800C782C:procCoMetamorphoseInit
-8011A734:checkTreasureRupeeReturn
-803D6F94:linkStatus
-// data
-80388C0C:ladderVars
-
-// d_menu_collect.o
-801B3300:setWalletMaxNum
-
-// d_msg_flow.o
-8024D24C:query022
-
-// DynamicLink.o
-8026508C:do_link
-
-// JKRExpHeap.o
-802D15C4:do_alloc_JKRExpHeap
-802D1C48:do_free_JKRExpHeap
-
-// OSCache.o
-// 8033DA08:DCEnable
-// 8033DA1C:DCInvalidateRange
-8033DA48:DCFlushRange
-// 8033DA78:DCStoreRange
-// 8033DAA8:DCFlushRangeNoSync
-// 8033DAD4:DCStoreRangeNoSync
-// 8033DB00:DCZeroRange
-8033DB2C:ICInvalidateRange
-// 8033DB60:ICFlashInvalidate
-// 8033DB70:ICEnable
-// 8033DB84:__LCEnable
-// 8033DC50:LCEnable
-// 8033DC88:LCDisable
-// 8033DCB0:LCStoreBlocks
-// 8033DCD4:LCStoreData
-// 8033DD80:LCQueueWait
-// 8033DD94:L2GlobalInvalidate
-// 8033DE2C:DMAErrorHandler
-// 8033DF8C:__OSCacheInit
-
-// runtime.o
-803645A4:_savefpr_14
-803645A8:_savefpr_15
-803645AC:_savefpr_16
-803645B0:_savefpr_17
-803645B4:_savefpr_18
-803645B8:_savefpr_19
-803645BC:_savefpr_20
-803645C0:_savefpr_21
-803645C4:_savefpr_22
-803645C8:_savefpr_23
-803645CC:_savefpr_24
-803645D0:_savefpr_25
-803645D4:_savefpr_26
-803645D8:_savefpr_27
-803645DC:_savefpr_28
-803645E0:_savefpr_29
-803645E4:_savefpr_30
-803645E8:_savefpr_31
-8036463C:_savegpr_14
-80364640:_savegpr_15
-80364644:_savegpr_16
-80364648:_savegpr_17
-8036464C:_savegpr_18
-80364650:_savegpr_19
-80364654:_savegpr_20
-80364658:_savegpr_21
-8036465C:_savegpr_22
-80364660:_savegpr_23
-80364664:_savegpr_24
-80364668:_savegpr_25
-8036466C:_savegpr_26
-80364670:_savegpr_27
-80364674:_savegpr_28
-80364678:_savegpr_29
-8036467C:_savegpr_30
-80364680:_savegpr_31
-803648F8:__umoddi3
-
-// mem.o
-80368528:memcmp
-
-// printf.o
-80368978:sprintf
-80368A58:snprintf
-
-// string.o
-8036AE30:strcmp
-8036AFC8:strcpy
-8036AF84:strncpy
-
-//currentState
-803B8000:current_state
-
-// m_Do_controller_pad.o
-// data
-803D7428:cpadInfo
-
-// d_com_inf_game.o
-// data
-80400300:dComIfG_gameInfo
-8002B36C:setItemBombNumCount
-
-// d_kankyo.o
-// data
-80426B94:env_light
-
-// JFWSystem.o
-// data
+// memory +80003458:memset +80003540:memcpy + +// m_Do_ext.o +// text +8000EDF4:getArchiveHeapPtr +// data +8044AD74:archiveHeap + +// d_save.o +80032AA8:getRupeeMax +800350BC:getSave +800350F0:putSave + +// d_stage.o +8002586C:actorCommonLayerInit +80025A38:actorInit +// data +803F01D4:mStatus_roomControl + +// d_event.o +80042778:defaultSkipStb +800429D4:skipper + +// f_op_scene_req.o +// data +8044A754:freezeActors +8044AE20:isUsingOfOverlap + +// f_ap_game.o +80018A6C:fapGm_Execute + +// f_op_actor_mng.o +8001BBE8:createItemForPresentDemo +8001BC74:createItemForTrBoxDemo +8001c078:createDemoItem +8001C0D4:createItemForBoss +8001C174:createItemForMidBoss +8001C1B8:createItemForDirectGet +8001C1FC:createItemForSimpleDemo + +// d_map_path_dmap.o +8003EE5C:getMapPlayerPos +8003EF20:getMapPlayerAngleY + +// d_item.o +80097ECC:execItemGet +80097F20:checkItemGet +800982F4:item_func_UTUWA_HEART + +// d_a_alink.h +8009DA98:checkStageName +800B2754:setStickData +800BB4F0:checkHeavyStateOn +800C782C:procCoMetamorphoseInit +8011A734:checkTreasureRupeeReturn +803D6F94:linkStatus +803887fC:lanternVariables +80115C58:checkEventRun +800CF2A8:checkCanoeRide +800CF294:checkBoardRide +800CF2bC:checkHorseRide +800CF300:checkSpinnerRide +800CF2EC:checkBoarRide + +// data +80388C0C:ladderVars + +// d_menu_collect.o +801B3300:setWalletMaxNum + +// d_msg_flow.o +8024D24C:query022 + +// DynamicLink.o +8026508C:do_link + +// JKRExpHeap.o +802D15C4:do_alloc_JKRExpHeap +802D1C48:do_free_JKRExpHeap + +// OSCache.o +// 8033DA08:DCEnable +// 8033DA1C:DCInvalidateRange +8033DA48:DCFlushRange +// 8033DA78:DCStoreRange +// 8033DAA8:DCFlushRangeNoSync +// 8033DAD4:DCStoreRangeNoSync +// 8033DB00:DCZeroRange +8033DB2C:ICInvalidateRange +// 8033DB60:ICFlashInvalidate +// 8033DB70:ICEnable +// 8033DB84:__LCEnable +// 8033DC50:LCEnable +// 8033DC88:LCDisable +// 8033DCB0:LCStoreBlocks +// 8033DCD4:LCStoreData +// 8033DD80:LCQueueWait +// 8033DD94:L2GlobalInvalidate +// 8033DE2C:DMAErrorHandler +// 8033DF8C:__OSCacheInit + +// runtime.o +803645A4:_savefpr_14 +803645A8:_savefpr_15 +803645AC:_savefpr_16 +803645B0:_savefpr_17 +803645B4:_savefpr_18 +803645B8:_savefpr_19 +803645BC:_savefpr_20 +803645C0:_savefpr_21 +803645C4:_savefpr_22 +803645C8:_savefpr_23 +803645CC:_savefpr_24 +803645D0:_savefpr_25 +803645D4:_savefpr_26 +803645D8:_savefpr_27 +803645DC:_savefpr_28 +803645E0:_savefpr_29 +803645E4:_savefpr_30 +803645E8:_savefpr_31 +8036463C:_savegpr_14 +80364640:_savegpr_15 +80364644:_savegpr_16 +80364648:_savegpr_17 +8036464C:_savegpr_18 +80364650:_savegpr_19 +80364654:_savegpr_20 +80364658:_savegpr_21 +8036465C:_savegpr_22 +80364660:_savegpr_23 +80364664:_savegpr_24 +80364668:_savegpr_25 +8036466C:_savegpr_26 +80364670:_savegpr_27 +80364674:_savegpr_28 +80364678:_savegpr_29 +8036467C:_savegpr_30 +80364680:_savegpr_31 +803648F8:__umoddi3 + +// mem.o +80368528:memcmp + +// printf.o +80368978:sprintf +80368A58:snprintf + +// string.o +8036AE30:strcmp +8036AFC8:strcpy +8036AF84:strncpy + +//currentState +803B8000:current_state + +// m_Do_controller_pad.o +// data +803D7428:cpadInfo + +// d_com_inf_game.o +// data +80400300:dComIfG_gameInfo +8002B36C:setItemBombNumCount + +// d_kankyo.o +// data +80426B94:env_light + +// JFWSystem.o +// data 8044B2F8:systemConsole -//currentState
-803B8000:current_state
-
-//canWarp
-80400AF6:can_warp
\ No newline at end of file +//currentState +803B8000:current_state + +//canWarp +80400AF6:can_warp + +//d_meter2_info.o +8042A2E4:wZButtonPtr
\ No newline at end of file diff --git a/include/tp.us.lst b/include/tp.us.lst index 954c3a9..8ba6c1c 100644 --- a/include/tp.us.lst +++ b/include/tp.us.lst @@ -1,180 +1,196 @@ -// memory
-80003458:memset
-80003540:memcpy
-
-// m_Do_ext.o
-// text
-8000EDF4:getArchiveHeapPtr
-// data
-80450C34:archiveHeap
-
-// d_save.o
-80032AA8:getRupeeMax
-800350BC:getSave
-800350F0:putSave
-
-// d_stage.o
-8002586C:actorCommonLayerInit
-80025A38:actorInit
-// data
-803F6094:mStatus_roomControl
-
-// d_event.o
-80042778:defaultSkipStb
-800429D4:skipper
-
-// f_op_scene_req.o
-// data
-80450614:freezeActors
-80450CE0:isUsingOfOverlap
-
-// f_ap_game.o
-80018A6C:fapGm_Execute
-
-// f_op_actor_mng.o
-8001BBE8:createItemForPresentDemo
-8001BC74:createItemForTrBoxDemo
-8001C078:createDemoItem
-8001C0D4:createItemForBoss
-8001C174:createItemForMidBoss
-8001C1B8:createItemForDirectGet
-8001C1FC:createItemForSimpleDemo
-
-// d_map_path_dmap.o
-8003EE5C:getMapPlayerPos
-8003EF20:getMapPlayerAngleY
-
-// d_item.o
-80097E8C:execItemGet
-80097EE0:checkItemGet
-800982B4:item_func_UTUWA_HEART
-
-// d_a_alink.h
-8009DA60:checkStageName
-800B271C:setStickData
-800BB4B8:checkHeavyStateOn
-800C77F4:procCoMetamorphoseInit
-8011A6FC:checkTreasureRupeeReturn
-803DCE54:linkStatus
-// data
-8038EB8C:ladderVars
-
-// d_menu_collect.o
-801B3340:setWalletMaxNum
-
-// d_msg_flow.o
-8024B8E4:query022
-
-// DynamicLink.o
-80262C5C:do_link
-
-// JKRExpHeap.o
-802CF128:do_alloc_JKRExpHeap
-802CF7AC:do_free_JKRExpHeap
-
-// OSCache.o
-// 8033B56C:DCEnable
-// 8033B580:DCInvalidateRange
-8033B5AC:DCFlushRange
-// 8033B5DC:DCStoreRange
-// 8033B60C:DCFlushRangeNoSync
-// 8033B638:DCStoreRangeNoSync
-// 8033B664:DCZeroRange
-8033B690:ICInvalidateRange
-// 8033B6C4:ICFlashInvalidate
-// 8033B6D4:ICEnable
-// 8033B6E8:__LCEnable
-// 8033B7B4:LCEnable
-// 8033B7EC:LCDisable
-// 8033B814:LCStoreBlocks
-// 8033B838:LCStoreData
-// 8033B8E4:LCQueueWait
-// 8033B8F8:L2GlobalInvalidate
-// 8033B990:DMAErrorHandler
-// 8033BAF0:__OSCacheInit
-
-// runtime.o
-80362108:_savefpr_14
-8036210C:_savefpr_15
-80362110:_savefpr_16
-80362114:_savefpr_17
-80362118:_savefpr_18
-8036211C:_savefpr_19
-80362120:_savefpr_20
-80362124:_savefpr_21
-80362128:_savefpr_22
-8036212C:_savefpr_23
-80362130:_savefpr_24
-80362134:_savefpr_25
-80362138:_savefpr_26
-8036213C:_savefpr_27
-80362140:_savefpr_28
-80362144:_savefpr_29
-80362148:_savefpr_30
-8036214C:_savefpr_31
-803621A0:_savegpr_14
-803621A4:_savegpr_15
-803621A8:_savegpr_16
-803621AC:_savegpr_17
-803621B0:_savegpr_18
-803621B4:_savegpr_19
-803621B8:_savegpr_20
-803621BC:_savegpr_21
-803621C0:_savegpr_22
-803621C4:_savegpr_23
-803621C8:_savegpr_24
-803621CC:_savegpr_25
-803621D0:_savegpr_26
-803621D4:_savegpr_27
-803621D8:_savegpr_28
-803621DC:_savegpr_29
-803621E0:_savegpr_30
-803621E4:_savegpr_31
-8036245C:__umoddi3
-
-// mem.o
-8036608C:memcmp
-
-// printf.o
-803664DC:sprintf
-803665BC:snprintf
-
-// string.o
-80368994:strcmp
-80368B2C:strcpy
-80368AE8:strncpy
-
-//currentState
-803A66B3:current_state
-
-// m_Do_controller_pad.o
-// data
-803DD2E8:cpadInfo
-
-// d_com_inf_game.o
-// data
-804061C0:dComIfG_gameInfo
-8002B36C:setItemBombNumCount
-
-// d_kankyo.o
-// data
-8042CA54:env_light
-
-// JFWSystem.o
-// data
+// memory +80003458:memset +80003540:memcpy + +// m_Do_ext.o +// text +8000EDF4:getArchiveHeapPtr +// data +80450C34:archiveHeap + +// d_save.o +80032AA8:getRupeeMax +800350BC:getSave +800350F0:putSave + +// d_stage.o +8002586C:actorCommonLayerInit +80025A38:actorInit +// data +803F6094:mStatus_roomControl + +// d_event.o +80042778:defaultSkipStb +800429D4:skipper + +// f_op_scene_req.o +// data +80450614:freezeActors +80450CE0:isUsingOfOverlap + +// f_ap_game.o +80018A6C:fapGm_Execute + +// f_op_actor_mng.o +8001BBE8:createItemForPresentDemo +8001BC74:createItemForTrBoxDemo +8001C078:createDemoItem +8001C0D4:createItemForBoss +8001C174:createItemForMidBoss +8001C1B8:createItemForDirectGet +8001C1FC:createItemForSimpleDemo + +// d_map_path_dmap.o +8003EE5C:getMapPlayerPos +8003EF20:getMapPlayerAngleY + +// d_item.o +80097E8C:execItemGet +80097EE0:checkItemGet +800982B4:item_func_UTUWA_HEART + +// d_a_alink.h +8009DA60:checkStageName +800B271C:setStickData +800BB4B8:checkHeavyStateOn +800C77F4:procCoMetamorphoseInit +8011A6FC:checkTreasureRupeeReturn +803DCE54:linkStatus +8038e77c:lanternVariables +80115c20:checkEventRun +800cf270:checkCanoeRide +800cf25c:checkBoardRide +800cf284:checkHorseRide +800cf2c8:checkSpinnerRide +800cf2b4:checkBoarRide + +// data +8038EB8C:ladderVars + +// d_menu_collect.o +801B3340:setWalletMaxNum + +// d_msg_flow.o +8024B8E4:query022 + +// DynamicLink.o +80262C5C:do_link + +// JKRExpHeap.o +802CF128:do_alloc_JKRExpHeap +802CF7AC:do_free_JKRExpHeap + +// OSCache.o +// 8033B56C:DCEnable +// 8033B580:DCInvalidateRange +8033B5AC:DCFlushRange +// 8033B5DC:DCStoreRange +// 8033B60C:DCFlushRangeNoSync +// 8033B638:DCStoreRangeNoSync +// 8033B664:DCZeroRange +8033B690:ICInvalidateRange +// 8033B6C4:ICFlashInvalidate +// 8033B6D4:ICEnable +// 8033B6E8:__LCEnable +// 8033B7B4:LCEnable +// 8033B7EC:LCDisable +// 8033B814:LCStoreBlocks +// 8033B838:LCStoreData +// 8033B8E4:LCQueueWait +// 8033B8F8:L2GlobalInvalidate +// 8033B990:DMAErrorHandler +// 8033BAF0:__OSCacheInit + +// runtime.o +80362108:_savefpr_14 +8036210C:_savefpr_15 +80362110:_savefpr_16 +80362114:_savefpr_17 +80362118:_savefpr_18 +8036211C:_savefpr_19 +80362120:_savefpr_20 +80362124:_savefpr_21 +80362128:_savefpr_22 +8036212C:_savefpr_23 +80362130:_savefpr_24 +80362134:_savefpr_25 +80362138:_savefpr_26 +8036213C:_savefpr_27 +80362140:_savefpr_28 +80362144:_savefpr_29 +80362148:_savefpr_30 +8036214C:_savefpr_31 +803621A0:_savegpr_14 +803621A4:_savegpr_15 +803621A8:_savegpr_16 +803621AC:_savegpr_17 +803621B0:_savegpr_18 +803621B4:_savegpr_19 +803621B8:_savegpr_20 +803621BC:_savegpr_21 +803621C0:_savegpr_22 +803621C4:_savegpr_23 +803621C8:_savegpr_24 +803621CC:_savegpr_25 +803621D0:_savegpr_26 +803621D4:_savegpr_27 +803621D8:_savegpr_28 +803621DC:_savegpr_29 +803621E0:_savegpr_30 +803621E4:_savegpr_31 +8036245C:__umoddi3 + +// mem.o +8036608C:memcmp + +// printf.o +803664DC:sprintf +803665BC:snprintf + +// string.o +80368994:strcmp +80368B2C:strcpy +80368AE8:strncpy + +//currentState +803A66B3:current_state + +// m_Do_controller_pad.o +// data +803DD2E8:cpadInfo + +// d_com_inf_game.o +// data +804061C0:dComIfG_gameInfo +8002B36C:setItemBombNumCount + +// d_kankyo.o +// data +8042CA54:env_light + +// JFWSystem.o +// data 804511B8:systemConsole -//currentState
-803A66B3:current_state
-
-//walletText
-80bbc749:wallet_text
-
-//walletdescription
-80BBD835:wallet_description
-
-//canwarp
-804069B6:can_warp
-
-//resource.o
-802a9490:parseCharacter_1Byte
\ No newline at end of file +//currentState +803A66B3:current_state + +//walletText +80bbc749:wallet_text + +//walletdescription +80BBD835:wallet_description + +//canwarp +804069B6:can_warp + +//resource.o +802a9490:parseCharacter_1Byte + +//d_item_data.o +803AC5A0:item_resource +803ADD88:field_item_res +803AED78:item_info + +//d_meter2_info.o +804301A4:wZButtonPtr diff --git a/include/tp/d_a_alink.h b/include/tp/d_a_alink.h index 7f687ad..7a47f00 100644 --- a/include/tp/d_a_alink.h +++ b/include/tp/d_a_alink.h @@ -41,6 +41,13 @@ namespace tp::d_a_alink bool checkHeavyStateOn(s32 unk1, s32 unk2); bool procCoMetamorphoseInit(tp::d_com_inf_game::LinkMapVars* linkMapPtr); bool checkTreasureRupeeReturn(void* unk1, s32 item); + bool lanternVariables(s8 unk1, s8 unk2); + bool checkEventRun(tp::d_com_inf_game::LinkMapVars* linkMapPtr); + bool checkBoardRide(tp::d_com_inf_game::LinkMapVars* linkMapPtr);
+ bool checkCanoeRide(tp::d_com_inf_game::LinkMapVars* linkMapPtr);
+ bool checkHorseRide(tp::d_com_inf_game::LinkMapVars* linkMapPtr);
+ bool checkBoarRide(tp::d_com_inf_game::LinkMapVars* linkMapPtr);
+ bool checkSpinnerRide(tp::d_com_inf_game::LinkMapVars* linkMapPtr); // Variables extern LadderVars ladderVars; diff --git a/include/tp/d_a_shop_item_static.h b/include/tp/d_a_shop_item_static.h new file mode 100644 index 0000000..548b04d --- /dev/null +++ b/include/tp/d_a_shop_item_static.h @@ -0,0 +1,63 @@ +#pragma once
+
+#include "defines.h"
+
+namespace tp::d_a_shop_item_static
+{
+ enum ShopItemDataIndex : u8
+ {
+ Sold_Out = 0x0,
+ Lantern_Oil = 0x1, // Item Id = 0x66
+ Red_Potion = 0x2, // Item Id = 0x61
+ Milk = 0x3, // Item Id = 0x64
+ Sera_Bottle = 0x4, // Item Id = 0x65
+ Arrows = 0x5, // Item Id = 0xE to 0x10
+ Wooden_Shield = 0x6, // Item Id = 0x2B
+ Hylian_Shield = 0x7, // Item Id = 0x2C
+ Bombs = 0x8, // Item Id = 0xA to 0xD
+ Bomb_Bag_Water_Bombs = 0x9, // Item Id = 0x71 -- Uses Water Bomb model
+ Bomb_Bag_Bomblings = 0xA, // Item Id = 0x72 -- Uses Bombling model
+ Empty_Bomb_Bag = 0xB, // Item Id = 0x50 -- Possibly handles multiple different bomb bags
+ Giant_Bomb_Bag = 0xC, // Item Id = 0x4F
+ Land_Mine = 0xD, // Unused in getShopArcname
+ Bottle = 0xE, // Unused in getShopArcname
+ Bee_Larva = 0xF, // Item Id = 0x76
+ Slingshot = 0x10, // Item Id = 0x4B
+ Blue_Potion = 0x11, // Item Id = 0x63
+ Hawkeye = 0x12, // Item Id = 0x3E
+ Magic_Armor = 0x13, // Item Id = 0x30
+ Magic_Armor_Sold_Out = 0x14,
+ Green_Potion = 0x15, // Item Id = 0x62
+ Jovani_Bottle = 0x16, // Item Id = 0x75
+ };
+
+ struct ShopItemData
+ {
+ char* arcName;
+ s16 modelResIdx;
+ s16 wBtkResIdx;
+ s16 unk_8;
+ s16 wBckResIdx;
+ s16 unk_C;
+ s16 wBrkResIdx;
+ s16 wBtpResIdx;
+ s16 unk_12;
+ float posY;
+ float scale;
+ s16 wRot[4];
+ u32 mFlags;
+ u8 mShadowSize;
+ u8 mCollisionH;
+ u8 mCollisionR;
+ u8 tevFrm;
+ u8 btpFrm;
+ u8 unk_2D[3];
+ } __attribute__((__packed__));
+
+ static_assert(sizeof(ShopItemData) == 0x30);
+
+ extern "C"
+ {
+ extern ShopItemData shopItemData[23]; // mData__12daShopItem_c
+ }
+}
\ No newline at end of file diff --git a/include/tp/d_com_inf_game.h b/include/tp/d_com_inf_game.h index b18233b..b17d4d5 100644 --- a/include/tp/d_com_inf_game.h +++ b/include/tp/d_com_inf_game.h @@ -836,7 +836,9 @@ namespace tp::d_com_inf_game u16 immediateControl; // 4edb - 4edc
u8 unk_00[0x4]; // 4edd - 4EE0
u8 nextEventID; // 4EE1
- u8 unk1A[0xCB];
+ u8 unk1A[0xC5];
+ u8 actionStatus;
+ u8 unkDF[0x5];
u8 eventFlag;
u8 unkE7[0x5];
u8 currentEventID;
@@ -854,6 +856,8 @@ namespace tp::d_com_inf_game float pos[3];
u8 unk_4DC[0x94];
u32 isTargeting;//570 at 0x400000 link is targeting
+ u8 unk_574[0x2A68];
+ u16 equippedItem;
} __attribute__((__packed__));
struct TunicColor
@@ -946,9 +950,8 @@ namespace tp::d_com_inf_game extern u8 current_state;
extern void setItemBombNumCount(u32 unk1, u8 bagNb, short amout);//amount will be the og (ex: if you can only have 5 more bombs and buy 10, it'll still ahow 10)
extern u8 next_state;
- //extern char wallet_text[13];
+ extern char izaBoatSignText[100];
//extern char wallet_description[96];
extern u8 can_warp;
-
}
}
\ No newline at end of file diff --git a/include/tp/d_item_data.h b/include/tp/d_item_data.h new file mode 100644 index 0000000..c5bd746 --- /dev/null +++ b/include/tp/d_item_data.h @@ -0,0 +1,52 @@ +#pragma once + +#include "defines.h" +#include <tp/d_stage.h> + +namespace tp::d_item_data +{
+
+ struct ItemResource // d_item_data.h
+ {
+ char* arcName;
+ s16 modelResIdx;
+ s16 btkResIdx;
+ s16 bckResIdx;
+ s16 brkResIdx;
+ s16 btpResIdx;
+ u8 tevFrm;
+ u8 btpFrm;
+ s16 ringTexResIdx;
+ s16 unk_12[3];
+ } __attribute__((__packed__));
+
+ struct FieldItemRes // d_item_data.h
+ {
+ char* arcName;
+ s16 modelResIdx;
+ s16 bckAnmResIdx;
+ s16 brkAnmResIdx;
+ s16 unk_a;
+ s16 heapSize;
+ s16 unk_e;
+ } __attribute__((__packed__));
+
+ struct ItemInfo // d_item_data.h
+ {
+ u8 mShadowSize;
+ u8 mCollisionH;
+ u8 mCollisionR;
+ u8 mFlags;
+ } __attribute__((__packed__));
+
+ static_assert(sizeof(ItemResource) == 0x18);
+ static_assert(sizeof(FieldItemRes) == 0x10);
+ static_assert(sizeof(ItemInfo) == 0x4);
+
+ extern "C"
+ {
+ extern ItemResource item_resource[255]; // 0x803AC5A0 in US
+ extern FieldItemRes field_item_res[255]; // 0x803ADD88 in US
+ extern ItemInfo item_info[255]; // 0x803AED78 in US
+ }
+}
\ No newline at end of file diff --git a/include/tp/d_meter2_info.h b/include/tp/d_meter2_info.h new file mode 100644 index 0000000..f6f1b6c --- /dev/null +++ b/include/tp/d_meter2_info.h @@ -0,0 +1,12 @@ +#pragma once + +#include "defines.h" +#include <tp/d_com_inf_game.h> + +namespace tp::d_meter2_info +{ + extern "C" + { + extern void* wZButtonPtr; + } +}
\ No newline at end of file diff --git a/include/tp/d_stage.h b/include/tp/d_stage.h index 86b61d3..873abb1 100644 --- a/include/tp/d_stage.h +++ b/include/tp/d_stage.h @@ -12,6 +12,20 @@ namespace tp::d_stage
{
+ struct Item
+ {
+ char objectName[8];
+ u8 paramOne;
+ u8 paramTwo;
+ u8 membitFlag;
+ u8 item;
+ float pos[3];
+ s16 rot[3];
+ u16 enemyNum;
+ } __attribute__((__packed__));
+
+ static_assert(sizeof(Item) == 0x20);
+
extern "C"
{
extern void* mStatus_roomControl;
diff --git a/include/tp/dzx.h b/include/tp/dzx.h index 6bf3fc2..2833981 100644 --- a/include/tp/dzx.h +++ b/include/tp/dzx.h @@ -19,6 +19,17 @@ namespace tp::d_stage * 0001
* 80401234 = 1 TRES Chunk at this address
*/
+
+ struct Actr
+ {
+ char objectName[8];
+ u32 parameters;
+ float pos[3];
+ s16 rot[3];
+ u16 enemyNum;
+ } __attribute__((__packed__));
+ static_assert(sizeof(Actr) == 0x20);
+
struct dzxChunkTypeInfo
{
char tag[4];
diff --git a/include/tp/resource.h b/include/tp/resource.h new file mode 100644 index 0000000..255d91e --- /dev/null +++ b/include/tp/resource.h @@ -0,0 +1,11 @@ +#pragma once
+
+#include "defines.h"
+
+namespace tp::resource
+{
+ extern "C"
+ {
+ extern void* parseCharacter_1Byte(const char** text);
+ }
+}
\ No newline at end of file diff --git a/source/chestRando.cpp b/source/chestRando.cpp index 1c5b7cc..dd60741 100644 --- a/source/chestRando.cpp +++ b/source/chestRando.cpp @@ -16,6 +16,7 @@ #include <tp/d_a_alink.h>
#include <tp/d_kankyo.h>
#include <tp/JFWSystem.h>
+#include <tp/resource.h>
#include <cstdio>
#include <cstring>
@@ -70,18 +71,6 @@ namespace mod {
sourceCheck = findSource(destCheck->destLayer, 0x1, destCheck);//to prevent woodensword from being overwritten before losing it
}
- else if (destCheck->itemID == items::Item::Ordon_Shield || destCheck->itemID == items::Item::Wooden_Shield || destCheck->itemID == items::Item::Hylian_Shield)
- {
- sourceCheck = findSource(destCheck->destLayer, 0x2, destCheck);//to prevent softlocking the game when you try to get ordon shield check
- }
- else if (destCheck->itemID == items::Item::Zora_Armor || destCheck->itemID == items::Item::Magic_Armor)
- {
- sourceCheck = findSource(destCheck->destLayer, 0x2, destCheck);//to prevent softlocking the game when you try to get ordon shield check
- }
- else if (isProgressiveEnabled == 0 && destCheck->itemID == items::Item::Clawshots)
- {
- sourceCheck = findSource(destCheck->destLayer, 0x7, destCheck);//to prevent Clawshots from being overwritten by Clawshot
- }
else
{
sourceCheck = findSource(destCheck->destLayer, 0x0, destCheck);
@@ -309,6 +298,30 @@ namespace mod result = true;
}
break;
+
+ case item::ItemType::HeartPiece:
+ // Map, compass, big key
+ if (areHeartPiecesRandomized == 0)
+ {
+ result = true;
+ }
+ break;
+
+ case item::ItemType::Rupee:
+ // Map, compass, big key
+ if (areRupeesRandomized == 0)
+ {
+ result = true;
+ }
+ break;
+
+ case item::ItemType::Ammo:
+ // Map, compass, big key
+ if (areAmmoRandomized == 0)
+ {
+ result = true;
+ }
+ break;
case item::ItemType::Story:
if (check->itemID != items::Item::Aurus_Memo && check->itemID != items::Item::Asheis_Sketch)
@@ -441,6 +454,10 @@ namespace mod {//decrease poe counter
gameInfo.scratchPad.poeCount--;
}
+ else if (item == items::Item::Ooccoo_Dungeon && tp::d_a_alink::checkStageName(stage::allStages[Stage_City_in_the_Sky]))
+ {
+ Singleton::getInstance()->hasCiTSOoccoo = 1;
+ }
else if (item == items::Item::Vessel_Of_Light_Faron)
{
tp::d_com_inf_game::ScratchPad* scratchPadPtr = &gameInfo.scratchPad;
@@ -451,34 +468,34 @@ namespace mod //Set Faron Twilight Flags
scratchPadPtr->clearedTwilights.Faron = 0b1; //Clear Faron Twilight
tools::setItemFlag(ItemFlags::Vessel_Of_Light_Faron);
- scratchPadPtr->tearCounters.Faron = 16; - eventBitsPtr[0x5] = 0xFF; //Ensure Epona is Stolen, give Midna Charge - eventBitsPtr[0x6] |= 0x10; //Faron Twilight Progression flag - eventBitsPtr[0xC] |= 0x8; //Set Sword and Shield to not be on back - tools::setItemFlag(ItemFlags::Heros_Clothes); - - //Set Eldin Twilight Flags + scratchPadPtr->tearCounters.Faron = 16;
+ eventBitsPtr[0x5] |= 0xFF; //Ensure Epona is Stolen, give Midna Charge
+ eventBitsPtr[0x6] |= 0x10; //Faron Twilight Progression flag
+ eventBitsPtr[0xC] |= 0x8; //Set Sword and Shield to not be on back
+ tools::setItemFlag(ItemFlags::Heros_Clothes);
+
+ //Set Eldin Twilight Flags
scratchPadPtr->clearedTwilights.Eldin = 0b1; // Clear Eldin Twilight
tools::setItemFlag(ItemFlags::Vessel_Of_Light_Eldin);
scratchPadPtr->tearCounters.Eldin = 16;
eventBitsPtr[0x6] |= 0x1; //tame Epona
eventBitsPtr[0xA] |= 0x8; //Beat KB1
eventBitsPtr[0x14] |= 0x10; //Put Bo Outside
- eventBitsPtr[0x7] = 0xDE; //skip Gor Coron Sumo and Enter Mines also Trigger KB1 and mark Post-KB1 CS as watched, Eldin Twilight Story Progression Flag
+ eventBitsPtr[0x7] |= 0xDE; //skip Gor Coron Sumo and Enter Mines also Trigger KB1 and mark Post-KB1 CS as watched, Eldin Twilight Story Progression Flag
eventBitsPtr[0x41] |= 0x10; //Told Fado about the Kids
- - //Set Lanayru Twilight Flags - scratchPadPtr->clearedTwilights.Lanayru = 0b1; // Clear Lanayru Twilight - tools::setItemFlag(ItemFlags::Vessel_Of_Light_Lanayru); - scratchPadPtr->tearCounters.Lanayru = 16; - allAreaNodesPtr->Hyrule_Field.unk_0[0xB] |= 0x80;//water on Field map +
+ //Set Lanayru Twilight Flags
+ scratchPadPtr->clearedTwilights.Lanayru = 0b1; // Clear Lanayru Twilight
+ tools::setItemFlag(ItemFlags::Vessel_Of_Light_Lanayru);
+ scratchPadPtr->tearCounters.Lanayru = 16;
+ allAreaNodesPtr->Hyrule_Field.unk_0[0xB] |= 0x80;//water on Field map
allAreaNodesPtr->Hyrule_Field.unk_0[0xF] |= 0x10;//open south CT Shortcut to Faron
allAreaNodesPtr->Lanayru.unk_0[0xF] |= 0x1;//water on Map
- eventBitsPtr[0x30] |= 0x40; //gave springwater to south CT goron - eventBitsPtr[0x8] |= 0x80; //ZD Thawed - eventBitsPtr[0xC] |= 0x2; //Lanayru Twilight Story Progression Flag - eventBitsPtr[0xA] |= 0x10; //Kagorok Howl at Lake - + eventBitsPtr[0x30] |= 0x40; //gave springwater to south CT goron
+ eventBitsPtr[0x8] |= 0x80; //ZD Thawed
+ eventBitsPtr[0xC] |= 0x2; //Lanayru Twilight Story Progression Flag
+ eventBitsPtr[0xA] |= 0x10; //Kagorok Howl at Lake
+
//Unlock Map Regions
scratchPadPtr->movingActors.exploredRegions.Snowpeak = 0b1;
scratchPadPtr->movingActors.exploredRegions.Desert = 0b1;
@@ -497,9 +514,9 @@ namespace mod allAreaNodesPtr->Hyrule_Field.unk_0[0xB] |= 0x8;//give castle town warp
allAreaNodesPtr->Hyrule_Field.unk_0[0x9] |= 0x20; //give Gorge Warp
allAreaNodesPtr->Lanayru.unk_0[0xB] |= 0x4; // give Zora's Domain Warp
- allAreaNodesPtr->Lanayru.unk_0[0xA] |= 0x4;//give lake hylia warp - - //Faron Escape + allAreaNodesPtr->Lanayru.unk_0[0xA] |= 0x4;//give lake hylia warp
+
+ //Faron Escape
if (Singleton::getInstance()->isForestEscapeEnabled == 1)
{
eventBitsPtr[0x6] |= 0x26; //warp the kak bridge, give map warp, set Forest Temple Story Flag
@@ -507,22 +524,22 @@ namespace mod else
{
eventBitsPtr[0x6] |= 0x24; //warp the kak bridge, give map warp
- } - - //Skip MDH? - if (Singleton::getInstance()->isMDHSkipEnabled == 1) - { - //set MDH flags - gameInfo.scratchPad.eventBits[0xC] |= 0x1; //MDH Started - gameInfo.scratchPad.eventBits[0x1E] |= 0x8; //MDH Completed - } - - gameInfo.nextStageVars.triggerLoad |= 1; - return item; + }
+
+ //Skip MDH?
+ if (Singleton::getInstance()->isMDHSkipEnabled == 1)
+ {
+ //set MDH flags
+ gameInfo.scratchPad.eventBits[0xC] |= 0x1; //MDH Started
+ gameInfo.scratchPad.eventBits[0x1E] |= 0x8; //MDH Completed
+ }
+
+ gameInfo.nextStageVars.triggerLoad |= 1;
+ return item;
}
else
{
- //Faron Escape + //Faron Escape
if (Singleton::getInstance()->isForestEscapeEnabled == 1)
{
eventBitsPtr[0x6] |= 0x26; //warp the kak bridge, give map warp, set Forest Temple Story Flag
@@ -545,7 +562,7 @@ namespace mod eventBitsPtr[0x6] |= 0x1; //tame Epona
eventBitsPtr[0xA] |= 0x8; //Beat KB1
eventBitsPtr[0x14] |= 0x10; //Put Bo Outside
- eventBitsPtr[0x7] = 0xD6; //skip Gor Coron Sumo and Enter Mines also Trigger KB1 and mark Post-KB1 CS as watched
+ eventBitsPtr[0x7] |= 0xD6; //skip Gor Coron Sumo and Enter Mines also Trigger KB1 and mark Post-KB1 CS as watched
return item;
}
else if (item == items::Item::Vessel_Of_Light_Lanayru)
@@ -945,10 +962,17 @@ namespace mod }
else if (item == items::Item::Shadow_Crystal)
{//shadow crystal doesn't actually do anything so we have to do its functionnality ourselves
- game_patch::giveMidnaTransform(); - if (Singleton::getInstance()->isMDHSkipEnabled == 1)
+ if (Singleton::getInstance()->startWithCrystal == 1) + {
+ item = items::Item::Silver_Rupee;
+ }
+ else
{
- gameInfo.scratchPad.unk_1F[0x11] |= 0x8; //Midna on Back
+ game_patch::giveMidnaTransform();
+ if (Singleton::getInstance()->isMDHSkipEnabled == 1)
+ {
+ gameInfo.scratchPad.unk_1F[0x11] |= 0x8; //Midna on Back
+ }
}
}
else if (item == items::Item::Dominion_Rod_Uncharged)
@@ -973,31 +997,374 @@ namespace mod }
else if (item == 0xE1)
{
- gameInfo.scratchPad.eventBits[0x29] |= 0x4;//give ending blow
+ if ((gameInfo.scratchPad.eventBits[0x29] & 0x4) != 0)/*have ending blow*/
+ {
+ if ((gameInfo.scratchPad.eventBits[0x29] & 0x8) != 0)/*have shield attack*/
+ {
+ if ((gameInfo.scratchPad.eventBits[0x29] & 0x2) != 0)/*have back slice*/
+ {
+ if ((gameInfo.scratchPad.eventBits[0x29] & 0x1) != 0)/*have helm splitter*/
+ {
+ if ((gameInfo.scratchPad.eventBits[0x2A] & 0x80) != 0)/*have mortal draw*/
+ {
+ if ((gameInfo.scratchPad.eventBits[0x2A] & 0x40) != 0)/*have jump strike*/
+ {
+ gameInfo.scratchPad.eventBits[0x2A] |= 0x20;//give great spin
+ }
+ else
+ {
+ gameInfo.scratchPad.eventBits[0x2A] |= 0x40;//give jumpstrike
+ }
+
+ }
+ else
+ {
+ gameInfo.scratchPad.eventBits[0x2A] |= 0x80;//give mortal draw
+ }
+
+ }
+ else
+ {
+ gameInfo.scratchPad.eventBits[0x29] |= 0x1;//give helm splitter
+ }
+
+ }
+ else
+ {
+ gameInfo.scratchPad.eventBits[0x29] |= 0x2;//give back slice
+ }
+
+ }
+ else
+ {
+ {
+ gameInfo.scratchPad.eventBits[0x29] |= 0x8;//give shield attack
+ }
+ }
+
+ }
+ else
+ {
+ gameInfo.scratchPad.eventBits[0x29] |= 0x4;//give ending blow
+ }
}
else if (item == 0xE2)
{
- gameInfo.scratchPad.eventBits[0x29] |= 0x8;//give shield attack
+ if ((gameInfo.scratchPad.eventBits[0x29] & 0x4) != 0)/*have ending blow*/
+ {
+ if ((gameInfo.scratchPad.eventBits[0x29] & 0x8) != 0)/*have shield attack*/
+ {
+ if ((gameInfo.scratchPad.eventBits[0x29] & 0x2) != 0)/*have back slice*/
+ {
+ if ((gameInfo.scratchPad.eventBits[0x29] & 0x1) != 0)/*have helm splitter*/
+ {
+ if ((gameInfo.scratchPad.eventBits[0x2A] & 0x80) != 0)/*have mortal draw*/
+ {
+ if ((gameInfo.scratchPad.eventBits[0x2A] & 0x40) != 0)/*have jump strike*/
+ {
+ gameInfo.scratchPad.eventBits[0x2A] |= 0x20;//give great spin
+ }
+ else
+ {
+ gameInfo.scratchPad.eventBits[0x2A] |= 0x40;//give jumpstrike
+ }
+
+ }
+ else
+ {
+ gameInfo.scratchPad.eventBits[0x2A] |= 0x80;//give mortal draw
+ }
+
+ }
+ else
+ {
+ gameInfo.scratchPad.eventBits[0x29] |= 0x1;//give helm splitter
+ }
+
+ }
+ else
+ {
+ gameInfo.scratchPad.eventBits[0x29] |= 0x2;//give back slice
+ }
+
+ }
+ else
+ {
+ {
+ gameInfo.scratchPad.eventBits[0x29] |= 0x8;//give shield attack
+ }
+ }
+
+ }
+ else
+ {
+ gameInfo.scratchPad.eventBits[0x29] |= 0x4;//give ending blow
+ }
}
else if (item == 0xE3)
{
- gameInfo.scratchPad.eventBits[0x29] |= 0x2;//give back slice
+ if ((gameInfo.scratchPad.eventBits[0x29] & 0x4) != 0)/*have ending blow*/
+ {
+ if ((gameInfo.scratchPad.eventBits[0x29] & 0x8) != 0)/*have shield attack*/
+ {
+ if ((gameInfo.scratchPad.eventBits[0x29] & 0x2) != 0)/*have back slice*/
+ {
+ if ((gameInfo.scratchPad.eventBits[0x29] & 0x1) != 0)/*have helm splitter*/
+ {
+ if ((gameInfo.scratchPad.eventBits[0x2A] & 0x80) != 0)/*have mortal draw*/
+ {
+ if ((gameInfo.scratchPad.eventBits[0x2A] & 0x40) != 0)/*have jump strike*/
+ {
+ gameInfo.scratchPad.eventBits[0x2A] |= 0x20;//give great spin
+ }
+ else
+ {
+ gameInfo.scratchPad.eventBits[0x2A] |= 0x40;//give jumpstrike
+ }
+
+ }
+ else
+ {
+ gameInfo.scratchPad.eventBits[0x2A] |= 0x80;//give mortal draw
+ }
+
+ }
+ else
+ {
+ gameInfo.scratchPad.eventBits[0x29] |= 0x1;//give helm splitter
+ }
+
+ }
+ else
+ {
+ gameInfo.scratchPad.eventBits[0x29] |= 0x2;//give back slice
+ }
+
+ }
+ else
+ {
+ {
+ gameInfo.scratchPad.eventBits[0x29] |= 0x8;//give shield attack
+ }
+ }
+
+ }
+ else
+ {
+ gameInfo.scratchPad.eventBits[0x29] |= 0x4;//give ending blow
+ }
}
else if (item == 0xE4)
{
- gameInfo.scratchPad.eventBits[0x29] |= 0x1;//give helm splitter
+ if ((gameInfo.scratchPad.eventBits[0x29] & 0x4) != 0)/*have ending blow*/
+ {
+ if ((gameInfo.scratchPad.eventBits[0x29] & 0x8) != 0)/*have shield attack*/
+ {
+ if ((gameInfo.scratchPad.eventBits[0x29] & 0x2) != 0)/*have back slice*/
+ {
+ if ((gameInfo.scratchPad.eventBits[0x29] & 0x1) != 0)/*have helm splitter*/
+ {
+ if ((gameInfo.scratchPad.eventBits[0x2A] & 0x80) != 0)/*have mortal draw*/
+ {
+ if ((gameInfo.scratchPad.eventBits[0x2A] & 0x40) != 0)/*have jump strike*/
+ {
+ gameInfo.scratchPad.eventBits[0x2A] |= 0x20;//give great spin
+ }
+ else
+ {
+ gameInfo.scratchPad.eventBits[0x2A] |= 0x40;//give jumpstrike
+ }
+
+ }
+ else
+ {
+ gameInfo.scratchPad.eventBits[0x2A] |= 0x80;//give mortal draw
+ }
+
+ }
+ else
+ {
+ gameInfo.scratchPad.eventBits[0x29] |= 0x1;//give helm splitter
+ }
+
+ }
+ else
+ {
+ gameInfo.scratchPad.eventBits[0x29] |= 0x2;//give back slice
+ }
+
+ }
+ else
+ {
+ {
+ gameInfo.scratchPad.eventBits[0x29] |= 0x8;//give shield attack
+ }
+ }
+
+ }
+ else
+ {
+ gameInfo.scratchPad.eventBits[0x29] |= 0x4;//give ending blow
+ }
}
else if (item == 0xE5)
{
- gameInfo.scratchPad.eventBits[0x2A] |= 0x80;//give mortal draw
+ if ((gameInfo.scratchPad.eventBits[0x29] & 0x4) != 0)/*have ending blow*/
+ {
+ if ((gameInfo.scratchPad.eventBits[0x29] & 0x8) != 0)/*have shield attack*/
+ {
+ if ((gameInfo.scratchPad.eventBits[0x29] & 0x2) != 0)/*have back slice*/
+ {
+ if ((gameInfo.scratchPad.eventBits[0x29] & 0x1) != 0)/*have helm splitter*/
+ {
+ if ((gameInfo.scratchPad.eventBits[0x2A] & 0x80) != 0)/*have mortal draw*/
+ {
+ if ((gameInfo.scratchPad.eventBits[0x2A] & 0x40) != 0)/*have jump strike*/
+ {
+ gameInfo.scratchPad.eventBits[0x2A] |= 0x20;//give great spin
+ }
+ else
+ {
+ gameInfo.scratchPad.eventBits[0x2A] |= 0x40;//give jumpstrike
+ }
+
+ }
+ else
+ {
+ gameInfo.scratchPad.eventBits[0x2A] |= 0x80;//give mortal draw
+ }
+
+ }
+ else
+ {
+ gameInfo.scratchPad.eventBits[0x29] |= 0x1;//give helm splitter
+ }
+
+ }
+ else
+ {
+ gameInfo.scratchPad.eventBits[0x29] |= 0x2;//give back slice
+ }
+
+ }
+ else
+ {
+ {
+ gameInfo.scratchPad.eventBits[0x29] |= 0x8;//give shield attack
+ }
+ }
+
+ }
+ else
+ {
+ gameInfo.scratchPad.eventBits[0x29] |= 0x4;//give ending blow
+ }
}
else if (item == 0xE6)
{
- gameInfo.scratchPad.eventBits[0x2A] |= 0x40;//give jump strike
+ if ((gameInfo.scratchPad.eventBits[0x29] & 0x4) != 0)/*have ending blow*/
+ {
+ if ((gameInfo.scratchPad.eventBits[0x29] & 0x8) != 0)/*have shield attack*/
+ {
+ if ((gameInfo.scratchPad.eventBits[0x29] & 0x2) != 0)/*have back slice*/
+ {
+ if ((gameInfo.scratchPad.eventBits[0x29] & 0x1) != 0)/*have helm splitter*/
+ {
+ if ((gameInfo.scratchPad.eventBits[0x2A] & 0x80) != 0)/*have mortal draw*/
+ {
+ if ((gameInfo.scratchPad.eventBits[0x2A] & 0x40) != 0)/*have jump strike*/
+ {
+ gameInfo.scratchPad.eventBits[0x2A] |= 0x20;//give great spin
+ }
+ else
+ {
+ gameInfo.scratchPad.eventBits[0x2A] |= 0x40;//give jumpstrike
+ }
+
+ }
+ else
+ {
+ gameInfo.scratchPad.eventBits[0x2A] |= 0x80;//give mortal draw
+ }
+
+ }
+ else
+ {
+ gameInfo.scratchPad.eventBits[0x29] |= 0x1;//give helm splitter
+ }
+
+ }
+ else
+ {
+ gameInfo.scratchPad.eventBits[0x29] |= 0x2;//give back slice
+ }
+
+ }
+ else
+ {
+ {
+ gameInfo.scratchPad.eventBits[0x29] |= 0x8;//give shield attack
+ }
+ }
+
+ }
+ else
+ {
+ gameInfo.scratchPad.eventBits[0x29] |= 0x4;//give ending blow
+ }
}
else if (item == 0xE7)
{
- gameInfo.scratchPad.eventBits[0x2A] |= 0x20;//give great spin
+ if ((gameInfo.scratchPad.eventBits[0x29] & 0x4) != 0)/*have ending blow*/
+ {
+ if ((gameInfo.scratchPad.eventBits[0x29] & 0x8) != 0)/*have shield attack*/
+ {
+ if ((gameInfo.scratchPad.eventBits[0x29] & 0x2) != 0)/*have back slice*/
+ {
+ if ((gameInfo.scratchPad.eventBits[0x29] & 0x1) != 0)/*have helm splitter*/
+ {
+ if ((gameInfo.scratchPad.eventBits[0x2A] & 0x80) != 0)/*have mortal draw*/
+ {
+ if ((gameInfo.scratchPad.eventBits[0x2A] & 0x40) != 0)/*have jump strike*/
+ {
+ gameInfo.scratchPad.eventBits[0x2A] |= 0x20;//give great spin
+ }
+ else
+ {
+ gameInfo.scratchPad.eventBits[0x2A] |= 0x40;//give jumpstrike
+ }
+
+ }
+ else
+ {
+ gameInfo.scratchPad.eventBits[0x2A] |= 0x80;//give mortal draw
+ }
+
+ }
+ else
+ {
+ gameInfo.scratchPad.eventBits[0x29] |= 0x1;//give helm splitter
+ }
+
+ }
+ else
+ {
+ gameInfo.scratchPad.eventBits[0x29] |= 0x2;//give back slice
+ }
+
+ }
+ else
+ {
+ {
+ gameInfo.scratchPad.eventBits[0x29] |= 0x8;//give shield attack
+ }
+ }
+
+ }
+ else
+ {
+ gameInfo.scratchPad.eventBits[0x29] |= 0x4;//give ending blow
+ }
}
else if (item == items::Item::Reekfish_Scent)
{
diff --git a/source/game_patches.cpp b/source/game_patches.cpp index 0212ea0..1c7272d 100644 --- a/source/game_patches.cpp +++ b/source/game_patches.cpp @@ -3,6 +3,8 @@ #include "stage.h" #include "tools.h" #include "singleton.h" +#include "items.h" +#include "itemChecks.h" #include <tp/d_menu_collect.h> #include <tp/d_a_alink.h> @@ -11,6 +13,10 @@ #include <tp/JFWSystem.h> #include <tp/d_com_inf_game.h> #include <tp/evt_control.h> +#include <tp/d_stage.h> +#include <tp/d_a_shop_item_static.h> +#include <tp/d_item_data.h> +#include <tp/d_item.h> #include <cstring> #include <cstdio> @@ -82,22 +88,20 @@ namespace mod::game_patch void removeIBLimit() { - if (!tp::d_a_alink::checkStageName("D_MN07A")) - { - // li 0 - u32 li = 0x38600000; - // b +4C - u32 b = 0x4800004C; + // li 0 + u32 li = 0x38600000; + // b +4C + u32 b = 0x4800004C; - // CheckHeavyState overwrite - u32 checkHeavyStateOnAddress = reinterpret_cast<u32>(&tp::d_a_alink::checkHeavyStateOn); - *reinterpret_cast<u32*>(checkHeavyStateOnAddress + 0x84) = li; + // CheckHeavyState overwrite + u32 checkHeavyStateOnAddress = reinterpret_cast<u32>(&tp::d_a_alink::checkHeavyStateOn); + *reinterpret_cast<u32*>(checkHeavyStateOnAddress + 0x84) = li; - u32 setStickDataAddress = reinterpret_cast<u32>(&tp::d_a_alink::setStickData); - *reinterpret_cast<u32*>(setStickDataAddress + 0x5FC) = b; - } + u32 setStickDataAddress = reinterpret_cast<u32>(&tp::d_a_alink::setStickData); + *reinterpret_cast<u32*>(setStickDataAddress + 0x5FC) = b; } + void increaseWalletSize() { // li @@ -193,6 +197,245 @@ namespace mod::game_patch }
} + void fixFTState() + { + if (Singleton::getInstance()->hasFTBeenBeaten == 1) + { + gameInfo.scratchPad.allAreaNodes.Forest_Temple.dungeon.bossBeaten = 0b0; //unset boss flag + gameInfo.scratchPad.eventBits[0x6] &= ~0x2; //unset story flag + if ((gameInfo.scratchPad.allAreaNodes.Forest_Temple.unk_0[0x12] & 0x10) == 0) + { + gameInfo.scratchPad.allAreaNodes.Forest_Temple.dungeon.ooccooGotten = 0b0; + } + } + } + + void fixGMState() + { + if (Singleton::getInstance()->hasGMBeenBeaten == 1 || Singleton::getInstance()->isGMStoryPatch == 1) + { + gameInfo.scratchPad.allAreaNodes.Goron_Mines.dungeon.bossBeaten = 0b0; //unset boss flag + gameInfo.scratchPad.eventBits[0x7] &= ~0x1; //unset story flag + if ((gameInfo.scratchPad.allAreaNodes.Goron_Mines.unk_0[0xE] & 0x2) == 0) + { + gameInfo.scratchPad.allAreaNodes.Goron_Mines.dungeon.ooccooGotten = 0b0; + } + } + } + + void fixLBTState() + { + if (Singleton::getInstance()->hasLBTBeenBeaten == 1) + { + gameInfo.scratchPad.allAreaNodes.Lakebed_Temple.dungeon.bossBeaten = 0b0; //unset boss flag + gameInfo.scratchPad.eventBits[0x9] &= ~0x4; //unset story flag + if ((gameInfo.scratchPad.allAreaNodes.Lakebed_Temple.unk_0[0x11] & 0x80) == 0) + { + gameInfo.scratchPad.allAreaNodes.Lakebed_Temple.dungeon.ooccooGotten = 0b0; + } + } + } + + void fixAGState() + { + if (Singleton::getInstance()->hasAGBeenBeaten == 1) + { + gameInfo.scratchPad.allAreaNodes.Arbiters_Grounds.dungeon.bossBeaten = 0b0; //unset boss flag + gameInfo.scratchPad.eventBits[0x20] &= ~0x10; //unset story flag + if ((gameInfo.scratchPad.allAreaNodes.Arbiters_Grounds.unk_0[0x17] & 0x20) == 0) + { + gameInfo.scratchPad.allAreaNodes.Arbiters_Grounds.dungeon.ooccooGotten = 0b0; + } + } + } + + void fixSPRState() + { + if (Singleton::getInstance()->hasSPRBeenBeaten == 1 || Singleton::getInstance()->isEarlyToTEnabled == 1) + { + gameInfo.scratchPad.allAreaNodes.Snowpeak_Ruins.dungeon.bossBeaten = 0b0; //unset boss flag + gameInfo.scratchPad.eventBits[0x20] &= ~0x8; //unset story flag + if ((gameInfo.scratchPad.allAreaNodes.Snowpeak_Ruins.unk_0[0x1] & 0x1) == 0) + { + gameInfo.scratchPad.allAreaNodes.Snowpeak_Ruins.dungeon.ooccooGotten = 0b0; + } + } + } + + void fixToTState() + { + if (Singleton::getInstance()->hasToTBeenBeaten == 1) + { + gameInfo.scratchPad.allAreaNodes.Temple_of_Time.dungeon.bossBeaten = 0b0; //unset boss flag + gameInfo.scratchPad.eventBits[0x20] &= ~0x4; //unset story flag + if ((gameInfo.scratchPad.allAreaNodes.Temple_of_Time.unk_0[0x4] & 0x80) == 0) + { + gameInfo.scratchPad.allAreaNodes.Temple_of_Time.dungeon.ooccooGotten = 0b0; + } + } + } + + void fixCiTSState() + { + if (Singleton::getInstance()->hasCiTSBeenBeaten == 1 || Singleton::getInstance()->isEarlyPoTEnabled == 1) + { + gameInfo.scratchPad.allAreaNodes.City_in_the_Sky.dungeon.bossBeaten = 0b0; //unset boss flag + gameInfo.scratchPad.eventBits[0x20] &= ~0x2; //unset story flag + } + if (Singleton::getInstance()->hasCiTSOoccoo == 0) + { + gameInfo.scratchPad.allAreaNodes.City_in_the_Sky.dungeon.ooccooGotten = 0b0; + } + } + + void setFTDungeonFlag() + { + if (Singleton::getInstance()->hasFTBeenBeaten == 0 && gameInfo.scratchPad.allAreaNodes.Forest_Temple.dungeon.bossBeaten == 0b1) + { + Singleton::getInstance()->hasFTBeenBeaten = 1; + } + else if (Singleton::getInstance()->hasFTBeenBeaten == 1) + { + gameInfo.scratchPad.allAreaNodes.Forest_Temple.dungeon.bossBeaten = 0b1; //set boss flag + gameInfo.scratchPad.eventBits[0x6] |= 0x2; //set story flag + } + } + + void setGMDungeonFlag() + { + if (Singleton::getInstance()->hasGMBeenBeaten == 0 && gameInfo.scratchPad.allAreaNodes.Goron_Mines.dungeon.bossBeaten == 0b1) + { + Singleton::getInstance()->hasGMBeenBeaten = 1; + } + else if (Singleton::getInstance()->hasGMBeenBeaten == 1) + { + gameInfo.scratchPad.allAreaNodes.Goron_Mines.dungeon.bossBeaten = 0b1; //set boss flag + gameInfo.scratchPad.eventBits[0x7] |= 0x1; //set story flag + } + else if (Singleton::getInstance()->isGMStoryPatch == 1) + { + gameInfo.scratchPad.eventBits[0x7] |= 0x1; //set story flag + } + } + + void setGMBossFlag() + { + if (Singleton::getInstance()->hasGMBeenBeaten == 1) + { + gameInfo.scratchPad.allAreaNodes.Goron_Mines.dungeon.bossBeaten = 0b1; //set boss flag + } + } + + void setLakeDungeonFlags() + { + if (Singleton::getInstance()->hasLBTBeenBeaten == 0 && gameInfo.scratchPad.allAreaNodes.Lakebed_Temple.dungeon.bossBeaten == 0b1) + { + Singleton::getInstance()->hasLBTBeenBeaten = 1; + } + else if (Singleton::getInstance()->hasLBTBeenBeaten == 1) + { + gameInfo.scratchPad.allAreaNodes.Lakebed_Temple.dungeon.bossBeaten = 0b1; //set boss flag + gameInfo.scratchPad.eventBits[0x9] |= 0x4; //set story flag + } + + if (Singleton::getInstance()->hasCiTSBeenBeaten == 0 && gameInfo.scratchPad.allAreaNodes.City_in_the_Sky.dungeon.bossBeaten == 0b1) + { + Singleton::getInstance()->hasCiTSBeenBeaten = 1; + } + else if (Singleton::getInstance()->hasCiTSBeenBeaten == 1) + { + gameInfo.scratchPad.allAreaNodes.City_in_the_Sky.dungeon.bossBeaten = 0b1; //set boss flag + gameInfo.scratchPad.eventBits[0x20] |= 0x2; //set story flag + } + else if (Singleton::getInstance()->isEarlyPoTEnabled == 1) + { + gameInfo.scratchPad.eventBits[0x20] |= 0x2; //set story flag + } + } + + void setLBTBossFlag() + { + if (Singleton::getInstance()->hasLBTBeenBeaten == 1) + { + gameInfo.scratchPad.allAreaNodes.Lakebed_Temple.dungeon.bossBeaten = 0b1; //set boss flag + } + } + + void setAGDungeonFlag() + { + if (Singleton::getInstance()->hasAGBeenBeaten == 0 && gameInfo.scratchPad.allAreaNodes.Arbiters_Grounds.dungeon.bossBeaten == 0b1) + { + Singleton::getInstance()->hasAGBeenBeaten = 1; + } + else if (Singleton::getInstance()->hasAGBeenBeaten == 1) + { + gameInfo.scratchPad.allAreaNodes.Arbiters_Grounds.dungeon.bossBeaten = 0b1; //set boss flag + gameInfo.scratchPad.eventBits[0x20] |= 0x10; //set story flag + } + } + + void setAGBossFlag() + { + if (Singleton::getInstance()->hasAGBeenBeaten == 1) + { + gameInfo.scratchPad.allAreaNodes.Arbiters_Grounds.dungeon.bossBeaten = 0b1; //set boss flag + } + } + + void setSPRDungeonFlag() + { + if (Singleton::getInstance()->hasSPRBeenBeaten == 0 && gameInfo.scratchPad.allAreaNodes.Snowpeak_Ruins.dungeon.bossBeaten == 0b1) + { + Singleton::getInstance()->hasSPRBeenBeaten = 1; + } + else if (Singleton::getInstance()->hasSPRBeenBeaten == 1) + { + gameInfo.scratchPad.allAreaNodes.Snowpeak_Ruins.dungeon.bossBeaten = 0b1; //set boss flag + gameInfo.scratchPad.eventBits[0x20] |= 0x8; //set story flag + } + else if (Singleton::getInstance()->isEarlyToTEnabled == 1) + { + gameInfo.scratchPad.eventBits[0x20] |= 0x8; //set story flag + } + } + + void setSPRBossFlag() + { + if (Singleton::getInstance()->hasSPRBeenBeaten == 1) + { + gameInfo.scratchPad.allAreaNodes.Snowpeak_Ruins.dungeon.bossBeaten = 0b1; //set boss flag + } + } + + void setToTDungeonFlag() + { + if (Singleton::getInstance()->hasToTBeenBeaten == 0 && gameInfo.scratchPad.allAreaNodes.Temple_of_Time.dungeon.bossBeaten == 0b1) + { + Singleton::getInstance()->hasToTBeenBeaten = 1; + } + else if (Singleton::getInstance()->hasToTBeenBeaten == 1) + { + gameInfo.scratchPad.allAreaNodes.Temple_of_Time.dungeon.bossBeaten = 0b1; //set boss flag + gameInfo.scratchPad.eventBits[0x20] |= 0x4; //set story flag + } + } + + void setToTBossFlag() + { + if (Singleton::getInstance()->hasToTBeenBeaten == 1) + { + gameInfo.scratchPad.allAreaNodes.Temple_of_Time.dungeon.bossBeaten = 0b1; //set boss flag + } + } + + void setCiTSBossFlag() + { + if (Singleton::getInstance()->hasCiTSBeenBeaten == 1) + { + gameInfo.scratchPad.allAreaNodes.City_in_the_Sky.dungeon.bossBeaten = 0b1; //set boss flag + } + } + void setBublinState()
{
strcpy(sysConsolePtr->consoleLine[20].line, "state was not 1");
@@ -297,22 +540,17 @@ namespace mod::game_patch } } - void skipCartEscort() - { - if (Singleton::getInstance()->isCartEscortSkipEnabled == 1) - { - gameInfo.scratchPad.eventBits[0x8] |= 0x40;//escort started
- gameInfo.scratchPad.eventBits[0x8] |= 0x10;//escort finished - gameInfo.scratchPad.eventBits[0x8] |= 0x4;//got zora armor from Rutela - tools::triggerSaveLoad(stage::allStages[Stage_Kakariko_Interiors], 0x2, 0x3, 0xD); - } - gameInfo.scratchPad.allAreaNodes.Eldin.unk_0[0x17] |= 0x40;//remove rock in graveyard
- gameInfo.scratchPad.allAreaNodes.Eldin.unk_0[0x16] |= 0x40; + void breakBarrier()
+ {
+ if (Singleton::getInstance()->isEarlyHCEnabled == 1 && ((gameInfo.scratchPad.eventBits[0x1E] & 0x8) != 0))
+ {
+ gameInfo.scratchPad.eventBits[0x42] |= 0x8;
+ }
} void setEscortState() { - if ((gameInfo.scratchPad.eventBits[0x8] & 0x40) == 0 && (Singleton::getInstance()->isCartEscortSkipEnabled == 1 || (tools::checkItemFlag(ItemFlags::Heros_Bow) && tools::checkItemFlag(ItemFlags::Boomerang))) && gameInfo.scratchPad.clearedTwilights.Lanayru == 0b1) + if ((gameInfo.scratchPad.eventBits[0x8] & 0x40) == 0 && Singleton::getInstance()->isCartEscortSkipEnabled == 0 && tools::checkItemFlag(ItemFlags::Heros_Bow) && tools::checkItemFlag(ItemFlags::Boomerang) && gameInfo.scratchPad.clearedTwilights.Lanayru == 0b1) { gameInfo.nextStageVars.nextState = 0x8; gameInfo.nextStageVars.nextSpawnPoint = 0x14; @@ -501,6 +739,11 @@ namespace mod::game_patch gameInfo.scratchPad.eventBits[0x6] &= ~0x2; Singleton::getInstance()->diababaMusicFixed = 1; } + + if (Singleton::getInstance()->hasFTBeenBeaten == 1) + { + gameInfo.scratchPad.allAreaNodes.Forest_Temple.dungeon.bossBeaten = 0b1; //set boss flag + } } void skipTextAndCS() @@ -533,6 +776,7 @@ namespace mod::game_patch eventBitsPtr[0x3] |= 0x90; //Jaggle Calls out to link, talked to squirrel as wolf in Ordon
eventBitsPtr[0x5] |= 0x10; //unchain wolf link
eventBitsPtr[0x6] |= 0xC0; //CS after beating Ordon Shadow, cs after entering Faron twilight
+ eventBitsPtr[0x7] |= 0x20; //Talked to Bo outside his house
eventBitsPtr[0xB] |= 0x20; //Talked to Yeta First Time
eventBitsPtr[0x10] |= 0x2; //Talked to Jaggle after climbing vines
eventBitsPtr[0x5E] |= 0x10; //Midna Text After Beating Forest Temple
@@ -541,6 +785,7 @@ namespace mod::game_patch eventBitsPtr[0x1D] = 0x40; //fight bublin after Fyer
eventBitsPtr[0x22] |= 0x1; //Plumm initial CS watched
eventBitsPtr[0x26] |= 0x2; //Talked to Yeto on Snowpeak
+ eventBitsPtr[0x28] |= 0x40; //Used Ooccoo for the First Time
eventBitsPtr[0x37] |= 0x4; // Postman Twilight Text
eventBitsPtr[0x38] |= 0x6; //Enter Hena Cabin CS
eventBitsPtr[0x3A] |= 0x1; //Talked to Ralis
@@ -670,15 +915,56 @@ namespace mod::game_patch allAreaNodesPtr->Faron.unk_0[0xE] |= 0x9;//cs after entering Faron,spring cs with spirit allAreaNodesPtr->Faron.unk_0[0x17] |= 0xC0;//kill bugs in Coro's House - //Apply Randomizer Options - checkBossKeysey(); - earlyCiTS(); - earlyDesert(); //Apply Overrides for custom chests gameInfo.scratchPad.eventBits[0x22] |= 0x4;/*Got Ilia's Charm from Impaz*/ gameInfo.scratchPad.eventBits[0x49] |= 0x2;/*Bought Slingshot from Sera*/ + //Apply Randomizer Options + checkBossKeysey(); + earlyCiTS(); + earlyDesert();
+
+ if (Singleton::getInstance()->isEarlyToTEnabled == 1)
+ { + gameInfo.scratchPad.allAreaNodes.Sacred_Grove.unk_0[0x17] |= 0x10; //SG Portal + gameInfo.scratchPad.allAreaNodes.Sacred_Grove.unk_0[0x9] |= 0x40; //ToT Stairs + gameInfo.scratchPad.allAreaNodes.Sacred_Grove.unk_0[0xB] |= 0x10; //Pushed block as human + }
+
+ if (Singleton::getInstance()->isEarlyPoTEnabled == 1)
+ {
+ gameInfo.scratchPad.eventBits[0x20] |= 0x2; //CiTS Story Flag
+ }
+
+ if (Singleton::getInstance()->isGMStoryPatch == 1)
+ {
+ gameInfo.scratchPad.eventBits[0x7] |= 0x1; //Mines Story Flag
+ gameInfo.scratchPad.eventBits[0x13] |= 0x20; //watched post GM cs
+ gameInfo.scratchPad.allAreaNodes.Eldin.unk_0[0x14] |= 0x10; //barnes sells bombs
+ } + + if (Singleton::getInstance()->isCartEscortSkipEnabled == 1) + { + gameInfo.scratchPad.eventBits[0x8] |= 0x40;//escort started
+ gameInfo.scratchPad.eventBits[0x8] |= 0x10;//escort finished + gameInfo.scratchPad.eventBits[0x8] |= 0x4;//got zora armor from Rutela + gameInfo.scratchPad.allAreaNodes.Eldin.unk_0[0x17] |= 0x40;//remove rock in graveyard
+ gameInfo.scratchPad.allAreaNodes.Eldin.unk_0[0x16] |= 0x40; + } + + if (Singleton::getInstance()->startWithCrystal == 1) + { + giveMidnaTransform(); + tools::setItemFlag(ItemFlags::Shadow_Crystal); + + if (Singleton::getInstance()->isMDHSkipEnabled == 1)
+ {
+ gameInfo.scratchPad.unk_1F[0x11] |= 0x8; //Midna on Back
+ } + } + + if (Singleton::getInstance()->isIntroSkipped == 1)
{
//set Ordon Days 1,2, and 3 Flags
@@ -722,7 +1008,7 @@ namespace mod::game_patch scratchPadPtr->clearedTwilights.Faron = 0b1; //Clear Faron Twilight
tools::setItemFlag(ItemFlags::Vessel_Of_Light_Faron);
scratchPadPtr->tearCounters.Faron = 16; - eventBitsPtr[0x5] = 0xFF; //Ensure Epona is Stolen, give Midna Charge + eventBitsPtr[0x5] |= 0xFF; //Ensure Epona is Stolen, give Midna Charge eventBitsPtr[0x6] |= 0x10; //Faron Twilight Progression flag eventBitsPtr[0xC] |= 0x8; //Set Sword and Shield to not be on back tools::setItemFlag(ItemFlags::Heros_Clothes); @@ -734,7 +1020,7 @@ namespace mod::game_patch eventBitsPtr[0x6] |= 0x1; //tame Epona
eventBitsPtr[0xA] |= 0x8; //Beat KB1
eventBitsPtr[0x14] |= 0x10; //Put Bo Outside
- eventBitsPtr[0x7] = 0xDE; //skip Gor Coron Sumo and Enter Mines also Trigger KB1 and mark Post-KB1 CS as watched, Eldin Twilight Story Progression Flag
+ eventBitsPtr[0x7] |= 0xDE; //skip Gor Coron Sumo and Enter Mines also Trigger KB1 and mark Post-KB1 CS as watched, Eldin Twilight Story Progression Flag
eventBitsPtr[0x41] |= 0x10; //Told Fado about the Kids
//Set Lanayru Twilight Flags @@ -824,4 +1110,93 @@ namespace mod::game_patch eventBitsPtr[0xF] |= 0x8; //Put Eldin BRidge Back } } + + /*void setFieldModels()
+ {
+ tp::d_item_data::ItemResource* itemResPtr = &tp::d_item_data::item_resource[0];
+ tp::d_item_data::FieldItemRes* fieldItemResPtr = &tp::d_item_data::field_item_res[0];
+
+ u32 loopCount = sizeof(item::itemsWithNoFieldModel) / sizeof(item::itemsWithNoFieldModel[0]);
+ for (u32 i = 0; i < loopCount; i++)
+ {
+ u32 item = item::itemsWithNoFieldModel[i]; // Retrieve as u32 to prevent rlwinm shenanigans
+ fieldItemResPtr[item].arcName = itemResPtr[item].arcName;
+ fieldItemResPtr[item].modelResIdx = itemResPtr[item].modelResIdx;
+ }
+
+ // For items that dont have a field model, use rupee item info to allow the item to be collected and whatnot
+ // Using the yellow rupee because thats what i used in testing
+ tp::d_item_data::ItemInfo* itemInfoPtr = &tp::d_item_data::item_info[0];
+ tp::d_item_data::ItemInfo* yellowRupeeInfoPtr = &tp::d_item_data::item_info[items::Yellow_Rupee];
+
+ loopCount = sizeof(item::itemsWithNoFieldModel) / sizeof(item::itemsWithNoFieldModel[0]);
+ for (u32 i = 0; i < loopCount; i++)
+ {
+ u32 item = item::itemsWithNoFieldModel[i]; // Retrieve as u32 to prevent rlwinm shenanigans
+ itemInfoPtr[item].mShadowSize = yellowRupeeInfoPtr->mShadowSize;
+ itemInfoPtr[item].mCollisionH = yellowRupeeInfoPtr->mCollisionH;
+ itemInfoPtr[item].mCollisionR = yellowRupeeInfoPtr->mCollisionR;
+ itemInfoPtr[item].mFlags = yellowRupeeInfoPtr->mFlags;
+ }
+
+ // Modify a branch in itemGetNextExecute to allow the item get cutscene to play with items past 0x40
+ // If you already have the item it gives you, then itll act like a rupee and appear over your head. This could be changed though.
+ u32 address_US = 0x8015CF64;
+ *reinterpret_cast<u32*>(address_US) = 0x48000018; // b 0x18
+
+ // Hook dStage_actorCommonLayerInit to search for field items (probably only rupees) to replace based on object name
+ bool procActorCommonLayerInit(void* mStatus_roomControl, tp::d_stage::dzxChunkTypeInfo* chunkTypeInfo, s32 unk3, void* unk4)
+ {
+ Actr* actrPtr = chunkTypeInfo->chunkDataPtr;
+ u32 numChunks = chunkTypeInfo->numChunks;
+ for (u32 i = 0; i < numChunks; i++)
+ {
+ // Check for "item", as that seems to be whats used for rupees
+ // Would check for chests and whatnot as well when changing the contents of those
+ if (strncmp(actrPtr->objectName, "item", sizeof(Actr.objectName)))
+ {
+ // Change the item id
+ u8* tempParamBytes = reinterpret_cast<u8*>(&actrPtr->parameters);
+ tempParamBytes[3] = newItemId;
+
+ // Changing the parameters probably isnt necessary for "item", but I'll add them anyway
+ // Refer to Winditor for what the parameters do
+ tempParamBytes[0] = 0xF3;
+ tempParamBytes[1] = 0xFF;
+ tempParamBytes[2] = 0x80;
+ actrPtr->rot[2] = 0x3F;
+ }
+ }
+ }
+
+ // hook dStage_actorInit to search for field items (probably only heart containers) to replace based on object name
+ // Not sure what is passed into dStage_actorInit, but r4 seems to be the same as dStage_actorCommonLayerInit
+ bool procActorCommonLayerInit(void* mStatus_roomControl, tp::d_stage::dzxChunkTypeInfo* chunkTypeInfo, s32 unk3, void* unk4)
+ {
+ Actr* actrPtr = chunkTypeInfo->chunkDataPtr;
+ u32 numChunks = chunkTypeInfo->numChunks;
+ for (u32 i = 0; i < numChunks; i++)
+ {
+ // Check for "htPiece", as that seems to be whats used for heart pieces
+ // Not sure what name heart containers use
+ if (strncmp(actrPtr->objectName, "htPiece", sizeof(Actr.objectName)))
+ {
+ // Change the object name to "item"
+ strncpy(actrPtr->objectName, "item", sizeof(Actr.objectName));
+
+ // Change the item id
+ u8* tempParamBytes = reinterpret_cast<u8*>(&actrPtr->parameters);
+ tempParamBytes[3] = newItemId;
+
+ // Changing the parameters is necessary for this, as its being changed to use rupee parameters
+ // Currently allows the item to respawn, so need to look into what handles that
+ // Refer to Winditor for what the parameters do
+ tempParamBytes[0] = 0xF3;
+ tempParamBytes[1] = 0xFF;
+ tempParamBytes[2] = 0x80;
+ actrPtr->rot[2] = 0x3F;
+ }
+ }
+ }
+ }*/ }
\ No newline at end of file diff --git a/source/item.cpp b/source/item.cpp index 98a273d..f0f57fe 100644 --- a/source/item.cpp +++ b/source/item.cpp @@ -5,18 +5,18 @@ namespace mod::item { - u8 itemGetAnimationFlags[10] =
- {
- static_cast<u8>(ItemFlags::Blue_Rupee),
- static_cast<u8>(ItemFlags::Yellow_Rupee),
- static_cast<u8>(ItemFlags::Red_Rupee),
- static_cast<u8>(ItemFlags::Purple_Rupee),
- static_cast<u8>(ItemFlags::Orange_Rupee),
- static_cast<u8>(ItemFlags::Seeds_50),
- static_cast<u8>(ItemFlags::Arrows_30),
- static_cast<u8>(ItemFlags::Arrows_20),
- static_cast<u8>(ItemFlags::Arrows_10),
- static_cast<u8>(ItemFlags::Arrows_1),
+ u8 itemGetAnimationFlags[10] = + { + static_cast<u8>(ItemFlags::Blue_Rupee), + static_cast<u8>(ItemFlags::Yellow_Rupee), + static_cast<u8>(ItemFlags::Red_Rupee), + static_cast<u8>(ItemFlags::Purple_Rupee), + static_cast<u8>(ItemFlags::Orange_Rupee), + static_cast<u8>(ItemFlags::Seeds_50), + static_cast<u8>(ItemFlags::Arrows_30), + static_cast<u8>(ItemFlags::Arrows_20), + static_cast<u8>(ItemFlags::Arrows_10), + static_cast<u8>(ItemFlags::Arrows_1), }; u32 getFlags(u8 item, u32 currentPlayerConditions) { @@ -48,7 +48,7 @@ namespace mod::item flags |= item::Condition::Water_Bombs; break; - case items::Item::Bomb_Bag_Regular_Bombs: + case items::Item::Empty_Bomb_Bag: flags |= item::Condition::Bombs; flags |= item::Condition::Water_Bombs; break; @@ -89,8 +89,8 @@ namespace mod::item flags |= item::Condition::Ordon_Sword; break; - case items::Item::Master_Sword: - flags |= item::Condition::Master_Sword; + case items::Item::Shadow_Crystal: + flags |= item::Condition::Shadow_Crystal; break; case items::Item::Ordon_Shield: @@ -115,4 +115,10 @@ namespace mod::item return flags; } + + u8 itemsWithNoFieldModel[2] = + { + 0x32, + 0x40 + }; }
\ No newline at end of file diff --git a/source/itemChecks.cpp b/source/itemChecks.cpp index 0d49ab0..32e7951 100644 --- a/source/itemChecks.cpp +++ b/source/itemChecks.cpp @@ -51,7 +51,7 @@ namespace mod::item /* 41 */{0x06, 7, stage::allStages[46], 0, 0x5, 0xFF, 0b000000101100000000000, -4027.7336430, 3200.0000000, -8970.9990230, nullptr, nullptr}, //Kakariko Watchtower Alcove Chest /* 42 */{0x21, 3, stage::allStages[56], 0, 0x5, 0xFF, 0b000000001000000000000, 11550.0000000, 2700.0000000, 24090.0000000, nullptr, nullptr}, //Eldin Bomb Rock Ledge Heart Piece Chest /* 43 */{0x03, 7, stage::allStages[50], 1, 0x5, 0xFF, 0b000000000000000000000, 2784.3178710, -4587.8901370, 10773.4140620, nullptr, nullptr}, //ZD Small Chest By Mother and Child Isles - /* 44 */{0x04, 7, stage::allStages[50], 1, 0x8, 0x8, 0b000000000000000000000, 3810.8435060, -3535.5300290, 11344.8876950, nullptr, nullptr}, //ZD Small Chest Under Waterfall + /* 44 */{0x04, 7, stage::allStages[50], 1, 0x8, 0xFF, 0b000000000000000000000, 3810.8435060, -3535.5300290, 11344.8876950, nullptr, nullptr}, //ZD Small Chest Under Waterfall /* 45 */{0x06, 7, stage::allStages[52], 0, 0x5, 0xFF, 0b001000000000000000000, -97123.5468750, -19490.0000000, 58585.6992190, nullptr, nullptr}, //Lake Hylia Underwater Chest /* 46 */{0x0F, 5, stage::allStages[0], 0, 0x6, 0xFF, 0b000000000000001000000, -1707.6793210, 1250.0000000, 15388.9882810, nullptr, nullptr}, //LBT Lobby Left Chest /* 47 */{0x17, 5, stage::allStages[0], 0, 0x6, 0xFF, 0b000000000000001000000, -144.6737980, 1250.0000000, 16525.8710940, nullptr, nullptr}, //LBT Lobby Rear Chest @@ -138,132 +138,132 @@ namespace mod::item /* 128 */{0x04, 7, stage::allStages[34], 10, 0x7, 0xFF, 0b000000000010000000000, 13825.0000000, 137.5000000, -34250.0000000, nullptr, nullptr}, //Eldin Stockcave Small Chest /* 129 */{0x06, 7, stage::allStages[34], 10, 0x7, 0xFF, 0b111000000010000000000, 9577.0000000, -2833.8898930, -33492.0000000, nullptr, nullptr}, //Eldin Stockcave Lanturn Chest /* 130 */{0x21, 3, stage::allStages[34], 10, 0x7, 0xFF, 0b101000000010000000000, 9515.7099610, -2850.0000000, -31912.3808590, nullptr, nullptr}, //Eldin Stockcave Heart Piece Chest - /* 131 */{ 0x05, 7, stage::allStages[59], 0, 0x9, 0xFF, 0b000000000010000000000, -6940.8110350, 441.2112430, 48305.4023440, nullptr, nullptr },
- /* 132 */{ 0x06, 7, stage::allStages[37], 2, 0x9, 0xFF, 0b110000100010000000010, -128.8401180, 150.0000000, -1330.3356930, nullptr, nullptr },
- /* 133 */{ 0x04, 7, stage::allStages[59], 0, 0x9, 0xFF, 0b000000000000000000000, 9889.4482420, -732.8599850, 17813.8398440, nullptr, nullptr },
- /* 134 */{ 0x06, 7, stage::allStages[59], 0, 0x9, 0xFF, 0b000000000000000000000, 32741.2617190, 158.3099980, 68606.5468750, nullptr, nullptr },
- /* 135 */{ 0x04, 7, stage::allStages[59], 0, 0x9, 0xFF, 0b000000000000000000000, 3104.9711910, -732.8599850, 24575.0351560, nullptr, nullptr },
- /* 136 */{ 0x05, 7, stage::allStages[59], 0, 0x9, 0xFF, 0b000000000000000000000, 4945.0000000, -732.8599850, 25572.0000000, nullptr, nullptr },
- /* 137 */{ 0x0E, 5, stage::allStages[59], 0, 0x9, 0xFF, 0b000000000000000000000, 1845.0000000, -732.8599850, 26130.0000000, nullptr, nullptr },
- /* 138 */{ 0x04, 7, stage::allStages[59], 0, 0x9, 0xFF, 0b000000000000000000000, -6532.4062500, -732.8599850, 20852.4121090, nullptr, nullptr },
- /* 139 */{ 0x0E, 5, stage::allStages[59], 0, 0x9, 0xFF, 0b000000000000000000000, 4681.0947270, -162.9400020, 12575.7626950, nullptr, nullptr },
- /* 140 */{ 0x0F, 5, stage::allStages[55], 1, 0x9, 0xFF, 0b000000000000000000000, 4761.6406250, 0.0000000, 1580.5701900, nullptr, nullptr },
- /* 141 */{ 0x05, 7, stage::allStages[55], 1, 0x9, 0xFF, 0b000000000000000000000, 2389.0454100, 260.0000000, -1473.3872070, nullptr, nullptr },
- /* 142 */{ 0x05, 7, stage::allStages[55], 3, 0x9, 0xFF, 0b010000000000000000000, 3633.6201170, 840.0000000, -12457.7001950, nullptr, nullptr },
- /* 143 */{ 0x20, 8, stage::allStages[24], 0, 0x9, 0xFF, 0b000000000000000000000, -3000.0000000, -19.0000000, 5600.0000000, nullptr, nullptr },
- /* 144 */{ 0x20, 8, stage::allStages[24], 15, 0x9, 0xFF, 0b000000000000000000000, 4125.0000000, -741.5800170, -2250.0000000, nullptr, nullptr },
- /* 145 */{ 0x21, 3, stage::allStages[24], 2, 0x9, 0xFF, 0b000000000000000000000, 1300.0000000, 62.5000000, -3012.5000000, nullptr, nullptr },
- /* 146 */{ 0x23, 2, stage::allStages[24], 2, 0x9, 0x9, 0b000000000000000000000, -1300.0000000, 50.0000000, -3012.5000000, nullptr, nullptr },
- /* 147 */{ 0x24, 2, stage::allStages[24], 4, 0x9, 0x9, 0b000000000000000100000, 9400.0000000, 990.0599980, 6100.0000000, nullptr, nullptr },
- /* 148 */{ 0x20, 8, stage::allStages[24], 4, 0x9, 0xFF, 0b000000000000000100000, 12275.0000000, 980.0000000, 4537.5000000, nullptr, nullptr },
- /* 149 */{ 0x20, 8, stage::allStages[24], 14, 0x9, 0xFF, 0b000000000000000100000, 4150.0000000, 825.0000000, 775.0000000, nullptr, nullptr },
- /* 150 */{ 0x04, 7, stage::allStages[24], 6, 0x9, 0xFF, 0b000000000000000000000, -4065.0000000, 150.0000000, -2660.0000000, nullptr, nullptr },
- /* 151 */{ 0x04, 7, stage::allStages[24], 6, 0x9, 0xFF, 0b000000000000000000000, -4450.0000000, 400.0000000, 1150.0000000, nullptr, nullptr },
- /* 152 */{ 0x0A, 5, stage::allStages[24], 7, 0x9, 0xFF, 0b000000100100000000000, -9975.0000000, 500.0000000, -600.0000000, nullptr, nullptr },
- /* 153 */{ 0x0A, 5, stage::allStages[24], 7, 0x9, 0xFF, 0b000000100100000000000, -8113.0000000, 500.0000000, -1382.0000000, nullptr, nullptr },
- /* 154 */{ 0x20, 8, stage::allStages[24], 16, 0x9, 0xFF, 0b000000000000000000000, 3970.0000000, -1050.0000000, -6080.0000000, nullptr, nullptr },
- /* 155 */{ 0x41, 0, stage::allStages[26], 51, 0x9, 0x9, 0b000100000010000000000, 0.0000000, 50.0000000, -6200.0000000, nullptr, nullptr },
- /* 156 */{ 0x0B, 5, stage::allStages[24], 13, 0x10, 0xFF, 0b000000000000100000000, -8331.4091800, -1800.0000000, -3677.7468260, nullptr, nullptr },
- /* 157 */{ 0x04, 7, stage::allStages[24], 13, 0x10, 0xFF, 0b000000000000100000000, -10212.5000000, -1840.0000000, -3725.0000000, nullptr, nullptr },
- /* 158 */{ 0x03, 7, stage::allStages[24], 13, 0x10, 0xFF, 0b000000000000100000000, -10812.5000000, -1825.0000000, -5712.5000000, nullptr, nullptr },
- /* 159 */{ 0x21, 3, stage::allStages[24], 13, 0x10, 0xFF, 0b000000000000100000000, -5475.0000000, -1325.0000000, -4875.0000000, nullptr, nullptr },
- /* 160 */{ 0x03, 7, stage::allStages[24], 13, 0x10, 0xFF, 0b000000000000100000000, -6225.0000000, -1125.0000000, -7275.0000000, nullptr, nullptr },
- /* 161 */{ 0x26, 2, stage::allStages[24], 9, 0x10, 0x10, 0b000000000000100000000, -3675.0000000, 500.0000000, -7250.0000000, nullptr, nullptr },
- /* 162 */{ 0x21, 3, stage::allStages[56], 11, 0x10, 0xFF, 0b000000000000100000000, -88260.0000000, 2950.0000000, -8150.0000000, nullptr, nullptr },
- /* 163 */{ 0x0A, 5, stage::allStages[36], 1, 0x10, 0xFF, 0b100000000000100000010, 464.9176030, -262.3106380, -709.6952510, nullptr, nullptr },
- /* 164 */{ 0x0A, 5, stage::allStages[36], 1, 0x10, 0xFF, 0b100000000000100000010, -1153.7760010, -255.8396450, -980.6660160, nullptr, nullptr },
- /* 165 */{ 0x21, 3, stage::allStages[36], 1, 0x10, 0xFF, 0b100000100000100000010, -211.8499450, -60.9387400, -2691.0991210, nullptr, nullptr },
- /* 166 */{ 0x06, 7, stage::allStages[57], 16, 0x10, 0xFF, 0b100000000010100000000, -51500.0000000, -5180.0000000, 25970.0000000, nullptr, nullptr },
+ /* 131 */{ 0x05, 7, stage::allStages[59], 0, 0x9, 0xFF, 0b000000000010000000000, -6940.8110350, 441.2112430, 48305.4023440, nullptr, nullptr }, + /* 132 */{ 0x06, 7, stage::allStages[37], 2, 0x9, 0xFF, 0b110000100010000000010, -128.8401180, 150.0000000, -1330.3356930, nullptr, nullptr }, + /* 133 */{ 0x04, 7, stage::allStages[59], 0, 0x9, 0xFF, 0b000000000000000000000, 9889.4482420, -732.8599850, 17813.8398440, nullptr, nullptr }, + /* 134 */{ 0x06, 7, stage::allStages[59], 0, 0x9, 0xFF, 0b000000000000000000000, 32741.2617190, 158.3099980, 68606.5468750, nullptr, nullptr }, + /* 135 */{ 0x04, 7, stage::allStages[59], 0, 0x9, 0xFF, 0b000000000000000000000, 3104.9711910, -732.8599850, 24575.0351560, nullptr, nullptr }, + /* 136 */{ 0x05, 7, stage::allStages[59], 0, 0x9, 0xFF, 0b000000000000000000000, 4945.0000000, -732.8599850, 25572.0000000, nullptr, nullptr }, + /* 137 */{ 0x0E, 5, stage::allStages[59], 0, 0x9, 0xFF, 0b000000000000000000000, 1845.0000000, -732.8599850, 26130.0000000, nullptr, nullptr }, + /* 138 */{ 0x04, 7, stage::allStages[59], 0, 0x9, 0xFF, 0b000000000000000000000, -6532.4062500, -732.8599850, 20852.4121090, nullptr, nullptr }, + /* 139 */{ 0x0E, 5, stage::allStages[59], 0, 0x9, 0xFF, 0b000000000000000000000, 4681.0947270, -162.9400020, 12575.7626950, nullptr, nullptr }, + /* 140 */{ 0x0F, 5, stage::allStages[55], 1, 0x9, 0xFF, 0b000000000000000000000, 4761.6406250, 0.0000000, 1580.5701900, nullptr, nullptr }, + /* 141 */{ 0x05, 7, stage::allStages[55], 1, 0x9, 0xFF, 0b000000000000000000000, 2389.0454100, 260.0000000, -1473.3872070, nullptr, nullptr }, + /* 142 */{ 0x05, 7, stage::allStages[55], 3, 0x9, 0xFF, 0b010000000000000000000, 3633.6201170, 840.0000000, -12457.7001950, nullptr, nullptr }, + /* 143 */{ 0x20, 8, stage::allStages[24], 0, 0x9, 0xFF, 0b000000000000000000000, -3000.0000000, -19.0000000, 5600.0000000, nullptr, nullptr }, + /* 144 */{ 0x20, 8, stage::allStages[24], 15, 0x9, 0xFF, 0b000000000000000000000, 4125.0000000, -741.5800170, -2250.0000000, nullptr, nullptr }, + /* 145 */{ 0x21, 3, stage::allStages[24], 2, 0x9, 0xFF, 0b000000000000000000000, 1300.0000000, 62.5000000, -3012.5000000, nullptr, nullptr }, + /* 146 */{ 0x23, 2, stage::allStages[24], 2, 0x9, 0x9, 0b000000000000000000000, -1300.0000000, 50.0000000, -3012.5000000, nullptr, nullptr }, + /* 147 */{ 0x24, 2, stage::allStages[24], 4, 0x9, 0x9, 0b000000000000000100000, 9400.0000000, 990.0599980, 6100.0000000, nullptr, nullptr }, + /* 148 */{ 0x20, 8, stage::allStages[24], 4, 0x9, 0xFF, 0b000000000000000100000, 12275.0000000, 980.0000000, 4537.5000000, nullptr, nullptr }, + /* 149 */{ 0x20, 8, stage::allStages[24], 14, 0x9, 0xFF, 0b000000000000000100000, 4150.0000000, 825.0000000, 775.0000000, nullptr, nullptr }, + /* 150 */{ 0x04, 7, stage::allStages[24], 6, 0x9, 0xFF, 0b000000000000000000000, -4065.0000000, 150.0000000, -2660.0000000, nullptr, nullptr }, + /* 151 */{ 0x04, 7, stage::allStages[24], 6, 0x9, 0xFF, 0b000000000000000000000, -4450.0000000, 400.0000000, 1150.0000000, nullptr, nullptr }, + /* 152 */{ 0x0A, 5, stage::allStages[24], 7, 0x9, 0xFF, 0b000000100100000000000, -9975.0000000, 500.0000000, -600.0000000, nullptr, nullptr }, + /* 153 */{ 0x0A, 5, stage::allStages[24], 7, 0x9, 0xFF, 0b000000100100000000000, -8113.0000000, 500.0000000, -1382.0000000, nullptr, nullptr }, + /* 154 */{ 0x20, 8, stage::allStages[24], 16, 0x9, 0xFF, 0b000000000000000000000, 3970.0000000, -1050.0000000, -6080.0000000, nullptr, nullptr }, + /* 155 */{ 0x41, 0, stage::allStages[26], 51, 0x9, 0x9, 0b000100000010000000000, 0.0000000, 50.0000000, -6200.0000000, nullptr, nullptr }, + /* 156 */{ 0x0B, 5, stage::allStages[24], 13, 0x10, 0xFF, 0b000000000000100000000, -8331.4091800, -1800.0000000, -3677.7468260, nullptr, nullptr }, + /* 157 */{ 0x04, 7, stage::allStages[24], 13, 0x10, 0xFF, 0b000000000000100000000, -10212.5000000, -1840.0000000, -3725.0000000, nullptr, nullptr }, + /* 158 */{ 0x03, 7, stage::allStages[24], 13, 0x10, 0xFF, 0b000000000000100000000, -10812.5000000, -1825.0000000, -5712.5000000, nullptr, nullptr }, + /* 159 */{ 0x21, 3, stage::allStages[24], 13, 0x10, 0xFF, 0b000000000000100000000, -5475.0000000, -1325.0000000, -4875.0000000, nullptr, nullptr }, + /* 160 */{ 0x03, 7, stage::allStages[24], 13, 0x10, 0xFF, 0b000000000000100000000, -6225.0000000, -1125.0000000, -7275.0000000, nullptr, nullptr }, + /* 161 */{ 0x26, 2, stage::allStages[24], 9, 0x10, 0x10, 0b000000000000100000000, -3675.0000000, 500.0000000, -7250.0000000, nullptr, nullptr }, + /* 162 */{ 0x21, 3, stage::allStages[56], 11, 0x10, 0xFF, 0b000000000000100000000, -88260.0000000, 2950.0000000, -8150.0000000, nullptr, nullptr }, + /* 163 */{ 0x0A, 5, stage::allStages[36], 1, 0x10, 0xFF, 0b100000000000100000010, 464.9176030, -262.3106380, -709.6952510, nullptr, nullptr }, + /* 164 */{ 0x0A, 5, stage::allStages[36], 1, 0x10, 0xFF, 0b100000000000100000010, -1153.7760010, -255.8396450, -980.6660160, nullptr, nullptr }, + /* 165 */{ 0x21, 3, stage::allStages[36], 1, 0x10, 0xFF, 0b100000100000100000010, -211.8499450, -60.9387400, -2691.0991210, nullptr, nullptr }, + /* 166 */{ 0x06, 7, stage::allStages[57], 16, 0x10, 0xFF, 0b100000000010100000000, -51500.0000000, -5180.0000000, 25970.0000000, nullptr, nullptr }, /* 167 */{ 0x05, 7, stage::allStages[35], 0, 0x8, 0xFF, 0b110000000000000000010, -277.2709660, 150.0000000, -1096.2886960, nullptr, nullptr }, /* 168 */{0x04, 7, stage::allStages[45], 5, 0x1, 0xFF, 0b000000000000000000000, -25790.1093750, 330.0000000, -19842.9355470, nullptr, nullptr}, //Faron Mist Stump Chest /* 169 */{0x03, 7, stage::allStages[45], 5, 0x1, 0xFF, 0b000000000000000000000, -24845.1308590, -100.0000000, -26998.7226560, nullptr, nullptr}, //Faron Mist North Small Chest /* 170 */{0x05, 7, stage::allStages[45], 5, 0x1, 0xFF, 0b000000000000000000000, -25966.7851560, -83.1305240, -16071.9599610, nullptr, nullptr}, //Faron Mist East Chest - /* 171 */{ 0x20, 8, stage::allStages[27], 4, 0x11, 0xFF, 0b000000000000000000000, -1500.0000000, -60.0000000, -4458.0000000, nullptr, nullptr },
- /* 172 */{ 0x04, 7, stage::allStages[27], 4, 0x11, 0xFF, 0b000000000000000000000, 1350.0000000, 50.0000000, -1400.0000000, nullptr, nullptr },
- /* 173 */{ 0xF4, 8, stage::allStages[27], 5, 0x11, 0x11, 0b000000000000000100000, 5300.0000000, 0.0000000, -5100.0000000, nullptr, nullptr },
- /* 174 */{ 0x20, 8, stage::allStages[27], 4, 0x11, 0xFF, 0b000000000000000000000, 1350.0000000, -40.0000000, -4150.0000000, nullptr, nullptr },
- /* 175 */{ 0x04, 7, stage::allStages[27], 8, 0x11, 0xFF, 0b000000100100000000000, -4355.0000000, 0.0000000, -2160.0000000, nullptr, nullptr },
- /* 176 */{ 0x24, 2, stage::allStages[27], 8, 0x11, 0x11, 0b000000100100000000000, -3510.0000000, 0.0000000, -1350.0000000, nullptr, nullptr },
- /* 177 */{ 0x0A, 5, stage::allStages[27], 4, 0x11, 0xFF, 0b000000100100000000000, 0.0000000, 0.0000000, -1250.0000000, nullptr, nullptr },
- /* 178 */{ 0xF5, 8, stage::allStages[29], 51, 0x12, 0x12, 0b000000000100000000000, 0.0000000, 0.0000000, -3196.0000000, nullptr, nullptr },
- /* 179 */{ 0x21, 3, stage::allStages[27], 7, 0x12, 0xFF, 0b000000000100000000000, -3600.0000000, 0.0000000, 1600.0000000, nullptr, nullptr },
- /* 180 */{ 0x20, 8, stage::allStages[27], 8, 0x12, 0xFF, 0b000000000100000000000, -4350.0000000, 950.0000000, -3850.0000000, nullptr, nullptr },
- /* 181 */{ 0x21, 3, stage::allStages[27], 0, 0x12, 0xFF, 0b000000000100000000000, 0.0000000, 1118.3201900, 4690.0000000, nullptr, nullptr },
- /* 182 */{ 0x04, 7, stage::allStages[27], 0, 0x12, 0xFF, 0b000000000100000000000, -900.0000000, -50.0000000, 5950.0000000, nullptr, nullptr },
- /* 183 */{ 0x03, 7, stage::allStages[27], 0, 0x12, 0xFF, 0b000000000100000000000, 930.0000000, -50.0000000, 5350.0000000, nullptr, nullptr },
- /* 184 */{ 0x20, 8, stage::allStages[27], 5, 0x12, 0xFF, 0b100000000110000000000, 4350.0000000, 953.0000000, -4900.0000000, nullptr, nullptr },
- /* 185 */{ 0x04, 7, stage::allStages[27], 9, 0x12, 0xFF, 0b000000000100000000000, -5347.3071290, -50.0000000, -6500.8867190, nullptr, nullptr },
- /* 186 */{ 0x0A, 5, stage::allStages[27], 9, 0x12, 0xFF, 0b000000100100000000000, -1818.3217770, 0.0000000, -7562.9838870, nullptr, nullptr },
- /* 187 */{ 0xF6, 2, stage::allStages[27], 11, 0x12, 0x12, 0b100000100100000000000, -4350.0000000, 1050.0000000, -8560.5742190, nullptr, nullptr },
- /* 188 */{ 0x06, 7, stage::allStages[51], 2, 0x12, 0xFF, 0b110000000100000000010, -6233.2583010, -1800.0000000, -9865.0205080, nullptr, nullptr },
- /* 189 */{ 0x06, 7, stage::allStages[38], 3, 0x12, 0xFF, 0b100000000100000000010, -810.7105710, -300.0000000, -2101.0502930, nullptr, nullptr },
- /* 190 */{ 0x21, 3, stage::allStages[30], 0, 0x12, 0xFF, 0b000000000100000000000, 0.0000000, 0.0000000, -7900.0000000, nullptr, nullptr },
- /* 191 */{ 0x0D, 5, stage::allStages[54], 3, 0x12, 0xFF, 0b110100000000000000000, -15394.4238280, 2300.0000000, 2483.9230960, nullptr, nullptr },
- /* 192 */{ 0x06, 7, stage::allStages[54], 3, 0x12, 0xFF, 0b000000000000100000000, -6840.3515620, 2000.0000000, 6329.0605470, nullptr, nullptr },
- /* 193 */{ 0x20, 8, stage::allStages[9], 0, 0x12, 0xFF, 0b110001000000000000000, 2500.0000000, 56.2500000, 368.7500000, nullptr, nullptr },
- /* 194 */{ 0x10, 5, stage::allStages[9], 1, 0x12, 0xFF, 0b000001000000000000000, -12.5000000, 1100.0000000, 8362.5000000, nullptr, nullptr },
- /* 195 */{ 0x04, 7, stage::allStages[9], 1, 0x12, 0xFF, 0b000001000000000000000, 5795.0000000, 2505.0000000, 4210.0000000, nullptr, nullptr },
- /* 196 */{ 0x23, 2, stage::allStages[9], 1, 0x12, 0x12, 0b000001000000000000000, 6925.0000000, 2325.0000000, 3400.0000000, nullptr, nullptr },
- /* 197 */{ 0x20, 8, stage::allStages[9], 3, 0x12, 0xFF, 0b100001000000100000000, -1737.5000000, 4500.0000000, 5812.5000000, nullptr, nullptr },
- /* 198 */{ 0x24, 2, stage::allStages[9], 4, 0x12, 0x12, 0b100001000000100000000, -3450.0000000, 4450.0000000, -5510.0000000, nullptr, nullptr },
- /* 199 */{ 0x05, 7, stage::allStages[9], 5, 0x12, 0xFF, 0b100001000000100000000, -30.0000000, 5750.0000000, -1515.0000000, nullptr, nullptr },
- /* 200 */{ 0x20, 8, stage::allStages[9], 7, 0x12, 0xFF, 0b100001000000100000000, 5319.0000000, 7550.0000000, 8592.7500000, nullptr, nullptr },
- /* 201 */{ 0x05, 7, stage::allStages[9], 7, 0x12, 0xFF, 0b100001000000100000000, 5300.0000000, 8100.0000000, -800.0000000, nullptr, nullptr },
- /* 202 */{ 0x46, 0, stage::allStages[11], 51, 0x12, 0x12, 0b100001000000100100000, 0.0000000, -350.0000000, -2400.0000000, nullptr, nullptr },
- /* 203 */{ 0x04, 7, stage::allStages[9], 5, 0x12, 0xFF, 0b100001000010100000000, 1195.0000000, 7400.0000000, 2350.0000000, nullptr, nullptr },
- /* 204 */{ 0x04, 7, stage::allStages[9], 6, 0x12, 0xFF, 0b100001000010100000000, 6135.0000000, 8000.0000000, 0.0000000, nullptr, nullptr },
- /* 205 */{ 0x26, 2, stage::allStages[9], 6, 0x12, 0x12, 0b100001000010100000000, 5350.0000000, 7400.0000000, 0.0000000, nullptr, nullptr },
- /* 206 */{ 0x21, 3, stage::allStages[9], 4, 0x13, 0xFF, 0b100001000000110000000, -8740.0000000, 5100.0000000, -4515.0000000, nullptr, nullptr },
- /* 207 */{ 0x04, 7, stage::allStages[9], 3, 0x12, 0xFF, 0b100001000000100000000, 0.0000000, 4850.0000000, 9200.0000000, nullptr, nullptr },
- /* 208 */{ 0x21, 3, stage::allStages[9], 3, 0x13, 0xFF, 0b100001000000110000000, 1740.0000000, 4500.0000000, 5815.0000000, nullptr, nullptr },
- /* 209 */{ 0x21, 3, stage::allStages[54], 2, 0x13, 0xFF, 0b100001000000010000000, 606.7956540, 1005.0000000, 8005.3901370, nullptr, nullptr },
- /* 210 */{ 0x04, 7, stage::allStages[53], 4, 0x13, 0xFF, 0b000000000000000000000, 6500.0000000, 426.0000000, -977.0000000, nullptr, nullptr },
- /* 211 */{ 0x21, 3, stage::allStages[56], 0, 0x13, 0xFF, 0b000000000000010000000, 31257.5957030, 900.0000000, -16115.4990230, nullptr, nullptr },
- /* 212 */{ 0x06, 7, stage::allStages[56], 3, 0x13, 0xFF, 0b000000000000010000000, -10245.4765620, -4400.0000000, 42817.0467500, nullptr, nullptr },
- /* 213 */{ 0x06, 7, stage::allStages[57], 8, 0x13, 0xFF, 0b000000000000010000000, -79819.4140620, -1301.2399900, 22400.6718750, nullptr, nullptr },
- /* 214 */{ 0x06, 7, stage::allStages[56], 13, 0x13, 0xFF, 0b100000000010010000000, -93284.5703120, -5000.0000000, 18235.7246090, nullptr, nullptr },
- /* 215 */{ 0x21, 3, stage::allStages[45], 5, 0x13, 0xFF, 0b100000100000010000000, -21012.1542970, 1350.0000000, -20630.3222660, nullptr, nullptr },
- /* 216 */{ 0x06, 7, stage::allStages[59], 0, 0x13, 0xFF, 0b000000000000010000000, 16263.9707030, 989.6500240, 60708.4648440, nullptr, nullptr },
- /* 217 */{ 0x18, 5, stage::allStages[12], 0, 0x14, 0xFF, 0b101000000010000000000, -1170.0834960, -755.0000000, 6670.0000000, nullptr, nullptr },
- /* 218 */{ 0x04, 7, stage::allStages[12], 0, 0x14, 0xFF, 0b101000000010000000000, 1170.0000000, -755.0000000, 6670.0000000, nullptr, nullptr },
- /* 219 */{ 0x20, 8, stage::allStages[12], 10, 0x15, 0xFF, 0b100000000010100000000, -14514.4443360, 0.0000000, -12000.8310550, nullptr, nullptr },
- /* 220 */{ 0x23, 2, stage::allStages[12], 5, 0x14, 0x14, 0b101000000010100000000, 17665.1347660, 0.0000000, -11924.1035160, nullptr, nullptr },
- /* 221 */{ 0x03, 7, stage::allStages[12], 7, 0x14, 0xFF, 0b101000000010100000000, 15824.6093750, -110.0000000, -9750.6855470, nullptr, nullptr },
- /* 222 */{ 0x04, 7, stage::allStages[12], 7, 0x14, 0xFF, 0b101000000010100000000, 17550.0000000, 1500.0000000, -7200.0000000, nullptr, nullptr },
- /* 223 */{ 0x05, 7, stage::allStages[12], 7, 0x14, 0xFF, 0b101000000010100000000, 13470.0000000, 1500.0000000, -7925.0000000, nullptr, nullptr },
- /* 224 */{ 0x47, 0, stage::allStages[14], 51, 0x14, 0x14, 0b101000000010100000000, -0.3629600, 600.0000000, 2279.7690430, nullptr, nullptr },
- /* 225 */{ 0x24, 2, stage::allStages[12], 4, 0x15, 0x15, 0b101000000001100000000, 10800.0000000, -1775.0000000, -11850.0000000, nullptr, nullptr },
- /* 226 */{ 0x0F, 5, stage::allStages[12], 10, 0x15, 0xFF, 0b100000000001100000000, -11099.1240230, -1500.0000000, -15658.8515620, nullptr, nullptr },
- /* 227 */{ 0x04, 7, stage::allStages[12], 10, 0x15, 0xFF, 0b100000000001100000000, -13458.7949220, 0.0000000, -13410.5566410, nullptr, nullptr },
- /* 228 */{ 0x0B, 5, stage::allStages[12], 10, 0x15, 0xFF, 0b100000000001100000000, -10742.9599610, 0.0000000, -15156.7197270, nullptr, nullptr },
- /* 229 */{ 0x03, 7, stage::allStages[12], 11, 0x15, 0xFF, 0b100000000001100000000, -15654.8398440, 2840.2299800, -18906.7890620, nullptr, nullptr },
- /* 230 */{ 0x0F, 5, stage::allStages[12], 11, 0x15, 0xFF, 0b100000000001100000000, -12630.1699220, 2430.8999020, -19611.4316410, nullptr, nullptr },
- /* 231 */{ 0x21, 3, stage::allStages[12], 11, 0x15, 0xFF, 0b100000000001100000000, -14567.1093750, 2281.0000000, -16989.0351560, nullptr, nullptr },
- /* 232 */{ 0x04, 7, stage::allStages[12], 12, 0x15, 0xFF, 0b100000000001100000000, -15782.7958980, 2980.0000000, -11466.6982420, nullptr, nullptr },
- /* 233 */{ 0x05, 7, stage::allStages[12], 12, 0x15, 0xFF, 0b100000000001100000000, -14270.5380860, 1982.1999510, -7411.9101560, nullptr, nullptr },
- /* 234 */{ 0x0A, 5, stage::allStages[12], 12, 0x15, 0xFF, 0b100000000001100000000, -12592.9677730, 2400.0000000, -13712.7675780, nullptr, nullptr },
- /* 235 */{ 0x21, 3, stage::allStages[12], 12, 0x15, 0xFF, 0b100000000001100000000, -11494.3183590, 3000.0000000, -9888.6738280, nullptr, nullptr },
- /* 236 */{ 0x04, 7, stage::allStages[12], 13, 0x15, 0xFF, 0b100000000001100000000, 75.2376170, 4500.0000000, -10853.4550780, nullptr, nullptr },
- /* 237 */{ 0x05, 7, stage::allStages[12], 13, 0x15, 0xFF, 0b100000000001100000000, 4010.3149410, 4500.0000000, -12451.9033200, nullptr, nullptr },
- /* 238 */{ 0x26, 2, stage::allStages[12], 2, 0x15, 0x15, 0b100000000001100000000, -1090.9830320, 4500.0000000, -12411.7617190, nullptr, nullptr },
- /* 239 */{ 0x04, 7, stage::allStages[12], 2, 0x15, 0xFF, 0b100000000001100000000, 11.8030090, 3000.0000000, -13501.7851560, nullptr, nullptr },
- /* 240 */{ 0x05, 7, stage::allStages[12], 14, 0x15, 0xFF, 0b100000000001100000000, 0.0000000, 894.4799800, -23853.0000000, nullptr, nullptr },
- /* 241 */{ 0x21, 3, stage::allStages[56], 3, 0x15, 0xFF, 0b000000000001000000000, -22100.0000000, -7176.0297850, 52140.0000000, nullptr, nullptr },
- /* 242 */{ 0x06, 7, stage::allStages[52], 1, 0x15, 0xFF, 0b000000000001000000000, -2816.4138180, 1305.0787350, -1395.7875980, nullptr, nullptr },
- /* 243 */{ 0x06, 7, stage::allStages[52], 1, 0x15, 0xFF, 0b000000000001000000000, 2798.9057620, 1322.1817720, -987.1356810, nullptr, nullptr },
- /* 244 */{ 0x06, 7, stage::allStages[57], 16, 0x15, 0xFF, 0b000000000001000000000, -57374.0820310, -9100.0000000, 29237.9062500, nullptr, nullptr },
- /* 245 */{ 0x20, 8, stage::allStages[15], 1, 0x15, 0xFF, 0b000000000000000000000, -3950.0000000, -1071.0000000, 1375.0000000, nullptr, nullptr },
- /* 246 */{ 0x20, 8, stage::allStages[15], 2, 0x15, 0xFF, 0b000000000010000100000, -3950.0000000, -1200.0000000, -5075.0000000, nullptr, nullptr },
- /* 247 */{ 0x24, 2, stage::allStages[15], 2, 0x15, 0x15, 0b000000000010000100000, -2700.0000000, -1196.0000000, -1661.0000000, nullptr, nullptr },
- /* 248 */{ 0x06, 7, stage::allStages[15], 2, 0x15, 0xFF, 0b000000000001000100000, -2400.0000000, -21.2500000, -1550.0000000, nullptr, nullptr },
- /* 249 */{ 0x21, 3, stage::allStages[15], 1, 0x15, 0xFF, 0b000000000010000000000, -6850.0000000, -771.2500000, 3200.0000000, nullptr, nullptr },
- /* 250 */{ 0x05, 7, stage::allStages[15], 4, 0x15, 0xFF, 0b000000000010000000000, 3250.0000000, -696.2500000, 1235.0000000, nullptr, nullptr },
- /* 251 */{ 0x20, 8, stage::allStages[15], 4, 0x15, 0xFF, 0b000000000010000000000, 4650.0000000, -696.2500000, 1235.0000000, nullptr, nullptr },
- /* 252 */{ 0x05, 7, stage::allStages[15], 5, 0x15, 0xFF, 0b000000000001000100000, 5700.0000000, 3.7500000, -4350.0000000, nullptr, nullptr },
- /* 253 */{ 0x05, 7, stage::allStages[15], 5, 0x15, 0xFF, 0b000000000001000100000, 2200.0000000, 3.7500000, -5100.0000000, nullptr, nullptr },
- /* 254 */{ 0x23, 2, stage::allStages[15], 5, 0x15, 0x15, 0b000000000001000100000, 2300.0000000, -396.2500000, -3300.0000000, nullptr, nullptr },
- /* 255 */{ 0x20, 8, stage::allStages[15], 5, 0x15, 0xFF, 0b000000000001000100000, 5600.0000000, -296.2500000, -3300.0000000, nullptr, nullptr },
- /* 256 */{ 0x21, 3, stage::allStages[15], 4, 0x15, 0xFF, 0b000000000001000000000, 5352.5000000, -171.2500000, 3500.0000000, nullptr, nullptr },
+ /* 171 */{ 0x20, 8, stage::allStages[27], 4, 0x11, 0xFF, 0b000000000000000000000, -1500.0000000, -60.0000000, -4458.0000000, nullptr, nullptr }, + /* 172 */{ 0x04, 7, stage::allStages[27], 4, 0x11, 0xFF, 0b000000000000000000000, 1350.0000000, 50.0000000, -1400.0000000, nullptr, nullptr }, + /* 173 */{ 0xF4, 8, stage::allStages[27], 5, 0x11, 0x11, 0b000000000000000100000, 5300.0000000, 0.0000000, -5100.0000000, nullptr, nullptr }, + /* 174 */{ 0x20, 8, stage::allStages[27], 4, 0x11, 0xFF, 0b000000000000000000000, 1350.0000000, -40.0000000, -4150.0000000, nullptr, nullptr }, + /* 175 */{ 0x04, 7, stage::allStages[27], 8, 0x11, 0xFF, 0b000000100100000000000, -4355.0000000, 0.0000000, -2160.0000000, nullptr, nullptr }, + /* 176 */{ 0x24, 2, stage::allStages[27], 8, 0x11, 0x11, 0b000000100100000000000, -3510.0000000, 0.0000000, -1350.0000000, nullptr, nullptr }, + /* 177 */{ 0x0A, 5, stage::allStages[27], 4, 0x11, 0xFF, 0b000000100100000000000, 0.0000000, 0.0000000, -1250.0000000, nullptr, nullptr }, + /* 178 */{ 0xF5, 8, stage::allStages[29], 51, 0x12, 0x12, 0b000000000100000000000, 0.0000000, 0.0000000, -3196.0000000, nullptr, nullptr }, + /* 179 */{ 0x21, 3, stage::allStages[27], 7, 0x12, 0xFF, 0b000000000100000000000, -3600.0000000, 0.0000000, 1600.0000000, nullptr, nullptr }, + /* 180 */{ 0x20, 8, stage::allStages[27], 8, 0x12, 0xFF, 0b000000000100000000000, -4350.0000000, 950.0000000, -3850.0000000, nullptr, nullptr }, + /* 181 */{ 0x21, 3, stage::allStages[27], 0, 0x12, 0xFF, 0b000000000100000000000, 0.0000000, 1118.3201900, 4690.0000000, nullptr, nullptr }, + /* 182 */{ 0x04, 7, stage::allStages[27], 0, 0x12, 0xFF, 0b000000000100000000000, -900.0000000, -50.0000000, 5950.0000000, nullptr, nullptr }, + /* 183 */{ 0x03, 7, stage::allStages[27], 0, 0x12, 0xFF, 0b000000000100000000000, 930.0000000, -50.0000000, 5350.0000000, nullptr, nullptr }, + /* 184 */{ 0x20, 8, stage::allStages[27], 5, 0x12, 0xFF, 0b100000000110000000000, 4350.0000000, 953.0000000, -4900.0000000, nullptr, nullptr }, + /* 185 */{ 0x04, 7, stage::allStages[27], 9, 0x12, 0xFF, 0b000000000100000000000, -5347.3071290, -50.0000000, -6500.8867190, nullptr, nullptr }, + /* 186 */{ 0x0A, 5, stage::allStages[27], 9, 0x12, 0xFF, 0b000000100100000000000, -1818.3217770, 0.0000000, -7562.9838870, nullptr, nullptr }, + /* 187 */{ 0xF6, 2, stage::allStages[27], 11, 0x12, 0x12, 0b100000100100000000000, -4350.0000000, 1050.0000000, -8560.5742190, nullptr, nullptr }, + /* 188 */{ 0x06, 7, stage::allStages[51], 2, 0x12, 0xFF, 0b110000000100000000010, -6233.2583010, -1800.0000000, -9865.0205080, nullptr, nullptr }, + /* 189 */{ 0x06, 7, stage::allStages[38], 3, 0x12, 0xFF, 0b100000000100000000010, -810.7105710, -300.0000000, -2101.0502930, nullptr, nullptr }, + /* 190 */{ 0x21, 3, stage::allStages[30], 0, 0x12, 0xFF, 0b000000000100000000000, 0.0000000, 0.0000000, -7900.0000000, nullptr, nullptr }, + /* 191 */{ 0x0D, 5, stage::allStages[54], 3, 0x12, 0xFF, 0b110100000000000000000, -15394.4238280, 2300.0000000, 2483.9230960, nullptr, nullptr }, + /* 192 */{ 0x06, 7, stage::allStages[54], 3, 0x12, 0xFF, 0b000000000000100000000, -6840.3515620, 2000.0000000, 6329.0605470, nullptr, nullptr }, + /* 193 */{ 0x20, 8, stage::allStages[9], 0, 0x12, 0xFF, 0b110001000000000000000, 2500.0000000, 56.2500000, 368.7500000, nullptr, nullptr }, + /* 194 */{ 0x10, 5, stage::allStages[9], 1, 0x12, 0xFF, 0b000001000000000000000, -12.5000000, 1100.0000000, 8362.5000000, nullptr, nullptr }, + /* 195 */{ 0x04, 7, stage::allStages[9], 1, 0x12, 0xFF, 0b000001000000000000000, 5795.0000000, 2505.0000000, 4210.0000000, nullptr, nullptr }, + /* 196 */{ 0x23, 2, stage::allStages[9], 1, 0x12, 0x12, 0b000001000000000000000, 6925.0000000, 2325.0000000, 3400.0000000, nullptr, nullptr }, + /* 197 */{ 0x20, 8, stage::allStages[9], 3, 0x12, 0xFF, 0b100001000000100000000, -1737.5000000, 4500.0000000, 5812.5000000, nullptr, nullptr }, + /* 198 */{ 0x24, 2, stage::allStages[9], 4, 0x12, 0x12, 0b100001000000100000000, -3450.0000000, 4450.0000000, -5510.0000000, nullptr, nullptr }, + /* 199 */{ 0x05, 7, stage::allStages[9], 5, 0x12, 0xFF, 0b100001000000100000000, -30.0000000, 5750.0000000, -1515.0000000, nullptr, nullptr }, + /* 200 */{ 0x20, 8, stage::allStages[9], 7, 0x12, 0xFF, 0b100001000000100000000, 5319.0000000, 7550.0000000, 8592.7500000, nullptr, nullptr }, + /* 201 */{ 0x05, 7, stage::allStages[9], 7, 0x12, 0xFF, 0b100001000000100000000, 5300.0000000, 8100.0000000, -800.0000000, nullptr, nullptr }, + /* 202 */{ 0x46, 0, stage::allStages[11], 51, 0x12, 0x12, 0b100001000000100100000, 0.0000000, -350.0000000, -2400.0000000, nullptr, nullptr }, + /* 203 */{ 0x04, 7, stage::allStages[9], 5, 0x12, 0xFF, 0b100001000010100000000, 1195.0000000, 7400.0000000, 2350.0000000, nullptr, nullptr }, + /* 204 */{ 0x04, 7, stage::allStages[9], 6, 0x12, 0xFF, 0b100001000010100000000, 6135.0000000, 8000.0000000, 0.0000000, nullptr, nullptr }, + /* 205 */{ 0x26, 2, stage::allStages[9], 6, 0x12, 0x12, 0b100001000010100000000, 5350.0000000, 7400.0000000, 0.0000000, nullptr, nullptr }, + /* 206 */{ 0x21, 3, stage::allStages[9], 4, 0x13, 0xFF, 0b100001000000110000000, -8740.0000000, 5100.0000000, -4515.0000000, nullptr, nullptr }, + /* 207 */{ 0x04, 7, stage::allStages[9], 3, 0x12, 0xFF, 0b100001000000100000000, 0.0000000, 4850.0000000, 9200.0000000, nullptr, nullptr }, + /* 208 */{ 0x21, 3, stage::allStages[9], 3, 0x13, 0xFF, 0b100001000000110000000, 1740.0000000, 4500.0000000, 5815.0000000, nullptr, nullptr }, + /* 209 */{ 0x21, 3, stage::allStages[54], 2, 0x13, 0xFF, 0b100001000000010000000, 606.7956540, 1005.0000000, 8005.3901370, nullptr, nullptr }, + /* 210 */{ 0x04, 7, stage::allStages[53], 4, 0x13, 0xFF, 0b000000000000000000000, 6500.0000000, 426.0000000, -977.0000000, nullptr, nullptr }, + /* 211 */{ 0x21, 3, stage::allStages[56], 0, 0x13, 0xFF, 0b000000000000010000000, 31257.5957030, 900.0000000, -16115.4990230, nullptr, nullptr }, + /* 212 */{ 0x06, 7, stage::allStages[56], 3, 0x13, 0xFF, 0b000000000000010000000, -10245.4765620, -4400.0000000, 42817.0467500, nullptr, nullptr }, + /* 213 */{ 0x06, 7, stage::allStages[57], 8, 0x13, 0xFF, 0b000000000000010000000, -79819.4140620, -1301.2399900, 22400.6718750, nullptr, nullptr }, + /* 214 */{ 0x06, 7, stage::allStages[56], 13, 0x13, 0xFF, 0b100000000010010000000, -93284.5703120, -5000.0000000, 18235.7246090, nullptr, nullptr }, + /* 215 */{ 0x21, 3, stage::allStages[45], 5, 0x13, 0xFF, 0b100000100000010000000, -21012.1542970, 1350.0000000, -20630.3222660, nullptr, nullptr }, + /* 216 */{ 0x06, 7, stage::allStages[59], 0, 0x13, 0xFF, 0b000000000000010000000, 16263.9707030, 989.6500240, 60708.4648440, nullptr, nullptr }, + /* 217 */{ 0x18, 5, stage::allStages[12], 0, 0x14, 0xFF, 0b101000000010000000000, -1170.0834960, -755.0000000, 6670.0000000, nullptr, nullptr }, + /* 218 */{ 0x04, 7, stage::allStages[12], 0, 0x14, 0xFF, 0b101000000010000000000, 1170.0000000, -755.0000000, 6670.0000000, nullptr, nullptr }, + /* 219 */{ 0x20, 8, stage::allStages[12], 10, 0x15, 0xFF, 0b100000000010100000000, -14514.4443360, 0.0000000, -12000.8310550, nullptr, nullptr }, + /* 220 */{ 0x23, 2, stage::allStages[12], 5, 0x14, 0x14, 0b101000000010100000000, 17665.1347660, 0.0000000, -11924.1035160, nullptr, nullptr }, + /* 221 */{ 0x03, 7, stage::allStages[12], 7, 0x14, 0xFF, 0b101000000010100000000, 15824.6093750, -110.0000000, -9750.6855470, nullptr, nullptr }, + /* 222 */{ 0x04, 7, stage::allStages[12], 7, 0x14, 0xFF, 0b101000000010100000000, 17550.0000000, 1500.0000000, -7200.0000000, nullptr, nullptr }, + /* 223 */{ 0x05, 7, stage::allStages[12], 7, 0x14, 0xFF, 0b101000000010100000000, 13470.0000000, 1500.0000000, -7925.0000000, nullptr, nullptr }, + /* 224 */{ 0x47, 0, stage::allStages[14], 51, 0x14, 0x14, 0b101000000010100000000, -0.3629600, 600.0000000, 2279.7690430, nullptr, nullptr }, + /* 225 */{ 0x24, 2, stage::allStages[12], 4, 0x15, 0x15, 0b101000000001100000000, 10800.0000000, -1775.0000000, -11850.0000000, nullptr, nullptr }, + /* 226 */{ 0x0F, 5, stage::allStages[12], 10, 0x15, 0xFF, 0b100000000001100000000, -11099.1240230, -1500.0000000, -15658.8515620, nullptr, nullptr }, + /* 227 */{ 0x04, 7, stage::allStages[12], 10, 0x15, 0xFF, 0b100000000001100000000, -13458.7949220, 0.0000000, -13410.5566410, nullptr, nullptr }, + /* 228 */{ 0x0B, 5, stage::allStages[12], 10, 0x15, 0xFF, 0b100000000001100000000, -10742.9599610, 0.0000000, -15156.7197270, nullptr, nullptr }, + /* 229 */{ 0x03, 7, stage::allStages[12], 11, 0x15, 0xFF, 0b100000000001100000000, -15654.8398440, 2840.2299800, -18906.7890620, nullptr, nullptr }, + /* 230 */{ 0x0F, 5, stage::allStages[12], 11, 0x15, 0xFF, 0b100000000001100000000, -12630.1699220, 2430.8999020, -19611.4316410, nullptr, nullptr }, + /* 231 */{ 0x21, 3, stage::allStages[12], 11, 0x15, 0xFF, 0b100000000001100000000, -14567.1093750, 2281.0000000, -16989.0351560, nullptr, nullptr }, + /* 232 */{ 0x04, 7, stage::allStages[12], 12, 0x15, 0xFF, 0b100000000001100000000, -15782.7958980, 2980.0000000, -11466.6982420, nullptr, nullptr }, + /* 233 */{ 0x05, 7, stage::allStages[12], 12, 0x15, 0xFF, 0b100000000001100000000, -14270.5380860, 1982.1999510, -7411.9101560, nullptr, nullptr }, + /* 234 */{ 0x0A, 5, stage::allStages[12], 12, 0x15, 0xFF, 0b100000000001100000000, -12592.9677730, 2400.0000000, -13712.7675780, nullptr, nullptr }, + /* 235 */{ 0x21, 3, stage::allStages[12], 12, 0x15, 0xFF, 0b100000000001100000000, -11494.3183590, 3000.0000000, -9888.6738280, nullptr, nullptr }, + /* 236 */{ 0x04, 7, stage::allStages[12], 13, 0x15, 0xFF, 0b100000000001100000000, 75.2376170, 4500.0000000, -10853.4550780, nullptr, nullptr }, + /* 237 */{ 0x05, 7, stage::allStages[12], 13, 0x15, 0xFF, 0b100000000001100000000, 4010.3149410, 4500.0000000, -12451.9033200, nullptr, nullptr }, + /* 238 */{ 0x26, 2, stage::allStages[12], 2, 0x15, 0x15, 0b100000000001100000000, -1090.9830320, 4500.0000000, -12411.7617190, nullptr, nullptr }, + /* 239 */{ 0x04, 7, stage::allStages[12], 2, 0x15, 0xFF, 0b100000000001100000000, 11.8030090, 3000.0000000, -13501.7851560, nullptr, nullptr }, + /* 240 */{ 0x05, 7, stage::allStages[12], 14, 0x15, 0xFF, 0b100000000001100000000, 0.0000000, 894.4799800, -23853.0000000, nullptr, nullptr }, + /* 241 */{ 0x21, 3, stage::allStages[56], 3, 0x15, 0xFF, 0b000000000001000000000, -22100.0000000, -7176.0297850, 52140.0000000, nullptr, nullptr }, + /* 242 */{ 0x06, 7, stage::allStages[52], 1, 0x15, 0xFF, 0b000000000001000000000, -2816.4138180, 1305.0787350, -1395.7875980, nullptr, nullptr }, + /* 243 */{ 0x06, 7, stage::allStages[52], 1, 0x15, 0xFF, 0b000000000001000000000, 2798.9057620, 1322.1817720, -987.1356810, nullptr, nullptr }, + /* 244 */{ 0x06, 7, stage::allStages[57], 16, 0x15, 0xFF, 0b000000000001000000000, -57374.0820310, -9100.0000000, 29237.9062500, nullptr, nullptr }, + /* 245 */{ 0x20, 8, stage::allStages[15], 1, 0x15, 0xFF, 0b000000000000000000000, -3950.0000000, -1071.0000000, 1375.0000000, nullptr, nullptr }, + /* 246 */{ 0x20, 8, stage::allStages[15], 2, 0x15, 0xFF, 0b000000000010000100000, -3950.0000000, -1200.0000000, -5075.0000000, nullptr, nullptr }, + /* 247 */{ 0x24, 2, stage::allStages[15], 2, 0x15, 0x15, 0b000000000010000100000, -2700.0000000, -1196.0000000, -1661.0000000, nullptr, nullptr }, + /* 248 */{ 0x06, 7, stage::allStages[15], 2, 0x15, 0xFF, 0b000000000001000100000, -2400.0000000, -21.2500000, -1550.0000000, nullptr, nullptr }, + /* 249 */{ 0x21, 3, stage::allStages[15], 1, 0x15, 0xFF, 0b000000000010000000000, -6850.0000000, -771.2500000, 3200.0000000, nullptr, nullptr }, + /* 250 */{ 0x05, 7, stage::allStages[15], 4, 0x15, 0xFF, 0b000000000010000000000, 3250.0000000, -696.2500000, 1235.0000000, nullptr, nullptr }, + /* 251 */{ 0x20, 8, stage::allStages[15], 4, 0x15, 0xFF, 0b000000000010000000000, 4650.0000000, -696.2500000, 1235.0000000, nullptr, nullptr }, + /* 252 */{ 0x05, 7, stage::allStages[15], 5, 0x15, 0xFF, 0b000000000001000100000, 5700.0000000, 3.7500000, -4350.0000000, nullptr, nullptr }, + /* 253 */{ 0x05, 7, stage::allStages[15], 5, 0x15, 0xFF, 0b000000000001000100000, 2200.0000000, 3.7500000, -5100.0000000, nullptr, nullptr }, + /* 254 */{ 0x23, 2, stage::allStages[15], 5, 0x15, 0x15, 0b000000000001000100000, 2300.0000000, -396.2500000, -3300.0000000, nullptr, nullptr }, + /* 255 */{ 0x20, 8, stage::allStages[15], 5, 0x15, 0xFF, 0b000000000001000100000, 5600.0000000, -296.2500000, -3300.0000000, nullptr, nullptr }, + /* 256 */{ 0x21, 3, stage::allStages[15], 4, 0x15, 0xFF, 0b000000000001000000000, 5352.5000000, -171.2500000, 3500.0000000, nullptr, nullptr }, /* 257 */{ 0x05, 7, stage::allStages[15], 4, 0x15, 0xFF, 0b000000000001000000000, 2547.5000000, -171.2500000, 3500.0000000, nullptr, nullptr }, /* 258 */{0x20, 8, stage::allStages[15], 7, 0xFF, 0xFF, 0b000000000001000000000, 1500.0000000, 128.7500000, 6250.0000000, nullptr, nullptr}, //PoT Central First Room Chest /* 259 */{0x26, 2, stage::allStages[15], 11, 0xFF, 0xFF, 0b000000000001000100000, 0.0000000, 3130.0000000, -3600.0000000, nullptr, nullptr}, //PoT Big Key Chest @@ -316,25 +316,25 @@ namespace mod::item /* 306 */{0x21, 3, stage::allStages[41], 0, 0x2, 0xFF, 0b001000000000000000000, -4358.0000000, 15307.0000000, -19476.0000000, nullptr, nullptr}, //Herding Goats Heart Piece /* 307 */{0x22, 3, stage::allStages[4], 50, 0x4, 0xFF, 0b111111000000000000000, 203.0000000, 0.0000000, 830.0000000, nullptr, nullptr}, //Fyrus Heart Container /* 308 */{0x22, 3, stage::allStages[1], 50, 0x7, 0xFF, 0b111111010010001000000, -915.0000000, -23960.0000000, 8916.0000000, nullptr, nullptr}, //Morpheel Heart Container - /* 309 */{ 0x22, 3, stage::allStages[25], 50, 0x10, 0xFF, 0b111111010010101000000, 85.0000000, 1799.0000000, -1264.0000000, nullptr, nullptr },
- /* 310 */{ 0x22, 3, stage::allStages[28], 50, 0x12, 0xFF, 0b111111010110101000000, 279.0000000, 43.0000000, -865.0000000, nullptr, nullptr },
- /* 311 */{ 0x22, 3, stage::allStages[10], 50, 0x13, 0xFF, 0b111111010110111000000, 900.0000000, 0.0000000, 0.0000000, nullptr, nullptr },
+ /* 309 */{ 0x22, 3, stage::allStages[25], 50, 0x10, 0xFF, 0b111111010010101000000, 85.0000000, 1799.0000000, -1264.0000000, nullptr, nullptr }, + /* 310 */{ 0x22, 3, stage::allStages[28], 50, 0x12, 0xFF, 0b111111010110101000000, 279.0000000, 43.0000000, -865.0000000, nullptr, nullptr }, + /* 311 */{ 0x22, 3, stage::allStages[10], 50, 0x13, 0xFF, 0b111111010110111000000, 900.0000000, 0.0000000, 0.0000000, nullptr, nullptr }, /* 312 */{ 0x22, 3, stage::allStages[13], 50, 0x15, 0xFF, 0b111111010101111000000, 317.0000000, 0.0000000, 764.0000000, nullptr, nullptr }, /* 313 */{0x22, 3, stage::allStages[16], 10, 0xFF, 0xFF, 0b111111010101111000000, -3.0000000, 2525.0000000, -14603.0000000, nullptr, nullptr}, //Zant Heart Container /* 314 */{0x31, 1, stage::allStages[48], 0, 0x5, 0x5, 0b111111100000000000000, 21450.962891, 500.000000, 305.869934, nullptr, nullptr}, //Zora Armor /* 315 */{ 0x30, 12, stage::allStages[73], 0, 0x8, 0xFF, 0b111111100000000000000, 1557.0000000, -200.0000000, 3491.0000000, nullptr, nullptr }, //Magic Armor /* 316 */{0x4F, 1, stage::allStages[52], 0, 0x5, 0xFF, 0b111111110000000000000, -77679.9375000, -18765.0000000, 40764.0000000, nullptr, nullptr}, //Giant Bomb Bag - /* 317 */{ 0x3D, 0, stage::allStages[48], 0, 0x10, 0x10, 0b111111010010101000000, 21413.962891, 500.681793, -368.516510, nullptr, nullptr },
+ /* 317 */{ 0x3D, 0, stage::allStages[48], 0, 0x10, 0x10, 0b111111010010101000000, 21413.962891, 500.681793, -368.516510, nullptr, nullptr }, /* 318 */{ 0x3E, 12, stage::allStages[68], 3, 0x4, 0x12, 0b111111000000000000000, -500.0000000, 320.0000000, -695.0000000, nullptr, nullptr }, //Hawkeye /* 319 */{0x51, 0, stage::allStages[50], 0, 0x5, 0xFF, 0b111111010000000000000, 44.0000000, -3854.0000000, -2626.0000000, nullptr, nullptr}, //Goron Bomb Bag /* 320 */{0x50, 0, stage::allStages[68], 1, 0x4, 0x4, 0b111111000000000000000, 800.0000000, 0.0000000, -300.0000000, nullptr, nullptr}, //Barnes Bomb Bag /* 321 */{0x51, 0, stage::allStages[52], 0, 0x5, 0xFF, 0b111111100000000000000, -77680.0000000, -18765.0000000, 40764.0000000, nullptr, nullptr},//Iza Bomb Bag - /* 322 */{ 0x90, 4, stage::allStages[52], 0, 0x8, 0x8, 0b111111010010001000000, -116117.015625, -15810.000000, 58812.617188, nullptr, nullptr }, //Auru's Memo
- /* 323 */{ 0x91, 4, stage::allStages[51], 0, 0x10, 0x10, 0b000000000000000000000, 31608.291016, -13330.000000, -11652.610352, nullptr, nullptr }, //Aeshi's Sketch
- /* 324 */{ 0x80, 4, stage::allStages[46], 0, 0xFF, 0x13, 0b000000000000000000000, -324.903625, 0.000000, 435.528595, nullptr, nullptr }, //Renardo's Letter
- /* 325 */{ 0x81, 4, stage::allStages[53], 5, 0xFF, 0x13, 0b000000000000000000000, 2694.345215, -1150.000000, 3105.746826, nullptr, nullptr }, //Invoice
- /* 326 */{ 0x82, 4, stage::allStages[57], 16, 0xFF, 0x13, 0b000000000000000000000, -51514.375000, -6269.229980, 31816.427734, nullptr, nullptr }, //Wooden Statue
- /* 327 */{ 0x83, 4, stage::allStages[63], 0, 0xFF, 0x13, 0b000000000000000000000, 2077.769775, 104.958275, -1301.828491, nullptr, nullptr }, //Ilia's Charm
+ /* 322 */{ 0x90, 4, stage::allStages[52], 0, 0x8, 0x8, 0b111111010010001000000, -116117.015625, -15810.000000, 58812.617188, nullptr, nullptr }, //Auru's Memo + /* 323 */{ 0x91, 4, stage::allStages[51], 0, 0x10, 0x10, 0b000000000000000000000, 31608.291016, -13330.000000, -11652.610352, nullptr, nullptr }, //Aeshi's Sketch + /* 324 */{ 0x80, 4, stage::allStages[46], 0, 0xFF, 0x13, 0b000000000000000000000, -324.903625, 0.000000, 435.528595, nullptr, nullptr }, //Renardo's Letter + /* 325 */{ 0x81, 4, stage::allStages[53], 5, 0xFF, 0x13, 0b000000000000000000000, 2694.345215, -1150.000000, 3105.746826, nullptr, nullptr }, //Invoice + /* 326 */{ 0x82, 4, stage::allStages[57], 16, 0xFF, 0x13, 0b000000000000000000000, -51514.375000, -6269.229980, 31816.427734, nullptr, nullptr }, //Wooden Statue + /* 327 */{ 0x83, 4, stage::allStages[63], 0, 0xFF, 0x13, 0b000000000000000000000, 2077.769775, 104.958275, -1301.828491, nullptr, nullptr }, //Ilia's Charm /* 328 */{ 0x84, 4, stage::allStages[68], 0, 0xFF, 0x13, 0b000000000000000000000, 312.675079, 0.000000, -160.984177, nullptr, nullptr }, //Horse Call /* 329 */{0x9d, 9, stage::allStages[45], 4, 0x1, 0xFF, 0b000000000000000000000, -13659.433594, -0.454284, -14367.083008, nullptr, nullptr}, //Coro Bottle /* 330 */{0x75, 9, stage::allStages[73], 5, 0xFF, 0xFF, 0b000000000000000000000, 4250.363281, 134.492020, 1813.639648, nullptr, nullptr}, //Jovani Bottle @@ -342,152 +342,152 @@ namespace mod::item /* 332 */{0x2B, 12, stage::allStages[47], 3, 0x3, 0xFF, 0b001000000000000000000, -6545.0000000, -125.0000000, -2275.0000000, nullptr, nullptr}, //Wooden Shield (Goron) /* 333 */{0x21, 3, stage::allStages[46], 0, 0x4, 0xFF, 0b000001000000000000000, -900.000000, 0.780221, 6600.000000, nullptr, nullptr}, //Bow Shooting Game Heart Piece /* 334 */{0x21, 3, stage::allStages[53], 2, 0x5, 0xFF, 0b000000000000000000000, -4142.703125, 0.000000, -569.375000, nullptr, nullptr}, //Donation Heart Piece - /* 335 */{ 0x21, 3, stage::allStages[62], 0, 0xFF, 0xFF, 0b101000000010000000000, -2678.128906, -167.094162, 2246.794186, nullptr, nullptr },
- /* 336 */{ 0x21, 3, stage::allStages[56], 0, 0x8, 0xFF, 0b000000000000000000000, -25148.583984, -200.000000, 9814.881836, nullptr, nullptr },
- /* 337 */{ 0x21, 3, stage::allStages[61], 0, 0x8, 0xFF, 0b000000000000000000000, 3618.216797, 232.476608, 541.905518, nullptr, nullptr },
- /* 338 */{ 0x21, 3, stage::allStages[55], 1, 0x8, 0xFF, 0b000000000000000000000, 4708.924805, 260.000000, -3120.967529, nullptr, nullptr },
- /* 339 */{ 0x23, 2, stage::allStages[27], 1, 0x11, 0x11, 0b000000000000000000000, 293.920288, 0.000000, -337.167480, nullptr, nullptr }, // Yeta Map
- /* 340 */{ 0x21, 3, stage::allStages[51], 1, 0x12, 0xFF, 0b000000000000000000000, -71795.539062, -54450.000000, 56396.738281, nullptr, nullptr },
+ /* 335 */{ 0x21, 3, stage::allStages[62], 0, 0xFF, 0xFF, 0b101000000010000000000, -2678.128906, -167.094162, 2246.794186, nullptr, nullptr }, + /* 336 */{ 0x21, 3, stage::allStages[56], 0, 0x8, 0xFF, 0b000000000000000000000, -25148.583984, -200.000000, 9814.881836, nullptr, nullptr }, + /* 337 */{ 0x21, 3, stage::allStages[61], 0, 0x8, 0xFF, 0b000000000000000000000, 3618.216797, 232.476608, 541.905518, nullptr, nullptr }, + /* 338 */{ 0x21, 3, stage::allStages[55], 1, 0x9, 0xFF, 0b000000000000000000000, 4708.924805, 260.000000, -3120.967529, nullptr, nullptr }, //camp HP + /* 339 */{ 0x23, 2, stage::allStages[27], 1, 0x11, 0x11, 0b000000000000000000000, 293.920288, 0.000000, -337.167480, nullptr, nullptr }, // Yeta Map + /* 340 */{ 0x21, 3, stage::allStages[51], 1, 0x12, 0xFF, 0b000000000000000000000, -71795.539062, -54450.000000, 56396.738281, nullptr, nullptr }, /* 341 */{ 0x21, 3, stage::allStages[63], 0, 0x13, 0xFF, 0b000000000000000000010, 2200.000000, 104.574730, -1200.000000, nullptr, nullptr }, /* 342 */{0x20, 8, stage::allStages[20], 13, 0xFF, 0xFF, 0b000000000000000000000, -7625.000000, 52.000000, -5525.000000, nullptr, nullptr}, // /* 343 */{0x20, 8, stage::allStages[6], 7, 0x1, 0xFF, 0b000000000000000000000, -5703.254883, 4372.640137, 11664.798828, nullptr, nullptr}, //Ooccoo - /* 344 */{ 0x33, 2, stage::allStages[6], 1, 0x1, 0x1, 0b000000000000000000000, 3775.943604, 3167.790039, 5428.488281, nullptr, nullptr },
- /* 345 */{ 0x33, 2, stage::allStages[3], 14, 0x3, 0x3, 0b000000000000000000000, -14154.718750, 190.286682, 2185.947510, nullptr, nullptr },
- /* 346 */{ 0x33, 2, stage::allStages[0], 2, 0x6, 0x6, 0b000000000000000000000, 2045.683228, 1500.000000, 1642.919189, nullptr, nullptr },
- /* 347 */{ 0x33, 2, stage::allStages[24], 10, 0x9, 0x9, 0b000000000000000000000, -667.577815, -2100.000000, 4029.893311, nullptr, nullptr },
- /* 348 */{ 0x33, 2, stage::allStages[27], 2, 0x11, 0x11, 0b000000000000000000000, 3742.823975, 0.000000, 1621.097900, nullptr, nullptr },
- /* 349 */{ 0x33, 2, stage::allStages[9], 0, 0x12, 0x12, 0b000000000000000000000, -28.417549, 725.000000, 3091.288574, nullptr, nullptr },
+ /* 344 */{ 0x33, 2, stage::allStages[6], 1, 0x1, 0x1, 0b000000000000000000000, 3775.943604, 3167.790039, 5428.488281, nullptr, nullptr }, + /* 345 */{ 0x33, 2, stage::allStages[3], 14, 0x3, 0x3, 0b000000000000000000000, -14154.718750, 190.286682, 2185.947510, nullptr, nullptr }, + /* 346 */{ 0x33, 2, stage::allStages[0], 2, 0x6, 0x6, 0b000000000000000000000, 2045.683228, 1500.000000, 1642.919189, nullptr, nullptr }, + /* 347 */{ 0x33, 2, stage::allStages[24], 10, 0x9, 0x9, 0b000000000000000000000, -667.577815, -2100.000000, 4029.893311, nullptr, nullptr }, + /* 348 */{ 0x33, 2, stage::allStages[27], 2, 0x11, 0x11, 0b000000000000000000000, 3742.823975, 0.000000, 1621.097900, nullptr, nullptr }, + /* 349 */{ 0x33, 2, stage::allStages[9], 0, 0x12, 0x12, 0b000000000000000000000, -28.417549, 725.000000, 3091.288574, nullptr, nullptr }, /* 350 */{ 0x33, 2, stage::allStages[12], 16, 0x14, 0x14, 0b000000000000000000000, 6082.295898, 0.000000, 5896.656738, nullptr, nullptr }, //overworld keys - /* 351 */{ 0xfe, 8, stage::allStages[45], 4, 0xFF, 0xFF, 0b000000000000000000000, -13022.520508, -3.070827, -14673.488281, nullptr, nullptr },
- /* 352 */{ 0xf3, 4, stage::allStages[58], 13, 0x5, 0xFF, 0b000000000000000000000, -93334.218750, -5725.979980, 44504.023438, nullptr, nullptr },
+ /* 351 */{ 0xfe, 8, stage::allStages[45], 4, 0xFF, 0xFF, 0b000000000000000000000, -13022.520508, -3.070827, -14673.488281, nullptr, nullptr }, + /* 352 */{ 0xf3, 4, stage::allStages[58], 13, 0x5, 0xFF, 0b000000000000000000000, -93334.218750, -5725.979980, 44504.023438, nullptr, nullptr }, /* 353 */{ 0x20, 8, stage::allStages[55], 1, 0x9, 0xFF, 0b000000000000000000000, 4087.104248, 260.000000, -3795.968262, nullptr, nullptr }, //goron mines key shards - /* 354 */{ 0xf9, 2, stage::allStages[3], 14, 0x3, 0x3, 0b000000000000000000000, -15375.557617, -636.630005, 1595.673462, nullptr, nullptr },
- /* 355 */{ 0xfa, 2, stage::allStages[3], 17, 0x3, 0x3, 0b000000000000000000000, 13007.017578, 2924.530029, -17705.732422, nullptr, nullptr },
+ /* 354 */{ 0xf9, 2, stage::allStages[3], 14, 0x3, 0x3, 0b000000000000000000000, -15375.557617, -636.630005, 1595.673462, nullptr, nullptr }, + /* 355 */{ 0xfa, 2, stage::allStages[3], 17, 0x3, 0x3, 0b000000000000000000000, 13007.017578, 2924.530029, -17705.732422, nullptr, nullptr }, /* 356 */{ 0xfd, 2, stage::allStages[3], 16, 0x4, 0x3, 0b000000000000000000000, 13055.647461, 2400.500000, -1660.316895, nullptr, nullptr }, //bugs - /* 357 */{ 0xc0, 10, stage::allStages[56], 6, 0x2, 0xFF, 0b000000000000000000000, -50212.730469, -8840.560547, 86352.757812, nullptr, nullptr },
- /* 358 */{ 0xc1, 10, stage::allStages[56], 6, 0x2, 0xFF, 0b000100000010000000000, -38651.949219, -9189.901367, 73707.671875, nullptr, nullptr },
- /* 359 */{ 0xca, 10, stage::allStages[56], 3, 0x2, 0xFF, 0b000000000000000000000, -9730.929688, -7200.000000, 57526.199219, nullptr, nullptr },
- /* 360 */{ 0xcb, 10, stage::allStages[56], 3, 0x2, 0xFF, 0b000000000000000000000, 562.488159, -6092.589844, 61677.734375, nullptr, nullptr },
- /* 361 */{ 0xd4, 10, stage::allStages[48], 0, 0x2, 0xFF, 0b000000000000000000000, 17085.654297, 557.072510, -850.370605, nullptr, nullptr },
- /* 362 */{ 0xd5, 10, stage::allStages[68], 6, 0x2, 0xFF, 0b000000000000000000000, 205.938171, 17.797655, 4.593423, nullptr, nullptr },
- /* 363 */{ 0xc6, 10, stage::allStages[56], 0, 0x2, 0xFF, 0b000000000000000000000, 19503.787109, 662.713684, 13563.345703, nullptr, nullptr },
- /* 364 */{ 0xc7, 10, stage::allStages[56], 0, 0x2, 0xFF, 0b000000000000000000000, -10765.343750, 80.466759, -9151.101562, nullptr, nullptr },
- /* 365 */{ 0xc8, 10, stage::allStages[56], 0, 0x2, 0xFF, 0b000100000010000000000, 34607.441406, -260.000000, -14273.162109, nullptr, nullptr },
- /* 366 */{ 0xc9, 10, stage::allStages[56], 0, 0x2, 0xFF, 0b000100000010000000000, 37897.406250, -260.000000, -40525.894531, nullptr, nullptr },
- /* 367 */{ 0xcc, 10, stage::allStages[56], 13, 0x5, 0xFF, 0b000100000010000000000, -93754.703125, -5925.377441, 31642.708984, nullptr, nullptr },
- /* 368 */{ 0xcd, 10, stage::allStages[56], 13, 0x5, 0xFF, 0b000100000010000000000, -88147.609375, -6854.451660, 58998.777344, nullptr, nullptr },
- /* 369 */{ 0xc2, 10, stage::allStages[57], 8, 0x5, 0xFF, 0b000000000000000000000, -75074.406250, -384.115967, 16053.256836, nullptr, nullptr },
- /* 370 */{ 0xc3, 10, stage::allStages[57], 8, 0x5, 0xFF, 0b000100000010000000000, -78787.265625, -1472.352661, 2016.588013, nullptr, nullptr },
- /* 371 */{ 0xce, 10, stage::allStages[57], 16, 0x5, 0xFF, 0b000000000000000000000, -45085.273438, 6042.771484, 29910.453125, nullptr, nullptr },
- /* 372 */{ 0xcf, 10, stage::allStages[57], 16, 0x5, 0xFF, 0b000000000000000000000, -54377.070312, -5460.576660, 27647.970703, nullptr, nullptr },
- /* 373 */{ 0xc4, 10, stage::allStages[56], 10, 0x5, 0xFF, 0b000000000000000000000, -62781.214844, -1350.003052, -33241.687500, nullptr, nullptr },
- /* 374 */{ 0xc5, 10, stage::allStages[56], 10, 0x5, 0xFF, 0b000000000000000000000, -48976.765625, -677.295044, -50834.683594, nullptr, nullptr },
- /* 375 */{ 0xd2, 10, stage::allStages[50], 1, 0x5, 0xFF, 0b000000000000000000000, 3540.047363, -5150.441895, 15789.274414, nullptr, nullptr },
- /* 376 */{ 0xd3, 10, stage::allStages[61], 1, 0x5, 0xFF, 0b000000000000000000000, 6013.379395, 445.474884, -224.899765, nullptr, nullptr },
- /* 377 */{ 0xd6, 10, stage::allStages[59], 0, 0x9, 0xFF, 0b000000000000000000000, 28767.958984, 524.933899, 58604.546875, nullptr, nullptr },
- /* 378 */{ 0xd7, 10, stage::allStages[59], 0, 0x9, 0xFF, 0b000000000000000000000, 11790.147461, 340.034332, 55725.250000, nullptr, nullptr },
- /* 379 */{ 0xd0, 10, stage::allStages[54], 1, 0x12, 0xFF, 0b000000000000000000000, 1304.371826, 1005.000000, 7306.179688, nullptr, nullptr },
+ /* 357 */{ 0xc0, 10, stage::allStages[56], 6, 0x2, 0xFF, 0b000000000000000000000, -50212.730469, -8840.560547, 86352.757812, nullptr, nullptr }, + /* 358 */{ 0xc1, 10, stage::allStages[56], 6, 0x2, 0xFF, 0b000100000010000000000, -38651.949219, -9189.901367, 73707.671875, nullptr, nullptr }, + /* 359 */{ 0xca, 10, stage::allStages[56], 3, 0x2, 0xFF, 0b000000000000000000000, -9730.929688, -7200.000000, 57526.199219, nullptr, nullptr }, + /* 360 */{ 0xcb, 10, stage::allStages[56], 3, 0x2, 0xFF, 0b000000000000000000000, 562.488159, -6092.589844, 61677.734375, nullptr, nullptr }, + /* 361 */{ 0xd4, 10, stage::allStages[48], 0, 0x2, 0xFF, 0b000000000000000000000, 17085.654297, 557.072510, -850.370605, nullptr, nullptr }, + /* 362 */{ 0xd5, 10, stage::allStages[68], 6, 0x2, 0xFF, 0b000000000000000000000, 205.938171, 17.797655, 4.593423, nullptr, nullptr }, + /* 363 */{ 0xc6, 10, stage::allStages[56], 0, 0x2, 0xFF, 0b000000000000000000000, 19503.787109, 662.713684, 13563.345703, nullptr, nullptr }, + /* 364 */{ 0xc7, 10, stage::allStages[56], 0, 0x2, 0xFF, 0b000000000000000000000, -10765.343750, 80.466759, -9151.101562, nullptr, nullptr }, + /* 365 */{ 0xc8, 10, stage::allStages[56], 0, 0x2, 0xFF, 0b000100000010000000000, 34607.441406, -260.000000, -14273.162109, nullptr, nullptr }, + /* 366 */{ 0xc9, 10, stage::allStages[56], 0, 0x2, 0xFF, 0b000100000010000000000, 37897.406250, -260.000000, -40525.894531, nullptr, nullptr }, + /* 367 */{ 0xcc, 10, stage::allStages[56], 13, 0x5, 0xFF, 0b000100000010000000000, -93754.703125, -5925.377441, 31642.708984, nullptr, nullptr }, + /* 368 */{ 0xcd, 10, stage::allStages[56], 13, 0x5, 0xFF, 0b000100000010000000000, -88147.609375, -6854.451660, 58998.777344, nullptr, nullptr }, + /* 369 */{ 0xc2, 10, stage::allStages[57], 8, 0x5, 0xFF, 0b000000000000000000000, -75074.406250, -384.115967, 16053.256836, nullptr, nullptr }, + /* 370 */{ 0xc3, 10, stage::allStages[57], 8, 0x5, 0xFF, 0b000100000010000000000, -78787.265625, -1472.352661, 2016.588013, nullptr, nullptr }, + /* 371 */{ 0xce, 10, stage::allStages[57], 16, 0x5, 0xFF, 0b000000000000000000000, -45085.273438, 6042.771484, 29910.453125, nullptr, nullptr }, + /* 372 */{ 0xcf, 10, stage::allStages[57], 16, 0x5, 0xFF, 0b000000000000000000000, -54377.070312, -5460.576660, 27647.970703, nullptr, nullptr }, + /* 373 */{ 0xc4, 10, stage::allStages[56], 10, 0x5, 0xFF, 0b000000000000000000000, -62781.214844, -1350.003052, -33241.687500, nullptr, nullptr }, + /* 374 */{ 0xc5, 10, stage::allStages[56], 10, 0x5, 0xFF, 0b000000000000000000000, -48976.765625, -677.295044, -50834.683594, nullptr, nullptr }, + /* 375 */{ 0xd2, 10, stage::allStages[50], 1, 0x5, 0xFF, 0b000000000000000000000, 3540.047363, -5150.441895, 15789.274414, nullptr, nullptr }, + /* 376 */{ 0xd3, 10, stage::allStages[61], 1, 0x5, 0xFF, 0b000000000000000000000, 6013.379395, 445.474884, -224.899765, nullptr, nullptr }, + /* 377 */{ 0xd6, 10, stage::allStages[59], 0, 0x9, 0xFF, 0b000000000000000000000, 28767.958984, 524.933899, 58604.546875, nullptr, nullptr }, + /* 378 */{ 0xd7, 10, stage::allStages[59], 0, 0x9, 0xFF, 0b000000000000000000000, 11790.147461, 340.034332, 55725.250000, nullptr, nullptr }, + /* 379 */{ 0xd0, 10, stage::allStages[54], 1, 0x12, 0xFF, 0b000000000000000000000, 1304.371826, 1005.000000, 7306.179688, nullptr, nullptr }, /* 380 */{ 0xd1, 10, stage::allStages[54], 2, 0x12, 0xFF, 0b000100000010000000000, 521.038208, 1000.000000, 5867.415527, nullptr, nullptr }, //bug rewards - /* 381 */{ 0x35, 1, stage::allStages[73], 3, 0xFF, 0x5, 0b000000000000000000000, -123.609940, 40.000000, 305.168640, nullptr, nullptr },
- /* 382 */{ 0x06, 7, stage::allStages[73], 3, 0xFF, 0xFF, 0b000000000000000000000, -123.609940, 40.000000, 305.168640, nullptr, nullptr },
- /* 383 */{ 0x05, 7, stage::allStages[73], 3, 0xFF, 0xFF, 0b000000000000000000000, -123.609940, 40.000000, 305.168640, nullptr, nullptr },
- /* 384 */{ 0x06, 7, stage::allStages[73], 3, 0xFF, 0xFF, 0b000000000000000000000, -123.609940, 40.000000, 305.168640, nullptr, nullptr },
- /* 385 */{ 0x05, 7, stage::allStages[73], 3, 0xFF, 0xFF, 0b000000000000000000000, -123.609940, 40.000000, 305.168640, nullptr, nullptr },
- /* 386 */{ 0x06, 7, stage::allStages[73], 3, 0xFF, 0xFF, 0b000000000000000000000, -123.609940, 40.000000, 305.168640, nullptr, nullptr },
- /* 387 */{ 0x05, 7, stage::allStages[73], 3, 0xFF, 0xFF, 0b000000000000000000000, -123.609940, 40.000000, 305.168640, nullptr, nullptr },
- /* 388 */{ 0x06, 7, stage::allStages[73], 3, 0xFF, 0xFF, 0b000000000000000000000, -123.609940, 40.000000, 305.168640, nullptr, nullptr },
- /* 389 */{ 0x05, 7, stage::allStages[73], 3, 0xFF, 0xFF, 0b000000000000000000000, -123.609940, 40.000000, 305.168640, nullptr, nullptr },
- /* 390 */{ 0x06, 7, stage::allStages[73], 3, 0xFF, 0xFF, 0b000000000000000000000, -123.609940, 40.000000, 305.168640, nullptr, nullptr },
- /* 391 */{ 0x05, 7, stage::allStages[73], 3, 0xFF, 0xFF, 0b000000000000000000000, -123.609940, 40.000000, 305.168640, nullptr, nullptr },
- /* 392 */{ 0x06, 7, stage::allStages[73], 3, 0xFF, 0xFF, 0b000000000000000000000, -123.609940, 40.000000, 305.168640, nullptr, nullptr },
- /* 393 */{ 0x05, 7, stage::allStages[73], 3, 0xFF, 0xFF, 0b000000000000000000000, -123.609940, 40.000000, 305.168640, nullptr, nullptr },
- /* 394 */{ 0x06, 7, stage::allStages[73], 3, 0xFF, 0xFF, 0b000000000000000000000, -123.609940, 40.000000, 305.168640, nullptr, nullptr },
- /* 395 */{ 0x05, 7, stage::allStages[73], 3, 0xFF, 0xFF, 0b000000000000000000000, -123.609940, 40.000000, 305.168640, nullptr, nullptr },
- /* 396 */{ 0x06, 7, stage::allStages[73], 3, 0xFF, 0xFF, 0b000000000000000000000, -123.609940, 40.000000, 305.168640, nullptr, nullptr },
- /* 397 */{ 0x05, 7, stage::allStages[73], 3, 0xFF, 0xFF, 0b000000000000000000000, -123.609940, 40.000000, 305.168640, nullptr, nullptr },
- /* 398 */{ 0x06, 7, stage::allStages[73], 3, 0xFF, 0xFF, 0b000000000000000000000, -123.609940, 40.000000, 305.168640, nullptr, nullptr },
- /* 399 */{ 0x05, 7, stage::allStages[73], 3, 0xFF, 0xFF, 0b000000000000000000000, -123.609940, 40.000000, 305.168640, nullptr, nullptr },
- /* 400 */{ 0x06, 7, stage::allStages[73], 3, 0xFF, 0xFF, 0b000000000000000000000, -123.609940, 40.000000, 305.168640, nullptr, nullptr },
- /* 401 */{ 0x05, 7, stage::allStages[73], 3, 0xFF, 0xFF, 0b000000000000000000000, -123.609940, 40.000000, 305.168640, nullptr, nullptr },
- /* 402 */{ 0x06, 7, stage::allStages[73], 3, 0xFF, 0xFF, 0b000000000000000000000, -123.609940, 40.000000, 305.168640, nullptr, nullptr },
- /* 403 */{ 0x05, 7, stage::allStages[73], 3, 0xFF, 0xFF, 0b000000000000000000000, -123.609940, 40.000000, 305.168640, nullptr, nullptr },
+ /* 381 */{ 0x35, 1, stage::allStages[73], 3, 0xFF, 0x5, 0b000000000000000000000, -123.609940, 40.000000, 305.168640, nullptr, nullptr }, + /* 382 */{ 0x06, 7, stage::allStages[73], 3, 0xFF, 0xFF, 0b000000000000000000000, -123.609940, 40.000000, 305.168640, nullptr, nullptr }, + /* 383 */{ 0x05, 7, stage::allStages[73], 3, 0xFF, 0xFF, 0b000000000000000000000, -123.609940, 40.000000, 305.168640, nullptr, nullptr }, + /* 384 */{ 0x06, 7, stage::allStages[73], 3, 0xFF, 0xFF, 0b000000000000000000000, -123.609940, 40.000000, 305.168640, nullptr, nullptr }, + /* 385 */{ 0x05, 7, stage::allStages[73], 3, 0xFF, 0xFF, 0b000000000000000000000, -123.609940, 40.000000, 305.168640, nullptr, nullptr }, + /* 386 */{ 0x06, 7, stage::allStages[73], 3, 0xFF, 0xFF, 0b000000000000000000000, -123.609940, 40.000000, 305.168640, nullptr, nullptr }, + /* 387 */{ 0x05, 7, stage::allStages[73], 3, 0xFF, 0xFF, 0b000000000000000000000, -123.609940, 40.000000, 305.168640, nullptr, nullptr }, + /* 388 */{ 0x06, 7, stage::allStages[73], 3, 0xFF, 0xFF, 0b000000000000000000000, -123.609940, 40.000000, 305.168640, nullptr, nullptr }, + /* 389 */{ 0x05, 7, stage::allStages[73], 3, 0xFF, 0xFF, 0b000000000000000000000, -123.609940, 40.000000, 305.168640, nullptr, nullptr }, + /* 390 */{ 0x06, 7, stage::allStages[73], 3, 0xFF, 0xFF, 0b000000000000000000000, -123.609940, 40.000000, 305.168640, nullptr, nullptr }, + /* 391 */{ 0x05, 7, stage::allStages[73], 3, 0xFF, 0xFF, 0b000000000000000000000, -123.609940, 40.000000, 305.168640, nullptr, nullptr }, + /* 392 */{ 0x06, 7, stage::allStages[73], 3, 0xFF, 0xFF, 0b000000000000000000000, -123.609940, 40.000000, 305.168640, nullptr, nullptr }, + /* 393 */{ 0x05, 7, stage::allStages[73], 3, 0xFF, 0xFF, 0b000000000000000000000, -123.609940, 40.000000, 305.168640, nullptr, nullptr }, + /* 394 */{ 0x06, 7, stage::allStages[73], 3, 0xFF, 0xFF, 0b000000000000000000000, -123.609940, 40.000000, 305.168640, nullptr, nullptr }, + /* 395 */{ 0x05, 7, stage::allStages[73], 3, 0xFF, 0xFF, 0b000000000000000000000, -123.609940, 40.000000, 305.168640, nullptr, nullptr }, + /* 396 */{ 0x06, 7, stage::allStages[73], 3, 0xFF, 0xFF, 0b000000000000000000000, -123.609940, 40.000000, 305.168640, nullptr, nullptr }, + /* 397 */{ 0x05, 7, stage::allStages[73], 3, 0xFF, 0xFF, 0b000000000000000000000, -123.609940, 40.000000, 305.168640, nullptr, nullptr }, + /* 398 */{ 0x06, 7, stage::allStages[73], 3, 0xFF, 0xFF, 0b000000000000000000000, -123.609940, 40.000000, 305.168640, nullptr, nullptr }, + /* 399 */{ 0x05, 7, stage::allStages[73], 3, 0xFF, 0xFF, 0b000000000000000000000, -123.609940, 40.000000, 305.168640, nullptr, nullptr }, + /* 400 */{ 0x06, 7, stage::allStages[73], 3, 0xFF, 0xFF, 0b000000000000000000000, -123.609940, 40.000000, 305.168640, nullptr, nullptr }, + /* 401 */{ 0x05, 7, stage::allStages[73], 3, 0xFF, 0xFF, 0b000000000000000000000, -123.609940, 40.000000, 305.168640, nullptr, nullptr }, + /* 402 */{ 0x06, 7, stage::allStages[73], 3, 0xFF, 0xFF, 0b000000000000000000000, -123.609940, 40.000000, 305.168640, nullptr, nullptr }, + /* 403 */{ 0x05, 7, stage::allStages[73], 3, 0xFF, 0xFF, 0b000000000000000000000, -123.609940, 40.000000, 305.168640, nullptr, nullptr }, /* 404 */{ 0x36, 1, stage::allStages[73], 3, 0xFF, 0x12, 0b000000000000000000000, -123.609940, 40.000000, 305.168640, nullptr, nullptr }, //poes - /*#1*/{ 0xe0, 11, stage::allStages[24], 2, 0x9, 0xFF, 0b000000000000000000010, 105.801384, -19.549999, -741.391968, nullptr, nullptr },
- /*#2*/{ 0xe0, 11, stage::allStages[24], 3, 0x9, 0xFF, 0b100000000010000000010, 3606.844482, 150.030182, -5323.249512, nullptr, nullptr },
- /*#3*/{ 0xe0, 11, stage::allStages[24], 5, 0x9, 0xFF, 0b000000000000000000010, 5712.277344, 1050.019775, 4526.544922, nullptr, nullptr },
- /*#4*/{ 0xe0, 11, stage::allStages[24], 8, 0x9, 0xFF, 0b000000000000000000010, -4197.771973, 1040.154663, 4983.674805, nullptr, nullptr },
- /*#5*/{ 0xe0, 11, stage::allStages[73], 5, 0x8, 0xFF, 0b000000000000000000010, 4529.513672, -75.000000, 2609.175049, nullptr, nullptr },
- /*#6*/{ 0xe0, 11, stage::allStages[31], 16, 0x10, 0xFF, 0b100000000000100000010, 126.849854, -20000.000000, -337.206903, nullptr, nullptr },
- /*#7*/{ 0xe0, 11, stage::allStages[31], 32, 0x13, 0xFF, 0b100000000100110000010, 231.875824, -40000.000000, -216.2944296, nullptr, nullptr },
- /*#8*/{ 0xe0, 11, stage::allStages[31], 43, 0x15, 0xFF, 0b100000000101110000010, -4560.734375, -53750.000000, -825.646851, nullptr, nullptr },
- /*#9*/{ 0xe0, 11, stage::allStages[12], 12, 0x15, 0xFF, 0b100000000001000000010, -12660.987305, 1982.199951, -7632.476074, nullptr, nullptr },
- /*#10*/{ 0xe0, 11, stage::allStages[12], 13, 0x15, 0xFF, 0b100000000001000000010, 3916.892090, 4496.779785, -12149.609375, nullptr, nullptr },
- /*#11*/{ 0xe0, 11, stage::allStages[47], 0, 0x8, 0xFF, 0b000000000000000000010, -2502.529785, -1533.660522, 18041.601562, nullptr, nullptr },
- /*#12*/{ 0xe0, 11, stage::allStages[45], 11, 0x8, 0xFF, 0b000000000000000000010, -25786.427734, 300.000000, -20456.810547, nullptr, nullptr },
- /*#13*/{ 0xe0, 11, stage::allStages[59], 0, 0x9, 0xFF, 0b000000000000000000010, 66240.039062, 143.258804, 56904.339844, nullptr, nullptr },
- /*#14*/{ 0xe0, 11, stage::allStages[59], 0, 0x9, 0xFF, 0b100000000010000000010, -816.907959, 2496.226562, 57933.289062, nullptr, nullptr },
- /*#15*/{ 0xe0, 11, stage::allStages[59], 0, 0x9, 0xFF, 0b100000000010000000010, 26747.324219, -46.507732, 26175.406250, nullptr, nullptr },
- /*#16*/{ 0xe0, 11, stage::allStages[37], 2, 0x9, 0xFF, 0b100000000010000000010, -1026.819824, 1.152117, -161.420013, nullptr, nullptr },
- /*#17*/{ 0xe0, 11, stage::allStages[37], 2, 0x9, 0xFF, 0b100000000010000000010, -286.849121, 3.514773, -895.548218, nullptr, nullptr },
- /*#18*/{ 0xe0, 11, stage::allStages[59], 0, 0x9, 0xFF, 0b100000000010000000010, -2024.554443, 16.013172, 11583.281250, nullptr, nullptr },
- /*#19*/{ 0xe0, 11, stage::allStages[55], 1, 0x9, 0xFF, 0b000000000000000000010, 1812.931274, 0.000000, 1155.415161, nullptr, nullptr },
- /*#20*/{ 0xe0, 11, stage::allStages[55], 3, 0x9, 0xFF, 0b000000000000000000010, 283.265228, 840.000000, -12366.407227, nullptr, nullptr },
- /*#21*/{ 0xe0, 11, stage::allStages[48], 0, 0x8, 0xFF, 0b000000000000000000010, 12836.060547, 100.000000, 178.608246, nullptr, nullptr },
- /*#22*/{ 0xe0, 11, stage::allStages[48], 0, 0x8, 0xFF, 0b000000000000000000010, 14444.615234, 256.835815, -527.642578, nullptr, nullptr },
- /*#24*/{ 0xe0, 11, stage::allStages[63], 0, 0x13, 0xFF, 0b100000000000010000010, 1683.054077, 480.000000, -6715.406250, nullptr, nullptr },
- /*#24*/{ 0xe0, 11, stage::allStages[57], 8, 0x8, 0xFF, 0b000000000000000000010, -81042.460938, -1650.079956, 21720.513672, nullptr, nullptr },
- /*#25*/{ 0xe0, 11, stage::allStages[57], 17, 0x8, 0xFF, 0b000000000000000000010, -42291.773438, -1400.000000, 10844.620117, nullptr, nullptr },
- /*#26*/{ 0xe0, 11, stage::allStages[56], 3, 0x8, 0xFF, 0b000000000000000000010, -10858.849609, -5700.000000, 55509.773438, nullptr, nullptr },
- /*#27*/{ 0xe0, 11, stage::allStages[32], 0, 0x8, 0xFF, 0b110000000000000000010, 4567.875977, 5027.688477, -5207.911621, nullptr, nullptr },
- /*#28*/{ 0xe0, 11, stage::allStages[56], 6, 0x8, 0xFF, 0b000000000000000000010, -45153.691406, -8909.261719, 74205.156250, nullptr, nullptr },
- /*#29*/{ 0xe0, 11, stage::allStages[56], 10, 0x8, 0xFF, 0b110000000000000000010, -45192.148438, -2474.139893, -32984.613281, nullptr, nullptr },
- /*#30*/{ 0xe0, 11, stage::allStages[35], 0, 0x8, 0xFF, 0b110000000000000000010, 269.485474, 22.380699, -981.643372, nullptr, nullptr },
- /*#31*/{ 0xe0, 11, stage::allStages[35], 0, 0x8, 0xFF, 0b110000000000000000010, -236.254684, 150.000000, -1036.175781, nullptr, nullptr },
- /*#32*/{ 0xe0, 11, stage::allStages[57], 16, 0x8, 0xFF, 0b000000000000000000010, -53146.578125, -5153.850098, 25666.673828, nullptr, nullptr },
- /*#33*/{ 0xe0, 11, stage::allStages[56], 13, 0x8, 0xFF, 0b100000001010000000010, -81177.609375, -6000.000000, 65960.148438, nullptr, nullptr },
- /*#34*/{ 0xe0, 11, stage::allStages[46], 0, 0x8, 0xFF, 0b000000000000000000010, 3372.341553, 2300.000000, -3018.808594, nullptr, nullptr },
- /*#35*/{ 0xe0, 11, stage::allStages[46], 0, 0x8, 0xFF, 0b000000000000000000010, -1487.586548, 3848.365234, -5915.137207, nullptr, nullptr },
- /*#36*/{ 0xe0, 11, stage::allStages[52], 0, 0x8, 0xFF, 0b000000000000000000010, -74531.953125, -18336.878906, 47025.640625, nullptr, nullptr },
- /*#37*/{ 0xe0, 11, stage::allStages[52], 0, 0x8, 0xFF, 0b000000000000000000010, -96335.820312, -17510.320312, 62149.574219, nullptr, nullptr },
- /*#38*/{ 0xe0, 11, stage::allStages[52], 0, 0x8, 0xFF, 0b000000000000000000010, -115949.156250, -15840.000000, 59894.671875, nullptr, nullptr },
- /*#39*/{ 0xe0, 11, stage::allStages[52], 0, 0x8, 0xFF, 0b101000000000000000010, -104251.976562, -18469.791016, 42262.726562, nullptr, nullptr },
- /*#40*/{ 0xe0, 11, stage::allStages[52], 0, 0x8, 0xFF, 0b101000000000000000010, -115114.968750, -14096.000000, 25330.574219, nullptr, nullptr },
- /*#41*/{ 0xe0, 11, stage::allStages[33], 0, 0x8, 0xFF, 0b100000100000000000010, 8918.118164, 355.380005, -6922.565430, nullptr, nullptr },
- /*#42*/{ 0xe0, 11, stage::allStages[33], 0, 0x8, 0xFF, 0b110000000000000000010, 801.443970, -4197.580078, -20497.589844, nullptr, nullptr },
- /*#43*/{ 0xe0, 11, stage::allStages[33], 0, 0x8, 0xFF, 0b110000000000000000010, 6740.693848, -5139.174805, -10953.290039, nullptr, nullptr },
- /*#44*/{ 0xe0, 11, stage::allStages[54], 3, 0x12, 0xFF, 0b100000100000000000010, -5483.465332, 500.000000, 5302.014648, nullptr, nullptr },
- /*#45*/{ 0xe0, 11, stage::allStages[54], 1, 0x12, 0xFF, 0b000000000000000000010, 1214.411987, 1639.093384, -3631.436035, nullptr, nullptr },
- /*#46*/{ 0xe0, 11, stage::allStages[54], 3, 0x12, 0xFF, 0b000000000000000000010, -21789.335936, 2200.000000, 10000.409180, nullptr, nullptr },
- /*#47*/{ 0xe0, 11, stage::allStages[51], 0, 0x11, 0xFF, 0b100000000000000010010, 843.887695, -9361.725586, -21468.560547, nullptr, nullptr },
- /*#48*/{ 0xe0, 11, stage::allStages[51], 0, 0x11, 0xFF, 0b100000000000000010010, 7834.021484, -8356.457031, -18110.230469, nullptr, nullptr },
- /*#49*/{ 0xe0, 11, stage::allStages[51], 0, 0x11, 0xFF, 0b100000000000000010010, -4954.811035, -4714.479980, -18838.253906, nullptr, nullptr },
- /*#50*/{ 0xe0, 11, stage::allStages[51], 2, 0x12, 0xFF, 0b100000000100000000010, -6137.537598, -1800.000000, -10043.368164, nullptr, nullptr },
- /*#51*/{ 0xe0, 11, stage::allStages[51], 1, 0x11, 0xFF, 0b100000000000000010010, -69507.492188, -52429.000000, 62508.425781, nullptr, nullptr },
- /*#52*/{ 0xe0, 11, stage::allStages[27], 0, 0x11, 0xFF, 0b000000000000000000010, -238.949356, -2.310000, 2920.424072, nullptr, nullptr },
- /*#53*/{ 0xe0, 11, stage::allStages[27], 0, 0x12, 0xFF, 0b100000000100000000010, 533.658569, -84.440002, 5910.784180, nullptr, nullptr },
- /*#54*/{ 0xe0, 11, stage::allStages[27], 6, 0x12, 0xFF, 0b100000000100000000010, 4784.004395, 950.000000, 331.876648, nullptr, nullptr },
- /*#55*/{ 0xe0, 11, stage::allStages[9], 2, 0x13, 0xFF, 0b100000000000010000010, -3295.982178, 2750.000000, 11.354874, nullptr, nullptr },
- /*#56*/{ 0xe0, 11, stage::allStages[9], 5, 0x12, 0xFF, 0b100000000010100000010, 1861.281128, 7400.000000, -358.31518, nullptr, nullptr },
- /*#57*/{ 0xe0, 11, stage::allStages[54], 2, 0x13, 0xFF, 0b100000000000010000010, -1086.470947, 925.000000, 6306.895020, nullptr, nullptr },
- /*#58*/{ 0xe0, 11, stage::allStages[61], 0, 0x8, 0xFF, 0b000000000000000000010, 942.983948, 817.438049, 3387.270996, nullptr, nullptr },
- /*#59*/{ 0xe0, 11, stage::allStages[50], 0, 0x8, 0xFF, 0b000000000000000000010, 3444.790039, -4658.747559, 11720.103516, nullptr, nullptr },
- /*#60*/{ 0xe0, 11, stage::allStages[50], 0, 0x8, 0xFF, 0b000000000000000000010, 297.160065, -4608.964844, 7384.047852, nullptr, nullptr },
- /*60 poe reward*/{ 0x07, 7, stage::allStages[73], 5, 0x15, 0xFF, 0b000000000000000000000, 4250.363281, 134.492020, 1813.639648, nullptr, nullptr }, + /*#1*/{ 0xe0, 11, stage::allStages[24], 2, 0x9, 0xFF, 0b000000000000000000010, 105.801384, -19.549999, -741.391968, nullptr, nullptr }, + /*#2*/{ 0xe0, 11, stage::allStages[24], 3, 0x9, 0xFF, 0b100000000010000000010, 3606.844482, 150.030182, -5323.249512, nullptr, nullptr }, + /*#3*/{ 0xe0, 11, stage::allStages[24], 5, 0x9, 0xFF, 0b000000000000000000010, 5712.277344, 1050.019775, 4526.544922, nullptr, nullptr }, + /*#4*/{ 0xe0, 11, stage::allStages[24], 8, 0x9, 0xFF, 0b000000000000000000010, -4197.771973, 1040.154663, 4983.674805, nullptr, nullptr }, + /*#5*/{ 0xe0, 11, stage::allStages[73], 5, 0x8, 0xFF, 0b000000000000000000010, 4529.513672, -75.000000, 2609.175049, nullptr, nullptr }, + /*#6*/{ 0xe0, 11, stage::allStages[31], 16, 0x10, 0xFF, 0b100000000000100000010, 126.849854, -20000.000000, -337.206903, nullptr, nullptr }, + /*#7*/{ 0xe0, 11, stage::allStages[31], 32, 0x13, 0xFF, 0b100000000100110000010, 231.875824, -40000.000000, -216.2944296, nullptr, nullptr }, + /*#8*/{ 0xe0, 11, stage::allStages[31], 43, 0x15, 0xFF, 0b100000000101110000010, -4560.734375, -53750.000000, -825.646851, nullptr, nullptr }, + /*#9*/{ 0xe0, 11, stage::allStages[12], 12, 0x15, 0xFF, 0b100000000001000000010, -12660.987305, 1982.199951, -7632.476074, nullptr, nullptr }, + /*#10*/{ 0xe0, 11, stage::allStages[12], 13, 0x15, 0xFF, 0b100000000001000000010, 3916.892090, 4496.779785, -12149.609375, nullptr, nullptr }, + /*#11*/{ 0xe0, 11, stage::allStages[47], 0, 0x8, 0xFF, 0b000000000000000000010, -2502.529785, -1533.660522, 18041.601562, nullptr, nullptr }, + /*#12*/{ 0xe0, 11, stage::allStages[45], 11, 0x8, 0xFF, 0b000000000000000000010, -25786.427734, 300.000000, -20456.810547, nullptr, nullptr }, + /*#13*/{ 0xe0, 11, stage::allStages[59], 0, 0x9, 0xFF, 0b000000000000000000010, 66240.039062, 143.258804, 56904.339844, nullptr, nullptr }, + /*#14*/{ 0xe0, 11, stage::allStages[59], 0, 0x9, 0xFF, 0b100000000010000000010, -816.907959, 2496.226562, 57933.289062, nullptr, nullptr }, + /*#15*/{ 0xe0, 11, stage::allStages[59], 0, 0x9, 0xFF, 0b100000000010000000010, 26747.324219, -46.507732, 26175.406250, nullptr, nullptr }, + /*#16*/{ 0xe0, 11, stage::allStages[37], 2, 0x9, 0xFF, 0b100000000010000000010, -1026.819824, 1.152117, -161.420013, nullptr, nullptr }, + /*#17*/{ 0xe0, 11, stage::allStages[37], 2, 0x9, 0xFF, 0b100000000010000000010, -286.849121, 3.514773, -895.548218, nullptr, nullptr }, + /*#18*/{ 0xe0, 11, stage::allStages[59], 0, 0x9, 0xFF, 0b100000000010000000010, -2024.554443, 16.013172, 11583.281250, nullptr, nullptr }, + /*#19*/{ 0xe0, 11, stage::allStages[55], 1, 0x9, 0xFF, 0b000000000000000000010, 1812.931274, 0.000000, 1155.415161, nullptr, nullptr }, + /*#20*/{ 0xe0, 11, stage::allStages[55], 3, 0x9, 0xFF, 0b000000000000000000010, 283.265228, 840.000000, -12366.407227, nullptr, nullptr }, + /*#21*/{ 0xe0, 11, stage::allStages[48], 0, 0x8, 0xFF, 0b000000000000000000010, 12836.060547, 100.000000, 178.608246, nullptr, nullptr }, + /*#22*/{ 0xe0, 11, stage::allStages[48], 0, 0x8, 0xFF, 0b000000000000000000010, 14444.615234, 256.835815, -527.642578, nullptr, nullptr }, + /*#24*/{ 0xe0, 11, stage::allStages[63], 0, 0x13, 0xFF, 0b100000000000010000010, 1683.054077, 480.000000, -6715.406250, nullptr, nullptr }, + /*#24*/{ 0xe0, 11, stage::allStages[57], 8, 0x8, 0xFF, 0b000000000000000000010, -81042.460938, -1650.079956, 21720.513672, nullptr, nullptr }, + /*#25*/{ 0xe0, 11, stage::allStages[57], 17, 0x8, 0xFF, 0b000000000000000000010, -42291.773438, -1400.000000, 10844.620117, nullptr, nullptr }, + /*#26*/{ 0xe0, 11, stage::allStages[56], 3, 0x8, 0xFF, 0b000000000000000000010, -10858.849609, -5700.000000, 55509.773438, nullptr, nullptr }, + /*#27*/{ 0xe0, 11, stage::allStages[32], 0, 0x8, 0xFF, 0b110000000000000000010, 4567.875977, 5027.688477, -5207.911621, nullptr, nullptr }, + /*#28*/{ 0xe0, 11, stage::allStages[56], 6, 0x8, 0xFF, 0b000000000000000000010, -45153.691406, -8909.261719, 74205.156250, nullptr, nullptr }, + /*#29*/{ 0xe0, 11, stage::allStages[56], 10, 0x8, 0xFF, 0b110000000000000000010, -45192.148438, -2474.139893, -32984.613281, nullptr, nullptr }, + /*#30*/{ 0xe0, 11, stage::allStages[35], 0, 0x8, 0xFF, 0b110000000000000000010, 269.485474, 22.380699, -981.643372, nullptr, nullptr }, + /*#31*/{ 0xe0, 11, stage::allStages[35], 0, 0x8, 0xFF, 0b110000000000000000010, -236.254684, 150.000000, -1036.175781, nullptr, nullptr }, + /*#32*/{ 0xe0, 11, stage::allStages[57], 16, 0x8, 0xFF, 0b000000000000000000010, -53146.578125, -5153.850098, 25666.673828, nullptr, nullptr }, + /*#33*/{ 0xe0, 11, stage::allStages[56], 13, 0x8, 0xFF, 0b100000001010000000010, -81177.609375, -6000.000000, 65960.148438, nullptr, nullptr }, + /*#34*/{ 0xe0, 11, stage::allStages[46], 0, 0x8, 0xFF, 0b000000000000000000010, 3372.341553, 2300.000000, -3018.808594, nullptr, nullptr }, + /*#35*/{ 0xe0, 11, stage::allStages[46], 0, 0x8, 0xFF, 0b000000000000000000010, -1487.586548, 3848.365234, -5915.137207, nullptr, nullptr }, + /*#36*/{ 0xe0, 11, stage::allStages[52], 0, 0x8, 0xFF, 0b000000000000000000010, -74531.953125, -18336.878906, 47025.640625, nullptr, nullptr }, + /*#37*/{ 0xe0, 11, stage::allStages[52], 0, 0x8, 0xFF, 0b000000000000000000010, -96335.820312, -17510.320312, 62149.574219, nullptr, nullptr }, + /*#38*/{ 0xe0, 11, stage::allStages[52], 0, 0x8, 0xFF, 0b000000000000000000010, -115949.156250, -15840.000000, 59894.671875, nullptr, nullptr }, + /*#39*/{ 0xe0, 11, stage::allStages[52], 0, 0x8, 0xFF, 0b101000000000000000010, -104251.976562, -18469.791016, 42262.726562, nullptr, nullptr }, + /*#40*/{ 0xe0, 11, stage::allStages[52], 0, 0x8, 0xFF, 0b101000000000000000010, -115114.968750, -14096.000000, 25330.574219, nullptr, nullptr }, + /*#41*/{ 0xe0, 11, stage::allStages[33], 0, 0x8, 0xFF, 0b100000100000000000010, 8918.118164, 355.380005, -6922.565430, nullptr, nullptr }, + /*#42*/{ 0xe0, 11, stage::allStages[33], 0, 0x8, 0xFF, 0b110000000000000000010, 801.443970, -4197.580078, -20497.589844, nullptr, nullptr }, + /*#43*/{ 0xe0, 11, stage::allStages[33], 0, 0x8, 0xFF, 0b110000000000000000010, 6740.693848, -5139.174805, -10953.290039, nullptr, nullptr }, + /*#44*/{ 0xe0, 11, stage::allStages[54], 3, 0x12, 0xFF, 0b100000100000000000010, -5483.465332, 500.000000, 5302.014648, nullptr, nullptr }, + /*#45*/{ 0xe0, 11, stage::allStages[54], 1, 0x12, 0xFF, 0b000000000000000000010, 1214.411987, 1639.093384, -3631.436035, nullptr, nullptr }, + /*#46*/{ 0xe0, 11, stage::allStages[54], 3, 0x12, 0xFF, 0b000000000000000000010, -21789.335936, 2200.000000, 10000.409180, nullptr, nullptr }, + /*#47*/{ 0xe0, 11, stage::allStages[51], 0, 0x11, 0xFF, 0b100000000000000010010, 843.887695, -9361.725586, -21468.560547, nullptr, nullptr }, + /*#48*/{ 0xe0, 11, stage::allStages[51], 0, 0x11, 0xFF, 0b100000000000000010010, 7834.021484, -8356.457031, -18110.230469, nullptr, nullptr }, + /*#49*/{ 0xe0, 11, stage::allStages[51], 0, 0x11, 0xFF, 0b100000000000000010010, -4954.811035, -4714.479980, -18838.253906, nullptr, nullptr }, + /*#50*/{ 0xe0, 11, stage::allStages[51], 2, 0x12, 0xFF, 0b100000000100000000010, -6137.537598, -1800.000000, -10043.368164, nullptr, nullptr }, + /*#51*/{ 0xe0, 11, stage::allStages[51], 1, 0x11, 0xFF, 0b100000000000000010010, -69507.492188, -52429.000000, 62508.425781, nullptr, nullptr }, + /*#52*/{ 0xe0, 11, stage::allStages[27], 0, 0x11, 0xFF, 0b000000000000000000010, -238.949356, -2.310000, 2920.424072, nullptr, nullptr }, + /*#53*/{ 0xe0, 11, stage::allStages[27], 0, 0x12, 0xFF, 0b100000000100000000010, 533.658569, -84.440002, 5910.784180, nullptr, nullptr }, + /*#54*/{ 0xe0, 11, stage::allStages[27], 6, 0x12, 0xFF, 0b100000000100000000010, 4784.004395, 950.000000, 331.876648, nullptr, nullptr }, + /*#55*/{ 0xe0, 11, stage::allStages[9], 2, 0x13, 0xFF, 0b100000000000010000010, -3295.982178, 2750.000000, 11.354874, nullptr, nullptr }, + /*#56*/{ 0xe0, 11, stage::allStages[9], 5, 0x12, 0xFF, 0b100000000010100000010, 1861.281128, 7400.000000, -358.31518, nullptr, nullptr }, + /*#57*/{ 0xe0, 11, stage::allStages[54], 2, 0x13, 0xFF, 0b100000000000010000010, -1086.470947, 925.000000, 6306.895020, nullptr, nullptr }, + /*#58*/{ 0xe0, 11, stage::allStages[61], 0, 0x8, 0xFF, 0b000000000000000000010, 942.983948, 817.438049, 3387.270996, nullptr, nullptr }, + /*#59*/{ 0xe0, 11, stage::allStages[50], 0, 0x8, 0xFF, 0b000000000000000000010, 3444.790039, -4658.747559, 11720.103516, nullptr, nullptr }, + /*#60*/{ 0xe0, 11, stage::allStages[50], 0, 0x8, 0xFF, 0b000000000000000000010, 297.160065, -4608.964844, 7384.047852, nullptr, nullptr }, + /*60 poe reward*/{ 0x07, 7, stage::allStages[73], 5, 0xFF, 0xFF, 0b000000000000000000000, 4250.363281, 134.492020, 1813.639648, nullptr, nullptr }, //sky book quest - /*empty*/{ 0xe9, 0, stage::allStages[72], 0, 0x13, 0x13, 0b000000000000010000000, -532.266479, 1.500000, -343.810791, nullptr, nullptr },
- /*faron*/{ 0xea, 0, stage::allStages[45], 8, 0x13, 0x13, 0b000000000000010000000, -17500.000000, -310.000000, -20950.000000, nullptr, nullptr },
- /*eldin gorge*/{ 0xea, 0, stage::allStages[56], 3, 0x13, 0x13, 0b000000000000010000000, -10195.000000, -4760.000000, 39363.000000, nullptr, nullptr },
- /*edin bridge*/{ 0xea, 0, stage::allStages[56], 0, 0x13, 0x13, 0b000000000000010000000, 33650.000000, -80.000000, -35970.000000, nullptr, nullptr },
- /*west castle*/{ 0xea, 0, stage::allStages[57], 8, 0x13, 0x13, 0b000000000000010000000, -81950.000000, -1300.000000, 20650.000000, nullptr, nullptr },
- /*hylia bridge*/{ 0xea, 0, stage::allStages[56], 13, 0x13, 0x13, 0b000000000000010000000, -94664.000000, -5040.000000, 18311.000000, nullptr, nullptr },
+ /*empty*/{ 0xe9, 0, stage::allStages[72], 0, 0xFF, 0x13, 0b000000000000010000000, -532.266479, 1.500000, -343.810791, nullptr, nullptr }, + /*faron*/{ 0xea, 0, stage::allStages[45], 8, 0x13, 0x13, 0b000000000000010000000, -17500.000000, -310.000000, -20950.000000, nullptr, nullptr }, + /*eldin gorge*/{ 0xea, 0, stage::allStages[56], 3, 0x13, 0x13, 0b000000000000010000000, -10195.000000, -4760.000000, 39363.000000, nullptr, nullptr }, + /*edin bridge*/{ 0xea, 0, stage::allStages[56], 0, 0x13, 0x13, 0b000000000000010000000, 33650.000000, -80.000000, -35970.000000, nullptr, nullptr }, + /*west castle*/{ 0xea, 0, stage::allStages[57], 8, 0x13, 0x13, 0b000000000000010000000, -81950.000000, -1300.000000, 20650.000000, nullptr, nullptr }, + /*hylia bridge*/{ 0xea, 0, stage::allStages[56], 13, 0x13, 0x13, 0b000000000000010000000, -94664.000000, -5040.000000, 18311.000000, nullptr, nullptr }, /*desert*/{ 0xea, 0, stage::allStages[59], 0, 0x13, 0x13, 0b000000000000010000000, 15120.000000, 952.169983, 59670.000000, nullptr, nullptr }, //shop items //Ordon @@ -510,8 +510,8 @@ namespace mod::item /*auto gotten*///{0x16, 12, stage::allStages[68], 1, 0x5, 0xFF, 0b000000000000000000000, 800.0000000, 0.0000000, -300.0000000, nullptr, nullptr}, /*auto gotten*///{0x17, 12, stage::allStages[68], 1, 0x5, 0xFF, 0b000000000000000000000, 800.0000000, 0.0000000, -300.0000000, nullptr, nullptr}, /*auto gotten*///{0x18, 12, stage::allStages[68], 1, 0x5, 0xFF, 0b000000000000000000000, 800.0000000, 0.0000000, -300.0000000, nullptr, nullptr}, - /*auto gotten*///{0x1d, 12, stage::allStages[68], 1, 0x8, 0xFF, 0b000000000000000000000, 800.0000000, 0.0000000, -300.0000000, nullptr, nullptr},
- /*auto gotten*///{0x1a, 12, stage::allStages[68], 1, 0x8, 0xFF, 0b000000000000000000000, 800.0000000, 0.0000000, -300.0000000, nullptr, nullptr},
+ /*auto gotten*///{0x1d, 12, stage::allStages[68], 1, 0x8, 0xFF, 0b000000000000000000000, 800.0000000, 0.0000000, -300.0000000, nullptr, nullptr}, + /*auto gotten*///{0x1a, 12, stage::allStages[68], 1, 0x8, 0xFF, 0b000000000000000000000, 800.0000000, 0.0000000, -300.0000000, nullptr, nullptr}, /*auto gotten*///{0x1b, 12, stage::allStages[68], 1, 0x8, 0xFF, 0b000000000000000000000, 800.0000000, 0.0000000, -300.0000000, nullptr, nullptr}, //Goron Night Kakariko {0x63, 12, stage::allStages[46], 0, 0x5, 0xFF, 0b001000000000000000000, -1350.000000, 0.000000, -3070.000000, nullptr, nullptr}, @@ -523,17 +523,17 @@ namespace mod::item {0x10, 12, stage::allStages[53], 0, 0x5, 0xFF, 0b111111100000000000000, -169.985306, 1120.000000, 3406.518799, nullptr, nullptr}, { 0x6d, 12, stage::allStages[53], 3, 0x8, 0xFF, 0b111111100000000000000, 511.206268, -200.000000, 7069.889160, nullptr, nullptr }, //Malo Castle Town - /*auto gotten*///{0x0d, 12, stage::allStages[73], 0, 0x8, 0xFF, 0b111111100000000000000, 1557.0000000, -200.0000000, 3491.0000000, nullptr, nullptr},
- /*auto gotten*///{0x18, 12, stage::allStages[73], 0, 0x8, 0xFF, 0b111111100000000000000, 1557.0000000, -200.0000000, 3491.0000000, nullptr, nullptr},
- /*auto gotten*///{0x1b, 12, stage::allStages[73], 0, 0x8, 0xFF, 0b111111100000000000000, 1557.0000000, -200.0000000, 3491.0000000, nullptr, nullptr},
- /*auto gotten*///{0x0e, 12, stage::allStages[73], 0, 0x8, 0xFF, 0b111111100000000000000, 1557.0000000, -200.0000000, 3491.0000000, nullptr, nullptr},
- { 0x61, 12, stage::allStages[73], 0, 0x8, 0xFF, 0b111111100000000000000, 1557.0000000, -200.0000000, 3491.0000000, nullptr, nullptr },
+ /*auto gotten*///{0x0d, 12, stage::allStages[73], 0, 0x8, 0xFF, 0b111111100000000000000, 1557.0000000, -200.0000000, 3491.0000000, nullptr, nullptr}, + /*auto gotten*///{0x18, 12, stage::allStages[73], 0, 0x8, 0xFF, 0b111111100000000000000, 1557.0000000, -200.0000000, 3491.0000000, nullptr, nullptr}, + /*auto gotten*///{0x1b, 12, stage::allStages[73], 0, 0x8, 0xFF, 0b111111100000000000000, 1557.0000000, -200.0000000, 3491.0000000, nullptr, nullptr}, + /*auto gotten*///{0x0e, 12, stage::allStages[73], 0, 0x8, 0xFF, 0b111111100000000000000, 1557.0000000, -200.0000000, 3491.0000000, nullptr, nullptr}, + { 0x61, 12, stage::allStages[73], 0, 0x8, 0xFF, 0b111111100000000000000, 1557.0000000, -200.0000000, 3491.0000000, nullptr, nullptr }, { 0x63, 12, stage::allStages[73], 0, 0x8, 0xFF, 0b111111100000000000000, 1557.0000000, -200.0000000, 3491.0000000, nullptr, nullptr }, //City In The Sky - /*auto gotten*///{0x10, 12, stage::allStages[12], 16, 0x14, 0xFF, 0b111111100000000000000, -187.485748, 140.000000, -327.944885, nullptr, nullptr},
- /*auto gotten*///{0x0d, 12, stage::allStages[12], 16, 0x14, 0xFF, 0b111111100000000000000, -187.485748, 140.000000, -327.944885, nullptr, nullptr},
- { 0x66, 12, stage::allStages[12], 16, 0x14, 0xFF, 0b111111100000000000000, -187.485748, 140.000000, -327.944885, nullptr, nullptr },
- { 0x61, 12, stage::allStages[12], 16, 0x14, 0xFF, 0b111111100000000000000, -187.485748, 140.000000, -327.944885, nullptr, nullptr },
+ /*auto gotten*///{0x10, 12, stage::allStages[12], 16, 0x14, 0xFF, 0b111111100000000000000, -187.485748, 140.000000, -327.944885, nullptr, nullptr}, + /*auto gotten*///{0x0d, 12, stage::allStages[12], 16, 0x14, 0xFF, 0b111111100000000000000, -187.485748, 140.000000, -327.944885, nullptr, nullptr}, + { 0x66, 12, stage::allStages[12], 16, 0x14, 0xFF, 0b111111100000000000000, -187.485748, 140.000000, -327.944885, nullptr, nullptr }, + { 0x61, 12, stage::allStages[12], 16, 0x14, 0xFF, 0b111111100000000000000, -187.485748, 140.000000, -327.944885, nullptr, nullptr }, { 0x63, 12, stage::allStages[12], 16, 0x14, 0xFF, 0b111111100000000000000, -187.485748, 140.000000, -327.944885, nullptr, nullptr }, //Fairy Tear Cave Of Ordeals (includes spring warps) { 0x73, 12, stage::allStages[31], 49, 0x15, 0xFF, 0b100000000101110000010, -7.837189, -61250.000000, -3557.497070, nullptr, nullptr },//, @@ -552,7 +552,7 @@ namespace mod::item //Custom Chests //Shadow Crystal - /*493*/{ 0x32, 0, stage::allStages[54], 1, 0x7, 0x6, 0b000000000000000000000, -235.256332, 1625.000000, -4709.996582, nullptr, nullptr }, + /*493*/{ 0x32, 0, stage::allStages[54], 1, 0x6, 0x6, 0b000000000000000000000, -235.256332, 1625.000000, -4709.996582, nullptr, nullptr }, //Master Sword /*494*/{ 0x29, 0, stage::allStages[54], 1, 0x7, 0x7, 0b000000000000000000000, 246.137573, 1625.000000, -4787.551270, nullptr, nullptr }, //Dominion Rod Uncharged @@ -586,7 +586,6 @@ namespace mod::item 0, //wooden sword 295, //slingshot 296, //lantern - 292, //ordon sword 298, //boomerang 21, //iron boots 291, //ordon shield @@ -595,6 +594,7 @@ namespace mod::item 320, //bomb bag 314, //zora armor 58, //clawshot + 292, //ordon sword 493, //Shadow Crystal 494, //Master Sword 322, //Auru memo diff --git a/source/mod.cpp b/source/mod.cpp index 0458cdf..2814579 100644 --- a/source/mod.cpp +++ b/source/mod.cpp @@ -1,159 +1,156 @@ -#include "defines.h" -#include "mod.h" -#include "global.h" -#include "systemConsole.h" -#include "patch.h" -#include "controller.h" -#include "customChecks.h" -#include "tools.h" -#include "array.h" -#include "eventListener.h" -#include "stage.h" -#include "game_patches.h" -#include "chestRando.h" -#include "itemChecks.h" -#include "HUDConsole.h" -#include "items.h" -#include "singleton.h" - -#include <tp/f_op_scene_req.h> -#include <tp/m_Do_controller_pad.h> -#include <tp/d_map_path_dmap.h> -#include <tp/evt_control.h> -#include <tp/f_op_scene_req.h> -#include <tp/d_com_inf_game.h> -#include <tp/f_ap_game.h> -#include <tp/f_op_actor_mng.h> -#include <tp/d_a_alink.h> -#include <tp/d_save.h> +#include "defines.h"
+#include "mod.h"
+#include "global.h"
+#include "systemConsole.h"
+#include "patch.h"
+#include "controller.h"
+#include "customChecks.h"
+#include "tools.h"
+#include "array.h"
+#include "eventListener.h"
+#include "stage.h"
+#include "game_patches.h"
+#include "chestRando.h"
+#include "itemChecks.h"
+#include "HUDConsole.h"
+#include "items.h"
+#include "singleton.h"
+
+#include <tp/f_op_scene_req.h>
+#include <tp/m_Do_controller_pad.h>
+#include <tp/d_map_path_dmap.h>
+#include <tp/evt_control.h>
+#include <tp/f_op_scene_req.h>
+#include <tp/d_com_inf_game.h>
+#include <tp/f_ap_game.h>
+#include <tp/f_op_actor_mng.h>
+#include <tp/d_a_alink.h>
+#include <tp/d_save.h>
#include <tp/d_stage.h>
-#include <tp/dzx.h> -#include <tp/JFWSystem.h> -#include <tp/d_kankyo.h> -#include <tp/d_msg_flow.h> -#include <tp/DynamicLink.h> -#include <tp/d_item.h> -#include <cstdio> -#include <cstring> +#include <tp/dzx.h>
+#include <tp/JFWSystem.h>
+#include <tp/d_kankyo.h>
+#include <tp/d_msg_flow.h>
+#include <tp/DynamicLink.h>
+#include <tp/d_item.h>
+#include <tp/d_item_data.h>
+#include <tp/d_meter2_info.h>
+#include <cstdio>
+#include <cstring>
+
+
+
+namespace mod
+{
+ Mod* global::modPtr = nullptr;
+ ChestRandomizer* global::chestRandoPtr = nullptr;
+ event::EventListener* global::eventListenerPtr = nullptr;
+ mod::HUDConsole* global::hudConsolePtr = nullptr;
+ int num_frames = 120;
+ int frame_counter = 0;
+
+ void main()
+ {
+ Mod* mod = new Mod();
+ mod->init();
+ }
+
+ Mod::Mod()
+ {
+ eventListener = new event::EventListener();
+ chestRandomizer = new ChestRandomizer();
+ hudConsole = new HUDConsole("Settings", 0x80);
+ global::modPtr = this;
+ global::chestRandoPtr = this->chestRandomizer;
+ global::eventListenerPtr = this->eventListener;
+ global::hudConsolePtr = this->hudConsole;
+ }
+
+ void Mod::init()
+ {
+ // Perform any necessary assembly overwrites
+ game_patch::assemblyOverwrites();
+ game_patch::increaseWalletSize();
+ game_patch::increaseClimbSpeed();
+
+
+ // Causes issues right now (argarok cannot be beaten)
+ //game_patch::removeIBLimit();
+
+
+
+ // Init rando
+ tools::randomSeed = 0x9e3779b97f4a7c15;
+ randoEnabled = 1;
+ truePause = 1;
+ inputBuffering = 0;
+
+ // Print controls
+ strcpy(sysConsolePtr->consoleLine[20].line, "D-Pad Nav: Up/Down Left/Right");
+ strcpy(sysConsolePtr->consoleLine[21].line, "+/- Value: A/B/X/Y Console : R + Z");
+ strcpy(sysConsolePtr->consoleLine[22].line, " Generate: R + Start (auto on new file)");
+ strcpy(sysConsolePtr->consoleLine[23].line, "Bring up the console to use commands");
+ strcpy(sysConsolePtr->consoleLine[24].line, "rando.tpspeed.run | Twitter: @ztprandomizer");
+
+ u8 page = 0;
+
+ // General settings
+ hudConsole->addOption(page, "Red:", &reinterpret_cast<u8*>(&sysConsolePtr->consoleColor)[0], 0xFF);
+ hudConsole->addOption(page, "Green:", &reinterpret_cast<u8*>(&sysConsolePtr->consoleColor)[1], 0xFF);
+ hudConsole->addOption(page, "Blue:", &reinterpret_cast<u8*>(&sysConsolePtr->consoleColor)[2], 0xFF);
+ hudConsole->addOption(page, "Alpha:", &reinterpret_cast<u8*>(&sysConsolePtr->consoleColor)[3], 0xFF);
+ hudConsole->addOption(page, "True Pause:", &truePause, 0x1);
+ hudConsole->addOption(page, "Input Buffer:", &inputBuffering, 0x1);
+
+
+ // Seed settings
+ page = hudConsole->addPage("Seed");
+
+ hudConsole->addOption(page, "Rando enabled?", &randoEnabled, 0x1);
+ hudConsole->addOption(page, "Custom Seed?", &customSeed, 0x1);
+ hudConsole->addOption(page, "Seed 1:", &reinterpret_cast<u8*>(&tools::randomSeed)[0], 0xFF);
+ hudConsole->addOption(page, "Seed 2:", &reinterpret_cast<u8*>(&tools::randomSeed)[1], 0xFF);
+ hudConsole->addOption(page, "Seed 3:", &reinterpret_cast<u8*>(&tools::randomSeed)[2], 0xFF);
+ hudConsole->addOption(page, "Seed 4:", &reinterpret_cast<u8*>(&tools::randomSeed)[3], 0xFF);
+
+ hudConsole->addOption(page, "Seed 5:", &reinterpret_cast<u8*>(&tools::randomSeed)[4], 0xFF);
+ hudConsole->addOption(page, "Seed 6:", &reinterpret_cast<u8*>(&tools::randomSeed)[5], 0xFF);
+ hudConsole->addOption(page, "Seed 7:", &reinterpret_cast<u8*>(&tools::randomSeed)[6], 0xFF);
+ hudConsole->addOption(page, "Seed 8:", &reinterpret_cast<u8*>(&tools::randomSeed)[7], 0xFF);
+
+ hudConsole->addWatch(page, "Resulting Seed", &tools::randomSeed, 'x', WatchInterpretation::_u64);
+
+ // Debug
+ page = hudConsole->addPage("Debug Info");
+
+
+
+ hudConsole->addWatch(page, "Function:", &lastItemFunc, 's', WatchInterpretation::_str);
+ hudConsole->addWatch(page, " Source:", &chestRandomizer->lastSourceInfo, 's', WatchInterpretation::_str);
+ hudConsole->addWatch(page, " Dest:", &chestRandomizer->lastDestInfo, 's', WatchInterpretation::_str);
+
+ hudConsole->addWatch(page, "Total Checks:", &chestRandomizer->totalChecks, 'u', WatchInterpretation::_u16);
+ hudConsole->addWatch(page, "Layer Checks:", &chestRandomizer->layerCheckCount, 'u', WatchInterpretation::_u16);
+ hudConsole->addWatch(page, "Empty:", &chestRandomizer->empty, 'u', WatchInterpretation::_u16);
+
+ hudConsole->addWatch(page, "Active Seed:", &chestRandomizer->currentSeed, 'x', WatchInterpretation::_u64);
+ hudConsole->addWatch(page, " Checksum:", &chestRandomizer->checkSum, 'x', WatchInterpretation::_u16);
+
+
+ // Item search
+ page = hudConsole->addPage("Item Search");
+
+ hudConsole->addOption(page, "Search ID:", &itemSearchID, 0xFF);
+ hudConsole->addOption(page, "Reverse ID:", &itemReverseSearchID, 0xFF);
- - -namespace mod -{ - Mod* global::modPtr = nullptr; - ChestRandomizer* global::chestRandoPtr = nullptr; - event::EventListener* global::eventListenerPtr = nullptr; - mod::HUDConsole* global::hudConsolePtr = nullptr; - int num_frames = 120; - int frame_counter = 0; - - void main() - { - Mod* mod = new Mod(); - mod->init(); - } - - Mod::Mod() - { - eventListener = new event::EventListener(); - chestRandomizer = new ChestRandomizer(); - hudConsole = new HUDConsole("Settings", 0x80); - global::modPtr = this; - global::chestRandoPtr = this->chestRandomizer; - global::eventListenerPtr = this->eventListener; - global::hudConsolePtr = this->hudConsole; - } - - void Mod::init() - { - // Perform any necessary assembly overwrites - game_patch::assemblyOverwrites(); - game_patch::increaseWalletSize(); - game_patch::increaseClimbSpeed(); - /* - * Causes issues right now (argarok cannot be beaten) - * game_patch::removeIBLimit(); - */ - - // Init rando - tools::randomSeed = 0x9e3779b97f4a7c15; - randoEnabled = 1; - truePause = 1; - inputBuffering = 0; - - // Print controls - strcpy(sysConsolePtr->consoleLine[20].line, "D-Pad Nav: Up/Down Left/Right"); - strcpy(sysConsolePtr->consoleLine[21].line, "+/- Value: A/B/X/Y Console : R + Z"); - strcpy(sysConsolePtr->consoleLine[22].line, " Generate: R + Start (auto on new file)"); - strcpy(sysConsolePtr->consoleLine[23].line, "Bring up the console to use commands"); - strcpy(sysConsolePtr->consoleLine[24].line, "rando.tpspeed.run | Twitter: @ztprandomizer"); - - u8 page = 0; - - // General settings - hudConsole->addOption(page, "Red:", &reinterpret_cast<u8*>(&sysConsolePtr->consoleColor)[0], 0xFF); - hudConsole->addOption(page, "Green:", &reinterpret_cast<u8*>(&sysConsolePtr->consoleColor)[1], 0xFF); - hudConsole->addOption(page, "Blue:", &reinterpret_cast<u8*>(&sysConsolePtr->consoleColor)[2], 0xFF); - hudConsole->addOption(page, "Alpha:", &reinterpret_cast<u8*>(&sysConsolePtr->consoleColor)[3], 0xFF); - hudConsole->addOption(page, "True Pause:", &truePause, 0x1); - hudConsole->addOption(page, "Input Buffer:", &inputBuffering, 0x1); - - - // Seed settings - page = hudConsole->addPage("Seed"); - - hudConsole->addOption(page, "Rando enabled?", &randoEnabled, 0x1); - hudConsole->addOption(page, "Custom Seed?", &customSeed, 0x1); - hudConsole->addOption(page, "Seed 1:", &reinterpret_cast<u8*>(&tools::randomSeed)[0], 0xFF); - hudConsole->addOption(page, "Seed 2:", &reinterpret_cast<u8*>(&tools::randomSeed)[1], 0xFF); - hudConsole->addOption(page, "Seed 3:", &reinterpret_cast<u8*>(&tools::randomSeed)[2], 0xFF); - hudConsole->addOption(page, "Seed 4:", &reinterpret_cast<u8*>(&tools::randomSeed)[3], 0xFF); - - hudConsole->addOption(page, "Seed 5:", &reinterpret_cast<u8*>(&tools::randomSeed)[4], 0xFF); - hudConsole->addOption(page, "Seed 6:", &reinterpret_cast<u8*>(&tools::randomSeed)[5], 0xFF); - hudConsole->addOption(page, "Seed 7:", &reinterpret_cast<u8*>(&tools::randomSeed)[6], 0xFF); - hudConsole->addOption(page, "Seed 8:", &reinterpret_cast<u8*>(&tools::randomSeed)[7], 0xFF); - - hudConsole->addWatch(page, "Resulting Seed", &tools::randomSeed, 'x', WatchInterpretation::_u64); - - // Debug - page = hudConsole->addPage("Debug Info"); - - hudConsole->addOption(page, "Bugsanity?", &chestRandomizer->isBugsanityEnabled, 0x1); - hudConsole->addOption(page, "Poesanity?", &chestRandomizer->isPoesanityEnabled, 0x1); - hudConsole->addOption(page, "Shopsanity?", &chestRandomizer->isShopsanityEnabled, 0x1); - hudConsole->addOption(page, "Dungeon Items?", &chestRandomizer->areDungeonItemsRandomized, 0x1);
- hudConsole->addOption(page, "Key Shuffle?", &chestRandomizer->isKeysanityEnabled, 0x1); - hudConsole->addOption(page, "Skybooksanity?", &Singleton::getInstance()->shuffledSkybook, 0x1); - - - - hudConsole->addWatch(page, "Function:", &lastItemFunc, 's', WatchInterpretation::_str); - hudConsole->addWatch(page, " Source:", &chestRandomizer->lastSourceInfo, 's', WatchInterpretation::_str); - hudConsole->addWatch(page, " Dest:", &chestRandomizer->lastDestInfo, 's', WatchInterpretation::_str); - - hudConsole->addWatch(page, "Total Checks:", &chestRandomizer->totalChecks, 'u', WatchInterpretation::_u16); - hudConsole->addWatch(page, "Layer Checks:", &chestRandomizer->layerCheckCount, 'u', WatchInterpretation::_u16); - hudConsole->addWatch(page, "Empty:", &chestRandomizer->empty, 'u', WatchInterpretation::_u16); - - hudConsole->addWatch(page, "Active Seed:", &chestRandomizer->currentSeed, 'x', WatchInterpretation::_u64); - hudConsole->addWatch(page, " Checksum:", &chestRandomizer->checkSum, 'x', WatchInterpretation::_u16); - - - // Item search - page = hudConsole->addPage("Item Search"); - - hudConsole->addOption(page, "Search ID:", &itemSearchID, 0xFF); - hudConsole->addOption(page, "Reverse ID:", &itemReverseSearchID, 0xFF); - hudConsole->addWatch(page, "Search Result:", &itemSearchResults, 's', WatchInterpretation::_str);
- hudConsole->addWatch(page, "Reverse Result:", &itemReverseSearchResults, 's', WatchInterpretation::_str); - - hudConsole->addWatch(page, "MetadataID:", &lastItemDataID, 's', WatchInterpretation::_str); - hudConsole->addWatch(page, "MetadataX:", &lastItemDataX, 's', WatchInterpretation::_str); - hudConsole->addWatch(page, "MetadataY:", &lastItemDataY, 's', WatchInterpretation::_str); - hudConsole->addWatch(page, "MetadataZ:", &lastItemDataZ, 's', WatchInterpretation::_str); - + hudConsole->addWatch(page, "Reverse Result:", &itemReverseSearchResults, 's', WatchInterpretation::_str);
+
+ hudConsole->addWatch(page, "MetadataID:", &lastItemDataID, 's', WatchInterpretation::_str);
+ hudConsole->addWatch(page, "MetadataX:", &lastItemDataX, 's', WatchInterpretation::_str);
+ hudConsole->addWatch(page, "MetadataY:", &lastItemDataY, 's', WatchInterpretation::_str);
+ hudConsole->addWatch(page, "MetadataZ:", &lastItemDataZ, 's', WatchInterpretation::_str);
+
// Check search
page = hudConsole->addPage("Check Search");
@@ -165,27 +162,37 @@ namespace mod hudConsole->addWatch(page, "Search ID:", &checkSearchID, 'd', WatchInterpretation::_u16);
hudConsole->addWatch(page, "Reverse ID:", &checkReverseSearchID, 'd', WatchInterpretation::_u16);
hudConsole->addWatch(page, "Search Result:", &checkSearchResults, 's', WatchInterpretation::_str);
- hudConsole->addWatch(page, "Reverse Result:", &checkReverseSearchResults, 's', WatchInterpretation::_str); - - // Game info 1 - page = hudConsole->addPage("Skips 1"); - + hudConsole->addWatch(page, "Reverse Result:", &checkReverseSearchResults, 's', WatchInterpretation::_str);
+
+ //Shuffled Checks
+ page = hudConsole->addPage("Shuffled Checks");
+
+ hudConsole->addOption(page, "Bugsanity?", &chestRandomizer->isBugsanityEnabled, 0x1);
+ hudConsole->addOption(page, "Poesanity?", &chestRandomizer->isPoesanityEnabled, 0x1);
+ hudConsole->addOption(page, "Shopsanity?", &chestRandomizer->isShopsanityEnabled, 0x1);
+ hudConsole->addOption(page, "Dungeon Items?", &chestRandomizer->areDungeonItemsRandomized, 0x1);
+ hudConsole->addOption(page, "Key Shuffle?", &chestRandomizer->isKeysanityEnabled, 0x1);
+ hudConsole->addOption(page, "Sky Character?", &Singleton::getInstance()->shuffledSkybook, 0x1);
+
+ // Game info 1
+ page = hudConsole->addPage("Skips 1");
+
hudConsole->addOption(page, "MDH Skip?", &Singleton::getInstance()->isMDHSkipEnabled, 0x1);
hudConsole->addOption(page, "Faron Escape?", &Singleton::getInstance()->isForestEscapeEnabled, 0x1);
- hudConsole->addOption(page, "Open HF gates?", &Singleton::getInstance()->isGateUnlockEnabled, 0x1); - hudConsole->addOption(page, "Skip Twilight?", &Singleton::getInstance()->isTwilightSkipped, 0x1); - hudConsole->addOption(page, "Skip Goats?", &Singleton::getInstance()->isGoatSkipEnabled, 0x1); - hudConsole->addOption(page, "Skip MS Puzzle?", &Singleton::getInstance()->isMSPuzzleSkipEnabled, 0x1); - hudConsole->addOption(page, "Skip Escort?", &Singleton::getInstance()->isCartEscortSkipEnabled, 0x1); - hudConsole->addOption(page, "Skip Sewers?", &Singleton::getInstance()->isSewerSkipEnabled, 0x1); - - - - /*hudConsole->addOption(page, "Item half milk", &chestRandomizer->itemThatReplacesHalfMilk, 0xFF); //for testing only - hudConsole->addOption(page, "Item slingshot", &chestRandomizer->itemThatReplacesSlingShot, 0xFF); //for testing only - hudConsole->addOption(page, "Normal Time:", &enableNormalTime, 0x1); //for testing only - hudConsole->addOption(page, "Set Day:", &setDay, 0x1); //for testing only*/ - + hudConsole->addOption(page, "Open HF gates?", &Singleton::getInstance()->isGateUnlockEnabled, 0x1);
+ hudConsole->addOption(page, "Skip Twilight?", &Singleton::getInstance()->isTwilightSkipped, 0x1);
+ hudConsole->addOption(page, "Skip Goats?", &Singleton::getInstance()->isGoatSkipEnabled, 0x1);
+ hudConsole->addOption(page, "Skip MS Puzzle?", &Singleton::getInstance()->isMSPuzzleSkipEnabled, 0x1);
+ hudConsole->addOption(page, "Skip Escort?", &Singleton::getInstance()->isCartEscortSkipEnabled, 0x1);
+ hudConsole->addOption(page, "Skip Sewers?", &Singleton::getInstance()->isSewerSkipEnabled, 0x1);
+
+
+
+ /*hudConsole->addOption(page, "Item half milk", &chestRandomizer->itemThatReplacesHalfMilk, 0xFF); //for testing only
+ hudConsole->addOption(page, "Item slingshot", &chestRandomizer->itemThatReplacesSlingShot, 0xFF); //for testing only
+ hudConsole->addOption(page, "Normal Time:", &enableNormalTime, 0x1); //for testing only
+ hudConsole->addOption(page, "Set Day:", &setDay, 0x1); //for testing only*/
+
hudConsole->addWatch(page, "CurrentStage:", &gameInfo.currentStage, 's', WatchInterpretation::_str);
hudConsole->addWatch(page, "CurrentRoom:", &tp::d_kankyo::env_light.currentRoom, 'd', WatchInterpretation::_u8);
hudConsole->addWatch(page, "CurrentState:", &tp::d_com_inf_game::current_state, 'x', WatchInterpretation::_u8);
@@ -194,17 +201,20 @@ namespace mod hudConsole->addWatch(page, "CurrentPosY:", ¤tPosY, 's', WatchInterpretation::_str);
hudConsole->addWatch(page, "CurrentPosZ:", ¤tPosZ, 's', WatchInterpretation::_str);
hudConsole->addWatch(page, "CurrentAngle:", &linkAngle, 's', WatchInterpretation::_str);
- hudConsole->addWatch(page, "Sky Angle:", &skyAngle, 's', WatchInterpretation::_str); - - //Game info 2 - page = hudConsole->addPage("Skips 2"); - hudConsole->addOption(page, "Early CiTS?", &Singleton::getInstance()->isEarlyCiTSEnabled, 0x1); - hudConsole->addOption(page, "Early Desert?", &Singleton::getInstance()->isEarlyDesertEnabled, 0x1); - hudConsole->addOption(page, "Boss Keysey?", &Singleton::getInstance()->isBossKeyseyEnabled, 0x1); - hudConsole->addOption(page, "No Shop Bottl?", &allowBottleItemsShopAnytime, 0x1); - hudConsole->addOption(page, "Fast transform?", &enableQuickTransform, 0x1); - hudConsole->addOption(page, "Skip Intro?", &Singleton::getInstance()->isIntroSkipped, 0x1); - //hudConsole->addOption(page, "Midna ToD Skip?", &Singleton::getInstance()->midnaTimeControl, 0x1); + hudConsole->addWatch(page, "Sky Angle:", &skyAngle, 's', WatchInterpretation::_str);
+
+ //Game info 2
+ page = hudConsole->addPage("Skips 2");
+ hudConsole->addOption(page, "Early CiTS?", &Singleton::getInstance()->isEarlyCiTSEnabled, 0x1);
+ hudConsole->addOption(page, "Early Desert?", &Singleton::getInstance()->isEarlyDesertEnabled, 0x1);
+ hudConsole->addOption(page, "Boss Keysey?", &Singleton::getInstance()->isBossKeyseyEnabled, 0x1);
+ hudConsole->addOption(page, "No Shop Bottl?", &allowBottleItemsShopAnytime, 0x1);
+ hudConsole->addOption(page, "Fast transform?", &enableQuickTransform, 0x1);
+ hudConsole->addOption(page, "Skip Intro?", &Singleton::getInstance()->isIntroSkipped, 0x1);
+ hudConsole->addOption(page, "Midna ToD Skip?", &Singleton::getInstance()->midnaTimeControl, 0x1);
+ hudConsole->addOption(page, "Early ToT?", &Singleton::getInstance()->isEarlyToTEnabled, 0x1); + hudConsole->addOption(page, "Early PoT?", &Singleton::getInstance()->isEarlyPoTEnabled, 0x1); + hudConsole->addOption(page, "Open HC?", &Singleton::getInstance()->isEarlyHCEnabled, 0x1);
//color
/*page = hudConsole->addPage("Tunic Color1");
@@ -249,112 +259,123 @@ namespace mod hudConsole->addWatch(page, "move:", &moveResult, 'x', WatchInterpretation::_u16);
hudConsole->addWatch(page, "throw:", &throwResult, 'x', WatchInterpretation::_u16);*/
- - - //event info - page = hudConsole->addPage("Event Info"); +
+
+ //event info
+ page = hudConsole->addPage("Skips 3/ Event");
//hudConsole->addOption(page, "Coords as hex?", &coordsAreInHex, 0x1); - - hudConsole->addWatch(page, "CurrentEventID:", &gameInfo.eventSystem.currentEventID, 'x', WatchInterpretation::_u8); - hudConsole->addWatch(page, "NextEventID:", &gameInfo.eventSystem.nextEventID, 'x', WatchInterpretation::_u8); - hudConsole->addWatch(page, "NextStage:", &gameInfo.nextStageVars.nextStage, 's', WatchInterpretation::_str); - hudConsole->addWatch(page, "NextRoom:", &gameInfo.nextStageVars.nextRoom, 'd', WatchInterpretation::_u8); - hudConsole->addWatch(page, "NextSpawnPoint:", &gameInfo.nextStageVars.nextSpawnPoint, 'x', WatchInterpretation::_u8); - hudConsole->addWatch(page, "NextSate:", &gameInfo.nextStageVars.nextState, 'x', WatchInterpretation::_u8); - - //local area - /*page = hudConsole->addPage("Local Area 1"); - hudConsole->addWatch(page, "AreaNodes0:", &gameInfo.localAreaNodes.unk_0[0], 'x', WatchInterpretation::_u8); - hudConsole->addWatch(page, "AreaNodes1:", &gameInfo.localAreaNodes.unk_0[1], 'x', WatchInterpretation::_u8); - hudConsole->addWatch(page, "AreaNodes2:", &gameInfo.localAreaNodes.unk_0[2], 'x', WatchInterpretation::_u8); - hudConsole->addWatch(page, "AreaNodes3:", &gameInfo.localAreaNodes.unk_0[3], 'x', WatchInterpretation::_u8); - hudConsole->addWatch(page, "AreaNodes4:", &gameInfo.localAreaNodes.unk_0[4], 'x', WatchInterpretation::_u8); - hudConsole->addWatch(page, "AreaNodes5:", &gameInfo.localAreaNodes.unk_0[5], 'x', WatchInterpretation::_u8); - hudConsole->addWatch(page, "AreaNodes6:", &gameInfo.localAreaNodes.unk_0[6], 'x', WatchInterpretation::_u8); - hudConsole->addWatch(page, "AreaNodes7:", &gameInfo.localAreaNodes.unk_0[7], 'x', WatchInterpretation::_u8); - hudConsole->addWatch(page, "AreaNodes8:", &gameInfo.localAreaNodes.unk_0[8], 'x', WatchInterpretation::_u8); - hudConsole->addWatch(page, "AreaNodes9:", &gameInfo.localAreaNodes.unk_0[9], 'x', WatchInterpretation::_u8); - page = hudConsole->addPage("Local Area 2"); - hudConsole->addWatch(page, "AreaNodes10:", &gameInfo.localAreaNodes.unk_0[10], 'x', WatchInterpretation::_u8); - hudConsole->addWatch(page, "AreaNodes11:", &gameInfo.localAreaNodes.unk_0[11], 'x', WatchInterpretation::_u8); - hudConsole->addWatch(page, "AreaNodes12:", &gameInfo.localAreaNodes.unk_0[12], 'x', WatchInterpretation::_u8); - hudConsole->addWatch(page, "AreaNodes13:", &gameInfo.localAreaNodes.unk_0[13], 'x', WatchInterpretation::_u8); - hudConsole->addWatch(page, "AreaNodes14:", &gameInfo.localAreaNodes.unk_0[14], 'x', WatchInterpretation::_u8); - hudConsole->addWatch(page, "AreaNodes15:", &gameInfo.localAreaNodes.unk_0[15], 'x', WatchInterpretation::_u8); - hudConsole->addWatch(page, "AreaNodes16:", &gameInfo.localAreaNodes.unk_0[16], 'x', WatchInterpretation::_u8); - hudConsole->addWatch(page, "AreaNodes17:", &gameInfo.localAreaNodes.unk_0[17], 'x', WatchInterpretation::_u8); - hudConsole->addWatch(page, "AreaNodes18:", &gameInfo.localAreaNodes.unk_0[18], 'x', WatchInterpretation::_u8); - hudConsole->addWatch(page, "AreaNodes19:", &gameInfo.localAreaNodes.unk_0[19], 'x', WatchInterpretation::_u8); - page = hudConsole->addPage("Local Area 3"); - hudConsole->addWatch(page, "AreaNodes20:", &gameInfo.localAreaNodes.unk_0[20], 'x', WatchInterpretation::_u8); - hudConsole->addWatch(page, "AreaNodes21:", &gameInfo.localAreaNodes.unk_0[21], 'x', WatchInterpretation::_u8); - hudConsole->addWatch(page, "AreaNodes22:", &gameInfo.localAreaNodes.unk_0[22], 'x', WatchInterpretation::_u8); - hudConsole->addWatch(page, "AreaNodes23:", &gameInfo.localAreaNodes.unk_0[23], 'x', WatchInterpretation::_u8); - hudConsole->addWatch(page, "AreaNodes24:", &gameInfo.localAreaNodes.unk_0[24], 'x', WatchInterpretation::_u8); - hudConsole->addWatch(page, "AreaNodes25:", &gameInfo.localAreaNodes.unk_0[25], 'x', WatchInterpretation::_u8); - hudConsole->addWatch(page, "AreaNodes26:", &gameInfo.localAreaNodes.unk_0[26], 'x', WatchInterpretation::_u8); - hudConsole->addWatch(page, "AreaNodes27:", &gameInfo.localAreaNodes.unk_0[27], 'x', WatchInterpretation::_u8); - hudConsole->addWatch(page, "NbKeys:", &gameInfo.localAreaNodes.nbKeys, 'x', WatchInterpretation::_u8); - hudConsole->addWatch(page, "Dungeon flags:", &gameInfo.localAreaNodes.dungeon, 'x', WatchInterpretation::_u8); - page = hudConsole->addPage("Local Area 4"); - hudConsole->addWatch(page, "AreaNodes30:", &gameInfo.localAreaNodes.unk_1E[0], 'x', WatchInterpretation::_u8); - hudConsole->addWatch(page, "AreaNodes31:", &gameInfo.localAreaNodes.unk_1E[1], 'x', WatchInterpretation::_u8);*/ - - //item slots - /*page = hudConsole->addPage("Item slots 1"); - hudConsole->addWatch(page, "Boomerang:", &gameInfo.scratchPad.itemWeel.Boomerang, 'x', WatchInterpretation::_u8); - hudConsole->addWatch(page, "Slot 1:", &gameInfo.scratchPad.itemSlots[0x1], 'x', WatchInterpretation::_u8); - - hudConsole->addWatch(page, "flags1:", &gameInfo.scratchPad.itemFlags.itemFlags1, 'x', WatchInterpretation::_u64); - hudConsole->addWatch(page, "flags2:", &gameInfo.scratchPad.itemFlags.itemFlags2, 'x', WatchInterpretation::_u64); - hudConsole->addWatch(page, "flags3:", &gameInfo.scratchPad.itemFlags.itemFlags3, 'x', WatchInterpretation::_u64); - hudConsole->addWatch(page, "falgs4:", &gameInfo.scratchPad.itemFlags.itemFlags4, 'x', WatchInterpretation::_u64);*/ - - /*page = hudConsole->addPage("Warps 1"); - hudConsole->addOption(page, "Mirror Chamber:", &gameInfo.scratchPad.allAreaNodes.Gerudo_Desert.unk_0[0xE], 0xFF); - hudConsole->addOption(page, "Gerudo Mesa:", &gameInfo.scratchPad.allAreaNodes.Gerudo_Desert.unk_0[0x9], 0xFF); - hudConsole->addOption(page, "Snowpeak Top:", &gameInfo.scratchPad.allAreaNodes.Snowpeak.unk_0[0x9], 0xFF); - hudConsole->addOption(page, "Sacred Grove:", &gameInfo.scratchPad.allAreaNodes.Sacred_Grove.unk_0[0x17], 0xFF); - hudConsole->addOption(page, "Eldin Bridge:", &gameInfo.scratchPad.allAreaNodes.Hyrule_Field.unk_0[0x17], 0xFF); - hudConsole->addOption(page, "Castle Town:", &gameInfo.scratchPad.allAreaNodes.Hyrule_Field.unk_0[0xB], 0xFF); - hudConsole->addOption(page, "Kakariko Gorge:", &gameInfo.scratchPad.allAreaNodes.Hyrule_Field.unk_0[0x9], 0xFF); - hudConsole->addOption(page, "Zoras Domain:", &gameInfo.scratchPad.allAreaNodes.Lanyru.unk_0[0xB], 0xFF); - hudConsole->addOption(page, "Lake Hylia:", &gameInfo.scratchPad.allAreaNodes.Lanyru.unk_0[0xA], 0xFF); - hudConsole->addOption(page, "Zora River:", &gameInfo.scratchPad.allAreaNodes.Lanyru.unk_0[0x9], 0xFF); - - hudConsole->addWatch(page, "Mirror Chamber:", &gameInfo.scratchPad.allAreaNodes.Gerudo_Desert.unk_0[0xE], 'x', WatchInterpretation::_u8);//1 - hudConsole->addWatch(page, "Gerudo Mesa:", &gameInfo.scratchPad.allAreaNodes.Gerudo_Desert.unk_0[0x9], 'x', WatchInterpretation::_u8);//32 - hudConsole->addWatch(page, "Snowpeak Top:", &gameInfo.scratchPad.allAreaNodes.Snowpeak.unk_0[0x9], 'x', WatchInterpretation::_u8);//32 - hudConsole->addWatch(page, "Sacred Grove:", &gameInfo.scratchPad.allAreaNodes.Sacred_Grove.unk_0[0x17], 'x', WatchInterpretation::_u8);//16 - hudConsole->addWatch(page, "Eldin Bridge:", &gameInfo.scratchPad.allAreaNodes.Hyrule_Field.unk_0[0x17], 'x', WatchInterpretation::_u8);//8 - hudConsole->addWatch(page, "Castle Town:", &gameInfo.scratchPad.allAreaNodes.Hyrule_Field.unk_0[0xB], 'x', WatchInterpretation::_u8);//8 - hudConsole->addWatch(page, "Kakariko Gorge:", &gameInfo.scratchPad.allAreaNodes.Hyrule_Field.unk_0[0x9], 'x', WatchInterpretation::_u8);//32 - hudConsole->addWatch(page, "Zoras Domain:", &gameInfo.scratchPad.allAreaNodes.Lanyru.unk_0[0xB], 'x', WatchInterpretation::_u8);//4 - hudConsole->addWatch(page, "Lake Hylia:", &gameInfo.scratchPad.allAreaNodes.Lanyru.unk_0[0xA], 'x', WatchInterpretation::_u8);//4 - hudConsole->addWatch(page, "Zora River:", &gameInfo.scratchPad.allAreaNodes.Lanyru.unk_0[0x9], 'x', WatchInterpretation::_u8);//32 - page = hudConsole->addPage("Warps 2"); - hudConsole->addOption(page, "Death Mountain:", &gameInfo.scratchPad.allAreaNodes.Eldin.unk_0[0x9], 0xFF); - hudConsole->addOption(page, "Kakariko:", &gameInfo.scratchPad.allAreaNodes.Eldin.unk_0[0x8], 0xFF); - hudConsole->addOption(page, "South Faron:", &gameInfo.scratchPad.allAreaNodes.Faron.unk_0[0x13], 0xFF); - hudConsole->addOption(page, "North Faron:", &gameInfo.scratchPad.allAreaNodes.Faron.unk_0[0xB], 0xFF); - hudConsole->addOption(page, "Ordon Spring:", &gameInfo.scratchPad.allAreaNodes.Ordon.unk_0[0xD], 0xFF); - - hudConsole->addWatch(page, "Death Mountain:", &gameInfo.scratchPad.allAreaNodes.Eldin.unk_0[0x9], 'x', WatchInterpretation::_u8);//32 - hudConsole->addWatch(page, "Kakariko:", &gameInfo.scratchPad.allAreaNodes.Eldin.unk_0[0x8], 'x', WatchInterpretation::_u8);//128 - hudConsole->addWatch(page, "South Faron:", &gameInfo.scratchPad.allAreaNodes.Faron.unk_0[0x13], 'x', WatchInterpretation::_u8);//128 - hudConsole->addWatch(page, "North Faron:", &gameInfo.scratchPad.allAreaNodes.Faron.unk_0[0xB], 'x', WatchInterpretation::_u8);//4 - hudConsole->addWatch(page, "Ordon Spring:", &gameInfo.scratchPad.allAreaNodes.Ordon.unk_0[0xD], 'x', WatchInterpretation::_u8);//16*/ - - - // save load - /*page = hudConsole->addPage("Save load"); - - hudConsole->addOption(page, "stage:", &stage, 78); //for testing only - hudConsole->addOption(page, "room:", &room, 60); //for testing only - hudConsole->addOption(page, "spawn:", &spawn, 0xFF); //for testing only - hudConsole->addOption(page, "state:", &state, 0xFF); //for testing only - hudConsole->addOption(page, "trigger:", &trigerLoadSave, 0x1); //for testing only*/ - + hudConsole->addOption(page, "GM Story Flag?", &Singleton::getInstance()->isGMStoryPatch, 0x1);
+ hudConsole->addOption(page, "Start w/ Crstl?", &Singleton::getInstance()->startWithCrystal, 0x1);
+
+ hudConsole->addWatch(page, "CurrentEventID:", &gameInfo.eventSystem.currentEventID, 'x', WatchInterpretation::_u8);
+ hudConsole->addWatch(page, "NextEventID:", &gameInfo.eventSystem.nextEventID, 'x', WatchInterpretation::_u8);
+ hudConsole->addWatch(page, "NextStage:", &gameInfo.nextStageVars.nextStage, 's', WatchInterpretation::_str);
+ hudConsole->addWatch(page, "NextRoom:", &gameInfo.nextStageVars.nextRoom, 'd', WatchInterpretation::_u8);
+ hudConsole->addWatch(page, "NextSpawnPoint:", &gameInfo.nextStageVars.nextSpawnPoint, 'x', WatchInterpretation::_u8);
+ hudConsole->addWatch(page, "NextSate:", &gameInfo.nextStageVars.nextState, 'x', WatchInterpretation::_u8);
+
+ //Cosmetic Changes
+ page = hudConsole->addPage("Cosmetic");
+ hudConsole->addOption(page, "LTN In Rd:", &innerRed, 0xFF);
+ hudConsole->addOption(page, "LTN In Green:", &innerGreen, 0xFF);
+ hudConsole->addOption(page, "LTN In Blue:", &innerBlue, 0xFF);
+ hudConsole->addOption(page, "LTN Ot Red:", &outerRed, 0xFF);
+ hudConsole->addOption(page, "LTN Ot Green:", &outerGreen, 0xFF);
+ hudConsole->addOption(page, "LTN Ot Blue:", &outerBlue, 0xFF);
+
+ //local area
+ /*page = hudConsole->addPage("Local Area 1");
+ hudConsole->addWatch(page, "AreaNodes0:", &gameInfo.localAreaNodes.unk_0[0], 'x', WatchInterpretation::_u8);
+ hudConsole->addWatch(page, "AreaNodes1:", &gameInfo.localAreaNodes.unk_0[1], 'x', WatchInterpretation::_u8);
+ hudConsole->addWatch(page, "AreaNodes2:", &gameInfo.localAreaNodes.unk_0[2], 'x', WatchInterpretation::_u8);
+ hudConsole->addWatch(page, "AreaNodes3:", &gameInfo.localAreaNodes.unk_0[3], 'x', WatchInterpretation::_u8);
+ hudConsole->addWatch(page, "AreaNodes4:", &gameInfo.localAreaNodes.unk_0[4], 'x', WatchInterpretation::_u8);
+ hudConsole->addWatch(page, "AreaNodes5:", &gameInfo.localAreaNodes.unk_0[5], 'x', WatchInterpretation::_u8);
+ hudConsole->addWatch(page, "AreaNodes6:", &gameInfo.localAreaNodes.unk_0[6], 'x', WatchInterpretation::_u8);
+ hudConsole->addWatch(page, "AreaNodes7:", &gameInfo.localAreaNodes.unk_0[7], 'x', WatchInterpretation::_u8);
+ hudConsole->addWatch(page, "AreaNodes8:", &gameInfo.localAreaNodes.unk_0[8], 'x', WatchInterpretation::_u8);
+ hudConsole->addWatch(page, "AreaNodes9:", &gameInfo.localAreaNodes.unk_0[9], 'x', WatchInterpretation::_u8);
+ page = hudConsole->addPage("Local Area 2");
+ hudConsole->addWatch(page, "AreaNodes10:", &gameInfo.localAreaNodes.unk_0[10], 'x', WatchInterpretation::_u8);
+ hudConsole->addWatch(page, "AreaNodes11:", &gameInfo.localAreaNodes.unk_0[11], 'x', WatchInterpretation::_u8);
+ hudConsole->addWatch(page, "AreaNodes12:", &gameInfo.localAreaNodes.unk_0[12], 'x', WatchInterpretation::_u8);
+ hudConsole->addWatch(page, "AreaNodes13:", &gameInfo.localAreaNodes.unk_0[13], 'x', WatchInterpretation::_u8);
+ hudConsole->addWatch(page, "AreaNodes14:", &gameInfo.localAreaNodes.unk_0[14], 'x', WatchInterpretation::_u8);
+ hudConsole->addWatch(page, "AreaNodes15:", &gameInfo.localAreaNodes.unk_0[15], 'x', WatchInterpretation::_u8);
+ hudConsole->addWatch(page, "AreaNodes16:", &gameInfo.localAreaNodes.unk_0[16], 'x', WatchInterpretation::_u8);
+ hudConsole->addWatch(page, "AreaNodes17:", &gameInfo.localAreaNodes.unk_0[17], 'x', WatchInterpretation::_u8);
+ hudConsole->addWatch(page, "AreaNodes18:", &gameInfo.localAreaNodes.unk_0[18], 'x', WatchInterpretation::_u8);
+ hudConsole->addWatch(page, "AreaNodes19:", &gameInfo.localAreaNodes.unk_0[19], 'x', WatchInterpretation::_u8);
+ page = hudConsole->addPage("Local Area 3");
+ hudConsole->addWatch(page, "AreaNodes20:", &gameInfo.localAreaNodes.unk_0[20], 'x', WatchInterpretation::_u8);
+ hudConsole->addWatch(page, "AreaNodes21:", &gameInfo.localAreaNodes.unk_0[21], 'x', WatchInterpretation::_u8);
+ hudConsole->addWatch(page, "AreaNodes22:", &gameInfo.localAreaNodes.unk_0[22], 'x', WatchInterpretation::_u8);
+ hudConsole->addWatch(page, "AreaNodes23:", &gameInfo.localAreaNodes.unk_0[23], 'x', WatchInterpretation::_u8);
+ hudConsole->addWatch(page, "AreaNodes24:", &gameInfo.localAreaNodes.unk_0[24], 'x', WatchInterpretation::_u8);
+ hudConsole->addWatch(page, "AreaNodes25:", &gameInfo.localAreaNodes.unk_0[25], 'x', WatchInterpretation::_u8);
+ hudConsole->addWatch(page, "AreaNodes26:", &gameInfo.localAreaNodes.unk_0[26], 'x', WatchInterpretation::_u8);
+ hudConsole->addWatch(page, "AreaNodes27:", &gameInfo.localAreaNodes.unk_0[27], 'x', WatchInterpretation::_u8);
+ hudConsole->addWatch(page, "NbKeys:", &gameInfo.localAreaNodes.nbKeys, 'x', WatchInterpretation::_u8);
+ hudConsole->addWatch(page, "Dungeon flags:", &gameInfo.localAreaNodes.dungeon, 'x', WatchInterpretation::_u8);
+ page = hudConsole->addPage("Local Area 4");
+ hudConsole->addWatch(page, "AreaNodes30:", &gameInfo.localAreaNodes.unk_1E[0], 'x', WatchInterpretation::_u8);
+ hudConsole->addWatch(page, "AreaNodes31:", &gameInfo.localAreaNodes.unk_1E[1], 'x', WatchInterpretation::_u8);*/
+
+ //item slots
+ /*page = hudConsole->addPage("Item slots 1");
+ hudConsole->addWatch(page, "Boomerang:", &gameInfo.scratchPad.itemWeel.Boomerang, 'x', WatchInterpretation::_u8);
+ hudConsole->addWatch(page, "Slot 1:", &gameInfo.scratchPad.itemSlots[0x1], 'x', WatchInterpretation::_u8);
+
+ hudConsole->addWatch(page, "flags1:", &gameInfo.scratchPad.itemFlags.itemFlags1, 'x', WatchInterpretation::_u64);
+ hudConsole->addWatch(page, "flags2:", &gameInfo.scratchPad.itemFlags.itemFlags2, 'x', WatchInterpretation::_u64);
+ hudConsole->addWatch(page, "flags3:", &gameInfo.scratchPad.itemFlags.itemFlags3, 'x', WatchInterpretation::_u64);
+ hudConsole->addWatch(page, "falgs4:", &gameInfo.scratchPad.itemFlags.itemFlags4, 'x', WatchInterpretation::_u64);*/
+
+ /*page = hudConsole->addPage("Warps 1");
+ hudConsole->addOption(page, "Mirror Chamber:", &gameInfo.scratchPad.allAreaNodes.Gerudo_Desert.unk_0[0xE], 0xFF);
+ hudConsole->addOption(page, "Gerudo Mesa:", &gameInfo.scratchPad.allAreaNodes.Gerudo_Desert.unk_0[0x9], 0xFF);
+ hudConsole->addOption(page, "Snowpeak Top:", &gameInfo.scratchPad.allAreaNodes.Snowpeak.unk_0[0x9], 0xFF);
+ hudConsole->addOption(page, "Sacred Grove:", &gameInfo.scratchPad.allAreaNodes.Sacred_Grove.unk_0[0x17], 0xFF);
+ hudConsole->addOption(page, "Eldin Bridge:", &gameInfo.scratchPad.allAreaNodes.Hyrule_Field.unk_0[0x17], 0xFF);
+ hudConsole->addOption(page, "Castle Town:", &gameInfo.scratchPad.allAreaNodes.Hyrule_Field.unk_0[0xB], 0xFF);
+ hudConsole->addOption(page, "Kakariko Gorge:", &gameInfo.scratchPad.allAreaNodes.Hyrule_Field.unk_0[0x9], 0xFF);
+ hudConsole->addOption(page, "Zoras Domain:", &gameInfo.scratchPad.allAreaNodes.Lanyru.unk_0[0xB], 0xFF);
+ hudConsole->addOption(page, "Lake Hylia:", &gameInfo.scratchPad.allAreaNodes.Lanyru.unk_0[0xA], 0xFF);
+ hudConsole->addOption(page, "Zora River:", &gameInfo.scratchPad.allAreaNodes.Lanyru.unk_0[0x9], 0xFF);
+
+ hudConsole->addWatch(page, "Mirror Chamber:", &gameInfo.scratchPad.allAreaNodes.Gerudo_Desert.unk_0[0xE], 'x', WatchInterpretation::_u8);//1
+ hudConsole->addWatch(page, "Gerudo Mesa:", &gameInfo.scratchPad.allAreaNodes.Gerudo_Desert.unk_0[0x9], 'x', WatchInterpretation::_u8);//32
+ hudConsole->addWatch(page, "Snowpeak Top:", &gameInfo.scratchPad.allAreaNodes.Snowpeak.unk_0[0x9], 'x', WatchInterpretation::_u8);//32
+ hudConsole->addWatch(page, "Sacred Grove:", &gameInfo.scratchPad.allAreaNodes.Sacred_Grove.unk_0[0x17], 'x', WatchInterpretation::_u8);//16
+ hudConsole->addWatch(page, "Eldin Bridge:", &gameInfo.scratchPad.allAreaNodes.Hyrule_Field.unk_0[0x17], 'x', WatchInterpretation::_u8);//8
+ hudConsole->addWatch(page, "Castle Town:", &gameInfo.scratchPad.allAreaNodes.Hyrule_Field.unk_0[0xB], 'x', WatchInterpretation::_u8);//8
+ hudConsole->addWatch(page, "Kakariko Gorge:", &gameInfo.scratchPad.allAreaNodes.Hyrule_Field.unk_0[0x9], 'x', WatchInterpretation::_u8);//32
+ hudConsole->addWatch(page, "Zoras Domain:", &gameInfo.scratchPad.allAreaNodes.Lanyru.unk_0[0xB], 'x', WatchInterpretation::_u8);//4
+ hudConsole->addWatch(page, "Lake Hylia:", &gameInfo.scratchPad.allAreaNodes.Lanyru.unk_0[0xA], 'x', WatchInterpretation::_u8);//4
+ hudConsole->addWatch(page, "Zora River:", &gameInfo.scratchPad.allAreaNodes.Lanyru.unk_0[0x9], 'x', WatchInterpretation::_u8);//32
+ page = hudConsole->addPage("Warps 2");
+ hudConsole->addOption(page, "Death Mountain:", &gameInfo.scratchPad.allAreaNodes.Eldin.unk_0[0x9], 0xFF);
+ hudConsole->addOption(page, "Kakariko:", &gameInfo.scratchPad.allAreaNodes.Eldin.unk_0[0x8], 0xFF);
+ hudConsole->addOption(page, "South Faron:", &gameInfo.scratchPad.allAreaNodes.Faron.unk_0[0x13], 0xFF);
+ hudConsole->addOption(page, "North Faron:", &gameInfo.scratchPad.allAreaNodes.Faron.unk_0[0xB], 0xFF);
+ hudConsole->addOption(page, "Ordon Spring:", &gameInfo.scratchPad.allAreaNodes.Ordon.unk_0[0xD], 0xFF);
+
+ hudConsole->addWatch(page, "Death Mountain:", &gameInfo.scratchPad.allAreaNodes.Eldin.unk_0[0x9], 'x', WatchInterpretation::_u8);//32
+ hudConsole->addWatch(page, "Kakariko:", &gameInfo.scratchPad.allAreaNodes.Eldin.unk_0[0x8], 'x', WatchInterpretation::_u8);//128
+ hudConsole->addWatch(page, "South Faron:", &gameInfo.scratchPad.allAreaNodes.Faron.unk_0[0x13], 'x', WatchInterpretation::_u8);//128
+ hudConsole->addWatch(page, "North Faron:", &gameInfo.scratchPad.allAreaNodes.Faron.unk_0[0xB], 'x', WatchInterpretation::_u8);//4
+ hudConsole->addWatch(page, "Ordon Spring:", &gameInfo.scratchPad.allAreaNodes.Ordon.unk_0[0xD], 'x', WatchInterpretation::_u8);//16*/
+
+
+ // save load
+ /*page = hudConsole->addPage("Save load");
+
+ hudConsole->addOption(page, "stage:", &stage, 78); //for testing only
+ hudConsole->addOption(page, "room:", &room, 60); //for testing only
+ hudConsole->addOption(page, "spawn:", &spawn, 0xFF); //for testing only
+ hudConsole->addOption(page, "state:", &state, 0xFF); //for testing only
+ hudConsole->addOption(page, "trigger:", &trigerLoadSave, 0x1); //for testing only*/
+
/*page = hudConsole->addPage("testing adr1");
@@ -408,32 +429,32 @@ namespace mod hudConsole->addWatch(page, "1D5:", &gameInfo.scratchPad.unk_1D5[0x0], 'x', WatchInterpretation::_u64);
hudConsole->addWatch(page, "1DD:", &gameInfo.scratchPad.unk_1D5[0x8], 'x', WatchInterpretation::_u32);
hudConsole->addWatch(page, "1E4:", &gameInfo.scratchPad.unk_1E4[0x0], 'x', WatchInterpretation::_u64);
- hudConsole->addWatch(page, "1EC:", &gameInfo.scratchPad.unk_1E4[0x8], 'x', WatchInterpretation::_u32);*/ - - - // Print - hudConsole->draw(); - system_console::setState(true, 0); - - // ================= - // | Custom events | - // ================= - - // Generate random data when a new game starts - eventListener->addLoadEvent(stage::allStages[Stage_Faron_Woods], 0x1, 0x15, 0xFF, 0xFF, tools::triggerRandomGenerator, event::LoadEventAccuracy::Stage_Room_Spawn); - - // Skip sewers when the load happens - eventListener->addLoadEvent(stage::allStages[Stage_Hyrule_Castle_Sewers], 0x0, 0x18, 0xFF, 0xFF, game_patch::skipSewers, event::LoadEventAccuracy::Stage_Room_Spawn); - - // Fix BiTE - //eventListener->addLoadEvent(stage::allStages[Stage_Title_Screen], 0x0, 0x17, 0xFF, 0xFF, game_patch::giveEpona, event::LoadEventAccuracy::Stage_Room_Spawn); - - // Kill spider at Link's house - eventListener->addLoadEvent(stage::allStages[Stage_Ordon_Village], 0x1, 0xFF, 0xFF, 0xFF, game_patch::killLinkHouseSpider, event::LoadEventAccuracy::Stage_Room); - - //Set Bublin Camp State - eventListener->addLoadEvent(stage::allStages[Stage_Bublin_Camp], 0xFF, 0xFF, 0x1, 0xFF, game_patch::setBublinState, event::LoadEventAccuracy::Stage_Room_Spawn); - + hudConsole->addWatch(page, "1EC:", &gameInfo.scratchPad.unk_1E4[0x8], 'x', WatchInterpretation::_u32);*/
+
+
+ // Print
+ hudConsole->draw();
+ system_console::setState(true, 0);
+
+ // =================
+ // | Custom events |
+ // =================
+
+ // Generate random data when a new game starts
+ eventListener->addLoadEvent(stage::allStages[Stage_Faron_Woods], 0x1, 0x15, 0xFF, 0xFF, tools::triggerRandomGenerator, event::LoadEventAccuracy::Stage_Room_Spawn);
+
+ // Skip sewers when the load happens
+ eventListener->addLoadEvent(stage::allStages[Stage_Hyrule_Castle_Sewers], 0x0, 0x18, 0xFF, 0xFF, game_patch::skipSewers, event::LoadEventAccuracy::Stage_Room_Spawn);
+
+ // Fix BiTE
+ //eventListener->addLoadEvent(stage::allStages[Stage_Title_Screen], 0x0, 0x17, 0xFF, 0xFF, game_patch::giveEpona, event::LoadEventAccuracy::Stage_Room_Spawn);
+
+ // Kill spider at Link's house
+ eventListener->addLoadEvent(stage::allStages[Stage_Ordon_Village], 0x1, 0xFF, 0xFF, 0xFF, game_patch::killLinkHouseSpider, event::LoadEventAccuracy::Stage_Room);
+
+ //Set Bublin Camp State
+ eventListener->addLoadEvent(stage::allStages[Stage_Bublin_Camp], 0xFF, 0xFF, 0x1, 0xFF, game_patch::setBublinState, event::LoadEventAccuracy::Stage_Room_Spawn);
+
//unlock HF gates and check for MDH
eventListener->addLoadEvent(stage::allStages[Stage_Hyrule_Field], 0xFF, 0xFF, 0xFF, 0xFF, game_patch::setFieldBits, event::LoadEventAccuracy::Stage);
@@ -442,9 +463,6 @@ namespace mod //skip MS Puzzle
eventListener->addLoadEvent(stage::allStages[Stage_Sacred_Grove], 0xFF, 0xFF, 0xFF, 0xFF, game_patch::setGroveFlags, event::LoadEventAccuracy::Stage);
-
- //skip Cart Escort
- eventListener->addLoadEvent(stage::allStages[Stage_Hyrule_Field], 0xC, 0x2, 0xFF, 0xFF, game_patch::skipCartEscort, event::LoadEventAccuracy::Stage_Room_Spawn);
//Fix Lanayru Softlock
eventListener->addLoadEvent(stage::allStages[Stage_Lake_Hylia], 0x0, 0x5, 0xE, 0xFF, game_patch::setLanayruWolf, event::LoadEventAccuracy::Stage_Room_Spawn);
@@ -462,7 +480,7 @@ namespace mod eventListener->addLoadEvent(stage::allStages[Stage_Lake_Hylia], 0x1, 0x16, 0xFF, 0xFF, game_patch::skipMDHCS, event::LoadEventAccuracy::Stage_Room_Spawn);
//Fix FT Boss Music
- eventListener->addLoadEvent(stage::allStages[Stage_Diababa], 0x32, 0x1, 0xFF, 0xFF, game_patch::fixFTBossMusic, event::LoadEventAccuracy::Stage);
+ eventListener->addLoadEvent(stage::allStages[Stage_Diababa], 0xFF, 0xFF, 0xFF, 0xFF, game_patch::fixFTBossMusic, event::LoadEventAccuracy::Stage);
// Allow Faron Escape
eventListener->addLoadEvent(stage::allStages[Stage_Faron_Woods], 0xFF, 0xFF, 0xFF, 0xFF, game_patch::allowFaronEscape, event::LoadEventAccuracy::Stage);
@@ -470,22 +488,53 @@ namespace mod //Skip MDH After Lanayru
eventListener->addLoadEvent(stage::allStages[Stage_Lake_Hylia], 0x1, 0x14, 0xFF, 0xFF, game_patch::skipMDH, event::LoadEventAccuracy::Stage_Room_Spawn);
- //Set Lantern gotten from Coro Flag
- eventListener->addLoadEvent(stage::allStages[Stage_Faron_Woods], 0xFF, 0x0, 0xFF, 0xFF, game_patch::setLanternFlag, event::LoadEventAccuracy::Stage_Room_Spawn);
+ //set Coro Lantern Flag
+ eventListener->addLoadEvent(stage::allStages[Stage_Faron_Woods], 0xFF, 0xFF, 0xFF, 0xFF, game_patch::setLanternFlag, event::LoadEventAccuracy::Stage_Room_Spawn);
+ //unset dungeon flags after beating dungeon
+ eventListener->addLoadEvent(stage::allStages[Stage_Forest_Temple], 0xFF, 0xFF, 0xFF, 0xFF, game_patch::fixFTState, event::LoadEventAccuracy::Stage_Room_Spawn);
+ eventListener->addLoadEvent(stage::allStages[Stage_Goron_Mines], 0xFF, 0xFF, 0xFF, 0xFF, game_patch::fixGMState, event::LoadEventAccuracy::Stage_Room_Spawn);
+ eventListener->addLoadEvent(stage::allStages[Stage_Lakebed_Temple], 0xFF, 0xFF, 0xFF, 0xFF, game_patch::fixLBTState, event::LoadEventAccuracy::Stage_Room_Spawn);
+ eventListener->addLoadEvent(stage::allStages[Stage_Arbiters_Grounds], 0xFF, 0xFF, 0xFF, 0xFF, game_patch::fixAGState, event::LoadEventAccuracy::Stage_Room_Spawn);
+ eventListener->addLoadEvent(stage::allStages[Stage_Snowpeak_Ruins], 0xFF, 0xFF, 0xFF, 0xFF, game_patch::fixSPRState, event::LoadEventAccuracy::Stage_Room_Spawn);
+ eventListener->addLoadEvent(stage::allStages[Stage_Temple_of_Time], 0xFF, 0xFF, 0xFF, 0xFF, game_patch::fixToTState, event::LoadEventAccuracy::Stage_Room_Spawn);
+ eventListener->addLoadEvent(stage::allStages[Stage_City_in_the_Sky], 0xFF, 0xFF, 0xFF, 0xFF, game_patch::fixCiTSState, event::LoadEventAccuracy::Stage_Room_Spawn);
+
+ //set dungeon and boss flags
+ eventListener->addLoadEvent(stage::allStages[Stage_Faron_Woods], 0xFF, 0xFF, 0xFF, 0xFF, game_patch::setFTDungeonFlag, event::LoadEventAccuracy::Stage_Room_Spawn);
+
+ eventListener->addLoadEvent(stage::allStages[Stage_Death_Mountain_Sumo_Hall], 0xFF, 0xFF, 0xFF, 0xFF, game_patch::setGMDungeonFlag, event::LoadEventAccuracy::Stage_Room_Spawn);
+ eventListener->addLoadEvent(stage::allStages[Stage_Kakariko_Village], 0xFF, 0xFF, 0xFF, 0xFF, game_patch::setGMDungeonFlag, event::LoadEventAccuracy::Stage_Room_Spawn);
+ eventListener->addLoadEvent(stage::allStages[Stage_Fyrus], 0xFF, 0xFF, 0xFF, 0xFF, game_patch::setGMBossFlag, event::LoadEventAccuracy::Stage_Room_Spawn);
+
+ eventListener->addLoadEvent(stage::allStages[Stage_Lake_Hylia], 0xFF, 0xFF, 0xFF, 0xFF, game_patch::setLakeDungeonFlags, event::LoadEventAccuracy::Stage_Room_Spawn);
+ eventListener->addLoadEvent(stage::allStages[Stage_Morpheel], 0xFF, 0xFF, 0xFF, 0xFF, game_patch::setLBTBossFlag, event::LoadEventAccuracy::Stage_Room_Spawn);
+
+ eventListener->addLoadEvent(stage::allStages[Stage_Bublin_Camp], 0xFF, 0xFF, 0xFF, 0xFF, game_patch::setAGDungeonFlag, event::LoadEventAccuracy::Stage_Room_Spawn);
+ eventListener->addLoadEvent(stage::allStages[Stage_Mirror_Chamber], 0xFF, 0xFF, 0xFF, 0xFF, game_patch::setAGDungeonFlag, event::LoadEventAccuracy::Stage_Room_Spawn);
+ eventListener->addLoadEvent(stage::allStages[Stage_Stallord], 0xFF, 0xFF, 0xFF, 0xFF, game_patch::setAGBossFlag, event::LoadEventAccuracy::Stage_Room_Spawn);
+
+ eventListener->addLoadEvent(stage::allStages[Stage_Snowpeak], 0xFF, 0xFF, 0xFF, 0xFF, game_patch::setSPRDungeonFlag, event::LoadEventAccuracy::Stage_Room_Spawn);
+ eventListener->addLoadEvent(stage::allStages[Stage_Blizzeta], 0xFF, 0xFF, 0xFF, 0xFF, game_patch::setSPRBossFlag, event::LoadEventAccuracy::Stage_Room_Spawn);
+
+ eventListener->addLoadEvent(stage::allStages[Stage_Sacred_Grove], 0xFF, 0xFF, 0xFF, 0xFF, game_patch::setToTDungeonFlag, event::LoadEventAccuracy::Stage_Room_Spawn);
+ eventListener->addLoadEvent(stage::allStages[Stage_Armogohma], 0xFF, 0xFF, 0xFF, 0xFF, game_patch::setToTBossFlag, event::LoadEventAccuracy::Stage_Room_Spawn);
+
+ eventListener->addLoadEvent(stage::allStages[Stage_Argorok], 0xFF, 0xFF, 0xFF, 0xFF, game_patch::setCiTSBossFlag, event::LoadEventAccuracy::Stage_Room_Spawn);
+
+ //Break Barrier
+ eventListener->addLoadEvent(stage::allStages[Stage_Castle_Town], 0xFF, 0xFF, 0xFF, 0xFF, game_patch::breakBarrier, event::LoadEventAccuracy::Stage_Room_Spawn);
+ // =================
+ // | Function Hooks |
+ // =================
+
+ fapGm_Execute_trampoline = patch::hookFunction(tp::f_ap_game::fapGm_Execute,
+ []()
+ {
+ global::modPtr->procNewFrame();
+ }
+ );
- - // ================= - // | Function Hooks | - // ================= - - fapGm_Execute_trampoline = patch::hookFunction(tp::f_ap_game::fapGm_Execute, - []() - { - global::modPtr->procNewFrame(); - } - ); - // Hook actor init function to use as a timing for placing custom chests as this function only creates actors at
// specific times
actorCommonLayerInit_trampoline = patch::hookFunction(tp::d_stage::actorCommonLayerInit,
@@ -511,80 +560,80 @@ namespace mod }
return global::modPtr->actorCommonLayerInit_trampoline(mStatus_roomControl, chunkTypeInfo, unk3, unk4);
}
- ); - - + );
+
+
putSave_trampoline = patch::hookFunction(tp::d_save::putSave,
[](tp::d_com_inf_game::GameInfo* gameInfoPtr, s32 areaID)
{
Singleton::getInstance()->hasActorCommonLayerRan = 0;
return global::modPtr->putSave_trampoline(gameInfoPtr, areaID);
}
- ); - - checkTreasureRupeeReturn_trampoline = patch::hookFunction(tp::d_a_alink::checkTreasureRupeeReturn, - [](void* unk1, s32 item) - { - return global::modPtr->procCheckTreasureRupeeReturn(unk1, item); - } - ); - - createItemForPresentDemo_trampoline = patch::hookFunction(tp::f_op_actor_mng::createItemForPresentDemo, - [](const float pos[3], s32 item, u8 unk3, s32 unk4, s32 unk5, const float unk6[3], const float unk7[3]) - { - // Call replacement function + );
+
+ checkTreasureRupeeReturn_trampoline = patch::hookFunction(tp::d_a_alink::checkTreasureRupeeReturn,
+ [](void* unk1, s32 item)
+ {
+ return global::modPtr->procCheckTreasureRupeeReturn(unk1, item);
+ }
+ );
+
+ createItemForPresentDemo_trampoline = patch::hookFunction(tp::f_op_actor_mng::createItemForPresentDemo,
+ [](const float pos[3], s32 item, u8 unk3, s32 unk4, s32 unk5, const float unk6[3], const float unk7[3])
+ {
+ // Call replacement function
/*char txt[50];
snprintf(txt, 50, "0 = %f 1 = %f 2 = %f", pos[0], pos[1], pos[2]);
strcpy(sysConsolePtr->consoleLine[20].line, txt);*/
- - item = global::modPtr->procItemCreateFunc(pos, item, "createItemForPresentDemo"); - - return global::modPtr->createItemForPresentDemo_trampoline(pos, item, unk3, unk4, unk5, unk6, unk7); - } - ); - - - createItemForTrBoxDemo_trampoline = patch::hookFunction(tp::f_op_actor_mng::createItemForTrBoxDemo, - [](const float pos[3], s32 item, s32 unk3, s32 unk4, const float unk5[3], const float unk6[3]) - { - // Call replacement function - item = global::modPtr->procItemCreateFunc(pos, item, "createItemForTrBoxDemo"); - - return global::modPtr->createItemForTrBoxDemo_trampoline(pos, item, unk3, unk4, unk5, unk6); - } - ); - //this function is called when the heart spawns, not when link gets it - //createItemForTrBoxDemo is called when heart container is gotten - createItemForBoss_trampoline = patch::hookFunction(tp::f_op_actor_mng::createItemForBoss, - [](const float pos[3], s32 item, s32 unk3, const float unk4[3], const float unk5[3], float unk6, float unk7, s32 unk8) - { - // Call replacement function - item = global::modPtr->procItemCreateFunc(pos, item, "createItemForBoss"); - - return global::modPtr->createItemForBoss_trampoline(pos, item, unk3, unk4, unk5, unk6, unk7, unk8); - } - ); - - createItemForMidBoss_trampoline = patch::hookFunction(tp::f_op_actor_mng::createItemForMidBoss, - [](const float pos[3], s32 item, s32 unk3, const float unk4[3], const float unk5[3], s32 unk6, s32 unk7) - { - // Call replacement function - item = global::modPtr->procItemCreateFunc(pos, item, "createItemForMidBoss"); - - return global::modPtr->createItemForMidBoss_trampoline(pos, item, unk3, unk4, unk5, unk6, unk7); - } - ); - - createItemForDirectGet_trampoline = patch::hookFunction(tp::f_op_actor_mng::createItemForDirectGet, - [](const float pos[3], s32 item, s32 unk3, const float unk4[3], const float unk5[3], float unk6, float unk7) - { - // Call replacement function - item = global::modPtr->procItemCreateFunc(pos, item, "createItemForDirectGet"); - - return global::modPtr->createItemForDirectGet_trampoline(pos, item, unk3, unk4, unk5, unk6, unk7); - } - ); - +
+ item = global::modPtr->procItemCreateFunc(pos, item, "createItemForPresentDemo");
+
+ return global::modPtr->createItemForPresentDemo_trampoline(pos, item, unk3, unk4, unk5, unk6, unk7);
+ }
+ );
+
+
+ createItemForTrBoxDemo_trampoline = patch::hookFunction(tp::f_op_actor_mng::createItemForTrBoxDemo,
+ [](const float pos[3], s32 item, s32 unk3, s32 unk4, const float unk5[3], const float unk6[3])
+ {
+ // Call replacement function
+ item = global::modPtr->procItemCreateFunc(pos, item, "createItemForTrBoxDemo");
+
+ return global::modPtr->createItemForTrBoxDemo_trampoline(pos, item, unk3, unk4, unk5, unk6);
+ }
+ );
+ //this function is called when the heart spawns, not when link gets it
+ //createItemForTrBoxDemo is called when heart container is gotten
+ createItemForBoss_trampoline = patch::hookFunction(tp::f_op_actor_mng::createItemForBoss,
+ [](const float pos[3], s32 item, s32 unk3, const float unk4[3], const float unk5[3], float unk6, float unk7, s32 unk8)
+ {
+ // Call replacement function
+ item = global::modPtr->procItemCreateFunc(pos, item, "createItemForBoss");
+
+ return global::modPtr->createItemForBoss_trampoline(pos, item, unk3, unk4, unk5, unk6, unk7, unk8);
+ }
+ );
+
+ createItemForMidBoss_trampoline = patch::hookFunction(tp::f_op_actor_mng::createItemForMidBoss,
+ [](const float pos[3], s32 item, s32 unk3, const float unk4[3], const float unk5[3], s32 unk6, s32 unk7)
+ {
+ // Call replacement function
+ item = global::modPtr->procItemCreateFunc(pos, item, "createItemForMidBoss");
+
+ return global::modPtr->createItemForMidBoss_trampoline(pos, item, unk3, unk4, unk5, unk6, unk7);
+ }
+ );
+
+ createItemForDirectGet_trampoline = patch::hookFunction(tp::f_op_actor_mng::createItemForDirectGet,
+ [](const float pos[3], s32 item, s32 unk3, const float unk4[3], const float unk5[3], float unk6, float unk7)
+ {
+ // Call replacement function
+ item = global::modPtr->procItemCreateFunc(pos, item, "createItemForDirectGet");
+
+ return global::modPtr->createItemForDirectGet_trampoline(pos, item, unk3, unk4, unk5, unk6, unk7);
+ }
+ );
+
createItemForSimpleDemo_trampoline = patch::hookFunction(tp::f_op_actor_mng::createItemForSimpleDemo,
[](const float pos[3], s32 item, s32 unk3, const float unk4[3], const float unk5[3], float unk6, float unk7)
{
@@ -594,36 +643,36 @@ namespace mod return global::modPtr->createItemForSimpleDemo_trampoline(pos, item, unk3, unk4, unk5, unk6, unk7);
}
);
- - - evt_control_Skipper_trampoline = patch::hookFunction(tp::evt_control::skipper, - [](void* evtPtr) - { - return global::modPtr->procEvtSkipper(evtPtr); - } - ); - - query022_trampoline = patch::hookFunction(tp::d_msg_flow::query022, - [](void* unk1, void* unk2, s32 unk3) - { - return global::modPtr->proc_query022(unk1, unk2, unk3); - } - ); - - do_link_trampoline = patch::hookFunction(tp::dynamic_link::do_link, - [](tp::dynamic_link::DynamicModuleControl* dmc) - { - return global::modPtr->procDoLink(dmc); - } - ); - - item_func_UTUWA_HEART_trampoline = patch::hookFunction(tp::d_item::item_func_UTUWA_HEART, - []() - { - return global::modPtr->procItem_func_UTUWA_HEART(); - } - ); - +
+
+ evt_control_Skipper_trampoline = patch::hookFunction(tp::evt_control::skipper,
+ [](void* evtPtr)
+ {
+ return global::modPtr->procEvtSkipper(evtPtr);
+ }
+ );
+
+ query022_trampoline = patch::hookFunction(tp::d_msg_flow::query022,
+ [](void* unk1, void* unk2, s32 unk3)
+ {
+ return global::modPtr->proc_query022(unk1, unk2, unk3);
+ }
+ );
+
+ do_link_trampoline = patch::hookFunction(tp::dynamic_link::do_link,
+ [](tp::dynamic_link::DynamicModuleControl* dmc)
+ {
+ return global::modPtr->procDoLink(dmc);
+ }
+ );
+
+ item_func_UTUWA_HEART_trampoline = patch::hookFunction(tp::d_item::item_func_UTUWA_HEART,
+ []()
+ {
+ return global::modPtr->procItem_func_UTUWA_HEART();
+ }
+ );
+
setItemBombNumCount_trampoline = patch::hookFunction(tp::d_com_inf_game::setItemBombNumCount,
[](u32 unk1, u8 bagNb, short amount)
{
@@ -715,11 +764,11 @@ namespace mod return global::modPtr->setItemBombNumCount_trampoline(unk1, bagNb, amount);
}
- ); - } - - void Mod::procNewFrame() - { + );
+ }
+
+ void Mod::procNewFrame()
+ {
float linkPos[3];
getPlayerPos(linkPos);
@@ -743,8 +792,13 @@ namespace mod snprintf(linkAngle, 30, "%d", static_cast<u16>(tp::d_map_path_dmap::getMapPlayerAngleY()));
}
- - +
+ if (gameInfo.nextStageVars.nextSpawnPoint != 0xFF)
+ {
+ lastGoodSpawn = gameInfo.nextStageVars.nextSpawnPoint;
+ }
+
+
if (gameInfo.ColorPtr != nullptr)
{
if (topToggle == 0)
@@ -793,199 +847,201 @@ namespace mod }
}
}*/
- } - - if (trigerLoadSave == 1) { - trigerLoadSave = 0; - tools::triggerSaveLoad(stage::allStages[stage], room, spawn, state); - } - - if (!tools::checkItemFlag(ItemFlags::Orange_Rupee)) - {//remove the item get animations for floor pickups (except silver rupee) + }
+
+ if (trigerLoadSave == 1) {
+ trigerLoadSave = 0;
+ tools::triggerSaveLoad(stage::allStages[stage], room, spawn, state);
+ }
+
+ if (!tools::checkItemFlag(ItemFlags::Orange_Rupee))
+ {//remove the item get animations for floor pickups (except silver rupee)
u32 loopAmount = sizeof(item::itemGetAnimationFlags) / sizeof(item::itemGetAnimationFlags[0]);
for (u32 i = 0; i < loopAmount; i++)
{
tools::setItemFlag(static_cast<ItemFlags>(item::itemGetAnimationFlags[i]));
- } - } - - if (enableNormalTime == 0 && setDay == 0) - {//set night - gameInfo.scratchPad.skyAngle = 0; - } - else if (enableNormalTime == 0 && setDay == 1) - {//set day - gameInfo.scratchPad.skyAngle = 180; - } - // Increment seed - if (!customSeed) - { - tools::getRandom(0); - } - - // If loading has started check for LoadEvents - if (isLoading) - { - eventListener->checkLoadEvents(); - } - - if (controller::checkForButtonInputSingleFrame((controller::PadInputs::Button_R | controller::PadInputs::Button_Z))) - { - // Toggle console - system_console::setState(!sysConsolePtr->consoleEnabled, 0); - } - else if (tp::d_a_alink::linkStatus)
+ }
+ }
+
+ if (enableNormalTime == 0 && setDay == 0)
+ {//set night
+ gameInfo.scratchPad.skyAngle = 0;
+ }
+ else if (enableNormalTime == 0 && setDay == 1)
+ {//set day
+ gameInfo.scratchPad.skyAngle = 180;
+ }
+ // Increment seed
+ if (!customSeed)
+ {
+ tools::getRandom(0);
+ }
+
+ // If loading has started check for LoadEvents
+ if (isLoading)
+ {
+ eventListener->checkLoadEvents();
+ }
+
+ if (controller::checkForButtonInputSingleFrame((controller::PadInputs::Button_R | controller::PadInputs::Button_Z)))
+ {
+ // Toggle console
+ system_console::setState(!sysConsolePtr->consoleEnabled, 0);
+ }
+
+ if (controller::checkForButtonInputSingleFrame(controller::PadInputs::Button_R | controller::PadInputs::Button_Y))
{
- if (enableQuickTransform == 1 && gameInfo.rButtonText == 0 && ((((gameInfo.aButtonText == 0x24) && gameInfo.eventSystem.eventFlag == 0) && tp::d_a_alink::linkStatus->status == 0x1)) &&
- (gameInfo.scratchPad.eventBits[0xD] & 0x4) != 0 && controller::checkForButtonInputSingleFrame(controller::PadInputs::Button_Z))
+ if (canQuickTransform())
{
- // Make sure Link is actually loaded
- tp::d_com_inf_game::LinkMapVars* linkMapPtr = gameInfo.linkMapPtr;
- if (linkMapPtr)
+ if (gameInfo.linkMapPtr->equippedItem != items::Ball_and_Chain)
{
- if (!((linkMapPtr->isTargeting & 0x400000) != 0 && gameInfo.scratchPad.form == 0))
+ // Transform
+ tp::d_a_alink::procCoMetamorphoseInit(gameInfo.linkMapPtr);
+ }
+
+ }
+ }
+
+ if (canChangeToD() && controller::checkForButtonInputSingleFrame(controller::PadInputs::Button_R | controller::PadInputs::Button_Y))
+ {
+ if (gameInfo.scratchPad.skyAngle >= 105 && gameInfo.scratchPad.skyAngle <= 284)
+ {
+ gameInfo.scratchPad.skyAngle = 285;
+ if (gameInfo.nextStageVars.nextSpawnPoint == 0xFF)
+ {
+ gameInfo.nextStageVars.nextSpawnPoint = lastGoodSpawn;
+ }
+ gameInfo.nextStageVars.triggerLoad |= 1;
+ }
+ else if (gameInfo.scratchPad.skyAngle >= 285 || gameInfo.scratchPad.skyAngle <= 104)
+ {
+ gameInfo.scratchPad.skyAngle = 105;
+ if (gameInfo.nextStageVars.nextSpawnPoint == 0xFF)
+ {
+ gameInfo.nextStageVars.nextSpawnPoint = lastGoodSpawn;
+ }
+ gameInfo.nextStageVars.triggerLoad |= 1;
+ }
+ }
+
+
+ if (sysConsolePtr->consoleEnabled)
+ {
+ if (controller::checkForButtonInputSingleFrame((controller::PadInputs::Button_R | controller::PadInputs::Button_Start)))
+ {
+ chestRandomizer->generate();
+ }
+
+ // Parse inputs of this frame
+ switch (tp::m_do_controller_pad::cpadInfo.buttonInputTrg)
+ {
+ case controller::PadInputs::Button_A:
+ hudConsole->performAction(ConsoleActions::Option_Increase);
+ break;
+
+ case controller::PadInputs::Button_X:
+ hudConsole->performAction(ConsoleActions::Option_Increase, 0x10);
+ break;
+
+ case controller::PadInputs::Button_B:
+ hudConsole->performAction(ConsoleActions::Option_Decrease);
+ break;
+
+ case controller::PadInputs::Button_Y:
+ hudConsole->performAction(ConsoleActions::Option_Decrease, 0x10);
+ break;
+
+ case controller::PadInputs::Button_DPad_Up:
+ hudConsole->performAction(ConsoleActions::Move_Up);
+ break;
+
+ case controller::PadInputs::Button_DPad_Down:
+ hudConsole->performAction(ConsoleActions::Move_Down);
+ break;
+
+ case controller::PadInputs::Button_DPad_Left:
+ hudConsole->performAction(ConsoleActions::Move_Left);
+ break;
+
+ case controller::PadInputs::Button_DPad_Right:
+ hudConsole->performAction(ConsoleActions::Move_Right);
+ break;
+ }
+ hudConsole->draw();
+ }
+
+ if (truePause && sysConsolePtr->consoleEnabled)
+ {
+ // Inputs handled, don't pass onto the game
+ tp::f_op_scene_req::freezeActors = 1;
+ tp::m_do_controller_pad::cpadInfo.buttonInputTrg = 0;
+ tp::m_do_controller_pad::cpadInfo.buttonInput = 0;
+ }
+ else
+ {
+ tp::f_op_scene_req::freezeActors = 0;
+ }
+
+ if (itemSearchID != lastItemSearchID)
+ {
+ lastItemSearchID = itemSearchID;
+
+ strcpy(itemSearchResults, "404");
+
+ for (u16 i = 0; i < chestRandomizer->totalChecks; i++)
+ {
+ item::ItemCheck* check = &item::checks[i];
+ if (check->destination)
+ {
+ if (check->destination->itemID == itemSearchID)
{
- // Transform
- tp::d_a_alink::procCoMetamorphoseInit(linkMapPtr);
+ // Found the source
+ snprintf(itemSearchResults, 40, "ID: %x Stage: %s Room: %d", check->itemID, check->stage, check->room);
}
}
- } - /*else if (tp::d_a_alink::linkStatus->status == 0x5 && gameInfo.aButtonText == 0x23 && controller::checkForButtonInputSingleFrame(controller::PadInputs::Button_Z) && Singleton::getInstance()->midnaTimeControl == 1 &&
- chestRandomizer->isStageTOD()) - { - if (gameInfo.scratchPad.skyAngle >= 180 && gameInfo.scratchPad.skyAngle <= 359) - { - gameInfo.scratchPad.skyAngle = 0; - gameInfo.nextStageVars.nextSpawnPoint = 0x0; - gameInfo.nextStageVars.triggerLoad |= 1; - } - else if (gameInfo.scratchPad.skyAngle >= 0 && gameInfo.scratchPad.skyAngle <= 179) - { - gameInfo.scratchPad.skyAngle = 180; - gameInfo.nextStageVars.nextSpawnPoint = 0x0; - gameInfo.nextStageVars.triggerLoad |= 1; - } - }*/ - } - - if (sysConsolePtr->consoleEnabled) - { - if (controller::checkForButtonInputSingleFrame((controller::PadInputs::Button_R | controller::PadInputs::Button_Start))) + }
+ }
+ else if (itemReverseSearchID != lastItemReverseSearchID)
+ {
+ lastItemReverseSearchID = itemReverseSearchID;
+
+ strcpy(itemReverseSearchResults, "404");
+
+ for (u16 i = 0; i < chestRandomizer->totalChecks; i++)
{
- chestRandomizer->generate(); - } - - // Parse inputs of this frame - switch (tp::m_do_controller_pad::cpadInfo.buttonInputTrg) - { - case controller::PadInputs::Button_A: - hudConsole->performAction(ConsoleActions::Option_Increase); - break; - - case controller::PadInputs::Button_X: - hudConsole->performAction(ConsoleActions::Option_Increase, 0x10); - break; - - case controller::PadInputs::Button_B: - hudConsole->performAction(ConsoleActions::Option_Decrease); - break; - - case controller::PadInputs::Button_Y: - hudConsole->performAction(ConsoleActions::Option_Decrease, 0x10); - break; - - case controller::PadInputs::Button_DPad_Up: - hudConsole->performAction(ConsoleActions::Move_Up); - break; - - case controller::PadInputs::Button_DPad_Down: - hudConsole->performAction(ConsoleActions::Move_Down); - break; - - case controller::PadInputs::Button_DPad_Left: - hudConsole->performAction(ConsoleActions::Move_Left); - break; - - case controller::PadInputs::Button_DPad_Right: - hudConsole->performAction(ConsoleActions::Move_Right); - break; - } - hudConsole->draw(); - } - - if (truePause && sysConsolePtr->consoleEnabled) - { - // Inputs handled, don't pass onto the game - tp::f_op_scene_req::freezeActors = 1; - tp::m_do_controller_pad::cpadInfo.buttonInputTrg = 0; - tp::m_do_controller_pad::cpadInfo.buttonInput = 0; - } - else - { - tp::f_op_scene_req::freezeActors = 0; - } - - if (itemSearchID != lastItemSearchID) - { - lastItemSearchID = itemSearchID; - - strcpy(itemSearchResults, "404"); - - for (u16 i = 0; i < chestRandomizer->totalChecks; i++) - { - item::ItemCheck* check = &item::checks[i]; - if (check->destination) - { - if (check->destination->itemID == itemSearchID) - { - // Found the source - snprintf(itemSearchResults, 40, "ID: %x Stage: %s Room: %d", check->itemID, check->stage, check->room); - } - } - } - } - else if (itemReverseSearchID != lastItemReverseSearchID) - { - lastItemReverseSearchID = itemReverseSearchID; - - strcpy(itemReverseSearchResults, "404"); - - for (u16 i = 0; i < chestRandomizer->totalChecks; i++) - { - item::ItemCheck* check = &item::checks[i]; - if (check->source) - { - if (check->source->itemID == itemReverseSearchID) - { - // Found the source - snprintf(itemReverseSearchResults, 40, "ID: %x Stage: %s Room: %d", check->itemID, check->stage, check->room); - } - } - } - } - - if (tp::d_a_alink::checkStageName(stage::allStages[Stage_Faron_Woods])) - { - if (0xB == gameInfo.eventSystem.currentEventID) - { - tools::setCutscene(false, false); - if (frame_counter == num_frames) - { - tools::setItemFlag(ItemFlags::Vessel_Of_Light_Faron);//set flag for vessel since we'll skip it by reloading - gameInfo.scratchPad.movingActors.exploredRegions.Eldin = 0b1; // Set Eldin Map Unlocked so we can warp there - tools::setCutscene(true, false); - } - else - { - frame_counter++; - } - } - else - { - frame_counter = 0; - } - } - + item::ItemCheck* check = &item::checks[i];
+ if (check->source)
+ {
+ if (check->source->itemID == itemReverseSearchID)
+ {
+ // Found the source
+ snprintf(itemReverseSearchResults, 40, "ID: %x Stage: %s Room: %d", check->itemID, check->stage, check->room);
+ }
+ }
+ }
+ }
+
+ if (tp::d_a_alink::checkStageName(stage::allStages[Stage_Faron_Woods]))
+ {
+ if (0xB == gameInfo.eventSystem.currentEventID)
+ {
+ tools::setCutscene(false, false);
+ if (frame_counter == num_frames)
+ {
+ tools::setItemFlag(ItemFlags::Vessel_Of_Light_Faron);//set flag for vessel since we'll skip it by reloading
+ gameInfo.scratchPad.movingActors.exploredRegions.Eldin = 0b1; // Set Eldin Map Unlocked so we can warp there
+ tools::setCutscene(true, false);
+ }
+ else
+ {
+ frame_counter++;
+ }
+ }
+ else
+ {
+ frame_counter = 0;
+ }
+ }
checkSearchID = (checkSearchID2 * 0x100) + checkSearchID1;
checkReverseSearchID = (checkReverseSearchID2 * 0x100) + checkReverseSearchID1;
if (checkSearchID != lastCheckSearchID)
@@ -1016,166 +1072,171 @@ namespace mod snprintf(checkReverseSearchResults, 40, "ID: %x Stage: %s Room: %d", check->destination->itemID, check->destination->stage, check->destination->room);
}
}
- } - - - /*if (gameInfo.scratchPad.unk_0[0x019] == 0) - { - const char* walletText = "Wallet"; - strncpy(tp::d_com_inf_game::wallet_text, walletText, sizeof(tp::d_com_inf_game::wallet_text) - 1); - - const char* walletDescription = "A wallet from your childhood. It holds up to 1,000 Rupees."; - strncpy(tp::d_com_inf_game::wallet_description, walletDescription, sizeof(tp::d_com_inf_game::wallet_description) - 1); - } - else if (gameInfo.scratchPad.unk_0[0x019] == 1) - { - const char* walletText = "Big Wallet"; - strncpy(tp::d_com_inf_game::wallet_text, walletText, sizeof(tp::d_com_inf_game::wallet_text) - 1); - - const char* walletDescription = "A wallet given to you by Agitha, princess of the insect kingdom. It can hold 5,000 Rupees."; - strncpy(tp::d_com_inf_game::wallet_description, walletDescription, sizeof(tp::d_com_inf_game::wallet_description) - 1); - } - else if (gameInfo.scratchPad.unk_0[0x019] == 2) - { - const char* walletText = "Giant Wallet"; - strncpy(tp::d_com_inf_game::wallet_text, walletText, sizeof(tp::d_com_inf_game::wallet_text) - 1); - - const char* walletDescription = "The wallet given by Agitha to benefactors of the insect kingdom. It can hold up to 9,999 Rupees."; - strncpy(tp::d_com_inf_game::wallet_description, walletDescription, sizeof(tp::d_com_inf_game::wallet_description) - 1); - }*/ - - - if(inputBuffering) - { - tp::m_do_controller_pad::cpadInfo.buttonInputTrg = tp::m_do_controller_pad::cpadInfo.buttonInput; - } - + }
+
+
+ /*if (gameInfo.scratchPad.unk_0[0x019] == 0)
+ {
+ const char* walletText = "Wallet";
+ strncpy(tp::d_com_inf_game::wallet_text, walletText, sizeof(tp::d_com_inf_game::wallet_text) - 1);
+
+ const char* walletDescription = "A wallet from your childhood. It holds up to 1,000 Rupees.";
+ strncpy(tp::d_com_inf_game::wallet_description, walletDescription, sizeof(tp::d_com_inf_game::wallet_description) - 1);
+ }
+ else if (gameInfo.scratchPad.unk_0[0x019] == 1)
+ {
+ const char* walletText = "Big Wallet";
+ strncpy(tp::d_com_inf_game::wallet_text, walletText, sizeof(tp::d_com_inf_game::wallet_text) - 1);
+
+ const char* walletDescription = "A wallet given to you by Agitha, princess of the insect kingdom. It can hold 5,000 Rupees.";
+ strncpy(tp::d_com_inf_game::wallet_description, walletDescription, sizeof(tp::d_com_inf_game::wallet_description) - 1);
+ }
+ else if (gameInfo.scratchPad.unk_0[0x019] == 2)
+ {
+ const char* walletText = "Giant Wallet";
+ strncpy(tp::d_com_inf_game::wallet_text, walletText, sizeof(tp::d_com_inf_game::wallet_text) - 1);
+
+ const char* walletDescription = "The wallet given by Agitha to benefactors of the insect kingdom. It can hold up to 9,999 Rupees.";
+ strncpy(tp::d_com_inf_game::wallet_description, walletDescription, sizeof(tp::d_com_inf_game::wallet_description) - 1);
+ }*/
+
+
+ if(inputBuffering)
+ {
+ tp::m_do_controller_pad::cpadInfo.buttonInputTrg = tp::m_do_controller_pad::cpadInfo.buttonInput;
+ }
+
giveAllStoryItems();
- reorderItemWheel(); - - allowShopItemsAnytime(); - - giveAllScents(); - - fixYetaAndYeto(); - - fixLBTBossDoor(); - - preventPoweringUpDomRod(); - - // Call original function - fapGm_Execute_trampoline(); - } - - s32 Mod::procItemCreateFunc(const float pos[3], s32 item, const char funcIdentifier[32]) - { - strcpy(lastItemFunc, funcIdentifier); - snprintf(lastItemDataID, 5, "0x%02x", item); - snprintf(lastItemDataX, 30, "%f", pos[0]); - snprintf(lastItemDataY, 30, "%f", pos[1]); - snprintf(lastItemDataZ, 30, "%f", pos[2]); - // Runs once when Link picks up an item with text and is holding it towards the camera + reorderItemWheel();
+
+ allowShopItemsAnytime();
+
+ giveAllScents();
+
+ fixYetaAndYeto();
+
+ fixLBTBossDoor();
+
+ preventPoweringUpDomRod();
+
+ // Call original function
+ fapGm_Execute_trampoline();
+
+ changeLanternColor();
+ //setFieldModels();
+ fixFTTotemMonkey();
+
+ }
+
+ s32 Mod::procItemCreateFunc(const float pos[3], s32 item, const char funcIdentifier[32])
+ {
+ strcpy(lastItemFunc, funcIdentifier);
+ snprintf(lastItemDataID, 5, "0x%02x", item);
+ snprintf(lastItemDataX, 30, "%f", pos[0]);
+ snprintf(lastItemDataY, 30, "%f", pos[1]);
+ snprintf(lastItemDataZ, 30, "%f", pos[2]);
+ // Runs once when Link picks up an item with text and is holding it towards the camera
if (randoEnabled && strcmp(funcIdentifier, "createItemForDirectGet") != 0 && strcmp(funcIdentifier, "createItemForBoss") != 0 &&
- strcmp(funcIdentifier, "createItemForMidBoss") != 0 && strcmp(funcIdentifier, "createItemForSimpleDemo") != 0) - { - item = chestRandomizer->getItemReplacement(pos, item); - } - - return item; - } - - bool Mod::procCheckTreasureRupeeReturn(void* unk1, s32 item) - { - // Allow to open - return false; - } - - s32 Mod::procEvtSkipper(void* evtPtr) - { - // Runs when the user tries to skip a Cutscene - if(tp::d_a_alink::checkStageName(stage::allStages[Stage_Sacred_Grove])) - { - // We're at sacred grove - if(0x2 == gameInfo.eventSystem.currentEventID) - { - // Master Sword cutscene - tools::setCutscene(true, false, cutscene_skip::onMasterSwordSkip); - } - } - - - // Call original function - return evt_control_Skipper_trampoline(evtPtr); - } - - bool Mod::proc_query022(void* unk1, void* unk2, s32 unk3) - { - // Check to see if currently in one of the Ordon interiors - if (tp::d_a_alink::checkStageName(stage::allStages[Stage_Ordon_Interiors])) - { - // Check to see if ckecking for the Iron Boots - u16 item = *reinterpret_cast<u16*>(reinterpret_cast<u32>(unk2) + 0x4); - - if (item == items::Item::Iron_Boots) - { - // Return false so that the door in Bo's house can be opened without having the Iron Boots - return false; - } - } - - // Call original function - return query022_trampoline(unk1, unk2, unk3); - } - - bool Mod::procDoLink(tp::dynamic_link::DynamicModuleControl* dmc) - { - // Call the original function immediately, as the REL file needs to be linked before applying patches - const bool result = do_link_trampoline(dmc); - - // Get the pointer to the current REL file - gc::OSModule::OSModuleInfo* moduleInfo = dmc->moduleInfo; - - // Make sure a REL file is actually loaded, as do_link will clear the pointer if something goes wrong - if (!moduleInfo) - { - return result; - } - - // Get the REL pointer as a raw u32, to use for overwrites - u32 relPtrRaw = reinterpret_cast<u32>(moduleInfo); - - // Modify the current REL file - switch (moduleInfo->id) // May want to set up enums or defines for the module ids - { - case 0x121: // d_a_npc_bouS.rel - Inside Bo's house - { - // Prevent Bo from talking after the chest has been opened - *reinterpret_cast<u32*>(relPtrRaw + 0x1A44) = 0x48000028; // b 0x28 - break; - } - default: - { - break; - } - } - - return result; - } - - void Mod::procItem_func_UTUWA_HEART() - { - /* Call the original function immediately, as the heart container flag - for the current area needs to be set before making any adjustments */ - item_func_UTUWA_HEART_trampoline(); - - // Clear the heart container flag if not currently in a boss room - if (!chestRandomizer->isStageBoss()) - { - gameInfo.localAreaNodes.dungeon.containerGotten = 0b0; - } - } - + strcmp(funcIdentifier, "createItemForMidBoss") != 0 && strcmp(funcIdentifier, "createItemForSimpleDemo") != 0)
+ {
+ item = chestRandomizer->getItemReplacement(pos, item);
+ }
+
+ return item;
+ }
+
+ bool Mod::procCheckTreasureRupeeReturn(void* unk1, s32 item)
+ {
+ // Allow to open
+ return false;
+ }
+
+ s32 Mod::procEvtSkipper(void* evtPtr)
+ {
+ // Runs when the user tries to skip a Cutscene
+ if(tp::d_a_alink::checkStageName(stage::allStages[Stage_Sacred_Grove]))
+ {
+ // We're at sacred grove
+ if(0x2 == gameInfo.eventSystem.currentEventID)
+ {
+ // Master Sword cutscene
+ tools::setCutscene(true, false, cutscene_skip::onMasterSwordSkip);
+ }
+ }
+
+
+ // Call original function
+ return evt_control_Skipper_trampoline(evtPtr);
+ }
+
+ bool Mod::proc_query022(void* unk1, void* unk2, s32 unk3)
+ {
+ // Check to see if currently in one of the Ordon interiors
+ if (tp::d_a_alink::checkStageName(stage::allStages[Stage_Ordon_Interiors]))
+ {
+ // Check to see if ckecking for the Iron Boots
+ u16 item = *reinterpret_cast<u16*>(reinterpret_cast<u32>(unk2) + 0x4);
+
+ if (item == items::Item::Iron_Boots)
+ {
+ // Return false so that the door in Bo's house can be opened without having the Iron Boots
+ return false;
+ }
+ }
+
+ // Call original function
+ return query022_trampoline(unk1, unk2, unk3);
+ }
+
+ bool Mod::procDoLink(tp::dynamic_link::DynamicModuleControl* dmc)
+ {
+ // Call the original function immediately, as the REL file needs to be linked before applying patches
+ const bool result = do_link_trampoline(dmc);
+
+ // Get the pointer to the current REL file
+ gc::OSModule::OSModuleInfo* moduleInfo = dmc->moduleInfo;
+
+ // Make sure a REL file is actually loaded, as do_link will clear the pointer if something goes wrong
+ if (!moduleInfo)
+ {
+ return result;
+ }
+
+ // Get the REL pointer as a raw u32, to use for overwrites
+ u32 relPtrRaw = reinterpret_cast<u32>(moduleInfo);
+
+ // Modify the current REL file
+ switch (moduleInfo->id) // May want to set up enums or defines for the module ids
+ {
+ case 0x121: // d_a_npc_bouS.rel - Inside Bo's house
+ {
+ // Prevent Bo from talking after the chest has been opened
+ *reinterpret_cast<u32*>(relPtrRaw + 0x1A44) = 0x48000028; // b 0x28
+ break;
+ }
+ default:
+ {
+ break;
+ }
+ }
+
+ return result;
+ }
+
+ void Mod::procItem_func_UTUWA_HEART()
+ {
+ /* Call the original function immediately, as the heart container flag
+ for the current area needs to be set before making any adjustments */
+ item_func_UTUWA_HEART_trampoline();
+
+ // Clear the heart container flag if not currently in a boss room
+ if (!chestRandomizer->isStageBoss())
+ {
+ gameInfo.localAreaNodes.dungeon.containerGotten = 0b0;
+ }
+ }
+
void Mod::giveAllScents()
{
//code to have all scents at once you need to unlock them tho
@@ -1253,8 +1314,8 @@ namespace mod gameInfo.scratchPad.equipedItems.scent = items::Item::Youths_Scent;
}
}
- } - + }
+
void Mod::giveAllStoryItems()
{
if (tp::d_a_alink::checkStageName(stage::allStages[Stage_Lake_Hylia]))
@@ -1264,14 +1325,20 @@ namespace mod gameInfo.scratchPad.itemWheel.Story = items::Item::Aurus_Memo;
}
}
- else if (tp::d_a_alink::checkStageName(stage::allStages[Stage_Snowpeak]) || tp::d_a_alink::checkStageName(stage::allStages[Stage_Kakariko_Graveyard]) ||
- tp::d_a_alink::checkStageName(stage::allStages[Stage_Zoras_Domain]))
+ else if (tp::d_a_alink::checkStageName(stage::allStages[Stage_Snowpeak]) || tp::d_a_alink::checkStageName(stage::allStages[Stage_Zoras_Domain]))
{
if (tools::checkItemFlag(ItemFlags::Asheis_Sketch))
{
gameInfo.scratchPad.itemWheel.Story = items::Item::Asheis_Sketch;
}
}
+ else if (tp::d_a_alink::checkStageName(stage::allStages[Stage_Kakariko_Graveyard]))
+ {
+ if (tools::checkItemFlag(ItemFlags::Asheis_Sketch))
+ {
+ gameInfo.scratchPad.itemWheel.Story = items::Item::NullItem;
+ }
+ }
else if (tp::d_a_alink::checkStageName(stage::allStages[Stage_Kakariko_Interiors]) && tp::d_kankyo::env_light.currentRoom == 0)
{
if (tools::checkItemFlag(ItemFlags::Ilias_Charm))
@@ -1712,15 +1779,15 @@ namespace mod if (gameInfo.scratchPad.itemWheel.Item_Slot != 0xFF)
{
gameInfo.scratchPad.itemSlotsOrder[currentSlot] = 0x7;
- currentSlot++; - } - + currentSlot++;
+ }
+
for (u16 i = currentSlot; i < sizeof(gameInfo.scratchPad.itemSlotsOrder) / sizeof(u8); i++)
{
gameInfo.scratchPad.itemSlotsOrder[currentSlot] = 0xFF;
- } - } - + }
+ }
+
void Mod::fixYetaAndYeto()
{
if (tools::checkItemFlag(ItemFlags::Bed_Key) && tp::d_a_alink::checkStageName("D_MN11"))
@@ -1741,8 +1808,8 @@ namespace mod yetaTrickOn = 0;
}
}
- } - + }
+
void Mod::fixLBTBossDoor()
{
if (tp::d_a_alink::checkStageName("D_MN01") && tp::d_kankyo::env_light.currentRoom == 3)
@@ -1760,8 +1827,19 @@ namespace mod LBTBossDoorTrickOn = 0;
}
}
- } - + }
+
+ void Mod::fixFTTotemMonkey()
+ {
+ if (tp::d_a_alink::checkStageName("D_MN05") && tp::d_kankyo::env_light.currentRoom == 12)
+ {
+ if ((gameInfo.localAreaNodes.unk_0[0xA] & 0x4) != 0)
+ {
+ gameInfo.localAreaNodes.unk_0[0x12] |= 0x1;
+ }
+ }
+ }
+
void Mod::preventPoweringUpDomRod()
{
if (gameInfo.scratchPad.itemWheel.Sky_Book == 0xFF && tools::checkItemFlag(ItemFlags::Ancient_Sky_Book_empty) && !tools::checkItemFlag(ItemFlags::Ancient_Sky_Book_partly_filled))
@@ -1775,8 +1853,8 @@ namespace mod gameInfo.scratchPad.itemWheel.Sky_Book = 0xFF;
}
}
- } - + }
+
bool Mod::isStageShop()
{
u8 totalShopStages = sizeof(stage::shopStages) / sizeof(stage::shopStages[0]);
@@ -1788,8 +1866,8 @@ namespace mod }
}
return false;
- } - + }
+
void Mod::doCustomTRESActor(void* mStatus_roomControl)
{
tp::d_com_inf_game::GameInfo* pGameInfo = &tp::d_com_inf_game::dComIfG_gameInfo;
@@ -1860,4 +1938,147 @@ namespace mod delete[] checks;
return;
}
+
+ void Mod::changeLanternColor() + { + + // set lantern variables + u32 lanternVariableAddress = reinterpret_cast<u32>(&tp::d_a_alink::lanternVariables);
+ *reinterpret_cast<u8*>(lanternVariableAddress + 0x3D) = reinterpret_cast<u8>(innerRed); + *reinterpret_cast<u8*>(lanternVariableAddress + 0x3F) = reinterpret_cast<u8>(innerGreen); + *reinterpret_cast<u8*>(lanternVariableAddress + 0x41) = reinterpret_cast<u8>(innerBlue); + *reinterpret_cast<u8*>(lanternVariableAddress + 0x43) = reinterpret_cast<u8>(outerRed); + *reinterpret_cast<u8*>(lanternVariableAddress + 0x45) = reinterpret_cast<u8>(outerGreen); + *reinterpret_cast<u8*>(lanternVariableAddress + 0x47) = reinterpret_cast<u8>(outerBlue); + }
+
+ bool Mod::canQuickTransform()
+ {
+ // Make sure Link is actually loaded
+ tp::d_com_inf_game::LinkMapVars* linkMapPtr = gameInfo.linkMapPtr;
+ //check to make sure that the quick transform variable is enabled
+ if (enableQuickTransform == 0)
+ {
+ strcpy(sysConsolePtr->consoleLine[20].line, "-> option disabled");
+ return false;
+ }
+
+ if (!linkMapPtr)
+ {
+ strcpy(sysConsolePtr->consoleLine[20].line, "-> no valid spot");
+ return false;
+ }
+
+ // Make sure Link currently isnt in an event
+ if (tp::d_a_alink::checkEventRun(linkMapPtr))
+ {
+ return false;
+ }
+
+ // Get the value for the alpha of the Z button
+ // Pointer path is not currently defined yet
+ u32 zButtonAlphaPtr = reinterpret_cast<u32>(tp::d_meter2_info::wZButtonPtr);
+ if (!zButtonAlphaPtr)
+ {
+ strcpy(sysConsolePtr->consoleLine[20].line, "-> alpha ptr 1 failed");
+ return false;
+ }
+
+ zButtonAlphaPtr = *reinterpret_cast<u32*>(zButtonAlphaPtr + 0x10C);
+ if (!zButtonAlphaPtr)
+ {
+ strcpy(sysConsolePtr->consoleLine[20].line, "-> alpha ptr 2 failed");
+ return false;
+ }
+
+ float zButtonAlpha = *reinterpret_cast<float*>(zButtonAlphaPtr + 0x720);
+
+ // Check if the Z button is dimmed
+ if (zButtonAlpha != 1.f)
+ {
+ // Z button is currently dimmed, so don't allow transforming
+ strcpy(sysConsolePtr->consoleLine[20].line, "-> z button dimmed");
+ return false;
+ }
+
+ //make sure link is not underwater, or talking to anyone
+ if (tp::d_a_alink::linkStatus->status != 0x1)
+ {
+ //link is in an invalid state
+ return false;
+ }
+
+ // Make sure you have the ability to warp
+ if ((gameInfo.scratchPad.eventBits[0xD] & 0x4) == 0)
+ {
+ return false;
+ }
+
+ //Check to see if link is riding a snowboard
+ if (tp::d_a_alink::checkBoardRide(linkMapPtr))
+ {
+ strcpy(sysConsolePtr->consoleLine[20].line, "-> on board");
+ return false;
+ }
+
+ //Check to see if link is riding the canoe
+ if (tp::d_a_alink::checkCanoeRide(linkMapPtr))
+ {
+ strcpy(sysConsolePtr->consoleLine[20].line, "-> on canoe");
+ return false;
+ }
+
+ //Check to see if link is riding Epona
+ if (tp::d_a_alink::checkHorseRide(linkMapPtr))
+ {
+ strcpy(sysConsolePtr->consoleLine[20].line, "-> on horse");
+ return false;
+ }
+
+ //Check to see if link is riding a boar
+ if (tp::d_a_alink::checkBoarRide(linkMapPtr))
+ {
+ strcpy(sysConsolePtr->consoleLine[20].line, "-> on boar");
+ return false;
+ }
+ + //Check to see if link is riding the spinner + if (tp::d_a_alink::checkSpinnerRide(linkMapPtr)) + { + strcpy(sysConsolePtr->consoleLine[20].line, "-> on spinner"); + return false; + }
+ strcpy(sysConsolePtr->consoleLine[20].line, "-> Can Transform");
+ return true;
+ }
+
+ bool Mod::canChangeToD()
+ {
+ if ((gameInfo.scratchPad.eventBits[0xD] & 0x4) == 0)
+ {
+ return false;
+ }
+
+ if (gameInfo.aButtonText != 0x23)
+ {
+ return false;
+ }
+
+ if (gameInfo.eventSystem.actionStatus != 0x29)
+ {
+ return false;
+ }
+
+ if (Singleton::getInstance()->midnaTimeControl == 0)
+ {
+ return false;
+ }
+
+ if (!chestRandomizer->isStageTOD())
+ {
+ return false;
+ }
+ return true;
+ }
+
} // namespace mod
\ No newline at end of file diff --git a/source/singleton.cpp b/source/singleton.cpp index 56bd916..74dc31f 100644 --- a/source/singleton.cpp +++ b/source/singleton.cpp @@ -35,6 +35,21 @@ namespace mod diababaMusicFixed = 0;
midnaTimeControl = 1;
hasActorCommonLayerRan = 0;
+ isEarlyToTEnabled = 0;
+ isEarlyPoTEnabled = 0;
+ isGMStoryPatch = 0;
+ isEarlyHCEnabled = 0;
+ startWithCrystal = 0;
+
+ //dungeon fixes
+ hasFTBeenBeaten = 0;
+ hasGMBeenBeaten = 0;
+ hasLBTBeenBeaten = 0;
+ hasAGBeenBeaten = 0;
+ hasSPRBeenBeaten = 0;
+ hasToTBeenBeaten = 0;
+ hasCiTSBeenBeaten = 0;
+ hasCiTSOoccoo = 0;
}
}
\ No newline at end of file diff --git a/source/stage.cpp b/source/stage.cpp index a61af8e..cb4d389 100644 --- a/source/stage.cpp +++ b/source/stage.cpp @@ -168,7 +168,7 @@ namespace mod::stage allStages[Stage_Hidden_Skill]
}; - const char* timeOfDayStages[19]
+ const char* timeOfDayStages[18]
{
allStages[Stage_Ordon_Village],
allStages[Stage_Ordon_Spring],
@@ -176,11 +176,10 @@ namespace mod::stage allStages[Stage_Faron_Woods],
allStages[Stage_Death_Mountain],
allStages[Stage_Kakariko_Graveyard],
+ allStages[Stage_Kakariko_Village],
allStages[Stage_Zoras_River],
allStages[Stage_Zoras_Domain],
allStages[Stage_Upper_Zoras_River],
- allStages[Stage_Snowpeak],
- allStages[Stage_Ordon_Ranch],
allStages[Stage_Lake_Hylia],
allStages[Stage_Outside_Castle_Town],
allStages[Stage_Hyrule_Field],
|