diff --git a/baystation12.dme b/baystation12.dme index 3fd4b4b438..f2c07f0ffc 100644 --- a/baystation12.dme +++ b/baystation12.dme @@ -1202,7 +1202,6 @@ #include "code\modules\mob\living\silicon\ai\login.dm" #include "code\modules\mob\living\silicon\ai\logout.dm" #include "code\modules\mob\living\silicon\ai\say.dm" -#include "code\modules\mob\living\silicon\ai\subsystems.dm" #include "code\modules\mob\living\silicon\decoy\death.dm" #include "code\modules\mob\living\silicon\decoy\decoy.dm" #include "code\modules\mob\living\silicon\decoy\life.dm" diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm index 00e9288d9a..fa85c272a0 100644 --- a/code/modules/mob/living/silicon/ai/ai.dm +++ b/code/modules/mob/living/silicon/ai/ai.dm @@ -79,13 +79,11 @@ var/list/ai_verbs_default = list( /mob/living/silicon/ai/proc/add_ai_verbs() src.verbs |= ai_verbs_default - src.verbs |= ai_verbs_subsystems - src.verbs |= silicon_verbs_subsystems + src.verbs |= silicon_subsystems /mob/living/silicon/ai/proc/remove_ai_verbs() src.verbs -= ai_verbs_default - src.verbs -= ai_verbs_subsystems - src.verbs -= silicon_verbs_subsystems + src.verbs -= silicon_subsystems /mob/living/silicon/ai/New(loc, var/datum/ai_laws/L, var/obj/item/device/mmi/B, var/safety = 0) announcement = new() diff --git a/code/modules/mob/living/silicon/ai/subsystems.dm b/code/modules/mob/living/silicon/ai/subsystems.dm deleted file mode 100644 index 915c987b53..0000000000 --- a/code/modules/mob/living/silicon/ai/subsystems.dm +++ /dev/null @@ -1,45 +0,0 @@ -/mob/living/silicon/ai - var/list/ai_verbs_subsystems = list( - /mob/living/silicon/ai/proc/subsystem_atmos_control, - /mob/living/silicon/ai/proc/subsystem_crew_monitor, - /mob/living/silicon/ai/proc/subsystem_power_monitor, - /mob/living/silicon/ai/proc/subsystem_rcon - ) - - var/obj/nano_module/atmos_control/atmos_control - var/obj/nano_module/crew_monitor/crew_monitor - var/obj/nano_module/rcon/rcon - var/obj/nano_module/power_monitor/power_monitor - -/mob/living/silicon/ai/init_subsystems() - ..() - del(alarm_monitor) - atmos_control = new(src) - alarm_monitor = new/obj/nano_module/alarm_monitor/ai(src) - crew_monitor = new(src) - rcon = new(src) - power_monitor = new(src) - -/mob/living/silicon/ai/proc/subsystem_atmos_control() - set category = "Subystems" - set name = "Atmospherics Control" - - atmos_control.ui_interact(usr, state = self_state) - -/mob/living/silicon/ai/proc/subsystem_crew_monitor() - set category = "Subystems" - set name = "Crew Monitor" - - crew_monitor.ui_interact(usr, state = self_state) - -/mob/living/silicon/ai/proc/subsystem_power_monitor() - set category = "Subystems" - set name = "Power Monitor" - - power_monitor.ui_interact(usr, state = self_state) - -/mob/living/silicon/ai/proc/subsystem_rcon() - set category = "Subystems" - set name = "RCON" - - rcon.ui_interact(usr, state = self_state) diff --git a/code/modules/mob/living/silicon/robot/drone/drone.dm b/code/modules/mob/living/silicon/robot/drone/drone.dm index 8fd20e1368..77bb2b466d 100644 --- a/code/modules/mob/living/silicon/robot/drone/drone.dm +++ b/code/modules/mob/living/silicon/robot/drone/drone.dm @@ -281,10 +281,10 @@ return /mob/living/silicon/robot/drone/add_robot_verbs() - src.verbs |= silicon_verbs_subsystems + src.verbs |= silicon_subsystems /mob/living/silicon/robot/drone/remove_robot_verbs() - src.verbs -= silicon_verbs_subsystems + src.verbs -= silicon_subsystems /mob/living/silicon/robot/drone/construction law_type = /datum/ai_laws/construction_drone diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index a8dfec1e7f..cf28468694 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -262,7 +262,8 @@ hands.icon_state = lowertext(modtype) feedback_inc("cyborg_[lowertext(modtype)]",1) updatename() - choose_icon(6, set_module_sprites(module.sprites)) + set_module_sprites(module.sprites) + choose_icon(module_sprites.len + 1, module_sprites) notify_ai(ROBOT_NOTIFICATION_NEW_MODULE, module.name) /mob/living/silicon/robot/proc/updatename(var/prefix as text) @@ -1013,7 +1014,6 @@ return /mob/living/silicon/robot/proc/choose_icon(var/triesleft, var/list/module_sprites) - if(triesleft<1 || !module_sprites.len) return else @@ -1040,6 +1040,7 @@ var/choice = input("Look at your icon - is this what you want?") in list("Yes","No") if(choice=="No") choose_icon(triesleft, module_sprites) + return else triesleft = 0 return @@ -1054,11 +1055,11 @@ /mob/living/silicon/robot/proc/add_robot_verbs() src.verbs |= robot_verbs_default - src.verbs |= silicon_verbs_subsystems + src.verbs |= silicon_subsystems /mob/living/silicon/robot/proc/remove_robot_verbs() src.verbs -= robot_verbs_default - src.verbs -= silicon_verbs_subsystems + src.verbs -= silicon_subsystems // Uses power from cyborg's cell. Returns 1 on success or 0 on failure. // Properly converts using CELLRATE now! Amount is in Joules. diff --git a/code/modules/mob/living/silicon/robot/robot_modules.dm b/code/modules/mob/living/silicon/robot/robot_modules.dm index fd837cc7ca..4f00d41d7f 100644 --- a/code/modules/mob/living/silicon/robot/robot_modules.dm +++ b/code/modules/mob/living/silicon/robot/robot_modules.dm @@ -1,16 +1,16 @@ var/global/list/robot_modules = list( "Standard" = /obj/item/weapon/robot_module/standard, - "Service" = /obj/item/weapon/robot_module/butler, - "Clerical" = /obj/item/weapon/robot_module/clerical, + "Service" = /obj/item/weapon/robot_module/clerical/butler, + "Clerical" = /obj/item/weapon/robot_module/clerical/general, "Research" = /obj/item/weapon/robot_module/research, "Miner" = /obj/item/weapon/robot_module/miner, - "Crisis" = /obj/item/weapon/robot_module/crisis, - "Surgeon" = /obj/item/weapon/robot_module/surgeon, + "Crisis" = /obj/item/weapon/robot_module/medical/crisis, + "Surgeon" = /obj/item/weapon/robot_module/medical/surgeon, "Security" = /obj/item/weapon/robot_module/security/general, + "Combat" = /obj/item/weapon/robot_module/security/combat, "Engineering" = /obj/item/weapon/robot_module/engineering/general, "Construction" = /obj/item/weapon/robot_module/engineering/construction, - "Janitor" = /obj/item/weapon/robot_module/janitor, - "Combat" = /obj/item/weapon/robot_module/security/combat + "Janitor" = /obj/item/weapon/robot_module/janitor ) /obj/item/weapon/robot_module @@ -30,7 +30,7 @@ var/global/list/robot_modules = list( var/list/datum/matter_synth/synths = list() var/obj/item/emag = null var/obj/item/borg/upgrade/jetpack = null - + var/list/subsystems = list() var/list/obj/item/borg/upgrade/supported_upgrades = list() // Bookkeeping @@ -45,6 +45,7 @@ var/global/list/robot_modules = list( add_camera_networks(R) add_languages(R) add_radio_channels(R) + add_subsystems(R) apply_status_flags(R) /obj/item/weapon/robot_module/proc/Reset(var/mob/living/silicon/robot/R) @@ -52,6 +53,7 @@ var/global/list/robot_modules = list( remove_camera_networks(R) remove_languages(R) remove_radio_channels(R) + remove_subsystems(R) remove_status_flags(R) /obj/item/weapon/robot_module/emp_act(severity) @@ -119,6 +121,12 @@ var/global/list/robot_modules = list( modified_radio.config(original_radio_channels) original_radio_channels.Cut() +/obj/item/weapon/robot_module/proc/add_subsystems(var/mob/living/silicon/robot/R) + R.verbs |= subsystems + +/obj/item/weapon/robot_module/proc/remove_subsystems(var/mob/living/silicon/robot/R) + R.verbs -= subsystems + /obj/item/weapon/robot_module/proc/apply_status_flags(var/mob/living/silicon/robot/R) if(!can_be_pushed) R.status_flags &= ~CANPUSH @@ -146,11 +154,15 @@ var/global/list/robot_modules = list( src.emag = new /obj/item/weapon/melee/energy/sword(src) return -/obj/item/weapon/robot_module/surgeon - name = "surgeon robot module" +/obj/item/weapon/robot_module/medical + name = "medical robot module" channels = list("Medical" = 1) networks = list(NETWORK_MEDICAL) + subsystems = list(/mob/living/silicon/proc/subsystem_crew_monitor) can_be_pushed = 0 + +/obj/item/weapon/robot_module/medical/surgeon + name = "surgeon robot module" sprites = list( "Basic" = "Medbot", "Standard" = "surgeon", @@ -159,7 +171,7 @@ var/global/list/robot_modules = list( "Drone" = "drone-surgery" ) -/obj/item/weapon/robot_module/surgeon/New() +/obj/item/weapon/robot_module/medical/surgeon/New() ..() src.modules += new /obj/item/device/flash(src) src.modules += new /obj/item/device/healthanalyzer(src) @@ -194,17 +206,14 @@ var/global/list/robot_modules = list( return -/obj/item/weapon/robot_module/surgeon/respawn_consumable(var/mob/living/silicon/robot/R, var/amount) +/obj/item/weapon/robot_module/medical/surgeon/respawn_consumable(var/mob/living/silicon/robot/R, var/amount) if(src.emag) var/obj/item/weapon/reagent_containers/spray/PS = src.emag PS.reagents.add_reagent("pacid", 2 * amount) ..() -/obj/item/weapon/robot_module/crisis +/obj/item/weapon/robot_module/medical/crisis name = "crisis robot module" - channels = list("Medical" = 1) - networks = list(NETWORK_MEDICAL) - can_be_pushed = 0 sprites = list( "Basic" = "Medbot", "Standard" = "surgeon", @@ -214,7 +223,7 @@ var/global/list/robot_modules = list( "Drone - Chemistry" = "drone-chemistry" ) -/obj/item/weapon/robot_module/crisis/New() +/obj/item/weapon/robot_module/medical/crisis/New() ..() src.modules += new /obj/item/device/flash(src) src.modules += new /obj/item/borg/sight/hud/med(src) @@ -251,7 +260,7 @@ var/global/list/robot_modules = list( return -/obj/item/weapon/robot_module/crisis/respawn_consumable(var/mob/living/silicon/robot/R, var/amount) +/obj/item/weapon/robot_module/medical/crisis/respawn_consumable(var/mob/living/silicon/robot/R, var/amount) var/obj/item/weapon/reagent_containers/syringe/S = locate() in src.modules if(S.mode == 2) @@ -271,6 +280,7 @@ var/global/list/robot_modules = list( name = "engineering robot module" channels = list("Engineering" = 1) networks = list(NETWORK_ENGINEERING) + subsystems = list(/mob/living/silicon/proc/subsystem_power_monitor) sprites = list( "Basic" = "Engineering", "Antique" = "engineerrobot", @@ -378,6 +388,7 @@ var/global/list/robot_modules = list( name = "security robot module" channels = list("Security" = 1) networks = list(NETWORK_SECURITY) + subsystems = list(/mob/living/silicon/proc/subsystem_crew_monitor) can_be_pushed = 0 supported_upgrades = list(/obj/item/borg/upgrade/tasercooler) @@ -446,7 +457,7 @@ var/global/list/robot_modules = list( var/obj/item/weapon/reagent_containers/spray/S = src.emag S.reagents.add_reagent("lube", 2 * amount) -/obj/item/weapon/robot_module/butler +/obj/item/weapon/robot_module/clerical name = "service robot module" channels = list("Service" = 1) languages = list( @@ -459,6 +470,8 @@ var/global/list/robot_modules = list( LANGUAGE_TRADEBAND = 1, LANGUAGE_GUTTER = 1 ) + +/obj/item/weapon/robot_module/clerical/butler sprites = list( "Waitress" = "Service", "Kent" = "toiletbot", "Bro" = "Brobot", @@ -468,7 +481,7 @@ var/global/list/robot_modules = list( "Drone - Hydro" = "drone-hydro" ) -/obj/item/weapon/robot_module/butler/New() +/obj/item/weapon/robot_module/clerical/butler/New() ..() src.modules += new /obj/item/device/flash(src) src.modules += new /obj/item/weapon/gripper/service(src) @@ -500,19 +513,8 @@ var/global/list/robot_modules = list( src.emag.name = "Mickey Finn's Special Brew" return -/obj/item/weapon/robot_module/clerical +/obj/item/weapon/robot_module/clerical/general name = "clerical robot module" - channels = list("Service" = 1) - languages = list( - LANGUAGE_SOL_COMMON = 1, - LANGUAGE_UNATHI = 1, - LANGUAGE_SIIK_MAAS = 1, - LANGUAGE_SIIK_TAJR = 0, - LANGUAGE_SKRELLIAN = 1, - LANGUAGE_ROOTSPEAK = 1, - LANGUAGE_TRADEBAND = 1, - LANGUAGE_GUTTER = 1 - ) sprites = list( "Waitress" = "Service", "Kent" = "toiletbot", @@ -522,7 +524,7 @@ var/global/list/robot_modules = list( "Drone" = "drone-service" ) -/obj/item/weapon/robot_module/clerical/New() +/obj/item/weapon/robot_module/clerical/general/New() ..() src.modules += new /obj/item/device/flash(src) src.modules += new /obj/item/weapon/pen/robopen(src) @@ -531,7 +533,7 @@ var/global/list/robot_modules = list( src.modules += new /obj/item/weapon/hand_labeler(src) src.emag = new /obj/item/weapon/stamp/denied(src) -/obj/item/weapon/robot_module/butler/respawn_consumable(var/mob/living/silicon/robot/R, var/amount) +/obj/item/weapon/robot_module/general/butler/respawn_consumable(var/mob/living/silicon/robot/R, var/amount) var/obj/item/weapon/reagent_containers/food/condiment/enzyme/E = locate() in src.modules E.reagents.add_reagent("enzyme", 2 * amount) if(src.emag) diff --git a/code/modules/mob/living/silicon/silicon.dm b/code/modules/mob/living/silicon/silicon.dm index b1cc4240ff..cc87245cdf 100644 --- a/code/modules/mob/living/silicon/silicon.dm +++ b/code/modules/mob/living/silicon/silicon.dm @@ -278,14 +278,6 @@ updatehealth() -/mob/living/silicon/proc/init_subsystems() - alarm_monitor = new/obj/nano_module/alarm_monitor/borg(src) - law_manager = new/obj/nano_module/law_manager(src) - - for(var/datum/alarm_handler/AH in alarm_manager.all_handlers) - AH.register(src, /mob/living/silicon/proc/receive_alarm) - queued_alarms[AH] = list() // Makes sure alarms remain listed in consistent order - /mob/living/silicon/proc/receive_alarm(var/datum/alarm_handler/alarm_handler, var/datum/alarm/alarm, was_raised) if(!next_alarm_notice) next_alarm_notice = world.time + SecondsToTicks(10) diff --git a/code/modules/mob/living/silicon/subystems.dm b/code/modules/mob/living/silicon/subystems.dm index 00347d464f..b8271f89b0 100644 --- a/code/modules/mob/living/silicon/subystems.dm +++ b/code/modules/mob/living/silicon/subystems.dm @@ -1,26 +1,101 @@ /mob/living/silicon - var/list/silicon_verbs_subsystems = list( + var/register_alarms = 1 + var/obj/nano_module/alarm_monitor/alarm_monitor + var/obj/nano_module/atmos_control/atmos_control + var/obj/nano_module/crew_monitor/crew_monitor + var/obj/nano_module/law_manager/law_manager + var/obj/nano_module/power_monitor/power_monitor + var/obj/nano_module/rcon/rcon + + var/alarm_monitor_type = /obj/nano_module/alarm_monitor/borg + +/mob/living/silicon + alarm_monitor_type = /obj/nano_module/alarm_monitor/borg + var/list/silicon_subsystems = list( /mob/living/silicon/proc/subsystem_alarm_monitor, /mob/living/silicon/proc/subsystem_law_manager ) - // Subsystems - var/obj/nano_module/alarm_monitor = null - var/obj/nano_module/law_manager = null - -/mob/living/silicon/robot/syndicate - silicon_verbs_subsystems = list( - /mob/living/silicon/proc/subsystem_law_manager +/mob/living/silicon/ai + alarm_monitor_type = /obj/nano_module/alarm_monitor/ai + list/silicon_subsystems = list( + /mob/living/silicon/proc/subsystem_alarm_monitor, + /mob/living/silicon/proc/subsystem_atmos_control, + /mob/living/silicon/proc/subsystem_crew_monitor, + /mob/living/silicon/proc/subsystem_law_manager, + /mob/living/silicon/proc/subsystem_power_monitor, + /mob/living/silicon/proc/subsystem_rcon ) +/mob/living/silicon/robot/syndicate + register_alarms = 0 + silicon_subsystems = list(/mob/living/silicon/proc/subsystem_law_manager) + +/mob/living/silicon/proc/init_subsystems() + alarm_monitor = new alarm_monitor_type(src) + atmos_control = new(src) + crew_monitor = new(src) + law_manager = new(src) + power_monitor = new(src) + rcon = new(src) + + if(!register_alarms) + return + + for(var/datum/alarm_handler/AH in alarm_manager.all_handlers) + AH.register(src, /mob/living/silicon/proc/receive_alarm) + queued_alarms[AH] = list() // Makes sure alarms remain listed in consistent order + +/******************** +* Alarm Monitor * +********************/ /mob/living/silicon/proc/subsystem_alarm_monitor() set name = "Alarm Monitor" set category = "Subystems" alarm_monitor.ui_interact(usr, state = self_state) +/******************** +* Atmos Control * +********************/ +/mob/living/silicon/proc/subsystem_atmos_control() + set category = "Subystems" + set name = "Atmospherics Control" + + atmos_control.ui_interact(usr, state = self_state) + +/******************** +* Crew Monitor * +********************/ +/mob/living/silicon/proc/subsystem_crew_monitor() + set category = "Subystems" + set name = "Crew Monitor" + + crew_monitor.ui_interact(usr, state = self_state) + +/**************** +* Law Manager * +****************/ /mob/living/silicon/proc/subsystem_law_manager() set name = "Law Manager" set category = "Subystems" law_manager.ui_interact(usr, state = self_state) + +/******************** +* Power Monitor * +********************/ +/mob/living/silicon/proc/subsystem_power_monitor() + set category = "Subystems" + set name = "Power Monitor" + + power_monitor.ui_interact(usr, state = self_state) + +/************ +* RCON * +************/ +/mob/living/silicon/proc/subsystem_rcon() + set category = "Subystems" + set name = "RCON" + + rcon.ui_interact(usr, state = self_state) diff --git a/code/modules/nano/interaction/base.dm b/code/modules/nano/interaction/base.dm index 56cfc22488..10cda75162 100644 --- a/code/modules/nano/interaction/base.dm +++ b/code/modules/nano/interaction/base.dm @@ -26,6 +26,7 @@ return ..() /mob/living/silicon/robot/shared_nano_interaction() + . = STATUS_INTERACTIVE if(cell.charge <= 0) return STATUS_CLOSE if(lockcharge) diff --git a/code/modules/nano/interaction/self.dm b/code/modules/nano/interaction/self.dm index f99ee875fa..639e50e161 100644 --- a/code/modules/nano/interaction/self.dm +++ b/code/modules/nano/interaction/self.dm @@ -6,5 +6,4 @@ /datum/topic_state/self_state/can_use_topic(var/src_object, var/mob/user) if(src_object != user) return STATUS_CLOSE - return user.shared_nano_interaction()