mirror of
https://github.com/HarbourMasters/Shipwright.git
synced 2025-08-22 14:23:44 -07:00
move logic out of z_en_box, use unordered_map
This commit is contained in:
parent
c9509e29e4
commit
7b47555cd8
6 changed files with 720 additions and 425 deletions
178
soh/soh/Enhancements/randomizer.cpp
Normal file
178
soh/soh/Enhancements/randomizer.cpp
Normal file
|
@ -0,0 +1,178 @@
|
|||
#include "randomizer.h"
|
||||
|
||||
Randomizer::Randomizer() {
|
||||
//todo something?
|
||||
}
|
||||
Randomizer::~Randomizer() {
|
||||
this->itemLocations.clear();
|
||||
}
|
||||
|
||||
void Randomizer::PopulateItemLocations(std::string spoilerfilename) {
|
||||
//todo actually read in locations from a spoilerfile
|
||||
this->itemLocations[KF_MIDOS_TOP_LEFT_CHEST] = KOKIRI_SWORD;
|
||||
this->itemLocations[KF_MIDOS_TOP_RIGHT_CHEST] = DEKU_SHIELD;
|
||||
this->itemLocations[KF_MIDOS_BOTTOM_LEFT_CHEST] = BOMBCHUS_20;
|
||||
this->itemLocations[KF_MIDOS_BOTTOM_RIGHT_CHEST] = ICE_TRAP;
|
||||
this->itemLocations[UNKNOWN_CHECK] = UNKNOWN_GET;
|
||||
}
|
||||
|
||||
GetItemID Randomizer::GetItemFromSceneAndParams(s16 sceneNum, s16 actorParams) {
|
||||
return GetItemFromGet(this->itemLocations[GetCheckFromSceneAndParams(sceneNum, actorParams)]);
|
||||
}
|
||||
|
||||
GetItemID Randomizer::GetItemFromGet(RandomizerGet randoGet) {
|
||||
// todo update this to handle progressive upgrades (need to pass in more than just randoGet)
|
||||
switch(randoGet) {
|
||||
case KOKIRI_SWORD:
|
||||
return GI_SWORD_KOKIRI;
|
||||
case DEKU_SHIELD:
|
||||
return GI_SHIELD_DEKU;
|
||||
case BOMBCHUS_20:
|
||||
return GI_BOMBCHUS_20;
|
||||
case ICE_TRAP:
|
||||
return GI_ICE_TRAP;
|
||||
case UNKNOWN_GET:
|
||||
return GI_NONE;
|
||||
}
|
||||
}
|
||||
|
||||
RandomizerCheck Randomizer::GetCheckFromSceneAndParams(s16 sceneNum, s16 actorParams) {
|
||||
switch(sceneNum) {
|
||||
case 40:
|
||||
switch(actorParams) {
|
||||
case 22944:
|
||||
return KF_MIDOS_TOP_LEFT_CHEST;
|
||||
case 22945:
|
||||
return KF_MIDOS_TOP_RIGHT_CHEST;
|
||||
case 22914:
|
||||
return KF_MIDOS_BOTTOM_LEFT_CHEST;
|
||||
case 22787:
|
||||
return KF_MIDOS_BOTTOM_RIGHT_CHEST;
|
||||
}
|
||||
case 85:
|
||||
switch(actorParams) {
|
||||
case 1248:
|
||||
return KF_KOKIRI_SWORD_CHEST;
|
||||
}
|
||||
case 62:
|
||||
switch(actorParams) {
|
||||
case 22988:
|
||||
return KF_STORMS_GROTTO_CHEST;
|
||||
case 22964:
|
||||
return LW_NEAR_SHORTCUTS_GROTTO_CHEST;
|
||||
case 31409:
|
||||
return SFM_WOLFOS_GROTTO_CHEST;
|
||||
case 22944:
|
||||
return HF_NEAR_MARKET_GROTTO_CHEST;
|
||||
case 22978:
|
||||
return HF_SOUTHEAST_GROTTO_CHEST;
|
||||
case 22947:
|
||||
return HF_OPEN_GROTTO_CHEST;
|
||||
case 22984:
|
||||
return KAK_OPEN_GROTTO_CHEST;
|
||||
case 31434:
|
||||
return KAK_REDEAD_GROTTO_CHEST;
|
||||
case 23255:
|
||||
return DMT_STORMS_GROTTO_CHEST;
|
||||
case 23802:
|
||||
return DMC_UPPER_GROTTO_CHEST;
|
||||
case 22985:
|
||||
return ZR_OPEN_GROTTO_CHEST;
|
||||
}
|
||||
case 64:
|
||||
switch(actorParams) {
|
||||
case 21824:
|
||||
return GRAVEYARD_SHIELD_GRAVE_CHEST;
|
||||
}
|
||||
case 63:
|
||||
switch(actorParams) {
|
||||
case -22592:
|
||||
return GRAVEYARD_HEART_PIECE_GRAVE_CHEST;
|
||||
}
|
||||
case 65:
|
||||
switch(actorParams) {
|
||||
case -32736:
|
||||
return GRAVEYARD_ROYAL_FAMILYS_TOMB_CHEST;
|
||||
}
|
||||
case 72:
|
||||
switch(actorParams) {
|
||||
case 4352:
|
||||
return GRAVEYARD_HOOKSHOT_CHEST;
|
||||
}
|
||||
case 96:
|
||||
switch(actorParams) {
|
||||
case 23201:
|
||||
return DMT_CHEST;
|
||||
}
|
||||
case 98:
|
||||
switch(actorParams) {
|
||||
case 23232:
|
||||
return GC_MAZE_LEFT_CHEST;
|
||||
case 23201:
|
||||
return GC_MAZE_RIGHT_CHEST;
|
||||
case 23202:
|
||||
return GC_MAZE_CENTER_CHEST;
|
||||
}
|
||||
case 88:
|
||||
switch(actorParams) {
|
||||
case -18496:
|
||||
return ZD_CHEST;
|
||||
}
|
||||
case 90:
|
||||
switch(actorParams) {
|
||||
case 23200:
|
||||
return GV_CHEST;
|
||||
}
|
||||
case 93:
|
||||
switch(actorParams) {
|
||||
case 1984:
|
||||
return GF_CHEST;
|
||||
}
|
||||
case 94:
|
||||
switch(actorParams) {
|
||||
case -30048:
|
||||
return WASTELAND_CHEST;
|
||||
}
|
||||
case 0:
|
||||
switch(actorParams) {
|
||||
case 2083:
|
||||
return DEKU_TREE_MAP_CHEST;
|
||||
case 22789:
|
||||
return DEKU_TREE_SLINGSHOT_ROOM_SIDE_CHEST;
|
||||
case 161:
|
||||
return DEKU_TREE_SLINGSHOT_CHEST;
|
||||
case 2050:
|
||||
return DEKU_TREE_COMPASS_CHEST;
|
||||
case 22790:
|
||||
return DEKU_TREE_COMPASS_ROOM_SIDE_CHEST;
|
||||
case 22788:
|
||||
return DEKU_TREE_BASEMENT_CHEST;
|
||||
}
|
||||
case 1:
|
||||
switch(actorParams) {
|
||||
case 2088:
|
||||
return DODONGOS_CAVERN_MAP_CHEST;
|
||||
case 2053:
|
||||
return DODONGOS_CAVERN_COMPASS_CHEST;
|
||||
case 22982:
|
||||
return DODONGOS_CAVERN_BOMB_FLOWER_PLATFORM_CHEST;
|
||||
case 1604:
|
||||
return DODONGOS_CAVERN_BOMB_BAG_CHEST;
|
||||
case 21802:
|
||||
return DODONGOS_CAVERN_END_OF_BRIDGE_CHEST;
|
||||
case 20512:
|
||||
return DODONGOS_CAVERN_BOSS_ROOM_CHEST;
|
||||
}
|
||||
case 2:
|
||||
switch(actorParams) {
|
||||
case 4289:
|
||||
return JABU_JABUS_BELLY_BOOMERANG_CHEST;
|
||||
case 6178:
|
||||
return JABU_JABUS_BELLY_MAP_CHEST;
|
||||
case -18428:
|
||||
return JABU_JABUS_BELLY_COMPASS_CHEST;
|
||||
}
|
||||
}
|
||||
|
||||
return UNKNOWN_CHECK;
|
||||
}
|
520
soh/soh/Enhancements/randomizer.h
Normal file
520
soh/soh/Enhancements/randomizer.h
Normal file
|
@ -0,0 +1,520 @@
|
|||
#ifndef RANDOMIZER_H
|
||||
#define RANDOMIZER_H
|
||||
|
||||
#include <unordered_map>
|
||||
#include <string>
|
||||
#include "../../include/ultra64.h"
|
||||
#include "../../include/z64item.h"
|
||||
|
||||
typedef enum {
|
||||
LINKS_POCKET,
|
||||
QUEEN_GOHMA,
|
||||
KING_DODONGO,
|
||||
BARINADE,
|
||||
PHANTOM_GANON,
|
||||
VOLVAGIA,
|
||||
MORPHA,
|
||||
BONGO_BONGO,
|
||||
TWINROVA,
|
||||
SONG_FROM_IMPA,
|
||||
SONG_FROM_MALON,
|
||||
SONG_FROM_SARIA,
|
||||
SONG_FROM_ROYAL_FAMILYS_TOMB,
|
||||
SONG_FROM_OCARINA_OF_TIME,
|
||||
SONG_FROM_WINDMILL,
|
||||
SHEIK_IN_FOREST,
|
||||
SHEIK_IN_CRATER,
|
||||
SHEIK_IN_ICE_CAVERN,
|
||||
SHEIK_AT_COLOSSUS,
|
||||
SHEIK_IN_KAKARIKO,
|
||||
SHEIK_AT_TEMPLE,
|
||||
KF_MIDOS_TOP_LEFT_CHEST,
|
||||
KF_MIDOS_TOP_RIGHT_CHEST,
|
||||
KF_MIDOS_BOTTOM_LEFT_CHEST,
|
||||
KF_MIDOS_BOTTOM_RIGHT_CHEST,
|
||||
KF_KOKIRI_SWORD_CHEST,
|
||||
KF_STORMS_GROTTO_CHEST,
|
||||
LW_OCARINA_MEMORY_GAME,
|
||||
LW_TARGET_IN_WOODS,
|
||||
LW_NEAR_SHORTCUTS_GROTTO_CHEST,
|
||||
DEKU_THEATER_SKULL_MASK,
|
||||
DEKU_THEATER_MASK_OF_TRUTH,
|
||||
LW_SKULL_KID,
|
||||
LW_DEKU_SCRUB_NEAR_BRIDGE,
|
||||
LW_DEKU_SCRUB_GROTTO_FRONT,
|
||||
SFM_WOLFOS_GROTTO_CHEST,
|
||||
HF_NEAR_MARKET_GROTTO_CHEST,
|
||||
HF_TEKTITE_GROTTO_FREESTANDING_POH,
|
||||
HF_SOUTHEAST_GROTTO_CHEST,
|
||||
HF_OPEN_GROTTO_CHEST,
|
||||
HF_DEKU_SCRUB_GROTTO,
|
||||
MARKET_SHOOTING_GALLERY_REWARD,
|
||||
MARKET_BOMBCHU_BOWLING_FIRST_PRIZE,
|
||||
MARKET_BOMBCHU_BOWLING_SECOND_PRIZE,
|
||||
MARKET_LOST_DOG,
|
||||
MARKET_TREASURE_CHEST_GAME_REWARD,
|
||||
MARKET_10_BIG_POES,
|
||||
TOT_LIGHT_ARROWS_CUTSCENE,
|
||||
HC_GREAT_FAIRY_REWARD,
|
||||
LLR_TALONS_CHICKENS,
|
||||
LLR_FREESTANDING_POH,
|
||||
KAK_ANJU_AS_CHILD,
|
||||
KAK_ANJU_AS_ADULT,
|
||||
KAK_IMPAS_HOUSE_FREESTANDING_POH,
|
||||
KAK_WINDMILL_FREESTANDING_POH,
|
||||
KAK_MAN_ON_ROOF,
|
||||
KAK_OPEN_GROTTO_CHEST,
|
||||
KAK_REDEAD_GROTTO_CHEST,
|
||||
KAK_SHOOTING_GALLERY_REWARD,
|
||||
KAK_10_GOLD_SKULLTULA_REWARD,
|
||||
KAK_20_GOLD_SKULLTULA_REWARD,
|
||||
KAK_30_GOLD_SKULLTULA_REWARD,
|
||||
KAK_40_GOLD_SKULLTULA_REWARD,
|
||||
KAK_50_GOLD_SKULLTULA_REWARD,
|
||||
GRAVEYARD_SHIELD_GRAVE_CHEST,
|
||||
GRAVEYARD_HEART_PIECE_GRAVE_CHEST,
|
||||
GRAVEYARD_ROYAL_FAMILYS_TOMB_CHEST,
|
||||
GRAVEYARD_FREESTANDING_POH,
|
||||
GRAVEYARD_DAMPE_GRAVEDIGGING_TOUR,
|
||||
GRAVEYARD_HOOKSHOT_CHEST,
|
||||
GRAVEYARD_DAMPE_RACE_FREESTANDING_POH,
|
||||
DMT_FREESTANDING_POH,
|
||||
DMT_CHEST,
|
||||
DMT_STORMS_GROTTO_CHEST,
|
||||
DMT_GREAT_FAIRY_REWARD,
|
||||
DMT_BIGGORON,
|
||||
GC_DARUNIAS_JOY,
|
||||
GC_POT_FREESTANDING_POH,
|
||||
GC_ROLLING_GORON_AS_CHILD,
|
||||
GC_ROLLING_GORON_AS_ADULT,
|
||||
GC_MAZE_LEFT_CHEST,
|
||||
GC_MAZE_RIGHT_CHEST,
|
||||
GC_MAZE_CENTER_CHEST,
|
||||
DMC_VOLCANO_FREESTANDING_POH,
|
||||
DMC_WALL_FREESTANDING_POH,
|
||||
DMC_UPPER_GROTTO_CHEST,
|
||||
DMC_GREAT_FAIRY_REWARD,
|
||||
ZR_OPEN_GROTTO_CHEST,
|
||||
ZR_FROGS_IN_THE_RAIN,
|
||||
ZR_FROGS_OCARINA_GAME,
|
||||
ZR_NEAR_OPEN_GROTTO_FREESTANDING_POH,
|
||||
ZR_NEAR_DOMAIN_FREESTANDING_POH,
|
||||
ZD_DIVING_MINIGAME,
|
||||
ZD_CHEST,
|
||||
ZD_KING_ZORA_THAWED,
|
||||
ZF_GREAT_FAIRY_REWARD,
|
||||
ZF_ICEBERG_FREESTANDING_POH,
|
||||
ZF_BOTTOM_FREESTANDING_POH,
|
||||
LH_UNDERWATER_ITEM,
|
||||
LH_CHILD_FISHING,
|
||||
LH_ADULT_FISHING,
|
||||
LH_LAB_DIVE,
|
||||
LH_FREESTANDING_POH,
|
||||
LH_SUN,
|
||||
GV_CRATE_FREESTANDING_POH,
|
||||
GV_WATERFALL_FREESTANDING_POH,
|
||||
GV_CHEST,
|
||||
GF_CHEST,
|
||||
GF_HBA_1000_POINTS,
|
||||
GF_HBA_1500_POINTS,
|
||||
WASTELAND_CHEST,
|
||||
COLOSSUS_GREAT_FAIRY_REWARD,
|
||||
COLOSSUS_FREESTANDING_POH,
|
||||
OGC_GREAT_FAIRY_REWARD,
|
||||
DEKU_TREE_MAP_CHEST,
|
||||
DEKU_TREE_SLINGSHOT_ROOM_SIDE_CHEST,
|
||||
DEKU_TREE_SLINGSHOT_CHEST,
|
||||
DEKU_TREE_COMPASS_CHEST,
|
||||
DEKU_TREE_COMPASS_ROOM_SIDE_CHEST,
|
||||
DEKU_TREE_BASEMENT_CHEST,
|
||||
DEKU_TREE_QUEEN_GOHMA_HEART,
|
||||
DODONGOS_CAVERN_MAP_CHEST,
|
||||
DODONGOS_CAVERN_COMPASS_CHEST,
|
||||
DODONGOS_CAVERN_BOMB_FLOWER_PLATFORM_CHEST,
|
||||
DODONGOS_CAVERN_BOMB_BAG_CHEST,
|
||||
DODONGOS_CAVERN_END_OF_BRIDGE_CHEST,
|
||||
DODONGOS_CAVERN_BOSS_ROOM_CHEST,
|
||||
DODONGOS_CAVERN_KING_DODONGO_HEART,
|
||||
JABU_JABUS_BELLY_BOOMERANG_CHEST,
|
||||
JABU_JABUS_BELLY_MAP_CHEST,
|
||||
JABU_JABUS_BELLY_COMPASS_CHEST,
|
||||
JABU_JABUS_BELLY_BARINADE_HEART,
|
||||
BOTTOM_OF_THE_WELL_FRONT_LEFT_FAKE_WALL_CHEST,
|
||||
BOTTOM_OF_THE_WELL_FRONT_CENTER_BOMBABLE_CHEST,
|
||||
BOTTOM_OF_THE_WELL_BACK_LEFT_BOMBABLE_CHEST,
|
||||
BOTTOM_OF_THE_WELL_UNDERWATER_LEFT_CHEST,
|
||||
BOTTOM_OF_THE_WELL_FREESTANDING_KEY,
|
||||
BOTTOM_OF_THE_WELL_COMPASS_CHEST,
|
||||
BOTTOM_OF_THE_WELL_CENTER_SKULLTULA_CHEST,
|
||||
BOTTOM_OF_THE_WELL_RIGHT_BOTTOM_FAKE_WALL_CHEST,
|
||||
BOTTOM_OF_THE_WELL_FIRE_KEESE_CHEST,
|
||||
BOTTOM_OF_THE_WELL_LIKE_LIKE_CHEST,
|
||||
BOTTOM_OF_THE_WELL_MAP_CHEST,
|
||||
BOTTOM_OF_THE_WELL_UNDERWATER_FRONT_CHEST,
|
||||
BOTTOM_OF_THE_WELL_INVISIBLE_CHEST,
|
||||
BOTTOM_OF_THE_WELL_LENS_OF_TRUTH_CHEST,
|
||||
FOREST_TEMPLE_FIRST_ROOM_CHEST,
|
||||
FOREST_TEMPLE_FIRST_STALFOS_CHEST,
|
||||
FOREST_TEMPLE_RAISED_ISLAND_COURTYARD_CHEST,
|
||||
FOREST_TEMPLE_MAP_CHEST,
|
||||
FOREST_TEMPLE_WELL_CHEST,
|
||||
FOREST_TEMPLE_EYE_SWITCH_CHEST,
|
||||
FOREST_TEMPLE_BOSS_KEY_CHEST,
|
||||
FOREST_TEMPLE_FLOORMASTER_CHEST,
|
||||
FOREST_TEMPLE_RED_POE_CHEST,
|
||||
FOREST_TEMPLE_BOW_CHEST,
|
||||
FOREST_TEMPLE_BLUE_POE_CHEST,
|
||||
FOREST_TEMPLE_FALLING_CEILING_ROOM_CHEST,
|
||||
FOREST_TEMPLE_BASEMENT_CHEST,
|
||||
FOREST_TEMPLE_PHANTOM_GANON_HEART,
|
||||
FIRE_TEMPLE_NEAR_BOSS_CHEST,
|
||||
FIRE_TEMPLE_FLARE_DANCER_CHEST,
|
||||
FIRE_TEMPLE_BOSS_KEY_CHEST,
|
||||
FIRE_TEMPLE_BIG_LAVA_ROOM_LOWER_OPEN_DOOR_CHEST,
|
||||
FIRE_TEMPLE_BIG_LAVA_ROOM_BLOCKED_DOOR_CHEST,
|
||||
FIRE_TEMPLE_BOULDER_MAZE_LOWER_CHEST,
|
||||
FIRE_TEMPLE_BOULDER_MAZE_SIDE_ROOM_CHEST,
|
||||
FIRE_TEMPLE_MAP_CHEST,
|
||||
FIRE_TEMPLE_BOULDER_MAZE_SHORTCUT_CHEST,
|
||||
FIRE_TEMPLE_BOULDER_MAZE_UPPER_CHEST,
|
||||
FIRE_TEMPLE_SCARECROW_CHEST,
|
||||
FIRE_TEMPLE_COMPASS_CHEST,
|
||||
FIRE_TEMPLE_MEGATON_HAMMER_CHEST,
|
||||
FIRE_TEMPLE_HIGHEST_GORON_CHEST,
|
||||
FIRE_TEMPLE_VOLVAGIA_HEART,
|
||||
WATER_TEMPLE_COMPASS_CHEST,
|
||||
WATER_TEMPLE_MAP_CHEST,
|
||||
WATER_TEMPLE_CRACKED_WALL_CHEST,
|
||||
WATER_TEMPLE_TORCHES_CHEST,
|
||||
WATER_TEMPLE_BOSS_KEY_CHEST,
|
||||
WATER_TEMPLE_CENTRAL_PILLAR_CHEST,
|
||||
WATER_TEMPLE_CENTRAL_BOW_TARGET_CHEST,
|
||||
WATER_TEMPLE_LONGSHOT_CHEST,
|
||||
WATER_TEMPLE_RIVER_CHEST,
|
||||
WATER_TEMPLE_DRAGON_CHEST,
|
||||
WATER_TEMPLE_MORPHA_HEART,
|
||||
SHADOW_TEMPLE_MAP_CHEST,
|
||||
SHADOW_TEMPLE_HOVER_BOOTS_CHEST,
|
||||
SHADOW_TEMPLE_COMPASS_CHEST,
|
||||
SHADOW_TEMPLE_EARLY_SILVER_RUPEE_CHEST,
|
||||
SHADOW_TEMPLE_INVISIBLE_BLADES_VISIBLE_CHEST,
|
||||
SHADOW_TEMPLE_INVISIBLE_BLADES_INVISIBLE_CHEST,
|
||||
SHADOW_TEMPLE_FALLING_SPIKES_LOWER_CHEST,
|
||||
SHADOW_TEMPLE_FALLING_SPIKES_UPPER_CHEST,
|
||||
SHADOW_TEMPLE_FALLING_SPIKES_SWITCH_CHEST,
|
||||
SHADOW_TEMPLE_INVISIBLE_SPIKES_CHEST,
|
||||
SHADOW_TEMPLE_FREESTANDING_KEY,
|
||||
SHADOW_TEMPLE_WIND_HINT_CHEST,
|
||||
SHADOW_TEMPLE_AFTER_WIND_ENEMY_CHEST,
|
||||
SHADOW_TEMPLE_AFTER_WIND_HIDDEN_CHEST,
|
||||
SHADOW_TEMPLE_SPIKE_WALLS_LEFT_CHEST,
|
||||
SHADOW_TEMPLE_BOSS_KEY_CHEST,
|
||||
SHADOW_TEMPLE_INVISIBLE_FLOORMASTER_CHEST,
|
||||
SHADOW_TEMPLE_BONGO_BONGO_HEART,
|
||||
SPIRIT_TEMPLE_CHILD_BRIDGE_CHEST,
|
||||
SPIRIT_TEMPLE_CHILD_EARLY_TORCHES_CHEST,
|
||||
SPIRIT_TEMPLE_CHILD_CLIMB_NORTH_CHEST,
|
||||
SPIRIT_TEMPLE_CHILD_CLIMB_EAST_CHEST,
|
||||
SPIRIT_TEMPLE_MAP_CHEST,
|
||||
SPIRIT_TEMPLE_SUN_BLOCK_ROOM_CHEST,
|
||||
SPIRIT_TEMPLE_SILVER_GAUNTLETS_CHEST,
|
||||
SPIRIT_TEMPLE_COMPASS_CHEST,
|
||||
SPIRIT_TEMPLE_EARLY_ADULT_RIGHT_CHEST,
|
||||
SPIRIT_TEMPLE_FIRST_MIRROR_LEFT_CHEST,
|
||||
SPIRIT_TEMPLE_FIRST_MIRROR_RIGHT_CHEST,
|
||||
SPIRIT_TEMPLE_STATUE_ROOM_NORTHEAST_CHEST,
|
||||
SPIRIT_TEMPLE_STATUE_ROOM_HAND_CHEST,
|
||||
SPIRIT_TEMPLE_NEAR_FOUR_ARMOS_CHEST,
|
||||
SPIRIT_TEMPLE_HALLWAY_RIGHT_INVISIBLE_CHEST,
|
||||
SPIRIT_TEMPLE_HALLWAY_LEFT_INVISIBLE_CHEST,
|
||||
SPIRIT_TEMPLE_MIRROR_SHIELD_CHEST,
|
||||
SPIRIT_TEMPLE_BOSS_KEY_CHEST,
|
||||
SPIRIT_TEMPLE_TOPMOST_CHEST,
|
||||
SPIRIT_TEMPLE_TWINROVA_HEART,
|
||||
ICE_CAVERN_MAP_CHEST,
|
||||
ICE_CAVERN_COMPASS_CHEST,
|
||||
ICE_CAVERN_FREESTANDING_POH,
|
||||
ICE_CAVERN_IRON_BOOTS_CHEST,
|
||||
GERUDO_TRAINING_GROUND_LOBBY_LEFT_CHEST,
|
||||
GERUDO_TRAINING_GROUND_LOBBY_RIGHT_CHEST,
|
||||
GERUDO_TRAINING_GROUND_STALFOS_CHEST,
|
||||
GERUDO_TRAINING_GROUND_BEFORE_HEAVY_BLOCK_CHEST,
|
||||
GERUDO_TRAINING_GROUND_HEAVY_BLOCK_FIRST_CHEST,
|
||||
GERUDO_TRAINING_GROUND_HEAVY_BLOCK_SECOND_CHEST,
|
||||
GERUDO_TRAINING_GROUND_HEAVY_BLOCK_THIRD_CHEST,
|
||||
GERUDO_TRAINING_GROUND_HEAVY_BLOCK_FOURTH_CHEST,
|
||||
GERUDO_TRAINING_GROUND_EYE_STATUE_CHEST,
|
||||
GERUDO_TRAINING_GROUND_NEAR_SCARECROW_CHEST,
|
||||
GERUDO_TRAINING_GROUND_HAMMER_ROOM_CLEAR_CHEST,
|
||||
GERUDO_TRAINING_GROUND_HAMMER_ROOM_SWITCH_CHEST,
|
||||
GERUDO_TRAINING_GROUND_FREESTANDING_KEY,
|
||||
GERUDO_TRAINING_GROUND_MAZE_RIGHT_CENTRAL_CHEST,
|
||||
GERUDO_TRAINING_GROUND_MAZE_RIGHT_SIDE_CHEST,
|
||||
GERUDO_TRAINING_GROUND_UNDERWATER_SILVER_RUPEE_CHEST,
|
||||
GERUDO_TRAINING_GROUND_BEAMOS_CHEST,
|
||||
GERUDO_TRAINING_GROUND_HIDDEN_CEILING_CHEST,
|
||||
GERUDO_TRAINING_GROUND_MAZE_PATH_FIRST_CHEST,
|
||||
GERUDO_TRAINING_GROUND_MAZE_PATH_SECOND_CHEST,
|
||||
GERUDO_TRAINING_GROUND_MAZE_PATH_THIRD_CHEST,
|
||||
GERUDO_TRAINING_GROUND_MAZE_PATH_FINAL_CHEST,
|
||||
GANONS_CASTLE_FOREST_TRIAL_CHEST,
|
||||
GANONS_CASTLE_WATER_TRIAL_LEFT_CHEST,
|
||||
GANONS_CASTLE_WATER_TRIAL_RIGHT_CHEST,
|
||||
GANONS_CASTLE_SHADOW_TRIAL_FRONT_CHEST,
|
||||
GANONS_CASTLE_SHADOW_TRIAL_GOLDEN_GAUNTLETS_CHEST,
|
||||
GANONS_CASTLE_LIGHT_TRIAL_FIRST_LEFT_CHEST,
|
||||
GANONS_CASTLE_LIGHT_TRIAL_SECOND_LEFT_CHEST,
|
||||
GANONS_CASTLE_LIGHT_TRIAL_THIRD_LEFT_CHEST,
|
||||
GANONS_CASTLE_LIGHT_TRIAL_FIRST_RIGHT_CHEST,
|
||||
GANONS_CASTLE_LIGHT_TRIAL_SECOND_RIGHT_CHEST,
|
||||
GANONS_CASTLE_LIGHT_TRIAL_THIRD_RIGHT_CHEST,
|
||||
GANONS_CASTLE_LIGHT_TRIAL_INVISIBLE_ENEMIES_CHEST,
|
||||
GANONS_CASTLE_LIGHT_TRIAL_LULLABY_CHEST,
|
||||
GANONS_CASTLE_SPIRIT_TRIAL_CRYSTAL_SWITCH_CHEST,
|
||||
GANONS_CASTLE_SPIRIT_TRIAL_INVISIBLE_CHEST,
|
||||
GANONS_TOWER_BOSS_KEY_CHEST,
|
||||
UNKNOWN_CHECK
|
||||
} RandomizerCheck;
|
||||
|
||||
// based on https://github.com/TestRunnerSRL/OoT-Randomizer/blob/e337d7f603b91a6bacb618fb32cc7fd70ed9ffca/ItemList.py
|
||||
typedef enum {
|
||||
BOMBS_5,
|
||||
DEKU_NUTS_5,
|
||||
BOMBCHUS_10,
|
||||
BOOMERANG,
|
||||
DEKU_STICK_1,
|
||||
LENS_OF_TRUTH,
|
||||
MEGATON_HAMMER,
|
||||
COJIRO,
|
||||
BOTTLE,
|
||||
BOTTLE_WITH_MILK,
|
||||
RUTOS_LETTER,
|
||||
DELIVER_LETTER,
|
||||
SELL_BIG_POE,
|
||||
MAGIC_BEAN,
|
||||
SKULL_MASK,
|
||||
SPOOKY_MASK,
|
||||
KEATON_MASK,
|
||||
BUNNY_HOOD,
|
||||
MASK_OF_TRUTH,
|
||||
POCKET_EGG,
|
||||
POCKET_CUCCO,
|
||||
ODD_MUSHROOM,
|
||||
ODD_POTION,
|
||||
POACHERS_SAW,
|
||||
BROKEN_SWORD,
|
||||
PRESCRIPTION,
|
||||
EYEBALL_FROG,
|
||||
EYEDROPS,
|
||||
CLAIM_CHECK,
|
||||
KOKIRI_SWORD,
|
||||
GIANTS_KNIFE,
|
||||
DEKU_SHIELD,
|
||||
HYLIAN_SHIELD,
|
||||
MIRROR_SHIELD,
|
||||
GORON_TUNIC,
|
||||
ZORA_TUNIC,
|
||||
IRON_BOOTS,
|
||||
HOVER_BOOTS,
|
||||
STONE_OF_AGONY,
|
||||
GERUDO_MEMBERSHIP_CARD,
|
||||
HEART_CONTAINER,
|
||||
PIECE_OF_HEART,
|
||||
BOSS_KEY,
|
||||
COMPASS,
|
||||
MAP,
|
||||
SMALL_KEY,
|
||||
WEIRD_EGG,
|
||||
RECOVERY_HEART,
|
||||
ARROWS_5,
|
||||
ARROWS_10,
|
||||
ARROWS_30,
|
||||
RUPEE_1,
|
||||
RUPEES_5,
|
||||
RUPEES_20,
|
||||
MILK,
|
||||
GORON_MASK,
|
||||
ZORA_MASK,
|
||||
GERUDO_MASK,
|
||||
RUPEES_50,
|
||||
RUPEES_200,
|
||||
BIGGORON_SWORD,
|
||||
FIRE_ARROWS,
|
||||
ICE_ARROWS,
|
||||
LIGHT_ARROWS,
|
||||
GOLD_SKULLTULA_TOKEN,
|
||||
DINS_FIRE,
|
||||
NAYRUS_LOVE,
|
||||
FARORES_WIND,
|
||||
DEKU_NUTS_10,
|
||||
BOMBS_10,
|
||||
BOMBS_20,
|
||||
DEKU_SEEDS_30,
|
||||
BOMBCHUS_5,
|
||||
BOMBCHUS_20,
|
||||
RUPEE_TREASURE_CHEST_GAME,
|
||||
PIECE_OF_HEART_TREASURE_CHEST_GAME,
|
||||
ICE_TRAP,
|
||||
PROGRESSIVE_HOOKSHOT,
|
||||
PROGRESSIVE_STRENGTH_UPGRADE,
|
||||
BOMB_BAG,
|
||||
BOW,
|
||||
SLINGSHOT,
|
||||
PROGRESSIVE_WALLET,
|
||||
PROGRESSIVE_SCALE,
|
||||
DEKU_NUT_CAPACITY,
|
||||
DEKU_STICK_CAPACITY,
|
||||
BOMBCHUS,
|
||||
MAGIC_METER,
|
||||
OCARINA,
|
||||
BOTTLE_WITH_RED_POTION,
|
||||
BOTTLE_WITH_GREEN_POTION,
|
||||
BOTTLE_WITH_BLUE_POTION,
|
||||
BOTTLE_WITH_FAIRY,
|
||||
BOTTLE_WITH_FISH,
|
||||
BOTTLE_WITH_BLUE_FIRE,
|
||||
BOTTLE_WITH_BUGS,
|
||||
BOTTLE_WITH_BIG_POE,
|
||||
BOTTLE_WITH_POE,
|
||||
BOSS_KEY_FOREST_TEMPLE,
|
||||
BOSS_KEY_FIRE_TEMPLE,
|
||||
BOSS_KEY_WATER_TEMPLE,
|
||||
BOSS_KEY_SPIRIT_TEMPLE,
|
||||
BOSS_KEY_SHADOW_TEMPLE,
|
||||
BOSS_KEY_GANONS_CASTLE,
|
||||
COMPASS_DEKU_TREE,
|
||||
COMPASS_DODONGOS_CAVERN,
|
||||
COMPASS_JABU_JABUS_BELLY,
|
||||
COMPASS_FOREST_TEMPLE,
|
||||
COMPASS_FIRE_TEMPLE,
|
||||
COMPASS_WATER_TEMPLE,
|
||||
COMPASS_SPIRIT_TEMPLE,
|
||||
COMPASS_SHADOW_TEMPLE,
|
||||
COMPASS_BOTTOM_OF_THE_WELL,
|
||||
COMPASS_ICE_CAVERN,
|
||||
MAP_DEKU_TREE,
|
||||
MAP_DODONGOS_CAVERN,
|
||||
MAP_JABU_JABUS_BELLY,
|
||||
MAP_FOREST_TEMPLE,
|
||||
MAP_FIRE_TEMPLE,
|
||||
MAP_WATER_TEMPLE,
|
||||
MAP_SPIRIT_TEMPLE,
|
||||
MAP_SHADOW_TEMPLE,
|
||||
MAP_BOTTOM_OF_THE_WELL,
|
||||
MAP_ICE_CAVERN,
|
||||
SMALL_KEY_FOREST_TEMPLE,
|
||||
SMALL_KEY_FIRE_TEMPLE,
|
||||
SMALL_KEY_WATER_TEMPLE,
|
||||
SMALL_KEY_SPIRIT_TEMPLE,
|
||||
SMALL_KEY_SHADOW_TEMPLE,
|
||||
SMALL_KEY_BOTTOM_OF_THE_WELL,
|
||||
SMALL_KEY_GERUDO_TRAINING_GROUND,
|
||||
SMALL_KEY_THIEVES_HIDEOUT,
|
||||
SMALL_KEY_GANONS_CASTLE,
|
||||
DOUBLE_DEFENSE,
|
||||
MAGIC_BEAN_PACK,
|
||||
TRIFORCE_PIECE,
|
||||
ZELDAS_LETTER,
|
||||
TIME_TRAVEL,
|
||||
SCARECROW_SONG,
|
||||
TRIFORCE,
|
||||
SMALL_KEY_RING_FOREST_TEMPLE,
|
||||
SMALL_KEY_RING_FIRE_TEMPLE,
|
||||
SMALL_KEY_RING_WATER_TEMPLE,
|
||||
SMALL_KEY_RING_SPIRIT_TEMPLE,
|
||||
SMALL_KEY_RING_SHADOW_TEMPLE,
|
||||
SMALL_KEY_RING_BOTTOM_OF_THE_WELL,
|
||||
SMALL_KEY_RING_GERUDO_TRAINING_GROUND,
|
||||
SMALL_KEY_RING_THIEVES_HIDEOUT,
|
||||
SMALL_KEY_RING_GANONS_CASTLE,
|
||||
WATER_TEMPLE_CLEAR,
|
||||
FOREST_TRIAL_CLEAR,
|
||||
FIRE_TRIAL_CLEAR,
|
||||
WATER_TRIAL_CLEAR,
|
||||
SHADOW_TRIAL_CLEAR,
|
||||
SPIRIT_TRIAL_CLEAR,
|
||||
LIGHT_TRIAL_CLEAR,
|
||||
DEKU_STICK_DROP,
|
||||
DEKU_NUT_DROP,
|
||||
BLUE_FIRE,
|
||||
FAIRY,
|
||||
FISH,
|
||||
BUGS,
|
||||
BIG_POE,
|
||||
BOMBCHU_DROP,
|
||||
ARROWS_CONSUMABLE_REFILL,
|
||||
BOMBS_CONSUMABLE_REFILL,
|
||||
DEKU_SEEDS_CONSUMABLE_REFILL,
|
||||
DEKU_STICKS_CONSUMABLE_REFILL,
|
||||
DEKU_NUTS_CONSUMABLE_REFILL,
|
||||
RUPEES_CONSUMABLE_REFILL,
|
||||
MINUET_OF_FOREST,
|
||||
BOLERO_OF_FIRE,
|
||||
SERENADE_OF_WATER,
|
||||
REQUIEM_OF_SPIRIT,
|
||||
NOCTURNE_OF_SHADOW,
|
||||
PRELUDE_OF_LIGHT,
|
||||
ZELDAS_LULLABY,
|
||||
EPONAS_SONG,
|
||||
SARIAS_SONG,
|
||||
SUNS_SONG,
|
||||
SONG_OF_TIME,
|
||||
SONG_OF_STORMS,
|
||||
BUY_DEKU_NUT_5,
|
||||
BUY_ARROWS_30,
|
||||
BUY_ARROWS_50,
|
||||
BUY_BOMBS_5_FOR_25_RUPEES,
|
||||
BUY_DEKU_NUT_10,
|
||||
BUY_DEKU_STICK_1,
|
||||
BUY_BOMBS_10,
|
||||
BUY_FISH,
|
||||
BUY_RED_POTION_FOR_30_RUPEES,
|
||||
BUY_GREEN_POTION,
|
||||
BUY_BLUE_POTION,
|
||||
BUY_HYLIAN_SHIELD,
|
||||
BUY_DEKU_SHIELD,
|
||||
BUY_GORON_TUNIC,
|
||||
BUY_ZORA_TUNIC,
|
||||
BUY_HEART,
|
||||
BUY_BOMBCHU_10,
|
||||
BUY_BOMBCHU_20,
|
||||
BUY_BOMBCHU_5,
|
||||
BUY_DEKU_SEEDS_30,
|
||||
SOLD_OUT,
|
||||
BUY_BLUE_FIRE,
|
||||
BUY_BOTTLE_BUG,
|
||||
BUY_POE,
|
||||
BUY_FAIRYS_SPIRIT,
|
||||
BUY_ARROWS_10,
|
||||
BUY_BOMBS_20,
|
||||
BUY_BOMBS_30,
|
||||
BUY_BOMBS_5_FOR_35_RUPEES,
|
||||
BUY_RED_POTION_FOR_40_RUPEES,
|
||||
BUY_RED_POTION_FOR_50_RUPEES,
|
||||
KOKIRI_EMERALD,
|
||||
GORON_RUBY,
|
||||
ZORA_SAPPHIRE,
|
||||
FOREST_MEDALLION,
|
||||
FIRE_MEDALLION,
|
||||
WATER_MEDALLION,
|
||||
SPIRIT_MEDALLION,
|
||||
SHADOW_MEDALLION,
|
||||
LIGHT_MEDALLION,
|
||||
UNKNOWN_GET
|
||||
} RandomizerGet;
|
||||
|
||||
class Randomizer {
|
||||
private:
|
||||
std::unordered_map<RandomizerCheck, RandomizerGet> itemLocations;
|
||||
GetItemID GetItemFromGet(RandomizerGet randoGet);
|
||||
RandomizerCheck GetCheckFromSceneAndParams(s16 sceneNum, s16 actorParams);
|
||||
|
||||
public:
|
||||
Randomizer();
|
||||
~Randomizer();
|
||||
|
||||
void PopulateItemLocations(std::string spoilerfilename);
|
||||
GetItemID GetItemFromSceneAndParams(s16 sceneNum, s16 actorParams);
|
||||
};
|
||||
|
||||
#endif
|
|
@ -43,6 +43,7 @@ OTRGlobals::OTRGlobals() {
|
|||
|
||||
context = Ship::GlobalCtx2::CreateInstance("Ship of Harkinian");
|
||||
gSaveStateMgr = std::make_shared<SaveStateMgr>();
|
||||
gRandomizer = std::make_shared<Randomizer>();
|
||||
context->GetWindow()->Init();
|
||||
}
|
||||
|
||||
|
@ -994,3 +995,11 @@ extern "C" int Controller_ShouldRumble(size_t i) {
|
|||
|
||||
return 0;
|
||||
}
|
||||
|
||||
extern "C" void PopulateItemLocations(const char* spoilerfilename) {
|
||||
OTRGlobals::Instance->gRandomizer->PopulateItemLocations(spoilerfilename);
|
||||
}
|
||||
|
||||
extern "C" GetItemID GetItemFromSceneAndParams(s16 sceneNum, s16 actorParams) {
|
||||
OTRGlobals::Instance->gRandomizer->GetItemFromSceneAndParams(sceneNum, actorParams);
|
||||
}
|
|
@ -7,6 +7,7 @@
|
|||
|
||||
#ifdef __cplusplus
|
||||
#include "Enhancements/savestates.h"
|
||||
#include "Enhancements/randomizer.h"
|
||||
class OTRGlobals
|
||||
{
|
||||
public:
|
||||
|
@ -14,6 +15,7 @@ public:
|
|||
|
||||
std::shared_ptr<Ship::GlobalCtx2> context;
|
||||
std::shared_ptr<SaveStateMgr> gSaveStateMgr;
|
||||
std::shared_ptr<Randomizer> gRandomizer;
|
||||
|
||||
OTRGlobals();
|
||||
~OTRGlobals();
|
||||
|
@ -72,6 +74,8 @@ int AudioPlayer_GetDesiredBuffered(void);
|
|||
void AudioPlayer_Play(const uint8_t* buf, uint32_t len);
|
||||
void AudioMgr_CreateNextAudioBuffer(s16* samples, u32 num_samples);
|
||||
int Controller_ShouldRumble(size_t i);
|
||||
void PopulateItemLocations(const char* spoilerfilename);
|
||||
GetItemID GetItemFromSceneAndParams(s16 sceneNum, s16 actorParams);
|
||||
#endif
|
||||
|
||||
#endif
|
|
@ -383,430 +383,10 @@ void EnBox_AppearAnimation(EnBox* this, GlobalContext* globalCtx) {
|
|||
}
|
||||
}
|
||||
|
||||
typedef enum {
|
||||
LINKS_POCKET,
|
||||
QUEEN_GOHMA,
|
||||
KING_DODONGO,
|
||||
BARINADE,
|
||||
PHANTOM_GANON,
|
||||
VOLVAGIA,
|
||||
MORPHA,
|
||||
BONGO_BONGO,
|
||||
TWINROVA,
|
||||
SONG_FROM_IMPA,
|
||||
SONG_FROM_MALON,
|
||||
SONG_FROM_SARIA,
|
||||
SONG_FROM_ROYAL_FAMILYS_TOMB,
|
||||
SONG_FROM_OCARINA_OF_TIME,
|
||||
SONG_FROM_WINDMILL,
|
||||
SHEIK_IN_FOREST,
|
||||
SHEIK_IN_CRATER,
|
||||
SHEIK_IN_ICE_CAVERN,
|
||||
SHEIK_AT_COLOSSUS,
|
||||
SHEIK_IN_KAKARIKO,
|
||||
SHEIK_AT_TEMPLE,
|
||||
KF_MIDOS_TOP_LEFT_CHEST,
|
||||
KF_MIDOS_TOP_RIGHT_CHEST,
|
||||
KF_MIDOS_BOTTOM_LEFT_CHEST,
|
||||
KF_MIDOS_BOTTOM_RIGHT_CHEST,
|
||||
KF_KOKIRI_SWORD_CHEST,
|
||||
KF_STORMS_GROTTO_CHEST,
|
||||
LW_OCARINA_MEMORY_GAME,
|
||||
LW_TARGET_IN_WOODS,
|
||||
LW_NEAR_SHORTCUTS_GROTTO_CHEST,
|
||||
DEKU_THEATER_SKULL_MASK,
|
||||
DEKU_THEATER_MASK_OF_TRUTH,
|
||||
LW_SKULL_KID,
|
||||
LW_DEKU_SCRUB_NEAR_BRIDGE,
|
||||
LW_DEKU_SCRUB_GROTTO_FRONT,
|
||||
SFM_WOLFOS_GROTTO_CHEST,
|
||||
HF_NEAR_MARKET_GROTTO_CHEST,
|
||||
HF_TEKTITE_GROTTO_FREESTANDING_POH,
|
||||
HF_SOUTHEAST_GROTTO_CHEST,
|
||||
HF_OPEN_GROTTO_CHEST,
|
||||
HF_DEKU_SCRUB_GROTTO,
|
||||
MARKET_SHOOTING_GALLERY_REWARD,
|
||||
MARKET_BOMBCHU_BOWLING_FIRST_PRIZE,
|
||||
MARKET_BOMBCHU_BOWLING_SECOND_PRIZE,
|
||||
MARKET_LOST_DOG,
|
||||
MARKET_TREASURE_CHEST_GAME_REWARD,
|
||||
MARKET_10_BIG_POES,
|
||||
TOT_LIGHT_ARROWS_CUTSCENE,
|
||||
HC_GREAT_FAIRY_REWARD,
|
||||
LLR_TALONS_CHICKENS,
|
||||
LLR_FREESTANDING_POH,
|
||||
KAK_ANJU_AS_CHILD,
|
||||
KAK_ANJU_AS_ADULT,
|
||||
KAK_IMPAS_HOUSE_FREESTANDING_POH,
|
||||
KAK_WINDMILL_FREESTANDING_POH,
|
||||
KAK_MAN_ON_ROOF,
|
||||
KAK_OPEN_GROTTO_CHEST,
|
||||
KAK_REDEAD_GROTTO_CHEST,
|
||||
KAK_SHOOTING_GALLERY_REWARD,
|
||||
KAK_10_GOLD_SKULLTULA_REWARD,
|
||||
KAK_20_GOLD_SKULLTULA_REWARD,
|
||||
KAK_30_GOLD_SKULLTULA_REWARD,
|
||||
KAK_40_GOLD_SKULLTULA_REWARD,
|
||||
KAK_50_GOLD_SKULLTULA_REWARD,
|
||||
GRAVEYARD_SHIELD_GRAVE_CHEST,
|
||||
GRAVEYARD_HEART_PIECE_GRAVE_CHEST,
|
||||
GRAVEYARD_ROYAL_FAMILYS_TOMB_CHEST,
|
||||
GRAVEYARD_FREESTANDING_POH,
|
||||
GRAVEYARD_DAMPE_GRAVEDIGGING_TOUR,
|
||||
GRAVEYARD_HOOKSHOT_CHEST,
|
||||
GRAVEYARD_DAMPE_RACE_FREESTANDING_POH,
|
||||
DMT_FREESTANDING_POH,
|
||||
DMT_CHEST,
|
||||
DMT_STORMS_GROTTO_CHEST,
|
||||
DMT_GREAT_FAIRY_REWARD,
|
||||
DMT_BIGGORON,
|
||||
GC_DARUNIAS_JOY,
|
||||
GC_POT_FREESTANDING_POH,
|
||||
GC_ROLLING_GORON_AS_CHILD,
|
||||
GC_ROLLING_GORON_AS_ADULT,
|
||||
GC_MAZE_LEFT_CHEST,
|
||||
GC_MAZE_RIGHT_CHEST,
|
||||
GC_MAZE_CENTER_CHEST,
|
||||
DMC_VOLCANO_FREESTANDING_POH,
|
||||
DMC_WALL_FREESTANDING_POH,
|
||||
DMC_UPPER_GROTTO_CHEST,
|
||||
DMC_GREAT_FAIRY_REWARD,
|
||||
ZR_OPEN_GROTTO_CHEST,
|
||||
ZR_FROGS_IN_THE_RAIN,
|
||||
ZR_FROGS_OCARINA_GAME,
|
||||
ZR_NEAR_OPEN_GROTTO_FREESTANDING_POH,
|
||||
ZR_NEAR_DOMAIN_FREESTANDING_POH,
|
||||
ZD_DIVING_MINIGAME,
|
||||
ZD_CHEST,
|
||||
ZD_KING_ZORA_THAWED,
|
||||
ZF_GREAT_FAIRY_REWARD,
|
||||
ZF_ICEBERG_FREESTANDING_POH,
|
||||
ZF_BOTTOM_FREESTANDING_POH,
|
||||
LH_UNDERWATER_ITEM,
|
||||
LH_CHILD_FISHING,
|
||||
LH_ADULT_FISHING,
|
||||
LH_LAB_DIVE,
|
||||
LH_FREESTANDING_POH,
|
||||
LH_SUN,
|
||||
GV_CRATE_FREESTANDING_POH,
|
||||
GV_WATERFALL_FREESTANDING_POH,
|
||||
GV_CHEST,
|
||||
GF_CHEST,
|
||||
GF_HBA_1000_POINTS,
|
||||
GF_HBA_1500_POINTS,
|
||||
WASTELAND_CHEST,
|
||||
COLOSSUS_GREAT_FAIRY_REWARD,
|
||||
COLOSSUS_FREESTANDING_POH,
|
||||
OGC_GREAT_FAIRY_REWARD,
|
||||
DEKU_TREE_MAP_CHEST,
|
||||
DEKU_TREE_SLINGSHOT_ROOM_SIDE_CHEST,
|
||||
DEKU_TREE_SLINGSHOT_CHEST,
|
||||
DEKU_TREE_COMPASS_CHEST,
|
||||
DEKU_TREE_COMPASS_ROOM_SIDE_CHEST,
|
||||
DEKU_TREE_BASEMENT_CHEST,
|
||||
DEKU_TREE_QUEEN_GOHMA_HEART,
|
||||
DODONGOS_CAVERN_MAP_CHEST,
|
||||
DODONGOS_CAVERN_COMPASS_CHEST,
|
||||
DODONGOS_CAVERN_BOMB_FLOWER_PLATFORM_CHEST,
|
||||
DODONGOS_CAVERN_BOMB_BAG_CHEST,
|
||||
DODONGOS_CAVERN_END_OF_BRIDGE_CHEST,
|
||||
DODONGOS_CAVERN_BOSS_ROOM_CHEST,
|
||||
DODONGOS_CAVERN_KING_DODONGO_HEART,
|
||||
JABU_JABUS_BELLY_BOOMERANG_CHEST,
|
||||
JABU_JABUS_BELLY_MAP_CHEST,
|
||||
JABU_JABUS_BELLY_COMPASS_CHEST,
|
||||
JABU_JABUS_BELLY_BARINADE_HEART,
|
||||
BOTTOM_OF_THE_WELL_FRONT_LEFT_FAKE_WALL_CHEST,
|
||||
BOTTOM_OF_THE_WELL_FRONT_CENTER_BOMBABLE_CHEST,
|
||||
BOTTOM_OF_THE_WELL_BACK_LEFT_BOMBABLE_CHEST,
|
||||
BOTTOM_OF_THE_WELL_UNDERWATER_LEFT_CHEST,
|
||||
BOTTOM_OF_THE_WELL_FREESTANDING_KEY,
|
||||
BOTTOM_OF_THE_WELL_COMPASS_CHEST,
|
||||
BOTTOM_OF_THE_WELL_CENTER_SKULLTULA_CHEST,
|
||||
BOTTOM_OF_THE_WELL_RIGHT_BOTTOM_FAKE_WALL_CHEST,
|
||||
BOTTOM_OF_THE_WELL_FIRE_KEESE_CHEST,
|
||||
BOTTOM_OF_THE_WELL_LIKE_LIKE_CHEST,
|
||||
BOTTOM_OF_THE_WELL_MAP_CHEST,
|
||||
BOTTOM_OF_THE_WELL_UNDERWATER_FRONT_CHEST,
|
||||
BOTTOM_OF_THE_WELL_INVISIBLE_CHEST,
|
||||
BOTTOM_OF_THE_WELL_LENS_OF_TRUTH_CHEST,
|
||||
FOREST_TEMPLE_FIRST_ROOM_CHEST,
|
||||
FOREST_TEMPLE_FIRST_STALFOS_CHEST,
|
||||
FOREST_TEMPLE_RAISED_ISLAND_COURTYARD_CHEST,
|
||||
FOREST_TEMPLE_MAP_CHEST,
|
||||
FOREST_TEMPLE_WELL_CHEST,
|
||||
FOREST_TEMPLE_EYE_SWITCH_CHEST,
|
||||
FOREST_TEMPLE_BOSS_KEY_CHEST,
|
||||
FOREST_TEMPLE_FLOORMASTER_CHEST,
|
||||
FOREST_TEMPLE_RED_POE_CHEST,
|
||||
FOREST_TEMPLE_BOW_CHEST,
|
||||
FOREST_TEMPLE_BLUE_POE_CHEST,
|
||||
FOREST_TEMPLE_FALLING_CEILING_ROOM_CHEST,
|
||||
FOREST_TEMPLE_BASEMENT_CHEST,
|
||||
FOREST_TEMPLE_PHANTOM_GANON_HEART,
|
||||
FIRE_TEMPLE_NEAR_BOSS_CHEST,
|
||||
FIRE_TEMPLE_FLARE_DANCER_CHEST,
|
||||
FIRE_TEMPLE_BOSS_KEY_CHEST,
|
||||
FIRE_TEMPLE_BIG_LAVA_ROOM_LOWER_OPEN_DOOR_CHEST,
|
||||
FIRE_TEMPLE_BIG_LAVA_ROOM_BLOCKED_DOOR_CHEST,
|
||||
FIRE_TEMPLE_BOULDER_MAZE_LOWER_CHEST,
|
||||
FIRE_TEMPLE_BOULDER_MAZE_SIDE_ROOM_CHEST,
|
||||
FIRE_TEMPLE_MAP_CHEST,
|
||||
FIRE_TEMPLE_BOULDER_MAZE_SHORTCUT_CHEST,
|
||||
FIRE_TEMPLE_BOULDER_MAZE_UPPER_CHEST,
|
||||
FIRE_TEMPLE_SCARECROW_CHEST,
|
||||
FIRE_TEMPLE_COMPASS_CHEST,
|
||||
FIRE_TEMPLE_MEGATON_HAMMER_CHEST,
|
||||
FIRE_TEMPLE_HIGHEST_GORON_CHEST,
|
||||
FIRE_TEMPLE_VOLVAGIA_HEART,
|
||||
WATER_TEMPLE_COMPASS_CHEST,
|
||||
WATER_TEMPLE_MAP_CHEST,
|
||||
WATER_TEMPLE_CRACKED_WALL_CHEST,
|
||||
WATER_TEMPLE_TORCHES_CHEST,
|
||||
WATER_TEMPLE_BOSS_KEY_CHEST,
|
||||
WATER_TEMPLE_CENTRAL_PILLAR_CHEST,
|
||||
WATER_TEMPLE_CENTRAL_BOW_TARGET_CHEST,
|
||||
WATER_TEMPLE_LONGSHOT_CHEST,
|
||||
WATER_TEMPLE_RIVER_CHEST,
|
||||
WATER_TEMPLE_DRAGON_CHEST,
|
||||
WATER_TEMPLE_MORPHA_HEART,
|
||||
SHADOW_TEMPLE_MAP_CHEST,
|
||||
SHADOW_TEMPLE_HOVER_BOOTS_CHEST,
|
||||
SHADOW_TEMPLE_COMPASS_CHEST,
|
||||
SHADOW_TEMPLE_EARLY_SILVER_RUPEE_CHEST,
|
||||
SHADOW_TEMPLE_INVISIBLE_BLADES_VISIBLE_CHEST,
|
||||
SHADOW_TEMPLE_INVISIBLE_BLADES_INVISIBLE_CHEST,
|
||||
SHADOW_TEMPLE_FALLING_SPIKES_LOWER_CHEST,
|
||||
SHADOW_TEMPLE_FALLING_SPIKES_UPPER_CHEST,
|
||||
SHADOW_TEMPLE_FALLING_SPIKES_SWITCH_CHEST,
|
||||
SHADOW_TEMPLE_INVISIBLE_SPIKES_CHEST,
|
||||
SHADOW_TEMPLE_FREESTANDING_KEY,
|
||||
SHADOW_TEMPLE_WIND_HINT_CHEST,
|
||||
SHADOW_TEMPLE_AFTER_WIND_ENEMY_CHEST,
|
||||
SHADOW_TEMPLE_AFTER_WIND_HIDDEN_CHEST,
|
||||
SHADOW_TEMPLE_SPIKE_WALLS_LEFT_CHEST,
|
||||
SHADOW_TEMPLE_BOSS_KEY_CHEST,
|
||||
SHADOW_TEMPLE_INVISIBLE_FLOORMASTER_CHEST,
|
||||
SHADOW_TEMPLE_BONGO_BONGO_HEART,
|
||||
SPIRIT_TEMPLE_CHILD_BRIDGE_CHEST,
|
||||
SPIRIT_TEMPLE_CHILD_EARLY_TORCHES_CHEST,
|
||||
SPIRIT_TEMPLE_CHILD_CLIMB_NORTH_CHEST,
|
||||
SPIRIT_TEMPLE_CHILD_CLIMB_EAST_CHEST,
|
||||
SPIRIT_TEMPLE_MAP_CHEST,
|
||||
SPIRIT_TEMPLE_SUN_BLOCK_ROOM_CHEST,
|
||||
SPIRIT_TEMPLE_SILVER_GAUNTLETS_CHEST,
|
||||
SPIRIT_TEMPLE_COMPASS_CHEST,
|
||||
SPIRIT_TEMPLE_EARLY_ADULT_RIGHT_CHEST,
|
||||
SPIRIT_TEMPLE_FIRST_MIRROR_LEFT_CHEST,
|
||||
SPIRIT_TEMPLE_FIRST_MIRROR_RIGHT_CHEST,
|
||||
SPIRIT_TEMPLE_STATUE_ROOM_NORTHEAST_CHEST,
|
||||
SPIRIT_TEMPLE_STATUE_ROOM_HAND_CHEST,
|
||||
SPIRIT_TEMPLE_NEAR_FOUR_ARMOS_CHEST,
|
||||
SPIRIT_TEMPLE_HALLWAY_RIGHT_INVISIBLE_CHEST,
|
||||
SPIRIT_TEMPLE_HALLWAY_LEFT_INVISIBLE_CHEST,
|
||||
SPIRIT_TEMPLE_MIRROR_SHIELD_CHEST,
|
||||
SPIRIT_TEMPLE_BOSS_KEY_CHEST,
|
||||
SPIRIT_TEMPLE_TOPMOST_CHEST,
|
||||
SPIRIT_TEMPLE_TWINROVA_HEART,
|
||||
ICE_CAVERN_MAP_CHEST,
|
||||
ICE_CAVERN_COMPASS_CHEST,
|
||||
ICE_CAVERN_FREESTANDING_POH,
|
||||
ICE_CAVERN_IRON_BOOTS_CHEST,
|
||||
GERUDO_TRAINING_GROUND_LOBBY_LEFT_CHEST,
|
||||
GERUDO_TRAINING_GROUND_LOBBY_RIGHT_CHEST,
|
||||
GERUDO_TRAINING_GROUND_STALFOS_CHEST,
|
||||
GERUDO_TRAINING_GROUND_BEFORE_HEAVY_BLOCK_CHEST,
|
||||
GERUDO_TRAINING_GROUND_HEAVY_BLOCK_FIRST_CHEST,
|
||||
GERUDO_TRAINING_GROUND_HEAVY_BLOCK_SECOND_CHEST,
|
||||
GERUDO_TRAINING_GROUND_HEAVY_BLOCK_THIRD_CHEST,
|
||||
GERUDO_TRAINING_GROUND_HEAVY_BLOCK_FOURTH_CHEST,
|
||||
GERUDO_TRAINING_GROUND_EYE_STATUE_CHEST,
|
||||
GERUDO_TRAINING_GROUND_NEAR_SCARECROW_CHEST,
|
||||
GERUDO_TRAINING_GROUND_HAMMER_ROOM_CLEAR_CHEST,
|
||||
GERUDO_TRAINING_GROUND_HAMMER_ROOM_SWITCH_CHEST,
|
||||
GERUDO_TRAINING_GROUND_FREESTANDING_KEY,
|
||||
GERUDO_TRAINING_GROUND_MAZE_RIGHT_CENTRAL_CHEST,
|
||||
GERUDO_TRAINING_GROUND_MAZE_RIGHT_SIDE_CHEST,
|
||||
GERUDO_TRAINING_GROUND_UNDERWATER_SILVER_RUPEE_CHEST,
|
||||
GERUDO_TRAINING_GROUND_BEAMOS_CHEST,
|
||||
GERUDO_TRAINING_GROUND_HIDDEN_CEILING_CHEST,
|
||||
GERUDO_TRAINING_GROUND_MAZE_PATH_FIRST_CHEST,
|
||||
GERUDO_TRAINING_GROUND_MAZE_PATH_SECOND_CHEST,
|
||||
GERUDO_TRAINING_GROUND_MAZE_PATH_THIRD_CHEST,
|
||||
GERUDO_TRAINING_GROUND_MAZE_PATH_FINAL_CHEST,
|
||||
GANONS_CASTLE_FOREST_TRIAL_CHEST,
|
||||
GANONS_CASTLE_WATER_TRIAL_LEFT_CHEST,
|
||||
GANONS_CASTLE_WATER_TRIAL_RIGHT_CHEST,
|
||||
GANONS_CASTLE_SHADOW_TRIAL_FRONT_CHEST,
|
||||
GANONS_CASTLE_SHADOW_TRIAL_GOLDEN_GAUNTLETS_CHEST,
|
||||
GANONS_CASTLE_LIGHT_TRIAL_FIRST_LEFT_CHEST,
|
||||
GANONS_CASTLE_LIGHT_TRIAL_SECOND_LEFT_CHEST,
|
||||
GANONS_CASTLE_LIGHT_TRIAL_THIRD_LEFT_CHEST,
|
||||
GANONS_CASTLE_LIGHT_TRIAL_FIRST_RIGHT_CHEST,
|
||||
GANONS_CASTLE_LIGHT_TRIAL_SECOND_RIGHT_CHEST,
|
||||
GANONS_CASTLE_LIGHT_TRIAL_THIRD_RIGHT_CHEST,
|
||||
GANONS_CASTLE_LIGHT_TRIAL_INVISIBLE_ENEMIES_CHEST,
|
||||
GANONS_CASTLE_LIGHT_TRIAL_LULLABY_CHEST,
|
||||
GANONS_CASTLE_SPIRIT_TRIAL_CRYSTAL_SWITCH_CHEST,
|
||||
GANONS_CASTLE_SPIRIT_TRIAL_INVISIBLE_CHEST,
|
||||
GANONS_TOWER_BOSS_KEY_CHEST,
|
||||
} Check;
|
||||
|
||||
Check GetCheckFromSceneAndParams(s16 sceneNum, s16 actorParams) {
|
||||
switch(sceneNum) {
|
||||
case 40:
|
||||
switch(actorParams) {
|
||||
case 22944:
|
||||
return KF_MIDOS_TOP_LEFT_CHEST;
|
||||
case 22945:
|
||||
return KF_MIDOS_TOP_RIGHT_CHEST;
|
||||
case 22914:
|
||||
return KF_MIDOS_BOTTOM_LEFT_CHEST;
|
||||
case 22787:
|
||||
return KF_MIDOS_BOTTOM_RIGHT_CHEST;
|
||||
}
|
||||
case 85:
|
||||
switch(actorParams) {
|
||||
case 1248:
|
||||
return KF_KOKIRI_SWORD_CHEST;
|
||||
}
|
||||
case 62:
|
||||
switch(actorParams) {
|
||||
case 22988:
|
||||
return KF_STORMS_GROTTO_CHEST;
|
||||
case 22964:
|
||||
return LW_NEAR_SHORTCUTS_GROTTO_CHEST;
|
||||
case 31409:
|
||||
return SFM_WOLFOS_GROTTO_CHEST;
|
||||
case 22944:
|
||||
return HF_NEAR_MARKET_GROTTO_CHEST;
|
||||
case 22978:
|
||||
return HF_SOUTHEAST_GROTTO_CHEST;
|
||||
case 22947:
|
||||
return HF_OPEN_GROTTO_CHEST;
|
||||
case 22984:
|
||||
return KAK_OPEN_GROTTO_CHEST;
|
||||
case 31434:
|
||||
return KAK_REDEAD_GROTTO_CHEST;
|
||||
case 23255:
|
||||
return DMT_STORMS_GROTTO_CHEST;
|
||||
case 23802:
|
||||
return DMC_UPPER_GROTTO_CHEST;
|
||||
case 22985:
|
||||
return ZR_OPEN_GROTTO_CHEST;
|
||||
}
|
||||
case 64:
|
||||
switch(actorParams) {
|
||||
case 21824:
|
||||
return GRAVEYARD_SHIELD_GRAVE_CHEST;
|
||||
}
|
||||
case 63:
|
||||
switch(actorParams) {
|
||||
case -22592:
|
||||
return GRAVEYARD_HEART_PIECE_GRAVE_CHEST;
|
||||
}
|
||||
case 65:
|
||||
switch(actorParams) {
|
||||
case -32736:
|
||||
return GRAVEYARD_ROYAL_FAMILYS_TOMB_CHEST;
|
||||
}
|
||||
case 72:
|
||||
switch(actorParams) {
|
||||
case 4352:
|
||||
return GRAVEYARD_HOOKSHOT_CHEST;
|
||||
}
|
||||
case 96:
|
||||
switch(actorParams) {
|
||||
case 23201:
|
||||
return DMT_CHEST;
|
||||
}
|
||||
case 98:
|
||||
switch(actorParams) {
|
||||
case 23232:
|
||||
return GC_MAZE_LEFT_CHEST;
|
||||
case 23201:
|
||||
return GC_MAZE_RIGHT_CHEST;
|
||||
case 23202:
|
||||
return GC_MAZE_CENTER_CHEST;
|
||||
}
|
||||
case 88:
|
||||
switch(actorParams) {
|
||||
case -18496:
|
||||
return ZD_CHEST;
|
||||
}
|
||||
case 90:
|
||||
switch(actorParams) {
|
||||
case 23200:
|
||||
return GV_CHEST;
|
||||
}
|
||||
case 93:
|
||||
switch(actorParams) {
|
||||
case 1984:
|
||||
return GF_CHEST;
|
||||
}
|
||||
case 94:
|
||||
switch(actorParams) {
|
||||
case -30048:
|
||||
return WASTELAND_CHEST;
|
||||
}
|
||||
case 0:
|
||||
switch(actorParams) {
|
||||
case 2083:
|
||||
return DEKU_TREE_MAP_CHEST;
|
||||
case 22789:
|
||||
return DEKU_TREE_SLINGSHOT_ROOM_SIDE_CHEST;
|
||||
case 161:
|
||||
return DEKU_TREE_SLINGSHOT_CHEST;
|
||||
case 2050:
|
||||
return DEKU_TREE_COMPASS_CHEST;
|
||||
case 22790:
|
||||
return DEKU_TREE_COMPASS_ROOM_SIDE_CHEST;
|
||||
case 22788:
|
||||
return DEKU_TREE_BASEMENT_CHEST;
|
||||
}
|
||||
case 1:
|
||||
switch(actorParams) {
|
||||
case 2088:
|
||||
return DODONGOS_CAVERN_MAP_CHEST;
|
||||
case 2053:
|
||||
return DODONGOS_CAVERN_COMPASS_CHEST;
|
||||
case 22982:
|
||||
return DODONGOS_CAVERN_BOMB_FLOWER_PLATFORM_CHEST;
|
||||
case 1604:
|
||||
return DODONGOS_CAVERN_BOMB_BAG_CHEST;
|
||||
case 21802:
|
||||
return DODONGOS_CAVERN_END_OF_BRIDGE_CHEST;
|
||||
case 20512:
|
||||
return DODONGOS_CAVERN_BOSS_ROOM_CHEST;
|
||||
}
|
||||
case 2:
|
||||
switch(actorParams) {
|
||||
case 4289:
|
||||
return JABU_JABUS_BELLY_BOOMERANG_CHEST;
|
||||
case 6178:
|
||||
return JABU_JABUS_BELLY_MAP_CHEST;
|
||||
case -18428:
|
||||
return JABU_JABUS_BELLY_COMPASS_CHEST;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
s32 GetCustomizedItemId(s16 actorParams, s16 sceneNum) {
|
||||
s32 itemId = actorParams >> 5 & 0x7F;
|
||||
Check check = GetCheckFromSceneAndParams(sceneNum, actorParams);
|
||||
switch(check) {
|
||||
case KF_MIDOS_TOP_LEFT_CHEST:
|
||||
itemId = GI_SWORD_KOKIRI;
|
||||
break;
|
||||
case KF_MIDOS_TOP_RIGHT_CHEST:
|
||||
itemId = GI_SHIELD_DEKU;
|
||||
break;
|
||||
case KF_MIDOS_BOTTOM_LEFT_CHEST:
|
||||
itemId = GI_BOMBCHUS_20;
|
||||
break;
|
||||
case KF_MIDOS_BOTTOM_RIGHT_CHEST:
|
||||
itemId = GI_ICE_TRAP;
|
||||
break;
|
||||
s32 GetRandomizedItemId(s16 actorParams, s16 sceneNum) {
|
||||
s32 itemId = GetItemFromSceneAndParams(sceneNum, actorParams);
|
||||
if (itemId == GI_NONE) {
|
||||
itemId = actorParams >> 5 & 0x7F;
|
||||
}
|
||||
return 0 - itemId;
|
||||
}
|
||||
|
@ -852,7 +432,7 @@ void EnBox_WaitOpen(EnBox* this, GlobalContext* globalCtx) {
|
|||
func_8002DBD0(&this->dyna.actor, &sp4C, &player->actor.world.pos);
|
||||
if (sp4C.z > -50.0f && sp4C.z < 0.0f && fabsf(sp4C.y) < 10.0f && fabsf(sp4C.x) < 20.0f &&
|
||||
Player_IsFacingActor(&this->dyna.actor, 0x3000, globalCtx)) {
|
||||
func_8002F554(&this->dyna.actor, globalCtx, GetCustomizedItemId(this->dyna.actor.params, globalCtx->sceneNum));
|
||||
func_8002F554(&this->dyna.actor, globalCtx, GetRandomizedItemId(this->dyna.actor.params, globalCtx->sceneNum));
|
||||
}
|
||||
if (Flags_GetTreasure(globalCtx, this->dyna.actor.params & 0x1F)) {
|
||||
EnBox_SetupAction(this, EnBox_Open);
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
#include "file_choose.h"
|
||||
#include "textures/title_static/title_static.h"
|
||||
#include "assets/overlays/ovl_File_Choose/ovl_file_choose.h"
|
||||
#include "../../../../soh/OTRGlobals.h"
|
||||
|
||||
static s16 D_808124C0[] = {
|
||||
0x0002, 0x0003, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0001, 0x0002, 0x0000, 0x0001,
|
||||
|
@ -438,6 +439,9 @@ void FileChoose_DrawNameEntry(GameState* thisx) {
|
|||
gSaveContext.fileNum = this->buttonIndex;
|
||||
dayTime = ((void)0, gSaveContext.dayTime);
|
||||
Sram_InitSave(this, &this->sramCtx);
|
||||
// todo: load spoilerfile data
|
||||
PopulateItemLocations("blarg");
|
||||
// todo: fill link's pocket here
|
||||
gSaveContext.dayTime = dayTime;
|
||||
this->configMode = CM_NAME_ENTRY_TO_MAIN;
|
||||
this->nameBoxAlpha[this->buttonIndex] = this->nameAlpha[this->buttonIndex] = 200;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue