summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.github/workflows/no-tabs.yml13
-rw-r--r--.pre-commit-config.yaml11
-rw-r--r--docs/FORMATTING.md12
-rwxr-xr-xscripts/check-no-tabs.sh9
-rw-r--r--soh/soh/Enhancements/randomizer/3drando/hint_list.cpp14
-rw-r--r--soh/soh/Enhancements/randomizer/3drando/hint_list/hint_list_exclude_dungeon.cpp2
-rw-r--r--soh/soh/Enhancements/randomizer/ShuffleCrates.cpp6
-rw-r--r--soh/soh/Enhancements/randomizer/ShuffleGrass.cpp2
-rw-r--r--soh/soh/Enhancements/randomizer/ShuffleWonderItems.cpp2
-rw-r--r--soh/soh/Enhancements/randomizer/location_access/dungeons/bottom_of_the_well.cpp8
-rw-r--r--soh/soh/Enhancements/randomizer/location_access/overworld/death_mountain_trail.cpp28
-rw-r--r--soh/soh/Enhancements/randomizer/location_access/overworld/gerudo_fortress.cpp12
-rw-r--r--soh/soh/Enhancements/randomizer/location_access/overworld/hyrule_field.cpp6
-rw-r--r--soh/soh/Enhancements/randomizer/location_access/overworld/kokiri_forest.cpp20
-rw-r--r--soh/soh/Enhancements/randomizer/location_access/overworld/lon_lon_ranch.cpp28
-rw-r--r--soh/soh/Enhancements/randomizer/location_access/overworld/zoras_fountain.cpp42
-rw-r--r--soh/soh/stubs.c7
-rw-r--r--soh/src/code/z_view.c4
18 files changed, 131 insertions, 95 deletions
diff --git a/.github/workflows/no-tabs.yml b/.github/workflows/no-tabs.yml
new file mode 100644
index 000000000..3836b0eaa
--- /dev/null
+++ b/.github/workflows/no-tabs.yml
@@ -0,0 +1,13 @@
+name: no-tabs
+on: [pull_request]
+concurrency:
+ group: ${{ github.workflow }}-${{ github.ref }}
+ cancel-in-progress: true
+
+jobs:
+ no-tabs:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v7
+ - name: Check for tabs in C/C++ sources
+ run: ./scripts/check-no-tabs.sh
diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index 40ee985da..1d3eae7a6 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -1,6 +1,6 @@
# Local hooks run on commit: clang-format for staged C/C++ in soh/ (using a
-# pinned 14.x downloaded by pre-commit), and the JSON asset lint. Scopes match
-# run-clang-format.sh / scripts/lint-json.py and CI.
+# pinned 14.x downloaded by pre-commit), the tab and JSON asset lints. Scopes
+# match run-clang-format.sh / scripts/lint-json.py and CI.
# pre-commit install --install-hooks # enable (downloads clang-format up front)
repos:
- repo: https://github.com/pre-commit/mirrors-clang-format
@@ -17,3 +17,10 @@ repos:
language: system
files: '^soh/assets/custom/.*\.json$'
pass_filenames: false
+ - id: no-tabs
+ name: check staged C/C++ for tabs
+ entry: scripts/check-no-tabs.sh
+ language: system
+ files: '^soh/.*\.(c|cpp|h|hpp)$'
+ exclude: '^soh/include/'
+ pass_filenames: false
diff --git a/docs/FORMATTING.md b/docs/FORMATTING.md
index 48605b512..198eae0f9 100644
--- a/docs/FORMATTING.md
+++ b/docs/FORMATTING.md
@@ -63,12 +63,20 @@ JSON in `soh/assets/custom` checked by CI with:
./scripts/lint-json.sh --fix # reformat in place
```
+## No tabs
+
+C/C++ outside soh/include is indented with spaces, checked by CI with:
+
+```sh
+./scripts/check-no-tabs.sh # check, prints file:line for each tab
+```
+
## Optional: format on commit
The repo ships a [pre-commit](https://pre-commit.com/) config
(`.pre-commit-config.yaml`) that auto-formats staged C/C++ with a pinned 14.x
-and runs the JSON lint on staged assets before each commit, so you never get
-caught by the CI checks. With pre-commit
+and runs the tab and JSON lints on staged files before each commit, so you
+never get caught by the CI checks. With pre-commit
[installed](https://pre-commit.com/#install), enable it once:
```bash
diff --git a/scripts/check-no-tabs.sh b/scripts/check-no-tabs.sh
new file mode 100755
index 000000000..b469baed9
--- /dev/null
+++ b/scripts/check-no-tabs.sh
@@ -0,0 +1,9 @@
+#!/bin/sh
+# Fail if any C/C++ source in soh/ outside soh/include contains a tab.
+
+cd "$(dirname "$0")/.." || exit 2
+
+if git grep -n "$(printf '\t')" -- 'soh/*.c' 'soh/*.cpp' 'soh/*.h' 'soh/*.hpp' ':!soh/include'; then
+ echo "replace tabs with spaces"
+ exit 1
+fi
diff --git a/soh/soh/Enhancements/randomizer/3drando/hint_list.cpp b/soh/soh/Enhancements/randomizer/3drando/hint_list.cpp
index f7c9b351c..7cd790b1d 100644
--- a/soh/soh/Enhancements/randomizer/3drando/hint_list.cpp
+++ b/soh/soh/Enhancements/randomizer/3drando/hint_list.cpp
@@ -1690,7 +1690,7 @@ void StaticData::HintTable_Init() {
hintTextTable[RHT_JUNK57] = HintText(CustomMessage("They say Ganon's tail is vulnerable to nuts, arrows, swords, explosives, hammers...^...sticks, seeds, "
"boomerangs...^...rods, shovels, iron balls, angry bees...",
/*german*/ "Man erzählt sich, Ganons Schwanz sei verwundbar durch Nüsse, Pfeile, Schwerter...^...Explosives, Hämmer, "
- "Stöcke...^...Kerne, Bumerangs, Schaufeln, Eisenkugeln, wütende Bienen...",
+ "Stöcke...^...Kerne, Bumerangs, Schaufeln, Eisenkugeln, wütende Bienen...",
/*french*/ "Selon moi, la queue de Ganon est vulnérable aux noix, flèches, épées, bombes, marteaux...^...bâtons, "
"graines, boomerangs...^...baguettes, pelles, boulets de fer, abeilles enragées..."));
@@ -2031,7 +2031,7 @@ void StaticData::HintTable_Init() {
{QM_YELLOW}, {}, TEXTBOX_TYPE_BLUE));
hintTextTable[RHT_BRIDGE_GREG_HINT] = HintText(CustomMessage("$gThe awakened ones will await for the Hero to find #Greg#.^",
- /*german*/ "$gDie Weisen werden darauf&warten, daß der Held&#Greg# findet.^",
+ /*german*/ "$gDie Weisen werden darauf&warten, daß der Held&#Greg# findet.^",
/*french*/ "$gLes êtres de sagesse attendront le héros muni de #Greg#.^",
{QM_GREEN}, {}, TEXTBOX_TYPE_BLUE));
@@ -2342,13 +2342,13 @@ void StaticData::HintTable_Init() {
{QM_GREEN, QM_RED}));
hintTextTable[RHT_LOACH_HINT] = HintText(CustomMessage("What?^You wanna know about the&%rHyrule Loach%w?^It's a big fish, but it's so rare that I'll give %g[[1]]%w to anyone who catches it. Seriously!",
- /*german*/ "Was?^Du willst etwas über die&%rhylianische Forelle%w wissen?&Es ist ein riesiger Fisch,&der unfassbar selten ist!^Wenn Du mir eine bringst, |springt|springen| für Dich&%g[[1]]%w dabei raus.&Ganz im Ernst!",
+ /*german*/ "Was?^Du willst etwas über die&%rhylianische Forelle%w wissen?&Es ist ein riesiger Fisch,&der unfassbar selten ist!^Wenn Du mir eine bringst, |springt|springen| für Dich&%g[[1]]%w dabei raus.&Ganz im Ernst!",
/*french*/ "Quoi?&Tu veux en savoir plus sur le&%rBrochet d'Hyrule%w?^C'est un gros poisson, mais il&est si rare que je donne&%g[[1]]%w&à celui qui l'attrape.^Ouais, j'suis sérieux!",
{QM_RED}));
hintTextTable[RHT_FISHING_POLE_HINT] = HintText(CustomMessage("^If I remember correctly, I lost it somewhere in #[[1]]#...&Let me know if you find it!",
- /*german*/ "Wenn ich mich recht erinnere,&habe ich sie irgendwo&#[[1]]#&verloren...&Sag mir Bescheid, wenn Du sie findest!",
- /*french*/ "Si je me souviens bien, il me&semble que je l'ai perdue&quelque part dans&#[[1]]#...^Fais-moi signe si jamais&tu la trouves!",
+ /*german*/ "Wenn ich mich recht erinnere,&habe ich sie irgendwo&#[[1]]#&verloren...&Sag mir Bescheid, wenn Du sie findest!",
+ /*french*/ "Si je me souviens bien, il me&semble que je l'ai perdue&quelque part dans&#[[1]]#...^Fais-moi signe si jamais&tu la trouves!",
{QM_RED}));
/*--------------------------
@@ -2365,7 +2365,7 @@ void StaticData::HintTable_Init() {
---------------------------*/
hintTextTable[RHT_HBA_HINT_SIGN] = HintText(CustomMessage("#Horseback Archery# Range Prizes:&1000: #[[1]]#&1500: #[[2]]#^@'s Record: #" + CustomMessage::POINTS(HS_HORSE_ARCHERY) + "#",
- /*german*/ "#Bogenschießen zu Pferde#&Schießstandpreise:&1000: #[[1]]#^1500: #[[2]]#^@'s Rekord: #" + CustomMessage::POINTS(HS_HORSE_ARCHERY) + "#",
+ /*german*/ "#Bogenschießen zu Pferde#&Schießstandpreise:&1000: #[[1]]#^1500: #[[2]]#^@'s Rekord: #" + CustomMessage::POINTS(HS_HORSE_ARCHERY) + "#",
/*french*/ "Récompenses de l'#Archerie Montée#:&1000: #[[1]]#&1500: #[[2]]#^Record de @: #" + CustomMessage::POINTS(HS_HORSE_ARCHERY) + "#",
{QM_RED, QM_GREEN, QM_GREEN, QM_GREEN}, {}, TEXTBOX_TYPE_WOODEN));
@@ -2493,7 +2493,7 @@ void StaticData::HintTable_Init() {
hintTextTable[RHT_GANON_JOKE06] = HintText(CustomMessage("Zelda is probably going to do something stupid, like send you back to your own timeline.^So this is "
"quite meaningless. Do you really want to save this moron?",
/*german*/ "Zelda wird wahrscheinlich wieder etwas Dummes tun, wie Dich in Deine eigene Zeit zurück zu schicken."
- "^Ziemlich sinnlos wenn Du mich fragst. Willst Du diesen Schwachkopf wirklich retten?",
+ "^Ziemlich sinnlos wenn Du mich fragst. Willst Du diesen Schwachkopf wirklich retten?",
/*french*/ "Même si je suis vaincu... Zelda te renverra dans ton ère, et je reviendrai conquérir!^Telle est la "
"prophécie d'Hyrule Historia!"));
// /*spanish*/Seguro que Zelda trata de hacer alguna tontería, como enviarte de vuelta a tu línea temporal.^No tiene
diff --git a/soh/soh/Enhancements/randomizer/3drando/hint_list/hint_list_exclude_dungeon.cpp b/soh/soh/Enhancements/randomizer/3drando/hint_list/hint_list_exclude_dungeon.cpp
index b4fb04ca7..f06c4fd85 100644
--- a/soh/soh/Enhancements/randomizer/3drando/hint_list/hint_list_exclude_dungeon.cpp
+++ b/soh/soh/Enhancements/randomizer/3drando/hint_list/hint_list_exclude_dungeon.cpp
@@ -325,7 +325,7 @@ void StaticData::HintTable_Init_Exclude_Dungeon() {
hintTextTable[RHT_DODONGOS_CAVERN_GRASS] = HintText(CustomMessage("They say that some #grass in Dodongo's Cavern# hides #[[1]]#.",
/*german*/ "Man erzählt sich, daß etwas #Gras in Dodongos Höhle# #[[1]]# verstecke.",
/*french*/ "Selon moi, de l'#herbe dans la Caverne Dodongo# cache #[[1]]#.", {QM_RED, QM_GREEN}));
-
+
hintTextTable[RHT_CRATE_DODONGOS_CAVERN] = HintText(CustomMessage("They say that a #crate in Dodongo's Cavern# contains #[[1]]#.",
/*german*/ "Man erzählt sich, daß eine #Kiste in Dodongos Höhle# #[[1]]# enthielte.",
/*french*/ "Selon moi, une #caisse dans la Caverne Dodongo# contient #[[1]]#.", {QM_RED, QM_GREEN}));
diff --git a/soh/soh/Enhancements/randomizer/ShuffleCrates.cpp b/soh/soh/Enhancements/randomizer/ShuffleCrates.cpp
index 06ff1916c..c07261406 100644
--- a/soh/soh/Enhancements/randomizer/ShuffleCrates.cpp
+++ b/soh/soh/Enhancements/randomizer/ShuffleCrates.cpp
@@ -335,7 +335,7 @@ void Rando::StaticData::RegisterCrateLocations() {
registered = true;
// clang-format off
// Overworld Crates
- // Randomizer Check Randomizer Check Quest Area Scene ID Params Short Name Hint Text Key Vanilla Spoiler Collection Check
+ // Randomizer Check Randomizer Check Quest Area Scene ID Params Short Name Hint Text Key Vanilla Spoiler Collection Check
locationTable[RC_GV_FREESTANDING_POH_CRATE] = Location::Crate(RC_GV_FREESTANDING_POH_CRATE, RCQUEST_BOTH, RCAREA_GERUDO_VALLEY, SCENE_GERUDO_VALLEY, TWO_ACTOR_PARAMS(-350, 1480), "Freestanding PoH Crate", RHT_CRATE_GERUDO_VALLEY, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GV_FREESTANDING_POH_CRATE));
locationTable[RC_GV_NEAR_COW_CRATE] = Location::Crate(RC_GV_NEAR_COW_CRATE, RCQUEST_BOTH, RCAREA_GERUDO_VALLEY, SCENE_GERUDO_VALLEY, TWO_ACTOR_PARAMS(-449, 123), "Near Cow Crate", RHT_CRATE_GERUDO_VALLEY, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GV_NEAR_COW_CRATE));
locationTable[RC_GF_ABOVE_JAIL_CRATE] = Location::Crate(RC_GF_ABOVE_JAIL_CRATE, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_GERUDOS_FORTRESS, TWO_ACTOR_PARAMS(51, -2997), "Above Jail Crate", RHT_CRATE_GERUDOS_FORTRESS, RG_PURPLE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_ABOVE_JAIL_CRATE));
@@ -420,7 +420,7 @@ void Rando::StaticData::RegisterCrateLocations() {
locationTable[RC_GF_FAR_AWAY_CRATE_ADULT] = Location::NLCrate(RC_GF_FAR_AWAY_CRATE_ADULT, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_GERUDOS_FORTRESS, TWO_ACTOR_PARAMS(-4051, -3429), "Far Away Crate Adult", RHT_CRATE_GERUDOS_FORTRESS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_FAR_AWAY_CRATE_ADULT));
// MQ Crates
- // Randomizer Check Randomizer Check Quest Area Scene ID Params Short Name Hint Text Key Vanilla Spoiler Collection Check
+ // Randomizer Check Randomizer Check Quest Area Scene ID Params Short Name Hint Text Key Vanilla Spoiler Collection Check
locationTable[RC_DEKU_TREE_MQ_LOBBY_CRATE] = Location::Crate(RC_DEKU_TREE_MQ_LOBBY_CRATE, RCQUEST_MQ, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(279, 333), "MQ Lobby Crate", RHT_CRATE_DEKU_TREE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_MQ_LOBBY_CRATE));
locationTable[RC_DEKU_TREE_MQ_SLINGSHOT_ROOM_CRATE_1] = Location::Crate(RC_DEKU_TREE_MQ_SLINGSHOT_ROOM_CRATE_1, RCQUEST_MQ, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(-805, -62), "MQ Slingshot Room Crate 1", RHT_CRATE_DEKU_TREE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_MQ_SLINGSHOT_ROOM_CRATE_1));
locationTable[RC_DEKU_TREE_MQ_SLINGSHOT_ROOM_CRATE_2] = Location::Crate(RC_DEKU_TREE_MQ_SLINGSHOT_ROOM_CRATE_2, RCQUEST_MQ, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(-805, -2), "MQ Slingshot Room Crate 2", RHT_CRATE_DEKU_TREE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_MQ_SLINGSHOT_ROOM_CRATE_2));
@@ -563,7 +563,7 @@ void Rando::StaticData::RegisterCrateLocations() {
locationTable[RC_GERUDO_TRAINING_GROUND_MQ_MAZE_CRATE] = Location::Crate(RC_GERUDO_TRAINING_GROUND_MQ_MAZE_CRATE, RCQUEST_MQ, RCAREA_GERUDO_TRAINING_GROUND, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(-59, -1598), "MQ Maze Crate", RHT_CRATE_GERUDO_TRAINING_GROUND, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUND_MQ_MAZE_CRATE));
// Small Crates
- // Randomizer Check Randomizer Check Quest Area Scene ID Params Short Name Hint Text Key Vanilla Spoiler Collection Check
+ // Randomizer Check Randomizer Check Quest Area Scene ID Params Short Name Hint Text Key Vanilla Spoiler Collection Check
locationTable[RC_JABU_JABUS_BELLY_PLATFORM_ROOM_SMALL_CRATE_1] = Location::SmallCrate(RC_JABU_JABUS_BELLY_PLATFORM_ROOM_SMALL_CRATE_1, RCQUEST_VANILLA, RCAREA_JABU_JABUS_BELLY, SCENE_JABU_JABU, TWO_ACTOR_PARAMS(-141, -1945), "Platform Room Small Crate 1", RHT_CRATE_JABU_JABU, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_JABU_JABUS_BELLY_PLATFORM_ROOM_SMALL_CRATE_1));
locationTable[RC_JABU_JABUS_BELLY_PLATFORM_ROOM_SMALL_CRATE_2] = Location::SmallCrate(RC_JABU_JABUS_BELLY_PLATFORM_ROOM_SMALL_CRATE_2, RCQUEST_VANILLA, RCAREA_JABU_JABUS_BELLY, SCENE_JABU_JABU, TWO_ACTOR_PARAMS(-189, -1925), "Platform Room Small Crate 2", RHT_CRATE_JABU_JABU, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_JABU_JABUS_BELLY_PLATFORM_ROOM_SMALL_CRATE_2));
locationTable[RC_FIRE_TEMPLE_AFTER_HAMMER_SMALL_CRATE_1] = Location::SmallCrate(RC_FIRE_TEMPLE_AFTER_HAMMER_SMALL_CRATE_1, RCQUEST_VANILLA, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(-2030, -1172), "After Hammer Small Crate 1", RHT_CRATE_FIRE_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_AFTER_HAMMER_SMALL_CRATE_1));
diff --git a/soh/soh/Enhancements/randomizer/ShuffleGrass.cpp b/soh/soh/Enhancements/randomizer/ShuffleGrass.cpp
index 35ca8fbb7..f93fe85e8 100644
--- a/soh/soh/Enhancements/randomizer/ShuffleGrass.cpp
+++ b/soh/soh/Enhancements/randomizer/ShuffleGrass.cpp
@@ -231,7 +231,7 @@ void Rando::StaticData::RegisterGrassLocations() {
registered = true;
// clang-format off
// Overworld Grass
- // Randomizer Check Randomizer Check Quest Area Scene ID Params Short Name Hint Text Key Vanilla Spoiler Collection Check
+ // Randomizer Check Randomizer Check Quest Area Scene ID Params Short Name Hint Text Key Vanilla Spoiler Collection Check
locationTable[RC_KF_CHILD_GRASS_1] = Location::Grass(RC_KF_CHILD_GRASS_1, RCQUEST_BOTH, RCAREA_KOKIRI_FOREST, SCENE_KOKIRI_FOREST, TWO_ACTOR_PARAMS(678, 596), "Child Grass 1", RHT_KF_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_CHILD_GRASS_1));
locationTable[RC_KF_CHILD_GRASS_2] = Location::Grass(RC_KF_CHILD_GRASS_2, RCQUEST_BOTH, RCAREA_KOKIRI_FOREST, SCENE_KOKIRI_FOREST, TWO_ACTOR_PARAMS(594, 542), "Child Grass 2", RHT_KF_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_CHILD_GRASS_2));
locationTable[RC_KF_CHILD_GRASS_3] = Location::Grass(RC_KF_CHILD_GRASS_3, RCQUEST_BOTH, RCAREA_KOKIRI_FOREST, SCENE_KOKIRI_FOREST, TWO_ACTOR_PARAMS(572, 603), "Child Grass 3", RHT_KF_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_CHILD_GRASS_3));
diff --git a/soh/soh/Enhancements/randomizer/ShuffleWonderItems.cpp b/soh/soh/Enhancements/randomizer/ShuffleWonderItems.cpp
index d9c61b4b2..73a3a7031 100644
--- a/soh/soh/Enhancements/randomizer/ShuffleWonderItems.cpp
+++ b/soh/soh/Enhancements/randomizer/ShuffleWonderItems.cpp
@@ -334,7 +334,7 @@ void Rando::StaticData::RegisterWonderItemLocations() {
registered = true;
// clang-format off
// Overworld Wonder Items
- // Randomizer Check Randomizer Check Quest Area Scene ID Params Short Name Hint Text Key Vanilla Spoiler Collection Check
+ // Randomizer Check Randomizer Check Quest Area Scene ID Params Short Name Hint Text Key Vanilla Spoiler Collection Check
locationTable[RC_KF_WONDER_TRAINING_1] = Location::WonderItem(RC_KF_WONDER_TRAINING_1, RCQUEST_BOTH, RCAREA_KOKIRI_FOREST, SCENE_KOKIRI_FOREST, TWO_ACTOR_PARAMS(-747, 951), "Wonder Training 1", RHT_WONDER_ITEM_KOKIRI_FOREST, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_WONDER_TRAINING_1));
locationTable[RC_KF_WONDER_TRAINING_2] = Location::WonderItem(RC_KF_WONDER_TRAINING_2, RCQUEST_BOTH, RCAREA_KOKIRI_FOREST, SCENE_KOKIRI_FOREST, TWO_ACTOR_PARAMS(-677, 899), "Wonder Training 2", RHT_WONDER_ITEM_KOKIRI_FOREST, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_WONDER_TRAINING_2));
locationTable[RC_KF_WONDER_TRAINING_3] = Location::WonderItem(RC_KF_WONDER_TRAINING_3, RCQUEST_BOTH, RCAREA_KOKIRI_FOREST, SCENE_KOKIRI_FOREST, TWO_ACTOR_PARAMS(-698, 830), "Wonder Training 3", RHT_WONDER_ITEM_KOKIRI_FOREST, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_WONDER_TRAINING_3));
diff --git a/soh/soh/Enhancements/randomizer/location_access/dungeons/bottom_of_the_well.cpp b/soh/soh/Enhancements/randomizer/location_access/dungeons/bottom_of_the_well.cpp
index 64080e953..70bb1da7a 100644
--- a/soh/soh/Enhancements/randomizer/location_access/dungeons/bottom_of_the_well.cpp
+++ b/soh/soh/Enhancements/randomizer/location_access/dungeons/bottom_of_the_well.cpp
@@ -312,10 +312,10 @@ void RegionTable_Init_BottomOfTheWell() {
//Instead of blowing up the boulder, you can aim through the lower left side with sling(either age) or as child with bow
//Not even bow extension seems to get adult's bow to work
//this would be a trick
- LOCATION(RC_BOTTOM_OF_THE_WELL_MQ_OUTER_LOBBY_POT, (AnyAgeTime([]{return logic->BlastOrSmash();}) && logic->CanHitEyeTargets()) ||
- (ctx->GetTrickOption(RT_BOULDER_COLLISION) && logic->IsChild ? logic->CanHitEyeTargets() : logic->CanUse(RG_FAIRY_SLINGSHOT))),
- LOCATION(RC_BOTTOM_OF_THE_WELL_MQ_BOMB_LEFT_HEART, logic->HasExplosives()),
- LOCATION(RC_BOTTOM_OF_THE_WELL_MQ_BOMB_RIGHT_HEART, logic->HasExplosives()),
+ LOCATION(RC_BOTTOM_OF_THE_WELL_MQ_OUTER_LOBBY_POT, (AnyAgeTime([]{return logic->BlastOrSmash();}) && logic->CanHitEyeTargets()) ||
+ (ctx->GetTrickOption(RT_BOULDER_COLLISION) && logic->IsChild ? logic->CanHitEyeTargets() : logic->CanUse(RG_FAIRY_SLINGSHOT))),
+ LOCATION(RC_BOTTOM_OF_THE_WELL_MQ_BOMB_LEFT_HEART, logic->HasExplosives()),
+ LOCATION(RC_BOTTOM_OF_THE_WELL_MQ_BOMB_RIGHT_HEART, logic->HasExplosives()),
LOCATION(RC_BOTW_MQ_BOULDER_1, logic->BlastOrSmash()),
LOCATION(RC_BOTW_MQ_BOULDER_2, logic->BlastOrSmash()),
LOCATION(RC_BOTW_MQ_BOULDER_3, logic->BlastOrSmash()),
diff --git a/soh/soh/Enhancements/randomizer/location_access/overworld/death_mountain_trail.cpp b/soh/soh/Enhancements/randomizer/location_access/overworld/death_mountain_trail.cpp
index 974091e81..d964fcd7e 100644
--- a/soh/soh/Enhancements/randomizer/location_access/overworld/death_mountain_trail.cpp
+++ b/soh/soh/Enhancements/randomizer/location_access/overworld/death_mountain_trail.cpp
@@ -11,21 +11,21 @@ void RegionTable_Init_DeathMountainTrail() {
EVENT_ACCESS(LOGIC_FAIRY_ACCESS, logic->IsChild && logic->BeanPlanted(LOGIC_PLANT_DEATH_MOUNTAIN_TRAIL_BEAN) && logic->CanUse(RG_SONG_OF_STORMS) && (logic->HasExplosives() || logic->HasItem(RG_GORONS_BRACELET))),
}, {
//Locations
- LOCATION(RC_DMT_CHEST, (logic->BlastOrSmash() || (logic->IsChild && (ctx->GetTrickOption(RT_DMT_BOMBABLE) || logic->BunnyHood()) && logic->HasItem(RG_GORONS_BRACELET))) && logic->HasItem(RG_OPEN_CHEST)),
+ LOCATION(RC_DMT_CHEST, (logic->BlastOrSmash() || (logic->IsChild && (ctx->GetTrickOption(RT_DMT_BOMBABLE) || logic->BunnyHood()) && logic->HasItem(RG_GORONS_BRACELET))) && logic->HasItem(RG_OPEN_CHEST)),
//adult and bunny jumps off the nearby ledge and over the fence
- LOCATION(RC_DMT_FREESTANDING_POH, logic->IsAdult || logic->TakeDamage() || logic->CanUse(RG_HOVER_BOOTS) || logic->BunnyHood()),
- LOCATION(RC_DMT_GS_BEAN_PATCH, logic->CanSpawnSoilSkull(RG_DEATH_MOUNTAIN_TRAIL_BEAN_SOUL) && (logic->HasExplosives() || logic->HasItem(RG_GORONS_BRACELET) || (ctx->GetTrickOption(RT_DMT_SOIL_GS) && (logic->TakeDamage() || logic->CanUse(RG_HOVER_BOOTS)) && logic->CanUse(RG_BOOMERANG)))),
- LOCATION(RC_DMT_GS_NEAR_KAK, logic->BlastOrSmash() && (logic->HasItem(RG_CLIMB) || logic->CanUse(RG_HOOKSHOT) || logic->CanUse(RG_BOOMERANG))),
- LOCATION(RC_DMT_GS_ABOVE_DODONGOS_CAVERN, logic->IsAdult && logic->CanGetNightTimeGS() &&
- ((logic->CanUse(RG_MEGATON_HAMMER) || (ctx->GetTrickOption(RT_ITEM_EXTENSION) && logic->CanUse(RG_HOOKSHOT)) || (ctx->GetTrickOption(RT_BOULDER_COLLISION) && logic->CanUse(RG_LONGSHOT)) || (ctx->GetTrickOption(RT_DMT_JS_LOWER_GS) && logic->CanJumpslash())) ||
- ((ctx->GetTrickOption(RT_DMT_BEAN_LOWER_GS) && logic->BeanPlanted(LOGIC_PLANT_DEATH_MOUNTAIN_TRAIL_BEAN)) || (ctx->GetTrickOption(RT_DMT_HOVERS_LOWER_GS) && logic->CanUse(RG_HOVER_BOOTS)) &&
- (logic->HasExplosives() || logic->CanUse(RG_DINS_FIRE) || ((ctx->GetTrickOption(RT_BOULDER_COLLISION) || ctx->GetTrickOption(RT_ITEM_EXTENSION)) && (logic->CanUse(RG_FAIRY_BOW) || logic->CanUse(RG_FAIRY_SLINGSHOT))) || logic->CanJumpslash())))),
- LOCATION(RC_DMT_BLUE_RUPEE, logic->IsChild && logic->BlastOrSmash()),
- LOCATION(RC_DMT_RED_RUPEE, logic->IsChild && logic->BlastOrSmash()),
- LOCATION(RC_DMT_BEAN_SPROUT_FAIRY_1, logic->IsChild && logic->BeanPlanted(LOGIC_PLANT_DEATH_MOUNTAIN_TRAIL_BEAN) && logic->CanUse(RG_SONG_OF_STORMS) && (logic->HasExplosives() || logic->HasItem(RG_GORONS_BRACELET))),
- LOCATION(RC_DMT_BEAN_SPROUT_FAIRY_2, logic->IsChild && logic->BeanPlanted(LOGIC_PLANT_DEATH_MOUNTAIN_TRAIL_BEAN) && logic->CanUse(RG_SONG_OF_STORMS) && (logic->HasExplosives() || logic->HasItem(RG_GORONS_BRACELET))),
- LOCATION(RC_DMT_BEAN_SPROUT_FAIRY_3, logic->IsChild && logic->BeanPlanted(LOGIC_PLANT_DEATH_MOUNTAIN_TRAIL_BEAN) && logic->CanUse(RG_SONG_OF_STORMS) && (logic->HasExplosives() || logic->HasItem(RG_GORONS_BRACELET))),
- LOCATION(RC_DMT_FLAG_SUN_FAIRY, logic->CanUse(RG_SUNS_SONG)),
+ LOCATION(RC_DMT_FREESTANDING_POH, logic->IsAdult || logic->TakeDamage() || logic->CanUse(RG_HOVER_BOOTS) || logic->BunnyHood()),
+ LOCATION(RC_DMT_GS_BEAN_PATCH, logic->CanSpawnSoilSkull(RG_DEATH_MOUNTAIN_TRAIL_BEAN_SOUL) && (logic->HasExplosives() || logic->HasItem(RG_GORONS_BRACELET) || (ctx->GetTrickOption(RT_DMT_SOIL_GS) && (logic->TakeDamage() || logic->CanUse(RG_HOVER_BOOTS)) && logic->CanUse(RG_BOOMERANG)))),
+ LOCATION(RC_DMT_GS_NEAR_KAK, logic->BlastOrSmash() && (logic->HasItem(RG_CLIMB) || logic->CanUse(RG_HOOKSHOT) || logic->CanUse(RG_BOOMERANG))),
+ LOCATION(RC_DMT_GS_ABOVE_DODONGOS_CAVERN, logic->IsAdult && logic->CanGetNightTimeGS() &&
+ ((logic->CanUse(RG_MEGATON_HAMMER) || (ctx->GetTrickOption(RT_ITEM_EXTENSION) && logic->CanUse(RG_HOOKSHOT)) || (ctx->GetTrickOption(RT_BOULDER_COLLISION) && logic->CanUse(RG_LONGSHOT)) || (ctx->GetTrickOption(RT_DMT_JS_LOWER_GS) && logic->CanJumpslash())) ||
+ ((ctx->GetTrickOption(RT_DMT_BEAN_LOWER_GS) && logic->BeanPlanted(LOGIC_PLANT_DEATH_MOUNTAIN_TRAIL_BEAN)) || (ctx->GetTrickOption(RT_DMT_HOVERS_LOWER_GS) && logic->CanUse(RG_HOVER_BOOTS)) &&
+ (logic->HasExplosives() || logic->CanUse(RG_DINS_FIRE) || ((ctx->GetTrickOption(RT_BOULDER_COLLISION) || ctx->GetTrickOption(RT_ITEM_EXTENSION)) && (logic->CanUse(RG_FAIRY_BOW) || logic->CanUse(RG_FAIRY_SLINGSHOT))) || logic->CanJumpslash())))),
+ LOCATION(RC_DMT_BLUE_RUPEE, logic->IsChild && logic->BlastOrSmash()),
+ LOCATION(RC_DMT_RED_RUPEE, logic->IsChild && logic->BlastOrSmash()),
+ LOCATION(RC_DMT_BEAN_SPROUT_FAIRY_1, logic->IsChild && logic->BeanPlanted(LOGIC_PLANT_DEATH_MOUNTAIN_TRAIL_BEAN) && logic->CanUse(RG_SONG_OF_STORMS) && (logic->HasExplosives() || logic->HasItem(RG_GORONS_BRACELET))),
+ LOCATION(RC_DMT_BEAN_SPROUT_FAIRY_2, logic->IsChild && logic->BeanPlanted(LOGIC_PLANT_DEATH_MOUNTAIN_TRAIL_BEAN) && logic->CanUse(RG_SONG_OF_STORMS) && (logic->HasExplosives() || logic->HasItem(RG_GORONS_BRACELET))),
+ LOCATION(RC_DMT_BEAN_SPROUT_FAIRY_3, logic->IsChild && logic->BeanPlanted(LOGIC_PLANT_DEATH_MOUNTAIN_TRAIL_BEAN) && logic->CanUse(RG_SONG_OF_STORMS) && (logic->HasExplosives() || logic->HasItem(RG_GORONS_BRACELET))),
+ LOCATION(RC_DMT_FLAG_SUN_FAIRY, logic->CanUse(RG_SUNS_SONG)),
LOCATION(RC_DMT_ROCK_1, logic->CanBreakRocks()),
LOCATION(RC_DMT_ROCK_2, logic->CanBreakRocks()),
LOCATION(RC_DMT_ROCK_3, logic->CanBreakRocks()),
diff --git a/soh/soh/Enhancements/randomizer/location_access/overworld/gerudo_fortress.cpp b/soh/soh/Enhancements/randomizer/location_access/overworld/gerudo_fortress.cpp
index 39a561e39..be3270384 100644
--- a/soh/soh/Enhancements/randomizer/location_access/overworld/gerudo_fortress.cpp
+++ b/soh/soh/Enhancements/randomizer/location_access/overworld/gerudo_fortress.cpp
@@ -207,13 +207,13 @@ void RegionTable_Init_GerudoFortress() {
}, {
//Exits
//there's a trick to reach RR_GF_LONG_ROOF
- ENTRANCE(RR_GF_OUTSKIRTS, true),
- ENTRANCE(RR_GF_NEAR_CHEST, logic->CanUse(RG_LONGSHOT)),
- ENTRANCE(RR_GF_BELOW_CHEST, logic->TakeDamage()),
- ENTRANCE(RR_GF_JAIL_WINDOW, logic->CanUse(RG_HOOKSHOT)),
+ ENTRANCE(RR_GF_OUTSKIRTS, true),
+ ENTRANCE(RR_GF_NEAR_CHEST, logic->CanUse(RG_LONGSHOT)),
+ ENTRANCE(RR_GF_BELOW_CHEST, logic->TakeDamage()),
+ ENTRANCE(RR_GF_JAIL_WINDOW, logic->CanUse(RG_HOOKSHOT)),
ENTRANCE(RR_TH_BREAK_ROOM_UPPER_CORRIDOR, true),
- ENTRANCE(RR_GF_TOWER, ctx->GetTrickOption(RT_GF_ADULT_SKIP_WASTELAND_GATE) && logic->IsAdult && logic->CanUse(RG_HOVER_BOOTS) && logic->CanJumpslash() && logic->HasItem(RG_GERUDO_MEMBERSHIP_CARD)),
- ENTRANCE(RR_GF_OUTSIDE_GATE, ctx->GetTrickOption(RT_GF_ADULT_SKIP_WASTELAND_GATE) && logic->IsAdult && logic->CanUse(RG_HOVER_BOOTS) && logic->CanJumpslash()),
+ ENTRANCE(RR_GF_TOWER, ctx->GetTrickOption(RT_GF_ADULT_SKIP_WASTELAND_GATE) && logic->IsAdult && logic->CanUse(RG_HOVER_BOOTS) && logic->CanJumpslash() && logic->HasItem(RG_GERUDO_MEMBERSHIP_CARD)),
+ ENTRANCE(RR_GF_OUTSIDE_GATE, ctx->GetTrickOption(RT_GF_ADULT_SKIP_WASTELAND_GATE) && logic->IsAdult && logic->CanUse(RG_HOVER_BOOTS) && logic->CanJumpslash()),
});
areaTable[RR_GF_JAIL_WINDOW] = Region("GF Jail Window", SCENE_GERUDOS_FORTRESS, {}, {}, {
diff --git a/soh/soh/Enhancements/randomizer/location_access/overworld/hyrule_field.cpp b/soh/soh/Enhancements/randomizer/location_access/overworld/hyrule_field.cpp
index 7713ca8be..6bfc887ae 100644
--- a/soh/soh/Enhancements/randomizer/location_access/overworld/hyrule_field.cpp
+++ b/soh/soh/Enhancements/randomizer/location_access/overworld/hyrule_field.cpp
@@ -191,9 +191,9 @@ void RegionTable_Init_HyruleField() {
LOCATION(RC_HF_CENTER_EXIT_ARROW_SIGN, logic->CanRead()),
LOCATION(RC_HF_RIVER_EXIT_ARROW_SIGN, logic->CanRead()),
LOCATION(RC_HF_STAIRS_EXIT_ARROW_SIGN, logic->CanRead()),
- LOCATION(RC_HF_WONDER_BRIDGE_1, logic->IsChild),
- LOCATION(RC_HF_WONDER_BRIDGE_2, logic->IsChild),
- LOCATION(RC_HF_WONDER_BRIDGE_3, logic->IsChild),
+ LOCATION(RC_HF_WONDER_BRIDGE_1, logic->IsChild),
+ LOCATION(RC_HF_WONDER_BRIDGE_2, logic->IsChild),
+ LOCATION(RC_HF_WONDER_BRIDGE_3, logic->IsChild),
}, {
//Exits
ENTRANCE(RR_LW_BRIDGE, true),
diff --git a/soh/soh/Enhancements/randomizer/location_access/overworld/kokiri_forest.cpp b/soh/soh/Enhancements/randomizer/location_access/overworld/kokiri_forest.cpp
index b0a316ab9..f78ead68f 100644
--- a/soh/soh/Enhancements/randomizer/location_access/overworld/kokiri_forest.cpp
+++ b/soh/soh/Enhancements/randomizer/location_access/overworld/kokiri_forest.cpp
@@ -90,14 +90,14 @@ void RegionTable_Init_KokiriForest() {
LOCATION(RC_KF_TRAINING_CENTER_ENTRANCE_ARROW_SIGN, logic->IsChild && logic->CanRead()),
LOCATION(RC_KF_INNER_TRAINING_CENTER_ARROW_SIGN, logic->IsChild && logic->CanRead()),
LOCATION(RC_KF_KNOW_IT_ALL_BROTHERS_HOUSE_ARROW_SIGN, logic->CanRead()),
- LOCATION(RC_KF_WONDER_TRAINING_1, logic->IsChild),
- LOCATION(RC_KF_WONDER_TRAINING_2, logic->IsChild),
- LOCATION(RC_KF_WONDER_TRAINING_3, logic->IsChild),
- LOCATION(RC_KF_WONDER_SIGN, logic->IsChild && logic->CanJumpslashExceptHammer()),
- LOCATION(RC_KF_WONDER_PLATFORMS_1, logic->IsChild),
- LOCATION(RC_KF_WONDER_PLATFORMS_2, logic->IsChild),
+ LOCATION(RC_KF_WONDER_TRAINING_1, logic->IsChild),
+ LOCATION(RC_KF_WONDER_TRAINING_2, logic->IsChild),
+ LOCATION(RC_KF_WONDER_TRAINING_3, logic->IsChild),
+ LOCATION(RC_KF_WONDER_SIGN, logic->IsChild && logic->CanJumpslashExceptHammer()),
+ LOCATION(RC_KF_WONDER_PLATFORMS_1, logic->IsChild),
+ LOCATION(RC_KF_WONDER_PLATFORMS_2, logic->IsChild),
//Technically bad logic, because we can move Mido out of logic, but then we already have KSword...
- LOCATION(RC_MIDO_HINT, !ctx->GetOption(RSK_FOREST).Is(RO_CLOSED_FOREST_OFF) && logic->IsChild && logic->HasItem(RG_SPEAK_KOKIRI)),
+ LOCATION(RC_MIDO_HINT, !ctx->GetOption(RSK_FOREST).Is(RO_CLOSED_FOREST_OFF) && logic->IsChild && logic->HasItem(RG_SPEAK_KOKIRI)),
}, {
//Exits
ENTRANCE(RR_KF_BOULDER_LOOP, logic->CanUse(RG_CRAWL)),
@@ -161,8 +161,8 @@ void RegionTable_Init_KokiriForest() {
LOCATION(RC_KF_CHILD_GRASS_MAZE_3, logic->IsChild && logic->CanCutShrubs()),
LOCATION(RC_KF_AFTER_CRAWLSPACE_RECTANGLE_SIGN, logic->IsChild && logic->CanRead()),
LOCATION(RC_KF_BOULDER_MAZE_RECTANGLE_SIGN, logic->IsChild && logic->CanRead()),
- LOCATION(RC_KF_WONDER_CRAWL_GRASS_1, logic->IsChild),
- LOCATION(RC_KF_WONDER_CRAWL_GRASS_2, logic->IsChild),
+ LOCATION(RC_KF_WONDER_CRAWL_GRASS_1, logic->IsChild),
+ LOCATION(RC_KF_WONDER_CRAWL_GRASS_2, logic->IsChild),
}, {
//Exits
ENTRANCE(RR_KOKIRI_FOREST, logic->CanUse(RG_CRAWL)),
@@ -209,7 +209,7 @@ void RegionTable_Init_KokiriForest() {
LOCATION(RC_KF_MIDOS_TOP_RIGHT_CHEST, logic->HasItem(RG_OPEN_CHEST)),
LOCATION(RC_KF_MIDOS_BOTTOM_LEFT_CHEST, logic->HasItem(RG_OPEN_CHEST)),
LOCATION(RC_KF_MIDOS_BOTTOM_RIGHT_CHEST, logic->HasItem(RG_OPEN_CHEST)),
- LOCATION(RC_MIDO_HINT, logic->Get(LOGIC_SHOWED_MIDO_SWORD_AND_SHIELD) && logic->IsChild && logic->HasItem(RG_SPEAK_KOKIRI)),
+ LOCATION(RC_MIDO_HINT, logic->Get(LOGIC_SHOWED_MIDO_SWORD_AND_SHIELD) && logic->IsChild && logic->HasItem(RG_SPEAK_KOKIRI)),
}, {
//Exits
ENTRANCE(RR_KOKIRI_FOREST, true),
diff --git a/soh/soh/Enhancements/randomizer/location_access/overworld/lon_lon_ranch.cpp b/soh/soh/Enhancements/randomizer/location_access/overworld/lon_lon_ranch.cpp
index 88975a2ec..2c4d98066 100644
--- a/soh/soh/Enhancements/randomizer/location_access/overworld/lon_lon_ranch.cpp
+++ b/soh/soh/Enhancements/randomizer/location_access/overworld/lon_lon_ranch.cpp
@@ -11,20 +11,20 @@ void RegionTable_Init_LonLonRanch() {
EVENT_ACCESS(LOGIC_LINKS_COW, logic->HasItem(RG_CHILD_WALLET) && logic->HasItem(RG_SPEAK_HYLIAN) && logic->CanUse(RG_EPONAS_SONG) && logic->IsAdult && logic->AtDay),
}, {
//Locations
- LOCATION(RC_SONG_FROM_MALON, logic->IsChild && logic->Get(LOGIC_MALON_RETURNED_FROM_CASTLE) && logic->HasItem(RG_SPEAK_HYLIAN) && logic->HasItem(RG_FAIRY_OCARINA) && logic->AtDay),
- LOCATION(RC_LLR_GS_TREE, logic->IsChild && logic->CanBonkTrees() && (logic->HasItem(RG_POWER_BRACELET) || logic->CanKillEnemy(RE_GOLD_SKULLTULA))),
- LOCATION(RC_LLR_GS_RAIN_SHED, logic->IsChild && logic->CanGetNightTimeGS() && (logic->HasItem(RG_POWER_BRACELET) || logic->CanKillEnemy(RE_GOLD_SKULLTULA))),
- LOCATION(RC_LLR_GS_HOUSE_WINDOW, logic->IsChild && logic->HookshotOrBoomerang() && logic->CanGetNightTimeGS()),
- LOCATION(RC_LLR_GS_BACK_WALL, logic->IsChild && logic->HookshotOrBoomerang() && logic->CanGetNightTimeGS()),
- LOCATION(RC_LLR_FRONT_POT_1, logic->IsChild && logic->CanBreakPots()),
- LOCATION(RC_LLR_FRONT_POT_2, logic->IsChild && logic->CanBreakPots()),
- LOCATION(RC_LLR_FRONT_POT_3, logic->IsChild && logic->CanBreakPots()),
- LOCATION(RC_LLR_FRONT_POT_4, logic->IsChild && logic->CanBreakPots()),
- LOCATION(RC_LLR_RAIN_SHED_POT_1, logic->IsChild && logic->CanBreakPots()),
- LOCATION(RC_LLR_RAIN_SHED_POT_2, logic->IsChild && logic->CanBreakPots()),
- LOCATION(RC_LLR_RAIN_SHED_POT_3, logic->IsChild && logic->CanBreakPots()),
- LOCATION(RC_LLR_NEAR_TREE_CRATE, logic->IsChild && logic->CanBreakCrates()),
- LOCATION(RC_LLR_TREE, logic->IsChild && logic->CanBonkTrees()),
+ LOCATION(RC_SONG_FROM_MALON, logic->IsChild && logic->Get(LOGIC_MALON_RETURNED_FROM_CASTLE) && logic->HasItem(RG_SPEAK_HYLIAN) && logic->HasItem(RG_FAIRY_OCARINA) && logic->AtDay),
+ LOCATION(RC_LLR_GS_TREE, logic->IsChild && logic->CanBonkTrees() && (logic->HasItem(RG_POWER_BRACELET) || logic->CanKillEnemy(RE_GOLD_SKULLTULA))),
+ LOCATION(RC_LLR_GS_RAIN_SHED, logic->IsChild && logic->CanGetNightTimeGS() && (logic->HasItem(RG_POWER_BRACELET) || logic->CanKillEnemy(RE_GOLD_SKULLTULA))),
+ LOCATION(RC_LLR_GS_HOUSE_WINDOW, logic->IsChild && logic->HookshotOrBoomerang() && logic->CanGetNightTimeGS()),
+ LOCATION(RC_LLR_GS_BACK_WALL, logic->IsChild && logic->HookshotOrBoomerang() && logic->CanGetNightTimeGS()),
+ LOCATION(RC_LLR_FRONT_POT_1, logic->IsChild && logic->CanBreakPots()),
+ LOCATION(RC_LLR_FRONT_POT_2, logic->IsChild && logic->CanBreakPots()),
+ LOCATION(RC_LLR_FRONT_POT_3, logic->IsChild && logic->CanBreakPots()),
+ LOCATION(RC_LLR_FRONT_POT_4, logic->IsChild && logic->CanBreakPots()),
+ LOCATION(RC_LLR_RAIN_SHED_POT_1, logic->IsChild && logic->CanBreakPots()),
+ LOCATION(RC_LLR_RAIN_SHED_POT_2, logic->IsChild && logic->CanBreakPots()),
+ LOCATION(RC_LLR_RAIN_SHED_POT_3, logic->IsChild && logic->CanBreakPots()),
+ LOCATION(RC_LLR_NEAR_TREE_CRATE, logic->IsChild && logic->CanBreakCrates()),
+ LOCATION(RC_LLR_TREE, logic->IsChild && logic->CanBonkTrees()),
LOCATION(RC_LLR_WONDER_BIG_FENCE, logic->IsAdult && logic->CanUse(RG_EPONAS_SONG) && (logic->HasItem(RG_CHILD_WALLET) || logic->Get(LOGIC_FREED_EPONA))),
LOCATION(RC_LLR_WONDER_SMALL_FENCE, logic->IsAdult && logic->CanUse(RG_EPONAS_SONG) && (logic->HasItem(RG_CHILD_WALLET) || logic->Get(LOGIC_FREED_EPONA))),
}, {
diff --git a/soh/soh/Enhancements/randomizer/location_access/overworld/zoras_fountain.cpp b/soh/soh/Enhancements/randomizer/location_access/overworld/zoras_fountain.cpp
index e1aca2863..d915a79e4 100644
--- a/soh/soh/Enhancements/randomizer/location_access/overworld/zoras_fountain.cpp
+++ b/soh/soh/Enhancements/randomizer/location_access/overworld/zoras_fountain.cpp
@@ -10,32 +10,32 @@ void RegionTable_Init_ZorasFountain() {
EVENT_ACCESS(LOGIC_FAIRY_ACCESS, logic->CallGossipFairyExceptSuns() || (logic->CanUse(RG_STICKS) && logic->AtDay)),
}, {
//Locations
- LOCATION(RC_ZF_GS_TREE, logic->IsChild && logic->CanBonkTrees() && (logic->HasItem(RG_POWER_BRACELET) || logic->CanKillEnemy(RE_GOLD_SKULLTULA))),
- LOCATION(RC_ZF_GS_ABOVE_THE_LOG, logic->IsChild && logic->HookshotOrBoomerang() && logic->CanGetNightTimeGS()),
- LOCATION(RC_ZF_FAIRY_GOSSIP_STONE_FAIRY, logic->CallGossipFairyExceptSuns()),
- LOCATION(RC_ZF_FAIRY_GOSSIP_STONE_FAIRY_BIG, logic->CanUse(RG_SONG_OF_STORMS)),
- LOCATION(RC_ZF_JABU_GOSSIP_STONE_FAIRY, logic->CallGossipFairyExceptSuns()),
- LOCATION(RC_ZF_JABU_GOSSIP_STONE_FAIRY_BIG, logic->CanUse(RG_SONG_OF_STORMS)),
- LOCATION(RC_ZF_FAIRY_GOSSIP_STONE, true),
- LOCATION(RC_ZF_JABU_GOSSIP_STONE, true),
- LOCATION(RC_ZF_NEAR_JABU_POT_1, logic->IsChild && logic->CanBreakPots()),
- LOCATION(RC_ZF_NEAR_JABU_POT_2, logic->IsChild && logic->CanBreakPots()),
- LOCATION(RC_ZF_NEAR_JABU_POT_3, logic->IsChild && logic->CanBreakPots()),
- LOCATION(RC_ZF_NEAR_JABU_POT_4, logic->IsChild && logic->CanBreakPots()),
+ LOCATION(RC_ZF_GS_TREE, logic->IsChild && logic->CanBonkTrees() && (logic->HasItem(RG_POWER_BRACELET) || logic->CanKillEnemy(RE_GOLD_SKULLTULA))),
+ LOCATION(RC_ZF_GS_ABOVE_THE_LOG, logic->IsChild && logic->HookshotOrBoomerang() && logic->CanGetNightTimeGS()),
+ LOCATION(RC_ZF_FAIRY_GOSSIP_STONE_FAIRY, logic->CallGossipFairyExceptSuns()),
+ LOCATION(RC_ZF_FAIRY_GOSSIP_STONE_FAIRY_BIG, logic->CanUse(RG_SONG_OF_STORMS)),
+ LOCATION(RC_ZF_JABU_GOSSIP_STONE_FAIRY, logic->CallGossipFairyExceptSuns()),
+ LOCATION(RC_ZF_JABU_GOSSIP_STONE_FAIRY_BIG, logic->CanUse(RG_SONG_OF_STORMS)),
+ LOCATION(RC_ZF_FAIRY_GOSSIP_STONE, true),
+ LOCATION(RC_ZF_JABU_GOSSIP_STONE, true),
+ LOCATION(RC_ZF_NEAR_JABU_POT_1, logic->IsChild && logic->CanBreakPots()),
+ LOCATION(RC_ZF_NEAR_JABU_POT_2, logic->IsChild && logic->CanBreakPots()),
+ LOCATION(RC_ZF_NEAR_JABU_POT_3, logic->IsChild && logic->CanBreakPots()),
+ LOCATION(RC_ZF_NEAR_JABU_POT_4, logic->IsChild && logic->CanBreakPots()),
LOCATION(RC_ZF_BOULDER, logic->BlastOrSmash()),
LOCATION(RC_ZF_SILVER_BOULDER, logic->CanUse(RG_SILVER_GAUNTLETS)),
LOCATION(RC_ZF_UNDERGROUND_BOULDER, logic->CanUse(RG_SILVER_GAUNTLETS) && logic->BlastOrSmash()),
- LOCATION(RC_ZF_TREE, logic->IsChild && logic->CanBonkTrees()),
- LOCATION(RC_ZF_BUSH_1, logic->IsChild),
- LOCATION(RC_ZF_BUSH_2, logic->IsChild),
- LOCATION(RC_ZF_BUSH_3, logic->IsChild),
- LOCATION(RC_ZF_BUSH_4, logic->IsChild),
- LOCATION(RC_ZF_BUSH_5, logic->IsChild),
- LOCATION(RC_ZF_BUSH_6, logic->IsChild),
- LOCATION(RC_ZF_LOG_BUTTERFLY_FAIRY, logic->IsChild && logic->AtDay && logic->CanUse(RG_STICKS)),
+ LOCATION(RC_ZF_TREE, logic->IsChild && logic->CanBonkTrees()),
+ LOCATION(RC_ZF_BUSH_1, logic->IsChild),
+ LOCATION(RC_ZF_BUSH_2, logic->IsChild),
+ LOCATION(RC_ZF_BUSH_3, logic->IsChild),
+ LOCATION(RC_ZF_BUSH_4, logic->IsChild),
+ LOCATION(RC_ZF_BUSH_5, logic->IsChild),
+ LOCATION(RC_ZF_BUSH_6, logic->IsChild),
+ LOCATION(RC_ZF_LOG_BUTTERFLY_FAIRY, logic->IsChild && logic->AtDay && logic->CanUse(RG_STICKS)),
LOCATION(RC_ZF_JABU_JABU_PLATFORM_RECTANGLE_SIGN, logic->IsChild && logic->CanRead()),
LOCATION(RC_ZF_ENTRANCE_ARROW_SIGN, logic->CanRead()),
- LOCATION(RC_ZF_WONDER_ROCK, logic->IsAdult && logic->ReachScarecrow()),
+ LOCATION(RC_ZF_WONDER_ROCK, logic->IsAdult && logic->ReachScarecrow()),
}, {
//Exits
ENTRANCE(RR_ZD_BEHIND_KING_ZORA, true),
diff --git a/soh/soh/stubs.c b/soh/soh/stubs.c
index 2b0323c37..6a87ff6a4 100644
--- a/soh/soh/stubs.c
+++ b/soh/soh/stubs.c
@@ -35,10 +35,9 @@ f32 qNaN0x10000 = 0x7F810000;
#pragma warning(disable : 4716)
#endif
-// void gSPTextureRectangle(Gfx* pkt, s32 xl, s32 yl, s32 xh, s32 yh, u32 tile, u32 s, s32 t, u32 dsdx, u32 dtdy)
-//{
-// __gSPTextureRectangle(pkt, xl, yl, xh, yh, tile, s, t, dsdx, dtdy);
-// }
+// void gSPTextureRectangle(Gfx* pkt, s32 xl, s32 yl, s32 xh, s32 yh, u32 tile, u32 s, s32 t, u32 dsdx, u32 dtdy) {
+// __gSPTextureRectangle(pkt, xl, yl, xh, yh, tile, s, t, dsdx, dtdy);
+//}
OSId osGetThreadId(OSThread* thread) {
return 0;
diff --git a/soh/src/code/z_view.c b/soh/src/code/z_view.c
index 2dd05af72..2057ea7e4 100644
--- a/soh/src/code/z_view.c
+++ b/soh/src/code/z_view.c
@@ -428,7 +428,7 @@ s32 func_800AAA9C(View* view) {
Matrix_MtxToMtxF(projection, &mf);
osSyncPrintf("projection\n");
for (i = 0; i < 4; i++) {
- osSyncPrintf(" %f %f %f %f\n", mf.mf[i][0], mf.mf[i][1], mf.mf[i][2], mf.mf[i][3]);
+ osSyncPrintf("\t%f\t%f\t%f\t%f\n", mf.mf[i][0], mf.mf[i][1], mf.mf[i][2], mf.mf[i][3]);
}
osSyncPrintf("\n");
}
@@ -469,7 +469,7 @@ s32 func_800AAA9C(View* view) {
Matrix_MtxToMtxF(view->viewingPtr, &mf);
osSyncPrintf("viewing\n");
for (i = 0; i < 4; i++) {
- osSyncPrintf(" %f %f %f %f\n", mf.mf[i][0], mf.mf[i][1], mf.mf[i][2], mf.mf[i][3]);
+ osSyncPrintf("\t%f\t%f\t%f\t%f\n", mf.mf[i][0], mf.mf[i][1], mf.mf[i][2], mf.mf[i][3]);
}
osSyncPrintf("\n");
}