Replaces Subsystems (mostly) with internal computing device (#7798)

This is for robots.
This commit is contained in:
Karolis
2020-01-04 13:36:03 +02:00
committed by Matt Atlas
parent 7dc0fdded5
commit b820f601fa
18 changed files with 151 additions and 129 deletions
+3 -1
View File
@@ -1835,12 +1835,12 @@
#include "code\modules\mob\living\carbon\metroid\update_icons.dm"
#include "code\modules\mob\living\parasite\meme.dm"
#include "code\modules\mob\living\parasite\meme_captive.dm"
#include "code\modules\mob\living\silicon\computer.dm"
#include "code\modules\mob\living\silicon\death.dm"
#include "code\modules\mob\living\silicon\laws.dm"
#include "code\modules\mob\living\silicon\login.dm"
#include "code\modules\mob\living\silicon\say.dm"
#include "code\modules\mob\living\silicon\silicon.dm"
#include "code\modules\mob\living\silicon\subystems.dm"
#include "code\modules\mob\living\silicon\ai\ai.dm"
#include "code\modules\mob\living\silicon\ai\ai_movement.dm"
#include "code\modules\mob\living\silicon\ai\death.dm"
@@ -1956,10 +1956,12 @@
#include "code\modules\modular_computers\computers\modular_computer\variables.dm"
#include "code\modules\modular_computers\computers\subtypes\dev_console.dm"
#include "code\modules\modular_computers\computers\subtypes\dev_laptop.dm"
#include "code\modules\modular_computers\computers\subtypes\dev_silicon.dm"
#include "code\modules\modular_computers\computers\subtypes\dev_tablet.dm"
#include "code\modules\modular_computers\computers\subtypes\dev_telescreen.dm"
#include "code\modules\modular_computers\computers\subtypes\preset_console.dm"
#include "code\modules\modular_computers\computers\subtypes\preset_laptop.dm"
#include "code\modules\modular_computers\computers\subtypes\preset_silicon.dm"
#include "code\modules\modular_computers\computers\subtypes\preset_tablet.dm"
#include "code\modules\modular_computers\computers\subtypes\preset_telescreen.dm"
#include "code\modules\modular_computers\file_system\computer_file.dm"
+4 -1
View File
@@ -176,11 +176,14 @@
#define NTNETSPEED_DOS_AMPLIFICATION 5 // Multiplier for Denial of Service program. Resulting load on NTNet relay is this multiplied by NTNETSPEED of the device
// Program bitflags
#define PROGRAM_ALL 15
#define PROGRAM_CONSOLE 1
#define PROGRAM_LAPTOP 2
#define PROGRAM_TABLET 4
#define PROGRAM_TELESCREEN 8
#define PROGRAM_SILICON 16
#define PROGRAM_ALL (PROGRAM_CONSOLE | PROGRAM_LAPTOP | PROGRAM_TABLET | PROGRAM_TELESCREEN | PROGRAM_SILICON)
#define PROGRAM_ALL_REGULAR (PROGRAM_CONSOLE | PROGRAM_LAPTOP | PROGRAM_TABLET | PROGRAM_TELESCREEN)
#define PROGRAM_STATE_KILLED 0
#define PROGRAM_STATE_BACKGROUND 1
+5 -2
View File
@@ -1,12 +1,14 @@
/datum/hud/proc/ai_hud()
other = list()
mymob:computer.screen_loc = ui_ai_crew_monitor
mymob:computer.layer = SCREEN_LAYER
adding = list(
new /obj/screen/ai/core,
new /obj/screen/ai/camera_list,
new /obj/screen/ai/camera_track,
new /obj/screen/ai/camera_light,
new /obj/screen/ai/crew_monitoring,
new /obj/screen/ai/crew_manifest,
new /obj/screen/ai/alerts,
new /obj/screen/ai/announcement,
@@ -18,7 +20,8 @@
new /obj/screen/ai/view_image,
new /obj/screen/ai/sensor_aug,
new /obj/screen/ai/move_up,
new /obj/screen/ai/move_down
new /obj/screen/ai/move_down,
mymob:computer
)
mymob.client.screen += adding + other
+30 -26
View File
@@ -10,6 +10,11 @@ var/obj/screen/robot_inventory
var/obj/screen/using
if(!isrobot(mymob))
return
var/mob/living/silicon/robot/r = mymob
//Radio
using = new /obj/screen()
using.name = "radio"
@@ -24,15 +29,15 @@ var/obj/screen/robot_inventory
using = new /obj/screen/module/one()
src.adding += using
mymob:inv1 = using
r.inv1 = using
using = new /obj/screen/module/two()
src.adding += using
mymob:inv2 = using
r.inv2 = using
using = new /obj/screen/module/three()
src.adding += using
mymob:inv3 = using
r.inv3 = using
//End of module select
@@ -48,11 +53,11 @@ var/obj/screen/robot_inventory
action_intent = using
//Cell
mymob:cells = new /obj/screen()
mymob:cells.icon = 'icons/mob/screen/robot.dmi'
mymob:cells.icon_state = "charge-empty"
mymob:cells.name = "cell"
mymob:cells.screen_loc = ui_toxin
r.cells = new /obj/screen()
r.cells.icon = 'icons/mob/screen/robot.dmi'
r.cells.icon_state = "charge-empty"
r.cells.name = "cell"
r.cells.screen_loc = ui_toxin
//Health
mymob.healths = new /obj/screen()
@@ -92,23 +97,6 @@ var/obj/screen/robot_inventory
robot_inventory.screen_loc = ui_borg_inventory
//Temp
mymob.bodytemp = new /obj/screen()
mymob.bodytemp.icon_state = "temp0"
mymob.bodytemp.name = "body temperature"
mymob.bodytemp.screen_loc = ui_temp
mymob.oxygen = new /obj/screen()
mymob.oxygen.icon = 'icons/mob/screen/robot.dmi'
mymob.oxygen.icon_state = "oxy0"
mymob.oxygen.name = "oxygen"
mymob.oxygen.screen_loc = ui_oxygen
mymob.fire = new /obj/screen()
mymob.fire.icon = 'icons/mob/screen/robot.dmi'
mymob.fire.icon_state = "fire0"
mymob.fire.name = "fire"
mymob.fire.screen_loc = ui_fire
mymob.pullin = new /obj/screen()
mymob.pullin.icon = 'icons/mob/screen/robot.dmi'
@@ -136,6 +124,11 @@ var/obj/screen/robot_inventory
mymob.zone_sel.cut_overlays()
mymob.zone_sel.add_overlay(image('icons/mob/zone_sel.dmi', "[mymob.zone_sel.selecting]"))
// Computer device hud
r.computer.screen_loc = ui_oxygen
r.computer.layer = SCREEN_LAYER
//Handle the gun settings buttons
mymob.gun_setting_icon = new /obj/screen/gun/mode(null)
@@ -145,7 +138,18 @@ var/obj/screen/robot_inventory
mymob.client.screen = null
mymob.client.screen += list( mymob.throw_icon, mymob.zone_sel, mymob.oxygen, mymob.fire, mymob.hands, mymob.healths, mymob:cells, mymob.pullin, mymob.blind, mymob.flash, robot_inventory, mymob.gun_setting_icon)
mymob.client.screen += list(
mymob.throw_icon,
mymob.zone_sel,
mymob.hands,
mymob.healths,
r.cells,
mymob.pullin,
mymob.blind,
mymob.flash,
robot_inventory,
mymob.gun_setting_icon,
r.computer)
mymob.client.screen += src.adding + src.other
return
@@ -80,16 +80,6 @@
var/mob/living/silicon/ai/AI = usr
AI.toggle_camera_light()
/obj/screen/ai/crew_monitoring
name = "Crew Monitoring"
icon_state = "crew_monitor"
screen_loc = ui_ai_crew_monitor
/obj/screen/ai/crew_monitoring/Click()
if (isAI(usr))
var/mob/living/silicon/ai/AI = usr
AI.subsystem_crew_monitor()
/obj/screen/ai/crew_manifest
name = "Show Crew Manifest"
icon_state = "manifest"
@@ -1,11 +1,9 @@
/mob/living/silicon
var/register_alarms = 1
var/datum/nano_module/alarm_monitor/all/alarm_monitor
var/datum/nano_module/atmos_control/atmos_control
var/datum/nano_module/crew_monitor/crew_monitor
var/datum/nano_module/law_manager/law_manager
var/datum/nano_module/power_monitor/power_monitor
var/datum/nano_module/rcon/rcon
var/obj/item/modular_computer/silicon/computer
/mob/living/silicon/ai
var/datum/nano_module/computer_ntnetmonitor/ntnet_monitor
@@ -13,18 +11,16 @@
/mob/living/silicon
var/list/silicon_subsystems = list(
/mob/living/silicon/proc/subsystem_alarm_monitor,
/mob/living/silicon/proc/subsystem_law_manager
/mob/living/silicon/proc/subsystem_law_manager,
/mob/living/silicon/proc/computer_interact
)
/mob/living/silicon/ai
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/ai/proc/subsystem_ntnet_monitor
/mob/living/silicon/ai/proc/subsystem_ntnet_monitor,
/mob/living/silicon/proc/computer_interact
)
/mob/living/silicon/robot/syndicate
@@ -32,38 +28,21 @@
silicon_subsystems = list(/mob/living/silicon/proc/subsystem_law_manager)
/mob/living/silicon/Destroy()
qdel(alarm_monitor)
alarm_monitor = null
qdel(atmos_control)
atmos_control = null
qdel(crew_monitor)
crew_monitor = null
qdel(law_manager)
law_manager = null
qdel(power_monitor)
power_monitor = null
qdel(rcon)
rcon = null
QDEL_NULL(alarm_monitor)
QDEL_NULL(law_manager)
QDEL_NULL(computer)
return ..()
/mob/living/silicon/ai/Destroy()
qdel(ntnet_monitor)
ntnet_monitor = null
QDEL_NULL(ntnet_monitor)
return ..()
/mob/living/silicon/proc/init_subsystems()
computer = new/obj/item/modular_computer/silicon/preset(src)
alarm_monitor = new(src)
atmos_control = new(src)
crew_monitor = new(src)
law_manager = new(src)
power_monitor = new(src)
rcon = new(src)
if(!register_alarms)
@@ -77,6 +56,15 @@
..()
ntnet_monitor = new(src)
/****************
* Computer *
*****************/
/mob/living/silicon/proc/computer_interact()
set name = "Open Computer Interface"
set category = "Subystems"
computer.attack_self(src)
/********************
* Alarm Monitor *
********************/
@@ -86,24 +74,6 @@
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 *
****************/
@@ -120,22 +90,4 @@
set name = "NTNet Monitoring"
set category = "Subystems"
ntnet_monitor.ui_interact(usr, state = conscious_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)
ntnet_monitor.ui_interact(usr, state = conscious_state)
@@ -186,7 +186,6 @@ var/global/list/robot_modules = list(
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
sprites = list(
"Basic" = "robotmedi",
@@ -337,7 +336,6 @@ 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)
supported_upgrades = list(/obj/item/robot_parts/robot_component/jetpack)
sprites = list(
"Basic" = "robotengi",
@@ -771,7 +769,6 @@ var/global/list/robot_modules = list(
name = "combat robot module"
channels = list("Security" = 1)
networks = list(NETWORK_SECURITY)
subsystems = list(/mob/living/silicon/proc/subsystem_crew_monitor)
sprites = list("Roller" = "droid-combat")
can_be_pushed = 0
supported_upgrades = list(/obj/item/robot_parts/robot_component/jetpack)
@@ -977,10 +974,6 @@ var/global/list/robot_modules = list(
"Response Team" = 1,
"AI Private" = 1
)
subsystems = list(
/mob/living/silicon/proc/subsystem_crew_monitor,
/mob/living/silicon/proc/subsystem_power_monitor
)
sprites = list("Roller" = "droid-combat") //TMP
can_be_pushed = 0
@@ -31,7 +31,7 @@
else
idle_threads.Remove(P)
working = hard_drive && processor_unit && damage < broken_damage && (apc_power(0) || battery_power(0))
working = hard_drive && processor_unit && damage < broken_damage && computer_use_power()
check_update_ui_need()
if (working && enabled && world.time > ambience_last_played + 30 SECONDS && prob(3))
@@ -125,7 +125,7 @@
else
to_chat(user, "You press the power button, but the computer fails to boot up, displaying variety of errors before shutting down again.")
return
if(processor_unit && (apc_power(0) || battery_power(0))) // Battery-run and charged or non-battery but powered by APC.
if(processor_unit && computer_use_power()) // Battery-run and charged or non-battery but powered by APC.
if(issynth)
to_chat(user, "You send an activation signal to \the [src], turning it on")
else
@@ -38,6 +38,16 @@
A.use_power(power_usage, EQUIP)
return TRUE
// Tries to use power in general (Abstraction)
/obj/item/modular_computer/proc/computer_use_power(var/power_usage = 0)
// First tries to charge from an APC, if APC is unavailable switches to battery power. If neither works the computer fails.
if(apc_power(power_usage))
return TRUE
if(battery_power(power_usage))
return TRUE
return FALSE
// Handles power-related things, such as battery interaction, recharging, shutdown when it's discharged
/obj/item/modular_computer/proc/handle_power()
var/power_usage = screen_on ? base_active_power_usage : base_idle_power_usage
@@ -47,13 +57,8 @@
power_usage += H.power_usage
last_power_usage = power_usage
// First tries to charge from an APC, if APC is unavailable switches to battery power. If neither works the computer fails.
if(apc_power(power_usage))
if (power_has_failed)
power_has_failed = FALSE
update_icon()
return
if(battery_power(power_usage))
if(computer_use_power(power_usage))
if (power_has_failed)
power_has_failed = FALSE
update_icon()
@@ -5,7 +5,7 @@
if(ui)
ui.close()
return
if(!apc_power(0) && !battery_power(0))
if(!computer_use_power())
if(ui)
ui.close()
return
@@ -0,0 +1,48 @@
/obj/item/modular_computer/silicon
name = "internal computing device"
desc = "A synthetic computer."
hardware_flag = PROGRAM_SILICON
icon_state_unpowered = "laptop-open"
icon = 'icons/obj/modular_laptop.dmi'
icon_state = "laptop-open"
icon_state_broken = "laptop-broken"
base_idle_power_usage = 5
base_active_power_usage = 25
max_hardware_size = 2
max_damage = 50
w_class = 3
var/mob/living/silicon/computer_host // Thing that contains this computer. Used for silicon computers
/obj/item/modular_computer/silicon/Initialize(mapload)
. = ..()
if(istype(loc, /mob/living/silicon))
computer_host = loc
else
return
// Let's remove integrated verbs for ejecting things.
verbs -= /obj/item/modular_computer/verb/eject_ai
verbs -= /obj/item/modular_computer/verb/eject_id
verbs -= /obj/item/modular_computer/verb/eject_usb
/obj/item/modular_computer/silicon/computer_use_power(power_usage)
// If we have host like AI, borg or pAI we handle there power
if(computer_host)
// If host is borg, we use power from it's cell, like anyone other module
if(istype(computer_host, /mob/living/silicon/robot))
var/mob/living/silicon/robot/R = computer_host
return R.cell_use_power(power_usage)
// If we are in AI or pAI we just don't botherwith power use.
return TRUE
else
// If we don't have host, then we let regular computer code handle power - like batteries and tesla coils
return ..()
/obj/item/modular_computer/silicon/Destroy()
computer_host = null
return ..()
/obj/item/modular_computer/silicon/Click(location, control, params)
if (!istype(usr, /mob/living/silicon) && host == usr)
return attack_self(usr)
return ..()
@@ -0,0 +1,14 @@
/obj/item/modular_computer/silicon/preset
enrolled = 2
/obj/item/modular_computer/silicon/preset/install_default_hardware()
. = ..()
processor_unit = new/obj/item/computer_hardware/processor_unit(src)
hard_drive = new/obj/item/computer_hardware/hard_drive(src)
network_card = new/obj/item/computer_hardware/network_card(src)
/obj/item/modular_computer/silicon/preset/install_default_programs()
hard_drive.store_file(new /datum/computer_file/program/filemanager())
hard_drive.store_file(new /datum/computer_file/program/ntnetdownload())
hard_drive.remove_file(hard_drive.find_file_by_name("clientmanager"))
@@ -72,7 +72,7 @@
requires_ntnet = 1
network_destination = "atmospheric control system"
requires_ntnet_feature = NTNET_SYSTEMCONTROL
usage_flags = PROGRAM_CONSOLE | PROGRAM_LAPTOP
usage_flags = PROGRAM_CONSOLE | PROGRAM_LAPTOP | PROGRAM_SILICON
size = 17
color = LIGHT_COLOR_CYAN
@@ -87,7 +87,7 @@
requires_ntnet = 1
network_destination = "RCON remote control system"
requires_ntnet_feature = NTNET_SYSTEMCONTROL
usage_flags = PROGRAM_CONSOLE
usage_flags = PROGRAM_CONSOLE | PROGRAM_SILICON
size = 19
color = LIGHT_COLOR_GREEN
@@ -103,6 +103,6 @@
requires_ntnet = 1
network_destination = "APC Coordinator"
requires_ntnet_feature = NTNET_SYSTEMCONTROL
usage_flags = PROGRAM_CONSOLE
usage_flags = PROGRAM_CONSOLE | PROGRAM_SILICON
size = 9
color = LIGHT_COLOR_GREEN
@@ -13,6 +13,7 @@
nanomodule_path = /datum/nano_module/arcade_classic/ // Path of relevant nano module. The nano module is defined further in the file.
var/picked_enemy_name
color = LIGHT_COLOR_BLUE
usage_flags = PROGRAM_ALL_REGULAR
// Blatantly stolen and shortened version from arcade machines. Generates a random enemy name
/datum/computer_file/program/game/arcade/proc/random_enemy_name()
@@ -7,6 +7,7 @@
requires_ntnet = 0 // This particular program does not require NTNet network conectivity...
available_on_ntnet = 1 // ... but we want it to be available for download.
nanomodule_path = /datum/nano_module/program/sudoku // Path of relevant nano module. The nano module is defined further in the file.
usage_flags = PROGRAM_ALL_REGULAR
/datum/nano_module/program/sudoku
var/list/grid = null
@@ -8,7 +8,7 @@
requires_ntnet = 1
network_destination = "crew lifesigns monitoring system"
size = 11
usage_flags = PROGRAM_LAPTOP | PROGRAM_TELESCREEN | PROGRAM_CONSOLE
usage_flags = PROGRAM_LAPTOP | PROGRAM_TELESCREEN | PROGRAM_CONSOLE | PROGRAM_SILICON
color = LIGHT_COLOR_CYAN
/datum/computer_file/program/suit_sensors/ui_interact(mob/user)
@@ -36,6 +36,7 @@
requires_ntnet = 1
required_access_download = access_heads
color = LIGHT_COLOR_ORANGE
usage_flags = PROGRAM_ALL_REGULAR
/datum/nano_module/camera_monitor
name = "Camera Monitoring program"
+5
View File
@@ -0,0 +1,5 @@
author: Karolis2011
delete-after: True
changes:
- rscadd: "Added integrated computer device to borgs, AIs and pAIs."
- rscdel: "Removed now reduandant subsystems."