[MIRROR] robot upgrade overhaul + some fixes (#7640)

Co-authored-by: Heroman3003 <31296024+Heroman3003@users.noreply.github.com>
Co-authored-by: Kashargul <144968721+Kashargul@users.noreply.github.com>
Co-authored-by: CHOMPStation2 <chompsation2@gmail.com>
Co-authored-by: Aroliacue <96730930+Aroliacue@users.noreply.github.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Guti <32563288+TheCaramelion@users.noreply.github.com>
Co-authored-by: Raeschen <rycoop29@gmail.com>
Co-authored-by: Eli <fracshun@gmail.com>
Co-authored-by: tacoguy7765093 <karokaromaro@gmail.com>
Co-authored-by: Nadyr <41974248+Darlantanis@users.noreply.github.com>
Co-authored-by: Changelogs <action@github.com>
Co-authored-by: TheGreatKitsune <88862343+TheGreatKitsune@users.noreply.github.com>
Co-authored-by: Missile597 <150307788+Missile597@users.noreply.github.com>
This commit is contained in:
CHOMPStation2
2024-01-31 10:55:35 -07:00
committed by GitHub
parent 7f4274a2d8
commit 5ecc743ce5
23 changed files with 804 additions and 548 deletions

View File

@@ -7,8 +7,10 @@
#define MODIFIY_ROBOT_MODULE_ADD "Add a Module"
#define MODIFIY_ROBOT_MODULE_REMOVE "Remove a Module"
#define MODIFIY_ROBOT_APPLY_UPGRADE "Apply an Upgrade"
#define MODIFIY_ROBOT_SUPP_ADD "Add Upgrade Support"
#define MODIFIY_ROBOT_SUPP_REMOVE "Remove Upgrade Support"
#define MODIFIY_ROBOT_RADIOC_ADD "Add a Radio Channel"
#define MODIFIY_ROBOT_RADIOC_REMOVE "Remove a Radio Channel"
#define MODIFIY_ROBOT_COMP_ADD "Replace a Component"
#define MODIFIY_ROBOT_COMP_REMOVE "Remove a Component"
#define MODIFIY_ROBOT_RESET_MODULE "Fully Resets a Robot Module"
#define MODIFIY_ROBOT_RESET_MODULE "Fully Reset Robot Module"

View File

@@ -1,15 +1,30 @@
/// Module is compatible with All Cyborg models, utility upgrades
#define BORG_UTILITY (1<<0)
/// Module is compatible with All Cyborg models, basic upgrades
#define BORG_BASIC (1<<1)
/// Module is compatible with All Cyborg models, advanced upgrades
#define BORG_ADVANCED (1<<2)
/// Module is compatible with Security Cyborg models
#define BORG_MODULE_SECURITY (1<<0)
#define BORG_MODULE_SECURITY (1<<3)
/// Module is compatible with Miner Cyborg models
#define BORG_MODULE_MINER (1<<1)
#define BORG_MODULE_MINER (1<<4)
/// Module is compatible with Janitor Cyborg models
#define BORG_MODULE_JANITOR (1<<2)
#define BORG_MODULE_JANITOR (1<<5)
/// Module is compatible with Medical Cyborg models
#define BORG_MODULE_MEDICAL (1<<3)
#define BORG_MODULE_MEDICAL (1<<6)
/// Module is compatible with Engineering Cyborg models
#define BORG_MODULE_ENGINEERING (1<<4)
#define BORG_MODULE_ENGINEERING (1<<7)
/// Module is compatible with Science Cyborg models
#define BORG_MODULE_SCIENCE (1<<5)
#define BORG_MODULE_SCIENCE (1<<8)
/// Module is compatible with Service Cyborg models
#define BORG_MODULE_SERVICE (1<<9)
/// Module is compatible with Clerical Cyborg models
#define BORG_MODULE_CLERIC (1<<10)
/// Module is compatible with Combat Cyborg models
#define BORG_MODULE_COMBAT (1<<11)
/// Module is compatible with Exploration Cyborg models
#define BORG_MODULE_EXPLO (1<<12)
/// Module is compatible with Ripley Exosuit models
#define EXOSUIT_MODULE_RIPLEY (1<<0)
/// Module is compatible with Odyseeus Exosuit models

View File

@@ -38,7 +38,7 @@
/datum/supply_pack/recreation/donksoftborg
name = "Donk-Soft Cyborg Blaster Crate"
contains = list(
/obj/item/borg/upgrade/toygun = 2,
/obj/item/borg/upgrade/no_prod/toygun = 2,
)
cost = 35
containertype = /obj/structure/closet/crate/allico

View File

@@ -139,6 +139,12 @@
var/module_types = initial(U.module_flags)
sub_category = list()
if(module_types)
if(module_types & BORG_UTILITY)
sub_category += "All Cyborgs - Utility"
if(module_types & BORG_BASIC)
sub_category += "All Cyborgs - Basic"
if(module_types & BORG_ADVANCED)
sub_category += "All Cyborgs - Advanced"
if(module_types & BORG_MODULE_SECURITY)
sub_category += "Security"
if(module_types & BORG_MODULE_MINER)
@@ -151,9 +157,16 @@
sub_category += "Engineering"
if(module_types & BORG_MODULE_SCIENCE)
sub_category += "Science"
if(module_types & BORG_MODULE_SERVICE)
sub_category += "Service"
if(module_types & BORG_MODULE_CLERIC)
sub_category += "Cleric"
if(module_types & BORG_MODULE_COMBAT)
sub_category += "Combat"
if(module_types & BORG_MODULE_EXPLO)
sub_category += "Exploration"
else
sub_category += "All Cyborgs"
sub_category += "This shouldn't be here, bother a dev!"
// Else check if this design builds a piece of exosuit equipment.
else if(built_item in typesof(/obj/item/mecha_parts/mecha_equipment))
var/obj/item/mecha_parts/mecha_equipment/E = built_item

View File

@@ -18,31 +18,39 @@
return 1
return 0
/* ######################################################################################################
# Utility section. All reusable upgrades without lasting effects, like renaming, reset, etc. go here.#
######################################################################################################*/
/obj/item/borg/upgrade/reset
/obj/item/borg/upgrade/utility
module_flags = BORG_UTILITY
/obj/item/borg/upgrade/utility/reset
name = "robotic module reset board"
desc = "Used to reset a cyborg's module. Destroys any other upgrades applied to the robot."
desc = "Used to reset a cyborg's module. Destroys any higher than basic upgrades applied to the robot."
icon_state = "cyborg_upgrade1"
item_state = "cyborg_upgrade"
require_module = 1
/obj/item/borg/upgrade/reset/action(var/mob/living/silicon/robot/R)
if(..())
return 0
/obj/item/borg/upgrade/utility/reset/action(var/mob/living/silicon/robot/R)
if(..()) return 0
R.module_reset()
return 1
/obj/item/borg/upgrade/rename
/obj/item/borg/upgrade/utility/rename
name = "robot reclassification board"
desc = "Used to rename a cyborg."
icon_state = "cyborg_upgrade1"
item_state = "cyborg_upgrade"
var/heldname = "default name"
/obj/item/borg/upgrade/rename/attack_self(mob/user as mob)
heldname = sanitizeSafe(tgui_input_text(user, "Enter new robot name", "Robot Reclassification", heldname, MAX_NAME_LEN), MAX_NAME_LEN)
/obj/item/borg/upgrade/utility/rename/attack_self(mob/user as mob)
var/new_name = sanitizeSafe(tgui_input_text(user, "Enter new robot name", "Robot Reclassification", heldname, MAX_NAME_LEN), MAX_NAME_LEN)
if(new_name)
heldname = new_name
/obj/item/borg/upgrade/rename/action(var/mob/living/silicon/robot/R)
/obj/item/borg/upgrade/utility/rename/action(var/mob/living/silicon/robot/R)
if(..()) return 0
R.notify_ai(ROBOT_NOTIFICATION_NEW_NAME, R.name, heldname)
R.name = heldname
@@ -51,14 +59,17 @@
return 1
/obj/item/borg/upgrade/restart
/obj/item/borg/upgrade/utility/restart
name = "robot emergency restart module"
desc = "Used to force a restart of a disabled-but-repaired robot, bringing it back online."
icon_state = "cyborg_upgrade1"
item_state = "cyborg_upgrade"
/obj/item/borg/upgrade/restart/action(var/mob/living/silicon/robot/R)
/obj/item/borg/upgrade/utility/restart/action(var/mob/living/silicon/robot/R)
if(R.stat == CONSCIOUS)
return 0
if(R.health < 0)
to_chat(usr, "You have to repair the robot before using this module!")
return 0
@@ -75,133 +86,82 @@
R.notify_ai(ROBOT_NOTIFICATION_NEW_UNIT)
return 1
/* ###################################################################################
# Basic section. All upgrades which effect the robot's variables directly go here.#
###################################################################################*/
/obj/item/borg/upgrade/vtec
/obj/item/borg/upgrade/basic
module_flags = BORG_BASIC
/obj/item/borg/upgrade/basic/vtec
name = "robotic VTEC Module"
desc = "Used to kick in a robot's VTEC systems, increasing their speed."
icon_state = "cyborg_upgrade2"
item_state = "cyborg_upgrade"
require_module = 1
/obj/item/borg/upgrade/vtec/action(var/mob/living/silicon/robot/R)
/obj/item/borg/upgrade/basic/vtec/action(var/mob/living/silicon/robot/R)
if(..()) return 0
if(R.speed == -1 || (/mob/living/silicon/robot/proc/toggle_vtec in R.verbs))
if(R.has_basic_upgrade(type))
to_chat(R, "Actuator already running on overdrive mode!")
to_chat(usr, "It'd be unwise to plug another vtec module in!")
return 0
R.verbs += /mob/living/silicon/robot/proc/toggle_vtec
R.speed--
R.speed = -1
return 1
/obj/item/borg/upgrade/tasercooler
name = "robotic Rapid Taser Cooling Module"
desc = "Used to cool a mounted taser, increasing the potential current in it and thus its recharge rate."
icon_state = "cyborg_upgrade3"
item_state = "cyborg_upgrade"
module_flags = BORG_MODULE_SECURITY
require_module = 1
/obj/item/borg/upgrade/tasercooler/action(var/mob/living/silicon/robot/R)
if(..()) return 0
if(!R.module || !(type in R.module.supported_upgrades))
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/taser/mounted/cyborg/T = locate() in R.module
if(!T)
T = locate() in R.module.contents
if(!T)
T = locate() in R.module.modules
if(!T)
to_chat(usr, "<span class='warning'>This robot has had its taser removed!</span>")
return 0
if(T.recharge_time <= 2)
to_chat(R, "Maximum cooling achieved for this hardpoint!")
to_chat(usr, "There's no room for another cooling unit!")
return 0
else
T.recharge_time = max(2 , T.recharge_time - 4)
return 1
/obj/item/borg/upgrade/jetpack
name = "robot jetpack"
desc = "A carbon dioxide jetpack suitable for low-gravity operations."
icon_state = "cyborg_upgrade3"
/obj/item/borg/upgrade/basic/sizeshift
name = "robot size alteration module"
desc = "Using technology similar to one used in sizeguns, allows cyborgs to adjust their own size as neccesary."
icon_state = "cyborg_upgrade2"
item_state = "cyborg_upgrade"
require_module = 1
/obj/item/borg/upgrade/jetpack/action(var/mob/living/silicon/robot/R)
/obj/item/borg/upgrade/basic/sizeshift/action(var/mob/living/silicon/robot/R)
if(..()) return 0
var/obj/item/weapon/tank/jetpack/carbondioxide/T = locate() in R.module
if(!T)
T = locate() in R.module.contents
if(!T)
T = locate() in R.module.modules
if(!T)
R.module.modules += new/obj/item/weapon/tank/jetpack/carbondioxide(R.module)
for(var/obj/item/weapon/tank/jetpack/carbondioxide in R.module.modules)
R.internals = src
return 1
if(T)
to_chat(R, "Upgrade mounting error! No suitable hardpoint detected!")
to_chat(usr, "There's no mounting point for the module!")
if(R.has_basic_upgrade(type))
to_chat(R, "Size alteration module already applied!")
to_chat(usr, "There's no space for another size alteration module!")
return 0
/obj/item/borg/upgrade/advhealth
name = "advanced health analyzer module"
desc = "An Advanced Health Analyzer, optimized for borg mounting."
icon_state = "cyborg_upgrade3"
item_state = "cyborg_upgrade"
require_module = 1
/obj/item/borg/upgrade/advhealth/action(var/mob/living/silicon/robot/R)
if(..()) return 0
var/obj/item/device/healthanalyzer/advanced/T = locate() in R.module
if(!T)
T = locate() in R.module.contents
if(!T)
T = locate() in R.module.modules
if(!T)
R.module.modules += new/obj/item/device/healthanalyzer/advanced(R.module)
R.verbs += /mob/living/proc/set_size
return 1
if(T)
to_chat(R, "Upgrade mounting error! No suitable hardpoint detected!")
to_chat(usr, "There's no mounting point for the module!")
return 0
/obj/item/borg/upgrade/syndicate/
/obj/item/borg/upgrade/basic/syndicate
name = "scrambled equipment module"
desc = "Unlocks new and often deadly module specific items of a robot"
icon_state = "cyborg_upgrade3"
item_state = "cyborg_upgrade"
require_module = 1
/obj/item/borg/upgrade/syndicate/action(var/mob/living/silicon/robot/R)
/obj/item/borg/upgrade/basic/syndicate/action(var/mob/living/silicon/robot/R)
if(..()) return 0
if(R.emag_items == 1)
if(R.has_basic_upgrade(type))
to_chat(R, "Secret modules already unlocked!")
to_chat(usr, "Plugging another scambled module would be useless!")
return 0
R.emag_items = 1
return 1
/obj/item/borg/upgrade/language
/obj/item/borg/upgrade/basic/language
name = "language module"
desc = "Used to let cyborgs other than clerical or service speak a variety of languages."
icon_state = "cyborg_upgrade3"
item_state = "cyborg_upgrade"
/obj/item/borg/upgrade/language/action(var/mob/living/silicon/robot/R)
/obj/item/borg/upgrade/basic/language/action(var/mob/living/silicon/robot/R)
if(..()) return 0
if(R.has_basic_upgrade(type))
to_chat(R, "All possible languages already uploaded!")
to_chat(usr, "The language database is up to date!")
return 0
R.add_language(LANGUAGE_SOL_COMMON, 1)
R.add_language(LANGUAGE_TRADEBAND, 1)
R.add_language(LANGUAGE_UNATHI, 1)
@@ -213,5 +173,301 @@
R.add_language(LANGUAGE_ROOTLOCAL, 1)
R.add_language(LANGUAGE_TERMINUS, 1)
R.add_language(LANGUAGE_ZADDAT, 1)
R.add_language(LANGUAGE_BIRDSONG, 1)
R.add_language(LANGUAGE_SAGARU, 1)
R.add_language(LANGUAGE_CANILUNZT, 1)
R.add_language(LANGUAGE_ECUREUILIAN, 1)
R.add_language(LANGUAGE_DAEMON, 1)
R.add_language(LANGUAGE_ENOCHIAN, 1)
R.add_language(LANGUAGE_DRUDAKAR, 1)
R.add_language(LANGUAGE_TAVAN, 1)
R.add_language(LANGUAGE_SIGN, 1)
R.add_language(LANGUAGE_VOX, 1)
R.add_language(LANGUAGE_ALAI, 1)
R.add_language(LANGUAGE_PROMETHEAN, 1)
R.add_language(LANGUAGE_GIBBERISH, 1)
R.add_language(LANGUAGE_VESPINAE, 1)
R.add_language(LANGUAGE_SPACER, 1)
R.add_language(LANGUAGE_MOUSE, 1)
R.add_language(LANGUAGE_ANIMAL, 1)
R.add_language(LANGUAGE_TEPPI, 1)
//CHOMPEdit Start
R.add_language(LANGUAGE_SLAVIC, 1)
R.add_language(LANGUAGE_MARISH, 1)
//CHOMPEdit End
/* Admin Stuff
R.add_language(LANGUAGE_CULT, 1)
R.add_language(LANGUAGE_SWARMBOT, 1)
R.add_language(LANGUAGE_MINBUS, 1)
R.add_language(LANGUAGE_EVENT1, 1)
*/
/* We don't want telepathy, but want to mark it that it's not been oversighted
R.add_language(LANGUAGE_CHANGELING, 1)
R.add_language(LANGUAGE_ROOTGLOBAL, 1)
R.add_language(LANGUAGE_SHADEKIN, 1)
*/
return 1
/* ###########################################################################
# Advanced section. All upgrades which effect the robot's modules go here.#
###########################################################################*/
/obj/item/borg/upgrade/advanced
module_flags = BORG_ADVANCED
/obj/item/borg/upgrade/advanced/bellysizeupgrade
name = "robohound capacity expansion module"
desc = "Used to double a robohound's belly capacity. This only affects total volume, and won't allow support of more than one patient in case of sleeper bellies. Can only be applied once."
icon_state = "cyborg_upgrade2"
item_state = "cyborg_upgrade"
require_module = 1
/obj/item/borg/upgrade/advanced/bellysizeupgrade/action(var/mob/living/silicon/robot/R)
if(..()) return 0
var/obj/T = R.has_upgrade_module(/obj/item/device/dogborg/sleeper)
if(!T)
to_chat(usr, "<span class='warning'>This robot has had its processor removed!</span>")
return 0
if(R.has_advanced_upgrade(type))
to_chat(R, "Maximum capacity achieved for this hardpoint!")
to_chat(usr, "There's no room for another capacity upgrade!")
return 0
var/obj/item/device/dogborg/sleeper/B = T
var/X = B.max_item_count*2
B.max_item_count = X //I couldn't do T = maxitem*2 for some reason.
to_chat(R, "Internal capacity doubled.")
to_chat(usr, "Internal capacity doubled.")
B.upgraded_capacity = TRUE
return 1
/obj/item/borg/upgrade/advanced/jetpack
name = "robot jetpack"
desc = "A carbon dioxide jetpack suitable for low-gravity operations."
icon_state = "cyborg_upgrade3"
item_state = "cyborg_upgrade"
require_module = 1
/obj/item/borg/upgrade/advanced/jetpack/action(var/mob/living/silicon/robot/R)
if(..()) return 0
if(R.has_advanced_upgrade(type))
to_chat(R, "Upgrade mounting error! No suitable hardpoint detected!")
to_chat(usr, "There's no mounting point for the module!")
return 0
R.module.modules += new/obj/item/weapon/tank/jetpack/carbondioxide(R.module)
for(var/obj/item/weapon/tank/jetpack/carbondioxide in R.module.modules)
R.internals = src
return 1
/obj/item/borg/upgrade/advanced/advhealth
name = "advanced health analyzer module"
desc = "An Advanced Health Analyzer, optimized for borg mounting."
icon_state = "cyborg_upgrade3"
item_state = "cyborg_upgrade"
require_module = 1
/obj/item/borg/upgrade/advanced/advhealth/action(var/mob/living/silicon/robot/R)
if(..()) return 0
if(R.has_advanced_upgrade(type))
to_chat(R, "Upgrade mounting error! No suitable hardpoint detected!")
to_chat(usr, "There's no mounting point for the module!")
return 0
R.module.modules += new/obj/item/device/healthanalyzer/advanced(R.module)
return 1
//Robot size gun
/obj/item/borg/upgrade/advanced/sizegun
name = "robot mounted size gun"
desc = "A size gun adapted for installation in cyborgs, allows them to turn people pocket-sized among other uses. What could go wrong?"
icon_state = "cyborg_upgrade2"
item_state = "cyborg_upgrade"
require_module = 1
/obj/item/borg/upgrade/advanced/sizegun/action(var/mob/living/silicon/robot/R)
if(..()) return 0
if(R.has_advanced_upgrade(type))
to_chat(R, "Upgrade mounting error! No suitable hardpoint detected!")
to_chat(usr, "There's no mounting point for the module!")
return 0
R.module.modules += new/obj/item/weapon/gun/energy/sizegun/mounted(R.module)
return 1
/* ##############################################################################
# Restricted section. All upgrades which only work on specific modules go here.#
##############################################################################*/
//adds the capability to ingest items to the sleeper modules as optional upgrade
/obj/item/borg/upgrade/restricted/bellycapupgrade
name = "robohound capability expansion module"
desc = "Used to enable a robohound's sleeper to ingest items. This only affects sleepers, and has no effect on compactor bellies. Can only be applied once."
icon_state = "cyborg_upgrade2"
item_state = "cyborg_upgrade"
require_module = 1
module_flags = BORG_MODULE_SECURITY | BORG_MODULE_MEDICAL | BORG_MODULE_COMBAT
/obj/item/borg/upgrade/restricted/bellycapupgrade/action(var/mob/living/silicon/robot/R)
if(..()) return 0
if(!R.supports_upgrade(type))
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/T = R.has_upgrade_module(/obj/item/device/dogborg/sleeper)
if(!T)
to_chat(usr, "<span class='warning'>This robot has had its processor removed!</span>")
return 0
if(R.has_restricted_upgrade(type))
to_chat(R, "Maximum capability achieved for this hardpoint!")
to_chat(usr, "There's no room for another capability upgrade!")
return 0
var/obj/item/device/dogborg/sleeper/B = T
var/X = B.max_item_count*2 //double the capacity from 1 to 2 to allow sleepers to store some items, at most 4 with both upgrades
B.max_item_count = X //I couldn't do T = maxitem*2 for some reason.
to_chat(R, "Internal capability upgraded.")
to_chat(usr, "Internal capability upgraded.")
B.compactor = TRUE
return 1
/obj/item/borg/upgrade/restricted/tasercooler
name = "robotic Rapid Taser Cooling Module"
desc = "Used to cool a mounted taser, increasing the potential current in it and thus its recharge rate."
icon_state = "cyborg_upgrade3"
item_state = "cyborg_upgrade"
module_flags = BORG_MODULE_SECURITY
require_module = 1
/obj/item/borg/upgrade/restricted/tasercooler/action(var/mob/living/silicon/robot/R)
if(..()) return 0
if(!R.supports_upgrade(type))
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/T = R.has_upgrade_module(/obj/item/weapon/gun/energy/taser/mounted/cyborg)
if(!T)
to_chat(usr, "<span class='warning'>This robot has had its taser removed!</span>")
return 0
if(R.has_restricted_upgrade(type))
to_chat(R, "Maximum cooling achieved for this hardpoint!")
to_chat(usr, "There's no room for another cooling unit!")
return 0
var/obj/item/weapon/gun/energy/taser/mounted/cyborg/B = T
B.recharge_time = max(2 , B.recharge_time - 4)
return 1
//Advanced RPED
/obj/item/borg/upgrade/restricted/advrped
name = "Advanced Rapid Part Exchange Device"
desc = "An ARPED, now in borg size!"
icon_state = "cyborg_upgrade3"
item_state = "cyborg_upgrade"
module_flags = BORG_MODULE_SCIENCE
require_module = 1
/obj/item/borg/upgrade/restricted/advrped/action(var/mob/living/silicon/robot/R)
if(..()) return 0
if(!R.supports_upgrade(type))
to_chat(R, "Upgrade mounting error! No suitable hardpoint detected!")
to_chat(usr, "There's no mounting point for the module!")
return 0
if(R.has_restricted_upgrade(type))
to_chat(R, "Upgrade mounting error! No suitable hardpoint detected!")
to_chat(usr, "There's no mounting point for the module!")
return 0
R.module.modules += new/obj/item/weapon/storage/part_replacer/adv(R.module)
return 1
//Diamond Drill
/obj/item/borg/upgrade/restricted/diamonddrill
name = "Mounted Diamond Drill"
desc = "An advanced drill, optimized for borg use."
icon_state = "cyborg_upgrade3"
item_state = "cyborg_upgrade"
module_flags = BORG_MODULE_MINER
require_module = 1
/obj/item/borg/upgrade/restricted/diamonddrill/action(var/mob/living/silicon/robot/R)
if(..()) return 0
if(!R.supports_upgrade(type))
to_chat(R, "Upgrade mounting error! No suitable hardpoint detected!")
to_chat(usr, "There's no mounting point for the module!")
return 0
if(R.has_restricted_upgrade(type))
to_chat(R, "Upgrade mounting error! No suitable hardpoint detected!")
to_chat(usr, "There's no mounting point for the module!")
return 0
R.module.modules += new/obj/item/weapon/pickaxe/diamonddrill(R.module)
return 1
//PKA
/obj/item/borg/upgrade/restricted/pka
name = "Protokenetic Accelerator Upgrade"
desc = "A borg mounted PKA Rifle for use in mining and wildlife defense."
icon_state = "cyborg_upgrade3"
item_state = "cyborg_upgrade"
module_flags = BORG_MODULE_MINER
require_module = 1
/obj/item/borg/upgrade/restricted/pka/action(var/mob/living/silicon/robot/R)
if(..()) return 0
if(!R.supports_upgrade(type))
to_chat(R, "Upgrade mounting error! No suitable hardpoint detected!")
to_chat(usr, "There's no mounting point for the module!")
return 0
if(R.has_restricted_upgrade(type))
to_chat(R, "Upgrade mounting error! No suitable hardpoint detected!")
to_chat(usr, "There's no mounting point for the module!")
return 0
R.module.modules += new/obj/item/weapon/gun/energy/kinetic_accelerator/cyborg(R.module)
return 1
/* ###############################################
# Unsorted section. All cargo modules go here.#
###############################################*/
/obj/item/borg/upgrade/no_prod
var/hidden_from_scan = 0//use this for unproduceable modules you want to hide from scanning (e.g. event tools / admeme)
//cyborg foam dart gun
/obj/item/borg/upgrade/no_prod/toygun
name = "Donk-Soft Cyborg Blaster module" //Cyborg Blaster is capitalized because it's the brand name
desc = "A foam dart gun designed for mounting into cyborgs. It's Donk or Don't! DISCLAIMER: Donk-Soft bears no responsibility for incidents relating to cyborgs becoming too accustomed to shooting at crew. Installation of the Donk-Soft Cyborg Blaster must be performed only by a licensed roboticist."
icon_state = "cyborg_upgrade5"
item_state = "cyborg_upgrade"
require_module = 1
/obj/item/borg/upgrade/no_prod/toygun/action(var/mob/living/silicon/robot/R)
if(..()) return 0
if(R.has_no_prod_upgrade(type))
to_chat(R, "Upgrade mounting error! No suitable hardpoint detected!")
to_chat(usr, "There's no mounting point for the module!")
return 0
R.module.modules += new/obj/item/weapon/gun/projectile/cyborgtoy(R.module)
return 1

View File

@@ -1,243 +0,0 @@
/obj/item/borg/upgrade/language/action(var/mob/living/silicon/robot/R)
if(..())
R.add_language(LANGUAGE_BIRDSONG, 1)
R.add_language(LANGUAGE_SAGARU, 1)
R.add_language(LANGUAGE_CANILUNZT, 1)
R.add_language(LANGUAGE_ECUREUILIAN, 1)
R.add_language(LANGUAGE_DAEMON, 1)
R.add_language(LANGUAGE_ENOCHIAN, 1)
R.add_language(LANGUAGE_SLAVIC, 1) //CHOMP reAdd
R.add_language(LANGUAGE_DRUDAKAR, 1)
R.add_language(LANGUAGE_TAVAN, 1)
return 1
else
return 0
//Robot resizing module
/obj/item/borg/upgrade/sizeshift
name = "robot size alteration module"
desc = "Using technology similar to one used in sizeguns, allows cyborgs to adjust their own size as neccesary."
icon_state = "cyborg_upgrade2"
item_state = "cyborg_upgrade"
require_module = 1
/obj/item/borg/upgrade/sizeshift/action(var/mob/living/silicon/robot/R)
if(..()) return 0
if(/mob/living/proc/set_size in R.verbs)
return 0
R.verbs += /mob/living/proc/set_size
return 1
//Robot size gun
/obj/item/borg/upgrade/sizegun
name = "robot mounted size gun"
desc = "A size gun adapted for installation in cyborgs, allows them to turn people pocket-sized among other uses. What could go wrong?"
icon_state = "cyborg_upgrade2"
item_state = "cyborg_upgrade"
require_module = 1
/obj/item/borg/upgrade/sizegun/action(var/mob/living/silicon/robot/R)
if(..()) return 0
var/obj/item/weapon/gun/energy/sizegun/mounted/T = locate() in R.module
if(!T)
T = locate() in R.module.contents
if(!T)
T = locate() in R.module.modules
if(!T)
R.module.modules += new/obj/item/weapon/gun/energy/sizegun/mounted(R.module)
return 1
if(T)
to_chat(R, "Upgrade mounting error! No suitable hardpoint detected!")
to_chat(usr, "There's no mounting point for the module!")
return 0
/obj/item/borg/upgrade/bellysizeupgrade
name = "robohound capacity expansion module"
desc = "Used to double a robohound's belly capacity. This only affects total volume, and won't allow support of more than one patient in case of sleeper bellies. Can only be applied once."
icon_state = "cyborg_upgrade2"
item_state = "cyborg_upgrade"
require_module = 1
/obj/item/borg/upgrade/bellysizeupgrade/action(var/mob/living/silicon/robot/R)
if(..()) return 0
if(!R.module)//can work
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/device/dogborg/sleeper/T = locate() in R.module
if(!T)
T = locate() in R.module.contents
if(!T)
T = locate() in R.module.modules
if(!T)
to_chat(usr, "<span class='warning'>This robot has had its processor removed!</span>")
return 0
if(T.upgraded_capacity)// == TRUE
to_chat(R, "Maximum capacity achieved for this hardpoint!")
to_chat(usr, "There's no room for another capacity upgrade!")
return 0
else
var/X = T.max_item_count*2
T.max_item_count = X //I couldn't do T = maxitem*2 for some reason.
to_chat(R, "Internal capacity doubled.")
to_chat(usr, "Internal capacity doubled.")
T.upgraded_capacity = TRUE
return 1
//adds the capability to ingest items to the sleeper modules as optional upgrade
/obj/item/borg/upgrade/bellycapupgrade
name = "robohound capability expansion module"
desc = "Used to enable a robohound's sleeper to ingest items. This only affects sleepers, and has no effect on compactor bellies. Can only be applied once."
icon_state = "cyborg_upgrade2"
item_state = "cyborg_upgrade"
require_module = 1
/obj/item/borg/upgrade/bellycapupgrade/action(var/mob/living/silicon/robot/R)
if(..()) return 0
if(!R.module)//can work
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/device/dogborg/sleeper/T = locate() in R.module
if(!T)
T = locate() in R.module.contents
if(!T)
T = locate() in R.module.modules
if(!T)
to_chat(usr, "<span class='warning'>This robot has had its processor removed!</span>")
return 0
if(T.compactor)// == TRUE, the belly unit is a compactor and no sleeper unit already
to_chat(R, "Maximum capability achieved for this hardpoint!")
to_chat(usr, "There's no room for another capability upgrade!")
return 0
else
var/X = T.max_item_count*2 //double the capacity from 1 to 2 to allow sleepers to store some items, at most 4 with both upgrades
T.max_item_count = X //I couldn't do T = maxitem*2 for some reason.
to_chat(R, "Internal capability upgraded.")
to_chat(usr, "Internal capability upgraded.")
T.compactor = TRUE
return 1
//Advanced RPED
/obj/item/borg/upgrade/advrped
name = "Advanced Rapid Part Exchange Device"
desc = "An ARPED, now in borg size!"
icon_state = "cyborg_upgrade3"
item_state = "cyborg_upgrade"
module_flags = BORG_MODULE_SCIENCE
require_module = 1
/obj/item/borg/upgrade/advrped/action(var/mob/living/silicon/robot/R)
if(..()) return 0
var/obj/item/weapon/storage/part_replacer/adv/T = locate() in R.module
if(!R.module || !(type in R.module.supported_upgrades))
to_chat(R, "Upgrade mounting error! No suitable hardpoint detected!")
to_chat(usr, "There's no mounting point for the module!")
return 0
if(!T)
T = locate() in R.module.contents
if(!T)
T = locate() in R.module.modules
if(!T)
R.module.modules += new/obj/item/weapon/storage/part_replacer/adv(R.module)
return 1
if(T)
to_chat(R, "Upgrade mounting error! No suitable hardpoint detected!")
to_chat(usr, "There's no mounting point for the module!")
return 0
//Diamond Drill
/obj/item/borg/upgrade/diamonddrill
name = "Mounted Diamond Drill"
desc = "An advanced drill, optimized for borg use."
icon_state = "cyborg_upgrade3"
item_state = "cyborg_upgrade"
module_flags = BORG_MODULE_MINER
require_module = 1
/obj/item/borg/upgrade/diamonddrill/action(var/mob/living/silicon/robot/R)
if(..()) return 0
var/obj/item/weapon/pickaxe/diamonddrill/T = locate() in R.module
if(!R.module || !(type in R.module.supported_upgrades))
to_chat(R, "Upgrade mounting error! No suitable hardpoint detected!")
to_chat(usr, "There's no mounting point for the module!")
return 0
if(!T)
T = locate() in R.module.contents
if(!T)
T = locate() in R.module.modules
if(!T)
R.module.modules += new/obj/item/weapon/pickaxe/diamonddrill(R.module)
return 1
if(T)
to_chat(R, "Upgrade mounting error! No suitable hardpoint detected!")
to_chat(usr, "There's no mounting point for the module!")
return 0
//PKA
/obj/item/borg/upgrade/pka
name = "Protokenetic Accelerator Upgrade"
desc = "A borg mounted PKA Rifle for use in mining and wildlife defense."
icon_state = "cyborg_upgrade3"
item_state = "cyborg_upgrade"
module_flags = BORG_MODULE_MINER
require_module = 1
/obj/item/borg/upgrade/pka/action(var/mob/living/silicon/robot/R)
if(..()) return 0
var/obj/item/weapon/gun/energy/kinetic_accelerator/cyborg/T = locate() in R.module
if(!R.module || !(type in R.module.supported_upgrades))
to_chat(R, "Upgrade mounting error! No suitable hardpoint detected!")
to_chat(usr, "There's no mounting point for the module!")
return 0
if(!T)
T = locate() in R.module.contents
if(!T)
T = locate() in R.module.modules
if(!T)
R.module.modules += new/obj/item/weapon/gun/energy/kinetic_accelerator/cyborg(R.module)
return 1
if(T)
to_chat(R, "Upgrade mounting error! No suitable hardpoint detected!")
to_chat(usr, "There's no mounting point for the module!")
return 0
//cyborg foam dart gun
/obj/item/borg/upgrade/toygun
name = "Donk-Soft Cyborg Blaster module" //Cyborg Blaster is capitalized because it's the brand name
desc = "A foam dart gun designed for mounting into cyborgs. It's Donk or Don't! DISCLAIMER: Donk-Soft bears no responsibility for incidents relating to cyborgs becoming too accustomed to shooting at crew. Installation of the Donk-Soft Cyborg Blaster must be performed only by a licensed roboticist."
icon_state = "cyborg_upgrade5"
item_state = "cyborg_upgrade"
require_module = 1
/obj/item/borg/upgrade/toygun/action(var/mob/living/silicon/robot/R)
if(..()) return 0
var/obj/item/weapon/gun/projectile/cyborgtoy/T = locate() in R.module
if(!T)
T = locate() in R.module.contents
if(!T)
T = locate() in R.module.modules
if(!T)
R.module.modules += new/obj/item/weapon/gun/projectile/cyborgtoy(R.module)
return 1
if(T)
to_chat(R, "Upgrade mounting error! No suitable hardpoint detected!")
to_chat(usr, "There's no mounting point for the module!")
return 0

View File

@@ -349,7 +349,7 @@ Loot piles can be depleted, if loot_depleted is turned on. Note that players wh
/obj/item/weapon/stock_parts/subspace/treatment,
/obj/item/frame,
/obj/item/broken_device/random,
/obj/item/borg/upgrade/restart,
/obj/item/borg/upgrade/utility/restart,
/obj/item/weapon/cell,
/obj/item/weapon/cell/high,
/obj/item/weapon/cell/device,
@@ -407,10 +407,10 @@ Loot piles can be depleted, if loot_depleted is turned on. Note that players wh
/obj/item/device/tvcamera,
/obj/item/device/universal_translator,
/obj/item/device/aicard,
/obj/item/borg/upgrade/jetpack,
/obj/item/borg/upgrade/advhealth,
/obj/item/borg/upgrade/vtec,
/obj/item/borg/upgrade/tasercooler,
/obj/item/borg/upgrade/advanced/jetpack,
/obj/item/borg/upgrade/advanced/advhealth,
/obj/item/borg/upgrade/basic/vtec,
/obj/item/borg/upgrade/restricted/tasercooler,
/obj/item/mecha_parts/mecha_equipment/weapon/energy/riggedlaser,
/obj/item/mecha_parts/mecha_equipment/tool/drill/diamonddrill,
/obj/item/rig_module/device/drill,
@@ -917,11 +917,11 @@ Loot piles can be depleted, if loot_depleted is turned on. Note that players wh
rare_loot = list(
/obj/item/weapon/cell/super,
/obj/item/borg/upgrade/restart,
/obj/item/borg/upgrade/jetpack,
/obj/item/borg/upgrade/tasercooler,
/obj/item/borg/upgrade/syndicate,
/obj/item/borg/upgrade/vtec
/obj/item/borg/upgrade/utility/restart,
/obj/item/borg/upgrade/advanced/jetpack,
/obj/item/borg/upgrade/restricted/tasercooler,
/obj/item/borg/upgrade/basic/syndicate,
/obj/item/borg/upgrade/basic/vtec
)
// Contains old mediciation, most of it unidentified and has a good chance of being useless.

View File

@@ -3,7 +3,7 @@
set name = "Modify Robot Module"
set desc = "Allows to add or remove modules to/from robots."
set category = "Admin"
if(!check_rights(R_ADMIN, R_FUN, R_VAREDIT))
if(!check_rights(R_ADMIN))
return
if(!istype(target) || !target.module)
@@ -12,12 +12,16 @@
if(!target.module.modules)
return
var/list/modification_options = list(MODIFIY_ROBOT_MODULE_ADD,MODIFIY_ROBOT_MODULE_REMOVE, MODIFIY_ROBOT_APPLY_UPGRADE, MODIFIY_ROBOT_RADIOC_ADD, MODIFIY_ROBOT_RADIOC_REMOVE, MODIFIY_ROBOT_COMP_ADD, MODIFIY_ROBOT_COMP_REMOVE, MODIFIY_ROBOT_RESET_MODULE)
var/list/modification_options = list(MODIFIY_ROBOT_MODULE_ADD,MODIFIY_ROBOT_MODULE_REMOVE, MODIFIY_ROBOT_APPLY_UPGRADE, MODIFIY_ROBOT_SUPP_ADD, MODIFIY_ROBOT_SUPP_REMOVE, MODIFIY_ROBOT_RADIOC_ADD, MODIFIY_ROBOT_RADIOC_REMOVE, MODIFIY_ROBOT_COMP_ADD, MODIFIY_ROBOT_COMP_REMOVE, MODIFIY_ROBOT_RESET_MODULE)
while(TRUE)
var/modification_choice = tgui_input_list(usr, "Select if you want to add or remove a module to/from [target]","Choice", modification_options)
if(!modification_choice || modification_choice == "Cancel")
break
return
if(!target.module || !target.module.modules)
to_chat(usr, "<span class='danger'>[target] was recently reset, you must wait until module selection has been completed before continuing modifying.</span>")
continue
log_and_message_admins("[key_name(src)] has used MODIFYROBOT ([modification_choice]) on [key_name(target)].")
feedback_add_details("admin_verb","MODIFYROBOT") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
@@ -105,6 +109,7 @@
if(MODIFIY_ROBOT_APPLY_UPGRADE)
var/list/upgrades = list()
for(var/datum/design/item/prosfab/robot_upgrade/upgrade)
if(!(target.has_upgrade(initial(upgrade.build_path))))
upgrades[initial(upgrade.name)] = initial(upgrade.build_path)
while(TRUE)
var/selected_module_upgrade = tgui_input_list(usr, "Please select the module to remove", "Upgrades", upgrades)
@@ -114,9 +119,16 @@
if(tgui_alert(usr, "Are you sure that you want to install [selected_module_upgrade] and reset the robot's module?","Confirm",list("Yes","No"))=="No")
continue
var/new_upgrade = upgrades[capitalize(selected_module_upgrade)]
target.module.supported_upgrades += new_upgrade
upgrades.Remove(selected_module_upgrade)
var/obj/item/borg/upgrade/U = new new_upgrade(src)
if(selected_module_upgrade == "Rename Module")
var/obj/item/borg/upgrade/utility/rename/UN = U
var/new_name = sanitizeSafe(tgui_input_text(usr, "Enter new robot name", "Robot Reclassification", UN.heldname, MAX_NAME_LEN), MAX_NAME_LEN)
if(new_name)
UN.heldname = new_name
U = UN
if(istype(U, /obj/item/borg/upgrade/restricted))
target.module.supported_upgrades |= new_upgrade
if(U.action(target))
to_chat(usr, "<span class='danger'>You apply the [U] to [target]!</span>")
usr.drop_item()
@@ -143,6 +155,30 @@
modkits.Remove(selected_ka_upgrade)
M.install(kin, target)
capacity = kin.get_remaining_mod_capacity()
if(MODIFIY_ROBOT_SUPP_ADD)
var/list/whitelisted_upgrades = list()
for(var/datum/design/item/prosfab/robot_upgrade/restricted/upgrade)
if(!(initial(upgrade.build_path) in target.module.supported_upgrades))
whitelisted_upgrades[initial(upgrade.name)] = initial(upgrade.build_path)
while(TRUE)
var/selected_upgrade_type = tgui_input_list(usr, "Please select which upgrade you want this module to support", "Upgrades", whitelisted_upgrades)
if(!selected_upgrade_type || selected_upgrade_type == "Cancel")
break
var/upgrade_path = whitelisted_upgrades[capitalize(selected_upgrade_type)]
whitelisted_upgrades.Remove(selected_upgrade_type)
target.module.supported_upgrades |= upgrade_path
if(MODIFIY_ROBOT_SUPP_REMOVE)
var/list/whitelisted_upgrades = list()
for(var/datum/design/item/prosfab/robot_upgrade/restricted/upgrade)
if((initial(upgrade.build_path) in target.module.supported_upgrades))
whitelisted_upgrades[initial(upgrade.name)] = initial(upgrade.build_path)
while(TRUE)
var/selected_upgrade_type = tgui_input_list(usr, "Please select which upgrade you want this module to support", "Upgrades", whitelisted_upgrades)
if(!selected_upgrade_type || selected_upgrade_type == "Cancel")
break
var/upgrade_path = whitelisted_upgrades[capitalize(selected_upgrade_type)]
whitelisted_upgrades.Remove(selected_upgrade_type)
target.module.supported_upgrades -= upgrade_path
if(MODIFIY_ROBOT_RADIOC_ADD)
var/list/available_channels = radiochannels.Copy()
for(var/has_channel in target.radio.channels)
@@ -240,6 +276,6 @@
to_chat(usr, "<span class='danger'>You removed \"[C]\" from [target]</span>")
if(MODIFIY_ROBOT_RESET_MODULE)
if(tgui_alert(usr, "Are you sure that you want to reset the entire module?","Confirm",list("Yes","No"))=="No")
return
continue
target.module_reset()
to_chat(usr, "<span class='danger'>You resetted [target]'s module selection.</span>")

View File

@@ -413,11 +413,13 @@
if(H.internal_organs) H.internal_organs.Cut()
if(H.organs_by_name) H.organs_by_name.Cut()
if(H.internal_organs_by_name) H.internal_organs_by_name.Cut()
if(H.bad_external_organs) H.bad_external_organs.Cut()
H.organs = list()
H.internal_organs = list()
H.organs_by_name = list()
H.internal_organs_by_name = list()
H.bad_external_organs = list()
for(var/limb_type in has_limbs)
var/list/organ_data = has_limbs[limb_type]

View File

@@ -6,6 +6,7 @@
icon_state = "robotanalyzer"
item_state = "analyzer"
desc = "A hand-held scanner able to diagnose robotic injuries."
description_info = "Alt-click to toggle between robot analysis and robot module scan mode."
slot_flags = SLOT_BELT
throwforce = 3
w_class = ITEMSIZE_SMALL
@@ -18,6 +19,10 @@
/obj/item/device/robotanalyzer/attack(mob/living/M as mob, mob/living/user as mob)
do_scan(M, user)
/obj/item/device/robotanalyzer/AltClick(mob/user)
mode = !mode
user.show_message(span_blue("[mode ? "Toggled to cyborg analyzing mode." : "Toggled to cyborg upgrade scan mode."]"), 1)
/obj/item/device/robotanalyzer/proc/do_scan(mob/living/M as mob, mob/living/user as mob)
if((CLUMSY in user.mutations) && prob(50))
to_chat(user, span_red("You try to analyze the floor's vitals!"))
@@ -43,6 +48,7 @@
user.visible_message("<span class='notice'>\The [user] has analyzed [M]'s components.</span>","<span class='notice'>You have analyzed [M]'s components.</span>")
switch(scan_type)
if("robot")
if(mode)
var/BU = M.getFireLoss() > 50 ? "<b>[M.getFireLoss()]</b>" : M.getFireLoss()
var/BR = M.getBruteLoss() > 50 ? "<b>[M.getBruteLoss()]</b>" : M.getBruteLoss()
user.show_message(span_blue("Analyzing Results for [M]:\n\t Overall Status: [M.stat > 1 ? "fully disabled" : "[M.health - M.halloss]% functional"]"))
@@ -51,6 +57,21 @@
if(M.tod && M.stat == DEAD)
user.show_message(span_blue("Time of Disable: [M.tod]"))
var/mob/living/silicon/robot/H = M
var/obj/item/weapon/cell/cell = H.get_cell()
if(cell)
var/cell_charge = round(cell.percent())
var/cell_text
if(cell_charge > 60)
cell_text = span_green("[cell_charge]")
else if (cell_charge > 30)
cell_text = span_yellow("[cell_charge]")
else if (cell_charge > 10)
cell_text = span_orange("[cell_charge]")
else if (cell_charge > 1)
cell_text = span_red("[cell_charge]")
else
cell_text = span_red("<b>[cell_charge]</b>")
user.show_message("\t Power Cell Status: [span_blue("[capitalize(cell.name)]")] at [cell_text]% charge")
var/list/damaged = H.get_damaged_components(1,1,1)
user.show_message(span_blue("Localized Damage:"),1)
if(length(damaged)>0)
@@ -67,6 +88,79 @@
if(H.emagged && prob(5))
user.show_message(span_red("\t ERROR: INTERNAL SYSTEMS COMPROMISED"),1)
user.show_message(span_blue("Operating Temperature: [M.bodytemperature-T0C]&deg;C ([M.bodytemperature*1.8-459.67]&deg;F)"), 1)
else
var/mob/living/silicon/robot/H = M
var/obj/item/weapon/cell/cell = H.get_cell()
user.show_message(span_blue("Upgrade Analyzing Results for [M]:"))
if(cell)
user.show_message("\t Power Cell Details: [span_blue("[capitalize(cell.name)]")] with a capacity of [cell.maxcharge] at [round(cell.percent())]% charge")
var/show_title = TRUE
for(var/datum/design/item/prosfab/robot_upgrade/utility/upgrade)
var/obj/item/borg/upgrade/utility/upgrade_type = initial(upgrade.build_path)
var/needs_module = initial(upgrade_type.require_module)
if((!H.module && needs_module) || !initial(upgrade.name) || (H.stat != DEAD && initial(upgrade.name) == "Emergency Restart Module"))
continue
if(show_title)
user.show_message("\t Utility Modules, used for modifying purposes:")
show_title = FALSE
if(H.stat == DEAD)
if(initial(upgrade.name) == "Emergency Restart Module")
user.show_message(span_blue("\t\t [capitalize(initial(upgrade.name))]: [span_green("Usable")]"))
else
user.show_message(span_blue("\t\t [capitalize(initial(upgrade.name))]: [span_green("Usable")]"))
show_title = TRUE
for(var/datum/design/item/prosfab/robot_upgrade/basic/upgrade)
var/obj/item/borg/upgrade/basic/upgrade_type = initial(upgrade.build_path)
var/needs_module = initial(upgrade_type.require_module)
if((!H.module && needs_module) || !initial(upgrade.name) || H.stat == DEAD)
continue
if(show_title)
user.show_message("\t Basic Modules, used for direct upgrade purposes:")
show_title = FALSE
if(H.has_basic_upgrade(initial(upgrade.build_path)) == "")
user.show_message(span_blue("\t\t [capitalize(initial(upgrade.name))]: [span_red("<b>ERROR</b>")]"))
else
user.show_message(span_blue("\t\t [capitalize(initial(upgrade.name))]: [H.has_basic_upgrade(initial(upgrade.build_path)) ? span_green("Installed") : span_red("Missing")]"))
show_title = TRUE
for(var/datum/design/item/prosfab/robot_upgrade/advanced/upgrade)
var/obj/item/borg/upgrade/advanced/upgrade_type = initial(upgrade.build_path)
var/needs_module = initial(upgrade_type.require_module)
if((!H.module && needs_module) || !initial(upgrade.name) || H.stat == DEAD)
continue
if(show_title)
user.show_message("\t Advanced Modules, used for module upgrade purposes:")
show_title = FALSE
if(H.has_advanced_upgrade(initial(upgrade.build_path)) == "")
user.show_message(span_blue("\t\t [capitalize(initial(upgrade.name))]: [span_red("<b>ERROR</b>")]"))
else
user.show_message(span_blue("\t\t [capitalize(initial(upgrade.name))]: [H.has_advanced_upgrade(initial(upgrade.build_path)) ? span_green("Installed") : span_red("Missing")]"))
show_title = TRUE
for(var/datum/design/item/prosfab/robot_upgrade/restricted/upgrade)
var/obj/item/borg/upgrade/restricted/upgrade_type = initial(upgrade.build_path)
var/needs_module = initial(upgrade_type.require_module)
if((!H.module && needs_module) || !initial(upgrade.name) || !H.supports_upgrade(initial(upgrade.build_path)) || H.stat == DEAD)
continue
if(show_title)
user.show_message("\t Restricted Modules, used for module upgrade purposes on specific chassis:")
show_title = FALSE
if(H.has_restricted_upgrade(initial(upgrade.build_path)) == "")
user.show_message(span_blue("\t\t [capitalize(initial(upgrade.name))]: [span_red("<b>ERROR</b>")]"))
else
user.show_message(span_blue("\t\t [capitalize(initial(upgrade.name))]: [H.has_restricted_upgrade(initial(upgrade.build_path)) ? span_green("Installed") : span_red("Missing")]"))
show_title = TRUE
for(var/datum/design/item/prosfab/robot_upgrade/no_prod/upgrade)
var/obj/item/borg/upgrade/no_prod/upgrade_type = initial(upgrade.build_path)
var/needs_module = initial(upgrade_type.require_module)
var/hidden = initial(upgrade_type.hidden_from_scan)
if((!H.module && needs_module) || !initial(upgrade.name) || hidden || H.stat == DEAD)
continue
if(show_title)
user.show_message("\t Special Modules, used for recreation purposes:")
show_title = FALSE
if(H.has_no_prod_upgrade(initial(upgrade.build_path)) == "")
user.show_message(span_blue("\t\t [capitalize(initial(upgrade.name))]: [span_red("<b>ERROR</b>")]"))
else
user.show_message(span_blue("\t\t [capitalize(initial(upgrade.name))]: [H.has_no_prod_upgrade(initial(upgrade.build_path)) ? span_green("Installed") : span_red("Missing")]"))
if("prosthetics")
@@ -109,7 +203,7 @@
var/output = {"<span class='notice'>Analyzing Results for \the [Mecha]:</span><br>
<b>Chassis Integrity: </b> [integrity]%<br>
<b>Powercell charge: </b>[isnull(cell_charge)?"No powercell installed":"[Mecha.cell.percent()]%"]<br>
<b>Powercell charge: </b>[isnull(cell_charge)?"No powercell installed":"[capitalize(initial(Mecha.cell.name))] at [Mecha.cell.percent()]%"]<br>
<b>Air source: </b>[Mecha.use_internal_tank?"Internal Airtank":"Environment"]<br>
<b>Airtank pressure: </b>[tank_pressure]kPa<br>
<b>Airtank temperature: </b>[tank_temperature]K|[tank_temperature - T0C]&deg;C<br>

View File

@@ -1490,3 +1490,75 @@
rest_style = tgui_alert(src, "Select resting pose", "Resting Pose", sprite_datum.rest_sprite_options)
if(!rest_style)
rest_style = "Default"
// Those basic ones require quite detailled checks on the robot's vars to see if they are installed!
/mob/living/silicon/robot/proc/has_basic_upgrade(var/given_type)
if(given_type == /obj/item/borg/upgrade/basic/vtec)
return (/mob/living/silicon/robot/proc/toggle_vtec in verbs)
else if(given_type == /obj/item/borg/upgrade/basic/sizeshift)
return (/mob/living/proc/set_size in verbs)
else if(given_type == /obj/item/borg/upgrade/basic/syndicate)
return emag_items
else if(given_type == /obj/item/borg/upgrade/basic/language)
return (speech_synthesizer_langs.len > 20) // Service with the most has 18
return null
// We check for the module only here
/mob/living/silicon/robot/proc/has_upgrade_module(var/given_type)
var/obj/T = locate(given_type) in module
if(!T)
T = locate(given_type) in module.contents
if(!T)
T = locate(given_type) in module.modules
return T
// Most of the advanced ones, we can easily check, but a few special cases exist and need to be handled specially
/mob/living/silicon/robot/proc/has_advanced_upgrade(var/given_type)
if(given_type == /obj/item/borg/upgrade/advanced/bellysizeupgrade)
var/obj/item/device/dogborg/sleeper/T = has_upgrade_module(/obj/item/device/dogborg/sleeper)
if(T && T.upgraded_capacity)
return T
else
return "" // Return this to have the analyzer show an error if the module is missing. FALSE / NULL are used for missing upgrades themselves
if(given_type == /obj/item/borg/upgrade/advanced/jetpack)
return has_upgrade_module(/obj/item/weapon/tank/jetpack/carbondioxide)
if(given_type == /obj/item/borg/upgrade/advanced/advhealth)
return has_upgrade_module(/obj/item/device/healthanalyzer/advanced)
if(given_type == /obj/item/borg/upgrade/advanced/sizegun)
return has_upgrade_module(/obj/item/weapon/gun/energy/sizegun/mounted)
return null
// Do we support specific upgrades?
/mob/living/silicon/robot/proc/supports_upgrade(var/given_type)
return (given_type in module.supported_upgrades)
// Most of the restricted ones, we can easily check, but a few special cases exist and need to be handled specially
/mob/living/silicon/robot/proc/has_restricted_upgrade(var/given_type)
if(given_type == /obj/item/borg/upgrade/restricted/bellycapupgrade)
var/obj/item/device/dogborg/sleeper/T = has_upgrade_module(/obj/item/device/dogborg/sleeper)
if(T && T.compactor)
return T
else
return ""
if(given_type == /obj/item/borg/upgrade/restricted/tasercooler)
var/obj/item/weapon/gun/energy/taser/mounted/cyborg/T = has_upgrade_module(/obj/item/weapon/gun/energy/taser/mounted/cyborg)
if(T && T.recharge_time <= 2)
return T
else
return ""
if(given_type == /obj/item/borg/upgrade/restricted/advrped)
return has_upgrade_module(/obj/item/weapon/storage/part_replacer/adv)
if(given_type == /obj/item/borg/upgrade/restricted/diamonddrill)
return has_upgrade_module(/obj/item/weapon/pickaxe/diamonddrill)
if(given_type == /obj/item/borg/upgrade/restricted/pka)
return has_upgrade_module(/obj/item/weapon/gun/energy/kinetic_accelerator/cyborg)
return null
// Check if we have any non production upgrades
/mob/living/silicon/robot/proc/has_no_prod_upgrade(var/given_type)
if(given_type == /obj/item/borg/upgrade/no_prod/toygun)
return has_upgrade_module(/obj/item/weapon/gun/projectile/cyborgtoy)
return null
/mob/living/silicon/robot/proc/has_upgrade(var/given_type)
return (has_basic_upgrade(given_type) || has_advanced_upgrade(given_type) || has_restricted_upgrade(given_type) || has_no_prod_upgrade(given_type))

View File

@@ -47,8 +47,6 @@ var/global/list/robot_modules = list(
var/list/modules = list()
var/list/datum/matter_synth/synths = list()
var/list/emag = list()
var/obj/item/borg/upgrade/jetpack = null
var/obj/item/borg/upgrade/advhealth = null
var/list/subsystems = list()
var/list/obj/item/borg/upgrade/supported_upgrades = list()
@@ -110,8 +108,6 @@ var/global/list/robot_modules = list(
modules.Cut()
synths.Cut()
emag.Cut()
qdel(jetpack)
jetpack = null
return ..()
/obj/item/weapon/robot_module/emp_act(severity)
@@ -245,6 +241,7 @@ var/global/list/robot_modules = list(
networks = list(NETWORK_MEDICAL)
subsystems = list(/mob/living/silicon/proc/subsystem_crew_monitor)
pto_type = PTO_MEDICAL
supported_upgrades = list(/obj/item/borg/upgrade/restricted/bellycapupgrade)
/* CHOMPedit start: Removal of Surgeon module. *
@@ -507,7 +504,7 @@ var/global/list/robot_modules = list(
channels = list("Security" = 1)
networks = list(NETWORK_SECURITY)
subsystems = list(/mob/living/silicon/proc/subsystem_crew_monitor)
supported_upgrades = list(/obj/item/borg/upgrade/tasercooler)
supported_upgrades = list(/obj/item/borg/upgrade/restricted/tasercooler, /obj/item/borg/upgrade/restricted/bellycapupgrade)
pto_type = PTO_SECURITY
/obj/item/weapon/robot_module/robot/security/general
@@ -707,7 +704,7 @@ var/global/list/robot_modules = list(
name = "miner robot module"
channels = list("Supply" = 1)
networks = list(NETWORK_MINE)
supported_upgrades = list(/obj/item/borg/upgrade/pka, /obj/item/borg/upgrade/diamonddrill)
supported_upgrades = list(/obj/item/borg/upgrade/restricted/pka, /obj/item/borg/upgrade/restricted/diamonddrill)
pto_type = PTO_CARGO
/obj/item/weapon/robot_module/robot/miner/create_equipment(var/mob/living/silicon/robot/robot)
@@ -730,7 +727,7 @@ var/global/list/robot_modules = list(
/obj/item/weapon/robot_module/robot/research
name = "research module"
channels = list("Science" = 1)
supported_upgrades = list(/obj/item/borg/upgrade/advrped)
supported_upgrades = list(/obj/item/borg/upgrade/restricted/advrped)
pto_type = PTO_SCIENCE
/obj/item/weapon/robot_module/robot/research/create_equipment(var/mob/living/silicon/robot/robot)
@@ -793,6 +790,7 @@ var/global/list/robot_modules = list(
/obj/item/weapon/robot_module/robot/security/combat
name = "combat robot module"
hide_on_manifest = TRUE
supported_upgrades = list(/obj/item/borg/upgrade/restricted/bellycapupgrade)
/obj/item/weapon/robot_module/robot/security/combat/create_equipment(var/mob/living/silicon/robot/robot)
..()

View File

@@ -48,6 +48,7 @@
// Gets a big shield and a gun that shoots really fast to scare the opposing force.
/obj/item/weapon/robot_module/robot/syndicate/protector
name = "protector robot module"
supported_upgrades = list(/obj/item/borg/upgrade/restricted/bellycapupgrade)
/obj/item/weapon/robot_module/robot/syndicate/protector/create_equipment(var/mob/living/silicon/robot/robot)
..()
@@ -133,6 +134,7 @@
// Mediborg optimized for on-the-field healing, but can also do surgery if needed.
/obj/item/weapon/robot_module/robot/syndicate/combat_medic
name = "combat medic robot module"
supported_upgrades = list(/obj/item/borg/upgrade/restricted/bellycapupgrade)
/obj/item/weapon/robot_module/robot/syndicate/combat_medic/create_equipment(var/mob/living/silicon/robot/robot)
..()

View File

@@ -71,7 +71,7 @@
vore_stomach_name = "fuel processor"
vore_stomach_flavor = "You have ended up in the fuel processor of this corrupted machine. This place was definitely not designed with safety and comfort in mind. The heated and cramped surroundings oozing potent fluids all over your form, eager to do nothing less than breaking you apart to fuel its rampage for the next few days... hours... minutes? Oh dear..."
loot_list = list(/obj/item/borg/upgrade/syndicate = 6, /obj/item/borg/upgrade/vtec = 6, /obj/item/weapon/material/knife/ritual = 6, /obj/item/weapon/disk/nifsoft/compliance = 6)
loot_list = list(/obj/item/borg/upgrade/basic/syndicate = 6, /obj/item/borg/upgrade/basic/vtec = 6, /obj/item/weapon/material/knife/ritual = 6, /obj/item/weapon/disk/nifsoft/compliance = 6)
can_be_drop_prey = FALSE //CHOMP Add

View File

@@ -71,8 +71,10 @@
to_chat(src, "<span class='filter_notice'><I>... You can almost hear someone talking ...</I></span>")
else
if(client && client.prefs.chat_timestamp)
msg = replacetext(msg, new/regex("^(<span(?: \[^>]*)?>)((?:.|\\n)*</span>)", ""), "$1[time] $2")
to_chat(src,msg)
// TG-Chat filters latch directly to the spans, we no longer need that
//msg = replacetext(msg, new/regex("^(<span(?: \[^>]*)?>)((?:.|\\n)*</span>)", ""), "$1[time] $2") // Insteres timestamps after the first qualifying span
//msg = replacetext(msg, new/regex("^\[^<]((?:.|\\n)*)", ""), "[time] $1") // Spanless messages also get timestamped
to_chat(src,"[time] [msg]")
else if(teleop)
to_chat(teleop, create_text_tag("body", "BODY:", teleop.client) + "[msg]")
else

View File

@@ -161,12 +161,6 @@
var/mob/living/silicon/robot/O = new /mob/living/silicon/robot( loc )
// cyborgs produced by Robotize get an automatic power cell
O.cell = new(O)
O.cell.maxcharge = 7500
O.cell.charge = 7500
O.gender = gender
O.invisibility = 0

View File

@@ -39,7 +39,7 @@
* Robot
*/
/obj/item/weapon/cell/robot_station
name = "A standard robot power cell"
name = "standard robot power cell"
maxcharge = 7500
/*
@@ -76,7 +76,7 @@
* Syndicate
*/
/obj/item/weapon/cell/robot_syndi
name = "A syndicate robot power cell"
name = "syndicate robot power cell"
description_fluff = "Almost as good as a hyper."
icon_state = "super" //We don't want roboticists confuse it with a low standard cell
maxcharge = 25000

View File

@@ -98,7 +98,7 @@
return
/obj/item/weapon/reagent_containers/borghypo/attack_self(mob/user as mob) //Change the mode
var/t = ""
var/t = "<span class='infoplain'>"
for(var/i = 1 to reagent_ids.len)
if(t)
t += ", "
@@ -106,7 +106,7 @@
t += "<b>[reagent_names[i]]</b>"
else
t += "<a href='?src=\ref[src];reagent=[reagent_ids[i]]'>[reagent_names[i]]</a>"
t = "Available reagents: [t]."
t = "Available reagents: [t].</span>"
to_chat(user,t)
return

View File

@@ -385,68 +385,140 @@
time = 12
materials = list(MAT_STEEL = 7500)
/datum/design/item/prosfab/robot_upgrade/rename
// Section for utility upgrades
/datum/design/item/prosfab/robot_upgrade/utility/rename
name = "Rename Module"
desc = "Used to rename a cyborg."
id = "borg_rename_module"
build_path = /obj/item/borg/upgrade/rename
build_path = /obj/item/borg/upgrade/utility/rename
/datum/design/item/prosfab/robot_upgrade/reset
/datum/design/item/prosfab/robot_upgrade/utility/reset
name = "Reset Module"
desc = "Used to reset a cyborg's module. Destroys any other upgrades applied to the robot."
id = "borg_reset_module"
build_path = /obj/item/borg/upgrade/reset
build_path = /obj/item/borg/upgrade/utility/reset
/datum/design/item/prosfab/robot_upgrade/restart
/datum/design/item/prosfab/robot_upgrade/utility/restart
name = "Emergency Restart Module"
desc = "Used to force a restart of a disabled-but-repaired robot, bringing it back online."
id = "borg_restart_module"
materials = list(MAT_STEEL = 45000, MAT_GLASS = 3750)
build_path = /obj/item/borg/upgrade/restart
build_path = /obj/item/borg/upgrade/utility/restart
/datum/design/item/prosfab/robot_upgrade/vtec
// Section for basic upgrades for all cyborgs
/datum/design/item/prosfab/robot_upgrade/basic/sizeshift
name = "Size Alteration Module"
id = "borg_sizeshift_module"
req_tech = list(TECH_BLUESPACE = 3, TECH_MATERIAL = 3, TECH_POWER = 2)
materials = list(MAT_STEEL = 4000, MAT_GLASS = 4000)
build_path = /obj/item/borg/upgrade/basic/sizeshift
/datum/design/item/prosfab/robot_upgrade/basic/vtec
name = "VTEC Module"
desc = "Used to kick in a robot's VTEC systems, increasing their speed."
id = "borg_vtec_module"
materials = list(MAT_STEEL = 60000, MAT_GLASS = 4500, MAT_GOLD = 3750)
build_path = /obj/item/borg/upgrade/vtec
build_path = /obj/item/borg/upgrade/basic/vtec
/datum/design/item/prosfab/robot_upgrade/tasercooler
name = "Rapid Taser Cooling Module"
desc = "Used to cool a mounted taser, increasing the potential current in it and thus its recharge rate."
id = "borg_taser_module"
materials = list(MAT_STEEL = 60000, MAT_GLASS = 4500, MAT_GOLD = 1500, MAT_DIAMOND = 375)
build_path = /obj/item/borg/upgrade/tasercooler
/datum/design/item/prosfab/robot_upgrade/jetpack
name = "Jetpack Module"
desc = "A carbon dioxide jetpack suitable for low-gravity mining operations."
id = "borg_jetpack_module"
materials = list(MAT_STEEL = 7500, MAT_PHORON = 11250, MAT_URANIUM = 15000)
build_path = /obj/item/borg/upgrade/jetpack
/datum/design/item/prosfab/robot_upgrade/advhealth
name = "Advanced Health Analyzer Module"
desc = "An advanced health analyzer suitable for diagnosing more serious injuries."
id = "borg_advhealth_module"
materials = list(MAT_STEEL = 10000, MAT_GLASS = 6500, MAT_DIAMOND = 350)
build_path = /obj/item/borg/upgrade/advhealth
/datum/design/item/prosfab/robot_upgrade/syndicate
/datum/design/item/prosfab/robot_upgrade/basic/syndicate
name = "Scrambled Equipment Module"
desc = "Allows for the construction of lethal upgrades for cyborgs."
id = "borg_syndicate_module"
req_tech = list(TECH_COMBAT = 4, TECH_ILLEGAL = 3)
materials = list(MAT_STEEL = 7500, MAT_GLASS = 11250, MAT_DIAMOND = 7500)
build_path = /obj/item/borg/upgrade/syndicate
build_path = /obj/item/borg/upgrade/basic/syndicate
/datum/design/item/prosfab/robot_upgrade/language
/datum/design/item/prosfab/robot_upgrade/basic/language
name = "Language Module"
desc = "Used to let cyborgs other than clerical or service speak a variety of languages."
id = "borg_language_module"
req_tech = list(TECH_DATA = 6, TECH_MATERIAL = 6)
materials = list(MAT_STEEL = 25000, MAT_GLASS = 3000, MAT_GOLD = 350)
build_path = /obj/item/borg/upgrade/language
build_path = /obj/item/borg/upgrade/basic/language
// Section for advanced upgrades for all cyborgs
/datum/design/item/prosfab/robot_upgrade/advanced/bellysizeupgrade
name = "Robohound Capacity Expansion Module"
id = "borg_hound_capacity_module"
req_tech = list(TECH_MATERIAL = 3, TECH_ENGINEERING = 2)
materials = list(MAT_STEEL = 4000, MAT_GLASS = 4000)
build_path = /obj/item/borg/upgrade/advanced/bellysizeupgrade
/datum/design/item/prosfab/robot_upgrade/advanced/sizegun
name = "Size Gun Module"
id = "borg_sizegun_module"
req_tech = list(TECH_COMBAT = 3, TECH_BLUESPACE = 3, TECH_MATERIAL = 3, TECH_POWER = 2)
materials = list(MAT_STEEL = 6000, MAT_GLASS = 4000)
build_path = /obj/item/borg/upgrade/advanced/sizegun
/datum/design/item/prosfab/robot_upgrade/advanced/jetpack
name = "Jetpack Module"
desc = "A carbon dioxide jetpack suitable for low-gravity mining operations."
id = "borg_jetpack_module"
materials = list(MAT_STEEL = 7500, MAT_PHORON = 11250, MAT_URANIUM = 15000)
build_path = /obj/item/borg/upgrade/advanced/jetpack
/datum/design/item/prosfab/robot_upgrade/advanced/advhealth
name = "Advanced Health Analyzer Module"
desc = "An advanced health analyzer suitable for diagnosing more serious injuries."
id = "borg_advhealth_module"
materials = list(MAT_STEEL = 10000, MAT_GLASS = 6500, MAT_DIAMOND = 350)
build_path = /obj/item/borg/upgrade/advanced/advhealth
/*
Some job related borg upgrade modules, adding useful items for puppers.
*/
/datum/design/item/prosfab/robot_upgrade/restricted/bellycapupgrade
name = "Robohound Capability Expansion Module"
id = "borg_hound_capability_module"
req_tech = list(TECH_MATERIAL = 5, TECH_ENGINEERING = 4)
materials = list(MAT_STEEL = 8000, MAT_GLASS = 6000)
build_path = /obj/item/borg/upgrade/restricted/bellycapupgrade
/datum/design/item/prosfab/robot_upgrade/restricted/advrped
name = "Advanced Rapid Part Exchange Device"
desc = "Exactly the same as a standard Advanced RPED, but this one has mounting hardware for a Science Borg."
id = "borg_advrped_module"
req_tech = list(TECH_ENGINEERING = 6, TECH_MATERIAL = 6)
materials = list(MAT_STEEL = 30000, MAT_GLASS = 10000)
build_path = /obj/item/borg/upgrade/restricted/advrped
/datum/design/item/prosfab/robot_upgrade/restricted/diamonddrill
name = "Diamond Drill"
desc = "A mining drill with a diamond tip, made for use by Mining Borgs."
id = "borg_ddrill_module"
req_tech = list(TECH_MATERIAL = 6, TECH_POWER = 5, TECH_ENGINEERING = 5)
materials = list(MAT_STEEL = 3000, MAT_GLASS = 1000, MAT_DIAMOND = 2000)
build_path = /obj/item/borg/upgrade/restricted/diamonddrill
/datum/design/item/prosfab/robot_upgrade/restricted/pka
name = "Proto-Kinetic Accelerator"
desc = "A mining weapon designed for clearing rocks and hostile wildlife. This model is equiped with a self upgrade system, allowing it to attach modules hands free."
id = "borg_pka_module"
req_tech = list(TECH_COMBAT = 6, TECH_MATERIAL = 5, TECH_POWER = 4)
materials = list(MAT_PLASTEEL = 5000, MAT_GLASS = 1000, MAT_URANIUM = 500, MAT_PLATINUM = 350)
build_path = /obj/item/borg/upgrade/restricted/pka
/datum/design/item/prosfab/robot_upgrade/restricted/tasercooler
name = "Rapid Taser Cooling Module"
desc = "Used to cool a mounted taser, increasing the potential current in it and thus its recharge rate."
id = "borg_taser_module"
materials = list(MAT_STEEL = 60000, MAT_GLASS = 4500, MAT_GOLD = 1500, MAT_DIAMOND = 375)
build_path = /obj/item/borg/upgrade/restricted/tasercooler
// Section for quick access for admins, events and such, but can't be produced.
/datum/design/item/prosfab/robot_upgrade/no_prod/cyborgtoy
category = list() // We simply do not sort them in
/datum/design/item/prosfab/robot_upgrade/no_prod/cyborgtoy
name = "Donk-Soft Cyborg Blaster"
id = "borg_hound_cyborg_blaster"
build_path = /obj/item/borg/upgrade/no_prod/toygun
// Synthmorph Bags.
@@ -546,3 +618,46 @@
time = 30
materials = list(MAT_STEEL = 8000, MAT_GLASS = 2000, MAT_SILVER = 2000, MAT_GOLD = 2000)
//req_tech = list(TECH_MAGNET = 5, TECH_BLUESPACE = 5, TECH_MATERIAL = 5, TECH_ENGINEERING = 5, TECH_DATA = 5)
///// pAI parts!!!
//////////////////// Cyborg Parts ////////////////////
/datum/design/item/prosfab/paiparts
category = list("pAI Parts")
time = 20
materials = list(MAT_STEEL = 1000, MAT_GLASS = 1000)
/datum/design/item/prosfab/paiparts/cell
name = "pAI Cell"
id = "pai_cell"
build_path = /obj/item/paiparts/cell
/datum/design/item/prosfab/paiparts/processor
name = "pAI Processor"
id = "pai_processor"
build_path = /obj/item/paiparts/processor
/datum/design/item/prosfab/paiparts/board
name = "pAI Board"
id = "pai_board"
build_path = /obj/item/paiparts/board
/datum/design/item/prosfab/paiparts/capacitor
name = "pAI capacitor"
id = "pai_capacitor"
build_path = /obj/item/paiparts/capacitor
/datum/design/item/prosfab/paiparts/projector
name = "pAI Projector"
id = "pai_projector"
build_path = /obj/item/paiparts/projector
/datum/design/item/prosfab/paiparts/emitter
name = "pAI Emitter"
id = "pai_emitter"
build_path = /obj/item/paiparts/emitter
/datum/design/item/prosfab/paiparts/speech_synthesizer
name = "pAI Speech Synthesizer"
id = "pai_speech_synthesizer"
build_path = /obj/item/paiparts/speech_synthesizer

View File

@@ -1,100 +0,0 @@
//Prosfab stuff for borgs and such
/datum/design/item/prosfab/robot_upgrade/sizeshift
name = "Size Alteration Module"
id = "borg_sizeshift_module"
req_tech = list(TECH_BLUESPACE = 3, TECH_MATERIAL = 3, TECH_POWER = 2)
materials = list(MAT_STEEL = 4000, MAT_GLASS = 4000)
build_path = /obj/item/borg/upgrade/sizeshift
/datum/design/item/prosfab/robot_upgrade/sizegun
name = "Size Gun Module"
id = "borg_sizegun_module"
req_tech = list(TECH_COMBAT = 3, TECH_BLUESPACE = 3, TECH_MATERIAL = 3, TECH_POWER = 2)
materials = list(MAT_STEEL = 6000, MAT_GLASS = 4000)
build_path = /obj/item/borg/upgrade/sizegun
/datum/design/item/prosfab/robot_upgrade/bellysizeupgrade
name = "Robohound Capacity Expansion Module"
id = "borg_hound_capacity_module"
req_tech = list(TECH_MATERIAL = 3, TECH_ENGINEERING = 2)
materials = list(MAT_STEEL = 4000, MAT_GLASS = 4000)
build_path = /obj/item/borg/upgrade/bellysizeupgrade
/datum/design/item/prosfab/robot_upgrade/bellycapupgrade
name = "Robohound Capability Expansion Module"
id = "borg_hound_capability_module"
req_tech = list(TECH_MATERIAL = 5, TECH_ENGINEERING = 4)
materials = list(MAT_STEEL = 8000, MAT_GLASS = 6000)
build_path = /obj/item/borg/upgrade/bellycapupgrade
/*
Some job related borg upgrade modules, adding useful items for puppers.
*/
/datum/design/item/prosfab/robot_upgrade/advrped
name = "Advanced Rapid Part Exchange Device"
desc = "Exactly the same as a standard Advanced RPED, but this one has mounting hardware for a Science Borg."
id = "borg_advrped_module"
req_tech = list(TECH_ENGINEERING = 6, TECH_MATERIAL = 6)
materials = list(MAT_STEEL = 30000, MAT_GLASS = 10000)
build_path = /obj/item/borg/upgrade/advrped
/datum/design/item/prosfab/robot_upgrade/diamonddrill
name = "Diamond Drill"
desc = "A mining drill with a diamond tip, made for use by Mining Borgs."
id = "borg_ddrill_module"
req_tech = list(TECH_MATERIAL = 6, TECH_POWER = 5, TECH_ENGINEERING = 5)
materials = list(MAT_STEEL = 3000, MAT_GLASS = 1000, MAT_DIAMOND = 2000)
build_path = /obj/item/borg/upgrade/diamonddrill
/datum/design/item/prosfab/robot_upgrade/pka
name = "Proto-Kinetic Accelerator"
desc = "A mining weapon designed for clearing rocks and hostile wildlife. This model is equiped with a self upgrade system, allowing it to attach modules hands free."
id = "borg_pka_module"
req_tech = list(TECH_COMBAT = 6, TECH_MATERIAL = 5, TECH_POWER = 4)
materials = list(MAT_PLASTEEL = 5000, MAT_GLASS = 1000, MAT_URANIUM = 500, MAT_PLATINUM = 350)
build_path = /obj/item/borg/upgrade/pka
///// pAI parts!!!
//////////////////// Cyborg Parts ////////////////////
/datum/design/item/prosfab/paiparts
category = list("pAI Parts")
time = 20
materials = list(MAT_STEEL = 1000, MAT_GLASS = 1000)
/datum/design/item/prosfab/paiparts/cell
name = "pAI Cell"
id = "pai_cell"
build_path = /obj/item/paiparts/cell
/datum/design/item/prosfab/paiparts/processor
name = "pAI Processor"
id = "pai_processor"
build_path = /obj/item/paiparts/processor
/datum/design/item/prosfab/paiparts/board
name = "pAI Board"
id = "pai_board"
build_path = /obj/item/paiparts/board
/datum/design/item/prosfab/paiparts/capacitor
name = "pAI capacitor"
id = "pai_capacitor"
build_path = /obj/item/paiparts/capacitor
/datum/design/item/prosfab/paiparts/projector
name = "pAI Projector"
id = "pai_projector"
build_path = /obj/item/paiparts/projector
/datum/design/item/prosfab/paiparts/emitter
name = "pAI Emitter"
id = "pai_emitter"
build_path = /obj/item/paiparts/emitter
/datum/design/item/prosfab/paiparts/speech_synthesizer
name = "pAI Speech Synthesizer"
id = "pai_speech_synthesizer"
build_path = /obj/item/paiparts/speech_synthesizer

View File

@@ -203,7 +203,7 @@
/obj/item/weapon/vehicle_assembly/spacebike/attackby(var/obj/item/weapon/W as obj, var/mob/user as mob)
switch(build_stage)
if(0)
if(istype(W, /obj/item/weapon/tank/jetpack) || istype(W, /obj/item/borg/upgrade/jetpack))
if(istype(W, /obj/item/weapon/tank/jetpack) || istype(W, /obj/item/borg/upgrade/advanced/jetpack))
user.drop_item()
qdel(W)
increase_step()

View File

@@ -17,14 +17,14 @@
* Robot
*/
/obj/item/weapon/cell/robot_station
name = "A standard robot power cell"
name = "standard robot power cell"
maxcharge = 7500
/*
* Syndicate
*/
/obj/item/weapon/cell/robot_syndi
name = "A syndicate robot power cell"
name = "syndicate robot power cell"
description_fluff = "Almost as good as a hyper."
icon_state = "b_sup" //We don't want roboticists confuse it with a low standard cell
maxcharge = 25000

View File

@@ -1342,7 +1342,6 @@
#include "code\game\objects\items\robot\robot_items.dm"
#include "code\game\objects\items\robot\robot_parts.dm"
#include "code\game\objects\items\robot\robot_upgrades.dm"
#include "code\game\objects\items\robot\robot_upgrades_vr.dm"
#include "code\game\objects\items\stacks\marker_beacons.dm"
#include "code\game\objects\items\stacks\matter_synth.dm"
#include "code\game\objects\items\stacks\medical.dm"
@@ -4108,7 +4107,6 @@
#include "code\modules\research\mechfab_designs_vr.dm"
#include "code\modules\research\message_server.dm"
#include "code\modules\research\prosfab_designs.dm"
#include "code\modules\research\prosfab_designs_vr.dm"
#include "code\modules\research\protolathe.dm"
#include "code\modules\research\rd-readme.dm"
#include "code\modules\research\rdconsole.dm"