ModRegisterAudioEventMappings("mods/anvil_of_destiny/audio/GUIDs.txt") if not ModSettingGet("anvil_of_destiny.never_spawn_naturally") then ModLuaFileAppend("data/scripts/biomes/coalmine.lua", "mods/anvil_of_destiny/files/biomes/coalmine.lua") ModLuaFileAppend("data/scripts/biomes/excavationsite.lua", "mods/anvil_of_destiny/files/biomes/excavationsite.lua") ModLuaFileAppend("data/scripts/biomes/crypt.lua", "mods/anvil_of_destiny/files/biomes/crypt.lua") ModLuaFileAppend("data/scripts/biomes/pyramid.lua", "mods/anvil_of_destiny/files/biomes/pyramid.lua") ModLuaFileAppend("data/scripts/biomes/rainforest.lua", "mods/anvil_of_destiny/files/biomes/rainforest.lua") ModLuaFileAppend("data/scripts/biomes/snowcastle.lua", "mods/anvil_of_destiny/files/biomes/snowcastle.lua") ModLuaFileAppend("data/scripts/biomes/snowcave.lua", "mods/anvil_of_destiny/files/biomes/snowcave.lua") ModLuaFileAppend("data/scripts/biomes/vault.lua", "mods/anvil_of_destiny/files/biomes/vault.lua") if ModIsEnabled("VolcanoBiome") then ModLuaFileAppend("mods/VolcanoBiome/files/biome/inside.lua", "mods/anvil_of_destiny/files/biomes/volcanobiome.lua") end if ModIsEnabled("biome-plus") then ModLuaFileAppend("data/scripts/biomes/mod/blast_pit.lua", "mods/anvil_of_destiny/files/biomes/biome-plus/blast_pit.lua") ModLuaFileAppend("data/scripts/biomes/mod/floodcave.lua", "mods/anvil_of_destiny/files/biomes/biome-plus/floodcave.lua") ModLuaFileAppend("data/scripts/biomes/mod/frozen_passages.lua", "mods/anvil_of_destiny/files/biomes/biome-plus/frozen_passages.lua") ModLuaFileAppend("data/scripts/biomes/mod/holy_temple.lua", "mods/anvil_of_destiny/files/biomes/biome-plus/holy_temple.lua") ModLuaFileAppend("data/scripts/biomes/mod/rainforest_wormy.lua", "mods/anvil_of_destiny/files/biomes/biome-plus/rainforest_wormy.lua") ModLuaFileAppend("data/scripts/biomes/mod/robofactory.lua", "mods/anvil_of_destiny/files/biomes/biome-plus/robofactory.lua") ModLuaFileAppend("data/scripts/biomes/mod/snowvillage.lua", "mods/anvil_of_destiny/files/biomes/biome-plus/snowvillage.lua") ModLuaFileAppend("data/scripts/biomes/mod/swamp.lua", "mods/anvil_of_destiny/files/biomes/biome-plus/swamp.lua") end if ModIsEnabled("noitavania") then ModLuaFileAppend("data/scripts/biomes/coalmine_alt.lua", "mods/anvil_of_destiny/files/biomes/coalmine_alt.lua") end end ModMaterialsFileAdd("mods/anvil_of_destiny/files/materials.xml") function build_spell_level_lookup_table() dofile_once("data/scripts/gun/gun_actions.lua") dofile_once("mods/anvil_of_destiny/files/scripts/utils.lua") local s = "return {\n" for i,v in ipairs(actions) do s = s .. " [\"_" .. v.id .. "\"] = " .. "{" -- split spell levels by comma local spawn_levels = string_split(v.spawn_level and v.spawn_level or "6", ",") local spawn_probabilities = string_split(v.spawn_probability and v.spawn_probability or "1", ",") for i=1, #spawn_levels do if tonumber(spawn_probabilities[i] or 0) > 0 then s = s .. ("%s,"):format(spawn_levels[i]) end end s = s .. "},\n" end s = s .. "}" return s end -- A creates a table with key being the action_id preceded by a _ (to account for action_ids that start with a number, -- can't have table keys that start with a number) -- and the value being function build_spells_evolution_lookup_table() dofile_once("data/scripts/gun/gun_enums.lua") dofile("data/scripts/gun/gun_actions.lua") local s = "return {\n" local cache = {} for i, v in ipairs(actions) do if v.id:sub(1, 4) == "EVO_" then local action_id = v.id:sub(5, -6) if not cache[action_id] then cache[action_id] = true s = s .. (" ['_%s'] = %d,\n"):format(action_id, v.type) end end end s = s .. "}" return s end ModLuaFileAppend("data/scripts/item_spawnlists.lua", "mods/anvil_of_destiny/files/scripts/item_spawnlists_append.lua") function OnMagicNumbersAndWorldSeedInitialized() ModTextFileSetContent("mods/anvil_of_destiny/files/scripts/spell_level_lookup.lua", build_spell_level_lookup_table()) ModTextFileSetContent("mods/anvil_of_destiny/files/scripts/spells_evolution_lookup.lua", build_spells_evolution_lookup_table()) if ModTextFileGetContent("mods/anvil_of_destiny/files/_virtual/potion_bonuses_append.lua") then ModLuaFileAppend("mods/anvil_of_destiny/files/entities/anvil/potion_bonuses.lua", "mods/anvil_of_destiny/files/_virtual/potion_bonuses_append.lua") end if ModSettingGet("anvil_of_destiny.add_anvil_to_lavalake") then ModLuaFileAppend("data/scripts/biomes/hills.lua", "mods/anvil_of_destiny/files/biomes/hills.lua") local nxml = dofile_once("mods/anvil_of_destiny/lib/nxml.lua") local content = ModTextFileGetContent("data/biome/_pixel_scenes.xml") local xml = nxml.parse(content) xml:first_of("mBufferedPixelScenes"):add_child(nxml.parse([[ ]])) ModTextFileSetContent("data/biome/_pixel_scenes.xml", tostring(xml)) local content = ModTextFileGetContent("data/biome_impl/spliced/lavalake2.xml") local xml = nxml.parse(content) for element in xml:first_of("mBufferedPixelScenes"):each_of("PixelScene") do if element.attr.material_filename == "data/biome_impl/spliced/lavalake2/2.plz" then xml:first_of("mBufferedPixelScenes"):remove_child(element) break end end ModTextFileSetContent("data/biome_impl/spliced/lavalake2.xml", tostring(xml)) end end -- -- For debugging purposes, shows arrow to the nearest anvil -- local anvil_content = ModTextFileGetContent("mods/anvil_of_destiny/files/entities/anvil/anvil.xml") -- anvil_content = anvil_content:gsub([[]], [[]]) -- ModTextFileSetContent("mods/anvil_of_destiny/files/entities/anvil/anvil.xml", anvil_content) -- local draw_arrow = dofile_once("mods/anvil_of_destiny/files/scripts/draw_arrow.lua") -- local function get_distance2( x1, y1, x2, y2 ) -- local result = ( x2 - x1 ) ^ 2 + ( y2 - y1 ) ^ 2 -- return result -- end -- function OnWorldPreUpdate() -- -- Draw an arrow poiting to the nearest anvil -- local closest = { dist2 = 99999999999999 } -- for i, anvil in ipairs(EntityGetWithTag("anvil_of_destiny")) do -- local x, y = EntityGetTransform(anvil) -- local cx, cy = GameGetCameraPos() -- local dist2 = get_distance2(x, y, cx, cy) -- if dist2 < closest.dist2 then -- closest.dist2 = dist2 -- closest.x = x -- closest.y = y -- end -- end -- if closest.x then -- draw_arrow(closest.x, closest.y) -- gui = gui or GuiCreate() -- GuiStartFrame(gui) -- if GuiButton(gui, 2, 0, 200, "Jump to nearest anvil") then -- GameSetCameraPos(closest.x, closest.y) -- end -- end -- end -- ModTextFileSetContent("mods/anvil_of_destiny/_virtual/magic_numbers.xml", [[ -- ]]) -- ModMagicNumbersFileAdd("mods/anvil_of_destiny/_virtual/magic_numbers.xml") function OnPlayerSpawned(player) if ModSettingGet("anvil_of_destiny.start_with_portable_anvil") and not GameHasFlagRun("anvil_of_destiny_portable_anvil_given") then GameAddFlagRun("anvil_of_destiny_portable_anvil_given") local item = EntityLoad("mods/anvil_of_destiny/files/entities/portable_anvil/item.xml") for i, child in ipairs(EntityGetAllChildren(player) or {}) do if EntityGetName(child) == "inventory_quick" then EntityAddChild(child, item) end end end local world_seed = tonumber(StatsGetValue("world_seed")) or 0 if not GameHasFlagRun("aod_initialization_done") and ProceduralRandom(world_seed, world_seed, 0, 1) <= (1 / 5000) then GameAddFlagRun("aod_initialization_done") EntityAddComponent2(player, "LuaComponent", { script_source_file="mods/anvil_of_destiny/files/scripts/important.lua", execute_every_n_frame=ProceduralRandomi(world_seed, world_seed, 300, 1800), remove_after_executed=true, }) end end