mirror of
https://github.com/quotefox/Hyper-Station-13.git
synced 2026-08-23 12:46:17 +01:00
Merge remote-tracking branch 'upstream/master' into fairylights
This commit is contained in:
@@ -68,6 +68,20 @@
|
||||
/obj/item/toy/cards/deck/syndicate = 2
|
||||
)
|
||||
|
||||
/obj/effect/spawner/lootdrop/trash
|
||||
name = "maint trash spawner"
|
||||
loot = list(/obj/item/cigbutt = 1,
|
||||
/obj/item/trash/cheesie = 1,
|
||||
/obj/item/trash/candy = 1,
|
||||
/obj/item/trash/chips = 1,
|
||||
/obj/item/reagent_containers/food/snacks/deadmouse = 1,
|
||||
/obj/item/trash/pistachios = 1,
|
||||
/obj/item/trash/plate = 1,
|
||||
/obj/item/trash/popcorn = 1,
|
||||
/obj/item/trash/raisins = 1,
|
||||
/obj/item/trash/sosjerky = 1,
|
||||
/obj/item/trash/syndi_cakes = 1)
|
||||
|
||||
/obj/effect/spawner/lootdrop/grille_or_trash
|
||||
name = "maint grille or trash spawner"
|
||||
loot = list(/obj/structure/grille = 5,
|
||||
|
||||
@@ -243,13 +243,13 @@ GLOBAL_LIST_INIT(transit_tube_recipes, list(
|
||||
. = replacetext(html, "<!--customheadhtml-->", assets.css_tag())
|
||||
|
||||
/obj/item/pipe_dispenser/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, \
|
||||
datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state)
|
||||
datum/tgui/master_ui = null, datum/tgui_state/state = GLOB.tgui_default_state)
|
||||
ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
|
||||
if(!ui)
|
||||
var/datum/asset/assets = get_asset_datum(/datum/asset/spritesheet/pipes)
|
||||
assets.send(user)
|
||||
|
||||
ui = new(user, src, ui_key, "rpd", name, 425, 472, master_ui, state)
|
||||
ui = new(user, src, ui_key, "RapidPipeDispenser", name, 425, 472, master_ui, state)
|
||||
ui.open()
|
||||
|
||||
/obj/item/pipe_dispenser/ui_data(mob/user)
|
||||
|
||||
+1095
-1091
File diff suppressed because it is too large
Load Diff
@@ -145,12 +145,12 @@
|
||||
to_chat(user, "<span class='warning'>There is not enough of [src] left!</span>")
|
||||
. = TRUE
|
||||
|
||||
/obj/item/toy/crayon/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.hands_state)
|
||||
/obj/item/toy/crayon/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/tgui_state/state = GLOB.tgui_hands_state)
|
||||
// tgui is a plague upon this codebase
|
||||
|
||||
SStgui.try_update_ui(user, src, ui_key, ui, force_open)
|
||||
if(!ui)
|
||||
ui = new(user, src, ui_key, "crayon", name, 600, 600,
|
||||
ui = new(user, src, ui_key, "Crayon", name, 600, 600,
|
||||
master_ui, state)
|
||||
ui.open()
|
||||
|
||||
|
||||
@@ -48,10 +48,10 @@
|
||||
icon_state = initial(icon_state)
|
||||
|
||||
/obj/item/aicard/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, \
|
||||
datum/tgui/master_ui = null, datum/ui_state/state = GLOB.hands_state)
|
||||
datum/tgui/master_ui = null, datum/tgui_state/state = GLOB.tgui_hands_state)
|
||||
ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
|
||||
if(!ui)
|
||||
ui = new(user, src, ui_key, "intellicard", name, 500, 500, master_ui, state)
|
||||
ui = new(user, src, ui_key, "Intellicard", name, 500, 500, master_ui, state)
|
||||
ui.open()
|
||||
|
||||
/obj/item/aicard/ui_data()
|
||||
|
||||
@@ -11,7 +11,6 @@
|
||||
var/min_health = -100
|
||||
var/cleaning = FALSE
|
||||
var/cleaning_cycles = 10
|
||||
var/patient_laststat = null
|
||||
var/list/injection_chems = list(/datum/reagent/medicine/antitoxin, /datum/reagent/medicine/epinephrine,
|
||||
/datum/reagent/medicine/salbutamol, /datum/reagent/medicine/bicaridine, /datum/reagent/medicine/kelotane)
|
||||
var/eject_port = "ingestion"
|
||||
@@ -86,16 +85,16 @@
|
||||
if(patient)
|
||||
to_chat(user, "<span class='warning'>Your [src] is already occupied.</span>")
|
||||
return
|
||||
user.visible_message("<span class='warning'>[hound.name] is carefully inserting [target.name] into their [src].</span>", "<span class='notice'>You start placing [target] into your [src]...</span>")
|
||||
|
||||
user.visible_message("<span class='warning'>[hound.name] is carefully inserting [target.name] into their [src].</span>",
|
||||
"<span class='notice'>You start placing [target] into your [src]...</span>")
|
||||
|
||||
if(!patient && iscarbon(target) && !target.buckled && do_after (user, 100, target = target))
|
||||
|
||||
if(!in_range(src, target)) //Proximity is probably old news by now, do a new check.
|
||||
return //If they moved away, you can't eat them.
|
||||
|
||||
if(!in_range(src, target))
|
||||
return
|
||||
if(patient)
|
||||
return //If you try to eat two people at once, you can only eat one.
|
||||
|
||||
else //If you don't have someone in you, proceed.
|
||||
return
|
||||
else
|
||||
if(!isjellyperson(target) && ("toxin" in injection_chems))
|
||||
injection_chems -= "toxin"
|
||||
injection_chems += "antitoxin"
|
||||
@@ -104,8 +103,8 @@
|
||||
injection_chems += "toxin"
|
||||
target.forceMove(src)
|
||||
target.reset_perspective(src)
|
||||
target.ExtinguishMob() //The tongue already puts out fire stacks but being put into the sleeper shouldn't allow you to keep burning.
|
||||
update_gut(hound)
|
||||
target.ExtinguishMob()
|
||||
UpdateGut(hound)
|
||||
user.visible_message("<span class='warning'>[voracious ? "[hound]'s [src.name] lights up and expands as [target] slips inside into their [src.name]." : "[hound]'s sleeper indicator lights up as [target] is scooped up into [hound.p_their()] [src]."]</span>", \
|
||||
"<span class='notice'>Your [voracious ? "[src.name] lights up as [target] slips into" : "sleeper indicator light shines brightly as [target] is scooped inside"] your [src]. Life support functions engaged.</span>")
|
||||
message_admins("[key_name(hound)] has sleeper'd [key_name(patient)] as a dogborg. [ADMIN_JMP(src)]")
|
||||
@@ -156,7 +155,7 @@
|
||||
items_preserved.Cut()
|
||||
cleaning = FALSE
|
||||
if(hound)
|
||||
update_gut(hound)
|
||||
UpdateGut(hound)
|
||||
|
||||
|
||||
/obj/item/dogborg/sleeper/attack_self(mob/user)
|
||||
@@ -166,16 +165,22 @@
|
||||
ui_interact(user)
|
||||
|
||||
/obj/item/dogborg/sleeper/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, \
|
||||
datum/tgui/master_ui = null, datum/ui_state/state = GLOB.notcontained_state)
|
||||
datum/tgui/master_ui = null, datum/tgui_state/state = GLOB.tgui_notcontained_state)
|
||||
|
||||
ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
|
||||
if(!ui)
|
||||
ui = new(user, src, ui_key, "dogborg_sleeper", name, 375, 550, master_ui, state)
|
||||
ui = new(user, src, ui_key, "DogborgSleeper", name, 375, 550, master_ui, state)
|
||||
ui.open()
|
||||
|
||||
/obj/item/dogborg/sleeper/ui_data()
|
||||
var/list/data = list()
|
||||
var/chemical_list = list()
|
||||
var/blood_percent = 0
|
||||
|
||||
data["occupied"] = patient ? 1 : 0
|
||||
data["blood_levels"] = blood_percent
|
||||
data["blood_status"] = "Patient either has no blood, or does not require it to function."
|
||||
data["chemical_list"] = chemical_list
|
||||
|
||||
if(cleaning && length(contents - items_preserved))
|
||||
data["items"] = "Self-cleaning mode active: [length(contents - items_preserved)] object(s) remaining."
|
||||
@@ -184,7 +189,7 @@
|
||||
data["chem"] = list()
|
||||
for(var/chem in injection_chems)
|
||||
var/datum/reagent/R = GLOB.chemical_reagents_list[chem]
|
||||
data["chem"] += list(list("name" = R.name, "id" = R.type))
|
||||
data["chem"] += list(list("name" = R.name, "id" = R.type, "allowed" = TRUE))
|
||||
|
||||
data["occupant"] = list()
|
||||
var/mob/living/mob_occupant = patient
|
||||
@@ -212,10 +217,41 @@
|
||||
data["occupant"]["fireLoss"] = mob_occupant.getFireLoss()
|
||||
data["occupant"]["cloneLoss"] = mob_occupant.getCloneLoss()
|
||||
data["occupant"]["brainLoss"] = mob_occupant.getOrganLoss(ORGAN_SLOT_BRAIN)
|
||||
data["occupant"]["reagents"] = list()
|
||||
|
||||
if(mob_occupant.reagents.reagent_list.len)
|
||||
for(var/datum/reagent/R in mob_occupant.reagents.reagent_list)
|
||||
data["occupant"]["reagents"] += list(list("name" = R.name, "volume" = R.volume))
|
||||
chemical_list += list(list("name" = R.name, "volume" = R.volume))
|
||||
else
|
||||
chemical_list = "Patient has no reagents."
|
||||
|
||||
data["occupant"]["failing_organs"] = list()
|
||||
var/mob/living/carbon/C = mob_occupant
|
||||
if(C)
|
||||
for(var/obj/item/organ/Or in C.getFailingOrgans())
|
||||
if(istype(Or, /obj/item/organ/brain))
|
||||
continue
|
||||
data["occupant"]["failing_organs"] += list(list("name" = Or.name))
|
||||
|
||||
if(istype(C)) //Non-carbons shouldn't be able to enter sleepers, but this is to prevent runtimes if something ever breaks
|
||||
if(mob_occupant.has_dna()) // Blood-stuff is mostly a copy-paste from the healthscanner.
|
||||
blood_percent = round((C.blood_volume / BLOOD_VOLUME_NORMAL)*100)
|
||||
var/blood_id = C.get_blood_id()
|
||||
var/blood_warning = ""
|
||||
if(blood_percent < 80)
|
||||
blood_warning = "Patient has low blood levels."
|
||||
if(blood_percent < 60)
|
||||
blood_warning = "Patient has DANGEROUSLY low blood levels."
|
||||
if(blood_id)
|
||||
var/blood_type = C.dna.blood_type
|
||||
if(!(blood_id in GLOB.blood_reagent_types)) // special blood substance
|
||||
var/datum/reagent/R = GLOB.chemical_reagents_list[blood_id]
|
||||
if(R)
|
||||
blood_type = R.name
|
||||
else
|
||||
blood_type = blood_id
|
||||
data["blood_status"] = "Patient has [blood_type] type blood. [blood_warning]"
|
||||
data["blood_levels"] = blood_percent
|
||||
|
||||
return data
|
||||
|
||||
/obj/item/dogborg/sleeper/ui_act(action, params)
|
||||
@@ -238,81 +274,42 @@
|
||||
to_chat(src, "Your [src] is already cleaned.")
|
||||
return
|
||||
if(patient)
|
||||
to_chat(patient, "<span class='danger'>[usr.name]'s [src] fills with caustic enzymes around you!</span>")
|
||||
to_chat(patient, "<span class='userdanger'>[usr.name]'s [src] fills with caustic enzymes around you!</span>")
|
||||
to_chat(src, "<span class='danger'>Cleaning process enabled.</span>")
|
||||
clean_cycle(usr)
|
||||
. = TRUE
|
||||
|
||||
/obj/item/dogborg/sleeper/proc/update_gut(mob/living/silicon/robot/hound)
|
||||
//Well, we HAD one, what happened to them?
|
||||
if(!hound) //runetime error fix with dogborgs with no sleepers
|
||||
return
|
||||
|
||||
var/prociconupdate = FALSE
|
||||
var/currentenvy = hound.sleeper_nv
|
||||
hound.sleeper_nv = FALSE
|
||||
if(patient in contents)
|
||||
if(patient_laststat != patient.stat)
|
||||
if(patient.stat & DEAD)
|
||||
hound.sleeper_r = 1
|
||||
hound.sleeper_g = 0
|
||||
patient_laststat = patient.stat
|
||||
else
|
||||
hound.sleeper_r = 0
|
||||
hound.sleeper_g = 1
|
||||
patient_laststat = patient.stat
|
||||
prociconupdate = TRUE
|
||||
|
||||
if(!patient.client || !(patient.client.prefs.cit_toggles & MEDIHOUND_SLEEPER) || !hound.client || !(hound.client.prefs.cit_toggles & MEDIHOUND_SLEEPER))
|
||||
hound.sleeper_nv = TRUE
|
||||
else
|
||||
hound.sleeper_nv = FALSE
|
||||
if(hound.sleeper_nv != currentenvy)
|
||||
prociconupdate = TRUE
|
||||
|
||||
//Update icon
|
||||
if(prociconupdate)
|
||||
hound.update_icons()
|
||||
//Return original patient
|
||||
return(patient)
|
||||
//Check for a new patient
|
||||
else
|
||||
for(var/mob/living/carbon/human/C in contents)
|
||||
patient = C
|
||||
if(patient.stat & DEAD)
|
||||
hound.sleeper_r = 1
|
||||
hound.sleeper_g = 0
|
||||
patient_laststat = patient.stat
|
||||
else
|
||||
hound.sleeper_r = 0
|
||||
hound.sleeper_g = 1
|
||||
patient_laststat = patient.stat
|
||||
|
||||
if(!patient.client || !(patient.client.prefs.cit_toggles & MEDIHOUND_SLEEPER) || !hound.client || !(hound.client.prefs.cit_toggles & MEDIHOUND_SLEEPER))
|
||||
hound.sleeper_nv = TRUE
|
||||
else
|
||||
hound.sleeper_nv = FALSE
|
||||
|
||||
//Update icon and return new patient
|
||||
hound.update_icons()
|
||||
return
|
||||
|
||||
//Cleaning looks better with red on, even with nobody in it
|
||||
if(cleaning && !patient)
|
||||
hound.sleeper_r = 1
|
||||
hound.sleeper_g = 0
|
||||
//Couldn't find anyone, and not cleaning
|
||||
else if(!cleaning && !patient)
|
||||
hound.sleeper_r = 0
|
||||
hound.sleeper_g = 0
|
||||
|
||||
patient_laststat = null
|
||||
/obj/item/dogborg/sleeper/proc/UpdatePatient(mob/living/silicon/robot/hound)
|
||||
patient = null
|
||||
hound.update_icons()
|
||||
for(var/mob/living/carbon/human/C in contents)
|
||||
patient = C
|
||||
break
|
||||
return patient
|
||||
|
||||
/obj/item/dogborg/sleeper/proc/CheckNeedsGutUpdate(mob/living/silicon/robot/hound)
|
||||
if(!hound) return
|
||||
var/current_belly = BORGBELLY_NONE
|
||||
UpdatePatient(hound)
|
||||
if(patient)
|
||||
var/patient_vore_enabled = patient.client?.prefs?.cit_toggles & MEDIHOUND_SLEEPER
|
||||
var/hound_vore_enabled = hound.client?.prefs?.cit_toggles & MEDIHOUND_SLEEPER
|
||||
if(patient_vore_enabled && hound_vore_enabled)
|
||||
if(patient.stat & DEAD)
|
||||
current_belly = BORGBELLY_RED
|
||||
else
|
||||
current_belly = BORGBELLY_GREEN
|
||||
else
|
||||
if(cleaning)
|
||||
current_belly = BORGBELLY_RED
|
||||
return current_belly
|
||||
|
||||
/obj/item/dogborg/sleeper/proc/UpdateGut(mob/living/silicon/robot/hound)
|
||||
var/new_belly = CheckNeedsGutUpdate(hound)
|
||||
if(hound.sleeper_state != new_belly)
|
||||
hound.sleeper_state = new_belly
|
||||
hound.update_icons()
|
||||
|
||||
//Gurgleborg process
|
||||
/obj/item/dogborg/sleeper/proc/clean_cycle(mob/living/silicon/robot/hound)
|
||||
//Sanity
|
||||
if(!hound)
|
||||
return
|
||||
for(var/I in items_preserved)
|
||||
@@ -364,15 +361,13 @@
|
||||
if(!T.dropItemToGround(W))
|
||||
qdel(W)
|
||||
qdel(T)
|
||||
//Handle the target being anything but a mob
|
||||
else if(isobj(target))
|
||||
var/obj/T = target
|
||||
if(T.type in important_items) //If the object is in the items_preserved global list
|
||||
items_preserved += T
|
||||
//If the object is not one to preserve
|
||||
else
|
||||
qdel(T)
|
||||
update_gut()
|
||||
UpdateGut(hound)
|
||||
hound.cell.give(10)
|
||||
else
|
||||
cleaning_cycles = initial(cleaning_cycles)
|
||||
@@ -398,9 +393,8 @@
|
||||
H.playsound_local(source, null, 45, falloff = 0, S = pred_digest)
|
||||
else if(H in contents)
|
||||
H.playsound_local(source, null, 65, falloff = 0, S = prey_digest)
|
||||
|
||||
update_gut(hound)
|
||||
|
||||
|
||||
UpdateGut(hound)
|
||||
if(cleaning)
|
||||
addtimer(CALLBACK(src, .proc/clean_cycle, hound), 50)
|
||||
|
||||
@@ -461,7 +455,7 @@
|
||||
if(do_after(user, 30, target = target) && !patient && !target.buckled)
|
||||
target.forceMove(src)
|
||||
target.reset_perspective(src)
|
||||
update_gut(hound)
|
||||
UpdateGut(hound)
|
||||
user.visible_message("<span class='warning'>[hound.name]'s mobile brig clunks in series as [target] slips inside.</span>", "<span class='notice'>Your mobile brig groans lightly as [target] slips inside.</span>")
|
||||
playsound(hound, 'sound/effects/bin_close.ogg', 80, 1) // Really don't need ERP sound effects for robots
|
||||
|
||||
@@ -489,31 +483,25 @@
|
||||
if(length(contents) > (max_item_count - 1))
|
||||
to_chat(user,"<span class='warning'>Your [src] is full. Eject or process contents to continue.</span>")
|
||||
return
|
||||
|
||||
if(isitem(target))
|
||||
var/obj/item/I = target
|
||||
if(CheckAccepted(I))
|
||||
to_chat(user,"<span class='warning'>[I] registers an error code to your [src]</span>")
|
||||
to_chat(user,"<span class='warning'>[I] registers an error code to your [src].</span>")
|
||||
return
|
||||
if(I.w_class > WEIGHT_CLASS_NORMAL)
|
||||
to_chat(user,"<span class='warning'>[I] is too large to fit into your [src]</span>")
|
||||
to_chat(user,"<span class='warning'>[I] is too large to fit into your [src].</span>")
|
||||
return
|
||||
user.visible_message("<span class='warning'>[hound.name] is ingesting [I] into their [src.name].</span>", "<span class='notice'>You start ingesting [target] into your [src.name]...</span>")
|
||||
if(do_after(user, 15, target = target) && length(contents) < max_item_count)
|
||||
I.forceMove(src)
|
||||
I.visible_message("<span class='warning'>[hound.name]'s garbage processor groans lightly as [I] slips inside.</span>", "<span class='notice'>Your garbage compactor groans lightly as [I] slips inside.</span>")
|
||||
playsound(hound, 'sound/machines/disposalflush.ogg', 50, 1)
|
||||
if(length(contents) > 11) //grow that tum after a certain junk amount
|
||||
hound.sleeper_r = 1
|
||||
hound.update_icons()
|
||||
else
|
||||
hound.sleeper_r = 0
|
||||
hound.update_icons()
|
||||
return
|
||||
|
||||
if(iscarbon(target) || issilicon(target))
|
||||
else if(iscarbon(target) || issilicon(target))
|
||||
var/mob/living/trashman = target
|
||||
if(!trashman.devourable)
|
||||
to_chat(user, "<span class='warning'>[target] registers an error code to your [src]</span>")
|
||||
to_chat(user, "<span class='warning'>[target] registers an error code to your [src].</span>")
|
||||
return
|
||||
if(patient)
|
||||
to_chat(user,"<span class='warning'>Your [src] is already occupied.</span>")
|
||||
@@ -525,6 +513,14 @@
|
||||
if(do_after(user, 30, target = trashman) && !patient && !trashman.buckled && length(contents) < max_item_count)
|
||||
trashman.forceMove(src)
|
||||
trashman.reset_perspective(src)
|
||||
update_gut()
|
||||
user.visible_message("<span class='warning'>[hound.name]'s garbage processor groans lightly as [trashman] slips inside.</span>", "<span class='notice'>Your garbage compactor groans lightly as [trashman] slips inside.</span>")
|
||||
playsound(hound, 'sound/effects/bin_close.ogg', 80, 1)
|
||||
|
||||
UpdateGut(hound)
|
||||
|
||||
|
||||
/obj/item/dogborg/sleeper/compactor/CheckNeedsGutUpdate(mob/living/silicon/robot/hound)
|
||||
var/current_belly = ..()
|
||||
if(length(contents) > 11)
|
||||
current_belly = BORGBELLY_RED
|
||||
return current_belly
|
||||
@@ -65,7 +65,7 @@ GLOBAL_LIST_EMPTY(GPS_list)
|
||||
tracking = TRUE
|
||||
|
||||
|
||||
/obj/item/gps/ui_interact(mob/user, ui_key = "gps", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) // Remember to use the appropriate state.
|
||||
/obj/item/gps/ui_interact(mob/user, ui_key = "gps", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/tgui_state/state = GLOB.tgui_default_state) // Remember to use the appropriate state.
|
||||
if(emped)
|
||||
to_chat(user, "[src] fizzles weakly.")
|
||||
return
|
||||
@@ -74,7 +74,7 @@ GLOBAL_LIST_EMPTY(GPS_list)
|
||||
// Variable window height, depending on how many GPS units there are
|
||||
// to show, clamped to relatively safe range.
|
||||
var/gps_window_height = CLAMP(325 + GLOB.GPS_list.len * 14, 325, 700)
|
||||
ui = new(user, src, ui_key, "gps", "Global Positioning System", 470, gps_window_height, master_ui, state) //width, height
|
||||
ui = new(user, src, ui_key, "Gps", "Global Positioning System", 470, gps_window_height, master_ui, state) //width, height
|
||||
ui.open()
|
||||
|
||||
ui.set_autoupdate(state = updating)
|
||||
|
||||
@@ -93,7 +93,7 @@
|
||||
|
||||
/obj/item/radio/intercom/interact(mob/user)
|
||||
..()
|
||||
ui_interact(user, state = GLOB.default_state)
|
||||
ui_interact(user, state = GLOB.tgui_default_state)
|
||||
|
||||
/obj/item/radio/intercom/can_receive(freq, level)
|
||||
if(!on)
|
||||
|
||||
@@ -107,7 +107,7 @@
|
||||
..()
|
||||
|
||||
/obj/item/radio/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, \
|
||||
datum/tgui/master_ui = null, datum/ui_state/state = GLOB.inventory_state)
|
||||
datum/tgui/master_ui = null, datum/tgui_state/state = GLOB.tgui_inventory_state)
|
||||
. = ..()
|
||||
ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
|
||||
if(!ui)
|
||||
@@ -118,7 +118,7 @@
|
||||
ui_height += 6 + channels.len * 21
|
||||
else
|
||||
ui_height += 24
|
||||
ui = new(user, src, ui_key, "radio", name, ui_width, ui_height, master_ui, state)
|
||||
ui = new(user, src, ui_key, "Radio", name, ui_width, ui_height, master_ui, state)
|
||||
ui.open()
|
||||
|
||||
/obj/item/radio/ui_data(mob/user)
|
||||
|
||||
@@ -135,6 +135,9 @@ GENE SCANNER
|
||||
|
||||
if(ishuman(M))
|
||||
var/mob/living/carbon/human/H = M
|
||||
if (user.stat == 0) //no more ghost scans
|
||||
H.scan_animation()
|
||||
|
||||
if(H.undergoing_cardiac_arrest() && H.stat != DEAD)
|
||||
to_chat(user, "<span class='danger'>Subject suffering from heart attack: Apply defibrillation or other electric shock immediately!</span>")
|
||||
if(H.undergoing_liver_failure() && H.stat != DEAD) //might be depreciated BUG_PROBABLE_CAUSE
|
||||
|
||||
@@ -35,7 +35,7 @@
|
||||
if(!new_grad_color)
|
||||
return
|
||||
|
||||
human_target.hair_color = new_hair_color
|
||||
human_target.hair_color = sanitize_hexcolor(new_hair_color)
|
||||
human_target.grad_style = new_grad_style
|
||||
human_target.grad_color = sanitize_hexcolor(new_grad_color)
|
||||
to_chat(human_target, "<span class='notice'>You start applying the hair dye...</span>")
|
||||
|
||||
@@ -192,11 +192,11 @@
|
||||
|
||||
return top_vote
|
||||
|
||||
/obj/item/toy/eightball/haunted/ui_interact(mob/user, ui_key="main", datum/tgui/ui=null, force_open=0, datum/tgui/master_ui=null, datum/ui_state/state = GLOB.always_state)
|
||||
/obj/item/toy/eightball/haunted/ui_interact(mob/user, ui_key="main", datum/tgui/ui=null, force_open=0, datum/tgui/master_ui=null, datum/tgui_state/state = GLOB.tgui_always_state)
|
||||
|
||||
ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
|
||||
if(!ui)
|
||||
ui = new(user, src, ui_key, "eightball", name, 400, 600, master_ui, state)
|
||||
ui = new(user, src, ui_key, "EightBallVote", name, 400, 600, master_ui, state)
|
||||
ui.open()
|
||||
|
||||
/obj/item/toy/eightball/haunted/ui_data(mob/user)
|
||||
|
||||
@@ -43,7 +43,7 @@
|
||||
deliveryamt = 10
|
||||
|
||||
/obj/item/grenade/spawnergrenade/clustaur
|
||||
desc = "A very strange grenade often found in maintanance. Use of this may constitute a war crime in your area, consult your local captain."
|
||||
desc = "A very strange grenade often found in maintenance. Use of this may constitute a war crime in your area, consult your local captain."
|
||||
name = "clustaur grenade"
|
||||
icon_state = "clustaur"
|
||||
item_state = "clustaur"
|
||||
|
||||
@@ -9,8 +9,8 @@
|
||||
|
||||
/obj/item/implant/radio/activate()
|
||||
. = ..()
|
||||
// needs to be GLOB.deep_inventory_state otherwise it won't open
|
||||
radio.ui_interact(usr, "main", null, FALSE, null, GLOB.deep_inventory_state)
|
||||
// needs to be GLOB.tgui_deep_inventory_state otherwise it won't open
|
||||
radio.ui_interact(usr, "main", null, FALSE, null, GLOB.tgui_deep_inventory_state)
|
||||
|
||||
/obj/item/implant/radio/implant(mob/living/target, mob/user, silent = FALSE)
|
||||
. = ..()
|
||||
|
||||
@@ -50,7 +50,7 @@
|
||||
to_chat(target, "<span class='warning'>You feel something interfering with your mental conditioning, but you resist it!</span>")
|
||||
else
|
||||
to_chat(target, "<span class='notice'>You feel a sense of peace and security. You are now enslaved!</span>")
|
||||
var/slave_objective = "[(target.client?.prefs.lewdchem?"Security has enslaved you into being their pet! Obey their commands, but remember: a good pet is not violent.":"You've been neutralized by security! Follow their orders, but remember: neutralization also means nonviolence.")]"
|
||||
var/slave_objective = "[((target.client?.prefs.cit_toggles & HYPNO)?"Security has enslaved you into being their pet! Obey their commands, but remember: a good pet is not violent.":"You've been neutralized by security! Follow their orders, but remember: neutralization also means nonviolence.")]"
|
||||
brainwash(target, slave_objective)
|
||||
target.sec_hud_set_implants()
|
||||
return TRUE
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
|
||||
/obj/item/implant/uplink/Initialize(mapload, _owner)
|
||||
. = ..()
|
||||
AddComponent(/datum/component/uplink, _owner, TRUE, FALSE, null, starting_tc, GLOB.not_incapacitated_state)
|
||||
AddComponent(/datum/component/uplink, _owner, TRUE, FALSE, null, starting_tc, GLOB.tgui_not_incapacitated_state)
|
||||
|
||||
/obj/item/implanter/uplink
|
||||
name = "implanter (uplink)"
|
||||
|
||||
@@ -27,10 +27,10 @@
|
||||
update_icon()
|
||||
|
||||
|
||||
/obj/machinery/implantchair/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.notcontained_state)
|
||||
/obj/machinery/implantchair/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/tgui_state/state = GLOB.tgui_notcontained_state)
|
||||
ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
|
||||
if(!ui)
|
||||
ui = new(user, src, ui_key, "implantchair", name, 375, 280, master_ui, state)
|
||||
ui = new(user, src, ui_key, "ImplantChair", name, 375, 280, master_ui, state)
|
||||
ui.open()
|
||||
|
||||
|
||||
|
||||
@@ -210,6 +210,7 @@ GLOBAL_LIST_INIT(plasma_recipes, list ( \
|
||||
|
||||
GLOBAL_LIST_INIT(gold_recipes, list ( \
|
||||
new/datum/stack_recipe("golden door", /obj/structure/mineral_door/gold, 10, one_per_turf = 1, on_floor = 1), \
|
||||
new/datum/stack_recipe("throne", /obj/structure/chair/throne, 5, one_per_turf = 1, on_floor = 1), \
|
||||
new/datum/stack_recipe("gold tile", /obj/item/stack/tile/mineral/gold, 1, 4, 20), \
|
||||
new/datum/stack_recipe("HoS Statue", /obj/structure/statue/gold/hos, 5, one_per_turf = 1, on_floor = 1), \
|
||||
new/datum/stack_recipe("HoP Statue", /obj/structure/statue/gold/hop, 5, one_per_turf = 1, on_floor = 1), \
|
||||
|
||||
@@ -113,6 +113,7 @@ GLOBAL_LIST_INIT(metal_recipes, list ( \
|
||||
new/datum/stack_recipe("button frame", /obj/item/wallframe/button, 1), \
|
||||
null, \
|
||||
new/datum/stack_recipe("iron door", /obj/structure/mineral_door/iron, 20, one_per_turf = TRUE, on_floor = TRUE), \
|
||||
new/datum/stack_recipe("pestle", /obj/item/pestle, 1, time = 50), \
|
||||
new/datum/stack_recipe("floodlight frame", /obj/structure/floodlight_frame, 5, one_per_turf = TRUE, on_floor = TRUE), \
|
||||
new/datum/stack_recipe("micro powered fan assembly", /obj/machinery/fan_assembly, 10, time = 50, one_per_turf = TRUE, on_floor = TRUE), \
|
||||
))
|
||||
@@ -250,6 +251,7 @@ GLOBAL_LIST_INIT(wood_recipes, list ( \
|
||||
new/datum/stack_recipe("apiary", /obj/structure/beebox, 40, time = 50),\
|
||||
null, \
|
||||
new/datum/stack_recipe("picture frame", /obj/item/wallframe/picture, 1, time = 10),\
|
||||
new/datum/stack_recipe("mortar", /obj/item/reagent_containers/glass/mortar, 3), \
|
||||
new/datum/stack_recipe("painting frame", /obj/item/wallframe/painting, 1, time = 10),\
|
||||
new/datum/stack_recipe("honey frame", /obj/item/honey_frame, 5, time = 10),\
|
||||
new/datum/stack_recipe("cross", /obj/structure/kitchenspike/cross, 10, time = 10),\
|
||||
|
||||
@@ -153,10 +153,10 @@
|
||||
. = ..()
|
||||
|
||||
/obj/item/tank/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, \
|
||||
datum/tgui/master_ui = null, datum/ui_state/state = GLOB.hands_state)
|
||||
datum/tgui/master_ui = null, datum/tgui_state/state = GLOB.tgui_hands_state)
|
||||
ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
|
||||
if(!ui)
|
||||
ui = new(user, src, ui_key, "tanks", name, 400, 120, master_ui, state)
|
||||
ui = new(user, src, ui_key, "Tank", name, 400, 120, master_ui, state)
|
||||
ui.open()
|
||||
|
||||
/obj/item/tank/ui_data(mob/user)
|
||||
|
||||
@@ -1,89 +1,90 @@
|
||||
//Added by Jack Rost
|
||||
/obj/item/trash
|
||||
icon = 'icons/obj/janitor.dmi'
|
||||
lefthand_file = 'icons/mob/inhands/misc/food_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/misc/food_righthand.dmi'
|
||||
desc = "This is rubbish."
|
||||
w_class = WEIGHT_CLASS_TINY
|
||||
resistance_flags = FLAMMABLE
|
||||
|
||||
/obj/item/trash/raisins
|
||||
name = "\improper 4no raisins"
|
||||
icon_state= "4no_raisins"
|
||||
|
||||
/obj/item/trash/candy
|
||||
name = "candy"
|
||||
icon_state= "candy"
|
||||
|
||||
/obj/item/trash/cheesie
|
||||
name = "cheesie honkers"
|
||||
icon_state = "cheesie_honkers"
|
||||
|
||||
/obj/item/trash/chips
|
||||
name = "chips"
|
||||
icon_state = "chips"
|
||||
|
||||
/obj/item/trash/popcorn
|
||||
name = "popcorn"
|
||||
icon_state = "popcorn"
|
||||
|
||||
/obj/item/trash/sosjerky
|
||||
name = "\improper Scaredy's Private Reserve Beef Jerky"
|
||||
icon_state = "sosjerky"
|
||||
|
||||
/obj/item/trash/syndi_cakes
|
||||
name = "syndi-cakes"
|
||||
icon_state = "syndi_cakes"
|
||||
|
||||
/obj/item/trash/waffles
|
||||
name = "waffles tray"
|
||||
icon_state = "waffles"
|
||||
|
||||
/obj/item/trash/plate
|
||||
name = "plate"
|
||||
icon_state = "plate"
|
||||
resistance_flags = NONE
|
||||
|
||||
/obj/item/trash/pistachios
|
||||
name = "pistachios pack"
|
||||
icon_state = "pistachios_pack"
|
||||
|
||||
/obj/item/trash/semki
|
||||
name = "semki pack"
|
||||
icon_state = "semki_pack"
|
||||
|
||||
/obj/item/trash/tray
|
||||
name = "tray"
|
||||
icon_state = "tray"
|
||||
resistance_flags = NONE
|
||||
|
||||
/obj/item/trash/candle
|
||||
name = "candle"
|
||||
icon = 'icons/obj/candle.dmi'
|
||||
icon_state = "candle4"
|
||||
|
||||
/obj/item/trash/can
|
||||
name = "crushed can"
|
||||
icon_state = "cola"
|
||||
resistance_flags = NONE
|
||||
grind_results = list(/datum/reagent/aluminium = 10)
|
||||
|
||||
/obj/item/trash/boritos
|
||||
name = "boritos bag"
|
||||
icon_state = "boritos"
|
||||
grind_results = list(/datum/reagent/aluminium = 1) //from the mylar bag
|
||||
|
||||
/obj/item/trash/soy_food
|
||||
name = "soyfood"
|
||||
icon_state = "soy_food"
|
||||
|
||||
/obj/item/trash/carbonnanotube_noodles
|
||||
name = "carbon nanotube noodles"
|
||||
icon_state = "carbonnanotube_noodles"
|
||||
|
||||
/obj/item/trash/bird_seed
|
||||
name = "Sunflower Seeds"
|
||||
icon_state = "seedtrash"
|
||||
|
||||
/obj/item/trash/attack(mob/M, mob/living/user)
|
||||
return
|
||||
//Added by Jack Rost
|
||||
/obj/item/trash
|
||||
icon = 'icons/obj/janitor.dmi'
|
||||
lefthand_file = 'icons/mob/inhands/misc/food_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/misc/food_righthand.dmi'
|
||||
desc = "This is rubbish."
|
||||
w_class = WEIGHT_CLASS_TINY
|
||||
resistance_flags = FLAMMABLE
|
||||
|
||||
/obj/item/trash/Initialize()
|
||||
. = ..()
|
||||
AddElement(/datum/element/trash)
|
||||
|
||||
/obj/item/trash/raisins
|
||||
name = "\improper 4no raisins"
|
||||
icon_state= "4no_raisins"
|
||||
|
||||
/obj/item/trash/candy
|
||||
name = "candy"
|
||||
icon_state= "candy"
|
||||
|
||||
/obj/item/trash/cheesie
|
||||
name = "cheesie honkers"
|
||||
icon_state = "cheesie_honkers"
|
||||
|
||||
/obj/item/trash/chips
|
||||
name = "chips"
|
||||
icon_state = "chips"
|
||||
|
||||
/obj/item/trash/popcorn
|
||||
name = "popcorn"
|
||||
icon_state = "popcorn"
|
||||
|
||||
/obj/item/trash/sosjerky
|
||||
name = "\improper Scaredy's Private Reserve Beef Jerky"
|
||||
icon_state = "sosjerky"
|
||||
|
||||
/obj/item/trash/syndi_cakes
|
||||
name = "syndi-cakes"
|
||||
icon_state = "syndi_cakes"
|
||||
|
||||
/obj/item/trash/waffles
|
||||
name = "waffles tray"
|
||||
icon_state = "waffles"
|
||||
|
||||
/obj/item/trash/plate
|
||||
name = "plate"
|
||||
icon_state = "plate"
|
||||
resistance_flags = NONE
|
||||
|
||||
/obj/item/trash/pistachios
|
||||
name = "pistachios pack"
|
||||
icon_state = "pistachios_pack"
|
||||
|
||||
/obj/item/trash/semki
|
||||
name = "semki pack"
|
||||
icon_state = "semki_pack"
|
||||
|
||||
/obj/item/trash/tray
|
||||
name = "tray"
|
||||
icon_state = "tray"
|
||||
resistance_flags = NONE
|
||||
|
||||
/obj/item/trash/candle
|
||||
name = "candle"
|
||||
icon = 'icons/obj/candle.dmi'
|
||||
icon_state = "candle4"
|
||||
|
||||
/obj/item/trash/can
|
||||
name = "crushed can"
|
||||
icon_state = "cola"
|
||||
resistance_flags = NONE
|
||||
grind_results = list(/datum/reagent/aluminium = 10)
|
||||
|
||||
/obj/item/trash/boritos
|
||||
name = "boritos bag"
|
||||
icon_state = "boritos"
|
||||
grind_results = list(/datum/reagent/aluminium = 1) //from the mylar bag
|
||||
|
||||
/obj/item/trash/soy_food
|
||||
name = "soyfood"
|
||||
icon_state = "soy_food"
|
||||
|
||||
/obj/item/trash/carbonnanotube_noodles
|
||||
name = "carbon nanotube noodles"
|
||||
icon_state = "carbonnanotube_noodles"
|
||||
|
||||
/obj/item/trash/bird_seed
|
||||
name = "Sunflower Seeds"
|
||||
icon_state = "seedtrash"
|
||||
|
||||
@@ -77,11 +77,11 @@
|
||||
ui_interact(user)
|
||||
|
||||
/obj/item/canvas/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, \
|
||||
datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state)
|
||||
datum/tgui/master_ui = null, datum/tgui_state/state = GLOB.tgui_default_state)
|
||||
|
||||
ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
|
||||
if(!ui)
|
||||
ui = new(user, src, ui_key, "canvas", name, ui_x, ui_y, master_ui, state)
|
||||
ui = new(user, src, ui_key, "Canvas", name, ui_x, ui_y, master_ui, state)
|
||||
ui.set_autoupdate(FALSE)
|
||||
ui.open()
|
||||
|
||||
@@ -273,16 +273,16 @@
|
||||
if(persistence_id)
|
||||
. += "<span class='notice'>Any painting placed here will be archived at the end of the shift.</span>"
|
||||
if(current_canvas)
|
||||
ui_interact(user, state = GLOB.physical_obscured_state)
|
||||
ui_interact(user, state = GLOB.tgui_physical_obscured_state)
|
||||
. += "<span class='notice'>Use wirecutters to remove the painting.</span>"
|
||||
|
||||
//Hyperstation UI hotwire code ahead. No, I'm not particularly proud of this but if it works, it works.
|
||||
/obj/structure/sign/painting/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, \
|
||||
datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state)
|
||||
datum/tgui/master_ui = null, datum/tgui_state/state = GLOB.tgui_default_state)
|
||||
|
||||
ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
|
||||
if(!ui)
|
||||
ui = new(user, src, ui_key, "canvas", name, current_canvas.ui_x, current_canvas.ui_y, master_ui, state)
|
||||
ui = new(user, src, ui_key, "Canvas", name, current_canvas.ui_x, current_canvas.ui_y, master_ui, state)
|
||||
ui.set_autoupdate(FALSE)
|
||||
ui.open()
|
||||
|
||||
|
||||
@@ -558,9 +558,52 @@
|
||||
item_state = "stoolbrass_bar"
|
||||
origin_type = /obj/structure/chair/stool/bar/bronze
|
||||
|
||||
/////////////////////////////////
|
||||
//End of Brass & Bronze stools!//
|
||||
/////////////////////////////////
|
||||
////////////////////////////////////////////////////
|
||||
|
||||
//////////////////////////
|
||||
// Golden Seats //
|
||||
//////////////////////////
|
||||
/obj/structure/chair/throne
|
||||
name = "throne"
|
||||
desc = "A magnificent chair for the most magnificent people."
|
||||
icon_state = "throne"
|
||||
max_integrity = 250
|
||||
buildstacktype = /obj/item/stack/sheet/mineral/gold
|
||||
buildstackamount = 5
|
||||
item_chair = null
|
||||
color = "#ffffff"
|
||||
var/mutable_appearance/armrest
|
||||
|
||||
/obj/structure/chair/throne/proc/GetArmrest()
|
||||
return mutable_appearance('icons/obj/chairs.dmi', "throne-arm")
|
||||
|
||||
/obj/structure/chair/throne/Destroy()
|
||||
QDEL_NULL(armrest)
|
||||
return ..()
|
||||
|
||||
/obj/structure/chair/throne/post_buckle_mob(mob/living/M)
|
||||
. = ..()
|
||||
update_armrest()
|
||||
|
||||
/obj/structure/chair/throne/proc/update_armrest()
|
||||
if(has_buckled_mobs())
|
||||
add_overlay(armrest)
|
||||
else
|
||||
cut_overlay(armrest)
|
||||
|
||||
/obj/structure/chair/throne/post_unbuckle_mob()
|
||||
. = ..()
|
||||
update_armrest()
|
||||
|
||||
/obj/structure/chair/throne/Initialize()
|
||||
|
||||
armrest = GetArmrest()
|
||||
armrest.layer = ABOVE_MOB_LAYER
|
||||
return ..()
|
||||
|
||||
|
||||
////////////////////////////////////////////////////
|
||||
|
||||
|
||||
/obj/item/chair/stool/narsie_act()
|
||||
return //sturdy enough to ignore a god
|
||||
|
||||
@@ -68,10 +68,10 @@
|
||||
update_icon()
|
||||
|
||||
/obj/structure/tank_dispenser/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, \
|
||||
datum/tgui/master_ui = null, datum/ui_state/state = GLOB.physical_state)
|
||||
datum/tgui/master_ui = null, datum/tgui_state/state = GLOB.tgui_physical_state)
|
||||
ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
|
||||
if(!ui)
|
||||
ui = new(user, src, ui_key, "tank_dispenser", name, 275, 103, master_ui, state)
|
||||
ui = new(user, src, ui_key, "TankDispenser", name, 275, 103, master_ui, state)
|
||||
ui.open()
|
||||
|
||||
/obj/structure/tank_dispenser/attack_robot(mob/user)
|
||||
|
||||
Reference in New Issue
Block a user