mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-10 18:22:39 +00:00
Release Update
Merge branch 'release' of https://github.com/VOREStation/VOREStation into voreupdate # Conflicts: # code/__defines/machinery.dm # code/controllers/configuration.dm # code/game/jobs/jobs.dm # code/game/machinery/doors/blast_door.dm # code/game/machinery/pipe/pipe_recipes.dm # code/game/objects/items/devices/radio/radio_vr.dm # code/modules/client/preferences_vr.dm # code/modules/clothing/glasses/hud_vr.dm # code/modules/clothing/under/accessories/accessory_vr.dm # code/modules/events/event_container_vr.dm # code/modules/gamemaster/actions/planet_weather_change.dm # code/modules/projectiles/guns/energy/netgun_vr.dm # code/modules/projectiles/guns/energy/protector_vr.dm # code/modules/vore/appearance/sprite_accessories_taur_vr.dm # code/modules/vore/appearance/sprite_accessories_vr.dm # code/modules/vore/fluffstuff/custom_guns_vr.dm # icons/obj/power.dmi # vorestation.dme
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
/obj/item/modular_computer/console
|
||||
name = "console"
|
||||
desc = "A stationary computer."
|
||||
icon = 'icons/obj/modular_console_vr.dmi' //VOREStation Edit
|
||||
icon = 'icons/obj/modular_console.dmi'
|
||||
icon_state = "console"
|
||||
icon_state_unpowered = "console"
|
||||
icon_state_screensaver = "standby"
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
desc = "A portable computer."
|
||||
hardware_flag = PROGRAM_LAPTOP
|
||||
icon_state_unpowered = "laptop-open"
|
||||
icon = 'icons/obj/modular_laptop_vr.dmi' //VOREStation Edit
|
||||
icon = 'icons/obj/modular_laptop.dmi'
|
||||
icon_state = "laptop-open"
|
||||
icon_state_screensaver = "standby"
|
||||
base_idle_power_usage = 25
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/obj/item/modular_computer/tablet/preset/custom_loadout/rugged
|
||||
name = "rugged tablet computer"
|
||||
desc = "A rugged tablet computer."
|
||||
icon = 'icons/obj/modular_tablet_vr.dmi'
|
||||
icon = 'icons/obj/modular_tablet.dmi'
|
||||
icon_state = "rugged"
|
||||
icon_state_unpowered = "rugged"
|
||||
max_damage = 300
|
||||
@@ -19,7 +19,7 @@
|
||||
/obj/item/modular_computer/tablet/preset/custom_loadout/elite
|
||||
name = "elite tablet computer"
|
||||
desc = "A more expensive tablet computer."
|
||||
icon = 'icons/obj/modular_tablet_vr.dmi'
|
||||
icon = 'icons/obj/modular_tablet.dmi'
|
||||
icon_state = "elite"
|
||||
icon_state_unpowered = "elite"
|
||||
|
||||
@@ -37,7 +37,7 @@
|
||||
/obj/item/modular_computer/tablet/preset/custom_loadout/hybrid
|
||||
name = "hybrid tablet computer"
|
||||
desc = "A human/alien hybrid tech tablet computer."
|
||||
icon = 'icons/obj/modular_tablet_vr.dmi'
|
||||
icon = 'icons/obj/modular_tablet.dmi'
|
||||
icon_state = "hybrid"
|
||||
icon_state_unpowered = "hybrid"
|
||||
|
||||
|
||||
@@ -268,7 +268,7 @@
|
||||
|
||||
var/datum/signal/status_signal = new
|
||||
status_signal.source = src
|
||||
status_signal.transmission_method = 1
|
||||
status_signal.transmission_method = TRANSMISSION_RADIO
|
||||
status_signal.data["command"] = command
|
||||
|
||||
switch(command)
|
||||
|
||||
@@ -61,31 +61,35 @@
|
||||
AH.unregister_alarm(object)
|
||||
|
||||
/datum/nano_module/alarm_monitor/proc/all_alarms()
|
||||
var/z = get_z(nano_host())
|
||||
var/list/all_alarms = new()
|
||||
for(var/datum/alarm_handler/AH in alarm_handlers)
|
||||
all_alarms += AH.visible_alarms()
|
||||
all_alarms += AH.visible_alarms(z)
|
||||
|
||||
return all_alarms
|
||||
|
||||
/datum/nano_module/alarm_monitor/proc/major_alarms()
|
||||
var/z = get_z(nano_host())
|
||||
var/list/all_alarms = new()
|
||||
for(var/datum/alarm_handler/AH in alarm_handlers)
|
||||
all_alarms += AH.major_alarms()
|
||||
all_alarms += AH.major_alarms(z)
|
||||
|
||||
return all_alarms
|
||||
|
||||
// Modified version of above proc that uses slightly less resources, returns 1 if there is a major alarm, 0 otherwise.
|
||||
/datum/nano_module/alarm_monitor/proc/has_major_alarms()
|
||||
var/z = get_z(nano_host())
|
||||
for(var/datum/alarm_handler/AH in alarm_handlers)
|
||||
if(AH.has_major_alarms())
|
||||
if(AH.has_major_alarms(z))
|
||||
return 1
|
||||
|
||||
return 0
|
||||
|
||||
/datum/nano_module/alarm_monitor/proc/minor_alarms()
|
||||
var/z = get_z(nano_host())
|
||||
var/list/all_alarms = new()
|
||||
for(var/datum/alarm_handler/AH in alarm_handlers)
|
||||
all_alarms += AH.minor_alarms()
|
||||
all_alarms += AH.minor_alarms(z)
|
||||
|
||||
return all_alarms
|
||||
|
||||
@@ -104,9 +108,10 @@
|
||||
var/list/data = host.initial_data()
|
||||
|
||||
var/categories[0]
|
||||
var/z = get_z(nano_host())
|
||||
for(var/datum/alarm_handler/AH in alarm_handlers)
|
||||
categories[++categories.len] = list("category" = AH.category, "alarms" = list())
|
||||
for(var/datum/alarm/A in AH.major_alarms())
|
||||
for(var/datum/alarm/A in AH.visible_alarms(z))
|
||||
var/cameras[0]
|
||||
var/lost_sources[0]
|
||||
|
||||
@@ -118,7 +123,7 @@
|
||||
lost_sources[++lost_sources.len] = AS.source_name
|
||||
|
||||
categories[categories.len]["alarms"] += list(list(
|
||||
"name" = sanitize(A.alarm_name()),
|
||||
"name" = sanitize("[A.alarm_name()]" + "[A.max_severity() > 1 ? "(MAJOR)" : ""]"),
|
||||
"origin_lost" = A.origin == null,
|
||||
"has_cameras" = cameras.len,
|
||||
"cameras" = cameras,
|
||||
|
||||
@@ -47,12 +47,17 @@
|
||||
/datum/nano_module/atmos_control/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1, var/master_ui = null, var/datum/topic_state/state = default_state)
|
||||
var/list/data = host.initial_data()
|
||||
var/alarms[0]
|
||||
var/turf/T = get_turf(nano_host())
|
||||
|
||||
var/z = get_z(nano_host())
|
||||
var/list/map_levels = using_map.get_map_levels(z)
|
||||
data["map_levels"] = map_levels
|
||||
|
||||
// TODO: Move these to a cache, similar to cameras
|
||||
for(var/obj/machinery/alarm/alarm in (monitored_alarms.len ? monitored_alarms : machines))
|
||||
if(!monitored_alarms.len && alarm.alarms_hidden)
|
||||
continue
|
||||
if(!(alarm.z in map_levels))
|
||||
continue
|
||||
alarms[++alarms.len] = list(
|
||||
"name" = sanitize(alarm.name),
|
||||
"ref"= "\ref[alarm]",
|
||||
@@ -61,7 +66,6 @@
|
||||
"y" = alarm.y,
|
||||
"z" = alarm.z)
|
||||
data["alarms"] = alarms
|
||||
data["map_levels"] = using_map.get_map_levels(T.z)
|
||||
|
||||
ui = SSnanoui.try_update_ui(user, src, ui_key, ui, data, force_open)
|
||||
if(!ui)
|
||||
|
||||
@@ -53,10 +53,15 @@
|
||||
var/list/sensors = list()
|
||||
// Focus: If it remains null if no sensor is selected and UI will display sensor list, otherwise it will display sensor reading.
|
||||
var/obj/machinery/power/sensor/focus = null
|
||||
var/turf/T = get_turf(nano_host())
|
||||
|
||||
var/z = get_z(nano_host())
|
||||
var/list/map_levels = using_map.get_map_levels(z)
|
||||
data["map_levels"] = map_levels
|
||||
|
||||
// Build list of data from sensor readings.
|
||||
for(var/obj/machinery/power/sensor/S in grid_sensors)
|
||||
if(!(S.z in map_levels))
|
||||
continue
|
||||
sensors.Add(list(list(
|
||||
"name" = S.name_tag,
|
||||
"alarm" = S.check_grid_warning()
|
||||
@@ -67,7 +72,6 @@
|
||||
data["all_sensors"] = sensors
|
||||
if(focus)
|
||||
data["focus"] = focus.return_reading_data()
|
||||
data["map_levels"] = using_map.get_map_levels(T.z)
|
||||
|
||||
ui = SSnanoui.try_update_ui(user, src, ui_key, ui, data, force_open)
|
||||
if (!ui)
|
||||
|
||||
@@ -122,11 +122,19 @@
|
||||
// Description: Refreshes local list of known devices.
|
||||
/datum/nano_module/rcon/proc/FindDevices()
|
||||
known_SMESs = new /list()
|
||||
|
||||
var/z = get_z(nano_host())
|
||||
var/list/map_levels = using_map.get_map_levels(z)
|
||||
|
||||
for(var/obj/machinery/power/smes/buildable/SMES in machines)
|
||||
if(!(SMES.z in map_levels))
|
||||
continue
|
||||
if(SMES.RCon_tag && (SMES.RCon_tag != "NO_TAG") && SMES.RCon)
|
||||
known_SMESs.Add(SMES)
|
||||
|
||||
known_breakers = new /list()
|
||||
for(var/obj/machinery/power/breakerbox/breaker in machines)
|
||||
if(!(breaker.z in map_levels))
|
||||
continue
|
||||
if(breaker.RCon_tag != "NO_TAG")
|
||||
known_breakers.Add(breaker)
|
||||
|
||||
@@ -41,10 +41,10 @@
|
||||
// Refreshes list of active supermatter crystals
|
||||
/datum/nano_module/supermatter_monitor/proc/refresh()
|
||||
supermatters = list()
|
||||
var/turf/T = get_turf(nano_host())
|
||||
if(!T)
|
||||
var/z = get_z(nano_host())
|
||||
if(!z)
|
||||
return
|
||||
var/valid_z_levels = (GetConnectedZlevels(T.z) & using_map.station_levels)
|
||||
var/valid_z_levels = using_map.get_map_levels(z)
|
||||
for(var/obj/machinery/power/supermatter/S in machines)
|
||||
// Delaminating, not within coverage, not on a tile.
|
||||
if(S.grav_pulling || S.exploded || !(S.z in valid_z_levels) || !istype(S.loc, /turf/))
|
||||
|
||||
@@ -15,6 +15,12 @@
|
||||
return access_research
|
||||
if(NETWORK_ERT)
|
||||
return access_cent_specops
|
||||
//VOREStation Add Start
|
||||
if(NETWORK_TALON_SHIP)
|
||||
return access_talon
|
||||
if(NETWORK_TALON_HELMETS)
|
||||
return access_talon
|
||||
//VOREStation Add End
|
||||
|
||||
if(network in using_map.station_networks)
|
||||
return access_security // Default for all other station networks
|
||||
@@ -62,8 +68,10 @@
|
||||
|
||||
data["networks"] = all_networks
|
||||
|
||||
var/list/map_levels = using_map.get_map_levels(get_z(nano_host()), TRUE)
|
||||
|
||||
if(current_network)
|
||||
data["cameras"] = camera_repository.cameras_in_network(current_network)
|
||||
data["cameras"] = camera_repository.cameras_in_network(current_network, map_levels)
|
||||
|
||||
ui = SSnanoui.try_update_ui(user, src, ui_key, ui, data, force_open)
|
||||
if (!ui)
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/datum/computer_file/program/suit_sensors
|
||||
filename = "sensormonitor"
|
||||
filedesc = "Suit Sensors Monitoring"
|
||||
nanomodule_path = /datum/nano_module/crew_monitor
|
||||
nanomodule_path = /datum/nano_module/program/crew_monitor
|
||||
program_icon_state = "crew"
|
||||
program_key_state = "med_key"
|
||||
program_menu_icon = "heart"
|
||||
@@ -12,13 +12,10 @@
|
||||
size = 11
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/datum/nano_module/crew_monitor
|
||||
/datum/nano_module/program/crew_monitor
|
||||
name = "Crew monitor"
|
||||
|
||||
/datum/nano_module/crew_monitor/Topic(href, href_list)
|
||||
/datum/nano_module/program/crew_monitor/Topic(href, href_list)
|
||||
if(..()) return 1
|
||||
var/turf/T = get_turf(nano_host()) // TODO: Allow setting any using_map.contact_levels from the interface.
|
||||
if (!T || !(T.z in using_map.player_levels))
|
||||
@@ -32,20 +29,25 @@
|
||||
AI.ai_actual_track(H)
|
||||
return 1
|
||||
|
||||
/datum/nano_module/crew_monitor/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1, var/datum/topic_state/state = default_state)
|
||||
/datum/nano_module/program/crew_monitor/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1, var/datum/topic_state/state = default_state)
|
||||
var/list/data = host.initial_data()
|
||||
var/turf/T = get_turf(nano_host())
|
||||
|
||||
data["isAI"] = isAI(user)
|
||||
data["map_levels"] = using_map.get_map_levels(T.z, FALSE)
|
||||
|
||||
var/z = get_z(nano_host())
|
||||
var/list/map_levels = using_map.get_map_levels(z, TRUE)
|
||||
data["map_levels"] = map_levels
|
||||
|
||||
data["crewmembers"] = list()
|
||||
for(var/z in data["map_levels"]) // VOREStation Edit
|
||||
data["crewmembers"] += crew_repository.health_data(z)
|
||||
for(var/zlevel in map_levels)
|
||||
data["crewmembers"] += crew_repository.health_data(zlevel)
|
||||
|
||||
if(!data["map_levels"].len)
|
||||
to_chat(user, "<span class='warning'>The crew monitor doesn't seem like it'll work here.</span>")
|
||||
if(ui) // VOREStation Addition
|
||||
ui.close() // VOREStation Addition
|
||||
if(program)
|
||||
program.kill_program()
|
||||
else if(ui)
|
||||
ui.close()
|
||||
return
|
||||
|
||||
ui = SSnanoui.try_update_ui(user, src, ui_key, ui, data, force_open)
|
||||
@@ -65,7 +67,7 @@
|
||||
// should make the UI auto-update; doesn't seem to?
|
||||
ui.set_auto_update(1)
|
||||
|
||||
/*/datum/nano_module/crew_monitor/proc/scan()
|
||||
/*/datum/nano_module/program/crew_monitor/proc/scan()
|
||||
for(var/mob/living/carbon/human/H in mob_list)
|
||||
if(istype(H.w_uniform, /obj/item/clothing/under))
|
||||
var/obj/item/clothing/under/C = H.w_uniform
|
||||
|
||||
@@ -0,0 +1,63 @@
|
||||
/datum/computer_file/program/ship_nav
|
||||
filename = "navviewer"
|
||||
filedesc = "Ship Navigational Screen"
|
||||
nanomodule_path = /datum/nano_module/program/ship/nav
|
||||
program_icon_state = "helm"
|
||||
program_key_state = "generic_key"
|
||||
program_menu_icon = "search"
|
||||
extended_desc = "Displays a ship's location in the sector."
|
||||
required_access = null
|
||||
requires_ntnet = 1
|
||||
network_destination = "ship position sensors"
|
||||
size = 4
|
||||
|
||||
/datum/nano_module/program/ship/nav
|
||||
name = "Navigation Display"
|
||||
|
||||
/datum/nano_module/program/ship/nav/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1, var/datum/topic_state/state = default_state)
|
||||
if(!linked)
|
||||
to_chat(user, "<span class='warning'>You don't appear to be on a spaceship...</span>")
|
||||
if(program)
|
||||
program.kill_program()
|
||||
else if(ui)
|
||||
ui.close()
|
||||
return
|
||||
|
||||
var/list/data = list()
|
||||
if(program)
|
||||
data = program.get_header_data()
|
||||
|
||||
var/turf/T = get_turf(linked)
|
||||
var/obj/effect/overmap/visitable/sector/current_sector = locate() in T
|
||||
|
||||
data["sector"] = current_sector ? current_sector.name : "Deep Space"
|
||||
data["sector_info"] = current_sector ? current_sector.desc : "Not Available"
|
||||
data["s_x"] = linked.x
|
||||
data["s_y"] = linked.y
|
||||
data["speed"] = round(linked.get_speed()*1000, 0.01)
|
||||
data["accel"] = round(linked.get_acceleration()*1000, 0.01)
|
||||
data["heading"] = linked.get_heading_degrees()
|
||||
data["viewing"] = viewing_overmap(user)
|
||||
|
||||
if(linked.get_speed())
|
||||
data["ETAnext"] = "[round(linked.ETA()/10)] seconds"
|
||||
else
|
||||
data["ETAnext"] = "N/A"
|
||||
|
||||
ui = SSnanoui.try_update_ui(user, src, ui_key, ui, data, force_open)
|
||||
if (!ui)
|
||||
ui = new(user, src, ui_key, "nav.tmpl", "[linked.name] Navigation Screen", 380, 530, state = state)
|
||||
ui.set_initial_data(data)
|
||||
ui.open()
|
||||
ui.set_auto_update(1)
|
||||
|
||||
/datum/nano_module/program/ship/nav/OnTopic(var/mob/user, var/list/href_list)
|
||||
if(..())
|
||||
return TOPIC_HANDLED
|
||||
|
||||
if (!linked)
|
||||
return TOPIC_NOACTION
|
||||
|
||||
if (href_list["viewing"])
|
||||
viewing_overmap(user) ? unlook(user) : look(user)
|
||||
return TOPIC_REFRESH
|
||||
@@ -0,0 +1,87 @@
|
||||
/datum/nano_module/program/ship
|
||||
var/obj/effect/overmap/visitable/ship/linked
|
||||
var/list/viewers
|
||||
var/extra_view = 0
|
||||
|
||||
/datum/nano_module/program/ship/New()
|
||||
..()
|
||||
sync_linked()
|
||||
if(linked)
|
||||
name = "[linked.name] [name]"
|
||||
|
||||
/datum/nano_module/program/ship/Destroy()
|
||||
if(LAZYLEN(viewers))
|
||||
for(var/weakref/W in viewers)
|
||||
var/M = W.resolve()
|
||||
if(M)
|
||||
unlook(M)
|
||||
. = ..()
|
||||
|
||||
/datum/nano_module/program/ship/proc/sync_linked()
|
||||
var/obj/effect/overmap/visitable/ship/sector = get_overmap_sector(get_z(nano_host()))
|
||||
if(!sector)
|
||||
return
|
||||
return attempt_hook_up_recursive(sector)
|
||||
|
||||
/datum/nano_module/program/ship/proc/attempt_hook_up_recursive(obj/effect/overmap/visitable/ship/sector)
|
||||
if(attempt_hook_up(sector))
|
||||
return sector
|
||||
for(var/obj/effect/overmap/visitable/ship/candidate in sector)
|
||||
if((. = .(candidate)))
|
||||
return
|
||||
|
||||
/datum/nano_module/program/ship/proc/attempt_hook_up(obj/effect/overmap/visitable/ship/sector)
|
||||
if(!istype(sector))
|
||||
return
|
||||
if(sector.check_ownership(nano_host()))
|
||||
linked = sector
|
||||
return 1
|
||||
|
||||
/datum/nano_module/program/ship/proc/look(var/mob/user)
|
||||
if(linked)
|
||||
user.machine = nano_host()
|
||||
user.reset_view(linked)
|
||||
user.set_viewsize(world.view + extra_view)
|
||||
GLOB.moved_event.register(user, src, /datum/nano_module/program/ship/proc/unlook)
|
||||
LAZYDISTINCTADD(viewers, weakref(user))
|
||||
|
||||
/datum/nano_module/program/ship/proc/unlook(var/mob/user)
|
||||
user.reset_view()
|
||||
user.set_viewsize() // reset to default
|
||||
GLOB.moved_event.unregister(user, src, /datum/nano_module/program/ship/proc/unlook)
|
||||
LAZYREMOVE(viewers, weakref(user))
|
||||
|
||||
/datum/nano_module/program/ship/proc/viewing_overmap(mob/user)
|
||||
return (weakref(user) in viewers)
|
||||
|
||||
/datum/nano_module/program/ship/proc/DefaultTopicState()
|
||||
return global.default_state
|
||||
|
||||
/datum/nano_module/program/ship/Topic(var/href, var/href_list = list(), var/datum/topic_state/state)
|
||||
if((. = ..()))
|
||||
return
|
||||
state = state || DefaultTopicState() || global.default_state
|
||||
if(CanUseTopic(usr, state, href_list) == STATUS_INTERACTIVE)
|
||||
CouldUseTopic(usr)
|
||||
return OnTopic(usr, href_list, state)
|
||||
CouldNotUseTopic(usr)
|
||||
return TRUE
|
||||
|
||||
/datum/nano_module/program/ship/proc/OnTopic(var/mob/user, var/href_list, var/datum/topic_state/state)
|
||||
return TOPIC_NOACTION
|
||||
|
||||
/datum/nano_module/program/ship/proc/CouldNotUseTopic(mob/user)
|
||||
. = ..()
|
||||
unlook(user)
|
||||
|
||||
/datum/nano_module/program/ship/proc/CouldUseTopic(mob/user)
|
||||
. = ..()
|
||||
if(viewing_overmap(user))
|
||||
look(user)
|
||||
|
||||
/datum/nano_module/program/ship/check_eye(var/mob/user)
|
||||
if (!get_dist(user, nano_host()) > 1 || user.blinded || !linked )
|
||||
unlook(user)
|
||||
return -1
|
||||
else
|
||||
return 0
|
||||
@@ -79,20 +79,25 @@ var/global/ntnet_card_uid = 1
|
||||
return 0
|
||||
|
||||
if(holder2)
|
||||
var/turf/T = get_turf(holder2)
|
||||
if(!istype(T)) //no reception in nullspace
|
||||
var/holderz = get_z(holder2)
|
||||
if(!holderz) //no reception in nullspace
|
||||
return 0
|
||||
if(T.z in using_map.station_levels)
|
||||
// Computer is on station. Low/High signal depending on what type of network card you have
|
||||
if(long_range)
|
||||
return 2
|
||||
else
|
||||
return 1
|
||||
if(T.z in using_map.contact_levels) //not on station, but close enough for radio signal to travel
|
||||
if(long_range) // Computer is not on station, but it has upgraded network card. Low signal.
|
||||
return 1
|
||||
|
||||
return 0 // Computer is not on station and does not have upgraded network card. No signal.
|
||||
var/list/zlevels_in_range = using_map.get_map_levels(holderz, long_range)
|
||||
var/best = 0
|
||||
for(var/relay in ntnet_global.relays)
|
||||
var/obj/machinery/ntnet_relay/R = relay
|
||||
//Relay is down
|
||||
if(!R.operable())
|
||||
continue
|
||||
//We're on the same z
|
||||
if(R.z == holderz)
|
||||
best = 2
|
||||
break // No point in going further
|
||||
//Not on the same z but within range anyway
|
||||
if(R.z in zlevels_in_range)
|
||||
best = 1
|
||||
return best
|
||||
return 0 // No computer!
|
||||
|
||||
/obj/item/weapon/computer_hardware/network_card/Destroy()
|
||||
if(holder2 && (holder2.network_card == src))
|
||||
|
||||
Reference in New Issue
Block a user