mirror of
https://github.com/IntQuant/noita_entangled_worlds.git
synced 2025-10-19 07:03:16 +00:00
Parse _biomes_all.xml instead of having a hardcoded list of biome script files to patch, hopefully improving mod compat.
This commit is contained in:
parent
66851f50b2
commit
f5a1dadfc6
3 changed files with 38 additions and 158 deletions
7
.vscode/settings.json
vendored
7
.vscode/settings.json
vendored
|
@ -10,5 +10,10 @@
|
|||
"wait",
|
||||
"async"
|
||||
],
|
||||
"C_Cpp.default.compilerPath": "/usr/bin/clang++"
|
||||
"C_Cpp.default.compilerPath": "/usr/bin/clang++",
|
||||
"spellright.language": [],
|
||||
"spellright.documentTypes": [
|
||||
"markdown",
|
||||
"latex"
|
||||
]
|
||||
}
|
|
@ -1,148 +1,6 @@
|
|||
data/scripts/biome_scripts.lua
|
||||
data/biome_impl/static_tile/watchtower.lua
|
||||
data/biome_impl/static_tile/temples_common.lua
|
||||
data/scripts/debug_biomes.lua
|
||||
data/scripts/biomes/lake_deep.lua
|
||||
data/scripts/biomes/friend_2.lua
|
||||
data/scripts/biomes/solid_wall_tower.lua
|
||||
data/scripts/biomes/rock_room.lua
|
||||
data/scripts/biomes/vault.lua
|
||||
data/scripts/biomes/town.lua
|
||||
data/scripts/biomes/snowcastle.lua
|
||||
data/scripts/biomes/snowcave_petri.lua
|
||||
data/scripts/biomes/pyramid_left.lua
|
||||
data/scripts/biomes/dragoncave.lua
|
||||
data/scripts/biomes/endgame_end.lua
|
||||
data/scripts/biomes/niilo_testroom_d.lua
|
||||
data/scripts/biomes/temple_wall.lua
|
||||
data/scripts/biomes/meatroom.lua
|
||||
data/scripts/biomes/friend_6.lua
|
||||
data/scripts/biomes/lake_statue.lua
|
||||
data/scripts/biomes/sandroom.lua
|
||||
data/scripts/biomes/temple_altar_right_empty.lua
|
||||
data/scripts/biomes/robot_egg.lua
|
||||
data/scripts/biomes/temple_altar_right_snowcave.lua
|
||||
#data/scripts/biomes/moon_room.lua
|
||||
data/scripts/biomes/tower.lua
|
||||
data/scripts/biomes/temple_wall_ending.lua
|
||||
data/scripts/biomes/secret_entrance.lua
|
||||
data/scripts/biomes/pyramid.lua
|
||||
data/scripts/biomes/pyramid_right.lua
|
||||
data/scripts/biomes/temple_altar.lua
|
||||
data/scripts/biomes/niilo_testroom.lua
|
||||
data/scripts/biomes/song_room.lua
|
||||
data/scripts/biomes/lake.lua
|
||||
data/scripts/biomes/temple_altar_right_snowcastle.lua
|
||||
data/scripts/biomes/temple_altar_secret.lua
|
||||
data/scripts/biomes/wizardcave.lua
|
||||
data/scripts/biomes/snowcastle_cavern.lua
|
||||
data/scripts/biomes/crypt.lua
|
||||
data/scripts/biomes/magic_gate.lua
|
||||
data/scripts/biomes/scale.lua
|
||||
data/scripts/biomes/roadblock.lua
|
||||
data/scripts/biomes/wandcave.lua
|
||||
data/scripts/biomes/excavationsite.lua
|
||||
data/scripts/biomes/lavalake_racing.lua
|
||||
data/scripts/biomes/temple_altar_right_snowcave_empty.lua
|
||||
data/scripts/biomes/coalmine.lua
|
||||
data/scripts/biomes/temple_altar_empty.lua
|
||||
data/scripts/biomes/null_room.lua
|
||||
data/scripts/biomes/ghost_secret.lua
|
||||
data/scripts/biomes/mountain/mountain_right_2.lua
|
||||
data/scripts/biomes/mountain/mountain_left.lua
|
||||
data/scripts/biomes/mountain/mountain_hall_3.lua
|
||||
data/scripts/biomes/mountain/mountain_left_3.lua
|
||||
data/scripts/biomes/mountain/mountain_right.lua
|
||||
data/scripts/biomes/mountain/mountain_hall_4.lua
|
||||
data/scripts/biomes/mountain/mountain_top.lua
|
||||
data/scripts/biomes/mountain/mountain_left_2.lua
|
||||
data/scripts/biomes/mountain/mountain_right_stub.lua
|
||||
data/scripts/biomes/mountain/mountain_left_entrance.lua
|
||||
data/scripts/biomes/mountain/mountain_right_entrance.lua
|
||||
data/scripts/biomes/mountain/mountain_floating_island.lua
|
||||
data/scripts/biomes/mountain/mountain_right_entrance_2.lua
|
||||
data/scripts/biomes/mountain/mountain_hall.lua
|
||||
data/scripts/biomes/mountain/mountain_left_stub.lua
|
||||
data/scripts/biomes/mountain/trailer/mountain_hall.lua
|
||||
data/scripts/biomes/mountain/mountain_hall_2.lua
|
||||
data/scripts/biomes/orbrooms/orbroom_06.lua
|
||||
data/scripts/biomes/orbrooms/orbroom_08.lua
|
||||
data/scripts/biomes/orbrooms/orbroom_07.lua
|
||||
data/scripts/biomes/orbrooms/orbroom_05.lua
|
||||
data/scripts/biomes/orbrooms/orbroom_01.lua
|
||||
data/scripts/biomes/orbrooms/orbroom_00.lua
|
||||
data/scripts/biomes/orbrooms/orbroom_10.lua
|
||||
data/scripts/biomes/orbrooms/orbroom_04.lua
|
||||
data/scripts/biomes/orbrooms/orbroom_09.lua
|
||||
data/scripts/biomes/orbrooms/orbroom_03.lua
|
||||
data/scripts/biomes/orbrooms/orbroom_11.lua
|
||||
data/scripts/biomes/orbrooms/orbroom_02.lua
|
||||
data/scripts/biomes/secret_lab.lua
|
||||
data/scripts/biomes/vault_entrance.lua
|
||||
data/scripts/biomes/end_wall.lua
|
||||
data/scripts/biomes/funroom.lua
|
||||
data/scripts/biomes/friend_4.lua
|
||||
data/scripts/biomes/boss_victoryroom.lua
|
||||
data/scripts/biomes/mountain_lake.lua
|
||||
data/scripts/biomes/lavalake_pit.lua
|
||||
data/scripts/biomes/meat.lua
|
||||
data/scripts/biomes/niilo_testroom_b.lua
|
||||
data/scripts/biomes/teleroom.lua
|
||||
data/scripts/biomes/essenceroom.lua
|
||||
data/scripts/biomes/secret_altar.lua
|
||||
data/scripts/biomes/friend_5.lua
|
||||
data/scripts/biomes/friend_3.lua
|
||||
data/scripts/biomes/rainforest.lua
|
||||
data/scripts/biomes/excavationsite_cube_chamber.lua
|
||||
#data/scripts/biomes/watercave.lua
|
||||
data/scripts/biomes/niilo_testroom_c.lua
|
||||
data/scripts/biomes/rainforest_dark.lua
|
||||
data/scripts/biomes/lavalake.lua
|
||||
#data/scripts/biomes/greed_room.lua
|
||||
data/scripts/biomes/wizardcave_entrance.lua
|
||||
data/scripts/biomes/hills.lua
|
||||
data/scripts/biomes/bridge.lua
|
||||
data/scripts/biomes/fungicave.lua
|
||||
data/scripts/biomes/solid_wall_hidden_cavern.lua
|
||||
data/scripts/biomes/smokecave_middle.lua
|
||||
data/scripts/biomes/ending_placeholder.lua
|
||||
data/scripts/biomes/temple_altar_left_empty.lua
|
||||
data/scripts/biomes/pyramid_top.lua
|
||||
data/scripts/biomes/snowcastle_hourglass_chamber.lua
|
||||
data/scripts/biomes/roboroom.lua
|
||||
data/scripts/biomes/vault_frozen.lua
|
||||
data/scripts/biomes/liquidcave.lua
|
||||
data/scripts/biomes/mountain_tree.lua
|
||||
data/scripts/biomes/robobase.lua
|
||||
data/scripts/biomes/fungiforest.lua
|
||||
data/scripts/biomes/pyramid_hallway.lua
|
||||
data/scripts/biomes/boss_arena.lua
|
||||
data/scripts/biomes/the_end.lua
|
||||
data/scripts/biomes/pyramid_entrance.lua
|
||||
data/scripts/biomes/temple_altar_right.lua
|
||||
data/scripts/biomes/boss_limbs_arena.lua
|
||||
data/scripts/biomes/boss_arena_top.lua
|
||||
data/scripts/biomes/essenceroom_air.lua
|
||||
data/scripts/biomes/winter.lua
|
||||
data/scripts/biomes/essenceroom_hell.lua
|
||||
data/scripts/biomes/endgame.lua
|
||||
data/scripts/biomes/alchemist_secret.lua
|
||||
data/scripts/biomes/temple_altar_right_snowcastle_empty.lua
|
||||
data/scripts/biomes/smokecave_right.lua
|
||||
data/scripts/biomes/shop_room.lua
|
||||
data/scripts/biomes/laboratory.lua
|
||||
data/scripts/biomes/essenceroom_alc.lua
|
||||
#data/scripts/biomes/mystery_teleport.lua
|
||||
data/scripts/biomes/snowcave_secret_chamber.lua
|
||||
data/scripts/biomes/gourd_room.lua
|
||||
data/scripts/biomes/coalmine_alt.lua
|
||||
#data/scripts/biomes/tower_end.lua
|
||||
data/scripts/biomes/temple_altar_left.lua
|
||||
data/scripts/biomes/mestari_secret.lua
|
||||
data/scripts/biomes/ocarina.lua
|
||||
data/scripts/biomes/gun_room.lua
|
||||
data/scripts/biomes/desert.lua
|
||||
data/scripts/biomes/friend_1.lua
|
||||
data/scripts/biomes/smokecave_left.lua
|
||||
data/scripts/biomes/snowcave.lua
|
||||
data/scripts/biomes/sandcave.lua
|
|
@ -1,3 +1,4 @@
|
|||
local nxml = dofile_once("mods/quant.ew/files/lib/nxml.lua")
|
||||
local uniq_flags = dofile_once("mods/quant.ew/files/system/uniq_flags/uniq_flags.lua")
|
||||
|
||||
local rpc = net.new_rpc_namespace()
|
||||
|
@ -36,7 +37,7 @@ local function generate_detour_fn(orig_fn_name)
|
|||
return detour_fn
|
||||
end
|
||||
|
||||
local function ungenerate_detour_fn(orig_fn_name)
|
||||
local function generate_dummy_detour_fn(orig_fn_name)
|
||||
local detour_fn_name = detour_name(orig_fn_name)
|
||||
|
||||
local detour_fn = "\n"
|
||||
|
@ -173,33 +174,49 @@ local function patch_file(filename)
|
|||
ModTextFileSetContent(filename, content)
|
||||
end
|
||||
|
||||
local function unpatch_file(filename)
|
||||
--print("Patching", filename)
|
||||
local function patch_file_dummy_detour(filename)
|
||||
local content = ModTextFileGetContent(filename)
|
||||
--current_file = filename
|
||||
-- A textbook example of how to NOT use regular expressions.
|
||||
--content = string.gsub(content, 'RegisterSpawnFunction[(][ ]?(.-), "(.-)"[ ]?[)]', patch_fn)
|
||||
--content = content .. "\n" .. 'EW_CURRENT_FILE="' .. filename .. '"\n'
|
||||
-- .. "dofile_once('mods/quant.ew/files/system/wang_hooks/synced_pixel_scenes.lua')\n"
|
||||
|
||||
for val in string.gmatch(wang_scripts, "ew_detour_(.-),") do
|
||||
-- print("Generating detour fn for", val)
|
||||
content = content .. ungenerate_detour_fn(val)
|
||||
content = content .. generate_dummy_detour_fn(val)
|
||||
end
|
||||
|
||||
-- content = content .. generate_detour_fn("spawn_small_enemies")
|
||||
-- content = content .. generate_detour_fn("spawn_big_enemies")
|
||||
-- content = content .. generate_detour_fn("spawn_items")
|
||||
|
||||
ModTextFileSetContent(filename, content)
|
||||
end
|
||||
|
||||
function module.on_late_init()
|
||||
-- Get list of all files to hook into
|
||||
print("Entangled: discovering biome scripts. Expect some error messages from nxml.")
|
||||
local already_found = {}
|
||||
local ignore = {
|
||||
["data/scripts/biomes/moon_room.lua"] = true,
|
||||
["data/scripts/biomes/watercave.lua"] = true,
|
||||
["data/scripts/biomes/tower_end.lua"] = true,
|
||||
}
|
||||
local biomes_to_load = nxml.parse_file("data/biome/_biomes_all.xml")
|
||||
for biome in biomes_to_load:each_of("Biome") do
|
||||
local biome_filename = biome.attr.biome_filename
|
||||
if biome_filename == nil then
|
||||
goto continue
|
||||
end
|
||||
local biome_file = nxml.parse_file(biome_filename)
|
||||
for topology in biome_file:each_of("Topology") do
|
||||
local script = topology.attr.lua_script
|
||||
if script ~= nil and not already_found[script] and not ignore[script] then
|
||||
-- print("Discovered script", script)
|
||||
already_found[script] = true
|
||||
table.insert(module.files_with_spawnhooks, script)
|
||||
end
|
||||
end
|
||||
::continue::
|
||||
end
|
||||
print("Complete")
|
||||
|
||||
for _, filename in ipairs(module.files_with_spawnhooks) do
|
||||
if string.sub(filename, 1, 1) ~= "#" then
|
||||
patch_file(filename)
|
||||
elseif filename ~= "#" then
|
||||
unpatch_file(string.sub(filename, 2, -1))
|
||||
patch_file_dummy_detour(string.sub(filename, 2, -1))
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue