From aa856556edb4dbcfb73d21f8bea4247ad712e710 Mon Sep 17 00:00:00 2001 From: Kyep Date: Wed, 20 Jul 2016 23:31:39 -0700 Subject: [PATCH 1/7] Atmos Grenades, v1 --- code/datums/uplink_item.dm | 7 ++ .../items/weapons/grenades/atmosgrenade.dm | 98 +++++++++++++++++++ .../items/weapons/storage/uplink_kits.dm | 14 ++- paradise.dme | 1 + 4 files changed, 119 insertions(+), 1 deletion(-) create mode 100644 code/game/objects/items/weapons/grenades/atmosgrenade.dm diff --git a/code/datums/uplink_item.dm b/code/datums/uplink_item.dm index 4ca4c38f68a..8a85ad22861 100644 --- a/code/datums/uplink_item.dm +++ b/code/datums/uplink_item.dm @@ -452,6 +452,13 @@ var/list/uplink_items = list() gamemodes = list(/datum/game_mode/nuclear) surplus = 0 +/datum/uplink_item/dangerous/atmosgrenades + name = "Atmos Grenades" + desc = "A box of four (4) grenades that wreck havoc with the atmosphere of the target area, causing fire, suffocation, vacuum and/or crushing pressure. Use extreme caution! Unlike normal gasses, these are explosively propelled and instantly engulf a large area!" + reference = "AGG" + item = /obj/item/weapon/storage/box/syndie_kit/atmosgasgrenades + cost = 6 + /datum/uplink_item/dangerous/emp name = "EMP Grenades and Implanter Kit" desc = "A box that contains two EMP grenades and an EMP implant. Useful to disrupt communication, \ diff --git a/code/game/objects/items/weapons/grenades/atmosgrenade.dm b/code/game/objects/items/weapons/grenades/atmosgrenade.dm new file mode 100644 index 00000000000..1657eac4456 --- /dev/null +++ b/code/game/objects/items/weapons/grenades/atmosgrenade.dm @@ -0,0 +1,98 @@ + + + +/obj/item/weapon/grenade/gas + name = "Plasma Fire Grenade" + desc = "A compressed plasma grenade, used to start horrific plasma fires." + origin_tech = "materials=3;magnets=4;syndicate=4" + 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/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() + + if(!origin) + // Error, unsimulated turf. + 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/storage/uplink_kits.dm b/code/game/objects/items/weapons/storage/uplink_kits.dm index 096879d267e..44ead79427f 100644 --- a/code/game/objects/items/weapons/storage/uplink_kits.dm +++ b/code/game/objects/items/weapons/storage/uplink_kits.dm @@ -186,4 +186,16 @@ new /obj/item/ammo_casing/shotgun/dart/assassination(src) new /obj/item/ammo_casing/shotgun/dart/assassination(src) new /obj/item/ammo_casing/shotgun/dart/assassination(src) - new /obj/item/weapon/gun/projectile/revolver/doublebarrel/improvised/cane(src) \ No newline at end of file + new /obj/item/weapon/gun/projectile/revolver/doublebarrel/improvised/cane(src) + + +/obj/item/weapon/storage/box/syndie_kit/atmosgasgrenades + name = "Atmos Grenades" + +/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) diff --git a/paradise.dme b/paradise.dme index 900a30964da..a2ee1d97f7a 100644 --- a/paradise.dme +++ b/paradise.dme @@ -839,6 +839,7 @@ #include "code\game\objects\items\weapons\weaponry.dm" #include "code\game\objects\items\weapons\whetstone.dm" #include "code\game\objects\items\weapons\wires.dm" +#include "code\game\objects\items\weapons\grenades\atmosgrenade.dm" #include "code\game\objects\items\weapons\grenades\bananade.dm" #include "code\game\objects\items\weapons\grenades\chem_grenade.dm" #include "code\game\objects\items\weapons\grenades\clowngrenade.dm" From e4ee7cafcb0934b71d0959cd29afcf94816bbf4c Mon Sep 17 00:00:00 2001 From: Kyep Date: Wed, 20 Jul 2016 23:45:43 -0700 Subject: [PATCH 2/7] Typo fix --- code/datums/uplink_item.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/datums/uplink_item.dm b/code/datums/uplink_item.dm index 8a85ad22861..62c7fc4c0b4 100644 --- a/code/datums/uplink_item.dm +++ b/code/datums/uplink_item.dm @@ -454,7 +454,7 @@ var/list/uplink_items = list() /datum/uplink_item/dangerous/atmosgrenades name = "Atmos Grenades" - desc = "A box of four (4) grenades that wreck havoc with the atmosphere of the target area, causing fire, suffocation, vacuum and/or crushing pressure. Use extreme caution! Unlike normal gasses, these are explosively propelled and instantly engulf a large area!" + desc = "A box of four (4) grenades that wreak havoc with the atmosphere of the target area, causing fire, suffocation, vacuum and/or crushing pressure. Use extreme caution! Unlike normal gasses, these are explosively propelled and instantly engulf a large area!" reference = "AGG" item = /obj/item/weapon/storage/box/syndie_kit/atmosgasgrenades cost = 6 From 70c8d5248c5595339b33fe69bf87343b47f545e8 Mon Sep 17 00:00:00 2001 From: Kyep Date: Thu, 21 Jul 2016 02:26:35 -0700 Subject: [PATCH 3/7] Typo Fix --- code/game/objects/items/weapons/grenades/atmosgrenade.dm | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/code/game/objects/items/weapons/grenades/atmosgrenade.dm b/code/game/objects/items/weapons/grenades/atmosgrenade.dm index 1657eac4456..51c3c9fa079 100644 --- a/code/game/objects/items/weapons/grenades/atmosgrenade.dm +++ b/code/game/objects/items/weapons/grenades/atmosgrenade.dm @@ -37,8 +37,9 @@ var/list/spread_turfs = list() var/list/scan_turfs = list() - if(!origin) + if(!istype(origin)) // Error, unsimulated turf. + qdel(src) return scan_turfs += origin From 114980c4ed33312310ade229ff211a261d3ebfbb Mon Sep 17 00:00:00 2001 From: Kyep Date: Sat, 23 Jul 2016 02:01:31 -0700 Subject: [PATCH 4/7] 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) From 01febeadb43f0ed672dd56c00c2cd4b807933822 Mon Sep 17 00:00:00 2001 From: Kyep Date: Sun, 24 Jul 2016 19:15:54 -0700 Subject: [PATCH 5/7] Refactor --- .../objects/items/weapons/grenades/atmosgrenade.dm | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/code/game/objects/items/weapons/grenades/atmosgrenade.dm b/code/game/objects/items/weapons/grenades/atmosgrenade.dm index c62718a1be4..4bfda1ab659 100644 --- a/code/game/objects/items/weapons/grenades/atmosgrenade.dm +++ b/code/game/objects/items/weapons/grenades/atmosgrenade.dm @@ -8,22 +8,17 @@ icon = 'icons/obj/grenade.dmi' icon_state = "syndicate" item_state = "flashbang" + var/spawn_contents = SPAWN_HEAT | SPAWN_TOXINS + var/spawn_amount = 100 /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.atmos_spawn_air(spawn_contents, spawn_amount) 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." - -/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) - + spawn_contents = SPAWN_20C | SPAWN_N2O \ No newline at end of file From 93bcbee5276a5c87ce7d09e2b025069dfdcba8d3 Mon Sep 17 00:00:00 2001 From: Kyep Date: Sun, 24 Jul 2016 21:23:06 -0700 Subject: [PATCH 6/7] Uplink item description tweak --- code/datums/uplink_item.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/datums/uplink_item.dm b/code/datums/uplink_item.dm index 62c7fc4c0b4..e224ff0f1eb 100644 --- a/code/datums/uplink_item.dm +++ b/code/datums/uplink_item.dm @@ -454,7 +454,7 @@ var/list/uplink_items = list() /datum/uplink_item/dangerous/atmosgrenades name = "Atmos Grenades" - desc = "A box of four (4) grenades that wreak havoc with the atmosphere of the target area, causing fire, suffocation, vacuum and/or crushing pressure. Use extreme caution! Unlike normal gasses, these are explosively propelled and instantly engulf a large area!" + desc = "A box of two (2) grenades that wreak havoc with the atmosphere of the target area. Capable of engulfing a large area in lit plasma, or N2O. Deploy with extreme caution!" reference = "AGG" item = /obj/item/weapon/storage/box/syndie_kit/atmosgasgrenades cost = 6 From 4f01a05ae6a4870e2def6ce3bf10e79387024d30 Mon Sep 17 00:00:00 2001 From: Kyep Date: Thu, 28 Jul 2016 22:03:55 -0700 Subject: [PATCH 7/7] Changed Indentation --- code/game/objects/items/weapons/storage/uplink_kits.dm | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/code/game/objects/items/weapons/storage/uplink_kits.dm b/code/game/objects/items/weapons/storage/uplink_kits.dm index c089eb5ff9d..4954a695f02 100644 --- a/code/game/objects/items/weapons/storage/uplink_kits.dm +++ b/code/game/objects/items/weapons/storage/uplink_kits.dm @@ -193,6 +193,6 @@ name = "Atmos Grenades" /obj/item/weapon/storage/box/syndie_kit/atmosgasgrenades/New() - ..() - new /obj/item/weapon/grenade/clusterbuster/plasma(src) - new /obj/item/weapon/grenade/clusterbuster/n2o(src) + ..() + new /obj/item/weapon/grenade/clusterbuster/plasma(src) + new /obj/item/weapon/grenade/clusterbuster/n2o(src)