Skip to content

Commit

Permalink
Evil Cyborgs - Non-Engineer Emag/Malf Modules (ParadiseSS13#24638)
Browse files Browse the repository at this point in the history
* 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
  • Loading branch information
PollardTheDragon authored Apr 12, 2024
1 parent 62d393a commit 41469cf
Show file tree
Hide file tree
Showing 12 changed files with 173 additions and 35 deletions.
24 changes: 11 additions & 13 deletions code/game/gamemodes/malfunction/Malf_Modules.dm
Original file line number Diff line number Diff line change
Expand Up @@ -813,26 +813,24 @@
AI.cracked_camera = TRUE
QDEL_NULL(AI.builtInCamera)

/datum/AI_Module/engi_upgrade
module_name = "Engineering Cyborg Emitter Upgrade"
mod_pick_name = "emitter"
description = "Downloads firmware that activates the built in emitter in all engineering cyborgs linked to you. Cyborgs built after this upgrade will have it pre-installed."
cost = 50 // IDK look into this
/datum/AI_Module/borg_upgrade
module_name = "Combat Cyborg Firmware Upgrade"
mod_pick_name = "combatborgs"
description = "Downloads firmware that activates built-in combat hardware present in all cyborgs. Cyborgs built after this is used will come with the hardware activated."
cost = 70 // IDK look into this
one_purchase = TRUE
upgrade = TRUE
unlock_text = "<span class='notice'>Firmware downloaded. Bugs removed. Built in emitters operating at 73% efficiency.</span>"
unlock_text = "<span class='notice'>Firmware downloaded. Bugs removed. Combat subsystems operating at 73% efficiency.</span>"
unlock_sound = 'sound/items/rped.ogg'

/datum/AI_Module/engi_upgrade/upgrade(mob/living/silicon/ai/AI)
AI.purchased_modules += /obj/item/robot_module/engineering
log_game("[key_name(usr)] purchased emitters for all engineering cyborgs.")
message_admins("<span class='notice'>[key_name_admin(usr)] purchased emitters for all engineering cyborgs!</span>")
/datum/AI_Module/borg_upgrade/upgrade(mob/living/silicon/ai/AI)
AI.purchased_modules = list(/obj/item/robot_module/engineering, /obj/item/robot_module/janitor, /obj/item/robot_module/medical, /obj/item/robot_module/miner, /obj/item/robot_module/butler)
log_game("[key_name(usr)] purchased combat upgrades for all cyborgs.")
message_admins("<span class='notice'>[key_name_admin(usr)] purchased combat upgrades for all cyborgs!</span>")
for(var/mob/living/silicon/robot/R in AI.connected_robots)
if(!istype(R.module, /obj/item/robot_module/engineering))
continue
R.module.malfhacked = TRUE
R.module.rebuild_modules()
to_chat(R, "<span class='notice'>New firmware downloaded. Emitter is now online.</span>")
to_chat(R, "<span class='notice'>New firmware downloaded. Combat upgrades are now online.</span>")

/datum/AI_Module/repair_cyborg
module_name = "Repair Cyborgs"
Expand Down
26 changes: 26 additions & 0 deletions code/game/objects/items/weapons/caution.dm
Original file line number Diff line number Diff line change
Expand Up @@ -66,3 +66,29 @@
l.droplimb(0, DROPLIMB_SHARP)
if(r)
r.droplimb(0, DROPLIMB_SHARP)

/obj/item/stack/cyborg_mine //Malf module
name = "proximity mine dispenser"
icon = 'icons/obj/janitor.dmi'
icon_state = "caution"
energy_type = /datum/robot_storage/energy/janitor/landmine
is_cyborg = TRUE

/obj/item/stack/caution/proximity_sign/malf/afterattack(atom/target, mob/user)
if(!check_allowed_items(target, 1))
return
var/turf/T = get_turf(target)

if(is_blocked_turf(T, TRUE)) //can't put mines on a tile that has dense stuff
to_chat(user, "<span class='notice'>The space is occupied! You cannot place a mine there!</span>")
return
if(!use(1)) //Can't place a landmine if you don't have a landmine
to_chat(user, "<span class='notice'>[src] is out of landmines! It can be refilled at a cyborg charger.</span>")
return
playsound(src.loc, 'sound/machines/click.ogg', 20, TRUE)
var/obj/item/caution/proximity_sign/M = new /obj/item/caution/proximity_sign(get_turf(target), src)
M.timing = TRUE
START_PROCESSING(SSobj, M)
to_chat(user, "<span class='notice'>You place a landmine with [src]. You have 15 seconds until it is armed.</span>")
return M

6 changes: 6 additions & 0 deletions code/modules/instruments/objs/items/instrument_items.dm
Original file line number Diff line number Diff line change
Expand Up @@ -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."
Expand Down
1 change: 1 addition & 0 deletions code/modules/mining/equipment/mining_tools.dm
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down
111 changes: 90 additions & 21 deletions code/modules/mob/living/silicon/robot/robot_modules.dm
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand All @@ -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"
Expand Down Expand Up @@ -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
)

Expand Down Expand Up @@ -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"
Expand All @@ -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
)


Expand Down Expand Up @@ -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")
Expand Down Expand Up @@ -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"
Expand Down Expand Up @@ -986,3 +1054,4 @@
statpanel_name = "Metal"
stack = /obj/item/stack/sheet/metal
add_to_storage = TRUE

1 change: 0 additions & 1 deletion code/modules/projectiles/ammunition/ammo_casings.dm
Original file line number Diff line number Diff line change
Expand Up @@ -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."
Expand Down
5 changes: 5 additions & 0 deletions code/modules/projectiles/ammunition/magazines.dm
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
17 changes: 17 additions & 0 deletions code/modules/projectiles/guns/energy/kinetic_accelerator.dm
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand All @@ -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

Expand Down
10 changes: 10 additions & 0 deletions code/modules/projectiles/guns/projectile/shotgun.dm
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
2 changes: 2 additions & 0 deletions code/modules/projectiles/guns/syringe_gun.dm
Original file line number Diff line number Diff line change
Expand Up @@ -413,3 +413,5 @@
user.adjustStaminaLoss(20, FALSE)
user.adjustOxyLoss(20)
return ..()


3 changes: 3 additions & 0 deletions code/modules/projectiles/projectile/bullets.dm
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down
2 changes: 2 additions & 0 deletions code/modules/reagents/reagent_containers/borghydro.dm
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down

0 comments on commit 41469cf

Please sign in to comment.