From e6635cdd773aac7c37101e324e9a90d5c9d156c6 Mon Sep 17 00:00:00 2001 From: espeon65536 <81029175+espeon65536@users.noreply.github.com> Date: Sun, 24 Jul 2022 20:07:22 -0400 Subject: [PATCH] OOT updates (#821) * oot: remove all escape characters in LogicTricks.py * only attempt to connect to client once * oot: don't kill player outside ToT or in market entrance fixed camera makes the game crash outside ToT. added market entrance to be safe, it doesn't matter if you don't die there --- OoTClient.py | 4 ++-- data/lua/OOT/oot_connector.lua | 13 +++++++--- worlds/oot/LogicTricks.py | 44 +++++++++++++++++----------------- 3 files changed, 34 insertions(+), 27 deletions(-) diff --git a/OoTClient.py b/OoTClient.py index e455efdc..fbe2b35d 100644 --- a/OoTClient.py +++ b/OoTClient.py @@ -48,7 +48,7 @@ deathlink_sent_this_death: we interacted with the multiworld on this death, wait oot_loc_name_to_id = network_data_package["games"]["Ocarina of Time"]["location_name_to_id"] -script_version: int = 1 +script_version: int = 2 def get_item_value(ap_id): return ap_id - 66000 @@ -186,7 +186,7 @@ async def n64_sync_task(ctx: OoTContext): data = await asyncio.wait_for(reader.readline(), timeout=10) data_decoded = json.loads(data.decode()) reported_version = data_decoded.get('scriptVersion', 0) - if reported_version == script_version: + if reported_version >= script_version: if ctx.game is not None and 'locations' in data_decoded: # Not just a keep alive ping, parse asyncio.create_task(parse_payload(data_decoded, ctx, False)) diff --git a/data/lua/OOT/oot_connector.lua b/data/lua/OOT/oot_connector.lua index 96eee4f7..a82bcdcb 100644 --- a/data/lua/OOT/oot_connector.lua +++ b/data/lua/OOT/oot_connector.lua @@ -2,8 +2,8 @@ local socket = require("socket") local json = require('json') local math = require('math') -local last_modified_date = '2022-05-25' -- Should be the last modified date -local script_version = 1 +local last_modified_date = '2022-07-24' -- Should be the last modified date +local script_version = 2 -------------------------------------------------- -- Heavily modified form of RiptideSage's tracker @@ -1723,6 +1723,11 @@ function get_death_state() end function kill_link() + -- market entrance: 27/28/29 + -- outside ToT: 35/36/37. + -- if killed on these scenes the game crashes, so we wait until not on this screen. + local scene = global_context:rawget('cur_scene'):rawget() + if scene == 27 or scene == 28 or scene == 29 or scene == 35 or scene == 36 or scene == 37 then return end mainmemory.write_u16_be(0x11A600, 0) end @@ -1824,13 +1829,15 @@ function main() elseif (curstate == STATE_UNINITIALIZED) then if (frame % 60 == 0) then server:settimeout(2) - print("Attempting to connect") local client, timeout = server:accept() if timeout == nil then print('Initial Connection Made') curstate = STATE_INITIAL_CONNECTION_MADE ootSocket = client ootSocket:settimeout(0) + else + print('Connection failed, ensure OoTClient is running and rerun oot_connector.lua') + return end end end diff --git a/worlds/oot/LogicTricks.py b/worlds/oot/LogicTricks.py index 6950bc21..548b7b96 100644 --- a/worlds/oot/LogicTricks.py +++ b/worlds/oot/LogicTricks.py @@ -51,20 +51,20 @@ known_logic_tricks = { Can be reached by side-hopping off the watchtower. '''}, - 'Dodongo\'s Cavern Staircase with Bow': { + "Dodongo's Cavern Staircase with Bow": { 'name' : 'logic_dc_staircase', 'tags' : ("Dodongo's Cavern",), 'tooltip' : '''\ The Bow can be used to knock down the stairs with two well-timed shots. '''}, - 'Dodongo\'s Cavern Spike Trap Room Jump without Hover Boots': { + "Dodongo's Cavern Spike Trap Room Jump without Hover Boots": { 'name' : 'logic_dc_jump', 'tags' : ("Dodongo's Cavern",), 'tooltip' : '''\ Jump is adult only. '''}, - 'Dodongo\'s Cavern Vines GS from Below with Longshot': { + "Dodongo's Cavern Vines GS from Below with Longshot": { 'name' : 'logic_dc_vines_gs', 'tags' : ("Dodongo's Cavern", "Skulltulas",), 'tooltip' : '''\ @@ -73,7 +73,7 @@ known_logic_tricks = { from below, by shooting it through the vines, bypassing the need to lower the staircase. '''}, - 'Thieves\' Hideout "Kitchen" with No Additional Items': { + '''Thieves' Hideout "Kitchen" with No Additional Items''': { 'name' : 'logic_gerudo_kitchen', 'tags' : ("Thieves' Hideout", "Gerudo's Fortress"), 'tooltip' : '''\ @@ -157,7 +157,7 @@ known_logic_tricks = { Can jump up to the spinning platform from below as adult. '''}, - 'Crater\'s Bean PoH with Hover Boots': { + "Crater's Bean PoH with Hover Boots": { 'name' : 'logic_crater_bean_poh_with_hovers', 'tags' : ("Death Mountain Crater",), 'tooltip' : '''\ @@ -165,7 +165,7 @@ known_logic_tricks = { near Goron City and walk up the very steep slope. '''}, - 'Zora\'s Domain Entry with Cucco': { + "Zora's Domain Entry with Cucco": { 'name' : 'logic_zora_with_cucco', 'tags' : ("Zora's River",), 'tooltip' : '''\ @@ -404,7 +404,7 @@ known_logic_tricks = { Longshot can be shot through the ceiling to obtain the token with two fewer small keys than normal. '''}, - 'Zora\'s River Lower Freestanding PoH as Adult with Nothing': { + "Zora's River Lower Freestanding PoH as Adult with Nothing": { 'name' : 'logic_zora_river_lower', 'tags' : ("Zora's River",), 'tooltip' : '''\ @@ -502,7 +502,7 @@ known_logic_tricks = { you can get enough of a break to take some time to aim more carefully. '''}, - 'Dodongo\'s Cavern Scarecrow GS with Armos Statue': { + "Dodongo's Cavern Scarecrow GS with Armos Statue": { 'name' : 'logic_dc_scarecrow_gs', 'tags' : ("Dodongo's Cavern", "Skulltulas",), 'tooltip' : '''\ @@ -541,7 +541,7 @@ known_logic_tricks = { 'name' : 'logic_spirit_mq_lower_adult', 'tags' : ("Spirit Temple",), 'tooltip' : '''\ - It can be done with Din\'s Fire and Bow. + It can be done with Din's Fire and Bow. Whenever an arrow passes through a lit torch, it resets the timer. It's finicky but it's also possible to stand on the pillar next to the center @@ -704,13 +704,13 @@ known_logic_tricks = { in the same jump in order to destroy it before you fall into the lava. '''}, - 'Zora\'s Domain Entry with Hover Boots': { + "Zora's Domain Entry with Hover Boots": { 'name' : 'logic_zora_with_hovers', 'tags' : ("Zora's River",), 'tooltip' : '''\ Can hover behind the waterfall as adult. '''}, - 'Zora\'s Domain GS with No Additional Items': { + "Zora's Domain GS with No Additional Items": { 'name' : 'logic_domain_gs', 'tags' : ("Zora's Domain", "Skulltulas",), 'tooltip' : '''\ @@ -736,7 +736,7 @@ known_logic_tricks = { needing a Bow. Applies in both vanilla and MQ Shadow. '''}, - 'Stop Link the Goron with Din\'s Fire': { + "Stop Link the Goron with Din's Fire": { 'name' : 'logic_link_goron_dins', 'tags' : ("Goron City",), 'tooltip' : '''\ @@ -825,7 +825,7 @@ known_logic_tricks = { Link will not be expected to do anything at Gerudo's Fortress. '''}, - 'Zora\'s River Upper Freestanding PoH as Adult with Nothing': { + "Zora's River Upper Freestanding PoH as Adult with Nothing": { 'name' : 'logic_zora_river_upper', 'tags' : ("Zora's River",), 'tooltip' : '''\ @@ -971,7 +971,7 @@ known_logic_tricks = { in the Water Temple are not going to be relevant unless this trick is first enabled. '''}, - 'Water Temple Central Pillar GS with Farore\'s Wind': { + "Water Temple Central Pillar GS with Farore's Wind": { 'name' : 'logic_water_central_gs_fw', 'tags' : ("Water Temple", "Skulltulas",), 'tooltip' : '''\ @@ -1104,7 +1104,7 @@ known_logic_tricks = { this allows you to obtain the GS on the door frame as adult without Hookshot or Song of Time. '''}, - 'Dodongo\'s Cavern MQ Early Bomb Bag Area as Child': { + "Dodongo's Cavern MQ Early Bomb Bag Area as Child": { 'name' : 'logic_dc_mq_child_bombs', 'tags' : ("Dodongo's Cavern",), 'tooltip' : '''\ @@ -1113,7 +1113,7 @@ known_logic_tricks = { without needing a Slingshot. You will take fall damage. '''}, - 'Dodongo\'s Cavern Two Scrub Room with Strength': { + "Dodongo's Cavern Two Scrub Room with Strength": { 'name' : 'logic_dc_scrub_room', 'tags' : ("Dodongo's Cavern",), 'tooltip' : '''\ @@ -1122,7 +1122,7 @@ known_logic_tricks = { destroy the mud wall blocking the room with two Deku Scrubs. '''}, - 'Dodongo\'s Cavern Child Slingshot Skips': { + "Dodongo's Cavern Child Slingshot Skips": { 'name' : 'logic_dc_slingshot_skip', 'tags' : ("Dodongo's Cavern",), 'tooltip' : '''\ @@ -1132,7 +1132,7 @@ known_logic_tricks = { you also enable the Adult variant: "Dodongo's Cavern Spike Trap Room Jump without Hover Boots". '''}, - 'Dodongo\'s Cavern MQ Light the Eyes with Strength': { + "Dodongo's Cavern MQ Light the Eyes with Strength": { 'name' : 'logic_dc_mq_eyes', 'tags' : ("Dodongo's Cavern",), 'tooltip' : '''\ @@ -1145,7 +1145,7 @@ known_logic_tricks = { Also, the bombable floor before King Dodongo can be destroyed with Hammer if hit in the very center. '''}, - 'Dodongo\'s Cavern MQ Back Areas as Child without Explosives': { + "Dodongo's Cavern MQ Back Areas as Child without Explosives": { 'name' : 'logic_dc_mq_child_back', 'tags' : ("Dodongo's Cavern",), 'tooltip' : '''\ @@ -1232,7 +1232,7 @@ known_logic_tricks = { It can also be done as child, using the Slingshot instead of the Bow. '''}, - 'Fire Temple East Tower without Scarecrow\'s Song': { + "Fire Temple East Tower without Scarecrow's Song": { 'name' : 'logic_fire_scarecrow', 'tags' : ("Fire Temple",), 'tooltip' : '''\ @@ -1277,14 +1277,14 @@ known_logic_tricks = { Removes the requirements for the Lens of Truth in Bottom of the Well. '''}, - 'Ganon\'s Castle MQ without Lens of Truth': { + "Ganon's Castle MQ without Lens of Truth": { 'name' : 'logic_lens_castle_mq', 'tags' : ("Lens of Truth","Ganon's Castle",), 'tooltip' : '''\ Removes the requirements for the Lens of Truth in Ganon's Castle MQ. '''}, - 'Ganon\'s Castle without Lens of Truth': { + "Ganon's Castle without Lens of Truth": { 'name' : 'logic_lens_castle', 'tags' : ("Lens of Truth","Ganon's Castle",), 'tooltip' : '''\