Pepper spray module for sec modsuits, Atmos resin module and nukie pyro bundle flamethrower made into module (#64934)

Pyro bundle was broken as when you brought it you would get modsuit and pyro backpack forcing you to either use armor or use backpack without fire protection(which modsuit has). Thanks to Fikou work it became a module
Anti-Tider on the other hand is rarely used(i have never seen it used when i was playing sec or observing) and needed a little buff so now it will also became a module while i will make normal Anti-Tider stream wider(still working on it).
This commit is contained in:
Cursed
2022-02-16 13:01:12 -08:00
committed by GitHub
parent 8d825563f6
commit 79963a08f5
17 changed files with 142 additions and 75 deletions
+1 -2
View File
@@ -646,8 +646,7 @@
/obj/item/storage/backpack/duffelbag/syndie/firestarter/PopulateContents()
new /obj/item/clothing/under/syndicate/soviet(src)
new /obj/item/watertank/op(src)
new /obj/item/mod/control/pre_equipped/elite(src)
new /obj/item/mod/control/pre_equipped/elite/flamethrower(src)
new /obj/item/gun/ballistic/automatic/pistol/aps(src)
new /obj/item/ammo_box/magazine/m9mm_aps/fire(src)
new /obj/item/ammo_box/magazine/m9mm_aps/fire(src)
+34 -70
View File
@@ -22,7 +22,7 @@
. = ..()
create_reagents(volume, OPENCONTAINER)
noz = make_noz()
RegisterSignal(noz, COMSIG_MOVABLE_MOVED, .proc/noz_move)
/obj/item/watertank/Destroy()
QDEL_NULL(noz)
@@ -33,13 +33,13 @@
toggle_mister(user)
/obj/item/watertank/item_action_slot_check(slot, mob/user)
if(slot == user.getBackSlot() || slot == ITEM_SLOT_SUITSTORE)
if(slot == user.getBackSlot())
return 1
/obj/item/watertank/proc/toggle_mister(mob/living/user)
if(!istype(user))
return
if(user.get_item_by_slot(user.getBackSlot()) != src && user.get_item_by_slot(ITEM_SLOT_SUITSTORE) != src)
if(user.get_item_by_slot(user.getBackSlot()) != src)
to_chat(user, span_warning("The watertank must be worn properly to use!"))
return
if(user.incapacitated())
@@ -47,6 +47,7 @@
if(QDELETED(noz))
noz = make_noz()
RegisterSignal(noz, COMSIG_MOVABLE_MOVED, .proc/noz_move)
if(noz in src)
//Detach the nozzle into the user's hands
if(!user.put_in_hands(noz))
@@ -64,6 +65,12 @@
/obj/item/watertank/proc/make_noz()
return new /obj/item/reagent_containers/spray/mister(src)
/obj/item/watertank/proc/noz_move(atom/movable/mover, atom/oldloc, direction)
if(mover.loc == src || mover.loc == loc)
return
balloon_alert(loc, "nozzle snaps back")
mover.forceMove(src)
/obj/item/watertank/equipped(mob/user, slot)
..()
if(slot != ITEM_SLOT_BACK)
@@ -89,10 +96,10 @@
M.putItemFromInventoryInHandIfPossible(src, H.held_index)
return ..()
/obj/item/watertank/attackby(obj/item/W, mob/user, params)
if(W == noz)
/obj/item/watertank/attackby(obj/item/attacking_item, mob/user, params)
if(attacking_item == noz)
remove_noz()
return 1
return TRUE
else
return ..()
@@ -125,17 +132,10 @@
/obj/item/reagent_containers/spray/mister/Initialize(mapload)
. = ..()
tank = loc
if(!istype(tank))
if(!tank?.reagents)
return INITIALIZE_HINT_QDEL
reagents = tank.reagents //This mister is really just a proxy for the tank's reagents
/obj/item/reagent_containers/spray/mister/doMove(atom/destination)
if(destination && (destination != tank.loc || !ismob(destination)))
if (loc != tank)
to_chat(tank.loc, span_notice("The mister snaps back onto the watertank."))
destination = tank
..()
/obj/item/reagent_containers/spray/mister/afterattack(obj/target, mob/user, proximity)
if(target.loc == loc) //Safety check so you don't fill your mister with mutagen or something and then blast yourself in the face with it
return
@@ -179,10 +179,11 @@
icon_state = "pepperbackpacksec"
inhand_icon_state = "pepperbackpacksec"
custom_price = PAYCHECK_MEDIUM * 2
volume = 1000
/obj/item/watertank/pepperspray/Initialize(mapload)
. = ..()
reagents.add_reagent(/datum/reagent/consumable/condensedcapsaicin, 500)
reagents.add_reagent(/datum/reagent/consumable/condensedcapsaicin, 1000)
/obj/item/reagent_containers/spray/mister/pepperspray
name = "security spray nozzle"
@@ -248,7 +249,7 @@
w_class = WEIGHT_CLASS_HUGE
item_flags = ABSTRACT // don't put in storage
chem = null //holds no chems of its own, it takes from the tank.
var/obj/item/watertank/tank
var/obj/item/tank
var/nozzle_mode = 0
var/metal_synthesis_cooldown = 0
COOLDOWN_DECLARE(resin_cooldown)
@@ -256,10 +257,10 @@
/obj/item/extinguisher/mini/nozzle/Initialize(mapload)
. = ..()
tank = loc
if (!istype(tank))
if (!tank?.reagents)
return INITIALIZE_HINT_QDEL
reagents = tank.reagents
max_water = tank.volume
max_water = tank.reagents.maximum_volume
/obj/item/extinguisher/mini/nozzle/Destroy()
@@ -267,30 +268,26 @@
tank = null
return ..()
/obj/item/extinguisher/mini/nozzle/doMove(atom/destination)
if(destination && (destination != tank.loc || !ismob(destination)))
if(loc != tank)
to_chat(tank.loc, span_notice("The nozzle snaps back onto the tank."))
destination = tank
..()
/obj/item/extinguisher/mini/nozzle/attack_self(mob/user)
var/uses_pack = istype(tank, /obj/item/watertank/atmos)
switch(nozzle_mode)
if(EXTINGUISHER)
nozzle_mode = RESIN_LAUNCHER
tank.icon_state = "waterbackpackatmos_1"
to_chat(user, span_notice("Swapped to resin launcher."))
if(uses_pack)
tank.icon_state = "waterbackpackatmos_1"
balloon_alert(user, "switched to resin launcher")
return
if(RESIN_LAUNCHER)
nozzle_mode = RESIN_FOAM
tank.icon_state = "waterbackpackatmos_2"
to_chat(user, span_notice("Swapped to resin foamer."))
if(uses_pack)
tank.icon_state = "waterbackpackatmos_2"
balloon_alert(user, "switched to resin foam")
return
if(RESIN_FOAM)
nozzle_mode = EXTINGUISHER
tank.icon_state = "waterbackpackatmos_0"
to_chat(user, span_notice("Swapped to water extinguisher."))
if(uses_pack)
tank.icon_state = "waterbackpackatmos_0"
balloon_alert(user, "switched to fire extinguisher")
return
return
@@ -306,10 +303,10 @@
return //Safety check so you don't blast yourself trying to refill your tank
var/datum/reagents/R = reagents
if(R.total_volume < 100)
to_chat(user, span_warning("You need at least 100 units of water to use the resin launcher!"))
balloon_alert(user, "not enough water!")
return
if(!COOLDOWN_FINISHED(src, resin_cooldown))
to_chat(user, span_warning("Resin launcher is still recharging..."))
balloon_alert(user, "still recharging!")
return
COOLDOWN_START(src, resin_cooldown, 10 SECONDS)
R.remove_any(100)
@@ -324,10 +321,11 @@
if(nozzle_mode == RESIN_FOAM)
if(!Adj|| !isturf(target))
balloon_alert(user, "too far!")
return
for(var/S in target)
if(istype(S, /obj/effect/particle_effect/foam/metal/resin) || istype(S, /obj/structure/foamedmetal/resin))
to_chat(user, span_warning("There's already resin here!"))
balloon_alert(user, "already has resin!")
return
if(metal_synthesis_cooldown < 5)
var/obj/effect/particle_effect/foam/metal/resin/F = new (get_turf(target))
@@ -335,7 +333,7 @@
metal_synthesis_cooldown++
addtimer(CALLBACK(src, .proc/reduce_metal_synth_cooldown), 10 SECONDS)
else
to_chat(user, span_warning("Resin foam mix is still being synthesized..."))
balloon_alert(user, "still being synthesized!")
return
/obj/item/extinguisher/mini/nozzle/proc/resin_stop_check(datum/move_loop/source, succeeded)
@@ -470,37 +468,3 @@
reagents.trans_to(user, used_amount, multiplier=usage_ratio, methods = INJECT)
update_appearance()
user.update_inv_back() //for overlays update
//Operator backpack spray
/obj/item/watertank/op
name = "backpack water tank"
desc = "A New Russian backpack spray for systematic cleansing of carbon lifeforms."
icon_state = "waterbackpackop"
inhand_icon_state = "waterbackpackop"
w_class = WEIGHT_CLASS_NORMAL
volume = 2000
slowdown = 0
/obj/item/watertank/op/Initialize(mapload)
. = ..()
reagents.add_reagent(/datum/reagent/toxin/mutagen,350)
reagents.add_reagent(/datum/reagent/napalm,125)
reagents.add_reagent(/datum/reagent/fuel,125)
reagents.add_reagent(/datum/reagent/clf3,300)
reagents.add_reagent(/datum/reagent/cryptobiolin,350)
reagents.add_reagent(/datum/reagent/toxin/plasma,250)
reagents.add_reagent(/datum/reagent/consumable/condensedcapsaicin,500)
/obj/item/reagent_containers/spray/mister/op
desc = "A mister nozzle attached to several extended water tanks. It suspiciously has a compressor in the system and is labelled entirely in New Cyrillic."
icon = 'icons/obj/hydroponics/equipment.dmi'
icon_state = "misterop"
inhand_icon_state = "misterop"
lefthand_file = 'icons/mob/inhands/equipment/mister_lefthand.dmi'
righthand_file = 'icons/mob/inhands/equipment/mister_righthand.dmi'
w_class = WEIGHT_CLASS_BULKY
amount_per_transfer_from_this = 100
possible_transfer_amounts = list(75,100,150)
/obj/item/watertank/op/make_noz()
return new /obj/item/reagent_containers/spray/mister/op(src)
-1
View File
@@ -153,7 +153,6 @@
max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT
slowdown_inactive = 1.5
slowdown_active = 1
allowed_suit_storage = list(/obj/item/flashlight, /obj/item/tank/internals, /obj/item/watertank/atmos)
skins = list(
"atmospheric" = list(
HELMET_LAYER = NECK_LAYER,
+13
View File
@@ -110,6 +110,7 @@
/obj/item/mod/module/storage,
/obj/item/mod/module/flashlight,
/obj/item/mod/module/holster,
/obj/item/mod/module/mister/security,
)
/obj/item/mod/control/pre_equipped/safeguard
@@ -120,6 +121,7 @@
/obj/item/mod/module/flashlight,
/obj/item/mod/module/jetpack,
/obj/item/mod/module/holster,
/obj/item/mod/module/mister/security,
)
/obj/item/mod/control/pre_equipped/magnate
@@ -175,6 +177,17 @@
/obj/item/mod/module/injector,
)
/obj/item/mod/control/pre_equipped/elite/flamethrower
initial_modules = list(
/obj/item/mod/module/storage/syndicate,
/obj/item/mod/module/emp_shield,
/obj/item/mod/module/thermal_regulator,
/obj/item/mod/module/jetpack/advanced,
/obj/item/mod/module/flashlight,
/obj/item/mod/module/holster,
/obj/item/mod/module/flamethrower,
)
/obj/item/mod/control/pre_equipped/enchanted
theme = /datum/mod_theme/enchanted
applied_core = /obj/item/mod/core/infinite
+3 -2
View File
@@ -119,7 +119,7 @@
return FALSE
if(module_type == MODULE_ACTIVE)
if(mod.selected_module && !mod.selected_module.on_deactivation(display_message = FALSE))
return
return FALSE
mod.selected_module = src
if(device)
if(mod.wearer.put_in_hands(device))
@@ -129,7 +129,7 @@
else
balloon_alert(mod.wearer, "can't extend [device]!")
mod.wearer.transferItemToLoc(device, src, force = TRUE)
return
return FALSE
else
var/used_button = mod.wearer.client?.prefs.read_preference(/datum/preference/choiced/mod_select) || MIDDLE_CLICK
update_signal(used_button)
@@ -301,6 +301,7 @@
if(user.get_active_held_item() != device)
return
on_deactivation()
return COMSIG_KB_ACTIVATED
///Anomaly Locked - Causes the module to not function without an anomaly.
/obj/item/mod/module/anomaly_locked
+27
View File
@@ -258,3 +258,30 @@
part.add_atom_colour("#b17f00", FIXED_COLOUR_PRIORITY)
mod.wearer.remove_atom_colour(WASHABLE_COLOUR_PRIORITY) // turns purple guy purple
mod.wearer.add_atom_colour("#704b96", FIXED_COLOUR_PRIORITY)
///Flamethrower - Launches fire across the area.
/obj/item/mod/module/flamethrower
name = "MOD flamethrower module"
desc = "A custom-manufactured flamethrower, used to burn through your path. Burn well."
icon_state = "flamethrower"
module_type = MODULE_ACTIVE
complexity = 3
use_power_cost = DEFAULT_CHARGE_DRAIN * 3
incompatible_modules = list(/obj/item/mod/module/flamethrower)
cooldown_time = 2.5 SECONDS
overlay_state_inactive = "module_flamethrower"
overlay_state_active = "module_flamethrower_on"
/obj/item/mod/module/flamethrower/on_select_use(atom/target)
. = ..()
if(!.)
return
var/obj/projectile/flame = new /obj/projectile/bullet/incendiary/backblast/flamethrower(mod.wearer.loc)
flame.preparePixelProjectile(target, mod.wearer)
flame.firer = mod.wearer
playsound(src, 'sound/items/modsuit/flamethrower.ogg', 75, TRUE)
INVOKE_ASYNC(flame, /obj/projectile.proc/fire)
drain_power(use_power_cost)
/obj/projectile/bullet/incendiary/backblast/flamethrower
range = 6
@@ -203,3 +203,35 @@
return
rcd_scan(src, fade_time = 10 SECONDS)
drain_power(use_power_cost)
///Mister - Sprays water over an area.
/obj/item/mod/module/mister
name = "MOD water mister module"
desc = "A module containing a mister, able to spray it over areas."
icon_state = "mister"
module_type = MODULE_ACTIVE
complexity = 2
active_power_cost = DEFAULT_CHARGE_DRAIN * 0.3
device = /obj/item/reagent_containers/spray/mister
incompatible_modules = list(/obj/item/mod/module/mister)
cooldown_time = 0.5 SECONDS
var/volume = 500
/obj/item/mod/module/mister/Initialize(mapload)
create_reagents(volume, OPENCONTAINER)
return ..()
///Resin Mister - Sprays resin over an area.
/obj/item/mod/module/mister/atmos
name = "MOD resin mister module"
desc = "An atmospheric resin mister, able to fix up areas quickly."
device = /obj/item/extinguisher/mini/nozzle/mod
volume = 250
/obj/item/mod/module/mister/atmos/Initialize(mapload)
. = ..()
reagents.add_reagent(/datum/reagent/water, volume)
/obj/item/extinguisher/mini/nozzle/mod
name = "MOD atmospheric mister"
desc = "An atmospheric resin mister with three modes, mounted as a module."
@@ -124,3 +124,18 @@
/obj/item/mod/module/holster/Destroy()
QDEL_NULL(holstered)
return ..()
///Pepper Spray Mister - Sprays pepper spray over criminals.
/obj/item/mod/module/mister/security
name = "MOD pepper spray mister module"
desc = "A module containing a container of pepper spray to spray over areas."
device = /obj/item/reagent_containers/spray/mister/pepperspray/mod
complexity = 1
/obj/item/mod/module/mister/security/Initialize(mapload)
. = ..()
reagents.add_reagent(/datum/reagent/consumable/condensedcapsaicin, volume)
/obj/item/reagent_containers/spray/mister/pepperspray/mod
name = "MOD pepper spray mister"
desc = "A mister full of pepper spray, perfect for riots."
@@ -25,6 +25,7 @@
sharpness = NONE
shrapnel_type = null
embedding = null
impact_effect_type = null
ricochet_chance = 10000
ricochets_max = 4
ricochet_incidence_leeway = 0
@@ -45,6 +46,13 @@
/// we only try to knock back the first 6 items per tile
#define BACKBLAST_MAX_ITEM_KNOCKBACK 6
/obj/projectile/bullet/incendiary/backblast/on_hit(atom/target, blocked)
. = ..()
var/turf/location = get_turf(target)
if(isopenturf(location))
new /obj/effect/hotspot(location)
location.hotspot_expose(700, 50, 1)
/obj/projectile/bullet/incendiary/backblast/Move()
. = ..()
if(knockback_range <= 0)
@@ -1342,6 +1342,13 @@
materials = list(/datum/material/iron = 750, /datum/material/glass = 500)
build_path = /obj/item/mod/module/signlang_radio
/datum/design/module/mister_atmos
name = "MOD Module: Resin Mister"
id = "mod_mister_atmos"
materials = list(/datum/material/iron = 1500, /datum/material/glass = 500, /datum/material/silver = 1000, /datum/material/titanium = 1500, /datum/material/uranium = 500)
build_path = /obj/item/mod/module/mister/atmos
department_type = MODULE_ENGINEERING
//MODsuit bepis modules
/datum/design/module/disposal
@@ -1470,6 +1470,7 @@
"mod_magboot",
"mod_tether",
"mod_constructor",
"mod_mister_atmos",
)
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500)
@@ -115,6 +115,7 @@
if(hand != host.hand_bodyparts[host.active_hand_index])
return //wrong hand
Retract()
return COMSIG_KB_ACTIVATED
/obj/item/organ/cyberimp/arm/proc/Retract()
if(!active_item || (active_item in src))
Binary file not shown.

Before

Width:  |  Height:  |  Size: 58 KiB

After

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 130 KiB

After

Width:  |  Height:  |  Size: 130 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 39 KiB

After

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 29 KiB

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.