Skip to content

Commit e03ded9

Browse files
committed
rest of gtg logic
1 parent 7a5d6ea commit e03ded9

File tree

1 file changed

+44
-32
lines changed

1 file changed

+44
-32
lines changed

soh/soh/Enhancements/randomizer/location_access/dungeons/gerudo_training_ground.cpp

Lines changed: 44 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -43,9 +43,9 @@ void RegionTable_Init_GerudoTrainingGround() {
4343
EventAccess(LOGIC_GTG_SILVER_SLOPE, []{return logic->CanUse(logic->IsAdult ? RG_HOOKSHOT : RG_LONGSHOT) || ctx->GetTrickOption(RT_GTG_WITHOUT_HOOKSHOT);}),
4444
}, {
4545
//Locations
46-
LOCATION(RC_GTG_SILVER_SLOPE_1, true), // TODO figure out which of these need hookshot
46+
LOCATION(RC_GTG_SILVER_SLOPE_1, true),
4747
LOCATION(RC_GTG_SILVER_SLOPE_2, true),
48-
LOCATION(RC_GTG_SILVER_SLOPE_3, true),
48+
LOCATION(RC_GTG_SILVER_SLOPE_3, logic->CanUse(logic->IsAdult ? RG_HOOKSHOT : RG_LONGSHOT) || ctx->GetTrickOption(RT_GTG_WITHOUT_HOOKSHOT)),
4949
LOCATION(RC_GTG_SILVER_SLOPE_4, true),
5050
LOCATION(RC_GTG_SILVER_SLOPE_5, true),
5151
}, {
@@ -72,6 +72,7 @@ void RegionTable_Init_GerudoTrainingGround() {
7272
LOCATION(RC_GERUDO_TRAINING_GROUND_MAZE_RIGHT_CENTRAL_CHEST, true),
7373
LOCATION(RC_GERUDO_TRAINING_GROUND_MAZE_RIGHT_SIDE_CHEST, true),
7474
LOCATION(RC_GERUDO_TRAINING_GROUND_FREESTANDING_KEY, true),
75+
LOCATION(RC_GTG_SILVER_LAVA_5, true),
7576
}, {
7677
//Exits
7778
Entrance(RR_GERUDO_TRAINING_GROUND_LAVA_ROOM, []{return true;}),
@@ -161,9 +162,8 @@ void RegionTable_Init_GerudoTrainingGround() {
161162
//Locations
162163
LOCATION(RC_GTG_SILVER_LAVA_1, true),
163164
LOCATION(RC_GTG_SILVER_LAVA_2, true),
164-
LOCATION(RC_GTG_SILVER_LAVA_3, true),
165-
LOCATION(RC_GTG_SILVER_LAVA_4, true),
166-
LOCATION(RC_GTG_SILVER_LAVA_5, true),
165+
LOCATION(RC_GTG_SILVER_LAVA_3, logic->CanUse(RG_HOVER_BOOTS) || logic->CanUse(RG_SONG_OF_TIME)),
166+
LOCATION(RC_GTG_SILVER_LAVA_5, logic->CanUse(RG_HOVER_BOOTS) || logic->CanUse(RG_SONG_OF_TIME)),
167167
}, {
168168
//Exits
169169
Entrance(RR_GERUDO_TRAINING_GROUND_DINALFOS, []{return true;}),
@@ -173,7 +173,10 @@ void RegionTable_Init_GerudoTrainingGround() {
173173
Entrance(RR_GERUDO_TRAINING_GROUND_UNDERWATER, []{return logic->HasItem(RG_GTG_SILVER_LAVA);}),
174174
});
175175

176-
areaTable[RR_GERUDO_TRAINING_GROUND_LAVA_ROOM_UPPER_LEDGE] = Region("Gerudo Training Ground Lava Room", SCENE_GERUDO_TRAINING_GROUND, {}, {}, {
176+
areaTable[RR_GERUDO_TRAINING_GROUND_LAVA_ROOM_UPPER_LEDGE] = Region("Gerudo Training Ground Lava Room", SCENE_GERUDO_TRAINING_GROUND, {}, {
177+
LOCATION(RC_GTG_SILVER_LAVA_4, logic->CanUse(RG_HOOKSHOT)),
178+
LOCATION(RC_GTG_SILVER_LAVA_5, true),
179+
}, {
177180
//Exits
178181
// possible to make across with as adult's rolling jump, no hookshot necessary
179182
Entrance(RR_GERUDO_TRAINING_GROUND_LAVA_ROOM, []{return logic->CanUse(RG_HOOKSHOT) || logic->CanUse(RG_HOVER_BOOTS) || logic->CanUse(RG_SONG_OF_TIME);}),
@@ -186,11 +189,12 @@ void RegionTable_Init_GerudoTrainingGround() {
186189
}, {
187190
//Locations
188191
LOCATION(RC_GERUDO_TRAINING_GROUND_UNDERWATER_SILVER_RUPEE_CHEST, logic->CanUse(RG_SONG_OF_TIME) && logic->CanUse(RG_IRON_BOOTS) && logic->HasItem(RG_BRONZE_SCALE) && logic->WaterTimer() >= 24),
189-
LOCATION(RC_GTG_SILVER_WATER_1, logic->CanUse(RG_SONG_OF_TIME) && logic->CanUse(RG_IRON_BOOTS) && logic->HasItem(RG_BRONZE_SCALE) && logic->WaterTimer() >= 24),
190-
LOCATION(RC_GTG_SILVER_WATER_2, logic->CanUse(RG_SONG_OF_TIME) && logic->CanUse(RG_IRON_BOOTS) && logic->HasItem(RG_BRONZE_SCALE) && logic->WaterTimer() >= 24),
191-
LOCATION(RC_GTG_SILVER_WATER_3, logic->CanUse(RG_SONG_OF_TIME) && logic->CanUse(RG_IRON_BOOTS) && logic->HasItem(RG_BRONZE_SCALE) && logic->WaterTimer() >= 24),
192-
LOCATION(RC_GTG_SILVER_WATER_4, logic->CanUse(RG_SONG_OF_TIME) && logic->CanUse(RG_IRON_BOOTS) && logic->HasItem(RG_BRONZE_SCALE) && logic->WaterTimer() >= 24),
193-
LOCATION(RC_GTG_SILVER_WATER_5, logic->CanUse(RG_SONG_OF_TIME) && logic->CanUse(RG_IRON_BOOTS) && logic->HasItem(RG_BRONZE_SCALE) && logic->WaterTimer() >= 24),
192+
// 3 & 5 can be retrieved with only iron boots by attempting to backflip underwater
193+
LOCATION(RC_GTG_SILVER_WATER_1, logic->CanUse(RG_SONG_OF_TIME) && logic->CanUse(RG_IRON_BOOTS) && logic->WaterTimer() >= 16),
194+
LOCATION(RC_GTG_SILVER_WATER_2, logic->CanUse(RG_SONG_OF_TIME) && (logic->CanUse(RG_IRON_BOOTS) && logic->WaterTimer() >= 16) || logic->HasItem(RG_GOLDEN_SCALE)),
195+
LOCATION(RC_GTG_SILVER_WATER_3, logic->CanUse(RG_SONG_OF_TIME) && logic->CanUse(RG_IRON_BOOTS) && logic->WaterTimer() >= 16),
196+
LOCATION(RC_GTG_SILVER_WATER_4, logic->CanUse(RG_SONG_OF_TIME) && logic->CanUse(RG_IRON_BOOTS) && (logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_HOOKSHOT)) && logic->WaterTimer() >= 16),
197+
LOCATION(RC_GTG_SILVER_WATER_5, logic->CanUse(RG_SONG_OF_TIME) && logic->CanUse(RG_IRON_BOOTS) && logic->WaterTimer() >= 16),
194198
}, {
195199
//Exits
196200
Entrance(RR_GERUDO_TRAINING_GROUND_LAVA_ROOM, []{return true;}),
@@ -363,19 +367,20 @@ void RegionTable_Init_GerudoTrainingGround() {
363367
Entrance(RR_GERUDO_TRAINING_GROUND_MQ_TORCH_SLUG_ROOM, []{return true;}),
364368
});
365369

366-
//this region exists to place silver rupee items on later, normally it's all on fire and cannot be stood on without access from another area
367-
//This covers the 2 platforms that can be jumped to directly from RR_GERUDO_TRAINING_GROUND_MQ_SWITCH_LEDGE
368-
//the unshuffled rupee collection is handled by the event GTGPlatformSilverRupees
369-
areaTable[RR_GERUDO_TRAINING_GROUND_MQ_LEDGE_SIDE_PLATFORMS] = Region("Gerudo Training Ground MQ Ledge Side Platforms", SCENE_GERUDO_TRAINING_GROUND, {}, {}, {
370+
//This covers the 2 platforms that can be jumped to directly from RR_GERUDO_TRAINING_GROUND_MQ_SWITCH_LEDGE, without flame circles
371+
areaTable[RR_GERUDO_TRAINING_GROUND_MQ_LEDGE_SIDE_PLATFORMS] = Region("Gerudo Training Ground MQ Ledge Side Platforms", SCENE_GERUDO_TRAINING_GROUND, {}, {
372+
LOCATION(RC_GTG_MQ_SILVER_LAVA_1, true),
373+
LOCATION(RC_GTG_MQ_SILVER_LAVA_3, true),
374+
}, {
370375
//Exits
371376
//This is merely to extend this region's logic if you have hovers
372377
Entrance(RR_GERUDO_TRAINING_GROUND_MQ_FURTHEST_PLATFORM, []{return logic->CanUse(RG_HOVER_BOOTS);}),
373378
});
374379

375-
//this region exists to place silver rupee items on later, normally it's all on fire and cannot be stood on without access from another area
376-
//This covers the platform that needs hover boots or the spawned targets to reach from any starting point other than RR_GERUDO_TRAINING_GROUND_MQ_MAZE_RIGHT
377-
//the unshuffled rupee collection is handled by the event GTGPlatformSilverRupees
378-
areaTable[RR_GERUDO_TRAINING_GROUND_MQ_FURTHEST_PLATFORM] = Region("Gerudo Training Ground MQ Furthest Platform", SCENE_GERUDO_TRAINING_GROUND, {}, {}, {
380+
//This covers the platform that needs hover boots or the spawned targets to reach from any starting point other than RR_GERUDO_TRAINING_GROUND_MQ_MAZE_RIGHT, without flame circles
381+
areaTable[RR_GERUDO_TRAINING_GROUND_MQ_FURTHEST_PLATFORM] = Region("Gerudo Training Ground MQ Furthest Platform", SCENE_GERUDO_TRAINING_GROUND, {}, {
382+
LOCATION(RC_GTG_MQ_SILVER_LAVA_2, true),
383+
}, {
379384
//Exits
380385
//This is merely to extend this region's logic if you have hovers
381386
Entrance(RR_GERUDO_TRAINING_GROUND_MQ_LEDGE_SIDE_PLATFORMS, []{return logic->CanUse(RG_HOVER_BOOTS);}),
@@ -384,7 +389,11 @@ void RegionTable_Init_GerudoTrainingGround() {
384389
areaTable[RR_GERUDO_TRAINING_GROUND_MQ_PLATFORMS_UNLIT_TORCH] = Region("Gerudo Training Ground MQ Platforms Unlit Torch", SCENE_GERUDO_TRAINING_GROUND, {
385390
//Events
386391
EventAccess(LOGIC_GTG_MQ_SILVER_LAVA, []{return logic->HasFireSource() && logic->CanUse(RG_HOVER_BOOTS);}),
387-
}, {}, {
392+
}, {
393+
LOCATION(RC_GTG_MQ_SILVER_LAVA_4, logic->HasFireSource()),
394+
LOCATION(RC_GTG_MQ_SILVER_LAVA_5, logic->HasFireSource()),
395+
LOCATION(RC_GTG_MQ_SILVER_LAVA_6, logic->HasFireSource()),
396+
}, {
388397
//Exits
389398
Entrance(RR_GERUDO_TRAINING_GROUND_MQ_UNDERWATER, []{return logic->HasItem(RG_GTG_MQ_SILVER_LAVA);}),
390399
Entrance(RR_GERUDO_TRAINING_GROUND_MQ_LEDGE_SIDE_PLATFORMS, []{return logic->HasFireSource() && logic->CanUse(RG_HOVER_BOOTS);}),
@@ -394,16 +403,13 @@ void RegionTable_Init_GerudoTrainingGround() {
394403

395404
areaTable[RR_GERUDO_TRAINING_GROUND_MQ_TORCH_SIDE_PLATFORMS] = Region("Gerudo Training Ground Torch Side Platforms", SCENE_GERUDO_TRAINING_GROUND, {
396405
//Events
397-
//this torch shot is possible as child but tight and obtuse enough to be a trick
406+
//this torch shot is possible as child but tight and obtuse enough to be a trick, hoverboots can also light with stick as trick
398407
EventAccess(LOGIC_GTG_MQ_SILVER_LAVA, []{return ((logic->CanUse(RG_FAIRY_BOW) && logic->IsAdult) || logic->CanUse(RG_FIRE_ARROWS)) && logic->CanUse(RG_HOVER_BOOTS);}),
399408
}, {
400409
//Locations
401-
LOCATION(RC_GTG_MQ_SILVER_LAVA_1, logic->Get(LOGIC_GTG_MQ_SILVER_LAVA)),
402-
LOCATION(RC_GTG_MQ_SILVER_LAVA_2, logic->Get(LOGIC_GTG_MQ_SILVER_LAVA)),
403-
LOCATION(RC_GTG_MQ_SILVER_LAVA_3, logic->Get(LOGIC_GTG_MQ_SILVER_LAVA)),
404-
LOCATION(RC_GTG_MQ_SILVER_LAVA_4, logic->Get(LOGIC_GTG_MQ_SILVER_LAVA)),
405-
LOCATION(RC_GTG_MQ_SILVER_LAVA_5, logic->Get(LOGIC_GTG_MQ_SILVER_LAVA)),
406-
LOCATION(RC_GTG_MQ_SILVER_LAVA_6, logic->Get(LOGIC_GTG_MQ_SILVER_LAVA)),
410+
LOCATION(RC_GTG_MQ_SILVER_LAVA_4, (logic->CanUse(RG_FAIRY_BOW) && logic->IsAdult) || logic->CanUse(RG_FIRE_ARROWS)),
411+
LOCATION(RC_GTG_MQ_SILVER_LAVA_5, (logic->CanUse(RG_FAIRY_BOW) && logic->IsAdult) || logic->CanUse(RG_FIRE_ARROWS)),
412+
LOCATION(RC_GTG_MQ_SILVER_LAVA_6, (logic->CanUse(RG_FAIRY_BOW) && logic->IsAdult) || logic->CanUse(RG_FIRE_ARROWS)),
407413
}, {
408414
//Exits
409415
Entrance(RR_GERUDO_TRAINING_GROUND_MQ_LEDGE_SIDE_PLATFORMS, []{return ((logic->CanUse(RG_FAIRY_BOW) && logic->IsAdult) || logic->CanUse(RG_FIRE_ARROWS)) && logic->CanUse(RG_HOVER_BOOTS);}),
@@ -413,14 +419,14 @@ void RegionTable_Init_GerudoTrainingGround() {
413419
});
414420

415421
areaTable[RR_GERUDO_TRAINING_GROUND_MQ_UNDERWATER] = Region("Gerudo Training Ground MQ Underwater", SCENE_GERUDO_TRAINING_GROUND, {
416-
EventAccess(LOGIC_GTG_MQ_SILVER_WATER, []{return logic->HasFireSource() && logic->CanUse(RG_IRON_BOOTS) && logic->WaterTimer() >= 24 && logic->HasItem(RG_BRONZE_SCALE) && logic->TakeDamage();}),
422+
EventAccess(LOGIC_GTG_MQ_SILVER_WATER, []{return logic->HasFireSource() && logic->CanUse(RG_IRON_BOOTS) && logic->WaterTimer() >= 24 && logic->TakeDamage();}),
417423
}, {
418424
//Locations
419425
//it is possible to snipe the stingers with bow or sling before dropping in, or just get really lucky, and avoid needing to take damage, but that might be trick worthy
420426
LOCATION(RC_GERUDO_TRAINING_GROUND_MQ_UNDERWATER_SILVER_RUPEE_CHEST, logic->HasItem(RG_GTG_MQ_SILVER_WATER)),
421-
LOCATION(RC_GTG_MQ_SILVER_WATER_1, logic->HasFireSource() && logic->CanUse(RG_IRON_BOOTS) && logic->WaterTimer() >= 24 && logic->HasItem(RG_BRONZE_SCALE) && logic->TakeDamage()),
422-
LOCATION(RC_GTG_MQ_SILVER_WATER_2, logic->HasFireSource() && logic->CanUse(RG_IRON_BOOTS) && logic->WaterTimer() >= 24 && logic->HasItem(RG_BRONZE_SCALE) && logic->TakeDamage()),
423-
LOCATION(RC_GTG_MQ_SILVER_WATER_3, logic->HasFireSource() && logic->CanUse(RG_IRON_BOOTS) && logic->WaterTimer() >= 24 && logic->HasItem(RG_BRONZE_SCALE) && logic->TakeDamage()),
427+
LOCATION(RC_GTG_MQ_SILVER_WATER_1, logic->HasFireSource() && logic->CanUse(RG_IRON_BOOTS) && logic->WaterTimer() >= 24 && logic->TakeDamage()),
428+
LOCATION(RC_GTG_MQ_SILVER_WATER_2, logic->HasFireSource() && logic->CanUse(RG_IRON_BOOTS) && logic->WaterTimer() >= 24 && logic->TakeDamage()),
429+
LOCATION(RC_GTG_MQ_SILVER_WATER_3, logic->HasFireSource() && logic->CanUse(RG_IRON_BOOTS) && logic->WaterTimer() >= 24 && logic->TakeDamage()),
424430
}, {
425431
//Exits
426432
Entrance(RR_GERUDO_TRAINING_GROUND_MQ_PLATFORMS_UNLIT_TORCH, []{return true;}),
@@ -434,10 +440,16 @@ void RegionTable_Init_GerudoTrainingGround() {
434440
//Locations
435441
LOCATION(RC_GERUDO_TRAINING_GROUND_MQ_MAZE_RIGHT_CENTRAL_CHEST, true),
436442
LOCATION(RC_GERUDO_TRAINING_GROUND_MQ_MAZE_RIGHT_SIDE_CHEST, true),
443+
LOCATION(RC_GTG_MQ_SILVER_LAVA_1, logic->CanUse(RG_FIRE_ARROWS)),
444+
LOCATION(RC_GTG_MQ_SILVER_LAVA_2, logic->CanUse(RG_FIRE_ARROWS)),
445+
LOCATION(RC_GTG_MQ_SILVER_LAVA_3, logic->CanUse(RG_FIRE_ARROWS)),
446+
LOCATION(RC_GTG_MQ_SILVER_LAVA_4, logic->CanUse(RG_FIRE_ARROWS)),
447+
LOCATION(RC_GTG_MQ_SILVER_LAVA_5, logic->CanUse(RG_FIRE_ARROWS)),
448+
LOCATION(RC_GTG_MQ_SILVER_LAVA_6, logic->CanUse(RG_FIRE_ARROWS)),
437449
}, {
438450
//Exits
439451
Entrance(RR_GERUDO_TRAINING_GROUND_MQ_LOBBY, []{return true;}),
440-
Entrance(RR_GERUDO_TRAINING_GROUND_MQ_LEDGE_SIDE_PLATFORMS, []{return logic->CanUse(RG_FIRE_ARROWS) || logic->CanUse(RG_LONGSHOT);}),
452+
Entrance(RR_GERUDO_TRAINING_GROUND_MQ_TORCH_SIDE_PLATFORMS, []{return logic->CanUse(RG_FIRE_ARROWS) || logic->CanUse(RG_LONGSHOT);}),
441453
Entrance(RR_GERUDO_TRAINING_GROUND_MQ_PLATFORMS_UNLIT_TORCH, []{return logic->CanUse(RG_FIRE_ARROWS) || logic->CanUse(RG_LONGSHOT) || (logic->HasItem(RG_GTG_MQ_SILVER_LAVA) && logic->CanUse(RG_HOVER_BOOTS));}),
442454
Entrance(RR_GERUDO_TRAINING_GROUND_MQ_LEDGE_SIDE_PLATFORMS, []{return logic->CanUse(RG_FIRE_ARROWS);}),
443455
Entrance(RR_GERUDO_TRAINING_GROUND_MQ_FURTHEST_PLATFORM, []{return logic->CanUse(RG_FIRE_ARROWS);}),

0 commit comments

Comments
 (0)