Makes it possible for borg modules to include specific subystems.

This commit is contained in:
PsiOmega
2015-04-26 12:17:03 +02:00
parent e54fbcb9ec
commit 9df5048dbc
10 changed files with 128 additions and 106 deletions

View File

@@ -1202,7 +1202,6 @@
#include "code\modules\mob\living\silicon\ai\login.dm" #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\logout.dm"
#include "code\modules\mob\living\silicon\ai\say.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\death.dm"
#include "code\modules\mob\living\silicon\decoy\decoy.dm" #include "code\modules\mob\living\silicon\decoy\decoy.dm"
#include "code\modules\mob\living\silicon\decoy\life.dm" #include "code\modules\mob\living\silicon\decoy\life.dm"

View File

@@ -79,13 +79,11 @@ var/list/ai_verbs_default = list(
/mob/living/silicon/ai/proc/add_ai_verbs() /mob/living/silicon/ai/proc/add_ai_verbs()
src.verbs |= ai_verbs_default src.verbs |= ai_verbs_default
src.verbs |= ai_verbs_subsystems src.verbs |= silicon_subsystems
src.verbs |= silicon_verbs_subsystems
/mob/living/silicon/ai/proc/remove_ai_verbs() /mob/living/silicon/ai/proc/remove_ai_verbs()
src.verbs -= ai_verbs_default src.verbs -= ai_verbs_default
src.verbs -= ai_verbs_subsystems src.verbs -= silicon_subsystems
src.verbs -= silicon_verbs_subsystems
/mob/living/silicon/ai/New(loc, var/datum/ai_laws/L, var/obj/item/device/mmi/B, var/safety = 0) /mob/living/silicon/ai/New(loc, var/datum/ai_laws/L, var/obj/item/device/mmi/B, var/safety = 0)
announcement = new() announcement = new()

View File

@@ -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)

View File

@@ -281,10 +281,10 @@
return return
/mob/living/silicon/robot/drone/add_robot_verbs() /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() /mob/living/silicon/robot/drone/remove_robot_verbs()
src.verbs -= silicon_verbs_subsystems src.verbs -= silicon_subsystems
/mob/living/silicon/robot/drone/construction /mob/living/silicon/robot/drone/construction
law_type = /datum/ai_laws/construction_drone law_type = /datum/ai_laws/construction_drone

View File

@@ -262,7 +262,8 @@
hands.icon_state = lowertext(modtype) hands.icon_state = lowertext(modtype)
feedback_inc("cyborg_[lowertext(modtype)]",1) feedback_inc("cyborg_[lowertext(modtype)]",1)
updatename() 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) notify_ai(ROBOT_NOTIFICATION_NEW_MODULE, module.name)
/mob/living/silicon/robot/proc/updatename(var/prefix as text) /mob/living/silicon/robot/proc/updatename(var/prefix as text)
@@ -1013,7 +1014,6 @@
return return
/mob/living/silicon/robot/proc/choose_icon(var/triesleft, var/list/module_sprites) /mob/living/silicon/robot/proc/choose_icon(var/triesleft, var/list/module_sprites)
if(triesleft<1 || !module_sprites.len) if(triesleft<1 || !module_sprites.len)
return return
else else
@@ -1040,6 +1040,7 @@
var/choice = input("Look at your icon - is this what you want?") in list("Yes","No") var/choice = input("Look at your icon - is this what you want?") in list("Yes","No")
if(choice=="No") if(choice=="No")
choose_icon(triesleft, module_sprites) choose_icon(triesleft, module_sprites)
return
else else
triesleft = 0 triesleft = 0
return return
@@ -1054,11 +1055,11 @@
/mob/living/silicon/robot/proc/add_robot_verbs() /mob/living/silicon/robot/proc/add_robot_verbs()
src.verbs |= robot_verbs_default src.verbs |= robot_verbs_default
src.verbs |= silicon_verbs_subsystems src.verbs |= silicon_subsystems
/mob/living/silicon/robot/proc/remove_robot_verbs() /mob/living/silicon/robot/proc/remove_robot_verbs()
src.verbs -= robot_verbs_default 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. // Uses power from cyborg's cell. Returns 1 on success or 0 on failure.
// Properly converts using CELLRATE now! Amount is in Joules. // Properly converts using CELLRATE now! Amount is in Joules.

View File

@@ -1,16 +1,16 @@
var/global/list/robot_modules = list( var/global/list/robot_modules = list(
"Standard" = /obj/item/weapon/robot_module/standard, "Standard" = /obj/item/weapon/robot_module/standard,
"Service" = /obj/item/weapon/robot_module/butler, "Service" = /obj/item/weapon/robot_module/clerical/butler,
"Clerical" = /obj/item/weapon/robot_module/clerical, "Clerical" = /obj/item/weapon/robot_module/clerical/general,
"Research" = /obj/item/weapon/robot_module/research, "Research" = /obj/item/weapon/robot_module/research,
"Miner" = /obj/item/weapon/robot_module/miner, "Miner" = /obj/item/weapon/robot_module/miner,
"Crisis" = /obj/item/weapon/robot_module/crisis, "Crisis" = /obj/item/weapon/robot_module/medical/crisis,
"Surgeon" = /obj/item/weapon/robot_module/surgeon, "Surgeon" = /obj/item/weapon/robot_module/medical/surgeon,
"Security" = /obj/item/weapon/robot_module/security/general, "Security" = /obj/item/weapon/robot_module/security/general,
"Combat" = /obj/item/weapon/robot_module/security/combat,
"Engineering" = /obj/item/weapon/robot_module/engineering/general, "Engineering" = /obj/item/weapon/robot_module/engineering/general,
"Construction" = /obj/item/weapon/robot_module/engineering/construction, "Construction" = /obj/item/weapon/robot_module/engineering/construction,
"Janitor" = /obj/item/weapon/robot_module/janitor, "Janitor" = /obj/item/weapon/robot_module/janitor
"Combat" = /obj/item/weapon/robot_module/security/combat
) )
/obj/item/weapon/robot_module /obj/item/weapon/robot_module
@@ -30,7 +30,7 @@ var/global/list/robot_modules = list(
var/list/datum/matter_synth/synths = list() var/list/datum/matter_synth/synths = list()
var/obj/item/emag = null var/obj/item/emag = null
var/obj/item/borg/upgrade/jetpack = null var/obj/item/borg/upgrade/jetpack = null
var/list/subsystems = list()
var/list/obj/item/borg/upgrade/supported_upgrades = list() var/list/obj/item/borg/upgrade/supported_upgrades = list()
// Bookkeeping // Bookkeeping
@@ -45,6 +45,7 @@ var/global/list/robot_modules = list(
add_camera_networks(R) add_camera_networks(R)
add_languages(R) add_languages(R)
add_radio_channels(R) add_radio_channels(R)
add_subsystems(R)
apply_status_flags(R) apply_status_flags(R)
/obj/item/weapon/robot_module/proc/Reset(var/mob/living/silicon/robot/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_camera_networks(R)
remove_languages(R) remove_languages(R)
remove_radio_channels(R) remove_radio_channels(R)
remove_subsystems(R)
remove_status_flags(R) remove_status_flags(R)
/obj/item/weapon/robot_module/emp_act(severity) /obj/item/weapon/robot_module/emp_act(severity)
@@ -119,6 +121,12 @@ var/global/list/robot_modules = list(
modified_radio.config(original_radio_channels) modified_radio.config(original_radio_channels)
original_radio_channels.Cut() 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) /obj/item/weapon/robot_module/proc/apply_status_flags(var/mob/living/silicon/robot/R)
if(!can_be_pushed) if(!can_be_pushed)
R.status_flags &= ~CANPUSH R.status_flags &= ~CANPUSH
@@ -146,11 +154,15 @@ var/global/list/robot_modules = list(
src.emag = new /obj/item/weapon/melee/energy/sword(src) src.emag = new /obj/item/weapon/melee/energy/sword(src)
return return
/obj/item/weapon/robot_module/surgeon /obj/item/weapon/robot_module/medical
name = "surgeon robot module" name = "medical robot module"
channels = list("Medical" = 1) channels = list("Medical" = 1)
networks = list(NETWORK_MEDICAL) networks = list(NETWORK_MEDICAL)
subsystems = list(/mob/living/silicon/proc/subsystem_crew_monitor)
can_be_pushed = 0 can_be_pushed = 0
/obj/item/weapon/robot_module/medical/surgeon
name = "surgeon robot module"
sprites = list( sprites = list(
"Basic" = "Medbot", "Basic" = "Medbot",
"Standard" = "surgeon", "Standard" = "surgeon",
@@ -159,7 +171,7 @@ var/global/list/robot_modules = list(
"Drone" = "drone-surgery" "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/flash(src)
src.modules += new /obj/item/device/healthanalyzer(src) src.modules += new /obj/item/device/healthanalyzer(src)
@@ -194,17 +206,14 @@ var/global/list/robot_modules = list(
return 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) if(src.emag)
var/obj/item/weapon/reagent_containers/spray/PS = src.emag var/obj/item/weapon/reagent_containers/spray/PS = src.emag
PS.reagents.add_reagent("pacid", 2 * amount) PS.reagents.add_reagent("pacid", 2 * amount)
..() ..()
/obj/item/weapon/robot_module/crisis /obj/item/weapon/robot_module/medical/crisis
name = "crisis robot module" name = "crisis robot module"
channels = list("Medical" = 1)
networks = list(NETWORK_MEDICAL)
can_be_pushed = 0
sprites = list( sprites = list(
"Basic" = "Medbot", "Basic" = "Medbot",
"Standard" = "surgeon", "Standard" = "surgeon",
@@ -214,7 +223,7 @@ var/global/list/robot_modules = list(
"Drone - Chemistry" = "drone-chemistry" "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/device/flash(src)
src.modules += new /obj/item/borg/sight/hud/med(src) src.modules += new /obj/item/borg/sight/hud/med(src)
@@ -251,7 +260,7 @@ var/global/list/robot_modules = list(
return 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 var/obj/item/weapon/reagent_containers/syringe/S = locate() in src.modules
if(S.mode == 2) if(S.mode == 2)
@@ -271,6 +280,7 @@ var/global/list/robot_modules = list(
name = "engineering robot module" name = "engineering robot module"
channels = list("Engineering" = 1) channels = list("Engineering" = 1)
networks = list(NETWORK_ENGINEERING) networks = list(NETWORK_ENGINEERING)
subsystems = list(/mob/living/silicon/proc/subsystem_power_monitor)
sprites = list( sprites = list(
"Basic" = "Engineering", "Basic" = "Engineering",
"Antique" = "engineerrobot", "Antique" = "engineerrobot",
@@ -378,6 +388,7 @@ var/global/list/robot_modules = list(
name = "security robot module" name = "security robot module"
channels = list("Security" = 1) channels = list("Security" = 1)
networks = list(NETWORK_SECURITY) networks = list(NETWORK_SECURITY)
subsystems = list(/mob/living/silicon/proc/subsystem_crew_monitor)
can_be_pushed = 0 can_be_pushed = 0
supported_upgrades = list(/obj/item/borg/upgrade/tasercooler) 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 var/obj/item/weapon/reagent_containers/spray/S = src.emag
S.reagents.add_reagent("lube", 2 * amount) S.reagents.add_reagent("lube", 2 * amount)
/obj/item/weapon/robot_module/butler /obj/item/weapon/robot_module/clerical
name = "service robot module" name = "service robot module"
channels = list("Service" = 1) channels = list("Service" = 1)
languages = list( languages = list(
@@ -459,6 +470,8 @@ var/global/list/robot_modules = list(
LANGUAGE_TRADEBAND = 1, LANGUAGE_TRADEBAND = 1,
LANGUAGE_GUTTER = 1 LANGUAGE_GUTTER = 1
) )
/obj/item/weapon/robot_module/clerical/butler
sprites = list( "Waitress" = "Service", sprites = list( "Waitress" = "Service",
"Kent" = "toiletbot", "Kent" = "toiletbot",
"Bro" = "Brobot", "Bro" = "Brobot",
@@ -468,7 +481,7 @@ var/global/list/robot_modules = list(
"Drone - Hydro" = "drone-hydro" "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/device/flash(src)
src.modules += new /obj/item/weapon/gripper/service(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" src.emag.name = "Mickey Finn's Special Brew"
return return
/obj/item/weapon/robot_module/clerical /obj/item/weapon/robot_module/clerical/general
name = "clerical robot module" 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( sprites = list(
"Waitress" = "Service", "Waitress" = "Service",
"Kent" = "toiletbot", "Kent" = "toiletbot",
@@ -522,7 +524,7 @@ var/global/list/robot_modules = list(
"Drone" = "drone-service" "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/device/flash(src)
src.modules += new /obj/item/weapon/pen/robopen(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.modules += new /obj/item/weapon/hand_labeler(src)
src.emag = new /obj/item/weapon/stamp/denied(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 var/obj/item/weapon/reagent_containers/food/condiment/enzyme/E = locate() in src.modules
E.reagents.add_reagent("enzyme", 2 * amount) E.reagents.add_reagent("enzyme", 2 * amount)
if(src.emag) if(src.emag)

View File

@@ -278,14 +278,6 @@
updatehealth() 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) /mob/living/silicon/proc/receive_alarm(var/datum/alarm_handler/alarm_handler, var/datum/alarm/alarm, was_raised)
if(!next_alarm_notice) if(!next_alarm_notice)
next_alarm_notice = world.time + SecondsToTicks(10) next_alarm_notice = world.time + SecondsToTicks(10)

View File

@@ -1,26 +1,101 @@
/mob/living/silicon /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_alarm_monitor,
/mob/living/silicon/proc/subsystem_law_manager /mob/living/silicon/proc/subsystem_law_manager
) )
// Subsystems /mob/living/silicon/ai
var/obj/nano_module/alarm_monitor = null alarm_monitor_type = /obj/nano_module/alarm_monitor/ai
var/obj/nano_module/law_manager = null list/silicon_subsystems = list(
/mob/living/silicon/proc/subsystem_alarm_monitor,
/mob/living/silicon/robot/syndicate /mob/living/silicon/proc/subsystem_atmos_control,
silicon_verbs_subsystems = list( /mob/living/silicon/proc/subsystem_crew_monitor,
/mob/living/silicon/proc/subsystem_law_manager /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() /mob/living/silicon/proc/subsystem_alarm_monitor()
set name = "Alarm Monitor" set name = "Alarm Monitor"
set category = "Subystems" set category = "Subystems"
alarm_monitor.ui_interact(usr, state = self_state) 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() /mob/living/silicon/proc/subsystem_law_manager()
set name = "Law Manager" set name = "Law Manager"
set category = "Subystems" set category = "Subystems"
law_manager.ui_interact(usr, state = self_state) 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)

View File

@@ -26,6 +26,7 @@
return ..() return ..()
/mob/living/silicon/robot/shared_nano_interaction() /mob/living/silicon/robot/shared_nano_interaction()
. = STATUS_INTERACTIVE
if(cell.charge <= 0) if(cell.charge <= 0)
return STATUS_CLOSE return STATUS_CLOSE
if(lockcharge) if(lockcharge)

View File

@@ -6,5 +6,4 @@
/datum/topic_state/self_state/can_use_topic(var/src_object, var/mob/user) /datum/topic_state/self_state/can_use_topic(var/src_object, var/mob/user)
if(src_object != user) if(src_object != user)
return STATUS_CLOSE return STATUS_CLOSE
return user.shared_nano_interaction() return user.shared_nano_interaction()