Files
Kashargul f881d54dbf Panel port test [IDB IGNORE] (#17350)
* no more self callbacks on update fullness

* fix missing code

* Belly test

* import type

* full partiy

* .

* fix preview

* in belly to late join

* robot nutri

* .

* .

* update export

* finish open todos

* code cleanup

* fix some old slacking

* move this to a define

* fixing

* ,

* .

* Creates a Consume Belly Reagents pref (#10)

* Creates a Consume Belly Reagents pref

Added a Consume Belly Reagents pref that blocks the consumption of all reagents produced by a belly via reagent containers such as food, drink, beakers, pills, syringes and hyposprays. Seems to work well as intended.

* These changes at least do not cause any problems

* Missed this one

* Reverts reagent_names

* _BELLY versions

* Fixed typo

* .

* fix admin spawn mobs bellies

* also fix that bug

* hints

* fix that

* .

* initial

* should be all

* that is no longer needed

* fluids into hand items

I was convinced this was broken until it was pointed out that the item has to be ON THE GROUND to fill it...Instead of in your hand. That seems so convoluted.

ARC = active-hand reagent container. IRC = inactive-hand reagent container.

* some stuff

---------

Co-authored-by: SatinIsle <98125273+SatinIsle@users.noreply.github.com>
Co-authored-by: Cameron Lennox <killer65311@gmail.com>
2025-03-16 17:08:47 -04:00

169 lines
5.3 KiB
Plaintext

/obj/machinery/computer/looking_glass
name = "looking glass control"
desc = "Controls the looking glass displays in this room. Provided courtesy of NT's Advanced Spatial Imaging Division."
icon_keyboard = "tech_key"
icon_screen = "holocontrol"
var/static/list/supported_programs = list()
var/static/list/secret_programs = list()
use_power = USE_POWER_IDLE
active_power_usage = 8000
var/current_program = "Off"
var/area/looking_glass/my_area
var/last_gravity_change = 0
var/ready = TRUE
var/immersion = FALSE
var/lg_id = "change_me"
/obj/machinery/computer/looking_glass/Initialize(mapload)
. = ..()
for(var/area/looking_glass/lga in world)
if(lga.lg_id == lg_id)
my_area = lga
break
if(!istype(my_area))
testing("Looking glass console [x],[y],[x] not in a looking glass area.")
if(!supported_programs.len)
supported_programs["Off"] = null
supported_programs["Diagnostics"] = image(icon = 'icons/skybox/skybox.dmi', icon_state = "diagnostic")
supported_programs["Space 1"] = image(icon = 'icons/skybox/skybox.dmi', icon_state = "space1")
supported_programs["Space 2"] = image(icon = 'icons/skybox/skybox.dmi', icon_state = "space2")
supported_programs["Space 3"] = image(icon = 'icons/skybox/skybox.dmi', icon_state = "space3")
supported_programs["Space 4"] = image(icon = 'icons/skybox/skybox.dmi', icon_state = "space4")
supported_programs["Space 5"] = image(icon = 'icons/skybox/skybox.dmi', icon_state = "space5")
supported_programs["Space 6"] = image(icon = 'icons/skybox/skybox.dmi', icon_state = "space6")
secret_programs["Maw"] = image(icon = 'icons/skybox/skybox_vr.dmi', icon_state = "maw")
secret_programs["Flesh"] = image(icon = 'icons/skybox/skybox_vr.dmi', icon_state = "flesh")
secret_programs["Synth Int"] = image(icon = 'icons/skybox/skybox_vr.dmi', icon_state = "synthinsides")
secret_programs["Synth Int 2"] = image(icon = 'icons/skybox/skybox_vr.dmi', icon_state = "synthinsides_active")
secret_programs["Two Teshari"] = image(icon = 'icons/skybox/skybox_vr.dmi', icon_state = "doubletesh")
secret_programs["Teshari 1"] = image(icon = 'icons/skybox/skybox_vr.dmi', icon_state = "sca")
secret_programs["Teshari 2"] = image(icon = 'icons/skybox/skybox_vr.dmi', icon_state = "eis")
/obj/machinery/computer/looking_glass/Destroy()
my_area = null
return ..()
/obj/machinery/computer/looking_glass/attack_ai(var/mob/user as mob)
return attack_hand(user)
/obj/machinery/computer/looking_glass/attack_hand(var/mob/user as mob)
if(..())
return
tgui_interact(user)
/obj/machinery/computer/looking_glass/tgui_interact(mob/user, datum/tgui/ui)
ui = SStgui.try_update_ui(user, src, ui)
if(!ui)
ui = new(user, src, "LookingGlass", name)
ui.open()
/obj/machinery/computer/looking_glass/tgui_data(mob/user, datum/tgui/ui, datum/tgui_state/state)
var/list/data = ..()
var/list/program_list = list()
for(var/P in supported_programs)
program_list.Add(P)
if(emagged)
for(var/P in secret_programs)
program_list.Add(P)
data["supportedPrograms"] = program_list
data["currentProgram"] = current_program
data["immersion"] = immersion
if(my_area?.get_gravity())
data["gravity"] = 1
else
data["gravity"] = 0
return data
/obj/machinery/computer/looking_glass/tgui_act(action, list/params, datum/tgui/ui, datum/tgui_state/state)
if(..())
return TRUE
switch(action)
if("program")
if(ready)
var/prog = params["program"]
if(prog == "Off")
current_program = "Off"
unload_program()
else if((prog in supported_programs) || (emagged && (prog in secret_programs)))
current_program = prog
load_program(prog)
else
visible_message(span_warning("ERROR. Recalibrating displays."))
return TRUE
if("gravity")
toggle_gravity(my_area)
return TRUE
if("immersion")
immersion = !immersion
my_area.toggle_optional(immersion)
return TRUE
add_fingerprint(ui.user)
/obj/machinery/computer/looking_glass/emag_act(var/remaining_charges, var/mob/user as mob)
if (!emagged)
playsound(src, 'sound/effects/sparks4.ogg', 75, 1)
emagged = 1
to_chat(user, span_notice("You unlock several programs that were hidden somewhere in memory."))
log_game("[key_name(user)] emagged the [name]")
return 1
return
/obj/machinery/computer/looking_glass/proc/load_program(var/prog_name)
ready = FALSE
VARSET_IN(src, ready, TRUE, 10 SECONDS)
if(prog_name in supported_programs)
my_area.begin_program(supported_programs[prog_name])
else if(prog_name in secret_programs)
my_area.begin_program(secret_programs[prog_name])
/obj/machinery/computer/looking_glass/proc/unload_program()
ready = FALSE
VARSET_IN(src, ready, TRUE, 10 SECONDS)
my_area.end_program()
/obj/machinery/computer/looking_glass/proc/toggle_gravity(var/area/A)
if(world.time < (last_gravity_change + 3 SECONDS))
if(world.time < (last_gravity_change + 1 SECOND))
return
visible_message(span_warning("ERROR. Recalibrating gravity field."))
return
last_gravity_change = world.time
if(A.get_gravity())
A.gravitychange(0)
else
A.gravitychange(1)
//This could all be done better, but it works for now.
/obj/machinery/computer/looking_glass/Destroy()
unload_program()
. = ..()
/obj/machinery/computer/looking_glass/ex_act(severity)
unload_program()
..()
/obj/machinery/computer/looking_glass/power_change()
var/oldstat = stat
..()
if (stat != oldstat && (stat & NOPOWER))
unload_program()