Merge pull request #4987 from Fox-McCloud/cyborg-tweaks

Cyborg Upgrade Additions and Refactor
This commit is contained in:
TheDZD
2016-07-12 21:22:57 -04:00
committed by GitHub
12 changed files with 349 additions and 189 deletions
+213 -103
View File
@@ -2,59 +2,71 @@
// Contains various borg upgrades.
/obj/item/borg/upgrade
name = "A borg upgrade module."
name = "borg upgrade module."
desc = "Protected by FRM."
icon = 'icons/obj/module.dmi'
icon_state = "cyborg_upgrade"
var/locked = 0
var/require_module = 0
var/installed = 0
var/require_module = 0
var/module_type = null
/obj/item/borg/upgrade/proc/action(var/mob/living/silicon/robot/R)
/obj/item/borg/upgrade/proc/action(mob/living/silicon/robot/R)
if(R.stat == DEAD)
to_chat(usr, "\red The [src] will not function on a deceased robot.")
to_chat(usr, "<span class='notice'>[src] will not function on a deceased cyborg.</span>")
return 1
if(module_type && !istype(R.module, module_type))
to_chat(R, "Upgrade mounting error! No suitable hardpoint detected!")
to_chat(usr, "There's no mounting point for the module!")
return 1
return 0
/obj/item/borg/upgrade/reset
name = "robotic module reset board"
desc = "Used to reset a cyborg's module. Destroys any other upgrades applied to the robot."
name = "cyborg module reset board"
desc = "Used to reset a cyborg's module. Destroys any other upgrades applied to the cyborg."
icon_state = "cyborg_upgrade1"
require_module = 1
/obj/item/borg/upgrade/reset/action(var/mob/living/silicon/robot/R)
if(..()) return 0
/obj/item/borg/upgrade/reset/action(mob/living/silicon/robot/R)
if(..())
return
R.notify_ai(2)
R.uneq_all()
R.hands.icon_state = "nomod"
R.icon_state = "robot"
qdel(R.module)
R.module = null
R.camera.network.Remove(list("Engineering","Medical","Mining Outpost"))
R.camera.network.Remove(list("Engineering", "Medical", "Mining Outpost"))
R.rename_character(R.real_name, R.get_default_name("Default"))
R.status_flags |= CANPUSH
R.languages = list()
R.speech_synthesizer_langs = list()
R.notify_ai(2)
R.jetpackoverlay = 0
R.update_icons()
R.update_headlamp()
R.speed = 0 // Remove upgrades.
R.ionpulse = 0
R.magpulse = 0
R.add_language("Robot Talk", 1)
R.status_flags |= CANPUSH
return 1
/obj/item/borg/upgrade/rename
name = "robot reclassification board"
name = "cyborg reclassification board"
desc = "Used to rename a cyborg."
icon_state = "cyborg_upgrade1"
var/heldname = "default name"
/obj/item/borg/upgrade/rename/attack_self(mob/user as mob)
heldname = stripped_input(user, "Enter new robot name", "Robot Reclassification", heldname, MAX_NAME_LEN)
/obj/item/borg/upgrade/rename/attack_self(mob/user)
heldname = stripped_input(user, "Enter new robot name", "Cyborg Reclassification", heldname, MAX_NAME_LEN)
/obj/item/borg/upgrade/rename/action(var/mob/living/silicon/robot/R)
if(..()) return 0
if(..())
return
R.notify_ai(3, R.name, heldname)
R.name = heldname
R.custom_name = heldname
@@ -63,14 +75,13 @@
return 1
/obj/item/borg/upgrade/restart
name = "robot emergency restart module"
desc = "Used to force a restart of a disabled-but-repaired robot, bringing it back online."
name = "cyborg emergency reboot module"
desc = "Used to force a reboot of a disabled-but-repaired cyborg, bringing it back online."
icon_state = "cyborg_upgrade1"
/obj/item/borg/upgrade/restart/action(var/mob/living/silicon/robot/R)
/obj/item/borg/upgrade/restart/action(mob/living/silicon/robot/R)
if(R.health < 0)
to_chat(usr, "You have to repair the robot before using this module!")
to_chat(usr, "<span class='warning'>You have to repair the cyborg before using this module!</span>")
return 0
if(!R.key)
@@ -82,6 +93,7 @@
dead_mob_list -= R //please never forget this ever kthx
living_mob_list += R
R.notify_ai(1)
return 1
@@ -92,126 +104,224 @@
require_module = 1
/obj/item/borg/upgrade/vtec/action(var/mob/living/silicon/robot/R)
if(..()) return 0
if(..())
return
if(R.speed < 0)
to_chat(R, "<span class='notice'>A VTEC unit is already installed!</span>")
to_chat(usr, "<span class='notice'>There's no room for another VTEC unit!</span>")
return
if(R.speed == -1)
return 0
R.speed = -1 // Gotta go fast.
R.speed--
return 1
/obj/item/borg/upgrade/disablercooler
name = "robotic Rapid Disabler Cooling Module"
name = "cyborg rapid disabler cooling module"
desc = "Used to cool a mounted disabler, increasing the potential current in it and thus its recharge rate."
icon_state = "cyborg_upgrade3"
require_module = 1
module_type = /obj/item/weapon/robot_module/security
/obj/item/borg/upgrade/disablercooler/action(mob/living/silicon/robot/R)
if(..())
return
/obj/item/borg/upgrade/disablercooler/action(var/mob/living/silicon/robot/R)
if(..()) return 0
if(!istype(R.module, /obj/item/weapon/robot_module/security))
to_chat(R, "Upgrade mounting error! No suitable hardpoint detected!")
to_chat(usr, "There's no mounting point for the module!")
return 0
var/obj/item/weapon/gun/energy/disabler/cyborg/T = locate() in R.module
var/obj/item/weapon/gun/energy/disabler/cyborg/T = locate() in R.module.modules
if(!T)
T = locate() in R.module.contents
if(!T)
T = locate() in R.module.modules
if(!T)
to_chat(usr, "This robot has had its disabler removed!")
return 0
to_chat(usr, "<span class='notice'>There's no disabler in this unit!</span>")
return
if(T.charge_delay <= 2)
to_chat(R, "Maximum cooling achieved for this hardpoint!")
to_chat(usr, "There's no room for another cooling unit!")
return 0
to_chat(R, "<span class='notice'>A cooling unit is already installed!</span>")
to_chat(usr, "<span class='notice'>There's no room for another cooling unit!</span>")
return
else
T.charge_delay = max(2 , T.charge_delay - 4)
T.charge_delay = max(2 , T.charge_delay - 4)
return 1
/obj/item/borg/upgrade/jetpack
name = "mining robot jetpack"
desc = "A carbon dioxide jetpack suitable for low-gravity mining operations."
/obj/item/borg/upgrade/thrusters
name = "ion thruster upgrade"
desc = "A energy-operated thruster system for cyborgs."
icon_state = "cyborg_upgrade3"
require_module = 1
/obj/item/borg/upgrade/jetpack/action(var/mob/living/silicon/robot/R)
if(..()) return 0
/obj/item/borg/upgrade/thrusters/action(mob/living/silicon/robot/R)
if(..())
return
if(!istype(R.module, /obj/item/weapon/robot_module/miner))
to_chat(R, "Upgrade mounting error! No suitable hardpoint detected!")
to_chat(usr, "There's no mounting point for the module!")
return 0
else
R.module.modules += new/obj/item/weapon/tank/jetpack/carbondioxide
for(var/obj/item/weapon/tank/jetpack/carbondioxide in R.module.modules)
R.internals = src
R.jetpackoverlay = 1
R.update_icons()
return 1
if(R.ionpulse)
to_chat(usr, "<span class='notice'>This unit already has ion thrusters installed!</span>")
return
R.ionpulse = 1
return 1
/obj/item/borg/upgrade/ddrill
name = "mining cyborg diamond drill"
desc = "A diamond drill replacement for the mining module's standard drill."
icon_state = "cyborg_upgrade3"
require_module = 1
module_type = /obj/item/weapon/robot_module/miner
/obj/item/borg/upgrade/ddrill/action(var/mob/living/silicon/robot/R)
if(..()) return 0
/obj/item/borg/upgrade/ddrill/action(mob/living/silicon/robot/R)
if(..())
return
if(!istype(R.module, /obj/item/weapon/robot_module/miner))
to_chat(R, "Upgrade mounting error! No suitable hardpoint detected!")
to_chat(usr, "There's no mounting point for the module!")
return 0
else
for(var/obj/item/weapon/pickaxe/drill/cyborg/D in R.module.modules)
R.module.modules -= D
qdel(D)
for(var/obj/item/weapon/shovel/S in R.module.modules)
R.module.modules -= S
qdel(S)
R.module.modules += new /obj/item/weapon/pickaxe/drill/cyborg/diamond(R.module)
R.module.rebuild()
return 1
for(var/obj/item/weapon/pickaxe/drill/cyborg/D in R.module.modules)
qdel(D)
for(var/obj/item/weapon/shovel/S in R.module.modules)
qdel(S)
R.module.modules += new /obj/item/weapon/pickaxe/drill/cyborg/diamond(R.module)
R.module.rebuild()
return 1
/obj/item/borg/upgrade/soh
name = "mining cyborg satchel of holding"
desc = "A satchel of holding replacement for mining cyborg's ore satchel module."
icon_state = "cyborg_upgrade3"
require_module = 1
module_type = /obj/item/weapon/robot_module/miner
/obj/item/borg/upgrade/soh/action(var/mob/living/silicon/robot/R)
if(..()) return 0
/obj/item/borg/upgrade/soh/action(mob/living/silicon/robot/R)
if(..())
return
if(!istype(R.module, /obj/item/weapon/robot_module/miner))
to_chat(R, "Upgrade mounting error! No suitable hardpoint detected!")
to_chat(usr, "There's no mounting point for the module!")
return 0
else
for(var/obj/item/weapon/storage/bag/ore/cyborg/S in R.module.modules)
R.module.modules -= S
qdel(S)
R.module.modules += new /obj/item/weapon/storage/bag/ore/holding/cyborg(R.module)
R.module.rebuild()
return 1
for(var/obj/item/weapon/storage/bag/ore/cyborg/S in R.module.modules)
qdel(S)
/obj/item/borg/upgrade/syndicate/
name = "Illegal Equipment Module"
desc = "Unlocks the hidden, deadlier functions of a robot"
R.module.modules += new /obj/item/weapon/storage/bag/ore/holding(R.module)
R.module.rebuild()
return 1
/obj/item/borg/upgrade/hyperka
name = "mining cyborg hyper-kinetic accelerator"
desc = "A satchel of holding replacement for mining cyborg's ore satchel module."
icon_state = "cyborg_upgrade3"
require_module = 1
module_type = /obj/item/weapon/robot_module/miner
/obj/item/borg/upgrade/hyperka/action(mob/living/silicon/robot/R)
if(..())
return
for(var/obj/item/weapon/gun/energy/kinetic_accelerator/cyborg/H in R.module.modules)
qdel(H)
R.module.modules += new /obj/item/weapon/gun/energy/kinetic_accelerator/hyper/cyborg(R.module)
R.module.rebuild()
return 1
/obj/item/borg/upgrade/syndicate
name = "illegal equipment module"
desc = "Unlocks the hidden, deadlier functions of a cyborg"
icon_state = "cyborg_upgrade3"
require_module = 1
/obj/item/borg/upgrade/syndicate/action(var/mob/living/silicon/robot/R)
if(..()) return 0
/obj/item/borg/upgrade/syndicate/action(mob/living/silicon/robot/R)
if(..())
return
if(R.emagged == 1)
return 0
if(R.emagged)
return
R.emagged = 1
return 1
/obj/item/borg/upgrade/selfrepair
name = "self-repair module"
desc = "This module will repair the cyborg over time."
icon_state = "cyborg_upgrade5"
require_module = 1
var/repair_amount = -1
var/repair_tick = 1
var/msg_cooldown = 0
var/on = 0
var/powercost = 10
var/mob/living/silicon/robot/cyborg
/obj/item/borg/upgrade/selfrepair/action(mob/living/silicon/robot/R)
if(..())
return
var/obj/item/borg/upgrade/selfrepair/U = locate() in R
if(U)
to_chat(usr, "<span class='warning'>This unit is already equipped with a self-repair module.</span>")
return 0
cyborg = R
icon_state = "selfrepair_off"
action_button_name = "Toggle Self-Repair"
return 1
/obj/item/borg/upgrade/selfrepair/Destroy()
cyborg = null
processing_objects -= src
on = 0
return ..()
/obj/item/borg/upgrade/selfrepair/ui_action_click()
on = !on
if(on)
to_chat(cyborg, "<span class='notice'>You activate the self-repair module.</span>")
processing_objects |= src
else
to_chat(cyborg, "<span class='notice'>You deactivate the self-repair module.</span>")
processing_objects -= src
update_icon()
/obj/item/borg/upgrade/selfrepair/update_icon()
if(cyborg)
icon_state = "selfrepair_[on ? "on" : "off"]"
else
icon_state = "cyborg_upgrade5"
/obj/item/borg/upgrade/selfrepair/proc/deactivate()
processing_objects -= src
on = 0
update_icon()
/obj/item/borg/upgrade/selfrepair/process()
if(!repair_tick)
repair_tick = 1
return
if(cyborg && (cyborg.stat != DEAD) && on)
if(!cyborg.cell)
to_chat(cyborg, "<span class='warning'>Self-repair module deactivated. Please, insert the power cell.</span>")
deactivate()
return
if(cyborg.cell.charge < powercost * 2)
to_chat(cyborg, "<span class='warning'>Self-repair module deactivated. Please recharge.</span>")
deactivate()
return
if(cyborg.health < cyborg.maxHealth)
if(cyborg.health < 0)
repair_amount = -2.5
powercost = 30
else
repair_amount = -1
powercost = 10
cyborg.adjustBruteLoss(repair_amount)
cyborg.adjustFireLoss(repair_amount)
cyborg.updatehealth()
cyborg.cell.use(powercost)
else
cyborg.cell.use(5)
repair_tick = 0
if((world.time - 2000) > msg_cooldown )
var/msgmode = "standby"
if(cyborg.health < 0)
msgmode = "critical"
else if(cyborg.health < cyborg.maxHealth)
msgmode = "normal"
to_chat(cyborg, "<span class='notice'>Self-repair is active in <span class='boldnotice'>[msgmode]</span> mode.</span>")
msg_cooldown = world.time
else
deactivate()