From 114980c4ed33312310ade229ff211a261d3ebfbb Mon Sep 17 00:00:00 2001 From: Kyep Date: Sat, 23 Jul 2016 02:01:31 -0700 Subject: [PATCH] Major Revamp 1) Only Plasma Fire and N2O Knockout grenades exist now. 2) Both types now use the clusterbuster mechanic, rather than new ZAS-like spread code, to distribute their gasses. This means their spread is slower, but they can potentially cover more area. 3) You only get one of each type of grenade in a kit. 4) Massive refactor and elimination of code. --- .../items/weapons/grenades/atmosgrenade.dm | 94 +++---------------- .../items/weapons/grenades/clusterbuster.dm | 10 ++ .../items/weapons/storage/uplink_kits.dm | 7 +- 3 files changed, 24 insertions(+), 87 deletions(-) diff --git a/code/game/objects/items/weapons/grenades/atmosgrenade.dm b/code/game/objects/items/weapons/grenades/atmosgrenade.dm index 51c3c9fa079..c62718a1be4 100644 --- a/code/game/objects/items/weapons/grenades/atmosgrenade.dm +++ b/code/game/objects/items/weapons/grenades/atmosgrenade.dm @@ -8,92 +8,22 @@ icon = 'icons/obj/grenade.dmi' icon_state = "syndicate" item_state = "flashbang" - var/gas_type = "fire" - var/max_spread_turfs = 20 - var/gas_debug = 0 -/obj/item/weapon/grenade/gas/overpressure - name = "Overpressure Grenade" - desc = "A compressed gas grenade, used to create crushing pressure in an area." - gas_type = "overpressure" - -/obj/item/weapon/grenade/gas/suffocation - name = "Suffocation Grenade" - desc = "An oxygen depletion grenade, used to ensure anyone entering the target area quickly suffocates." - gas_type = "suffocation" - -/obj/item/weapon/grenade/gas/vacuum - name = "Vacuum Grenade" - desc = "A grenade that completely removes all air and heat from its detonation area." - gas_type = "vacuum" +/obj/item/weapon/grenade/gas/prime() + var/turf/simulated/target_turf = get_turf(src) + if(istype(target_turf)) + target_turf.atmos_spawn_air(SPAWN_HEAT | SPAWN_TOXINS, 100) + target_turf.air_update_turf() + qdel(src) /obj/item/weapon/grenade/gas/knockout name = "Knockout Grenade" desc = "A grenade that completely removes all air and heat from its detonation area." - gas_type = "knockout" -/obj/item/weapon/grenade/gas/prime() - var/turf/simulated/origin = get_turf(src) - var/list/spread_turfs = list() - var/list/scan_turfs = list() +/obj/item/weapon/grenade/gas/knockout/prime() + var/turf/simulated/target_turf = get_turf(src) + if(istype(target_turf)) + target_turf.atmos_spawn_air(SPAWN_20C | SPAWN_N2O, 100) + target_turf.air_update_turf() + qdel(src) - if(!istype(origin)) - // Error, unsimulated turf. - qdel(src) - return - - scan_turfs += origin - - while(spread_turfs.len < max_spread_turfs && scan_turfs.len) - if(gas_debug) - visible_message("[src] loops: [spread_turfs.len] turfs, [scan_turfs.len] to scan!") - var/turf/scan_from = pick(scan_turfs) - var/list/adj = scan_from.GetAtmosAdjacentTurfs(1) - for(var/turf/simulated/C in adj) - if(!(C in scan_turfs) && C.CanAtmosPass(C)) - scan_turfs += C - spread_turfs += scan_from - scan_turfs -= scan_from - - if(!spread_turfs.len) - visible_message("[src] detonates harmlessly in the airless space.") - qdel(src) - else - if(gas_debug) - visible_message("[src] affects [spread_turfs.len] turfs, with [scan_turfs.len] left to scan!") - for(var/turf/simulated/target_turf in spread_turfs) - switch(gas_type) - if("fire") - target_turf.atmos_spawn_air(SPAWN_HEAT | SPAWN_TOXINS, 200) // works well - if("overpressure") - target_turf.atmos_spawn_air(SPAWN_20C | SPAWN_NITROGEN, 2000) // kills slowly, but hard to deal with - if("suffocation") - target_turf.atmos_spawn_air(SPAWN_20C | SPAWN_CO2, target_turf.air.oxygen) // knocks out slowly, kills - target_turf.atmos_spawn_air(SPAWN_20C | SPAWN_OXYGEN, target_turf.air.oxygen * -1) - if("knockout") - target_turf.atmos_spawn_air(SPAWN_20C | SPAWN_N2O, 100) // knocks out quickly - if("vacuum") - target_turf.air.nitrogen = 0 - target_turf.air.oxygen = 0 - target_turf.air.nitrogen = 0 - air_master.add_to_active(target_turf, 0) - var/obj/machinery/alarm/air_alarm = locate(/obj/machinery/alarm/) in target_turf - if(istype(air_alarm)) - // break the alarm off the wall - air_alarm.visible_message("[air_alarm] breaks from the rapid change in pressure!") - playsound(air_alarm.loc, 'sound/effects/sparks4.ogg', 50, 1) - new /obj/item/mounted/frame/alarm_frame(air_alarm.loc) - qdel(air_alarm) - var/obj/machinery/atmospherics/unary/vent_pump/v = locate(/obj/machinery/atmospherics/unary/vent_pump) in target_turf - if(istype(v)) - v.welded = 1 - v.update_icon() - v.visible_message("[v] is broken by the rapid pressure change!") - var/obj/machinery/atmospherics/unary/vent_scrubber/s = locate(/obj/machinery/atmospherics/unary/vent_scrubber) in target_turf - if(istype(s)) - s.welded = 1 - s.update_icon() - s.visible_message("[s] is broken by the rapid pressure change!") - target_turf.air_update_turf() - visible_message("[src] detonates!") - qdel(src) \ No newline at end of file diff --git a/code/game/objects/items/weapons/grenades/clusterbuster.dm b/code/game/objects/items/weapons/grenades/clusterbuster.dm index 8ba1782cf18..851c625b765 100644 --- a/code/game/objects/items/weapons/grenades/clusterbuster.dm +++ b/code/game/objects/items/weapons/grenades/clusterbuster.dm @@ -242,6 +242,16 @@ desc = "Reserved for those pesky request." payload = /mob/living/simple_animal/crab +/obj/item/weapon/grenade/clusterbuster/plasma + name = "Plasma Cluster Grenade" + desc = "For when everything needs to die in a fire." + payload = /obj/item/weapon/grenade/gas + +/obj/item/weapon/grenade/clusterbuster/n2o + name = "N2O Cluster Grenade" + desc = "For when you need to knock out EVERYONE." + payload = /obj/item/weapon/grenade/gas/knockout + ////////////Clusterbuster of Clusterbusters//////////// /obj/item/weapon/grenade/clusterbuster/mega_fox diff --git a/code/game/objects/items/weapons/storage/uplink_kits.dm b/code/game/objects/items/weapons/storage/uplink_kits.dm index 44ead79427f..c089eb5ff9d 100644 --- a/code/game/objects/items/weapons/storage/uplink_kits.dm +++ b/code/game/objects/items/weapons/storage/uplink_kits.dm @@ -194,8 +194,5 @@ /obj/item/weapon/storage/box/syndie_kit/atmosgasgrenades/New() ..() - new /obj/item/weapon/grenade/gas(src) - new /obj/item/weapon/grenade/gas/overpressure(src) - new /obj/item/weapon/grenade/gas/suffocation(src) - new /obj/item/weapon/grenade/gas/vacuum(src) - new /obj/item/weapon/grenade/gas/knockout(src) + new /obj/item/weapon/grenade/clusterbuster/plasma(src) + new /obj/item/weapon/grenade/clusterbuster/n2o(src)