From 2a3ccf37295f4f13a43057f6c1f4435920e4eaf3 Mon Sep 17 00:00:00 2001 From: Fox-McCloud Date: Mon, 11 Jul 2016 06:16:44 -0400 Subject: [PATCH 1/2] Cyborg Upgrade Additions and Refactor --- code/_onclick/hud/_defines.dm | 1 + code/_onclick/hud/robot.dm | 25 +- .../objects/items/robot/robot_upgrades.dm | 321 ++++++++++++------ .../modules/mob/living/silicon/robot/robot.dm | 69 ++-- .../mob/living/silicon/robot/robot_modules.dm | 28 +- .../living/silicon/robot/robot_movement.dm | 9 +- .../projectiles/guns/energy/special.dm | 4 + .../designs/mechfabricator_designs.dm | 90 +++-- code/modules/telesci/gps.dm | 6 + icons/mob/screen_robot.dmi | Bin 29952 -> 30810 bytes icons/obj/module.dmi | Bin 2184 -> 3350 bytes icons/obj/telescience.dmi | Bin 2403 -> 2583 bytes 12 files changed, 359 insertions(+), 194 deletions(-) diff --git a/code/_onclick/hud/_defines.dm b/code/_onclick/hud/_defines.dm index c6ad076b102..d04022cc3e8 100644 --- a/code/_onclick/hud/_defines.dm +++ b/code/_onclick/hud/_defines.dm @@ -43,6 +43,7 @@ #define ui_borg_sensor "CENTER-3:16, SOUTH:5" //borgs #define ui_borg_lamp "CENTER-4:16, SOUTH:5" //borgs +#define ui_borg_thrusters "CENTER-5:16, SOUTH:5"//borgs #define ui_inv1 "CENTER-2:16,SOUTH:5" //borgs #define ui_inv2 "CENTER-1 :16,SOUTH:5" //borgs #define ui_inv3 "CENTER :16,SOUTH:5" //borgs diff --git a/code/_onclick/hud/robot.dm b/code/_onclick/hud/robot.dm index 861209033af..b95bacd06e2 100644 --- a/code/_onclick/hud/robot.dm +++ b/code/_onclick/hud/robot.dm @@ -70,6 +70,14 @@ var/mob/living/silicon/robot/R = usr R.control_headlamp() +/obj/screen/robot/thrusters + name = "ion thrusters" + icon_state = "ionpulse0" + +/obj/screen/robot/thrusters/Click() + var/mob/living/silicon/robot/R = usr + R.toggle_ionpulse() + /obj/screen/robot/panel name = "installed modules" icon_state = "panel" @@ -117,10 +125,10 @@ using.screen_loc = ui_borg_sensor static_inventory += using -//Intent - using = new /obj/screen/act_intent/robot() - using.icon_state = mymob.a_intent - static_inventory += using +//Intent + using = new /obj/screen/act_intent/robot() + using.icon_state = mymob.a_intent + static_inventory += using action_intent = using //Health @@ -141,8 +149,8 @@ mymob.pullin.screen_loc = ui_borg_pull hotkeybuttons += mymob.pullin - mymob.zone_sel = new /obj/screen/zone_sel/robot() - mymob.zone_sel.update_icon(mymob) + mymob.zone_sel = new /obj/screen/zone_sel/robot() + mymob.zone_sel.update_icon(mymob) static_inventory += mymob.zone_sel //Headlamp @@ -150,6 +158,11 @@ mymobR.lamp_button.screen_loc = ui_borg_lamp static_inventory += mymobR.lamp_button +//Thrusters + using = new /obj/screen/robot/thrusters() + using.screen_loc = ui_borg_thrusters + static_inventory += using + mymobR.thruster_button = using /datum/hud/proc/toggle_show_robot_modules() if(!isrobot(mymob)) diff --git a/code/game/objects/items/robot/robot_upgrades.dm b/code/game/objects/items/robot/robot_upgrades.dm index 512baa30703..2c470acc0b5 100644 --- a/code/game/objects/items/robot/robot_upgrades.dm +++ b/code/game/objects/items/robot/robot_upgrades.dm @@ -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, "[src] will not function on a deceased cyborg.") + 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, "You have to repair the cyborg before using this module!") return 0 if(!R.key) @@ -78,10 +89,8 @@ if(ghost.mind && ghost.mind.current == R) R.key = ghost.key - R.stat = CONSCIOUS - dead_mob_list -= R //please never forget this ever kthx - living_mob_list += R - R.notify_ai(1) + R.revive() + return 1 @@ -92,126 +101,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, "A VTEC unit is already installed!") + to_chat(usr, "There's no room for another VTEC unit!") + 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, "There's no disabler in this unit!") + 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, "A cooling unit is already installed!") + to_chat(usr, "There's no room for another cooling unit!") + 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, "This unit already has ion thrusters installed!") + 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, "This unit is already equipped with a self-repair module.") + 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, "You activate the self-repair module.") + processing_objects |= src + else + to_chat(cyborg, "You deactivate the self-repair module.") + 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, "Self-repair module deactivated. Please, insert the power cell.") + deactivate() + return + + if(cyborg.cell.charge < powercost * 2) + to_chat(cyborg, "Self-repair module deactivated. Please recharge.") + 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, "Self-repair is active in [msgmode] mode.") + msg_cooldown = world.time + else + deactivate() \ No newline at end of file diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index cc586d37bb7..813789138b8 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -21,6 +21,7 @@ var/list/robot_verbs_default = list( var/obj/screen/inv2 = null var/obj/screen/inv3 = null var/obj/screen/lamp_button = null + var/obj/screen/thruster_button = null var/shown_robot_modules = 0 //Used to determine whether they have the module menu shown or not var/obj/screen/robot_modules_background @@ -57,8 +58,6 @@ var/list/robot_verbs_default = list( var/viewalerts = 0 var/modtype = "Default" var/lower_mod = 0 - var/jetpack = 0 - var/datum/effect/system/ion_trail_follow/ion_trail = null var/datum/effect/system/spark_spread/spark_system//So they can initialize sparks whenever/N var/jeton = 0 var/low_power_mode = 0 //whether the robot has no charge left. @@ -81,8 +80,10 @@ var/list/robot_verbs_default = list( hud_possible = list(SPECIALROLE_HUD, DIAG_STAT_HUD, DIAG_HUD, DIAG_BATT_HUD,NATIONS_HUD) - var/jetpackoverlay = 0 var/magpulse = 0 + var/ionpulse = 0 // Jetpack-like effect. + var/ionpulse_on = 0 // Jetpack-like effect. + var/datum/effect/system/ion_trail_follow/ion_trail // Ionpulse effect. var/obj/item/borg/sight/hud/sec/sechud = null var/obj/item/borg/sight/hud/med/healthhud = null @@ -464,6 +465,35 @@ var/list/robot_verbs_default = list( src.verbs -= robot_verbs_default src.verbs -= silicon_subsystems +/mob/living/silicon/robot/proc/ionpulse() + if(!ionpulse_on) + return + + if(cell.charge <= 50) + toggle_ionpulse() + return + + cell.charge -= 50 // 500 steps on a default cell. + return 1 + +/mob/living/silicon/robot/proc/toggle_ionpulse() + if(!ionpulse) + to_chat(src, "No thrusters are installed!") + return + + if(!ion_trail) + ion_trail = new + ion_trail.set_up(src) + + ionpulse_on = !ionpulse_on + to_chat(src, "You [ionpulse_on ? null :"de"]activate your ion thrusters.") + if(ionpulse_on) + ion_trail.start() + else + ion_trail.stop() + if(thruster_button) + thruster_button.icon_state = "ionpulse[ionpulse_on]" + /mob/living/silicon/robot/blob_act() if(stat != 2) adjustBruteLoss(60) @@ -488,23 +518,6 @@ var/list/robot_verbs_default = list( stat(null, "Time left: [max(ticker.mode:AI_win_timeleft/(ticker.mode:apcs/3), 0)]") return 0 - -// this function displays jetpack pressure in the stat panel -/mob/living/silicon/robot/proc/show_jetpack_pressure() - // if you have a jetpack, show the internal tank pressure - var/obj/item/weapon/tank/jetpack/current_jetpack = installed_jetpack() - if(current_jetpack) - stat("Internal Atmosphere Info", current_jetpack.name) - stat("Tank Pressure", current_jetpack.air_contents.return_pressure()) - - -// this function returns the robots jetpack, if one is installed -/mob/living/silicon/robot/proc/installed_jetpack() - if(module) - return (locate(/obj/item/weapon/tank/jetpack) in module.modules) - return 0 - - // this function displays the cyborgs current cell charge in the stat panel /mob/living/silicon/robot/proc/show_cell_power() if(cell) @@ -519,7 +532,6 @@ var/list/robot_verbs_default = list( statpanel("Status") if(client.statpanel == "Status") show_cell_power() - show_jetpack_pressure() /mob/living/silicon/robot/restrained() return 0 @@ -1022,9 +1034,6 @@ var/list/robot_verbs_default = list( for(var/obj/item/borg/combat/shield/S in module.modules) if(activated(S)) overlays += "[base_icon]-shield" - - if(jetpackoverlay) - overlays += "minerjetpack-[icon_state]" update_fire() /mob/living/silicon/robot/proc/installed_modules() @@ -1343,6 +1352,7 @@ var/list/robot_verbs_default = list( faction = list("nanotrasen") designation = "Nanotrasen Combat" req_access = list(access_cent_specops) + ionpulse = 1 var/searching_for_ckey = 0 /mob/living/silicon/robot/deathsquad/New(loc) @@ -1390,6 +1400,7 @@ var/list/robot_verbs_default = list( designation = "Syndicate Assault" modtype = "Syndicate" req_access = list(access_syndicate) + ionpulse = 1 lawchannel = "State" var/playstyle_string = "You are a Syndicate assault cyborg!
\ You are armed with powerful offensive tools to aid you in your mission: help the operatives secure the nuclear authentication disk. \ @@ -1475,4 +1486,12 @@ var/list/robot_verbs_default = list( if(1) disable_component("comms", 160) if(2) - disable_component("comms", 60) \ No newline at end of file + disable_component("comms", 60) + +/mob/living/silicon/robot/revive(admin_revive = 0) + if(..()) //successfully ressuscitated from death + update_headlamp() + if(admin_revive) + locked = 1 + notify_ai(1) + . = 1 \ No newline at end of file diff --git a/code/modules/mob/living/silicon/robot/robot_modules.dm b/code/modules/mob/living/silicon/robot/robot_modules.dm index 3eb032726bf..762efbcf02d 100644 --- a/code/modules/mob/living/silicon/robot/robot_modules.dm +++ b/code/modules/mob/living/silicon/robot/robot_modules.dm @@ -8,7 +8,6 @@ var/list/modules = list() var/obj/item/emag = null - var/obj/item/borg/upgrade/jetpack = null var/list/subsystems = list() var/module_type = "NoMod" // For icon usage @@ -39,8 +38,6 @@ modules.Cut() qdel(emag) emag = null - qdel(jetpack) - jetpack = null return ..() /obj/item/weapon/robot_module/proc/fix_modules() @@ -316,16 +313,18 @@ module_type = "Miner" /obj/item/weapon/robot_module/miner/New() - src.modules += new /obj/item/device/flash/cyborg(src) - src.modules += new /obj/item/borg/sight/meson(src) - src.modules += new /obj/item/weapon/wrench(src) - src.modules += new /obj/item/weapon/screwdriver(src) - src.modules += new /obj/item/device/t_scanner/adv_mining_scanner/cyborg(src) - src.modules += new /obj/item/weapon/storage/bag/ore/cyborg(src) - src.modules += new /obj/item/weapon/pickaxe/drill/cyborg(src) - src.modules += new /obj/item/weapon/storage/bag/sheetsnatcher/borg(src) - src.modules += new /obj/item/weapon/gun/energy/kinetic_accelerator/cyborg(src) - src.emag = new /obj/item/borg/stun(src) + modules += new /obj/item/device/flash/cyborg(src) + modules += new /obj/item/borg/sight/meson(src) + modules += new /obj/item/weapon/storage/bag/ore/cyborg(src) + modules += new /obj/item/weapon/pickaxe/drill/cyborg(src) + modules += new /obj/item/weapon/shovel(src) + modules += new /obj/item/weapon/weldingtool/mini(src) + modules += new /obj/item/weapon/extinguisher/mini(src) + modules += new /obj/item/weapon/storage/bag/sheetsnatcher/borg(src) + modules += new /obj/item/device/t_scanner/adv_mining_scanner/cyborg(src) + modules += new /obj/item/weapon/gun/energy/kinetic_accelerator/cyborg(src) + modules += new /obj/item/device/gps/cyborg(src) + emag = new /obj/item/borg/stun(src) fix_modules() @@ -338,7 +337,6 @@ src.modules += new /obj/item/borg/sight/thermal(src) src.modules += new /obj/item/weapon/melee/energy/sword/cyborg(src) src.modules += new /obj/item/weapon/gun/energy/pulse/cyborg(src) - src.modules += new /obj/item/weapon/tank/jetpack/carbondioxide(src) src.modules += new /obj/item/weapon/crowbar(src) src.emag = null @@ -354,7 +352,6 @@ src.modules += new /obj/item/weapon/gun/energy/printer(src) src.modules += new /obj/item/weapon/gun/projectile/revolver/grenadelauncher/multi/cyborg(src) src.modules += new /obj/item/weapon/card/emag(src) - src.modules += new /obj/item/weapon/tank/jetpack/carbondioxide(src) src.modules += new /obj/item/weapon/crowbar(src) src.modules += new /obj/item/weapon/pinpointer/operative(src) src.emag = null @@ -393,7 +390,6 @@ src.modules += new /obj/item/weapon/surgicaldrill(src) src.modules += new /obj/item/weapon/melee/energy/sword/cyborg/saw(src) //Energy saw -- primary weapon src.modules += new /obj/item/weapon/card/emag(src) - src.modules += new /obj/item/weapon/tank/jetpack/carbondioxide(src) src.modules += new /obj/item/weapon/crowbar(src) src.modules += new /obj/item/weapon/pinpointer/operative(src) src.emag = null diff --git a/code/modules/mob/living/silicon/robot/robot_movement.dm b/code/modules/mob/living/silicon/robot/robot_movement.dm index 00ed6522440..ff28a93a64e 100644 --- a/code/modules/mob/living/silicon/robot/robot_movement.dm +++ b/code/modules/mob/living/silicon/robot/robot_movement.dm @@ -1,9 +1,8 @@ /mob/living/silicon/robot/Process_Spacemove(var/movement_dir = 0) - if(module) - for(var/obj/item/weapon/tank/jetpack/J in module.modules) - if(J && istype(J, /obj/item/weapon/tank/jetpack)) - if(J.allow_thrust(0.01)) return 1 - if(..()) return 1 + if(ionpulse()) + return 1 + if(..()) + return 1 return 0 //No longer needed, but I'll leave it here incase we plan to re-use it. diff --git a/code/modules/projectiles/guns/energy/special.dm b/code/modules/projectiles/guns/energy/special.dm index 33b0d83eee1..3bb94133e16 100644 --- a/code/modules/projectiles/guns/energy/special.dm +++ b/code/modules/projectiles/guns/energy/special.dm @@ -122,6 +122,10 @@ holds_charge = TRUE unique_frequency = TRUE +/obj/item/weapon/gun/energy/kinetic_accelerator/hyper/cyborg + holds_charge = TRUE + unique_frequency = TRUE + /obj/item/weapon/gun/energy/kinetic_accelerator/New() . = ..() if(!holds_charge) diff --git a/code/modules/research/designs/mechfabricator_designs.dm b/code/modules/research/designs/mechfabricator_designs.dm index 941083c5da6..8f2b16626d3 100644 --- a/code/modules/research/designs/mechfabricator_designs.dm +++ b/code/modules/research/designs/mechfabricator_designs.dm @@ -960,34 +960,13 @@ category = list("Exosuit Equipment") //Cyborg Upgrade Modules -/datum/design/borg_syndicate_module - name = "Borg Illegal Weapons Upgrade" - desc = "Allows for the construction of illegal upgrades for cyborgs" - id = "borg_syndicate_module" - build_type = MECHFAB - req_tech = list("combat" = 4, "syndicate" = 3) - build_path = /obj/item/borg/upgrade/syndicate - materials = list(MAT_METAL=10000,MAT_GLASS=15000,MAT_DIAMOND = 10000) - construction_time = 120 - category = list("Cyborg Upgrade Modules") -/datum/design/borg_upgrade_jetpack - name = "Cyborg Upgrade Module (Mining Jetpack)" - id = "borg_upgrade_jetpack" +/datum/design/borg_upgrade_reset + name = "Cyborg Upgrade Module (Reset)" + id = "borg_upgrade_reset" build_type = MECHFAB - build_path = /obj/item/borg/upgrade/jetpack - req_tech = list("engineering" = 4, "power" = 4) - materials = list(MAT_METAL=10000, MAT_PLASMA=5000, MAT_URANIUM = 6000) - construction_time = 120 - category = list("Cyborg Upgrade Modules") - -/datum/design/borg_upgrade_disablercooler - name = "Cyborg Upgrade Module (Rapid Disabler Cooling)" - id = "borg_upgrade_disablercooler" - build_type = MECHFAB - build_path = /obj/item/borg/upgrade/disablercooler - req_tech = list("combat" = 5, "power" = 4) - materials = list(MAT_METAL=80000 , MAT_GLASS=6000 , MAT_GOLD= 2000, MAT_DIAMOND = 500) + build_path = /obj/item/borg/upgrade/reset + materials = list(MAT_METAL=10000) construction_time = 120 category = list("Cyborg Upgrade Modules") @@ -1000,15 +979,6 @@ construction_time = 120 category = list("Cyborg Upgrade Modules") -/datum/design/borg_upgrade_reset - name = "Cyborg Upgrade Module (Reset)" - id = "borg_upgrade_reset" - build_type = MECHFAB - build_path = /obj/item/borg/upgrade/reset - materials = list(MAT_METAL=10000) - construction_time = 120 - category = list("Cyborg Upgrade Modules") - /datum/design/borg_upgrade_restart name = "Cyborg Upgrade Module (Restart)" id = "borg_upgrade_restart" @@ -1028,6 +998,26 @@ construction_time = 120 category = list("Cyborg Upgrade Modules") +/datum/design/borg_upgrade_thrusters + name = "Cyborg Upgrade (Ion Thrusters)" + id = "borg_upgrade_thrusters" + build_type = MECHFAB + build_path = /obj/item/borg/upgrade/thrusters + req_tech = list("engineering" = 4, "powerstorage" = 4) + materials = list(MAT_METAL=10000, MAT_PLASMA=5000, MAT_URANIUM = 6000) + construction_time = 120 + category = list("Cyborg Upgrade Modules") + +/datum/design/borg_upgrade_disablercooler + name = "Cyborg Upgrade Module (Rapid Disabler Cooling)" + id = "borg_upgrade_disablercooler" + build_type = MECHFAB + build_path = /obj/item/borg/upgrade/disablercooler + req_tech = list("combat" = 5, "power" = 4) + materials = list(MAT_METAL=80000 , MAT_GLASS=6000 , MAT_GOLD= 2000, MAT_DIAMOND = 500) + construction_time = 120 + category = list("Cyborg Upgrade Modules") + /datum/design/borg_upgrade_diamonddrill name = "Cyborg Upgrade (Diamond Drill)" id = "borg_upgrade_diamonddrill" @@ -1048,6 +1038,36 @@ construction_time = 120 category = list("Cyborg Upgrade Modules") +/datum/design/borg_upgrade_hyperka + name = "Cyborg Upgrade (Hyper-Kinetic Accelerator)" + id = "borg_upgrade_hyperka" + req_tech = list("materials" = 7, "powerstorage" = 5, "engineering" = 5, "magnets" = 5, "combat" = 4) + build_type = MECHFAB //Reqs same as human Hyper KA + materials = list(MAT_METAL = 8000, MAT_GLASS = 1500, MAT_SILVER = 2000, MAT_GOLD = 2000, MAT_DIAMOND = 2000) + build_path = /obj/item/borg/upgrade/hyperka + construction_time = 120 + category = list("Cyborg Upgrade Modules") + +/datum/design/borg_syndicate_module + name = "Cyborg Upgrade (Illegal Modules)" + id = "borg_syndicate_module" + build_type = MECHFAB + req_tech = list("combat" = 4, "syndicate" = 3) + build_path = /obj/item/borg/upgrade/syndicate + materials = list(MAT_METAL=10000,MAT_GLASS=15000,MAT_DIAMOND = 10000) + construction_time = 120 + category = list("Cyborg Upgrade Modules") + +/datum/design/borg_upgrade_selfrepair + name = "Cyborg Upgrade (Self-repair)" + id = "borg_upgrade_selfrepair" + build_type = MECHFAB + build_path = /obj/item/borg/upgrade/selfrepair + req_tech = list("materials" = 4, "engineering" = 4) + materials = list(MAT_METAL=15000, MAT_GLASS=15000) + construction_time = 120 + category = list("Cyborg Upgrade Modules") + //Misc /datum/design/mecha_tracking name = "Exosuit Tracking Beacon" diff --git a/code/modules/telesci/gps.dm b/code/modules/telesci/gps.dm index ee698cec30f..34db61ba18b 100644 --- a/code/modules/telesci/gps.dm +++ b/code/modules/telesci/gps.dm @@ -79,3 +79,9 @@ var/list/GPS_list = list() icon_state = "gps-m" gpstag = "MINE0" desc = "A positioning system helpful for rescuing trapped or injured miners, keeping one on you at all times while mining might just save your life." + +/obj/item/device/gps/cyborg + icon_state = "gps-b" + gpstag = "BORG0" + desc = "A mining cyborg internal positioning system. Used as a recovery beacon for damaged cyborg assets, or a collaboration tool for mining teams." + flags = NODROP \ No newline at end of file diff --git a/icons/mob/screen_robot.dmi b/icons/mob/screen_robot.dmi index 0128584d28485935521e0301d89092032aeed117..000317e3f12d678e59f7f97039bae325d6869c0e 100644 GIT binary patch delta 9568 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 diff --git a/icons/obj/module.dmi b/icons/obj/module.dmi index ffa5d773b97eeeb5ce3a816bc9e45d507585ac0b..6d5a5b70d418bddda519a780eec34f5bf8ad0db1 100644 GIT binary patch literal 3350 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 Jr}{oT_FtxXXs7@H literal 2184 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 Date: Mon, 11 Jul 2016 09:23:43 -0400 Subject: [PATCH 2/2] differences --- code/game/objects/items/robot/robot_upgrades.dm | 5 ++++- code/modules/mob/living/silicon/robot/robot.dm | 10 +--------- 2 files changed, 5 insertions(+), 10 deletions(-) diff --git a/code/game/objects/items/robot/robot_upgrades.dm b/code/game/objects/items/robot/robot_upgrades.dm index 2c470acc0b5..3836b8eca80 100644 --- a/code/game/objects/items/robot/robot_upgrades.dm +++ b/code/game/objects/items/robot/robot_upgrades.dm @@ -89,7 +89,10 @@ if(ghost.mind && ghost.mind.current == R) R.key = ghost.key - R.revive() + R.stat = CONSCIOUS + dead_mob_list -= R //please never forget this ever kthx + living_mob_list += R + R.notify_ai(1) return 1 diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index 813789138b8..b18ff0abea3 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -1486,12 +1486,4 @@ var/list/robot_verbs_default = list( if(1) disable_component("comms", 160) if(2) - disable_component("comms", 60) - -/mob/living/silicon/robot/revive(admin_revive = 0) - if(..()) //successfully ressuscitated from death - update_headlamp() - if(admin_revive) - locked = 1 - notify_ai(1) - . = 1 \ No newline at end of file + disable_component("comms", 60) \ No newline at end of file