Evil Cyborgs - Non-Engineer Emag/Malf Modules (#24638)

* Evil Janitor Cyborg

* Evil Medical Cyborg

* Little less cyanide

* Evil Service Borg

* Combat Cyborg Firmware Upgrade cost adjustment

* Minor code fixes

* Updated Energy Type

* Spacing Changes

* Evil Mining Borg pt1

* Sonic Jackhammer Force, Functions as Combat and Utility mining module

* Moved guitar

* Moved KA

* Naming, Inheritance changes

* Fix landmine stack icon

* Landmine Repath, RSG Magazine Length and KA Overheat changes

* Service Borg Shotgun - Lasershot, Ammo Cap Nerf, No more slug

* REALLY got rid of compact slugs

* RSG - 2u Toxin, 20 Brute heavy syringes

* Syringe Gun Fire Rate

* Changed syringe creation, moved syringe cannon off syringe gun

* Purged syndie hypo, new emag hypo pierces armor/suits
This commit is contained in:
PollardTheDragon
2024-04-12 15:08:48 -04:00
committed by GitHub
parent 62d393ae49
commit 41469cfa06
12 changed files with 173 additions and 35 deletions
@@ -42,6 +42,12 @@
hitsound = 'sound/weapons/guitarslam.ogg'
allowed_instrument_ids = "guitar"
/// This is a special guitar for the emagged service borg that hits pretty hard and can still play music. Clonk.
/obj/item/instrument/guitar/cyborg
name = "steel-reinforced guitar"
desc = "This guitar has robust metal plating inside to give it some extra kick."
force = 20
/obj/item/instrument/eguitar
name = "electric guitar"
desc = "Makes all your shredding needs possible."
@@ -122,6 +122,7 @@
hitsound = 'sound/weapons/sonic_jackhammer.ogg'
usesound = 'sound/weapons/sonic_jackhammer.ogg'
toolspeed = 0.1 //the epitome of powertools. extremely fast mining, laughs at puny walls
force = 20 //This thing breaks rwalls, it should be able to hit harder than a DIY bone pickaxe.
/obj/item/shovel
name = "shovel"
@@ -357,8 +357,11 @@
/obj/item/stack/nanopaste/cyborg,
/obj/item/gripper_medical
)
emag_override_modules = list(/obj/item/reagent_containers/spray/cyborg_facid)
special_rechargables = list(/obj/item/reagent_containers/spray/cyborg_facid, /obj/item/extinguisher/mini)
malf_modules = list(/obj/item/gun/syringemalf)
special_rechargables = list(
/obj/item/extinguisher/mini,
/obj/item/gun/syringemalf
)
// Disable safeties on the borg's defib.
/obj/item/robot_module/medical/emag_act(mob/user)
@@ -376,6 +379,50 @@
F.emag_act()
return ..()
/// Malf Syringe Gun
/obj/item/gun/syringemalf
name = "plasma syringe cannon"
desc = "A syringe gun integrated into a medical cyborg's chassis. Fires heavy-duty plasma syringes tipped in poison."
icon_state = "rapidsyringegun"
throw_speed = 3
throw_range = 7
force = 4
fire_sound = 'sound/items/syringeproj.ogg'
fire_delay = 0.75
var/max_syringes = 14
var/current_syringes = 14
//Preload Syringes
/obj/item/gun/syringemalf/Initialize(mapload)
..()
chambered = new /obj/item/ammo_casing/syringegun(src)
process_chamber()
//Recharge syringes in a recharger
/obj/item/gun/syringemalf/cyborg_recharge(coeff, emagged)
if(current_syringes + (chambered.BB ? 1 : 0) < max_syringes)
current_syringes++
process_chamber()
//Cannot manually remove syringes
/obj/item/gun/syringemalf/attack_self(mob/living/user)
return
//Load syringe into the chamber
/obj/item/gun/syringemalf/process_chamber()
if(!current_syringes || chambered?.BB)
return
chambered.BB = new /obj/item/projectile/bullet/dart/syringe/heavyduty(src)
chambered.BB.reagents.add_reagent_list(list("toxin" = 2))
chambered.BB.name = "heavy duty syringe"
current_syringes--
/obj/item/gun/syringemalf/examine(mob/user)
. = ..()
var/num_syringes = current_syringes + (chambered.BB ? 1 : 0)
. += "Can hold [max_syringes] syringe\s. Has [num_syringes] syringe\s remaining."
// Fluorosulphuric acid spray bottle.
/obj/item/reagent_containers/spray/cyborg_facid
name = "Polyacid spray"
@@ -470,10 +517,12 @@
/obj/item/extinguisher/mini
)
emag_override_modules = list(/obj/item/reagent_containers/spray/cyborg_lube)
emag_modules = list(/obj/item/restraints/handcuffs/cable/zipties/cyborg)
emag_modules = list(/obj/item/reagent_containers/spray/cyborg_facid, /obj/item/malfbroom)
malf_modules = list(/obj/item/stack/cyborg_mine)
special_rechargables = list(
/obj/item/lightreplacer,
/obj/item/reagent_containers/spray/cyborg_lube,
/obj/item/reagent_containers/spray/cyborg_facid,
/obj/item/extinguisher/mini
)
@@ -514,6 +563,30 @@
cleaned_human.clean_blood()
to_chat(cleaned_human, "<span class='danger'>[src] cleans your face!</span>")
/obj/item/malfbroom
name = "cyborg combat broom"
desc = "A steel-core push broom for the hostile cyborg. The firm bristles make it more suitable for fighting than cleaning."
icon = 'icons/obj/janitor.dmi'
icon_state = "broom0"
base_icon_state = "broom"
attack_verb = list("smashed", "slammed", "whacked", "thwacked", "swept")
force = 20
/obj/item/malfbroom/attack(mob/target, mob/user)
if(!ishuman(target))
return ..()
var/mob/living/carbon/human/H = target
if(H.stat != CONSCIOUS || IS_HORIZONTAL(H))
return ..()
H.visible_message("<span class='danger'>[user] sweeps [H]'s legs out from under [H.p_them()]!</span>", \
"<span class='userdanger'>[user] sweeps your legs out from under you!</span>", \
"<span class='italics'>You hear sweeping.</span>")
playsound(get_turf(user), 'sound/effects/hit_kick.ogg', 50, TRUE, -1)
H.apply_damage(20, BRUTE)
H.KnockDown(4 SECONDS)
add_attack_logs(user, H, "Leg swept with cyborg combat broom", ATKLOG_ALL)
// Service cyborg module.
/obj/item/robot_module/butler
name = "service robot module"
@@ -535,10 +608,12 @@
/obj/item/reagent_containers/drinks/shaker
)
emag_override_modules = list(/obj/item/reagent_containers/drinks/cans/beer/sleepy_beer)
emag_modules = list(/obj/item/restraints/handcuffs/cable/zipties/cyborg)
emag_modules = list(/obj/item/restraints/handcuffs/cable/zipties/cyborg, /obj/item/instrument/guitar/cyborg)
malf_modules = list(/obj/item/gun/projectile/shotgun/automatic/combat/cyborg)
special_rechargables = list(
/obj/item/reagent_containers/condiment/enzyme,
/obj/item/reagent_containers/drinks/cans/beer/sleepy_beer
/obj/item/reagent_containers/drinks/cans/beer/sleepy_beer,
/obj/item/gun/projectile/shotgun/automatic/combat/cyborg
)
@@ -595,24 +670,10 @@
/obj/item/gun/energy/kinetic_accelerator/cyborg,
/obj/item/gps/cyborg
)
emag_modules = list(/obj/item/borg/stun, /obj/item/pickaxe/drill/cyborg/diamond, /obj/item/restraints/handcuffs/cable/zipties/cyborg)
emag_modules = list(/obj/item/pickaxe/drill/jackhammer)
malf_modules = list(/obj/item/gun/energy/kinetic_accelerator/cyborg/malf)
special_rechargables = list(/obj/item/extinguisher/mini, /obj/item/weldingtool/mini)
// Replace their normal drill with a diamond drill.
/obj/item/robot_module/miner/emag_act()
. = ..()
for(var/obj/item/pickaxe/drill/cyborg/D in modules)
// Make sure we don't remove the diamond drill If they already have a diamond drill from the borg upgrade.
if(!istype(D, /obj/item/pickaxe/drill/cyborg/diamond))
qdel(D)
basic_modules -= D // Remove it from this list so it doesn't get added in the rebuild.
// Readd the normal drill
/obj/item/robot_module/miner/unemag()
var/obj/item/pickaxe/drill/cyborg/C = new(src)
basic_modules += C
return ..()
// This makes it so others can crowbar out KA upgrades from the miner borg.
/obj/item/robot_module/miner/handle_custom_removal(component_id, mob/living/user, obj/item/W)
if(component_id == "KA modkits")
@@ -957,6 +1018,13 @@
/datum/robot_storage/energy/medical/nanopaste/syndicate
max_amount = 25
//Energy stack for landmines
/datum/robot_storage/energy/janitor/landmine
name = "Landmine Synthesizer"
statpanel_name = "Landmines"
max_amount = 4
recharge_rate = 0.2
/// This datum is an alternative to the energy storages, instead being recharged in different ways
/datum/robot_storage/material
name = "Generic material storage"
@@ -986,3 +1054,4 @@
statpanel_name = "Metal"
stack = /obj/item/stack/sheet/metal
add_to_storage = TRUE
@@ -169,7 +169,6 @@
muzzle_flash_strength = MUZZLE_FLASH_STRENGTH_STRONG
muzzle_flash_range = MUZZLE_FLASH_RANGE_STRONG
/obj/item/ammo_casing/shotgun/buckshot
name = "buckshot shell"
desc = "A 12 gauge buckshot shell. Fires a spread of lethal shot."
@@ -117,6 +117,11 @@
ammo_type = /obj/item/ammo_casing/shotgun/beanbag
max_ammo = 6
/obj/item/ammo_box/magazine/internal/shot/malf
name = "cyborg shotgun internal magazine"
ammo_type = /obj/item/ammo_casing/shotgun/lasershot
max_ammo = 8
/obj/item/ammo_box/magazine/internal/shot/dual
name = "double-barrel shotgun internal magazine"
max_ammo = 2
@@ -79,6 +79,15 @@
max_mod_capacity = 80
icon_state = "kineticgun_b"
/obj/item/gun/energy/kinetic_accelerator/cyborg/malf
name = "kinetic accelerator cannon"
desc = "A cyborg-modified kinetic accelerator that operates in pressurized environments, but cannot be upgraded and fires slowly."
icon_state = "kineticgun_h"
item_state = "kineticgun_h"
max_mod_capacity = 0
ammo_type = list(/obj/item/ammo_casing/energy/kinetic/malf)
overheat_time = 2 SECONDS
/obj/item/gun/energy/kinetic_accelerator/minebot
trigger_guard = TRIGGER_GUARD_ALLOW_ALL
overheat_time = 20
@@ -185,6 +194,9 @@
var/obj/item/gun/energy/kinetic_accelerator/KA = loc
KA.modify_projectile(BB)
//Malf casing
/obj/item/ammo_casing/energy/kinetic/malf
projectile_type = /obj/item/projectile/kinetic/malf
//Projectiles
/obj/item/projectile/kinetic
@@ -199,6 +211,11 @@
var/pressure_decrease = 0.25
var/obj/item/gun/energy/kinetic_accelerator/kinetic_gun
/obj/item/projectile/kinetic/malf
pressure_decrease = 1
color = "#FFFFFF"
icon_state = "ka_tracer"
/obj/item/projectile/kinetic/pod
range = 4
@@ -320,6 +320,16 @@
w_class = WEIGHT_CLASS_BULKY
execution_speed = 5 SECONDS
/// Service Malfunction Borg Combat Shotgun Variant
/obj/item/gun/projectile/shotgun/automatic/combat/cyborg
name = "cyborg shotgun"
desc = "Get those organics off your station. Holds eight shots. Can only reload in a recharge station."
mag_type = /obj/item/ammo_box/magazine/internal/shot/malf
/obj/item/gun/projectile/shotgun/automatic/combat/cyborg/cyborg_recharge(coeff, emagged)
if(magazine.ammo_count() < magazine.max_ammo)
magazine.stored_ammo.Add(new /obj/item/ammo_casing/shotgun/lasershot)
//Dual Feed Shotgun
/obj/item/gun/projectile/shotgun/automatic/dual_tube
@@ -413,3 +413,5 @@
user.adjustStaminaLoss(20, FALSE)
user.adjustOxyLoss(20)
return ..()
@@ -256,6 +256,9 @@
icon = 'icons/obj/chemical.dmi'
icon_state = "syringeproj"
/obj/item/projectile/bullet/dart/syringe/heavyduty
damage = 20
/obj/item/projectile/bullet/dart/syringe/pierce_ignore
piercing = TRUE
@@ -127,9 +127,11 @@
/obj/item/reagent_containers/borghypo/emag_act(mob/user)
if(!emagged)
emagged = TRUE
bypass_protection = TRUE
reagent_ids += reagent_ids_emagged
return
emagged = FALSE
bypass_protection = FALSE
reagent_ids -= reagent_ids_emagged
/obj/item/reagent_containers/borghypo/basic