mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-11 18:53:06 +00:00
Makes it possible for borg modules to include specific subystems.
This commit is contained in:
@@ -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"
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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)
|
||||
@@ -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
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -26,6 +26,7 @@
|
||||
return ..()
|
||||
|
||||
/mob/living/silicon/robot/shared_nano_interaction()
|
||||
. = STATUS_INTERACTIVE
|
||||
if(cell.charge <= 0)
|
||||
return STATUS_CLOSE
|
||||
if(lockcharge)
|
||||
|
||||
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user