112 lines
4.1 KiB
Plaintext
112 lines
4.1 KiB
Plaintext
|
--[[
|
||
|
DYNAMIC ZONE
|
||
|
|
||
|
Original Author(s)
|
||
|
Singustromo <singustromo at disroot.org>
|
||
|
|
||
|
Edited by
|
||
|
|
||
|
License
|
||
|
Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International (CC BY-NC-SA 4.0)
|
||
|
|
||
|
Lazy monkey patches that overwrite those functions completely
|
||
|
--]]
|
||
|
|
||
|
-- main script functors and variables are accessed through this variable
|
||
|
parent = _G["dynamic_zone"]
|
||
|
if not (parent and parent.VERSION and parent.VERSION >= 20240120) then return end
|
||
|
|
||
|
--------------------------
|
||
|
-- Dependencies
|
||
|
--------------------------
|
||
|
|
||
|
local opt = dynamic_zone_mcm
|
||
|
local utils = dynamic_zone_utils
|
||
|
local debug = dynamic_zone_debug
|
||
|
local route_manager = dynamic_zone_routes
|
||
|
local discovery = dynamic_zone_discovery
|
||
|
|
||
|
CONST_LOGGING_PREFIX = "TXR-Routes"
|
||
|
local log = debug.log_register("info", CONST_LOGGING_PREFIX)
|
||
|
local log_error = debug.log_register("error", CONST_LOGGING_PREFIX)
|
||
|
|
||
|
-------------------------------
|
||
|
-- Patched Functions
|
||
|
-------------------------------
|
||
|
|
||
|
ReloadRouteHints = txr_routes.reload_route_hints
|
||
|
OpenRoute = txr_routes.open_route
|
||
|
|
||
|
-----------------------------
|
||
|
-- Monkey patches
|
||
|
-----------------------------
|
||
|
|
||
|
-- Let's make sure we update the transition mapspots and use our hint
|
||
|
-- This is executed undermost on_game_load and is used
|
||
|
-- to ensure that the spot hints adhere to set localization
|
||
|
function txr_routes.reload_route_hints()
|
||
|
if (utils.debug_level_loaded()) then return end
|
||
|
log("Running patched txr_routes.reload_route_hints()")
|
||
|
|
||
|
-- This function is actually called before our parent.main_routine()
|
||
|
-- We just do this for a new game, so that we can leverage our logic here
|
||
|
if (route_manager.route_count() < 1) then
|
||
|
log("reload_route_hints | Populating route list")
|
||
|
parent.register_game_routes()
|
||
|
parent.update_game_route_properties()
|
||
|
end
|
||
|
|
||
|
log("reload_route_hints | Updating transition mapspots")
|
||
|
local include_blacklisted = true
|
||
|
for route_id, route in route_manager.iterate_routes(include_blacklisted) do
|
||
|
for name, _ in route_manager.iterate_transitions(route_id) do
|
||
|
discovery.update_transition_mapspot(name, nil,
|
||
|
not route.block_discovered)
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
|
||
|
-- Prevents txr_routes from overwriting our map icons when a route is unlocked
|
||
|
-- (e.g. Debug: Unlock all)
|
||
|
-- Overwrote this in it's entirety because the changes needed, require it.
|
||
|
function txr_routes.open_route(map_1, map_2, no_msg)
|
||
|
local a = txr_routes.get_route(map_1, map_2) -- all space_restrictors between those two
|
||
|
if (utils.assert_failed(a, "Got no route between %s and %s", map_1, map_2)) then return end
|
||
|
|
||
|
local msg
|
||
|
for _, transition in pairs(a) do
|
||
|
local id, spot, hint = txr_routes.get_route_info(transition)
|
||
|
if utils.assert_failed(id and spot and hint) then
|
||
|
log_error("Unknown restrictor: %s (Defined in txr_routes.routes)", transition)
|
||
|
return -- prevent possible crash
|
||
|
end
|
||
|
|
||
|
local route = route_manager.get_route_by_transition(transition)
|
||
|
if utils.assert_failed(route, "Can not get a route ID with '%s' as a member!", transition) then
|
||
|
goto continue
|
||
|
elseif (route.block_discovered) then
|
||
|
goto continue
|
||
|
end
|
||
|
|
||
|
if utils.map_spot_exists(id, spot) then
|
||
|
log("Map spot for transition '%s' already exists!", transition)
|
||
|
goto continue
|
||
|
end
|
||
|
|
||
|
hint = hint and game.translate_string(hint)
|
||
|
level.map_add_object_spot_ser(id, spot, hint)
|
||
|
|
||
|
mlr_utils.save_var("routes_".. transition, true)
|
||
|
txr_routes.register_map(map_1, map_2)
|
||
|
msg = true
|
||
|
|
||
|
::continue::
|
||
|
route.unlocked = true
|
||
|
discovery.update_transition_mapspot(transition)
|
||
|
end
|
||
|
|
||
|
if msg and (not no_msg) then
|
||
|
txr_routes.msg_route(map_1, map_2)
|
||
|
end
|
||
|
end
|