diff --git a/ootrando_overworldmap_hamsda.zip b/ootrando_overworldmap_hamsda.zip index fa4676c8..ed6dcab5 100644 Binary files a/ootrando_overworldmap_hamsda.zip and b/ootrando_overworldmap_hamsda.zip differ diff --git a/ootrando_overworldmap_hamsda/changelog.md b/ootrando_overworldmap_hamsda/changelog.md index 40324a4b..7dcc0e5e 100644 --- a/ootrando_overworldmap_hamsda/changelog.md +++ b/ootrando_overworldmap_hamsda/changelog.md @@ -1,5 +1,10 @@ # Changelog +## 3.2.1.0 + +- added (limited) random spawns support to non ER +- fixed grottos beyond Mido w/ explosives but w/o child access showing in logic + ## 3.2.0.0 - fixed bridge condition counter in ER diff --git a/ootrando_overworldmap_hamsda/images/entrance_spawn_dmc_ff.png b/ootrando_overworldmap_hamsda/images/entrance_spawn_dmc_ff.png new file mode 100644 index 00000000..c930dbb7 Binary files /dev/null and b/ootrando_overworldmap_hamsda/images/entrance_spawn_dmc_ff.png differ diff --git a/ootrando_overworldmap_hamsda/images/entrance_spawn_dmt_ff.png b/ootrando_overworldmap_hamsda/images/entrance_spawn_dmt_ff.png new file mode 100644 index 00000000..3b2589d7 Binary files /dev/null and b/ootrando_overworldmap_hamsda/images/entrance_spawn_dmt_ff.png differ diff --git a/ootrando_overworldmap_hamsda/images/entrance_spawn_gc_shop.png b/ootrando_overworldmap_hamsda/images/entrance_spawn_gc_shop.png new file mode 100644 index 00000000..33c0acbe Binary files /dev/null and b/ootrando_overworldmap_hamsda/images/entrance_spawn_gc_shop.png differ diff --git a/ootrando_overworldmap_hamsda/images/entrance_spawn_hc_ff.png b/ootrando_overworldmap_hamsda/images/entrance_spawn_hc_ff.png new file mode 100644 index 00000000..55e704d0 Binary files /dev/null and b/ootrando_overworldmap_hamsda/images/entrance_spawn_hc_ff.png differ diff --git a/ootrando_overworldmap_hamsda/images/entrance_spawn_lh_fish.png b/ootrando_overworldmap_hamsda/images/entrance_spawn_lh_fish.png new file mode 100644 index 00000000..bf5a8272 Binary files /dev/null and b/ootrando_overworldmap_hamsda/images/entrance_spawn_lh_fish.png differ diff --git a/ootrando_overworldmap_hamsda/images/entrance_spawn_ogc_ff.png b/ootrando_overworldmap_hamsda/images/entrance_spawn_ogc_ff.png new file mode 100644 index 00000000..45aa50e9 Binary files /dev/null and b/ootrando_overworldmap_hamsda/images/entrance_spawn_ogc_ff.png differ diff --git a/ootrando_overworldmap_hamsda/images/entrance_spawn_zd_shop.png b/ootrando_overworldmap_hamsda/images/entrance_spawn_zd_shop.png new file mode 100644 index 00000000..9780b77a Binary files /dev/null and b/ootrando_overworldmap_hamsda/images/entrance_spawn_zd_shop.png differ diff --git a/ootrando_overworldmap_hamsda/images/overworld_map.png b/ootrando_overworldmap_hamsda/images/overworld_map.png deleted file mode 100644 index 344271a4..00000000 Binary files a/ootrando_overworldmap_hamsda/images/overworld_map.png and /dev/null differ diff --git a/ootrando_overworldmap_hamsda/images/overworld_spawns.png b/ootrando_overworldmap_hamsda/images/overworld_spawns.png new file mode 100644 index 00000000..938e4ea0 Binary files /dev/null and b/ootrando_overworldmap_hamsda/images/overworld_spawns.png differ diff --git a/ootrando_overworldmap_hamsda/items/cap_spawns.json b/ootrando_overworldmap_hamsda/items/cap_spawns.json new file mode 100644 index 00000000..d71b31e7 --- /dev/null +++ b/ootrando_overworldmap_hamsda/items/cap_spawns.json @@ -0,0 +1,80 @@ +[ + { + "name": "DMC Lower", + "type": "toggle", + "img": "images/entrance_overworld_dmc_lwr.png", + "codes": "entrance_overworld_dmc_lwr" + }, + { + "name": "Death Mountain Summit", + "type": "toggle", + "img": "images/entrance_overworld_dm_smt.png", + "codes": "entrance_overworld_dm_smt" + }, + { + "name": "Gerudo Fortress", + "type": "toggle", + "img": "images/entrance_overworld_gf.png", + "codes": "entrance_overworld_gf" + }, + { + "name": "Zoras Domain", + "type": "toggle", + "img": "images/entrance_overworld_zd.png", + "codes": "entrance_overworld_zd" + }, + { + "name": "Zora River", + "type": "toggle", + "img": "images/entrance_overworld_zr.png", + "codes": "entrance_overworld_zr" + }, + { + "name": "Sacred Forest Meadow", + "type": "toggle", + "img": "images/entrance_overworld_sfm.png", + "codes": "entrance_overworld_sfm" + }, + { + "name": "DMC Fairy", + "type": "toggle", + "img": "images/entrance_spawn_dmc_ff.png", + "codes": "entrance_spawn_dmc_ff" + }, + { + "name": "DMT Fairy", + "type": "toggle", + "img": "images/entrance_spawn_dmt_ff.png", + "codes": "entrance_spawn_dmt_ff" + }, + { + "name": "HC Fairy", + "type": "toggle", + "img": "images/entrance_spawn_hc_ff.png", + "codes": "entrance_spawn_hc_ff" + }, + { + "name": "GC Shop", + "type": "toggle", + "img": "images/entrance_spawn_gc_shop.png", + "codes": "entrance_spawn_gc_shop" + }, + { + "name": "LH Fishing", + "type": "toggle", + "img": "images/entrance_spawn_lh_fish.png", + "codes": "entrance_spawn_lh_fish" + }, + { + "name": "ZD Shop", + "type": "toggle", + "img": "images/entrance_spawn_zd_shop.png", + "codes": "entrance_spawn_zd_shop" + }, + { + "name": "OGC Fairy", + "type": "toggle", + "img": "images/entrance_spawn_ogc_ff.png", + "codes": "entrance_spawn_ogc_ff" + } +] \ No newline at end of file diff --git a/ootrando_overworldmap_hamsda/layouts/capture.json b/ootrando_overworldmap_hamsda/layouts/capture.json index 28389a97..10324dce 100644 --- a/ootrando_overworldmap_hamsda/layouts/capture.json +++ b/ootrando_overworldmap_hamsda/layouts/capture.json @@ -96,5 +96,55 @@ ] ] } + }, + "tracker_capture_spawn_child": { + "type": "container", + "content": { + "type": "itemgrid", + "h_alignment": "center", + "item_margin": "1,2", + "rows": [ + [ + "entrance_overworld_dmc_lwr", + "entrance_overworld_dm_smt", + "entrance_overworld_gf", + "entrance_overworld_zd", + "entrance_overworld_zr" + ], + [ + "entrance_spawn_dmc_ff", + "entrance_spawn_dmt_ff", + "entrance_spawn_hc_ff", + "", + "" + ] + ] + } + }, + "tracker_capture_spawn_adult": { + "type": "container", + "content": { + "type": "itemgrid", + "h_alignment": "center", + "item_margin": "1,2", + "rows": [ + [ + "entrance_overworld_dmc_lwr", + "entrance_overworld_dm_smt", + "entrance_overworld_gf", + "entrance_overworld_zd", + "entrance_overworld_sfm", + "" + ], + [ + "entrance_spawn_dmc_ff", + "entrance_spawn_dmt_ff", + "entrance_spawn_gc_shop", + "entrance_spawn_zd_shop", + "entrance_spawn_lh_fish", + "entrance_spawn_ogc_ff" + ] + ] + } } } \ No newline at end of file diff --git a/ootrando_overworldmap_hamsda/layouts/tracker.json b/ootrando_overworldmap_hamsda/layouts/tracker.json index 74c05603..a3a0e562 100644 --- a/ootrando_overworldmap_hamsda/layouts/tracker.json +++ b/ootrando_overworldmap_hamsda/layouts/tracker.json @@ -5,6 +5,6 @@ }, "tracker_horizontal": { "type": "layout", - "key": "tracker_top_map" + "key": "tracker_right_map" } } \ No newline at end of file diff --git a/ootrando_overworldmap_hamsda/locations/dung_mq.json b/ootrando_overworldmap_hamsda/locations/dung_mq.json index 5c5e680d..ec6cde2e 100644 --- a/ootrando_overworldmap_hamsda/locations/dung_mq.json +++ b/ootrando_overworldmap_hamsda/locations/dung_mq.json @@ -2678,7 +2678,7 @@ "name": "Gerudo Training Grounds MQ", "parent": "Gerudo Fortress", "access_rules": [ - "gtg_mq,$has_age|adult,$gerudo_card" + "gtg_mq,$gerudo_valley_far_side,$gerudo_card" ], "sections": [ { diff --git a/ootrando_overworldmap_hamsda/locations/dung_reg.json b/ootrando_overworldmap_hamsda/locations/dung_reg.json index 1d00b86b..0fd477b2 100644 --- a/ootrando_overworldmap_hamsda/locations/dung_reg.json +++ b/ootrando_overworldmap_hamsda/locations/dung_reg.json @@ -2717,7 +2717,9 @@ "name": "North F1 Carpenter", "short_name": "North F1", "access_rules": [ - "$has_age|adult" + "$gerudo_valley_far_side", + "$spawn_access|Gerudo Fortress|child,sword1", + "$spawn_access|Gerudo Fortress|child,[sword1],sticks" ], "chest_unopened_img": "images/chest_brown_small_key.png", "item_count": 1 @@ -2726,11 +2728,13 @@ "name": "North F2 Carpenter", "short_name": "North F2", "access_rules": [ - "$has_age|adult,$gerudo_card", - "$has_age|adult,bow", - "$has_age|adult,hookshot", - "$has_age|adult,hoverboots", - "$has_age|adult,[logic_gerudo_kitchen]" + "$gerudo_valley_far_side,$gerudo_card", + "$gerudo_valley_far_side,bow", + "$gerudo_valley_far_side,hookshot", + "$gerudo_valley_far_side,hoverboots", + "$gerudo_valley_far_side,[logic_gerudo_kitchen]", + "$spawn_access|Gerudo Fortress|child,sword1,[logic_gerudo_kitchen]", + "$spawn_access|Gerudo Fortress|child,[sword1],sticks,[logic_gerudo_kitchen]" ], "visibility_rules": [ "gerudo_fortress_normal" @@ -2742,7 +2746,9 @@ "name": "South F1 Carpenter", "short_name": "South F1", "access_rules": [ - "$has_age|adult" + "$gerudo_valley_far_side", + "$spawn_access|Gerudo Fortress|child,sword1", + "$spawn_access|Gerudo Fortress|child,[sword1],sticks" ], "visibility_rules": [ "gerudo_fortress_normal" @@ -2754,7 +2760,9 @@ "name": "South F2 Carpenter", "short_name": "South F2", "access_rules": [ - "$has_age|adult" + "$gerudo_valley_far_side", + "$spawn_access|Gerudo Fortress|child,sword1", + "$spawn_access|Gerudo Fortress|child,[sword1],sticks" ], "visibility_rules": [ "gerudo_fortress_normal" @@ -2765,12 +2773,16 @@ { "name": "Gerudo Membership Card", "access_rules": [ - "gerudo_fortress_normal,gf_small_keys:4,$has_age|adult,$gerudo_card", - "gerudo_fortress_normal,gf_small_keys:4,$has_age|adult,bow", - "gerudo_fortress_normal,gf_small_keys:4,$has_age|adult,hookshot", - "gerudo_fortress_normal,gf_small_keys:4,$has_age|adult,hoverboots", - "gerudo_fortress_normal,gf_small_keys:4,$has_age|adult,[logic_gerudo_kitchen]", - "gerudo_fortress_fast,gf_small_keys:1" + "gerudo_fortress_normal,gf_small_keys:4,$gerudo_valley_far_side,$gerudo_card", + "gerudo_fortress_normal,gf_small_keys:4,$gerudo_valley_far_side,bow", + "gerudo_fortress_normal,gf_small_keys:4,$gerudo_valley_far_side,hookshot", + "gerudo_fortress_normal,gf_small_keys:4,$gerudo_valley_far_side,hoverboots", + "gerudo_fortress_normal,gf_small_keys:4,$gerudo_valley_far_side,[logic_gerudo_kitchen]", + "gerudo_fortress_fast,gf_small_keys:1,$gerudo_valley_far_side", + "gerudo_fortress_normal,gf_small_keys:4,$spawn_access|Gerudo Fortress|child,sword1,[logic_gerudo_kitchen]", + "gerudo_fortress_normal,gf_small_keys:4,$spawn_access|Gerudo Fortress|child,[sword1],sticks,[logic_gerudo_kitchen]", + "gerudo_fortress_fast,gf_small_keys:1,$spawn_access|Gerudo Fortress|child,sword1", + "gerudo_fortress_fast,gf_small_keys:1,$spawn_access|Gerudo Fortress|child,[sword1],sticks" ], "capture_item": true, "item_count": 1 @@ -2791,7 +2803,7 @@ "name": "Gerudo Training Grounds", "parent": "Gerudo Fortress", "access_rules": [ - "gtg_reg,$has_age|adult,$gerudo_card" + "gtg_reg,$gerudo_valley_far_side,$gerudo_card" ], "sections": [ { diff --git a/ootrando_overworldmap_hamsda/locations/overworld.json b/ootrando_overworldmap_hamsda/locations/overworld.json index 595b85f9..9f0a76ab 100644 --- a/ootrando_overworldmap_hamsda/locations/overworld.json +++ b/ootrando_overworldmap_hamsda/locations/overworld.json @@ -4,6 +4,68 @@ "chest_unopened_img": "images/chest_brown_closed.png", "chest_opened_img": "images/chest_brown_open.png", "children": [ + { + "name": "Root", + "color": "#ffffff", + "children": [ + { + "name": "Child Spawn -> KF Links House", + "short_name": "Child Spawn", + "sections": [ + { + "name": "Capture", + "access_rules": [ + "setting_age_child", + "$can_time_travel" + ], + "capture_item": true, + "capture_item_layout": "tracker_capture_spawn_child", + "item_count": 1 + } + ], + "map_locations": [ + { + "map": "child", + "x": 175, + "y": 1421 + }, + { + "map": "adult", + "x": 175, + "y": 1421 + } + ] + }, + { + "name": "Adult Spawn -> Temple of Time", + "short_name": "Adult Spawn", + "sections": [ + { + "name": "Capture", + "access_rules": [ + "setting_age_adult", + "$can_time_travel" + ], + "capture_item": true, + "capture_item_layout": "tracker_capture_spawn_adult", + "item_count": 1 + } + ], + "map_locations": [ + { + "map": "child", + "x": 244, + "y": 1421 + }, + { + "map": "adult", + "x": 244, + "y": 1421 + } + ] + } + ] + }, { "name": "Kokiri Forest", "color": "#18a50e", @@ -425,8 +487,8 @@ { "name": "LW Scrubs Grotto", "access_rules": [ - "$has_explosives", - "$has_age|adult,hammer,$beyond_mido" + "$has_age|child,$has_explosives", + "$has_age|adult,$can_blast,$beyond_mido" ], "sections": [ { @@ -559,8 +621,8 @@ "name": "LW GS Above Theater (N)", "short_name": "GS", "access_rules": [ - "setting_plant_no,beans", - "bean_stage_yes", + "$has_age|child,setting_plant_no,beans", + "$has_age|child,bean_stage_yes", "[logic_lost_woods_gs_bean],longshot", "[logic_lost_woods_gs_bean],hookshot,bow", "[logic_lost_woods_gs_bean],hookshot,$has_bombchus", @@ -590,8 +652,8 @@ { "name": "SFM Wolfos Grotto", "access_rules": [ - "$hidden_grotto,$has_explosives", - "$hidden_grotto,$has_age|adult,hammer,$beyond_mido" + "$hidden_grotto,$has_age|child,$has_explosives", + "$hidden_grotto,$has_age|adult,$can_blast,$beyond_mido" ], "sections": [ { @@ -1101,6 +1163,7 @@ { "name": "Bite pls", "access_rules": [ + "$spawn_access|LH Fishing|adult", "$has_age|adult,ocarina,scarecrow,hookshot", "$has_age|adult,water", "$has_age|adult,setting_plant_no,beans", @@ -2671,6 +2734,14 @@ "$has_age|child,ocarina,lullaby,sticks,bombchu,[bombs]", "$has_age|child,ocarina,lullaby,sticks,$has_bombchus,[logic_goron_city_pot]", "$child_death_mountain,ocarina,lullaby,sticks,lift1,[logic_goron_city_pot_with_strength]", + "$spawn_access|DMC Lower|child,sticks,bombs", + "$spawn_access|DMC Lower|child,sticks,bombchu,[bombs]", + "$spawn_access|DMC Lower|child,sticks,$has_bombchus,[logic_goron_city_pot]", + "$spawn_access|DMC Lower|child,sticks,lift1,[logic_goron_city_pot_with_strength]", + "$spawn_access|DMC Fairy|child,sticks,bombs", + "$spawn_access|DMC Fairy|child,sticks,bombchu,[bombs]", + "$spawn_access|DMC Fairy|child,sticks,$has_bombchus,[logic_goron_city_pot]", + "$spawn_access|DMC Fairy|child,sticks,lift1,[logic_goron_city_pot_with_strength]", "$has_age|child,dinsfire,magic,bombs", "$has_age|child,dinsfire,magic,bombchu,[bombs]", "$has_age|child,dinsfire,magic,$has_bombchus,[logic_goron_city_pot]", @@ -2698,6 +2769,8 @@ "name": "Play Sarias Song", "access_rules": [ "$child_death_mountain,ocarina,lullaby,saria", + "$spawn_access|DMC Lower|child,ocarina,saria", + "$spawn_access|DMC Fairy|child,ocarina,saria", "{$hintable}" ], "capture_item": true, @@ -2776,6 +2849,7 @@ "name": "GC Shop", "access_rules": [ "$link_the_goron", + "$spawn_access|GC Shop|adult", "$has_age|child,$has_explosives", "$has_age|child,dinsfire,magic", "$child_death_mountain,lift1", @@ -2917,7 +2991,9 @@ { "name": "DMT Great Fairy Fountain", "access_rules": [ - "$can_blast" + "$can_blast", + "$spawn_access|DMT Fairy|child", + "$spawn_access|DMT Fairy|adult" ], "sections": [ { @@ -2945,7 +3021,7 @@ { "name": "DMT Biggoron", "access_rules": [ - "$has_age|adult,$dmc_upper", + "$dmc_upper", "{$hintable}" ], "sections": [ @@ -3178,6 +3254,8 @@ "name": "DMC Wall Freestanding PoH", "short_name": "HP", "access_rules": [ + "$spawn_access|Death Mountain Summit|child", + "$spawn_access|DMT Fairy|child", "$dmc_upper", "{ocarina,bolero}" ], @@ -3209,9 +3287,7 @@ "access_rules": [ "$has_age|both,ocarina,bolero,setting_plant_no,beans", "$has_age|both,ocarina,bolero,bean_crater_yes", - "$has_age|adult,ocarina,bolero,[logic_crater_bean_poh_with_hovers],hoverboots", - "$has_age|adult,hammer,[logic_crater_bean_poh_with_hovers],hoverboots", - "$link_the_goron,[logic_crater_bean_poh_with_hovers],hoverboots", + "$dmc_lower,[logic_crater_bean_poh_with_hovers],hoverboots", "{$hintable}", "{ocarina,bolero}", "{$link_the_goron}", @@ -3234,7 +3310,9 @@ { "name": "DMC Great Fairy Fountain", "access_rules": [ - "$dmc_lower,$has_age|adult,hammer" + "$dmc_lower,hammer", + "$spawn_access|DMC Fairy|child", + "$spawn_access|DMC Fairy|adult" ], "sections": [ { @@ -3257,7 +3335,7 @@ { "name": "DMC Hammer Grotto", "access_rules": [ - "$dmc_lower,$has_age|adult,hammer" + "$dmc_lower,hammer" ], "sections": [ { @@ -3312,6 +3390,12 @@ "$can_blast,$has_age|child,$can_child_attack", "$can_blast,$has_age|child,nuts", "$can_blast,$has_age|child,shield1", + "$spawn_access|Death Mountain Summit|child,$can_child_attack", + "$spawn_access|Death Mountain Summit|child,nuts", + "$spawn_access|Death Mountain Summit|child,shield1", + "$spawn_access|DMT Fairy|child,$can_child_attack", + "$spawn_access|DMT Fairy|child,nuts", + "$spawn_access|DMT Fairy|child,shield1", "{$hintable}" ], "visibility_rules": [ @@ -3338,7 +3422,9 @@ "name": "DMC GS Crate", "short_name": "GS", "access_rules": [ - "$can_blast,$has_age|child,$can_child_attack" + "$can_blast,$has_age|child,$can_child_attack", + "$spawn_access|Death Mountain Summit|child,$can_child_attack", + "$spawn_access|DMT Fairy|child,$can_child_attack" ], "visibility_rules": [ "setting_tokens_overworld" @@ -3823,7 +3909,8 @@ { "name": "HC Great Fairy Fountain", "access_rules": [ - "$has_age|child,$has_explosives" + "$has_age|child,$has_explosives", + "$spawn_access|HC Fairy|child" ], "sections": [ { @@ -3933,7 +4020,8 @@ { "name": "OGC Great Fairy Fountain", "access_rules": [ - "$has_age|adult,lift3" + "$has_age|adult,lift3", + "$spawn_access|OGC Fairy|adult" ], "sections": [ { @@ -3966,23 +4054,18 @@ "children": [ { "name": "ZR Frogs", - "access_rules": [ - "$has_age|child,$has_explosives", - "$has_age|child,scale1", - "{$hintable}" - ], "sections": [ { "name": "ZR Frogs in the Rain", "access_rules": [ - "$has_age|child,ocarina,storm" + "$child_river,ocarina,storm" ], "item_count": 1 }, { "name": "ZR Frogs Ocarina Game", "access_rules": [ - "$has_age|child,ocarina,lullaby,saria,epona,sun,time,storm", + "$child_river,ocarina,lullaby,saria,epona,sun,time,storm", "{$hintable}" ], "capture_item": true, @@ -4000,8 +4083,7 @@ { "name": "ZR Magic Bean Salesman", "access_rules": [ - "$has_age|child,$has_explosives", - "$has_age|child,scale1" + "$child_river" ], "sections": [ { @@ -4021,8 +4103,7 @@ { "name": "ZR Open Grotto", "access_rules": [ - "$has_age|child,$has_explosives", - "$has_age|child,scale1", + "$child_river", "$has_age|adult" ], "sections": [ @@ -4052,8 +4133,7 @@ "name": "ZR Near Open Grotto Freestanding PoH", "short_name": "HP", "access_rules": [ - "$has_age|child,$has_explosives", - "$has_age|child,scale1", + "$child_river", "$has_age|adult,hoverboots", "$has_age|adult,[logic_zora_river_lower]" ], @@ -4083,8 +4163,7 @@ "name": "ZR Near Domain Freestanding PoH", "short_name": "HP", "access_rules": [ - "$has_age|child,$has_explosives", - "$has_age|child,scale1", + "$child_river", "$has_age|adult,hoverboots", "$has_age|adult,[logic_zora_river_upper]" ], @@ -4117,8 +4196,7 @@ "name": "ZR Deku Scrubs Grotto", "short_name": "Deku Scrubs", "access_rules": [ - "$has_age|child,$has_explosives,$can_stun_deku", - "$has_age|child,scale1,$can_stun_deku", + "$child_river,$can_stun_deku", "$has_age|adult,$can_stun_deku" ], "visibility_rules": [ @@ -4178,8 +4256,7 @@ "name": "ZR GS Ladder (N)", "short_name": "GS", "access_rules": [ - "$has_explosives", - "scale1,$can_child_attack" + "$child_river,$can_child_attack" ], "visibility_rules": [ "setting_tokens_overworld" @@ -4264,9 +4341,7 @@ { "name": "Zoras Domain", "access_rules": [ - "$has_age|child,$has_explosives,ocarina,lullaby", - "$has_age|child,$has_explosives,[logic_zora_with_cucco]", - "$has_age|child,scale1" + "$child_domain" ], "children": [ { @@ -4309,8 +4384,7 @@ { "name": "Zoras Domain Frozen", "access_rules": [ - "$has_age|adult,ocarina,lullaby", - "$has_age|adult,hoverboots,[logic_zora_with_hovers]" + "$adult_domain" ], "children": [ { @@ -4383,11 +4457,9 @@ { "name": "ZD Shop", "access_rules": [ - "$has_age|child,scale1", - "$has_age|child,$has_explosives,ocarina,lullaby", - "$has_age|child,$has_explosives,[logic_zora_with_cucco]", - "$has_age|adult,$has_blue_fire,ocarina,lullaby", - "$has_age|adult,$has_blue_fire,hoverboots,[logic_zora_with_hovers]" + "$child_domain", + "$adult_domain,$has_blue_fire", + "$spawn_access|ZD Shop|adult" ], "sections": [ { @@ -4880,121 +4952,124 @@ "y": 581 } ] + } + ] + }, + { + "name": "Gerudo Fortress", + "children": [ + { + "name": "GF Chest", + "access_rules": [ + "$gerudo_valley_far_side" + ], + "sections": [ + { + "name": "Open it", + "access_rules": [ + "hoverboots", + "ocarina,scarecrow,hookshot", + "longshot" + ], + "item_count": 1 + } + ], + "map_locations": [ + { + "map": "adult", + "x": 544, + "y": 358 + } + ] }, { - "name": "Gerudo Fortress", - "children": [ - { - "name": "GF Chest", - "sections": [ - { - "name": "Open it", - "access_rules": [ - "hoverboots", - "ocarina,scarecrow,hookshot", - "longshot" - ], - "item_count": 1 - } - ], - "map_locations": [ - { - "map": "adult", - "x": 544, - "y": 358 - } - ] + "name": "GF HBA", + "access_rules": [ + "ocarina,epona,bow,$gerudo_card,$gerudo_valley_far_side" + ], + "sections": [ + { + "name": "1000 Points", + "item_count": 1 }, { - "name": "GF HBA", + "name": "1500 Points", "access_rules": [ - "ocarina,epona,bow,$gerudo_card" - ], - "sections": [ - { - "name": "1000 Points", - "item_count": 1 - }, - { - "name": "1500 Points", - "access_rules": [ - "bow", - "{$hintable}" - ], - "capture_item": true, - "item_count": 1 - } - ], - "map_locations": [ - { - "map": "adult", - "x": 620, - "y": 438 - } - ] - }, + "bow", + "{$hintable}" + ], + "capture_item": true, + "item_count": 1 + } + ], + "map_locations": [ { - "name": "GF Archery Range", + "map": "adult", + "x": 620, + "y": 438 + } + ] + }, + { + "name": "GF Archery Range", + "access_rules": [ + "$night_gs,$gerudo_card,$gerudo_valley_far_side" + ], + "sections": [ + { + "name": "GF GS Archery Range (N)", + "short_name": "GS", "access_rules": [ - "$night_gs,$gerudo_card" - ], - "sections": [ - { - "name": "GF GS Archery Range (N)", - "short_name": "GS", - "access_rules": [ - "hookshot", - "{bow}", - "{dinsfire,magic}" - ], - "visibility_rules": [ - "setting_tokens_overworld" - ], - "capture_item": true, - "chest_unopened_img": "images/skulltula.png", - "chest_opened_img": "images/skulltula_token.png", - "item_count": 1 - } - ], - "map_locations": [ - { - "map": "adult", - "x": 660, - "y": 306 - } - ] - }, + "hookshot", + "{bow}", + "{dinsfire,magic}" + ], + "visibility_rules": [ + "setting_tokens_overworld" + ], + "capture_item": true, + "chest_unopened_img": "images/skulltula.png", + "chest_opened_img": "images/skulltula_token.png", + "item_count": 1 + } + ], + "map_locations": [ { - "name": "GF Top Floor", + "map": "adult", + "x": 660, + "y": 306 + } + ] + }, + { + "name": "GF Top Floor", + "access_rules": [ + "$night_gs,$gerudo_valley_far_side" + ], + "sections": [ + { + "name": "GF GS Top Floor (N)", + "short_name": "GS", "access_rules": [ - "$night_gs" - ], - "sections": [ - { - "name": "GF GS Top Floor (N)", - "short_name": "GS", - "access_rules": [ - "$gerudo_card", - "bow", - "hookshot", - "hoverboots", - "[logic_gerudo_kitchen]" - ], - "visibility_rules": [ - "setting_tokens_overworld" - ], - "chest_unopened_img": "images/skulltula.png", - "chest_opened_img": "images/skulltula_token.png", - "item_count": 1 - } - ], - "map_locations": [ - { - "map": "adult", - "x": 544, - "y": 390 - } - ] + "$gerudo_card", + "bow", + "hookshot", + "hoverboots", + "[logic_gerudo_kitchen]" + ], + "visibility_rules": [ + "setting_tokens_overworld" + ], + "chest_unopened_img": "images/skulltula.png", + "chest_opened_img": "images/skulltula_token.png", + "item_count": 1 + } + ], + "map_locations": [ + { + "map": "adult", + "x": 544, + "y": 390 } ] } diff --git a/ootrando_overworldmap_hamsda/locations/overworld_entrance.json b/ootrando_overworldmap_hamsda/locations/overworld_entrance.json index 14a270e8..4f013c33 100644 --- a/ootrando_overworldmap_hamsda/locations/overworld_entrance.json +++ b/ootrando_overworldmap_hamsda/locations/overworld_entrance.json @@ -5,7 +5,7 @@ "chest_opened_img": "images/chest_brown_open.png", "children": [ { - "name": "Child Spawn", + "name": "Root", "color": "#ffffff", "children": [ { @@ -42,13 +42,7 @@ "y": 1421 } ] - } - ] - }, - { - "name": "Adult Spawn", - "color": "#ffffff", - "children": [ + }, { "name": "Adult Spawn -> Temple of Time", "short_name": "Adult Spawn", diff --git a/ootrando_overworldmap_hamsda/manifest.json b/ootrando_overworldmap_hamsda/manifest.json index 00538759..360a3218 100644 --- a/ootrando_overworldmap_hamsda/manifest.json +++ b/ootrando_overworldmap_hamsda/manifest.json @@ -1,7 +1,7 @@ { "name": "OoT Randomizer - Map and Item Tracker", "game_name": "Ocarina of Time Randomizer", - "package_version": "3.2.0.0", + "package_version": "3.2.1.0", "package_uid": "ootrando_overworldmap_hamsda", "author": "Hamsda", "variants": { diff --git a/ootrando_overworldmap_hamsda/maps/maps.json b/ootrando_overworldmap_hamsda/maps/maps.json index 04c60260..683f9066 100644 --- a/ootrando_overworldmap_hamsda/maps/maps.json +++ b/ootrando_overworldmap_hamsda/maps/maps.json @@ -3,12 +3,12 @@ "name": "child", "location_size": 35, "location_border_thickness": 5, - "img": "images/overworld_map.png" + "img": "images/overworld_spawns.png" }, { "name": "adult", "location_size": 35, "location_border_thickness": 5, - "img": "images/overworld_map.png" + "img": "images/overworld_spawns.png" } ] \ No newline at end of file diff --git a/ootrando_overworldmap_hamsda/scripts/init.lua b/ootrando_overworldmap_hamsda/scripts/init.lua index 92762e5e..ee67048c 100644 --- a/ootrando_overworldmap_hamsda/scripts/init.lua +++ b/ootrando_overworldmap_hamsda/scripts/init.lua @@ -66,6 +66,7 @@ if has_map then Tracker:AddItems("items/options_entrance.json") else Tracker:AddItems("items/sequences.json") + Tracker:AddItems("items/cap_spawns.json") Tracker:AddItems("items/cap_items.json") end Tracker:AddItems("items/tricks.json") diff --git a/ootrando_overworldmap_hamsda/scripts/logic.lua b/ootrando_overworldmap_hamsda/scripts/logic.lua index 8b1d0f30..0ebf3bdf 100644 --- a/ootrando_overworldmap_hamsda/scripts/logic.lua +++ b/ootrando_overworldmap_hamsda/scripts/logic.lua @@ -27,6 +27,35 @@ function has_age(age) return 0, AccessibilityLevel.None end +function spawn_access(region, age) + region = region or "" + age = age or "" + + if has_age(age) == 0 then + return 0, AccessibilityLevel.None + end + + local spawn_object = nil + + if age == "child" then + spawn_object = get_object("@Child Spawn -> KF Links House/Capture") + elseif age == "adult" then + spawn_object = get_object("@Adult Spawn -> Temple of Time/Capture") + else + print("spawn_access wrong age argument:", age) + return 0, AccessibilityLevel.None + end + + if + spawn_object and spawn_object.CapturedItem and spawn_object.CapturedItem.Name and + spawn_object.CapturedItem.Name == region + then + return 1, AccessibilityLevel.Normal + end + + return 0, AccessibilityLevel.None +end + function night_gs() if has("setting_skulltulas_sun_off") or (has("ocarina") and has("sun")) then return 1, AccessibilityLevel.Normal @@ -193,7 +222,10 @@ function mask_shop_open() end function beyond_mido() - if has("ocarina") and (has("saria") or has("minuet")) or has("logic_mido_backflip") then + if + (has("ocarina") and (has("saria") or has("minuet"))) or has("logic_mido_backflip") or + spawn_access("Sacred Forest Meadow", "adult") > 0 + then return 1, AccessibilityLevel.Normal else return 1, AccessibilityLevel.SequenceBreak @@ -201,29 +233,31 @@ function beyond_mido() end function gerudo_card() - local card = has("card") + if has("card") then + return 1, AccessibilityLevel.Normal + end if has("setting_shuffle_card_yes") then - local count = card and 1 or 0 - local level = card and AccessibilityLevel.Normal or AccessibilityLevel.None - return count, level + return 0, AccessibilityLevel.None else - local level = card and AccessibilityLevel.Normal or AccessibilityLevel.SequenceBreak - return 1, level + return 1, AccessibilityLevel.SequenceBreak end end -function gerudo_bridge() +function _gerudo_bridge() if has_age("adult") == 0 then return 0, AccessibilityLevel.None end - if has("longshot") or has("ocarina") and has("epona") or has("gerudo_fortress_open") then + if + has("longshot") or has("ocarina") and has("epona") or has("gerudo_fortress_open") or + spawn_access("Gerudo Fortress", "adult") > 0 + then return 1, AccessibilityLevel.Normal else return 0, AccessibilityLevel.None end end -function quicksand() +function _quicksand() if has("longshot") or has("hoverboots") or has("logic_wasteland_crossing") then return 1, AccessibilityLevel.Normal else @@ -231,7 +265,7 @@ function quicksand() end end -function wasteland_forward() +function _wasteland_forward() if has("logic_lens_wasteland") or has("lens") and has("magic") then return 1, AccessibilityLevel.Normal else @@ -239,7 +273,7 @@ function wasteland_forward() end end -function wasteland_reverse() +function _wasteland_reverse() if has("logic_reverse_wasteland") then return 1, AccessibilityLevel.Normal else @@ -252,13 +286,13 @@ function gerudo_valley_far_side() return 0, AccessibilityLevel.None end - if gerudo_bridge() > 0 then + if _gerudo_bridge() > 0 then return 1, AccessibilityLevel.Normal end if has("ocarina") and has("requiem") then - local _, reverse_level = wasteland_reverse() - local _, quicksand_level = quicksand() + local _, reverse_level = _wasteland_reverse() + local _, quicksand_level = _quicksand() if reverse_level == AccessibilityLevel.SequenceBreak or quicksand_level == AccessibilityLevel.SequenceBreak then return 1, AccessibilityLevel.SequenceBreak @@ -274,9 +308,9 @@ function wasteland() local forward_count = 0 local forward_level = AccessibilityLevel.Normal - local bridge_count = gerudo_bridge() + local bridge_count = _gerudo_bridge() local card_count, card_level = gerudo_card() - local _, quicksand_level = quicksand() + local _, quicksand_level = _quicksand() if bridge_count > 0 and card_count > 0 then forward_count = 1 @@ -289,7 +323,7 @@ function wasteland() end if has("ocarina") and has("requiem") then - return wasteland_reverse() + return _wasteland_reverse() end return forward_count, forward_level @@ -308,7 +342,7 @@ function adult_colossus() return 1, AccessibilityLevel.Normal end - local bridge_count = gerudo_bridge() + local bridge_count = _gerudo_bridge() if bridge_count == 0 then return 0, AccessibilityLevel.None end @@ -319,8 +353,8 @@ function adult_colossus() end local level = card_level - local _, quicksand_level = quicksand() - local _, forward_level = wasteland_forward() + local _, quicksand_level = _quicksand() + local _, forward_level = _wasteland_forward() if quicksand_level == AccessibilityLevel.SequenceBreak or forward_level == AccessibilityLevel.SequenceBreak then level = AccessibilityLevel.SequenceBreak end @@ -345,6 +379,14 @@ function child_death_mountain() return 1, AccessibilityLevel.Normal end + if + spawn_access("DMC Lower", "child") > 0 or spawn_access("Death Mountain Summit", "child") > 0 or + spawn_access("DMC Fairy", "child") > 0 or + spawn_access("DMT Fairy", "child") > 0 + then + return 1, AccessibilityLevel.Normal + end + return has_explosives() end @@ -381,6 +423,9 @@ function goron_tunic() if has("redtunic") then return 1, AccessibilityLevel.Normal elseif has("wallet") then + if spawn_access("GC Shop", "adult") > 0 then + return 1, AccessibilityLevel.Normal + end return link_the_goron() end return 0, AccessibilityLevel.None @@ -398,7 +443,11 @@ function FTR_or_goron() return 1, AccessibilityLevel.SequenceBreak end -function dmt_climb() +function _dmt_climb() + if spawn_access("Death Mountain Summit", "adult") > 0 or spawn_access("DMT Fairy", "adult") > 0 then + return 1, AccessibilityLevel.Normal + end + if has_age("both") > 0 and has("lift1") and (has("bean_trail_yes") or (has("setting_plant_no") and has("beans"))) then return 1, AccessibilityLevel.Normal end @@ -406,7 +455,7 @@ function dmt_climb() local count = 0 local level = AccessibilityLevel.None - if has_age("adult") and has("hoverboots") then + if has_age("adult") > 0 and has("hoverboots") then if has("logic_dmt_climb_hovers") then return 1, AccessibilityLevel.Normal end @@ -422,7 +471,7 @@ function dmt_climb() return count, level end -function dmc_upper_to_lower() +function _dmc_upper_to_lower() if has_age("adult") == 0 then return 0, AccessibilityLevel.None end @@ -438,14 +487,14 @@ function dmc_upper_to_lower() return 0, AccessibilityLevel.None end -function dmc_upper_to_central() +function _dmc_upper_to_central() if has_age("adult") > 0 and has("redtunic") and has("longshot") and damage_single_instance_quadruple() > 0 then return 1, AccessibilityLevel.Normal end return 0, AccessibilityLevel.None end -function dmc_lower_to_central() +function _dmc_lower_to_central() if has_age("adult") == 0 then return 0, AccessibilityLevel.None end @@ -455,7 +504,7 @@ function dmc_lower_to_central() return 0, AccessibilityLevel.None end -function dmc_central_to_lower() +function _dmc_central_to_lower() if has_age("adult") == 0 then return 0, AccessibilityLevel.None end @@ -466,26 +515,36 @@ function dmc_central_to_lower() end function dmc_upper() - if has("ocarina") and has("bolero") and dmc_central_to_lower() > 0 then + if + spawn_access("DMC Lower", "adult") > 0 or spawn_access("Death Mountain Summit", "adult") > 0 or + spawn_access("DMC Fairy", "adult") > 0 or + spawn_access("DMT Fairy", "adult") > 0 + then + return 1, AccessibilityLevel.Normal + end + + if has("ocarina") and has("bolero") and _dmc_central_to_lower() > 0 then return 1, AccessibilityLevel.Normal end - local climb_count, climb_level = dmt_climb() + local climb_count, climb_level = _dmt_climb() local goron_count, goron_level = link_the_goron() if climb_count > 0 or goron_count > 0 then - if climb_level == AccessibilityLevel.Normal - or goron_level == AccessibilityLevel.Normal - then - return AccessibilityLevel.Normal + if climb_level == AccessibilityLevel.Normal or goron_level == AccessibilityLevel.Normal then + return 1, AccessibilityLevel.Normal end - return AccessibilityLevel.SequenceBreak + return 1, AccessibilityLevel.SequenceBreak end - return AccessibilityLevel.None + return 0, AccessibilityLevel.None end function dmc_lower() - if has("ocarina") and has("bolero") and dmc_central_to_lower() > 0 then + if spawn_access("DMC Lower", "adult") > 0 or spawn_access("DMC Fairy", "adult") > 0 then + return 1, AccessibilityLevel.Normal + end + + if has("ocarina") and has("bolero") and _dmc_central_to_lower() > 0 then return 1, AccessibilityLevel.Normal end @@ -502,9 +561,9 @@ function dmc_lower() end end - local climb_count, climb_level = dmt_climb() - local upper_to_lower_count, upper_to_lower_level = dmc_upper_to_lower() - local upper_to_central_count, upper_to_central_level = dmc_upper_to_central() + local climb_count, climb_level = _dmt_climb() + local upper_to_lower_count, upper_to_lower_level = _dmc_upper_to_lower() + local upper_to_central_count, upper_to_central_level = _dmc_upper_to_central() if climb_count > 0 and (upper_to_lower_count > 0 or upper_to_central_count > 0) then if climb_level == AccessibilityLevel.Normal and @@ -529,7 +588,10 @@ function dmc_central() local level = AccessibilityLevel.None local goron_count, goron_level = link_the_goron() - local lower_to_central_count, lower_to_central_level = dmc_lower_to_central() + if spawn_access("DMC Lower", "adult") > 0 or spawn_access("DMC Fairy", "adult") > 0 then + goron_count, goron_level = 1, AccessibilityLevel.Normal + end + local lower_to_central_count, lower_to_central_level = _dmc_lower_to_central() if goron_count > 0 and lower_to_central_count > 0 then if goron_level == AccessibilityLevel.Normal and lower_to_central_level == AccessibilityLevel.Normal then return 1, AccessibilityLevel.Normal @@ -539,9 +601,9 @@ function dmc_central() end end - local climb_count, climb_level = dmt_climb() - local upper_to_lower_count, upper_to_lower_level = dmc_upper_to_lower() - local upper_to_central_count, upper_to_central_level = dmc_upper_to_central() + local climb_count, climb_level = _dmt_climb() + local upper_to_lower_count, upper_to_lower_level = _dmc_upper_to_lower() + local upper_to_central_count, upper_to_central_level = _dmc_upper_to_central() if climb_count > 0 and ((upper_to_lower_count > 0 and lower_to_central_count > 0) or upper_to_central_count > 0) then if climb_level == AccessibilityLevel.Normal and @@ -558,35 +620,48 @@ function dmc_central() return count, level end -function child_fountain() +function child_river() if has_age("child") == 0 then return 0, AccessibilityLevel.None end - if has_exact("ruto", 0) and has_exact("setting_fountain_open", 0) then - return 0, AccessibilityLevel.None + if has("scale1") or spawn_access("Zora River", "child") > 0 or spawn_access("Zoras Domain", "child") > 0 then + return 1, AccessibilityLevel.Normal end - local level = AccessibilityLevel.Normal + return has_explosives() +end - if has("scale1") then - return 1, level +function child_domain() + if has_age("child") == 0 then + return 0, AccessibilityLevel.None end - local explo_count, explo_level = has_explosives() - if explo_count == 0 then - return 0, AccessibilityLevel.None + if has("scale1") or spawn_access("Zoras Domain", "child") > 0 then + return 1, AccessibilityLevel.Normal end - if explo_level == AccessibilityLevel.SequenceBreak then - level = AccessibilityLevel.SequenceBreak + local river_count, river_level = child_river() + if river_count > 0 then + if (has("ocarina") and has("lullaby")) or has("logic_zora_with_cucco") then + return river_count, river_level + end + return 1, AccessibilityLevel.SequenceBreak end - if has_exact("logic_zora_with_cucco", 0) and (has_exact("ocarina", 0) or has_exact("lullaby", 0)) then - level = AccessibilityLevel.SequenceBreak + return 0, AccessibilityLevel.None +end + +function child_fountain() + if has_age("child") == 0 then + return 0, AccessibilityLevel.None end - return 1, level + if has_exact("ruto", 0) and has_exact("setting_fountain_open", 0) then + return 0, AccessibilityLevel.None + end + + return child_domain() end function adult_domain() @@ -594,7 +669,10 @@ function adult_domain() return 0, AccessibilityLevel.None end - if has("ocarina") and has("lullaby") then + if + (has("ocarina") and has("lullaby")) or spawn_access("Zoras Domain", "adult") > 0 or + spawn_access("ZD Shop", "adult") > 0 + then return 1, AccessibilityLevel.Normal elseif has("hoverboots") then if has("logic_zora_with_hovers") then @@ -692,6 +770,9 @@ function zora_tunic() if has("bluetunic") then return 1, AccessibilityLevel.Normal elseif has("wallet2") then + if spawn_access("ZD Shop", "adult") > 0 then + return 1, AccessibilityLevel.Normal + end local bottle_count, bottle_level = has_bottle() local domain_count, domain_level = adult_domain() if bottle_count > 0 and domain_count > 0 then diff --git a/repository.json b/repository.json index 491d164d..b40954bf 100644 --- a/repository.json +++ b/repository.json @@ -10,7 +10,7 @@ "pins", "chathud" ], - "version": "3.2.0.0", + "version": "3.2.1.0", "uid": "ootrando_overworldmap_hamsda", "link": "https://hamsda.github.io/EmoTrackerPacks/ootrando_overworldmap_hamsda.zip", "documentation_url": "https://github.com/Hamsda/EmoTrackerPacks/blob/master/ootrando_overworldmap_hamsda/README.md",