From 4d8160ab14d2ac60f7dccff73dbda63b06e4d92f Mon Sep 17 00:00:00 2001 From: Cheridan Date: Tue, 22 Apr 2014 12:16:02 -0500 Subject: [PATCH 1/5] meteorhit() is kill --- code/game/atoms.dm | 3 --- code/game/gamemodes/meteor/meteors.dm | 2 +- code/game/machinery/atmoalter/canister.dm | 5 ----- code/game/machinery/bots/bots.dm | 4 ---- .../machinery/computer/HolodeckControl.dm | 4 ---- code/game/machinery/computer/computer.dm | 9 --------- code/game/machinery/deployable.dm | 12 ----------- code/game/machinery/doors/door.dm | 4 ---- code/game/machinery/hologram.dm | 4 ---- code/game/machinery/shieldgen.dm | 20 ------------------- code/game/machinery/turrets.dm | 4 ---- code/game/mecha/mecha.dm | 4 ---- code/game/objects/structures.dm | 12 +---------- .../structures/crates_lockers/closets.dm | 6 ------ .../crates_lockers/closets/statue.dm | 6 ------ code/game/objects/structures/displaycase.dm | 6 ------ code/game/objects/structures/grille.dm | 4 ---- code/game/objects/structures/lamarr_cage.dm | 6 ------ code/game/objects/structures/safe.dm | 5 ----- code/game/objects/structures/tables_racks.dm | 3 --- code/game/objects/structures/window.dm | 6 ------ code/game/turfs/simulated/walls.dm | 11 +--------- code/modules/events/dust.dm | 2 +- code/modules/events/immovable_rod.dm | 2 +- code/modules/events/ninja.dm | 5 ----- .../living/carbon/alien/humanoid/humanoid.dm | 14 ------------- .../mob/living/carbon/alien/larva/larva.dm | 12 ----------- code/modules/mob/living/carbon/human/human.dm | 16 --------------- .../mob/living/carbon/metroid/metroid.dm | 11 ---------- .../mob/living/carbon/monkey/monkey.dm | 13 ------------ code/modules/mob/living/silicon/ai/ai.dm | 13 +----------- .../modules/mob/living/silicon/robot/robot.dm | 12 ----------- code/modules/power/apc.dm | 7 +------ code/modules/power/gravitygenerator.dm | 3 --- .../power/singularity/containment_field.dm | 2 -- code/modules/power/singularity/emitter.dm | 2 -- .../particle_accelerator.dm | 11 ---------- code/modules/power/solar.dm | 12 ----------- .../modules/projectiles/projectile/special.dm | 2 +- code/modules/reagents/Chemistry-Machinery.dm | 8 -------- code/modules/research/circuitprinter.dm | 3 --- code/modules/research/destructive_analyzer.dm | 3 --- code/modules/research/server.dm | 4 ---- 43 files changed, 8 insertions(+), 289 deletions(-) diff --git a/code/game/atoms.dm b/code/game/atoms.dm index 8b7dc07052f..45193079a06 100644 --- a/code/game/atoms.dm +++ b/code/game/atoms.dm @@ -80,9 +80,6 @@ */ -/atom/proc/meteorhit(obj/meteor as obj) - return - /atom/proc/allow_drop() return 1 diff --git a/code/game/gamemodes/meteor/meteors.dm b/code/game/gamemodes/meteor/meteors.dm index 4f790db04fe..fb5e7ed1a03 100644 --- a/code/game/gamemodes/meteor/meteors.dm +++ b/code/game/gamemodes/meteor/meteors.dm @@ -95,7 +95,7 @@ /obj/effect/meteor/Bump(atom/A) if (A) - A.meteorhit(src) + A.ex_act(2) playsound(src.loc, 'sound/effects/meteorimpact.ogg', 40, 1) if (--src.hits <= 0) diff --git a/code/game/machinery/atmoalter/canister.dm b/code/game/machinery/atmoalter/canister.dm index 4c2c0bfbde1..152b25fd4ff 100644 --- a/code/game/machinery/atmoalter/canister.dm +++ b/code/game/machinery/atmoalter/canister.dm @@ -204,11 +204,6 @@ update_flag healthcheck() ..() -/obj/machinery/portable_atmospherics/canister/meteorhit(var/obj/O as obj) - src.health = 0 - healthcheck() - return - /obj/machinery/portable_atmospherics/canister/ex_act(severity) switch(severity) if(1.0) diff --git a/code/game/machinery/bots/bots.dm b/code/game/machinery/bots/bots.dm index f957a2d3a46..617a9d97d05 100644 --- a/code/game/machinery/bots/bots.dm +++ b/code/game/machinery/bots/bots.dm @@ -107,10 +107,6 @@ healthcheck() return -/obj/machinery/bot/meteorhit() - src.explode() - return - /obj/machinery/bot/blob_act() src.health -= rand(20,40)*fire_dam_coeff healthcheck() diff --git a/code/game/machinery/computer/HolodeckControl.dm b/code/game/machinery/computer/HolodeckControl.dm index e4c6e621fee..9d055fac863 100644 --- a/code/game/machinery/computer/HolodeckControl.dm +++ b/code/game/machinery/computer/HolodeckControl.dm @@ -140,10 +140,6 @@ emergencyShutdown() ..() -/obj/machinery/computer/HolodeckControl/meteorhit(var/obj/O as obj) - emergencyShutdown() - ..() - /obj/machinery/computer/HolodeckControl/emp_act(severity) emergencyShutdown() diff --git a/code/game/machinery/computer/computer.dm b/code/game/machinery/computer/computer.dm index 738def55fe9..99c19755b5c 100644 --- a/code/game/machinery/computer/computer.dm +++ b/code/game/machinery/computer/computer.dm @@ -21,15 +21,6 @@ return 0 return 1 -/obj/machinery/computer/meteorhit(var/obj/O as obj) - verbs.Cut() - set_broken() - var/datum/effect/effect/system/harmless_smoke_spread/smoke = new /datum/effect/effect/system/harmless_smoke_spread() - smoke.set_up(5, 0, src) - smoke.start() - return - - /obj/machinery/computer/emp_act(severity) if(prob(20/severity)) set_broken() ..() diff --git a/code/game/machinery/deployable.dm b/code/game/machinery/deployable.dm index 9a96425c488..0f772a4baba 100644 --- a/code/game/machinery/deployable.dm +++ b/code/game/machinery/deployable.dm @@ -106,14 +106,6 @@ for reference: qdel(src) return - meteorhit() - visible_message("\red The barricade is smashed apart!") - new /obj/item/stack/sheet/mineral/wood(get_turf(src)) - new /obj/item/stack/sheet/mineral/wood(get_turf(src)) - new /obj/item/stack/sheet/mineral/wood(get_turf(src)) - qdel(src) - return - blob_act() src.health -= 25 if (src.health <= 0) @@ -235,10 +227,6 @@ for reference: anchored = !anchored icon_state = "barrier[src.locked]" - meteorhit() - src.explode() - return - blob_act() src.health -= 25 if (src.health <= 0) diff --git a/code/game/machinery/doors/door.dm b/code/game/machinery/doors/door.dm index d71b255df22..352231c2116 100644 --- a/code/game/machinery/doors/door.dm +++ b/code/game/machinery/doors/door.dm @@ -92,10 +92,6 @@ else flick("door_deny", src) return -/obj/machinery/door/meteorhit(obj/M as obj) - src.open() - return - /obj/machinery/door/attack_ai(mob/user as mob) return src.attack_hand(user) diff --git a/code/game/machinery/hologram.dm b/code/game/machinery/hologram.dm index c1b0248ac3c..6222d05dd32 100644 --- a/code/game/machinery/hologram.dm +++ b/code/game/machinery/hologram.dm @@ -174,10 +174,6 @@ For the other part of the code, check silicon say.dm. Particularly robot talk.*/ qdel(src) return -/obj/machinery/hologram/meteorhit() - qdel(src) - return - /obj/machinery/hologram/holopad/Destroy() if(hologram) clear_holo() diff --git a/code/game/machinery/shieldgen.dm b/code/game/machinery/shieldgen.dm index 855ca45dc7b..439ae820cb1 100644 --- a/code/game/machinery/shieldgen.dm +++ b/code/game/machinery/shieldgen.dm @@ -52,21 +52,8 @@ opacity = 1 spawn(20) if(src) opacity = 0 - ..() -/obj/machinery/shield/meteorhit() - src.health -= max_health*0.75 //3/4 health as damage - - if(src.health <= 0) - visible_message("\blue The [src] dissapates") - qdel(src) - return - - opacity = 1 - spawn(20) if(src) opacity = 0 - return - /obj/machinery/shield/bullet_act(var/obj/item/projectile/Proj) health -= Proj.damage ..() @@ -194,13 +181,6 @@ update_icon() return -/obj/machinery/shieldgen/meteorhit(obj/O as obj) - src.health -= max_health*0.25 //A quarter of the machine's health - if (prob(5)) - src.malfunction = 1 - src.checkhp() - return - /obj/machinery/shieldgen/ex_act(severity) switch(severity) if(1.0) diff --git a/code/game/machinery/turrets.dm b/code/game/machinery/turrets.dm index a035d061161..ed5b1f7356d 100644 --- a/code/game/machinery/turrets.dm +++ b/code/game/machinery/turrets.dm @@ -503,10 +503,6 @@ /obj/machinery/gun_turret/emp_act() //Can't emp an mechanical turret. return -/obj/machinery/gun_turret/meteorhit() - die() - return - /obj/machinery/gun_turret/update_icon() if(state > 2 || state < 0) //someone fucked up the vars so fix them take_damage(0) diff --git a/code/game/mecha/mecha.dm b/code/game/mecha/mecha.dm index e0c2c72e051..50409ca1998 100644 --- a/code/game/mecha/mecha.dm +++ b/code/game/mecha/mecha.dm @@ -613,10 +613,6 @@ take_damage(30, "brute") return -//TODO -/obj/mecha/meteorhit() - return ex_act(rand(1,3))//should do for now - /obj/mecha/emp_act(severity) if(get_charge()) use_power((cell.charge/2)/severity) diff --git a/code/game/objects/structures.dm b/code/game/objects/structures.dm index dc81ffab22d..8952a88a1b5 100644 --- a/code/game/objects/structures.dm +++ b/code/game/objects/structures.dm @@ -15,14 +15,4 @@ obj/structure/ex_act(severity) qdel(src) return if(3.0) - return - -obj/structure/meteorhit(obj/O as obj) - qdel(src) - - - - - - - + return \ No newline at end of file diff --git a/code/game/objects/structures/crates_lockers/closets.dm b/code/game/objects/structures/crates_lockers/closets.dm index 5083689c6c4..97d55bedaab 100644 --- a/code/game/objects/structures/crates_lockers/closets.dm +++ b/code/game/objects/structures/crates_lockers/closets.dm @@ -163,12 +163,6 @@ A.loc = src.loc qdel(src) -/obj/structure/closet/meteorhit(obj/O as obj) - if(O.icon_state == "flaming") - for(var/mob/M in src) - M.meteorhit(O) - src.dump_contents() - qdel(src) /obj/structure/closet/attackby(obj/item/weapon/W as obj, mob/user as mob) if(src.opened) diff --git a/code/game/objects/structures/crates_lockers/closets/statue.dm b/code/game/objects/structures/crates_lockers/closets/statue.dm index 31aff82fff5..04c1f737b46 100644 --- a/code/game/objects/structures/crates_lockers/closets/statue.dm +++ b/code/game/objects/structures/crates_lockers/closets/statue.dm @@ -121,12 +121,6 @@ for(var/mob/M in src) shatter(M) -/obj/structure/closet/statue/meteorhit(obj/O as obj) - if(O.icon_state == "flaming") - for(var/mob/M in src) - M.meteorhit(O) - shatter(M) - /obj/structure/closet/statue/attackby(obj/item/I as obj, mob/user as mob) health -= I.force visible_message("\red [user] strikes [src] with [I].") diff --git a/code/game/objects/structures/displaycase.dm b/code/game/objects/structures/displaycase.dm index 74f79c2a49c..27ada72e69d 100644 --- a/code/game/objects/structures/displaycase.dm +++ b/code/game/objects/structures/displaycase.dm @@ -45,12 +45,6 @@ qdel(src) -/obj/structure/displaycase/meteorhit(obj/O as obj) - new /obj/item/weapon/shard( src.loc ) - new /obj/item/weapon/gun/energy/laser/captain( src.loc ) - qdel(src) - - /obj/structure/displaycase/proc/healthcheck() if (src.health <= 0) if (!( src.destroyed )) diff --git a/code/game/objects/structures/grille.dm b/code/game/objects/structures/grille.dm index 4e503a71961..ff59707bbed 100644 --- a/code/game/objects/structures/grille.dm +++ b/code/game/objects/structures/grille.dm @@ -18,10 +18,6 @@ /obj/structure/grille/blob_act() qdel(src) -/obj/structure/grille/meteorhit(var/obj/M) - qdel(src) - - /obj/structure/grille/Bumped(atom/user) if(ismob(user)) shock(user, 70) diff --git a/code/game/objects/structures/lamarr_cage.dm b/code/game/objects/structures/lamarr_cage.dm index 8c136774de3..0981a3cb4e6 100644 --- a/code/game/objects/structures/lamarr_cage.dm +++ b/code/game/objects/structures/lamarr_cage.dm @@ -40,12 +40,6 @@ qdel(src) -/obj/structure/lamarr/meteorhit(obj/O as obj) - new /obj/item/weapon/shard( src.loc ) - Break() - qdel(src) - - /obj/structure/lamarr/proc/healthcheck() if (src.health <= 0) if (!( src.destroyed )) diff --git a/code/game/objects/structures/safe.dm b/code/game/objects/structures/safe.dm index 4eadae15d4e..1b917b2a436 100644 --- a/code/game/objects/structures/safe.dm +++ b/code/game/objects/structures/safe.dm @@ -163,15 +163,10 @@ FLOOR SAFES obj/structure/safe/blob_act() return - obj/structure/safe/ex_act(severity) return -obj/structure/safe/meteorhit(obj/O as obj) - return - - //FLOOR SAFES /obj/structure/safe/floor name = "floor safe" diff --git a/code/game/objects/structures/tables_racks.dm b/code/game/objects/structures/tables_racks.dm index 0bcdb347658..0337f2b382c 100644 --- a/code/game/objects/structures/tables_racks.dm +++ b/code/game/objects/structures/tables_racks.dm @@ -726,9 +726,6 @@ Destroy type values: if(W && W.loc) W.loc = src.loc return 1 -/obj/structure/rack/meteorhit(obj/O as obj) - qdel(src) - /obj/structure/rack/attack_hand(mob/user) if(HULK in user.mutations) diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm index 9b4191a5282..3a8975c6fe6 100644 --- a/code/game/objects/structures/window.dm +++ b/code/game/objects/structures/window.dm @@ -50,12 +50,6 @@ qdel(src) -/obj/structure/window/meteorhit() - //world << "glass at [x],[y],[z] Mhit" - new /obj/item/weapon/shard( loc ) - if(reinf) new /obj/item/stack/rods( loc) - qdel(src) - /obj/structure/window/CanPass(atom/movable/mover, turf/target, height=0, air_group=0) if(istype(mover) && mover.checkpass(PASSGLASS)) return 1 diff --git a/code/game/turfs/simulated/walls.dm b/code/game/turfs/simulated/walls.dm index a8333d377b6..7748f742940 100644 --- a/code/game/turfs/simulated/walls.dm +++ b/code/game/turfs/simulated/walls.dm @@ -299,13 +299,4 @@ spawn(100) if(O) qdel(O) // F.sd_LumReset() //TODO: ~Carn - return - -/turf/simulated/wall/meteorhit(obj/M as obj) - if (prob(15)) - dismantle_wall() - else if(prob(70)) - ChangeTurf(/turf/simulated/floor/plating) - else - ReplaceWithLattice() - return 0 \ No newline at end of file + return \ No newline at end of file diff --git a/code/modules/events/dust.dm b/code/modules/events/dust.dm index cde70335756..5c2ecf1b6c0 100644 --- a/code/modules/events/dust.dm +++ b/code/modules/events/dust.dm @@ -86,7 +86,7 @@ playsound(src.loc, 'sound/effects/meteorimpact.ogg', 40, 1) if(ismob(A)) - A.meteorhit(src)//This should work for now I guess + A.ex_act(strength) else if(!istype(A,/obj/machinery/power/emitter) && !istype(A,/obj/machinery/field/generator)) //Protect the singularity from getting released every round! A.ex_act(strength) //Changing emitter/field gen ex_act would make it immune to bombs and C4 diff --git a/code/modules/events/immovable_rod.dm b/code/modules/events/immovable_rod.dm index c418e498812..8b1a178b77d 100644 --- a/code/modules/events/immovable_rod.dm +++ b/code/modules/events/immovable_rod.dm @@ -89,7 +89,7 @@ In my current plan for it, 'solid' will be defined as anything with density == 1 else if (istype(clong, /mob)) if(clong.density || prob(10)) - clong.meteorhit(src) + clong.ex_act(2) else qdel(src) diff --git a/code/modules/events/ninja.dm b/code/modules/events/ninja.dm index 0e26fc11d69..722b75d40bf 100644 --- a/code/modules/events/ninja.dm +++ b/code/modules/events/ninja.dm @@ -2740,11 +2740,6 @@ It is possible to destroy the net by the occupant or someone else. healthcheck() return - meteorhit() - health-=50 - healthcheck() - return - hitby(AM as mob|obj) ..() for(var/mob/O in viewers(src, null)) diff --git a/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm b/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm index f3bd6e95c7c..ebe2a488d4f 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm @@ -94,25 +94,11 @@ if(shielded) damage /= 4 - show_message("\red The blob attacks!") - adjustFireLoss(damage) - return -/mob/living/carbon/alien/humanoid/meteorhit(O as obj) - for(var/mob/M in viewers(src, null)) - if ((M.client && !( M.blinded ))) - M.show_message(text("\red [] has been hit by []", src, O), 1) - if (health > 0) - adjustFireLoss((istype(O, /obj/effect/meteor/small) ? 10 : 25)) - adjustFireLoss(30) - - updatehealth() - return - /mob/living/carbon/alien/humanoid/attack_paw(mob/living/carbon/monkey/M as mob) if(!ismonkey(M)) return//Fix for aliens receiving double messages when attacking other aliens. diff --git a/code/modules/mob/living/carbon/alien/larva/larva.dm b/code/modules/mob/living/carbon/alien/larva/larva.dm index 2e2c464a30c..12b3713d6df 100644 --- a/code/modules/mob/living/carbon/alien/larva/larva.dm +++ b/code/modules/mob/living/carbon/alien/larva/larva.dm @@ -113,17 +113,6 @@ /mob/living/carbon/alien/larva/attack_ui(slot_id) return -/mob/living/carbon/alien/larva/meteorhit(O as obj) - for(var/mob/M in viewers(src, null)) - if ((M.client && !( M.blinded ))) - M.show_message(text("\red [] has been hit by []", src, O), 1) - if (health > 0) - adjustBruteLoss((istype(O, /obj/effect/meteor/small) ? 10 : 25)) - adjustFireLoss(30) - - updatehealth() - return - /mob/living/carbon/alien/larva/attack_animal(mob/living/simple_animal/M as mob) if(M.melee_damage_upper == 0) M.emote("[M.friendly] [src]") @@ -136,7 +125,6 @@ updatehealth() - /mob/living/carbon/alien/larva/attack_paw(mob/living/carbon/monkey/M as mob) if(!(istype(M, /mob/living/carbon/monkey))) return//Fix for aliens receiving double messages when attacking other aliens. diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 50a03307add..23cb9f43723 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -204,22 +204,6 @@ apply_damage(rand(20,30), BRUTE, affecting, run_armor_check(affecting, "melee")) return -/mob/living/carbon/human/meteorhit(O as obj) - for(var/mob/M in viewers(src, null)) - if ((M.client && !( M.blinded ))) - M.show_message("\red [src] has been hit by [O]", 1) - if (health > 0) - var/obj/item/organ/limb/affecting = get_organ(pick("chest", "chest", "chest", "head")) - if(!affecting) return - if (istype(O, /obj/effect/immovablerod)) - if(affecting.take_damage(101, 0)) - update_damage_overlays(0) - else - if(affecting.take_damage((istype(O, /obj/effect/meteor/small) ? 10 : 25), 30)) - update_damage_overlays(0) - updatehealth() - return - /mob/living/carbon/human/attack_animal(mob/living/simple_animal/M as mob) if(M.melee_damage_upper == 0) diff --git a/code/modules/mob/living/carbon/metroid/metroid.dm b/code/modules/mob/living/carbon/metroid/metroid.dm index ab479dffe30..082f3bbbac1 100644 --- a/code/modules/mob/living/carbon/metroid/metroid.dm +++ b/code/modules/mob/living/carbon/metroid/metroid.dm @@ -248,17 +248,6 @@ /mob/living/carbon/slime/attack_ui(slot) return -/mob/living/carbon/slime/meteorhit(O as obj) - for(var/mob/M in viewers(src, null)) - if ((M.client && !( M.blinded ))) - M.show_message(text(" [] has been hit by []", src, O), 1) - if (health > 0) - adjustBruteLoss((istype(O, /obj/effect/meteor/small) ? 10 : 25)) - adjustFireLoss(30) - - updatehealth() - return - /mob/living/carbon/slime/attack_slime(mob/living/carbon/slime/M as mob) if (!ticker) diff --git a/code/modules/mob/living/carbon/monkey/monkey.dm b/code/modules/mob/living/carbon/monkey/monkey.dm index dfea7361533..828a07547ef 100644 --- a/code/modules/mob/living/carbon/monkey/monkey.dm +++ b/code/modules/mob/living/carbon/monkey/monkey.dm @@ -68,19 +68,6 @@ now_pushing = null -/mob/living/carbon/monkey/meteorhit(obj/O as obj) - for(var/mob/M in viewers(src, null)) - M.show_message(text("\red [] has been hit by []", src, O), 1) - if (health > 0) - var/shielded = 0 - adjustBruteLoss(30) - if ((O.icon_state == "flaming" && !( shielded ))) - adjustFireLoss(40) - health = 100 - getOxyLoss() - getToxLoss() - getFireLoss() - getBruteLoss() - return - -//mob/living/carbon/monkey/bullet_act(var/obj/item/projectile/Proj)taken care of in living - /mob/living/carbon/monkey/attack_paw(mob/M as mob) ..() diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm index 93f82ae1399..6be9cb97360 100644 --- a/code/modules/mob/living/silicon/ai/ai.dm +++ b/code/modules/mob/living/silicon/ai/ai.dm @@ -376,27 +376,16 @@ var/list/ai_list = list() usr << "Target is not on or near any active cameras on the station. We'll check again in 5 seconds (unless you use the cancel-camera verb)." sleep(40) continue - return - return -/mob/living/silicon/ai/meteorhit(obj/O as obj) - for(var/mob/M in viewers(src, null)) - M.show_message(text("\red [] has been hit by []", src, O), 1) - //Foreach goto(19) - if (health > 0) - adjustBruteLoss(30) - if ((O.icon_state == "flaming")) - adjustFireLoss(40) - updatehealth() - return /mob/living/silicon/ai/bullet_act(var/obj/item/projectile/Proj) ..(Proj) updatehealth() return 2 + /mob/living/silicon/ai/attack_alien(mob/living/carbon/alien/humanoid/M as mob) if (!ticker) M << "You cannot attack people before the game has started." diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index 54c38fcb787..9354918ac99 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -336,21 +336,9 @@ if(3.0) if (stat != 2) adjustBruteLoss(30) - return -/mob/living/silicon/robot/meteorhit(obj/O as obj) - for(var/mob/M in viewers(src, null)) - M.show_message(text("\red [src] has been hit by [O]"), 1) - //Foreach goto(19) - if (health > 0) - adjustBruteLoss(30) - if ((O.icon_state == "flaming")) - adjustFireLoss(40) - updatehealth() - return - /mob/living/silicon/robot/bullet_act(var/obj/item/projectile/Proj) ..(Proj) diff --git a/code/modules/power/apc.dm b/code/modules/power/apc.dm index 9735c4fbaa4..f119cecd678 100644 --- a/code/modules/power/apc.dm +++ b/code/modules/power/apc.dm @@ -1183,13 +1183,8 @@ obj/machinery/power/apc/proc/autoset(var/val, var/on) return val + // damage and destruction acts - -/obj/machinery/power/apc/meteorhit(var/obj/O as obj) - - set_broken() - return - /obj/machinery/power/apc/emp_act(severity) if(cell) cell.emp_act(severity) diff --git a/code/modules/power/gravitygenerator.dm b/code/modules/power/gravitygenerator.dm index f0e7168ad13..60cb90c256b 100644 --- a/code/modules/power/gravitygenerator.dm +++ b/code/modules/power/gravitygenerator.dm @@ -32,9 +32,6 @@ var/const/GRAV_NEEDS_WRENCH = 3 if(severity == 1) // Very sturdy. set_broken() -/obj/machinery/gravity_generator/meteorhit() - return - /obj/machinery/gravity_generator/update_icon() ..() icon_state = "[get_status()]_[sprite_number]" diff --git a/code/modules/power/singularity/containment_field.dm b/code/modules/power/singularity/containment_field.dm index ca45409875b..56dcd502414 100644 --- a/code/modules/power/singularity/containment_field.dm +++ b/code/modules/power/singularity/containment_field.dm @@ -36,8 +36,6 @@ /obj/machinery/field/containment/ex_act(severity) return 0 -/obj/machinery/field/containment/meteorhit() - return 0 /obj/machinery/field/containment/Crossed(atom/movable/mover) if(isliving(mover)) diff --git a/code/modules/power/singularity/emitter.dm b/code/modules/power/singularity/emitter.dm index b249672db3f..e571a4bbf9b 100644 --- a/code/modules/power/singularity/emitter.dm +++ b/code/modules/power/singularity/emitter.dm @@ -88,8 +88,6 @@ src.use_power = 1 */ return 1 -/obj/machinery/field/containment/meteorhit() - return 0 /obj/machinery/power/emitter/process() if(stat & (BROKEN)) diff --git a/code/modules/power/singularity/particle_accelerator/particle_accelerator.dm b/code/modules/power/singularity/particle_accelerator/particle_accelerator.dm index 2e037f8e76e..f4751450a1d 100644 --- a/code/modules/power/singularity/particle_accelerator/particle_accelerator.dm +++ b/code/modules/power/singularity/particle_accelerator/particle_accelerator.dm @@ -163,11 +163,6 @@ So, hopefully this is helpful if any more icons are to be added/changed/wonderin return -/obj/structure/particle_accelerator/meteorhit() - if(prob(50)) - qdel(src) - return - /obj/structure/particle_accelerator/update_icon() switch(construction_state) if(0,1) @@ -350,12 +345,6 @@ So, hopefully this is helpful if any more icons are to be added/changed/wonderin return -/obj/machinery/particle_accelerator/meteorhit() - if(prob(50)) - qdel(src) - return - - /obj/machinery/particle_accelerator/proc/update_state() return 0 diff --git a/code/modules/power/solar.dm b/code/modules/power/solar.dm index 1de1a7b55a4..344100e978d 100644 --- a/code/modules/power/solar.dm +++ b/code/modules/power/solar.dm @@ -138,13 +138,6 @@ var/list/solars_list = list() return -/obj/machinery/power/solar/meteorhit() - if(stat & !BROKEN) - broken() - else - qdel(src) - - /obj/machinery/power/solar/ex_act(severity) switch(severity) if(1.0) @@ -458,11 +451,6 @@ var/list/solars_list = list() update_icon() -/obj/machinery/power/solar_control/meteorhit() - broken() - return - - /obj/machinery/power/solar_control/ex_act(severity) switch(severity) if(1.0) diff --git a/code/modules/projectiles/projectile/special.dm b/code/modules/projectiles/projectile/special.dm index c5ffc4bf95f..afe46c110e3 100644 --- a/code/modules/projectiles/projectile/special.dm +++ b/code/modules/projectiles/projectile/special.dm @@ -62,7 +62,7 @@ if(src)//Do not add to this if() statement, otherwise the meteor won't delete them if(A) - A.meteorhit(src) + A.ex_act(2) playsound(src.loc, 'sound/effects/meteorimpact.ogg', 40, 1) for(var/mob/M in range(10, src)) diff --git a/code/modules/reagents/Chemistry-Machinery.dm b/code/modules/reagents/Chemistry-Machinery.dm index cf33cbb7529..8d67ce63f4d 100644 --- a/code/modules/reagents/Chemistry-Machinery.dm +++ b/code/modules/reagents/Chemistry-Machinery.dm @@ -64,10 +64,6 @@ if (prob(50)) qdel(src) -/obj/machinery/chem_dispenser/meteorhit() - qdel(src) - return - /** * The ui_interact proc is used to open and update Nano UIs * If ui_interact is not used then the UI will not update correctly @@ -276,10 +272,6 @@ if (prob(50)) qdel(src) -/obj/machinery/chem_master/meteorhit() - qdel(src) - return - /obj/machinery/chem_master/power_change() if(powered()) stat &= ~NOPOWER diff --git a/code/modules/research/circuitprinter.dm b/code/modules/research/circuitprinter.dm index 0b131f0d37e..e5588ca946f 100644 --- a/code/modules/research/circuitprinter.dm +++ b/code/modules/research/circuitprinter.dm @@ -43,9 +43,6 @@ using metal and glass, it uses glass and reagents (usually sulfuric acis). if (prob(50)) qdel(src) -/obj/machinery/r_n_d/circuit_imprinter/meteorhit() - qdel(src) - return /obj/machinery/r_n_d/circuit_imprinter/proc/check_mat(datum/design/being_built, var/M) switch(M) diff --git a/code/modules/research/destructive_analyzer.dm b/code/modules/research/destructive_analyzer.dm index 3649c8ba438..b13964fbe88 100644 --- a/code/modules/research/destructive_analyzer.dm +++ b/code/modules/research/destructive_analyzer.dm @@ -28,9 +28,6 @@ Note: Must be placed within 3 tiles of the R&D Console T += S.rating decon_mod = T -/obj/machinery/r_n_d/destructive_analyzer/meteorhit() - qdel(src) - return /obj/machinery/r_n_d/destructive_analyzer/proc/ConvertReqString2List(var/list/source_list) var/list/temp_list = params2list(source_list) diff --git a/code/modules/research/server.dm b/code/modules/research/server.dm index bf53508cb38..8abbae4220c 100644 --- a/code/modules/research/server.dm +++ b/code/modules/research/server.dm @@ -74,10 +74,6 @@ produce_heat(heat_gen) delay = initial(delay) -/obj/machinery/r_n_d/server/meteorhit(var/obj/O as obj) - griefProtection() - ..() - /obj/machinery/r_n_d/server/emp_act(severity) griefProtection() From f83f1932b263e5bb56d10ce4c7045442bbca0b0c Mon Sep 17 00:00:00 2001 From: Cheridan Date: Wed, 23 Apr 2014 01:37:44 -0500 Subject: [PATCH 2/5] Meteor code uses OOP principles a little better now Adds new types of meteors with different effects. Meteors drop some ore when they hit. --- code/game/gamemodes/meteor/meteors.dm | 190 ++++++++++++------ .../objects/effects/decals/Cleanable/misc.dm | 12 +- code/modules/events/dust.dm | 2 +- code/modules/events/meteor_wave.dm | 2 +- icons/obj/meteor.dmi | Bin 11700 -> 11786 bytes tgstation.dme | 1 + 6 files changed, 134 insertions(+), 73 deletions(-) diff --git a/code/game/gamemodes/meteor/meteors.dm b/code/game/gamemodes/meteor/meteors.dm index fb5e7ed1a03..dc21aae8919 100644 --- a/code/game/gamemodes/meteor/meteors.dm +++ b/code/game/gamemodes/meteor/meteors.dm @@ -1,10 +1,13 @@ /var/const/meteor_wave_delay = 625 //minimum wait between waves in tenths of seconds //set to at least 100 unless you want evarr ruining every round -/var/const/meteors_in_wave = 50 -/var/const/meteors_in_small_wave = 10 +/var/list/meteorsA = list(/obj/effect/meteor/dust=3, /obj/effect/meteor/medium=8, /obj/effect/meteor/big=3, \ + /obj/effect/meteor/flaming=1, /obj/effect/meteor/irradiated=3) -/proc/meteor_wave(var/number = meteors_in_wave) +/var/list/meteorsB = list(/obj/effect/meteor/meaty=5, /obj/effect/meteor/meaty/xeno=1) + + +/proc/meteor_wave(var/number = 50) //this proc's unused now. if(!ticker || wavesecret) return @@ -15,12 +18,13 @@ spawn(meteor_wave_delay) wavesecret = 0 -/proc/spawn_meteors(var/number = meteors_in_small_wave) + +/proc/spawn_meteors(var/number = 10, var/list/meteortypes) for(var/i = 0; i < number; i++) spawn(0) - spawn_meteor() + spawn_meteor(meteortypes) -/proc/spawn_meteor() +/proc/spawn_meteor(var/list/meteortypes) var/startx var/starty @@ -30,7 +34,6 @@ var/turf/pickedgoal var/max_i = 10//number of tries to spawn meteor. - do switch(pick(1,2,3,4)) if(1) //NORTH @@ -58,90 +61,143 @@ pickedgoal = locate(endx, endy, 1) max_i-- if(max_i<=0) return - while (!istype(pickedstart, /turf/space) || pickedstart.loc.name != "Space" ) //FUUUCK, should never happen. - var/obj/effect/meteor/M - switch(rand(1, 100)) - - if(1 to 10) - M = new /obj/effect/meteor/big( pickedstart ) - if(11 to 75) - M = new /obj/effect/meteor( pickedstart ) - if(76 to 100) - M = new /obj/effect/meteor/small( pickedstart ) + var/Me = pickweight(meteortypes) + var/obj/effect/meteor/M = new Me(pickedstart) M.dest = pickedgoal spawn(0) walk_towards(M, M.dest, 1) - return + + /obj/effect/meteor - name = "meteor" + name = "the concept of meteor" + desc = "You should probably run instead of gawking at this." icon = 'icons/obj/meteor.dmi' - icon_state = "flaming" + icon_state = "small" density = 1 - anchored = 1.0 - var/hits = 1 + anchored = 1 + var/hits = 4 var/dest pass_flags = PASSTABLE + var/heavy = 0 + var/meteorsound = 'sound/effects/meteorimpact.ogg' -/obj/effect/meteor/small - name = "small meteor" - icon_state = "smallf" + var/meteordrop = /obj/item/weapon/ore/iron + var/dropamt = 2 + +/obj/effect/meteor/dust + name = "space dust" + icon_state = "dust" pass_flags = PASSTABLE | PASSGRILLE + hits = 1 + meteorsound = 'sound/weapons/throwtap.ogg' + meteordrop = /obj/item/weapon/ore/glass -/obj/effect/meteor/Bump(atom/A) - if (A) - A.ex_act(2) - playsound(src.loc, 'sound/effects/meteorimpact.ogg', 40, 1) - if (--src.hits <= 0) - - //Prevent meteors from blowing up the singularity's containment. - //Changing emitter and generator ex_act would result in them being bomb and C4 proof. - if(!istype(A,/obj/machinery/power/emitter) && \ - !istype(A,/obj/machinery/field/generator) && \ - prob(15)) - explosion(src.loc, 4, 5, 6, 7, 0) - qdel(src) - - -/obj/effect/meteor/ex_act(severity) - if (severity < 4) - qdel(src) - return +/obj/effect/meteor/medium + name = "meteor" + dropamt = 3 /obj/effect/meteor/big name = "big meteor" - hits = 5 + icon_state = "large" + hits = 7 + heavy = 1 + dropamt = 4 - ex_act(severity) - return +/obj/effect/meteor/flaming + name = "flaming meteor" + icon_state = "flaming" + hits = 3 + heavy = 1 + meteorsound = 'sound/effects/bamf.ogg' + meteordrop = /obj/item/weapon/ore/plasma - Bump(atom/A) - //Prevent meteors from blowing up the singularity's containment. - //Changing emitter and generator ex_act would result in them being bomb and C4 proof - if(!istype(A,/obj/machinery/power/emitter) && \ - !istype(A,/obj/machinery/field/generator)) - if(--src.hits <= 0) - qdel(src) //Dont blow up singularity containment if we get stuck there. +/obj/effect/meteor/irradiated + name = "glowing meteor" + icon_state = "glowing" + hits = 4 + heavy = 1 + meteordrop = /obj/item/weapon/ore/uranium - if (A) - for(var/mob/M in player_list) - var/turf/T = get_turf(M) - if(!T || T.z != src.z) - continue - var/dist = get_dist(M.loc, src.loc) - shake_camera(M, dist > 20 ? 3 : 5, dist > 20 ? 1 : 3) - M.playsound_local(src.loc, 'sound/effects/meteorimpact.ogg', 50, 1, get_rand_frequency(), 10) - explosion(src.loc, 0, 1, 2, 3, 0) +/obj/effect/meteor/meaty + name = "meateor" + icon_state = "meateor" + desc = "Just... don't think too hard about where this thing came from." + hits = 2 + heavy = 1 + meteorsound = 'sound/effects/blobattack.ogg' + meteordrop = /obj/item/weapon/reagent_containers/food/snacks/meat + var/meteorgibs = /obj/effect/gibspawner/generic + +/obj/effect/meteor/meaty/xeno + color = "#5EFF00" + meteordrop = /obj/item/weapon/reagent_containers/food/snacks/xenomeat + meteorgibs = /obj/effect/gibspawner/xeno + + +/obj/effect/meteor/Bump(atom/A) + if(A) + A.ex_act(2) + playsound(src.loc, meteorsound, 40, 1) + if(--src.hits <= 0) + make_debris() + meteor_effect(heavy) + qdel(src) + + +/obj/effect/meteor/ex_act() + return + + +/obj/effect/meteor/proc/meteor_effect(var/sound=1) + if(sound) + for(var/mob/M in player_list) + var/turf/T = get_turf(M) + if(!T || T.z != src.z) + continue + var/dist = get_dist(M.loc, src.loc) + shake_camera(M, dist > 20 ? 3 : 5, dist > 20 ? 1 : 3) + M.playsound_local(src.loc, meteorsound, 50, 1, get_rand_frequency(), 10) + + +/obj/effect/meteor/medium/meteor_effect() + ..(heavy) + explosion(src.loc, 1, 2, 3, 4, 0) + + +/obj/effect/meteor/big/meteor_effect() + ..(heavy) + explosion(src.loc, 0, 1, 2, 3, 0) + + +/obj/effect/meteor/flaming/meteor_effect() + ..(heavy) + explosion(src.loc, 0, 1, 2, 3, 0, 0, 5) + + +/obj/effect/meteor/irradiated/meteor_effect() + ..(heavy) + explosion(src.loc, 0, 0, 4, 3, 0) + new /obj/effect/decal/cleanable/greenglow(get_turf(src)) + for(var/mob/living/L in view(5, src)) + L.apply_effect(40, IRRADIATE) + + + +/obj/effect/meteor/proc/make_debris() + for(var/throws = dropamt, throws > 0, throws--) + var/obj/item/O = new meteordrop(get_turf(src)) + O.throw_at(dest, 5, 10) + +/obj/effect/meteor/meaty/make_debris() + ..() + new meteorgibs(get_turf(src)) - if (--src.hits <= 0) - if(prob(15) && !istype(A, /obj/structure/grille)) - explosion(src.loc, 1, 2, 3, 4, 0) - qdel(src) /obj/effect/meteor/attackby(obj/item/weapon/W as obj, mob/user as mob) if(istype(W, /obj/item/weapon/pickaxe)) diff --git a/code/game/objects/effects/decals/Cleanable/misc.dm b/code/game/objects/effects/decals/Cleanable/misc.dm index 2a1f13e2340..2ea991543fa 100644 --- a/code/game/objects/effects/decals/Cleanable/misc.dm +++ b/code/game/objects/effects/decals/Cleanable/misc.dm @@ -17,11 +17,15 @@ anchored = 1 /obj/effect/decal/cleanable/greenglow + name = "green glow" - New() - ..() - spawn(1200)// 2 minutes - qdel(src) +/obj/effect/decal/cleanable/greenglow/New() + ..() + spawn(1200)// 2 minutes + qdel(src) + +/obj/effect/decal/cleanable/greenglow/ex_act() + return /obj/effect/decal/cleanable/dirt name = "dirt" diff --git a/code/modules/events/dust.dm b/code/modules/events/dust.dm index 5c2ecf1b6c0..4091d60f1eb 100644 --- a/code/modules/events/dust.dm +++ b/code/modules/events/dust.dm @@ -1,7 +1,7 @@ /datum/round_event_control/dust name = "Minor Space Dust" typepath = /datum/round_event/dust - weight = 600 + weight = 300 max_occurrences = 10000 earliest_start = 0 diff --git a/code/modules/events/meteor_wave.dm b/code/modules/events/meteor_wave.dm index 8357f36834d..b77c50b716b 100644 --- a/code/modules/events/meteor_wave.dm +++ b/code/modules/events/meteor_wave.dm @@ -15,4 +15,4 @@ /datum/round_event/meteor_wave/tick() if(IsMultiple(activeFor, 3)) - spawn_meteors(5) \ No newline at end of file + spawn_meteors(5, meteorsA) //meteor list types defined in gamemode/meteor/meteors.dm \ No newline at end of file diff --git a/icons/obj/meteor.dmi b/icons/obj/meteor.dmi index 123a5bdf86e55167b5aaabba0447077b867c0f0d..84faabcc18817abe79524e1abecb573f5a915db6 100644 GIT binary patch literal 11786 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 literal 11700 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 BhbsU8 diff --git a/tgstation.dme b/tgstation.dme index 47e969ea308..ae86e4be4bf 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -832,6 +832,7 @@ #include "code\modules\events\immovable_rod.dm" #include "code\modules\events\ion_storm.dm" #include "code\modules\events\mass_hallucination.dm" +#include "code\modules\events\meateor_wave.dm" #include "code\modules\events\meteor_wave.dm" #include "code\modules\events\ninja.dm" #include "code\modules\events\prison_break.dm" From dd454959e22753e2475c68e349416499edee8206 Mon Sep 17 00:00:00 2001 From: Cheridan Date: Wed, 23 Apr 2014 01:42:05 -0500 Subject: [PATCH 3/5] Adds new event. --- code/modules/events/meateor_wave.dm | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 code/modules/events/meateor_wave.dm diff --git a/code/modules/events/meateor_wave.dm b/code/modules/events/meateor_wave.dm new file mode 100644 index 00000000000..2303b69b664 --- /dev/null +++ b/code/modules/events/meateor_wave.dm @@ -0,0 +1,14 @@ +/datum/round_event_control/meteor_wave/meaty + name = "Meateor Wave" + typepath = /datum/round_event/meteor_wave/meaty + weight = 1 + max_occurrences = 1 + +/datum/round_event/meteor_wave/meaty/announce() + command_alert("Meateors have been detected on collision course with the station.", "Oh Crap, Get The Mop.") + world << sound('sound/AI/meteors.ogg') + + +/datum/round_event/meteor_wave/meaty/tick() + if(IsMultiple(activeFor, 3)) + spawn_meteors(5, meteorsB) //meteor list types defined in gamemode/meteor/meteors.dm \ No newline at end of file From 2d547d4d827ec536f6d75e8ee984020a26fc9bda Mon Sep 17 00:00:00 2001 From: Cheridan Date: Wed, 23 Apr 2014 15:01:19 -0500 Subject: [PATCH 4/5] Refactors space dust Meteors spin renames meateors --- code/__HELPERS/matrices.dm | 14 ++++ code/game/gamemodes/meteor/meteors.dm | 12 ++- code/game/turfs/space/space.dm | 6 +- code/modules/events/dust.dm | 113 +++----------------------- code/modules/events/meateor_wave.dm | 4 +- 5 files changed, 41 insertions(+), 108 deletions(-) diff --git a/code/__HELPERS/matrices.dm b/code/__HELPERS/matrices.dm index 9a308d3f9c7..edb3113fa78 100644 --- a/code/__HELPERS/matrices.dm +++ b/code/__HELPERS/matrices.dm @@ -1,3 +1,17 @@ /matrix/proc/TurnTo(old_angle, new_angle) . = new_angle - old_angle Turn(.) //BYOND handles cases such as -270, 360, 540 etc. DOES NOT HANDLE 180 TURNS WELL, THEY TWEEN AND LOOK LIKE SHIT + + +/atom/proc/SpinAnimation(speed = 10) + var/matrix/m120 = matrix(transform) + m120.Turn(120) + var/matrix/m240 = matrix(transform) + m240.Turn(240) + var/matrix/m360 = matrix(transform) + speed /= 3 //Gives us 3 equal time segments for our three turns. + //Why not one turn? Because byond will see that the start and finish are the same place and do nothing + //Why not two turns? Because byond will do a flip instead of a turn + animate(src, transform = m120, time = speed, loop = -1) + animate(transform = m240, time = speed) + animate(transform = m360, time = speed) \ No newline at end of file diff --git a/code/game/gamemodes/meteor/meteors.dm b/code/game/gamemodes/meteor/meteors.dm index dc21aae8919..f7caf7be4e9 100644 --- a/code/game/gamemodes/meteor/meteors.dm +++ b/code/game/gamemodes/meteor/meteors.dm @@ -6,6 +6,8 @@ /var/list/meteorsB = list(/obj/effect/meteor/meaty=5, /obj/effect/meteor/meaty/xeno=1) +/var/list/meteorsC = list(/obj/effect/meteor/dust) //for space dust event + /proc/meteor_wave(var/number = 50) //this proc's unused now. if(!ticker || wavesecret) @@ -82,6 +84,7 @@ density = 1 anchored = 1 var/hits = 4 + var/hitpwr = 2 //Level of ex_act to be called on hit. var/dest pass_flags = PASSTABLE var/heavy = 0 @@ -95,6 +98,7 @@ icon_state = "dust" pass_flags = PASSTABLE | PASSGRILLE hits = 1 + hitpwr = 3 meteorsound = 'sound/weapons/throwtap.ogg' meteordrop = /obj/item/weapon/ore/glass @@ -125,7 +129,7 @@ meteordrop = /obj/item/weapon/ore/uranium /obj/effect/meteor/meaty - name = "meateor" + name = "meaty ore" icon_state = "meateor" desc = "Just... don't think too hard about where this thing came from." hits = 2 @@ -140,9 +144,13 @@ meteorgibs = /obj/effect/gibspawner/xeno +/obj/effect/meteor/New() + ..() + SpinAnimation() + /obj/effect/meteor/Bump(atom/A) if(A) - A.ex_act(2) + A.ex_act(hitpwr) playsound(src.loc, meteorsound, 40, 1) if(--src.hits <= 0) make_debris() diff --git a/code/game/turfs/space/space.dm b/code/game/turfs/space/space.dm index c26bc1e88c9..7f743f88f04 100644 --- a/code/game/turfs/space/space.dm +++ b/code/game/turfs/space/space.dm @@ -58,7 +58,7 @@ // if(ticker.mode.name == "nuclear emergency") return if(A.z > 6) return if (A.x <= TRANSITIONEDGE || A.x >= (world.maxx - TRANSITIONEDGE - 1) || A.y <= TRANSITIONEDGE || A.y >= (world.maxy - TRANSITIONEDGE - 1)) - if(istype(A, /obj/effect/meteor)||istype(A, /obj/effect/space_dust)) + if(istype(A, /obj/effect/meteor)) qdel(A) return @@ -135,7 +135,7 @@ var/list/y_arr if(src.x <= 1) - if(istype(A, /obj/effect/meteor)||istype(A, /obj/effect/space_dust)) + if(istype(A, /obj/effect/meteor)) qdel(A) return @@ -210,7 +210,7 @@ A.loc.Entered(A) else if (src.y >= world.maxy) - if(istype(A, /obj/effect/meteor)||istype(A, /obj/effect/space_dust)) + if(istype(A, /obj/effect/meteor)) qdel(A) return var/list/cur_pos = src.get_global_map_pos() diff --git a/code/modules/events/dust.dm b/code/modules/events/dust.dm index 4091d60f1eb..d24b6cab401 100644 --- a/code/modules/events/dust.dm +++ b/code/modules/events/dust.dm @@ -1,108 +1,19 @@ -/datum/round_event_control/dust +/datum/round_event_control/meteor_wave/dust name = "Minor Space Dust" - typepath = /datum/round_event/dust + typepath = /datum/round_event/meteor_wave/dust weight = 300 - max_occurrences = 10000 + max_occurrences = 1000 earliest_start = 0 -/datum/round_event/dust - var/qnty = 1 +/datum/round_event/meteor_wave/dust + startWhen = 1 + endWhen = 2 -/datum/round_event/dust/setup() - qnty = rand(1,5) +/datum/round_event/meteor_wave/dust/announce() + return -/datum/round_event/dust/start() - while(qnty-- > 0) - new /obj/effect/space_dust/weak() +/datum/round_event/meteor_wave/dust/start() + spawn_meteors(1, meteorsC) - -/obj/effect/space_dust - name = "Space Dust" - desc = "Dust in space." - icon = 'icons/obj/meteor.dmi' - icon_state = "space_dust" - density = 1 - anchored = 1 - var/strength = 2 //ex_act severity number - var/life = 2 //how many things we hit before qdel(src) - - weak - strength = 3 - life = 1 - - strong - strength = 1 - life = 6 - - super - strength = 1 - life = 40 - - - New() - var/startx = 0 - var/starty = 0 - var/endy = 0 - var/endx = 0 - var/startside = pick(cardinal) - - switch(startside) - if(NORTH) - starty = world.maxy-(TRANSITIONEDGE+1) - startx = rand((TRANSITIONEDGE+1), world.maxx-(TRANSITIONEDGE+1)) - endy = TRANSITIONEDGE - endx = rand(TRANSITIONEDGE, world.maxx-TRANSITIONEDGE) - if(EAST) - starty = rand((TRANSITIONEDGE+1),world.maxy-(TRANSITIONEDGE+1)) - startx = world.maxx-(TRANSITIONEDGE+1) - endy = rand(TRANSITIONEDGE, world.maxy-TRANSITIONEDGE) - endx = TRANSITIONEDGE - if(SOUTH) - starty = (TRANSITIONEDGE+1) - startx = rand((TRANSITIONEDGE+1), world.maxx-(TRANSITIONEDGE+1)) - endy = world.maxy-TRANSITIONEDGE - endx = rand(TRANSITIONEDGE, world.maxx-TRANSITIONEDGE) - if(WEST) - starty = rand((TRANSITIONEDGE+1), world.maxy-(TRANSITIONEDGE+1)) - startx = (TRANSITIONEDGE+1) - endy = rand(TRANSITIONEDGE,world.maxy-TRANSITIONEDGE) - endx = world.maxx-TRANSITIONEDGE - var/goal = locate(endx, endy, 1) - src.x = startx - src.y = starty - src.z = 1 - spawn(0) - walk_towards(src, goal, 1) - return - - - Bump(atom/A) - spawn(0) - if(prob(50)) - for(var/mob/M in range(10, src)) - if(!M.stat && !istype(M, /mob/living/silicon/ai)) - shake_camera(M, 3, 1) - if (A) - playsound(src.loc, 'sound/effects/meteorimpact.ogg', 40, 1) - - if(ismob(A)) - A.ex_act(strength) - else if(!istype(A,/obj/machinery/power/emitter) && !istype(A,/obj/machinery/field/generator)) //Protect the singularity from getting released every round! - A.ex_act(strength) //Changing emitter/field gen ex_act would make it immune to bombs and C4 - - life-- - if(life <= 0) - walk(src,0) - qdel(src) - return 0 - return - - - Bumped(atom/A) - Bump(A) - return - - - ex_act(severity) - qdel(src) - return +/datum/round_event/meteor_wave/dust/tick() + return \ No newline at end of file diff --git a/code/modules/events/meateor_wave.dm b/code/modules/events/meateor_wave.dm index 2303b69b664..fae9ac4fe4e 100644 --- a/code/modules/events/meateor_wave.dm +++ b/code/modules/events/meateor_wave.dm @@ -1,11 +1,11 @@ /datum/round_event_control/meteor_wave/meaty - name = "Meateor Wave" + name = "Meaty Ore Wave" typepath = /datum/round_event/meteor_wave/meaty weight = 1 max_occurrences = 1 /datum/round_event/meteor_wave/meaty/announce() - command_alert("Meateors have been detected on collision course with the station.", "Oh Crap, Get The Mop.") + command_alert("Meaty ores have been detected on collision course with the station.", "Oh Crap, Get The Mop.") world << sound('sound/AI/meteors.ogg') From 231bf92ff9af635c7f5a6c480ced9add7a70ef08 Mon Sep 17 00:00:00 2001 From: Cheridan Date: Tue, 13 May 2014 14:11:22 -0500 Subject: [PATCH 5/5] fixing conflict in walls.dm i cry --- code/game/turfs/simulated/walls.dm | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) diff --git a/code/game/turfs/simulated/walls.dm b/code/game/turfs/simulated/walls.dm index d41f2aa6e91..4fd11515506 100644 --- a/code/game/turfs/simulated/walls.dm +++ b/code/game/turfs/simulated/walls.dm @@ -313,13 +313,4 @@ thermite = 0 spawn(50) if(O) qdel(O) - return - -/turf/simulated/wall/meteorhit(obj/M as obj) - if (prob(15)) - dismantle_wall() - else if(prob(70)) - ChangeTurf(/turf/simulated/floor/plating) - else - ReplaceWithLattice() - return 0 \ No newline at end of file + return \ No newline at end of file