diff --git a/_maps/map_files/BoxStation/BoxStation.dmm b/_maps/map_files/BoxStation/BoxStation.dmm
index e7ad547f1f..0280698546 100644
--- a/_maps/map_files/BoxStation/BoxStation.dmm
+++ b/_maps/map_files/BoxStation/BoxStation.dmm
@@ -59692,9 +59692,6 @@
"vsM" = (
/obj/machinery/power/apc/auto_name/south,
/obj/structure/cable,
-/obj/machinery/computer/cryopod_tele{
- pixel_y = -37
- },
/turf/open/floor/carpet,
/area/crew_quarters/cryopod)
"vsT" = (
@@ -60097,7 +60094,7 @@
/turf/open/floor/plasteel/showroomfloor,
/area/security/main)
"woR" = (
-/obj/machinery/cryopod_tele,
+/obj/machinery/cryopod/tele,
/turf/open/floor/carpet,
/area/crew_quarters/cryopod)
"wph" = (
diff --git a/_maps/map_files/CogStation/CogStation.dmm b/_maps/map_files/CogStation/CogStation.dmm
index 8c9aaa7d48..3b13d1cc6b 100644
--- a/_maps/map_files/CogStation/CogStation.dmm
+++ b/_maps/map_files/CogStation/CogStation.dmm
@@ -15686,10 +15686,7 @@
/turf/open/floor/plasteel,
/area/hallway/primary/port/fore)
"aIv" = (
-/obj/machinery/cryopod_tele,
-/obj/machinery/computer/cryopod_tele{
- pixel_y = 27
- },
+/obj/machinery/cryopod/tele,
/turf/open/floor/circuit/green,
/area/crew_quarters/cryopod)
"aIw" = (
@@ -16548,7 +16545,7 @@
dir = 1;
pixel_y = -26
},
-/obj/machinery/cryopod_tele,
+/obj/machinery/cryopod/tele,
/turf/open/floor/circuit/green,
/area/crew_quarters/cryopod)
"aJX" = (
@@ -71905,7 +71902,7 @@
/turf/open/floor/plasteel,
/area/engine/atmos)
"ePg" = (
-/obj/machinery/cryopod_tele,
+/obj/machinery/cryopod/tele,
/turf/open/floor/circuit/green,
/area/crew_quarters/cryopod)
"eTZ" = (
diff --git a/_maps/map_files/Deltastation/DeltaStation2.dmm b/_maps/map_files/Deltastation/DeltaStation2.dmm
index 6c9d5dd96b..7cff8514bc 100644
--- a/_maps/map_files/Deltastation/DeltaStation2.dmm
+++ b/_maps/map_files/Deltastation/DeltaStation2.dmm
@@ -125944,11 +125944,7 @@
/obj/effect/turf_decal/tile/neutral{
dir = 8
},
-/obj/machinery/cryopod_tele,
-/obj/machinery/computer/cryopod_tele{
- dir = 8;
- pixel_x = 26
- },
+/obj/machinery/cryopod/tele,
/turf/open/floor/plasteel/dark,
/area/crew_quarters/locker)
"hAf" = (
@@ -127607,7 +127603,7 @@
/obj/effect/turf_decal/tile/neutral{
dir = 8
},
-/obj/machinery/cryopod_tele,
+/obj/machinery/cryopod/tele,
/turf/open/floor/plasteel/dark,
/area/crew_quarters/locker)
"voA" = (
diff --git a/_maps/map_files/KiloStation/KiloStation.dmm b/_maps/map_files/KiloStation/KiloStation.dmm
index 572e5b248a..8ea2a01a4f 100644
--- a/_maps/map_files/KiloStation/KiloStation.dmm
+++ b/_maps/map_files/KiloStation/KiloStation.dmm
@@ -54745,10 +54745,6 @@
/turf/open/floor/plasteel/dark,
/area/security/courtroom)
"bKj" = (
-/obj/machinery/computer/cryopod_tele{
- dir = 4;
- pixel_x = -26
- },
/turf/open/floor/plasteel/showroomfloor,
/area/crew_quarters/locker)
"bKk" = (
@@ -65846,7 +65842,7 @@
/obj/machinery/airalarm{
pixel_y = 22
},
-/obj/machinery/cryopod_tele,
+/obj/machinery/cryopod/tele,
/turf/open/floor/plasteel/showroomfloor,
/area/crew_quarters/locker)
"cbs" = (
diff --git a/_maps/map_files/LambdaStation/lambda.dmm b/_maps/map_files/LambdaStation/lambda.dmm
index 4b9bd43b87..2a595d7136 100644
--- a/_maps/map_files/LambdaStation/lambda.dmm
+++ b/_maps/map_files/LambdaStation/lambda.dmm
@@ -75545,10 +75545,6 @@
/obj/effect/turf_decal/loading_area{
dir = 4
},
-/obj/machinery/computer/cryopod_tele{
- dir = 1;
- pixel_y = -27
- },
/turf/open/floor/plasteel/dark,
/area/crew_quarters/dorms)
"cOu" = (
@@ -81253,7 +81249,7 @@
/turf/open/floor/plasteel/dark,
/area/ai_monitored/turret_protected/aisat/foyer)
"nJo" = (
-/obj/machinery/cryopod_tele,
+/obj/machinery/cryopod/tele,
/turf/open/floor/plasteel/dark,
/area/crew_quarters/dorms)
"nRc" = (
diff --git a/_maps/map_files/MetaStation/MetaStation.dmm b/_maps/map_files/MetaStation/MetaStation.dmm
index 4f00284f54..1b86bfaa03 100644
--- a/_maps/map_files/MetaStation/MetaStation.dmm
+++ b/_maps/map_files/MetaStation/MetaStation.dmm
@@ -81820,7 +81820,7 @@
/obj/machinery/light{
dir = 4
},
-/obj/machinery/cryopod_tele,
+/obj/machinery/cryopod/tele,
/turf/open/floor/plasteel/dark,
/area/crew_quarters/cryopod)
"maP" = (
@@ -81889,7 +81889,7 @@
/obj/machinery/camera{
c_tag = "Fitness Room - Fore"
},
-/obj/machinery/cryopod_tele,
+/obj/machinery/cryopod/tele,
/turf/open/floor/plasteel/dark,
/area/crew_quarters/cryopod)
"mEe" = (
@@ -82768,10 +82768,7 @@
/turf/open/floor/plasteel,
/area/crew_quarters/fitness/recreation)
"vtn" = (
-/obj/machinery/cryopod_tele,
-/obj/machinery/computer/cryopod_tele{
- pixel_y = 27
- },
+/obj/machinery/cryopod/tele,
/turf/open/floor/plasteel/dark,
/area/crew_quarters/cryopod)
"vuY" = (
diff --git a/_maps/map_files/OmegaStation/OmegaStation.dmm b/_maps/map_files/OmegaStation/OmegaStation.dmm
index 343cca9b69..7222a6abec 100644
--- a/_maps/map_files/OmegaStation/OmegaStation.dmm
+++ b/_maps/map_files/OmegaStation/OmegaStation.dmm
@@ -41454,11 +41454,7 @@
/obj/effect/turf_decal/tile/neutral{
dir = 8
},
-/obj/machinery/cryopod_tele,
-/obj/machinery/computer/cryopod_tele{
- dir = 8;
- pixel_x = 26
- },
+/obj/machinery/cryopod/tele,
/turf/open/floor/plasteel/dark,
/area/crew_quarters/dorms)
"oGc" = (
diff --git a/_maps/map_files/PubbyStation/PubbyStation.dmm b/_maps/map_files/PubbyStation/PubbyStation.dmm
index 6b4966b000..49f526a59e 100644
--- a/_maps/map_files/PubbyStation/PubbyStation.dmm
+++ b/_maps/map_files/PubbyStation/PubbyStation.dmm
@@ -53687,11 +53687,7 @@
/turf/open/floor/wood,
/area/lawoffice)
"epj" = (
-/obj/machinery/cryopod_tele,
-/obj/machinery/computer/cryopod_tele{
- dir = 8;
- pixel_x = -24
- },
+/obj/machinery/cryopod/tele,
/turf/open/floor/plasteel,
/area/crew_quarters/dorms)
"epJ" = (
diff --git a/_maps/map_files/SmolStation/SmolStation.dmm b/_maps/map_files/SmolStation/SmolStation.dmm
index 47fa09acb7..b2359f8eaa 100644
--- a/_maps/map_files/SmolStation/SmolStation.dmm
+++ b/_maps/map_files/SmolStation/SmolStation.dmm
@@ -16560,11 +16560,7 @@
/obj/machinery/light{
dir = 8
},
-/obj/machinery/cryopod_tele,
-/obj/machinery/computer/cryopod_tele{
- dir = 1;
- pixel_y = -23
- },
+/obj/machinery/cryopod/tele,
/turf/open/floor/carpet,
/area/crew_quarters/dorms)
"lXy" = (
@@ -32348,7 +32344,7 @@
/obj/machinery/atmospherics/components/unary/vent_pump/on/layer1{
dir = 4
},
-/obj/machinery/cryopod_tele,
+/obj/machinery/cryopod/tele,
/turf/open/floor/carpet,
/area/crew_quarters/dorms)
"xEk" = (
diff --git a/_maps/map_files/Snaxi/Snaxi.dmm b/_maps/map_files/Snaxi/Snaxi.dmm
index a4d59a9254..c9c5afdb73 100644
--- a/_maps/map_files/Snaxi/Snaxi.dmm
+++ b/_maps/map_files/Snaxi/Snaxi.dmm
@@ -10506,11 +10506,7 @@
/turf/open/floor/plasteel,
/area/hallway/primary/fore)
"dij" = (
-/obj/machinery/computer/cryopod_tele{
- dir = 1;
- pixel_y = -26
- },
-/obj/machinery/cryopod_tele,
+/obj/machinery/cryopod/tele,
/turf/open/floor/plasteel,
/area/hallway/secondary/exit/departure_lounge)
"diD" = (
diff --git a/code/game/machinery/cryopod.dm b/code/game/machinery/cryopod.dm
index 9330a30555..36d8e44915 100644
--- a/code/game/machinery/cryopod.dm
+++ b/code/game/machinery/cryopod.dm
@@ -9,8 +9,8 @@
//Main cryopod console.
/obj/machinery/computer/cryopod
- name = "cryogenic oversight console"
- desc = "An interface between crew and the cryogenic storage oversight systems."
+ name = "general oversight console"
+ desc = "An interface between crew and the cryogenic storage/teleporter storage oversight systems."
icon = 'icons/obj/Cryogenic2.dmi'
icon_state = "cellconsole_1"
circuit = /obj/item/circuitboard/cryopodcontrol
@@ -57,7 +57,7 @@
dat += "Recover all objects
"
if(2)
dat += "<< Back
"
- dat += "
Recently stored Crew
"
+ dat += "Recently stored/teleported Crew
"
if(!frozen_crew.len)
dat += "There has been no storage usage at this terminal.
"
else
@@ -74,7 +74,7 @@
dat += "[I.name]
"
dat += "
"
- var/datum/browser/popup = new(user, "cryopod_console", "Cryogenic System Control")
+ var/datum/browser/popup = new(user, "cryopod_console", "General Storage System Control")
popup.set_content(dat)
popup.set_title_image(user.browse_rsc_icon(src.icon, src.icon_state))
popup.open()
@@ -169,6 +169,7 @@
density = TRUE
anchored = TRUE
state_open = TRUE
+ var/tele = FALSE
var/on_store_message = "has entered long-term storage."
var/on_store_name = "Cryogenic Oversight"
@@ -230,8 +231,8 @@
// Don't send messages unless we *need* the computer, and less than five minutes have passed since last time we messaged
if(!control_computer && urgent && last_no_computer_message + 5*60*10 < world.time)
- log_admin("Cryopod in [get_area(src)] could not find control computer!")
- message_admins("Cryopod in [get_area(src)] could not find control computer!")
+ log_admin("\The [src] in [get_area(src)] could not find control computer!")
+ message_admins("\The [src] in [get_area(src)] could not find control computer!")
last_no_computer_message = world.time
return control_computer != null
@@ -242,27 +243,33 @@
if((isnull(user) || istype(user)) && state_open && !panel_open)
..(user)
var/mob/living/mob_occupant = occupant
- investigate_log("Cryogenics machine closed with occupant [key_name(occupant)] by user [key_name(user)].", INVESTIGATE_CRYOGENICS)
- if(mob_occupant && mob_occupant.stat != DEAD)
+ investigate_log("[src] closed with occupant [key_name(occupant)] by user [key_name(user)].", INVESTIGATE_CRYOGENICS)
+ if(mob_occupant && mob_occupant.stat != DEAD && !(tele))
to_chat(occupant, "You feel cool air surround you. You go numb as your senses turn inward.")
if(mob_occupant.client)//if they're logged in
despawn_world_time = world.time + (time_till_despawn * 0.1)
else
despawn_world_time = world.time + time_till_despawn
- icon_state = "cryopod"
+ if(!tele)
+ icon_state = "cryopod"
+ else
+ icon_state = "implantchair_occupied"
/obj/machinery/cryopod/open_machine()
if(occupant)
- investigate_log("Cryogenics machine opened with occupant [key_name(occupant)] inside.", INVESTIGATE_CRYOGENICS)
+ investigate_log("[src] opened with occupant [key_name(occupant)] inside.", INVESTIGATE_CRYOGENICS)
..()
- icon_state = "cryopod-open"
+ if(!tele)
+ icon_state = "cryopod-open"
+ else
+ icon_state = "implantchair_open"
density = TRUE
name = initial(name)
/obj/machinery/cryopod/container_resist(mob/living/user)
- investigate_log("Cryogenics machine container resisted by [key_name(user)] with occupant [key_name(occupant)].", INVESTIGATE_CRYOGENICS)
- visible_message("[occupant] emerges from [src]!",
- "You climb out of [src]!")
+ investigate_log("[src] resisted by [key_name(user)] with occupant [key_name(occupant)].", INVESTIGATE_CRYOGENICS)
+ visible_message("[occupant] emerges from \the [src]!",
+ "You climb out of \the [src]!")
open_machine()
/obj/machinery/cryopod/relaymove(mob/user)
@@ -287,6 +294,11 @@
despawn_occupant()
+ if(tele)
+ despawn_occupant()
+ do_sparks(2, TRUE, src)
+ playsound(src, 'sound/weapons/emitter2.ogg', 25, 1, extrarange = 3, falloff = 5)
+
#define CRYO_DESTROY 0
#define CRYO_PRESERVE 1
#define CRYO_OBJECTIVE 2
@@ -407,7 +419,7 @@
if(GLOB.announcement_systems.len)
var/obj/machinery/announcement_system/announcer = pick(GLOB.announcement_systems)
announcer.announce("CRYOSTORAGE", mob_occupant.real_name, announce_rank, list())
- visible_message("\The [src] hums and hisses as it moves [mob_occupant.real_name] into storage.")
+ visible_message("\The [src] hums and hisses as it [tele ? "teleports" : "moves"] [mob_occupant.real_name] [tele ? "to centcom" : "into storage"].")
// Ghost and delete the mob.
if(!mob_occupant.get_ghost(1))
@@ -432,11 +444,11 @@
return
if(occupant)
- to_chat(user, "The cryo pod is already occupied!")
+ to_chat(user, "\The [src] is already occupied!")
return
if(target.stat == DEAD)
- to_chat(user, "Dead people can not be put into cryo.")
+ to_chat(user, "Dead people can not be put into [tele ? "teleportation process" : "cryo"].")
return
if(target.client && user != target)
@@ -446,7 +458,7 @@
to_chat(user, "You can't put [target] into [src]. They're conscious.")
return
else if(target.client)
- if(alert(target,"Would you like to enter cryosleep?",,"Yes","No") == "No")
+ if(alert(target,"Would you like to [tele ? "be teleported out" : "enter cryosleep"]?",,"Yes","No") == "No")
return
var/generic_plsnoleave_message = " Please adminhelp before leaving the round, even if there are no administrators online!"
@@ -478,9 +490,9 @@
//rerun the checks in case of shenanigans
if(target == user)
- visible_message("[user] starts climbing into the cryo pod.")
+ visible_message("[user] starts climbing into \the [src].")
else
- visible_message("[user] starts putting [target] into the cryo pod.")
+ visible_message("[user] starts putting [target] into \the [src].")
if(occupant)
to_chat(user, "\The [src] is in use.")
@@ -489,8 +501,8 @@
to_chat(target, "If you ghost, log out or close your client now, your character will shortly be permanently removed from the round.")
name = "[name] ([occupant.name])"
- log_admin("[key_name(target)] entered a stasis pod.")
- message_admins("[key_name_admin(target)] entered a stasis pod. (JMP)")
+ log_admin("[key_name(target)] entered a [src].")
+ message_admins("[key_name_admin(target)] entered a [src]. (JMP)")
add_fingerprint(target)
//Attacks/effects.
diff --git a/sandcode/code/__DEFINES/traits.dm b/sandcode/code/__DEFINES/traits.dm
index de41e25baf..bf7295f45c 100644
--- a/sandcode/code/__DEFINES/traits.dm
+++ b/sandcode/code/__DEFINES/traits.dm
@@ -1,3 +1,2 @@
//mob traits
#define TRAIT_SHELTERED "sheltered" // thanks yog, i want it
-#define TRAIT_KNOWSSAGARU "knows sagaru"
diff --git a/sandcode/code/datums/traits/negative.dm b/sandcode/code/datums/traits/negative.dm
index 596047fd49..cf4c629e1d 100644
--- a/sandcode/code/datums/traits/negative.dm
+++ b/sandcode/code/datums/traits/negative.dm
@@ -10,10 +10,8 @@
/datum/quirk/sheltered/on_spawn()
var/mob/living/carbon/human/H = quirk_holder
H.remove_language(/datum/language/common)
-/* if(!H.can_speak_language(/datum/language/draconic) && !H.can_speak_language(/datum/language/machine))
- H.grant_language(/datum/language/japanese)
-*/ //if doesn't know common wont know anything else unless already does.... like lizards! :3
+// You can pick languages for your character, if you don't pick anything, enjoy the rest of the round understanding nothing.
/datum/quirk/sheltered/remove() //i mean, the lose text explains it, so i'm making it actually work
var/mob/living/carbon/human/H = quirk_holder
- H.grant_language(/datum/language/common)
\ No newline at end of file
+ H.grant_language(/datum/language/common)
diff --git a/sandcode/code/game/machinery/autodoc.dm b/sandcode/code/game/machinery/autodoc.dm
index 2181c5c673..9e56ce9e50 100644
--- a/sandcode/code/game/machinery/autodoc.dm
+++ b/sandcode/code/game/machinery/autodoc.dm
@@ -40,7 +40,7 @@
occupant.forceMove(drop_location())
occupant = null
return
- to_chat(occupant, "You enter [src]")
+ to_chat(occupant, "You enter [src].")
dosurgery()
@@ -78,14 +78,14 @@
currentorgan.forceMove(get_turf(src))
storedorgan.Insert(occupant)//insert stored organ into the user
storedorgan = null
- occupant.visible_message("[src] completes the surgery procedure", "[src] inserts the organ into your body.")
+ occupant.visible_message("[src] completes the surgery procedure.", "[src] inserts the organ into your body.")
playsound(src, 'sound/machines/microwave/microwave-end.ogg', 100, 0)
processing = FALSE
open_machine()
/obj/machinery/autodoc/open_machine(mob/user)
if(processing)
- occupant.visible_message("[user] cancels [src]'s procedure", "[src] stops inserting the organ into your body.")
+ occupant.visible_message("[user] cancels [src]'s procedure.", "[src] stops inserting the organ into your body.")
processing = FALSE
if(occupant)
occupant.forceMove(drop_location())
diff --git a/sandcode/code/game/machinery/cryopod.dm b/sandcode/code/game/machinery/cryopod.dm
index b8a9d9e2e5..45868661a7 100644
--- a/sandcode/code/game/machinery/cryopod.dm
+++ b/sandcode/code/game/machinery/cryopod.dm
@@ -1,500 +1,10 @@
-/*
- * Cryogenic refrigeration unit. Basically a despawner.
- * Stealing a lot of concepts/code from sleepers due to massive laziness.
- * The despawn tick will only fire if it's been more than time_till_despawned ticks
- * since time_entered, which is world.time when the occupant moves in.
- * ~ Zuhayr
- */
-
-//Main cryopod console.
-
-/obj/machinery/computer/cryopod_tele
- name = "teleporter oversight console"
- desc = "An interface between crew and the internal storage, because centcom certainly won't let you take some stuff home..."
- icon = 'icons/obj/Cryogenic2.dmi'
- icon_state = "cellconsole_1"
- circuit = /obj/item/circuitboard/cryopodcontrol
- density = FALSE
- interaction_flags_machine = INTERACT_MACHINE_OFFLINE
- req_one_access = list(ACCESS_HEADS, ACCESS_ARMORY) //Heads of staff or the warden can go here to claim recover items from their department that people went were cryodormed with.
-
- var/menu = 1 //Which menu screen to display
-
- //Used for logging people entering cryosleep and important items they are carrying.
- var/list/frozen_crew = list()
- var/list/frozen_items = list()
-
- // Used for containing rare items traitors need to steal, so it's not
- // game-over if they get iced
- var/list/objective_items = list()
- // A cache of theft datums so you don't have to re-create them for
- // each item check
- var/list/theft_cache = list()
-
- var/allow_items = TRUE
-
-/obj/machinery/computer/cryopod_tele/attack_ai()
- attack_hand()
-
-/obj/machinery/computer/cryopod_tele/ui_interact(mob/user = usr)
- if(!is_operational())
- return
-
- user.set_machine(src)
- add_fingerprint(user)
-
- var/dat = ""
-
- dat += "Welcome, [user.real_name].
"
- dat += "
"
-
- switch(src.menu)
- if(1)
- dat += "View crew storage log
"
- if(allow_items)
- dat += "View objects storage log
"
- dat += "Recover object
"
- dat += "Recover all objects
"
- if(2)
- dat += "<< Back
"
- dat += "Recently teleported Crew
"
- if(!frozen_crew.len)
- dat += "There has been no storage usage at this terminal.
"
- else
- for(var/person in frozen_crew)
- dat += "[person]
"
- dat += "
"
- if(3)
- dat += "<< Back
"
- dat += "Recently stored objects
"
- if(!frozen_items.len)
- dat += "There has been no storage usage at this terminal.
"
- else
- for(var/obj/item/I in frozen_items)
- dat += "[I.name]
"
- dat += "
"
-
- var/datum/browser/popup = new(user, "cryopod_console", "CentCom Teleporter System Control")
- popup.set_content(dat)
- popup.set_title_image(user.browse_rsc_icon(src.icon, src.icon_state))
- popup.open()
-
-/obj/machinery/computer/cryopod_tele/Topic(href, href_list)
- if(..())
- return TRUE
-
- var/mob/user = usr
-
- add_fingerprint(user)
-
- if(href_list["item"])
- if(!allowed(user))
- to_chat(user, "Access Denied.")
- playsound(src, 'sound/machines/terminal_prompt_deny.ogg', 50, 0)
- updateUsrDialog()
- return
- if(!allow_items) return
-
- if(frozen_items.len == 0)
- to_chat(user, "There is nothing to recover from storage.")
- playsound(src, 'sound/machines/terminal_prompt_deny.ogg', 50, 0)
- updateUsrDialog()
- return
-
- var/obj/item/I = input(user, "Please choose which object to retrieve.","Object recovery",null) as null|anything in frozen_items
- playsound(src, "terminal_type", 25, 0)
- if(!I)
- return
-
- if(!(I in frozen_items))
- to_chat(user, "\The [I] is no longer in storage.")
- playsound(src, 'sound/machines/terminal_prompt_deny.ogg', 50, 0)
- updateUsrDialog()
- return
-
- visible_message("The console beeps happily as it disgorges \the [I].")
- playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 50, 0)
-
- I.forceMove(drop_location())
- if(user && Adjacent(user) && user.can_hold_items())
- user.put_in_hands(I)
- frozen_items -= I
- updateUsrDialog()
-
- else if(href_list["allitems"])
- playsound(src, "terminal_type", 25, 0)
- if(!allowed(user))
- to_chat(user, "Access Denied.")
- playsound(src, 'sound/machines/terminal_prompt_deny.ogg', 50, 0)
- updateUsrDialog()
- return
- if(!allow_items)
- return
-
- if(frozen_items.len == 0)
- to_chat(user, "There is nothing to recover from storage.")
- playsound(src, 'sound/machines/terminal_prompt_deny.ogg', 50, 0)
- return
-
- visible_message("The console beeps happily as it disgorges the desired objects.")
- playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 50, 0)
-
- for(var/obj/item/I in frozen_items)
- I.forceMove(drop_location())
- frozen_items -= I
- updateUsrDialog()
-
- else if (href_list["menu"])
- src.menu = text2num(href_list["menu"])
- playsound(src, "terminal_type", 25, 0)
- updateUsrDialog()
-
- ui_interact(usr)
- updateUsrDialog()
- return
-
-/obj/item/circuitboard/cryopodcontrol_tele
- name = "Circuit board (Teleporter Oversight Console)"
- build_path = "/obj/machinery/computer/cryopod_tele"
-
-/obj/machinery/computer/cryopod_tele/contents_explosion()
- return
-
-//Cryopods themselves.
-/obj/machinery/cryopod_tele
+//Teleporters themselves. Also holy crap, what a code crunch i did on this!
+/obj/machinery/cryopod/tele
name = "CentCom Teleporter"
desc = "Suited for everyone who wishes to leave the station and go back to CentCom.\nThis is not for actually getting into CentCom, you will leave the round."
icon = 'icons/obj/machines/implantchair.dmi'
icon_state = "implantchair_open"
- density = TRUE
- anchored = TRUE
- state_open = TRUE
+ tele = TRUE
- var/on_store_message = "has been teleported to CentCom."
- var/on_store_name = "Teleporter Oversight"
-
- // 15 minutes-ish safe period before being despawned.
- var/time_till_despawn = 15 * 600 // This is reduced by 90% if a player manually enters cryo
- var/despawn_world_time = null // Used to keep track of the safe period.
-
- var/obj/machinery/computer/cryopod_tele/control_computer
- var/last_no_computer_message = 0
-
- // These items are preserved when the process() despawn proc occurs.
- var/static/list/preserve_items = typecacheof(list(
- /obj/item/hand_tele,
- /obj/item/card/id/captains_spare,
- /obj/item/aicard,
- /obj/item/mmi,
- /obj/item/paicard,
- /obj/item/gun,
- /obj/item/pinpointer,
- /obj/item/clothing/shoes/magboots,
- /obj/item/areaeditor/blueprints,
- /obj/item/clothing/head/helmet/space,
- /obj/item/clothing/suit/space,
- /obj/item/clothing/suit/armor,
- /obj/item/defibrillator/compact,
- /obj/item/reagent_containers/hypospray/CMO,
- /obj/item/clothing/accessory/medal/gold/captain,
- /obj/item/clothing/gloves/krav_maga,
- /obj/item/nullrod,
- /obj/item/tank/jetpack,
- /obj/item/documents,
- /obj/item/nuke_core_container
- ))
- // These items will NOT be preserved
- var/static/list/do_not_preserve_items = typecacheof(list(
- /obj/item/mmi/posibrain,
- /obj/item/gun/energy/laser/mounted,
- /obj/item/gun/energy/e_gun/advtaser/mounted,
- /obj/item/gun/ballistic/revolver/grenadelauncher/cyborg,
- /obj/item/gun/energy/disabler/cyborg,
- /obj/item/gun/energy/e_gun/advtaser/cyborg,
- /obj/item/gun/energy/printer,
- /obj/item/gun/energy/kinetic_accelerator/cyborg,
- /obj/item/gun/energy/laser/cyborg
- ))
-
-/obj/machinery/cryopod_tele/Initialize(mapload)
- . = ..()
- update_icon()
- find_control_computer(mapload)
-
-/obj/machinery/cryopod_tele/proc/find_control_computer(urgent = FALSE)
- for(var/obj/machinery/computer/cryopod_tele/C in get_area(src))
- control_computer = C
- if(C)
- return C
- break
-
- // Don't send messages unless we *need* the computer, and less than five minutes have passed since last time we messaged
- if(!control_computer && urgent && last_no_computer_message + 5*60*10 < world.time)
- log_admin("CentCom Teleporter in [get_area(src)] could not find control computer!")
- message_admins("CentCom Teleporter in [get_area(src)] could not find control computer!")
- last_no_computer_message = world.time
-
- return control_computer != null
-
-/obj/machinery/cryopod_tele/close_machine(mob/user)
- if(!control_computer)
- find_control_computer(TRUE)
- if((isnull(user) || istype(user)) && state_open && !panel_open)
- ..(user)
- var/mob/living/mob_occupant = occupant
- investigate_log("CentCom Teleporter closed with occupant [key_name(occupant)] by user [key_name(user)].", INVESTIGATE_CRYOGENICS)
- if(mob_occupant && mob_occupant.stat != DEAD)
- to_chat(occupant, "You feel cool air surround you. You go numb as your senses turn inward.")
- if(mob_occupant.client)//if they're logged in
- despawn_world_time = world.time + (time_till_despawn * 0.1)
- else
- despawn_world_time = world.time + time_till_despawn
- icon_state = "implantchair_occupied"
-
-/obj/machinery/cryopod_tele/open_machine()
- if(occupant)
- investigate_log("CentCom Teleporter opened with occupant [key_name(occupant)] inside.", INVESTIGATE_CRYOGENICS)
- ..()
- icon_state = "implantchair_open"
- density = TRUE
- name = initial(name)
-
-/obj/machinery/cryopod_tele/container_resist(mob/living/user)
- investigate_log("CentCom Teleporter container resisted by [key_name(user)] with occupant [key_name(occupant)].", INVESTIGATE_CRYOGENICS)
- visible_message("[occupant] emerges from [src]!",
- "You climb out of [src]!")
- open_machine()
-
-/obj/machinery/cryopod_tele/relaymove(mob/user)
- container_resist(user)
-
-/obj/machinery/cryopod_tele/process()
- if(!occupant)
- return
-
- var/mob/living/mob_occupant = occupant
- if(mob_occupant)
- // Eject dead people
- if(mob_occupant.stat == DEAD)
- open_machine()
-
- if(!(world.time > despawn_world_time + 100))//+ 10 seconds
- return
-
- if(!mob_occupant.client && mob_occupant.stat < 2) //Occupant is living and has no client.
- if(!control_computer)
- find_control_computer(urgent = TRUE)//better hope you found it this time
-
- despawn_occupant()
- do_sparks(2, TRUE, src)
- playsound(src, 'sound/weapons/emitter2.ogg', 25, 1, extrarange = 3, falloff = 5)
-
-#define CRYO_DESTROY 0
-#define CRYO_PRESERVE 1
-#define CRYO_OBJECTIVE 2
-#define CRYO_IGNORE 3
-#define CRYO_DESTROY_LATER 4
-
-/obj/machinery/cryopod_tele/proc/should_preserve_item(obj/item/I)
- for(var/datum/objective_item/steal/T in control_computer.theft_cache)
- if(istype(I, T.targetitem) && T.check_special_completion(I))
- return CRYO_OBJECTIVE
- if(preserve_items[I] && !do_not_preserve_items[I])
- return CRYO_PRESERVE
- return CRYO_DESTROY
-
-// This function can not be undone; do not call this unless you are sure
-/obj/machinery/cryopod_tele/proc/despawn_occupant()
- if(!control_computer)
- find_control_computer()
-
- var/mob/living/mob_occupant = occupant
- var/list/obj/item/cryo_items = list()
-
- investigate_log("Despawning [key_name(mob_occupant)].", INVESTIGATE_CRYOGENICS)
-
- //Handle Borg stuff first
- if(iscyborg(mob_occupant))
- var/mob/living/silicon/robot/R = mob_occupant
- if(R.mmi?.brain)
- cryo_items[R.mmi] = CRYO_DESTROY_LATER
- cryo_items[R.mmi.brain] = CRYO_DESTROY_LATER
- for(var/obj/item/I in R.module) // the tools the borg has; metal, glass, guns etc
- for(var/obj/item/O in I) // the things inside the tools, if anything; mainly for janiborg trash bags
- cryo_items[O] = should_preserve_item(O)
- O.forceMove(src)
- R.module.remove_module(I, TRUE) //delete the module itself so it doesn't transfer over.
-
- //Drop all items into the pod.
- for(var/obj/item/I in mob_occupant)
- if(cryo_items[I] == CRYO_IGNORE || cryo_items[I] ==CRYO_DESTROY_LATER)
- continue
- cryo_items[I] = should_preserve_item(I)
- mob_occupant.transferItemToLoc(I, src, TRUE)
- if(I.contents.len) //Make sure we catch anything not handled by qdel() on the items.
- if(cryo_items[I] != CRYO_DESTROY) // Don't remove the contents of things that need preservation
- continue
- for(var/obj/item/O in I.contents)
- cryo_items[O] = should_preserve_item(O)
- O.forceMove(src)
-
- for(var/A in cryo_items)
- var/obj/item/I = A
- if(QDELETED(I)) //edge cases and DROPDEL.
- continue
- var/preserve = cryo_items[I]
- if(preserve == CRYO_DESTROY_LATER)
- continue
- if(preserve != CRYO_IGNORE)
- if(preserve == CRYO_DESTROY)
- qdel(I)
- else if(control_computer?.allow_items)
- control_computer.frozen_items += I
- if(preserve == CRYO_OBJECTIVE)
- control_computer.objective_items += I
- I.moveToNullspace()
- else
- I.forceMove(loc)
- cryo_items -= I
-
- //Update any existing objectives involving this mob.
- for(var/datum/objective/O in GLOB.objectives)
- // We don't want revs to get objectives that aren't for heads of staff. Letting
- // them win or lose based on cryo is silly so we remove the objective.
- if(istype(O,/datum/objective/mutiny) && O.target == mob_occupant.mind)
- qdel(O)
- else if(O.target && istype(O.target, /datum/mind))
- if(O.target == mob_occupant.mind)
- if(O.owner && O.owner.current)
- to_chat(O.owner.current, "
You get the feeling your target is no longer within reach. Time for Plan [pick("A","B","C","D","X","Y","Z")]. Objectives updated!")
- O.target = null
- spawn(10) //This should ideally fire after the occupant is deleted.
- if(!O)
- return
- O.find_target()
- O.update_explanation_text()
- if(!(O.target))
- qdel(O)
-
- if(mob_occupant.mind)
- //Handle job slot/tater cleanup.
- if(mob_occupant.mind.assigned_role)
- var/job = mob_occupant.mind.assigned_role
- SSjob.FreeRole(job)
- mob_occupant.mind.special_role = null
-
- // Delete them from datacore.
-
- var/announce_rank = null
- for(var/datum/data/record/R in GLOB.data_core.medical)
- if((R.fields["name"] == mob_occupant.real_name))
- qdel(R)
- for(var/datum/data/record/T in GLOB.data_core.security)
- if((T.fields["name"] == mob_occupant.real_name))
- qdel(T)
- for(var/datum/data/record/G in GLOB.data_core.general)
- if((G.fields["name"] == mob_occupant.real_name))
- announce_rank = G.fields["rank"]
- qdel(G)
-
- for(var/obj/machinery/computer/cloning/cloner in world)
- for(var/datum/data/record/R in cloner.records)
- if(R.fields["name"] == mob_occupant.real_name)
- cloner.records.Remove(R)
-
- //Make an announcement and log the person entering storage.
- if(control_computer)
- control_computer.frozen_crew += "[mob_occupant.real_name]"
-
- if(GLOB.announcement_systems.len)
- var/obj/machinery/announcement_system/announcer = pick(GLOB.announcement_systems)
- announcer.announce("CRYOSTORAGE", mob_occupant.real_name, announce_rank, list())
- visible_message("\The [src] hums and hisses as it teleports [mob_occupant.real_name] back to CentCom.")
-
- // Ghost and delete the mob.
- if(!mob_occupant.get_ghost(1))
- mob_occupant.ghostize(FALSE, penalize = TRUE, voluntary = TRUE)
-
- QDEL_NULL(occupant)
- for(var/I in cryo_items) //only "CRYO_DESTROY_LATER" atoms are left)
- var/atom/A = I
- if(!QDELETED(A))
- qdel(A)
- open_machine()
- name = initial(name)
-
-#undef CRYO_DESTROY
-#undef CRYO_PRESERVE
-#undef CRYO_OBJECTIVE
-#undef CRYO_IGNORE
-#undef CRYO_DESTROY_LATER
-
-/obj/machinery/cryopod_tele/MouseDrop_T(mob/living/target, mob/user)
- if(!istype(target) || user.incapacitated() || !target.Adjacent(user) || !Adjacent(user) || !ismob(target) || (!ishuman(user) && !iscyborg(user)) || !istype(user.loc, /turf) || target.buckled)
- return
-
- if(occupant)
- to_chat(user, "The CentCom Teleporter is already occupied!")
- return
-
- if(target.stat == DEAD)
- to_chat(user, "Dead people can not be teleported.")
- return
-
- if(target.client && user != target)
- if(iscyborg(target))
- to_chat(user, "You can't put [target] into [src]. They're online.")
- else
- to_chat(user, "You can't put [target] into [src]. They're conscious.")
- return
- else if(target.client)
- if(alert(target,"Would you like to teleport back to CentCom?",,"Yes","No") == "No")
- return
-
- var/generic_plsnoleave_message = " Please adminhelp before leaving the round, even if there are no administrators online!"
-
- if(target == user && world.time - target.client.cryo_warned > 5 MINUTES)//if we haven't warned them in the last 5 minutes
- var/list/caught_string
- var/addendum = ""
- if(target.mind.assigned_role in GLOB.command_positions)
- LAZYADD(caught_string, "Head of Staff")
- addendum = " Be sure to put your locker items back into your locker!"
- if(iscultist(target) || is_servant_of_ratvar(target))
- LAZYADD(caught_string, "Cultist")
- if(is_devil(target))
- LAZYADD(caught_string, "Devil")
- if(target.mind.has_antag_datum(/datum/antagonist/gang))
- LAZYADD(caught_string, "Gangster")
- if(target.mind.has_antag_datum(/datum/antagonist/rev/head))
- LAZYADD(caught_string, "Head Revolutionary")
- if(target.mind.has_antag_datum(/datum/antagonist/rev))
- LAZYADD(caught_string, "Revolutionary")
-
- if(caught_string)
- alert(target, "You're a [english_list(caught_string)]![generic_plsnoleave_message][addendum]")
- target.client.cryo_warned = world.time
- return
-
- if(!target || user.incapacitated() || !target.Adjacent(user) || !Adjacent(user) || (!ishuman(user) && !iscyborg(user)) || !istype(user.loc, /turf) || target.buckled)
- return
- //rerun the checks in case of shenanigans
-
- if(target == user)
- visible_message("[user] starts climbing into the CentCom Teleporter.")
- else
- visible_message("[user] starts putting [target] into the CentCom Teleporter.")
-
- if(occupant)
- to_chat(user, "\The [src] is in use.")
- return
- close_machine(target)
-
- to_chat(target, "If you ghost, log out or close your client now, your character will shortly be permanently removed from the round.")
- name = "[name] ([occupant.name])"
- log_admin("[key_name(target)] entered a CentCom Teleporter.")
- message_admins("[key_name_admin(target)] entered a CentCom Teleporter. (JMP)")
- add_fingerprint(target)
-
-//Attacks/effects.
-/obj/machinery/cryopod_tele/blob_act()
- return //Sorta gamey, but we don't really want these to be destroyed.
+ on_store_message = "has been teleported to CentCom."
+ on_store_name = "Teleporter Oversight"
diff --git a/sandcode/code/modules/mob/living/emote.dm b/sandcode/code/modules/mob/living/emote.dm
index c231142afc..020df797ab 100644
--- a/sandcode/code/modules/mob/living/emote.dm
+++ b/sandcode/code/modules/mob/living/emote.dm
@@ -18,5 +18,5 @@
key = "blep"
key_third_person = "bleps"
message = "bleps!"
- emote_type = EMOTE_AUDIBLE | EMOTE_VISIBLE
- mob_type_allowed_typecache = list(/mob/living/carbon)
+ emote_type = EMOTE_VISIBLE
+ mob_type_allowed_typecache = list(/mob/living)
diff --git a/sandcode/code/modules/projectiles/guns/ballistic/pistol.dm b/sandcode/code/modules/projectiles/guns/ballistic/pistol.dm
index 6076e1e4e7..915088e34e 100644
--- a/sandcode/code/modules/projectiles/guns/ballistic/pistol.dm
+++ b/sandcode/code/modules/projectiles/guns/ballistic/pistol.dm
@@ -10,4 +10,6 @@
actions_types = list()
icon = 'sandcode/icons/obj/guns/projectile.dmi'
spawnwithmagazine = FALSE
- var/can_supress = FALSE
\ No newline at end of file
+ var/can_supress = FALSE
+
+//Note for the future, i didn't know this gun already existed in the code, may be deleted eventually.
diff --git a/sandcode/code/modules/surgery/organs/augments_arms.dm b/sandcode/code/modules/surgery/organs/augments_arms.dm
index 4e58bf646c..c2efaab34b 100644
--- a/sandcode/code/modules/surgery/organs/augments_arms.dm
+++ b/sandcode/code/modules/surgery/organs/augments_arms.dm
@@ -5,8 +5,13 @@
/obj/item/organ/cyberimp/arm/toolset/advanced
name = "advanced integrated toolset implant"
desc = "A very advanced version of the regular toolset implant, has alien stuff!"
- contents = newlist(/obj/item/screwdriver/abductor, /obj/item/wrench/abductor, /obj/item/weldingtool/abductor,
- /obj/item/crowbar/abductor, /obj/item/wirecutters/abductor, /obj/item/multitool/abductor, /obj/item/analyzer)
+ contents = newlist(/obj/item/screwdriver/abductor,
+ /obj/item/wrench/abductor,
+ /obj/item/weldingtool/abductor,
+ /obj/item/crowbar/abductor,
+ /obj/item/wirecutters/abductor,
+ /obj/item/multitool/abductor,
+ /obj/item/analyzer/ranged)
/obj/item/organ/cyberimp/arm/toolset/advanced/emag_act()
. = ..()
@@ -18,9 +23,15 @@
return TRUE
/obj/item/organ/cyberimp/arm/surgery/advanced
- name = "advanced surgical toolset implant"
+ name = "advanced integrated surgical implant"
desc = "A very advanced version of the regular surgical implant, has alien stuff!"
- contents = newlist(/obj/item/retractor/alien, /obj/item/hemostat/alien, /obj/item/cautery/alien, /obj/item/surgicaldrill/alien, /obj/item/scalpel/alien, /obj/item/circular_saw/alien, /obj/item/surgical_drapes)
+ contents = newlist(/obj/item/retractor/alien,
+ /obj/item/hemostat/alien,
+ /obj/item/cautery/alien,
+ /obj/item/surgicaldrill/alien,
+ /obj/item/scalpel/alien,
+ /obj/item/circular_saw/alien,
+ /obj/item/surgical_drapes)
/obj/item/organ/cyberimp/arm/surgery/emag_act()
. = ..()
diff --git a/sandcode/code/modules/telescience/telesci.dm b/sandcode/code/modules/telescience/telesci.dm
index 6ce5145958..d29c684fd9 100644
--- a/sandcode/code/modules/telescience/telesci.dm
+++ b/sandcode/code/modules/telescience/telesci.dm
@@ -30,7 +30,7 @@
var/distance = time * power_x
- var/dest_x = src_x + distance*sin(rotation); //You can never accurately predict where it lands, at all.
- var/dest_y = src_y + distance*cos(rotation); //Telethievery has now been killed, thank me later.
+ var/dest_x = src_x + distance*sin(rotation);
+ var/dest_y = src_y + distance*cos(rotation);
return new /datum/projectile_data(src_x, src_y, time, distance, power_x, power_y, dest_x, dest_y)
diff --git a/sandcode/code/modules/telescience/telesci_computer.dm b/sandcode/code/modules/telescience/telesci_computer.dm
index 2cde7f477b..e8941ada81 100644
--- a/sandcode/code/modules/telescience/telesci_computer.dm
+++ b/sandcode/code/modules/telescience/telesci_computer.dm
@@ -14,9 +14,7 @@
var/z_co = 1
var/power_off
var/rotation_off
- var/angle_off
- var/offsety
- var/offsetx
+ //var/angle_off
var/last_target
var/in_use
@@ -45,8 +43,8 @@
return ..()
/obj/machinery/computer/telescience/examine(mob/user)
- ..()
- to_chat(user, "There are [crystals.len ? crystals.len : "no"] bluespace crystal\s in the crystal slots.")
+ . = ..()
+ . += "There are [crystals.len ? crystals.len : "no"] bluespace crystal\s in the crystal slots."
/obj/machinery/computer/telescience/Initialize(mapload)
. = ..()
@@ -163,15 +161,13 @@
var/truePower = clamp(power + power_off, 1, 1000)
var/trueRotation = rotation + rotation_off
- var/trueAngle = clamp(angle + angle_off, 1, 90)
- var/trueoffsetx = offsetx + rand(-1,1) // Where will you land?
- var/trueoffsety = offsety + rand(-1,1) // You never TRULY know. There are 9 possibilities, IF you calculated the offsetx and offsety.
+ var/trueAngle = clamp(angle, 1, 90)
var/datum/projectile_data/proj_data = projectile_trajectory(telepad.x, telepad.y, trueRotation, trueAngle, truePower)
last_tele_data = proj_data
- var/trueX = clamp(round(proj_data.dest_x + trueoffsetx, 1), 1, world.maxx)
- var/trueY = clamp(round(proj_data.dest_y + trueoffsety, 1), 1, world.maxy)
+ var/trueX = clamp(round(proj_data.dest_x, 1), 1, world.maxx)
+ var/trueY = clamp(round(proj_data.dest_y, 1), 1, world.maxy)
var/spawn_time = round(proj_data.time) * 10
var/turf/target = locate(trueX, trueY, z_co)
@@ -353,9 +349,7 @@
updateDialog()
/obj/machinery/computer/telescience/proc/recalibrate()
- teles_left = rand(10, 30)
- angle_off = rand(-15, 15)
+ teles_left = rand(30, 40)
+ //angle_off = rand(-25, 25)
power_off = rand(-4, 0)
rotation_off = rand(-10, 10)
- offsetx = rand(0, 7)
- offsety = rand(0, 7)
diff --git a/sandcode/icons/obj/contraband1.dmi b/sandcode/icons/obj/contraband1.dmi
deleted file mode 100644
index 704bcdbf2c..0000000000
Binary files a/sandcode/icons/obj/contraband1.dmi and /dev/null differ