mirror of
https://github.com/IntQuant/noita_entangled_worlds.git
synced 2025-10-19 07:03:16 +00:00
77 lines
No EOL
2.4 KiB
Lua
77 lines
No EOL
2.4 KiB
Lua
local util = dofile_once("mods/quant.ew/files/core/util.lua")
|
|
local ctx = dofile_once("mods/quant.ew/files/core/ctx.lua")
|
|
local np = require("noitapatcher")
|
|
|
|
local module = {}
|
|
|
|
ModLuaFileAppend("data/scripts/director_helpers.lua", "mods/quant.ew/files/system/spawn_hooks/append/director_helpers.lua")
|
|
ModLuaFileAppend("data/scripts/item_spawnlists.lua", "mods/quant.ew/files/system/spawn_hooks/append/item_spawnlist.lua")
|
|
|
|
local exclude = {}
|
|
exclude["data/entities/items/pickup/perk.xml"] = true
|
|
exclude["data/entities/items/pickup/spell_refresh.xml"] = true
|
|
exclude["data/entities/items/pickup/heart.xml"] = true
|
|
exclude["data/entities/items/pickup/heart_better.xml"] = true
|
|
exclude["data/entities/items/pickup/heart_evil.xml"] = true
|
|
exclude["data/entities/items/pickup/heart_fullhp.xml"] = true
|
|
exclude["data/entities/items/pickup/heart_fullhp_temple.xml"] = true
|
|
exclude["data/entities/items/pickup/perk_reroll.xml"] = true
|
|
|
|
-- This entity needs to be synced by item_sync
|
|
local function is_sync_item(ent_path)
|
|
-- No item needs to be synced when this option is off.
|
|
if not ctx.proxy_opt.item_dedup then
|
|
return false
|
|
end
|
|
if exclude[ent_path] then
|
|
return false
|
|
end
|
|
local start = "data/entities/items/"
|
|
if string.sub(ent_path, 1, #start) == start then
|
|
return true
|
|
end
|
|
return false
|
|
end
|
|
|
|
np.CrossCallAdd("ew_spawn_hook_pre", function(ent_path, x, y)
|
|
if ctx.is_host then
|
|
if is_sync_item(ent_path) then
|
|
local ent_id = EntityLoad(ent_path, x, y)
|
|
ctx.cap.item_sync.globalize(ent_id, false)
|
|
return ent_id
|
|
else
|
|
return true
|
|
end
|
|
else
|
|
if is_sync_item(ent_path) then
|
|
return false
|
|
else
|
|
return not module.entity_is_synced(ent_path)
|
|
end
|
|
end
|
|
end)
|
|
|
|
-- Called after entity was loaded.
|
|
-- Might be useless in some cases, as entity was already despawned/serialized due to CameraBoundComponent.
|
|
np.CrossCallAdd("ew_spawn_hook_post", function(ent_path, ent)
|
|
|
|
end)
|
|
|
|
local entity_is_enemy_cache = {}
|
|
|
|
function module.entity_is_synced(ent_path)
|
|
if entity_is_enemy_cache[ent_path] ~= nil then
|
|
return entity_is_enemy_cache[ent_path]
|
|
end
|
|
|
|
print("Checking if this is an enemy: "..ent_path)
|
|
|
|
local tags = util.load_ents_tags(ent_path)
|
|
|
|
local res = constants.phys_sync_allowed[ent_path] or table.contains(tags, "enemy")
|
|
|
|
entity_is_enemy_cache[ent_path] = res
|
|
return res
|
|
end
|
|
|
|
return module |