diff --git a/code/game/objects/explosion2.dm b/code/game/objects/explosion2.dm new file mode 100644 index 00000000000..5f6ee6a678f --- /dev/null +++ b/code/game/objects/explosion2.dm @@ -0,0 +1,115 @@ +//TODO: Flash range does nothing currently + +proc/explosion(turf/epicenter, devastation_range, heavy_impact_range, light_impact_range, flash_range, adminlog = 1) + spawn(0) + var/start = world.timeofday + epicenter = get_turf(epicenter) + if(!epicenter) return + + if(adminlog) + message_admins("Explosion with size ([devastation_range], [heavy_impact_range], [light_impact_range]) in area [epicenter.loc.name] ") + log_game("Explosion with size ([devastation_range], [heavy_impact_range], [light_impact_range]) in area [epicenter.loc.name] ") + + playsound(epicenter, 'explosionfar.ogg', 100, 1, round(devastation_range*2,1) ) + playsound(epicenter, "explosion", 100, 1, round(devastation_range,1) ) + + tension_master.explosion() + + if(defer_powernet_rebuild != 2) + defer_powernet_rebuild = 1 + + if(heavy_impact_range > 1) + var/datum/effect/system/explosion/E = new/datum/effect/system/explosion() + E.set_up(epicenter) + E.start() + + var/x = epicenter.x + var/y = epicenter.y + var/z = epicenter.z + + var/counter = 0 + + if(devastation_range > 0) + counter += explosion_turf(x,y,z,1) + else + devastation_range = 0 + if(heavy_impact_range > 0) + counter += explosion_turf(x,y,z,2) + else + heavy_impact_range = 0 + if(light_impact_range > 0) + counter += explosion_turf(x,y,z,3) + else + return + + //Diamond 'splosions (looks more round than square version) + for(var/i=0, i