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..3836b8eca80 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) @@ -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, "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..b18ff0abea3 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. \ 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 0128584d284..000317e3f12 100644 Binary files a/icons/mob/screen_robot.dmi and b/icons/mob/screen_robot.dmi differ diff --git a/icons/obj/module.dmi b/icons/obj/module.dmi index ffa5d773b97..6d5a5b70d41 100644 Binary files a/icons/obj/module.dmi and b/icons/obj/module.dmi differ diff --git a/icons/obj/telescience.dmi b/icons/obj/telescience.dmi index 6b691557229..378da290cb8 100644 Binary files a/icons/obj/telescience.dmi and b/icons/obj/telescience.dmi differ