local achievement_system = require("achievement-system") local decorativeMap = {} decorativeMap["brown-asterisk"] = {"rock-tiny", 1/4} decorativeMap["green-asterisk"] = {"brown-asterisk", 1/4} decorativeMap["green-asterisk-mini"] = {"brown-asterisk", 1/10} decorativeMap["brown-asterisk-mini"] = {"brown-asterisk", 1/20} decorativeMap["red-asterisk"] = {"brown-asterisk", 1/4} decorativeMap["green-pita"] = {"rock-tiny", 1/10} decorativeMap["red-pita"] = {"rock-small", 1/10} decorativeMap["green-croton"] = {"sand-rock-small", 1/10} decorativeMap["red-croton"] = {"red-desert-decal", 1/10} decorativeMap["green-pita-mini"] = {"enemy-decal-transparent", 1/20} decorativeMap["brown-fluff"] = {"rock-tiny", 1/10} decorativeMap["brown-fluff-dry"] = {"brown-asterisk", 1/10} decorativeMap["garballo"] = {"brown-fluff", 1/10} decorativeMap["garballo-mini-dry"] = {"brown-fluff-dry", 1/10} decorativeMap["green-bush-mini"] = {"brown-fluff", 1/10} decorativeMap["green-hairy-grass"] = {"brown-hairy-grass", 1/10} decorativeMap["muddy-stump"] = nil decorativeMap["green-carpet-grass"] = {"sand-decal", 1/2} decorativeMap["green-desert-bush"] = {"red-desert-bush", 1/2} decorativeMap["white-desert-bush"] = {"white-desert-bush", 1/4} decorativeMap["red-desert-bush"] = {"red-desert-bush", 1/2} decorativeMap["green-small-grass"] = {"brown-asterisk", 1/10} decorativeMap["brown-carpet-grass"] = {"brown-carpet-grass", 1/2} decorativeMap["brown-hairy-grass"] = {"brown-hairy-grass", 1/2} decorativeMap["rock-medium"] = {} decorativeMap["rock-small"] = {} decorativeMap["rock-tiny"] = {} decorativeMap["sand-rock-medium"] = {} decorativeMap["sand-rock-small"] = {} decorativeMap["red-desert-decal"] = {} decorativeMap["dark-mud-decal"] = {} decorativeMap["puberty-decal"] = {} decorativeMap["light-mud-decal"] = {} decorativeMap["sand-decal"] = {} decorativeMap["sand-dune-decal"] = {} decorativeMap["big-ship-wreck-grass"] = nil decorativeMap["small-ship-wreck-grass"] = nil decorativeMap["enemy-decal"] = {} decorativeMap["enemy-decal-transparent"] = {} decorativeMap["nuclear-ground-patch"] = {} decorativeMap["shroom-decal"] = nil decorativeMap["worms-decal"] = nil decorativeMap["lichen-decal"] = nil local function full_fireball(surface_index, position, fireball_r, crater_external_r, force, cause, corpseMap) -- kill things in the fireball for _,v in pairs(game.surfaces[surface_index].find_entities_filtered{position=position, radius=fireball_r}) do if(v.valid and (not (string.match(v.type, "ghost"))) and (not (v.type == "resource"))) then if v.type=="tree" then v.destroy() elseif v.type == "character" then if(v.force == force and v.player) then achievement_system.nukedSelf(v.player); end if(cause and cause.valid) then v.die(force, cause) else v.die(force) end elseif(corpseMap[v.name]) then v.destroy{raise_destroy = true} elseif cause and cause.valid then if not v.die(force, cause) then v.destroy{raise_destroy = true} end elseif not v.die(force) then v.destroy{raise_destroy = true} end end end if(settings.global["destroy-resources-in-crater"].value) then -- destroy resources in crater (a bit more to account for the noise on crater edge) for _,v in pairs(game.surfaces[surface_index].find_entities_filtered{position=position, radius=crater_external_r*1.1+4, type="resource"}) do if(v.valid) then v.destroy() end end end -- destroy decoratives in the fireball for _,v in pairs(game.surfaces[surface_index].find_decoratives_filtered{area = {{position.x-fireball_r, position.y-fireball_r}, {position.x+fireball_r, position.y+fireball_r}}}) do if((v.position.x-position.x)*(v.position.x-position.x)+(v.position.y-position.y)*(v.position.y-position.y)<=fireball_r*fireball_r) then local tmpPos = v.position; local result = decorativeMap[v.decorative.name] if(result == nil) then game.surfaces[surface_index].destroy_decoratives{position = v.position}; elseif(result[1] == v.decorative.name) then local rnd = math.random(); if(rnd<=result[2]) then game.surfaces[surface_index].destroy_decoratives{position = v.position}; end elseif(result[1] ~=nil) then local rnd = math.random(); game.surfaces[surface_index].destroy_decoratives{position = v.position}; if(rnd<=result[2]) then game.surfaces[surface_index].create_decoratives{decoratives={{name=result[1], position=tmpPos, amount=1}}} end end end end -- make sure everything is dead in the fireball for _,v in pairs(game.surfaces[surface_index].find_entities_filtered{position=position, radius=fireball_r}) do if(v.valid and (not (string.match(v.type, "ghost"))) and (not (v.type == "resource"))) then if v.type == "character" then if(v.force == force and v.player) then achievement_system.nukedSelf(v.player); end if(cause and cause.valid) then v.die(force, cause) else v.die(force) end elseif(cause and cause.valid) then if not v.die(force, cause) then v.destroy{raise_destroy = true}; end else if not v.die(force) then v.destroy{raise_destroy = true}; end end end end end local function partial_fireball(surface_index, chunkLoaderStruct, chunkPosAndArea, originPos, x, y, killPlanes, force, cause, corpseMap) local entities = game.surfaces[surface_index].find_entities_filtered{area = chunkPosAndArea.area} local fireballSq = chunkLoaderStruct.fireball_r*chunkLoaderStruct.fireball_r; for _,e in pairs(entities) do if(e.valid and (not (string.match(e.type, "ghost"))) and ((e.type ~= "resource") and (killPlanes or (e.type ~= "car"))) and --e.position.x>=x and e.position.x=y and e.position.y=x and e.position.x=y and e.position.y