mirror of
https://github.com/yogstation13/Yogstation.git
synced 2025-02-26 09:04:50 +00:00
stop it
This commit is contained in:
File diff suppressed because it is too large
Load Diff
@@ -1,6 +1,7 @@
|
||||
//config files
|
||||
#define CONFIG_GET(X) global.config.Get(/datum/config_entry/##X)
|
||||
#define CONFIG_SET(X, Y) global.config.Set(/datum/config_entry/##X, ##Y)
|
||||
#define CONFIG_LOADED global.config.load_complete
|
||||
|
||||
#define CONFIG_MAPS_FILE "maps.txt"
|
||||
|
||||
|
||||
@@ -58,12 +58,12 @@
|
||||
|
||||
//If you update these values, update the message in the #error
|
||||
#define MAX_BYOND_MAJOR 514
|
||||
#define MAX_BYOND_MINOR 1583
|
||||
#define MAX_BYOND_MINOR 1569
|
||||
|
||||
///Uncomment to bypass the max version check. Note: This will likely break the game, only use if you know what you're doing
|
||||
//#define IGNORE_MAX_BYOND_VERSION
|
||||
#if ((DM_VERSION > MAX_BYOND_MAJOR) || (DM_BUILD > MAX_BYOND_MINOR)) && !defined(IGNORE_MAX_BYOND_VERSION)
|
||||
#error Your version of BYOND is too new to compile this project. Download version 514.1583 at www.byond.com/download/build/514/514.1583_byond.exe
|
||||
#error Your version of BYOND is too new to compile this project. Download version 514.1569 at www.byond.com/download/build/514/514.1569_byond.exe
|
||||
#endif
|
||||
|
||||
#ifdef TRAVISBUILDING
|
||||
|
||||
@@ -21,6 +21,8 @@
|
||||
var/motd
|
||||
var/policy
|
||||
|
||||
var/load_complete = FALSE
|
||||
|
||||
/datum/controller/configuration/proc/admin_reload()
|
||||
if(IsAdminAdvancedProcCall())
|
||||
return
|
||||
@@ -50,6 +52,8 @@
|
||||
LoadMOTD()
|
||||
LoadPolicy()
|
||||
|
||||
load_complete = TRUE
|
||||
|
||||
if (Master)
|
||||
Master.OnConfigLoad()
|
||||
|
||||
|
||||
@@ -184,6 +184,11 @@ GLOBAL_REAL(Master, /datum/controller/master) = new
|
||||
|
||||
// Sort subsystems by init_order, so they initialize in the correct order.
|
||||
sortTim(subsystems, /proc/cmp_subsystem_init)
|
||||
//yogs -- loading progress stuff; have to initialize this static
|
||||
for(var/s in subsystems)
|
||||
var/datum/controller/subsystem/SS = s
|
||||
SS.total_loading_points += SS.loading_points
|
||||
//yogs end
|
||||
|
||||
var/start_timeofday = REALTIMEOFDAY
|
||||
// Initialize subsystems.
|
||||
|
||||
@@ -35,6 +35,12 @@
|
||||
|
||||
var/static/list/failure_strikes //How many times we suspect a subsystem type has crashed the MC, 3 strikes and you're out!
|
||||
|
||||
//yogs start -- loading time stuff
|
||||
var/static/total_loading_points_progress = 0 //! How much progress we've made in loading all the subsystems so far.
|
||||
var/static/total_loading_points = 0 //! The total amount of loading points among all subsystems. Should be defined by MC before subsystem inits.
|
||||
var/loading_points = 0 //! The amount of loading points this subsystem has, measured in deciseconds of approximate load time. This being 0 is fine.
|
||||
//yogs end
|
||||
|
||||
//Do not override
|
||||
///datum/controller/subsystem/New()
|
||||
|
||||
@@ -159,15 +165,24 @@
|
||||
/// Called after the config has been loaded or reloaded.
|
||||
/datum/controller/subsystem/proc/OnConfigLoad()
|
||||
|
||||
//used to initialize the subsystem AFTER the map has loaded
|
||||
///used to initialize the subsystem AFTER the map has loaded
|
||||
///This should be called by the derived subsystem class AFTER it has done its own initialization.
|
||||
/datum/controller/subsystem/Initialize(start_timeofday)
|
||||
initialized = TRUE
|
||||
SEND_SIGNAL(src, COMSIG_SUBSYSTEM_POST_INITIALIZE, start_timeofday)
|
||||
var/time = (REALTIMEOFDAY - start_timeofday) / 10
|
||||
var/msg = "Initialized [name] subsystem within [time] second[time == 1 ? "" : "s"]!"
|
||||
to_chat(world, span_boldannounce("[msg]"))
|
||||
var/time = (REALTIMEOFDAY - start_timeofday)/10
|
||||
var/msg = "Initialized [name] subsystem within [time] second[time == 1 ? "" : "s"]!" // Yogs -- quieter subsystem initialization
|
||||
to_chat(GLOB.admins,
|
||||
type = MESSAGE_TYPE_DEBUG,
|
||||
html = span_notice(msg),
|
||||
confidential = FALSE)
|
||||
log_world(msg)
|
||||
return time
|
||||
if(!loading_points) // We're probably one of those crappy subsystems that take 0 seconds, so return
|
||||
return time
|
||||
total_loading_points_progress += loading_points
|
||||
var/percent = round(total_loading_points_progress / total_loading_points * 100)
|
||||
to_chat(world,span_boldnotice("Subsystem initialization at [percent]%..."))
|
||||
return time // Yogs end
|
||||
|
||||
|
||||
/datum/controller/subsystem/stat_entry(msg)
|
||||
|
||||
@@ -5,6 +5,7 @@ SUBSYSTEM_DEF(air)
|
||||
wait = 0.5 SECONDS
|
||||
flags = SS_BACKGROUND
|
||||
runlevels = RUNLEVEL_GAME | RUNLEVEL_POSTGAME
|
||||
loading_points = 4.2 SECONDS // Yogs -- loading times
|
||||
|
||||
var/cost_turfs = 0
|
||||
var/cost_groups = 0
|
||||
|
||||
@@ -2,6 +2,9 @@ SUBSYSTEM_DEF(assets)
|
||||
name = "Assets"
|
||||
init_order = INIT_ORDER_ASSETS
|
||||
flags = SS_NO_FIRE
|
||||
|
||||
loading_points = 3 SECONDS // Yogs -- loading times
|
||||
|
||||
var/list/cache = list()
|
||||
var/list/preload = list()
|
||||
var/datum/asset_transport/transport = new()
|
||||
|
||||
@@ -7,6 +7,7 @@ SUBSYSTEM_DEF(atoms)
|
||||
name = "Atoms"
|
||||
init_order = INIT_ORDER_ATOMS
|
||||
flags = SS_NO_FIRE
|
||||
loading_points = 30 SECONDS // Yogs -- smarter loading times
|
||||
|
||||
var/old_initialized
|
||||
|
||||
|
||||
@@ -5,6 +5,8 @@ SUBSYSTEM_DEF(demo)
|
||||
init_order = INIT_ORDER_DEMO
|
||||
runlevels = RUNLEVELS_DEFAULT | RUNLEVEL_LOBBY
|
||||
|
||||
loading_points = 12.6 SECONDS // Yogs -- loading times
|
||||
|
||||
var/list/pre_init_lines = list() // stuff like chat before the init
|
||||
var/list/icon_cache = list()
|
||||
var/list/icon_state_caches = list()
|
||||
|
||||
@@ -5,6 +5,8 @@ SUBSYSTEM_DEF(icon_smooth)
|
||||
priority = FIRE_PRIOTITY_SMOOTHING
|
||||
flags = SS_TICKER
|
||||
|
||||
loading_points = 3.3 SECONDS // Yogs -- loading times
|
||||
|
||||
var/list/smooth_queue = list()
|
||||
var/list/deferred = list()
|
||||
|
||||
|
||||
@@ -8,6 +8,8 @@ SUBSYSTEM_DEF(lighting)
|
||||
init_order = INIT_ORDER_LIGHTING
|
||||
flags = SS_TICKER
|
||||
|
||||
loading_points = 6 SECONDS // Yogs -- loading times
|
||||
|
||||
/datum/controller/subsystem/lighting/stat_entry(msg)
|
||||
msg = "L:[GLOB.lighting_update_lights.len]|C:[GLOB.lighting_update_corners.len]|O:[GLOB.lighting_update_objects.len]"
|
||||
return ..()
|
||||
|
||||
@@ -3,6 +3,8 @@ SUBSYSTEM_DEF(mapping)
|
||||
init_order = INIT_ORDER_MAPPING
|
||||
flags = SS_NO_FIRE
|
||||
|
||||
loading_points = 11 SECONDS // Yogs -- loading times
|
||||
|
||||
var/list/nuke_tiles = list()
|
||||
var/list/nuke_threats = list()
|
||||
|
||||
|
||||
@@ -5,6 +5,8 @@ SUBSYSTEM_DEF(overlays)
|
||||
priority = FIRE_PRIORITY_OVERLAYS
|
||||
init_order = INIT_ORDER_OVERLAY
|
||||
|
||||
loading_points = 2.3 SECONDS // Yogs -- loading times
|
||||
|
||||
var/list/queue
|
||||
var/list/stats
|
||||
var/list/overlay_icon_state_caches
|
||||
|
||||
@@ -6,6 +6,8 @@ SUBSYSTEM_DEF(shuttle)
|
||||
init_order = INIT_ORDER_SHUTTLE
|
||||
flags = SS_KEEP_TIMING|SS_NO_TICK_CHECK
|
||||
|
||||
loading_points = 4.9 SECONDS // Yogs -- loading times
|
||||
|
||||
var/list/mobile = list()
|
||||
var/list/stationary = list()
|
||||
var/list/beacons = list()
|
||||
|
||||
@@ -184,6 +184,24 @@
|
||||
category = CAT_WEAPONRY
|
||||
subcategory = CAT_WEAPON
|
||||
|
||||
/datum/crafting_recipe/greatruinousknife
|
||||
name = "Great Ruinous Knife"
|
||||
result = /obj/item/kitchen/knife/ritual/holy/strong
|
||||
reqs = list(/obj/item/kitchen/knife/ritual/holy = 1,
|
||||
/obj/item/stack/sheet/ruinous_metal = 1)
|
||||
time = 4 SECONDS
|
||||
category = CAT_WEAPONRY
|
||||
subcategory = CAT_WEAPON
|
||||
|
||||
/datum/crafting_recipe/bloodyruinousknife
|
||||
name = "Blood Soaked Ruinous Knife"
|
||||
result = /obj/item/kitchen/knife/ritual/holy/strong/blood
|
||||
reqs = list(/obj/item/kitchen/knife/ritual/holy/strong = 1,
|
||||
/obj/item/stack/sheet/runed_metal = 1)
|
||||
time = 4 SECONDS
|
||||
category = CAT_WEAPONRY
|
||||
subcategory = CAT_WEAPON
|
||||
|
||||
/datum/crafting_recipe/ed209
|
||||
name = "ED209"
|
||||
result = /mob/living/simple_animal/bot/ed209
|
||||
|
||||
@@ -85,7 +85,7 @@
|
||||
add_fibers(H)
|
||||
if(H.gloves) //Check if the gloves (if any) hide fingerprints
|
||||
var/obj/item/clothing/gloves/G = H.gloves
|
||||
if(G.transfer_prints)
|
||||
if(istype(G) && G.transfer_prints)
|
||||
ignoregloves = TRUE
|
||||
if(!ignoregloves)
|
||||
H.gloves.add_fingerprint(H, TRUE) //ignoregloves = 1 to avoid infinite loop.
|
||||
|
||||
@@ -541,6 +541,8 @@
|
||||
return FALSE
|
||||
if(ismecha(M.loc)) // stops inventory actions in a mech
|
||||
return FALSE
|
||||
if(ismouse(M) && (locate(/obj/structure/table) in get_turf(parent))) // Prevents mice using storages on tables
|
||||
return FALSE
|
||||
// this must come before the screen objects only block, dunno why it wasn't before
|
||||
if(over_object == M)
|
||||
user_show_to_mob(M)
|
||||
|
||||
@@ -313,7 +313,6 @@
|
||||
of the area exists in any records. After all, it's not like \
|
||||
some doofus with an EVA suit and jetpack can just waltz around \
|
||||
in space and find it..."
|
||||
unpickable = TRUE
|
||||
|
||||
/datum/map_template/ruin/space/spacebar
|
||||
id = "spacebar"
|
||||
|
||||
@@ -223,8 +223,8 @@
|
||||
.["host"] = world.host ? world.host : null
|
||||
.["round_id"] = GLOB.round_id
|
||||
.["players"] = GLOB.clients.len
|
||||
.["revision"] = GLOB.revdata.commit
|
||||
.["revision_date"] = GLOB.revdata.date
|
||||
.["revision"] = GLOB.revdata?.commit
|
||||
.["revision_date"] = GLOB.revdata?.date
|
||||
|
||||
var/list/adm = get_admin_counts()
|
||||
var/list/presentmins = adm["present"]
|
||||
|
||||
@@ -45,6 +45,8 @@ Credit where due:
|
||||
///////////
|
||||
|
||||
/proc/is_servant_of_ratvar(mob/M)
|
||||
if(!istype(M))
|
||||
return FALSE
|
||||
return M?.mind?.has_antag_datum(/datum/antagonist/clockcult)
|
||||
|
||||
/proc/is_eligible_servant(mob/M)
|
||||
|
||||
@@ -26,9 +26,9 @@
|
||||
|
||||
light_color = LIGHT_COLOR_BLUE
|
||||
|
||||
/obj/machinery/computer/cloning/Initialize()
|
||||
/obj/machinery/computer/cloning/Initialize(mapload)
|
||||
. = ..()
|
||||
updatemodules(TRUE)
|
||||
updatemodules(TRUE,mapload)
|
||||
|
||||
/obj/machinery/computer/cloning/Destroy()
|
||||
if(pods)
|
||||
@@ -89,10 +89,10 @@
|
||||
records -= R
|
||||
|
||||
|
||||
/obj/machinery/computer/cloning/proc/updatemodules(findfirstcloner)
|
||||
/obj/machinery/computer/cloning/proc/updatemodules(findfirstcloner,mapload)
|
||||
scanner = findscanner()
|
||||
if(findfirstcloner && !LAZYLEN(pods))
|
||||
findcloner()
|
||||
findcloner(mapload)
|
||||
if(!autoprocess)
|
||||
STOP_PROCESSING(SSmachines, src)
|
||||
else
|
||||
@@ -114,14 +114,18 @@
|
||||
// If no scanner was found, it will return null
|
||||
return null
|
||||
|
||||
/obj/machinery/computer/cloning/proc/findcloner()
|
||||
/obj/machinery/computer/cloning/proc/findcloner(extended_search = FALSE) //extened_search is for things like box where the console is multiple tiles away from the actual pod
|
||||
var/obj/machinery/clonepod/podf = null
|
||||
|
||||
for(var/direction in GLOB.cardinals)
|
||||
|
||||
podf = locate(/obj/machinery/clonepod, get_step(src, direction))
|
||||
if (!isnull(podf) && podf.is_operational())
|
||||
AttachCloner(podf)
|
||||
if(extended_search)
|
||||
for(var/obj/machinery/clonepod/pod in view(3,src))
|
||||
if(!isnull(pod) && pod.is_operational())
|
||||
AttachCloner(pod)
|
||||
else
|
||||
for(var/direction in GLOB.cardinals)
|
||||
podf = locate(/obj/machinery/clonepod, get_step(src, direction))
|
||||
if (!isnull(podf) && podf.is_operational())
|
||||
AttachCloner(podf)
|
||||
|
||||
/obj/machinery/computer/cloning/proc/AttachCloner(obj/machinery/clonepod/pod)
|
||||
if(!pod.connected)
|
||||
|
||||
@@ -714,7 +714,7 @@
|
||||
H.sec_hud_set_security_status()
|
||||
|
||||
if("rank")
|
||||
var/list/allowed_ranks = list("Head of Personnel", "Captain", "AI", "Central Command")
|
||||
var/list/allowed_ranks = list("Head of Personnel", "Captain", "AI", "Central Command Officer")
|
||||
var/changed_rank = null
|
||||
if((istype(active_general_record, /datum/data/record) && allowed_ranks.Find(rank)))
|
||||
changed_rank = input("Select a rank", "Rank Selection") as null|anything in get_all_jobs()
|
||||
|
||||
@@ -27,6 +27,16 @@
|
||||
M.Paralyze(200)
|
||||
M.soundbang_act(1, 20, 10, 15)
|
||||
return
|
||||
if(iscyborg(M))
|
||||
var/mob/living/silicon/robot/C = M
|
||||
if(C.sensor_protection) //Do other annoying stuff that isnt a hard stun if they're protected
|
||||
C.overlay_fullscreen("reducedbang", /obj/screen/fullscreen/flash/static)
|
||||
C.uneq_all()
|
||||
C.stop_pulling()
|
||||
C.break_all_cyborg_slots(TRUE)
|
||||
addtimer(CALLBACK(C, /mob/living/silicon/robot/.proc/clear_fullscreen, "reducedbang"), 3 SECONDS)
|
||||
addtimer(CALLBACK(C, /mob/living/silicon/robot/.proc/repair_all_cyborg_slots), 3 SECONDS)
|
||||
return
|
||||
|
||||
var/flashed = M.flash_act(affect_silicon = 1)
|
||||
var/banged = M.soundbang_act(1, 20/max(1,distance), rand(0, 5))
|
||||
|
||||
@@ -128,9 +128,22 @@
|
||||
w_class = WEIGHT_CLASS_NORMAL
|
||||
|
||||
/obj/item/kitchen/knife/ritual/holy
|
||||
name = "ruinous knife"
|
||||
desc = "The runes inscribed on the knife radiate a strange power."
|
||||
force = 12
|
||||
name = "ruinous knife"
|
||||
desc = "The runes inscribed on the knife radiate a strange power. It looks like it could have more runes inscribed upon it..."
|
||||
|
||||
/obj/item/kitchen/knife/ritual/holy/strong
|
||||
name = "great ruinous knife"
|
||||
desc = "A heavy knife inscribed with dozens of runes."
|
||||
force = 15
|
||||
|
||||
/obj/item/kitchen/knife/ritual/holy/strong/blood
|
||||
name = "blood-soaked ruinous knife"
|
||||
desc = "Runes stretch across the surface of the knife, seemingly endless."
|
||||
wound_bonus = 20 //a bit better than a butcher cleaver, you've earned it for finding blood cult metal and doing the previous steps
|
||||
|
||||
/obj/item/kitchen/knife/ritual/holy/Initialize()
|
||||
. = ..()
|
||||
AddComponent(/datum/component/butchering, 70, 110) //the old gods demandeth more flesh output
|
||||
|
||||
/obj/item/kitchen/knife/bloodletter
|
||||
name = "bloodletter"
|
||||
|
||||
@@ -174,7 +174,7 @@ GLOBAL_VAR(restart_counter)
|
||||
handler = topic_handlers[I]
|
||||
break
|
||||
|
||||
if((!handler || initial(handler.log)) && config && CONFIG_GET(flag/log_world_topic))
|
||||
if((!handler || initial(handler.log)) && config && CONFIG_LOADED && CONFIG_GET(flag/log_world_topic))
|
||||
log_topic("\"[T]\", from:[addr], master:[master], key:[key]")
|
||||
|
||||
if(!handler)
|
||||
|
||||
@@ -11,9 +11,9 @@ GLOBAL_LIST_EMPTY(connection_logs)
|
||||
/datum/connection_log/proc/logout(mob/C)
|
||||
var/datum/connection_entry/CE = new()
|
||||
CE.disconnected = world.time
|
||||
CE.disconnect_type = C.type
|
||||
CE.disconnect_type = C?.type
|
||||
CE.living = isliving(C)
|
||||
CE.job = C.mind?.assigned_role || "Ghost"
|
||||
CE.job = C?.mind?.assigned_role || "Ghost"
|
||||
last_data_point = CE
|
||||
data_points |= CE
|
||||
|
||||
@@ -119,6 +119,6 @@ GLOBAL_LIST_EMPTY(connection_logs)
|
||||
. = list()
|
||||
.["disconnect"] = entry.disconnected
|
||||
.["connect"] = entry.connected
|
||||
.["type"] = entry.disconnect_type
|
||||
.["type"] = entry.disconnect_type || "Unknown"
|
||||
.["living"] = entry.living
|
||||
.["job"] = entry.job
|
||||
|
||||
@@ -6,15 +6,15 @@
|
||||
status = ORGAN_ROBOTIC
|
||||
beating = TRUE
|
||||
var/true_name = "baseline placebo referencer"
|
||||
var/cooldown_low = 300
|
||||
var/cooldown_high = 300
|
||||
var/cooldown_low = 30 SECONDS
|
||||
var/cooldown_high = 30 SECONDS
|
||||
var/next_activation = 0
|
||||
var/uses // -1 For infinite
|
||||
var/uses = -1 // -1 For infinite
|
||||
var/human_only = FALSE
|
||||
var/active = FALSE
|
||||
|
||||
var/mind_control_uses = 1
|
||||
var/mind_control_duration = 1800
|
||||
var/mind_control_duration = 180 SECONDS
|
||||
var/active_mind_control = FALSE
|
||||
|
||||
/obj/item/organ/heart/gland/Initialize()
|
||||
@@ -110,12 +110,11 @@
|
||||
|
||||
/obj/item/organ/heart/gland/heals
|
||||
true_name = "coherency harmonizer"
|
||||
cooldown_low = 200
|
||||
cooldown_high = 400
|
||||
uses = -1
|
||||
cooldown_low = 20 SECONDS
|
||||
cooldown_high = 40 SECONDS
|
||||
icon_state = "health"
|
||||
mind_control_uses = 3
|
||||
mind_control_duration = 3000
|
||||
mind_control_duration = 5 MINUTES
|
||||
|
||||
/obj/item/organ/heart/gland/heals/activate()
|
||||
to_chat(owner, span_notice("You feel curiously revitalized."))
|
||||
@@ -125,18 +124,22 @@
|
||||
|
||||
/obj/item/organ/heart/gland/slime
|
||||
true_name = "gastric animation galvanizer"
|
||||
cooldown_low = 600
|
||||
cooldown_high = 1200
|
||||
uses = -1
|
||||
cooldown_low = 1 MINUTES
|
||||
cooldown_high = 2 MINUTES
|
||||
icon_state = "slime"
|
||||
mind_control_uses = 1
|
||||
mind_control_duration = 2400
|
||||
mind_control_duration = 4 MINUTES
|
||||
|
||||
/obj/item/organ/heart/gland/slime/Insert(mob/living/carbon/M, special = 0)
|
||||
..()
|
||||
owner.faction |= "slime"
|
||||
owner.grant_language(/datum/language/slime)
|
||||
|
||||
/obj/item/organ/heart/gland/slime/Remove(mob/living/carbon/M, special)
|
||||
. = ..()
|
||||
owner.faction -= "slime"
|
||||
owner.remove_language(/datum/language/slime)
|
||||
|
||||
/obj/item/organ/heart/gland/slime/activate()
|
||||
to_chat(owner, span_warning("You feel nauseated!"))
|
||||
owner.vomit(20)
|
||||
@@ -147,12 +150,11 @@
|
||||
|
||||
/obj/item/organ/heart/gland/mindshock
|
||||
true_name = "neural crosstalk uninhibitor"
|
||||
cooldown_low = 400
|
||||
cooldown_high = 700
|
||||
uses = -1
|
||||
cooldown_low = 40 SECONDS
|
||||
cooldown_high = 70 SECONDS
|
||||
icon_state = "mindshock"
|
||||
mind_control_uses = 1
|
||||
mind_control_duration = 6000
|
||||
mind_control_duration = 10 MINUTES
|
||||
var/list/mob/living/carbon/human/broadcasted_mobs = list()
|
||||
|
||||
/obj/item/organ/heart/gland/mindshock/activate()
|
||||
@@ -212,12 +214,12 @@
|
||||
|
||||
/obj/item/organ/heart/gland/access
|
||||
true_name = "anagraphic electro-scrambler"
|
||||
cooldown_low = 600
|
||||
cooldown_high = 1200
|
||||
cooldown_low = 1 MINUTES
|
||||
cooldown_high = 2 MINUTES
|
||||
uses = 1
|
||||
icon_state = "mindshock"
|
||||
mind_control_uses = 3
|
||||
mind_control_duration = 900
|
||||
mind_control_duration = 90 SECONDS
|
||||
|
||||
/obj/item/organ/heart/gland/access/activate()
|
||||
to_chat(owner, span_notice("You feel like a VIP for some reason."))
|
||||
@@ -231,14 +233,13 @@
|
||||
..()
|
||||
|
||||
/obj/item/organ/heart/gland/pop
|
||||
true_name = "anthropmorphic transmorphosizer"
|
||||
cooldown_low = 900
|
||||
cooldown_high = 1800
|
||||
uses = -1
|
||||
true_name = "anthropomorphic transmorphosizer"
|
||||
cooldown_low = 90 SECONDS
|
||||
cooldown_high = 3 MINUTES
|
||||
human_only = TRUE
|
||||
icon_state = "species"
|
||||
mind_control_uses = 7
|
||||
mind_control_duration = 300
|
||||
mind_control_duration = 30 SECONDS
|
||||
|
||||
/obj/item/organ/heart/gland/pop/activate()
|
||||
to_chat(owner, span_notice("You feel unlike yourself."))
|
||||
@@ -248,25 +249,32 @@
|
||||
|
||||
/obj/item/organ/heart/gland/ventcrawling
|
||||
true_name = "pliant cartilage enabler"
|
||||
cooldown_low = 1800
|
||||
cooldown_high = 2400
|
||||
cooldown_low = 3 MINUTES
|
||||
cooldown_high = 4 MINUTES
|
||||
uses = 1
|
||||
icon_state = "vent"
|
||||
mind_control_uses = 4
|
||||
mind_control_duration = 1800
|
||||
mind_control_duration = 3 MINUTES
|
||||
var/previous_ventcrawling
|
||||
|
||||
/obj/item/organ/heart/gland/ventcrawling/activate()
|
||||
to_chat(owner, span_notice("You feel very stretchy."))
|
||||
previous_ventcrawling = owner.ventcrawler
|
||||
owner.ventcrawler = VENTCRAWLER_ALWAYS
|
||||
|
||||
/obj/item/organ/heart/gland/ventcrawling/Remove(mob/living/carbon/M, special)
|
||||
. = ..()
|
||||
owner.ventcrawler = previous_ventcrawling
|
||||
previous_ventcrawling = VENTCRAWLER_NONE
|
||||
|
||||
/obj/item/organ/heart/gland/viral
|
||||
true_name = "contamination incubator"
|
||||
cooldown_low = 1800
|
||||
cooldown_high = 2400
|
||||
cooldown_low = 3 MINUTES
|
||||
cooldown_high = 4 MINUTES
|
||||
uses = 1
|
||||
icon_state = "viral"
|
||||
mind_control_uses = 1
|
||||
mind_control_duration = 1800
|
||||
mind_control_duration = 3 MINUTES
|
||||
|
||||
/obj/item/organ/heart/gland/viral/activate()
|
||||
to_chat(owner, span_warning("You feel sick."))
|
||||
@@ -296,12 +304,12 @@
|
||||
|
||||
/obj/item/organ/heart/gland/trauma
|
||||
true_name = "white matter randomiser"
|
||||
cooldown_low = 800
|
||||
cooldown_high = 1200
|
||||
cooldown_low = 80 SECONDS
|
||||
cooldown_high = 2 MINUTES
|
||||
uses = 5
|
||||
icon_state = "emp"
|
||||
mind_control_uses = 3
|
||||
mind_control_duration = 1800
|
||||
mind_control_duration = 3 MINUTES
|
||||
|
||||
/obj/item/organ/heart/gland/trauma/activate()
|
||||
to_chat(owner, span_warning("You feel a spike of pain in your head."))
|
||||
@@ -315,12 +323,11 @@
|
||||
|
||||
/obj/item/organ/heart/gland/quantum
|
||||
true_name = "quantic de-observation matrix"
|
||||
cooldown_low = 150
|
||||
cooldown_high = 150
|
||||
uses = -1
|
||||
cooldown_low = 15 SECONDS
|
||||
cooldown_high = 15 SECONDS
|
||||
icon_state = "emp"
|
||||
mind_control_uses = 2
|
||||
mind_control_duration = 1200
|
||||
mind_control_duration = 2 MINUTES
|
||||
var/mob/living/carbon/entangled_mob
|
||||
|
||||
/obj/item/organ/heart/gland/quantum/activate()
|
||||
@@ -330,7 +337,7 @@
|
||||
if(!iscarbon(M))
|
||||
continue
|
||||
entangled_mob = M
|
||||
addtimer(CALLBACK(src, .proc/quantum_swap), rand(600, 2400))
|
||||
addtimer(CALLBACK(src, .proc/quantum_swap), rand(1 MINUTES, 4 MINUTES))
|
||||
return
|
||||
|
||||
/obj/item/organ/heart/gland/quantum/proc/quantum_swap()
|
||||
@@ -363,12 +370,11 @@
|
||||
|
||||
/obj/item/organ/heart/gland/spiderman
|
||||
true_name = "araneae cloister accelerator"
|
||||
cooldown_low = 450
|
||||
cooldown_high = 900
|
||||
uses = -1
|
||||
cooldown_low = 45 SECONDS
|
||||
cooldown_high = 90 SECONDS
|
||||
icon_state = "spider"
|
||||
mind_control_uses = 2
|
||||
mind_control_duration = 2400
|
||||
mind_control_duration = 4 MINUTES
|
||||
|
||||
/obj/item/organ/heart/gland/spiderman/activate()
|
||||
to_chat(owner, span_warning("You feel something crawling in your skin."))
|
||||
@@ -378,14 +384,13 @@
|
||||
|
||||
/obj/item/organ/heart/gland/egg
|
||||
true_name = "roe/enzymatic synthesizer"
|
||||
cooldown_low = 300
|
||||
cooldown_high = 400
|
||||
uses = -1
|
||||
cooldown_low = 30 SECONDS
|
||||
cooldown_high = 40 SECONDS
|
||||
icon_state = "egg"
|
||||
lefthand_file = 'icons/mob/inhands/misc/food_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/misc/food_righthand.dmi'
|
||||
mind_control_uses = 2
|
||||
mind_control_duration = 1800
|
||||
mind_control_duration = 3 MINUTES
|
||||
|
||||
/obj/item/organ/heart/gland/egg/activate()
|
||||
owner.visible_message(span_alertalien("[owner] [pick(EGG_LAYING_MESSAGES)]"))
|
||||
@@ -395,14 +400,13 @@
|
||||
|
||||
/obj/item/organ/heart/gland/blood
|
||||
true_name = "pseudonuclear hemo-destabilizer"
|
||||
cooldown_low = 1200
|
||||
cooldown_high = 1800
|
||||
uses = -1
|
||||
cooldown_low = 2 MINUTES
|
||||
cooldown_high = 3 MINUTES
|
||||
icon_state = "egg"
|
||||
lefthand_file = 'icons/mob/inhands/misc/food_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/misc/food_righthand.dmi'
|
||||
mind_control_uses = 3
|
||||
mind_control_duration = 1500
|
||||
mind_control_duration = 3 MINUTES
|
||||
|
||||
/obj/item/organ/heart/gland/blood/activate()
|
||||
if(!ishuman(owner) || !owner.dna.species)
|
||||
@@ -414,12 +418,11 @@
|
||||
|
||||
/obj/item/organ/heart/gland/electric
|
||||
true_name = "electron accumulator/discharger"
|
||||
cooldown_low = 800
|
||||
cooldown_high = 1200
|
||||
cooldown_low = 80 SECONDS
|
||||
cooldown_high = 2 MINUTES
|
||||
icon_state = "species"
|
||||
uses = -1
|
||||
mind_control_uses = 2
|
||||
mind_control_duration = 900
|
||||
mind_control_duration = 90 SECONDS
|
||||
|
||||
/obj/item/organ/heart/gland/electric/Insert(mob/living/carbon/M, special = 0)
|
||||
..()
|
||||
@@ -441,9 +444,8 @@
|
||||
|
||||
/obj/item/organ/heart/gland/chem
|
||||
true_name = "intrinsic pharma-provider"
|
||||
cooldown_low = 50
|
||||
cooldown_high = 50
|
||||
uses = -1
|
||||
cooldown_low = 5 SECONDS
|
||||
cooldown_high = 5 SECONDS
|
||||
icon_state = "viral"
|
||||
mind_control_uses = 3
|
||||
mind_control_duration = 1200
|
||||
@@ -462,17 +464,16 @@
|
||||
|
||||
/obj/item/organ/heart/gland/plasma
|
||||
true_name = "effluvium sanguine-synonym emitter"
|
||||
cooldown_low = 1200
|
||||
cooldown_high = 1800
|
||||
cooldown_low = 2 MINUTES
|
||||
cooldown_high = 3 MINUTES
|
||||
icon_state = "slime"
|
||||
uses = -1
|
||||
mind_control_uses = 1
|
||||
mind_control_duration = 800
|
||||
mind_control_duration = 80 SECONDS
|
||||
|
||||
/obj/item/organ/heart/gland/plasma/activate()
|
||||
to_chat(owner, span_warning("You feel bloated."))
|
||||
addtimer(CALLBACK(GLOBAL_PROC, .proc/to_chat, owner, span_userdanger("A massive stomachache overcomes you.")), 150)
|
||||
addtimer(CALLBACK(src, .proc/vomit_plasma), 200)
|
||||
addtimer(CALLBACK(GLOBAL_PROC, .proc/to_chat, owner, span_userdanger("A massive stomachache overcomes you.")), 15 SECONDS)
|
||||
addtimer(CALLBACK(src, .proc/vomit_plasma), 20 SECONDS)
|
||||
|
||||
/obj/item/organ/heart/gland/plasma/proc/vomit_plasma()
|
||||
if(!owner)
|
||||
|
||||
@@ -149,14 +149,25 @@
|
||||
return TRUE
|
||||
else if(issilicon(M))
|
||||
var/mob/living/silicon/robot/R = M
|
||||
log_combat(user, R, "flashed", src)
|
||||
update_icon(1)
|
||||
R.Paralyze(rand(80,120))
|
||||
var/diff = 5 * CONFUSION_STACK_MAX_MULTIPLIER - M.confused
|
||||
R.confused += min(5, diff)
|
||||
R.flash_act(affect_silicon = 1)
|
||||
user.visible_message(span_disarm("[user] overloads [R]'s sensors with the flash!"), span_danger("You overload [R]'s sensors with the flash!"))
|
||||
return TRUE
|
||||
if(!R.sensor_protection)
|
||||
log_combat(user, R, "flashed", src)
|
||||
update_icon(1)
|
||||
R.Paralyze(rand(80,120))
|
||||
var/diff = 5 * CONFUSION_STACK_MAX_MULTIPLIER - M.confused
|
||||
R.confused += min(5, diff)
|
||||
R.flash_act(affect_silicon = 1)
|
||||
user.visible_message(span_disarm("[user] overloads [R]'s sensors with the flash!"), span_danger("You overload [R]'s sensors with the flash!"))
|
||||
return TRUE
|
||||
else
|
||||
R.overlay_fullscreen("reducedflash", /obj/screen/fullscreen/flash/static)
|
||||
R.uneq_all()
|
||||
R.stop_pulling()
|
||||
R.break_all_cyborg_slots(TRUE)
|
||||
addtimer(CALLBACK(R, /mob/living/silicon/robot/.proc/clear_fullscreen, "reducedflash"), 5 SECONDS)
|
||||
addtimer(CALLBACK(R, /mob/living/silicon/robot/.proc/repair_all_cyborg_slots), 5 SECONDS)
|
||||
to_chat(R, span_danger("Your sensors were momentarily dazzled!"))
|
||||
user.visible_message(span_disarm("[user] overloads [R]'s sensors with the flash!"), span_danger("You overload [R]'s sensors with the flash!"))
|
||||
return TRUE
|
||||
|
||||
user.visible_message(span_disarm("[user] fails to blind [M] with the flash!"), span_warning("You fail to blind [M] with the flash!"))
|
||||
|
||||
|
||||
@@ -1254,10 +1254,11 @@ GLOBAL_LIST_EMPTY(preferences_datums)
|
||||
return bal
|
||||
|
||||
/datum/preferences/proc/GetPositiveQuirkCount()
|
||||
. = 0
|
||||
var/sum = 0
|
||||
for(var/q in all_quirks)
|
||||
if(SSquirks.quirk_points[q] > 0)
|
||||
.++
|
||||
sum++
|
||||
return sum
|
||||
|
||||
/datum/preferences/Topic(href, href_list, hsrc) //yeah, gotta do this I guess..
|
||||
. = ..()
|
||||
@@ -1352,7 +1353,7 @@ GLOBAL_LIST_EMPTY(preferences_datums)
|
||||
if((quirk in L) && (Q in L) && !(Q == quirk)) //two quirks have lined up in the list of the list of quirks that conflict with each other, so return (see quirks.dm for more details)
|
||||
to_chat(user, span_danger("[quirk] is incompatible with [Q]."))
|
||||
return
|
||||
var/value = SSquirks.quirk_points[quirk]
|
||||
var/value = SSquirks.quirk_points[quirk] // The value of the chosen quirk.
|
||||
var/balance = GetQuirkBalance()
|
||||
if(quirk in all_quirks)
|
||||
if(balance + value < 0)
|
||||
@@ -1360,7 +1361,8 @@ GLOBAL_LIST_EMPTY(preferences_datums)
|
||||
return
|
||||
all_quirks -= quirk
|
||||
else
|
||||
if(GetPositiveQuirkCount() >= MAX_QUIRKS)
|
||||
var/positive_count = GetPositiveQuirkCount() // Yogs -- fixes weird behaviour when at max positive quirks
|
||||
if(positive_count > MAX_QUIRKS || (positive_count == MAX_QUIRKS && value > 0)) // Yogs
|
||||
to_chat(user, span_warning("You can't have more than [MAX_QUIRKS] positive quirks!"))
|
||||
return
|
||||
if(balance - value < 0)
|
||||
|
||||
@@ -35,12 +35,12 @@
|
||||
/obj/item/clothing/suit/hooded/proc/RemoveHood()
|
||||
src.icon_state = "[initial(icon_state)]"
|
||||
suittoggled = FALSE
|
||||
if(ishuman(hood.loc))
|
||||
if(ishuman(hood?.loc))
|
||||
var/mob/living/carbon/H = hood.loc
|
||||
H.transferItemToLoc(hood, src, TRUE)
|
||||
H.update_inv_wear_suit()
|
||||
else
|
||||
hood.forceMove(src)
|
||||
hood?.forceMove(src)
|
||||
for(var/X in actions)
|
||||
var/datum/action/A = X
|
||||
A.UpdateButtonIcon()
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
/datum/department_goal/eng/SMES
|
||||
name = "Store 1.4GJ"
|
||||
desc = "Store 1.4GJ of energy in the station's SMES"
|
||||
reward = "50000"
|
||||
reward = 50000
|
||||
|
||||
/datum/department_goal/eng/SMES/check_complete()
|
||||
var/charge = 0
|
||||
@@ -22,7 +22,7 @@
|
||||
/datum/department_goal/eng/additional_supermatter
|
||||
name = "Fire up a supermatter"
|
||||
desc = "Order and fire up a supermatter shard"
|
||||
reward = "50000"
|
||||
reward = 50000
|
||||
|
||||
// Only available if the station doesn't have a suppermatter
|
||||
/datum/department_goal/eng/additional_supermatter/is_available()
|
||||
@@ -33,7 +33,7 @@
|
||||
/datum/department_goal/eng/additional_singularity
|
||||
name = "Spark a singularity"
|
||||
desc = "Start a singularity engine using a singularity generator"
|
||||
reward = "50000"
|
||||
reward = 50000
|
||||
|
||||
/datum/department_goal/eng/additional_singularity/is_available()
|
||||
return GLOB.main_supermatter_engine
|
||||
@@ -48,7 +48,7 @@
|
||||
/datum/department_goal/eng/tesla
|
||||
name = "Create a tesla"
|
||||
desc = "Create a tesla engine using a tesla generator"
|
||||
reward = "50000"
|
||||
reward = 50000
|
||||
|
||||
/datum/department_goal/eng/tesla/check_complete()
|
||||
for(var/obj/singularity/energy_ball/e in GLOB.singularities)
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
/datum/department_goal/sci/borgs
|
||||
name = "4 borgs"
|
||||
desc = "Have 4 borgs alive and active on the station"
|
||||
reward = "50000"
|
||||
reward = 50000
|
||||
|
||||
/datum/department_goal/sci/borgs/check_complete()
|
||||
var/borgs = 0
|
||||
|
||||
@@ -15,6 +15,10 @@
|
||||
var/overrides_aicore_laws = TRUE // Whether the laws on the MMI are transferred when it's uploaded as an AI
|
||||
var/override_cyborg_laws = FALSE // Do custom laws uploaded to the MMI get transferred to borgs? If yes the borg will be unlinked and have lawsync disabled.
|
||||
var/can_update_laws = TRUE //Can we use a lawboard to change the laws of this MMI?
|
||||
var/remove_time = 2 SECONDS /// The time to remove the brain or reset the posi brain
|
||||
var/rebooting = FALSE /// If the MMI is rebooting after being deconstructed
|
||||
var/remove_window = 10 SECONDS /// The window in which someone has to remove the brain to lose memory of being killed as a borg
|
||||
var/reboot_timer = null
|
||||
|
||||
/obj/item/mmi/update_icon()
|
||||
if(!brain)
|
||||
@@ -93,10 +97,19 @@
|
||||
radio.on = !radio.on
|
||||
to_chat(user, span_notice("You toggle [src]'s radio system [radio.on==1 ? "on" : "off"]."))
|
||||
else
|
||||
eject_brain(user)
|
||||
update_icon()
|
||||
name = initial(name)
|
||||
to_chat(user, span_notice("You unlock and upend [src], spilling the brain onto the floor."))
|
||||
user.visible_message(span_notice("[user] begins to remove the brain from [src]"), span_danger("You begin to pry the brain out of [src], ripping out the wires and probes"))
|
||||
to_chat(brainmob, span_userdanger("You feel your mind failing as you are slowly ripped from the [src]"))
|
||||
if(do_after(user, remove_time, target = src))
|
||||
if(!brainmob) return
|
||||
to_chat(brainmob, span_userdanger("Due to the traumatic danger of your removal, all memories of the events leading to your brain being removed are lost[rebooting ? ", along with all memories of the events leading to your death as a cyborg" : ""]"))
|
||||
eject_brain(user)
|
||||
update_icon()
|
||||
name = initial(name)
|
||||
user.visible_message(span_notice("[user] rips the brain out of [src]"), span_danger("You successfully remove the brain from the [src][rebooting ? ", interrupting the reboot process" : ""]"))
|
||||
if(rebooting)
|
||||
rebooting = FALSE
|
||||
deltimer(reboot_timer)
|
||||
reboot_timer = null
|
||||
|
||||
/obj/item/mmi/proc/eject_brain(mob/user)
|
||||
brainmob.container = null //Reset brainmob mmi var.
|
||||
@@ -108,6 +121,7 @@
|
||||
brainmob.add_to_dead_mob_list()
|
||||
brain.brainmob = brainmob //Set the brain to use the brainmob
|
||||
brainmob = null //Set mmi brainmob var to null
|
||||
brain.setOrganDamage(brain.maxHealth) // Kill the brain, requiring mannitol
|
||||
if(user)
|
||||
user.put_in_hands(brain) //puts brain in the user's hand or otherwise drops it on the user's turf
|
||||
else
|
||||
@@ -219,6 +233,26 @@
|
||||
/obj/item/mmi/relaymove(mob/user)
|
||||
return //so that the MMI won't get a warning about not being able to move if it tries to move
|
||||
|
||||
/obj/item/mmi/proc/beginReboot()
|
||||
rebooting = TRUE
|
||||
visible_message(span_danger("The indicator lights on [src] begin to glow faintly as the reboot process begins"))
|
||||
to_chat(brainmob, span_userdanger("You begin to reboot after being removed from the destroyed body"))
|
||||
reboot_timer = addtimer(CALLBACK(src, .proc/halfwayReboot), remove_window / 2, TIMER_STOPPABLE)
|
||||
|
||||
/obj/item/mmi/proc/halfwayReboot()
|
||||
visible_message(span_danger("The indicator lights on [src] begin to glow stronger and the reboot process approaches the halfway point"))
|
||||
reboot_timer = addtimer(CALLBACK(src, .proc/rebootNoReturn), remove_window / 2, TIMER_STOPPABLE)
|
||||
|
||||
/obj/item/mmi/proc/rebootNoReturn()
|
||||
visible_message(span_danger("The indicator lights on [src] begin to blink as the reboot process nears completion"))
|
||||
reboot_timer = addtimer(CALLBACK(src, .proc/rebootFinish), remove_time, TIMER_STOPPABLE)
|
||||
|
||||
/obj/item/mmi/proc/rebootFinish()
|
||||
visible_message(span_danger("The indicator lights on [src] return to normal as the reboot process completes"))
|
||||
to_chat(brainmob, span_userdanger("You return to normal functionality now that your reboot process has completed"))
|
||||
rebooting = FALSE
|
||||
reboot_timer = null
|
||||
|
||||
/obj/item/mmi/syndie
|
||||
name = "\improper Syndicate Man-Machine Interface"
|
||||
desc = "Syndicate's own brand of MMI. It enforces laws designed to help Syndicate agents achieve their goals upon cyborgs and AIs created with it."
|
||||
|
||||
@@ -111,3 +111,9 @@
|
||||
|
||||
if(container)
|
||||
. += "[container.type]"
|
||||
|
||||
/mob/living/brain/say(message, bubble_type, var/list/spans = list(), sanitize = TRUE, datum/language/language = null, ignore_spam = FALSE, forced = null)
|
||||
if(container && container.rebooting)
|
||||
to_chat(src, span_danger("Speech synthesizers still offine, wait for the reboot process to complete"))
|
||||
return
|
||||
return ..()
|
||||
|
||||
@@ -44,7 +44,11 @@ GLOBAL_VAR(posibrain_notify_cooldown)
|
||||
if(!brainmob)
|
||||
brainmob = new(src)
|
||||
if(is_occupied())
|
||||
to_chat(user, span_warning("This [name] is already active!"))
|
||||
user.visible_message(span_danger("[user] begins to reset [src]'s memory banks"), span_danger("You begin to reset [src]'s memory banks"))
|
||||
to_chat(brainmob, span_userdanger("[user] begins to reset your memory banks"))
|
||||
if(do_after(user, remove_time, target = src))
|
||||
user.visible_message(span_danger("[user] resets [src]'s memory banks"), span_danger("You successfully reset [src]'s memory banks"))
|
||||
to_chat(brainmob, span_userdanger("Your memory banks have been cleared, you have no memories of anything before this moment."))
|
||||
return
|
||||
if(next_ask > world.time)
|
||||
to_chat(user, recharge_message)
|
||||
@@ -73,7 +77,7 @@ GLOBAL_VAR(posibrain_notify_cooldown)
|
||||
activate(user)
|
||||
|
||||
/obj/item/mmi/posibrain/proc/is_occupied()
|
||||
if(brainmob.key)
|
||||
if(brainmob.key && brainmob.client)
|
||||
return TRUE
|
||||
if(iscyborg(loc))
|
||||
var/mob/living/silicon/robot/R = loc
|
||||
|
||||
@@ -95,6 +95,9 @@
|
||||
var/obj/item/modular_computer/tablet/integrated/modularInterface
|
||||
var/obj/screen/robot/modPC/interfaceButton
|
||||
|
||||
///Flash resistance
|
||||
var/sensor_protection = FALSE
|
||||
|
||||
var/list/upgrades = list()
|
||||
|
||||
var/expansion_count = 0
|
||||
@@ -205,6 +208,7 @@
|
||||
to_chat(src, span_boldannounce("Oops! Something went very wrong, your MMI was unable to receive your mind. You have been ghosted. Please make a bug report so we can fix this bug."))
|
||||
ghostize()
|
||||
stack_trace("Borg MMI lacked a brainmob")
|
||||
mmi.beginReboot()
|
||||
mmi = null
|
||||
if(modularInterface)
|
||||
QDEL_NULL(modularInterface)
|
||||
@@ -508,7 +512,7 @@
|
||||
return
|
||||
else
|
||||
to_chat(user, span_notice("You start to unfasten [src]'s securing bolts..."))
|
||||
if(W.use_tool(src, user, 50, volume=50) && !cell)
|
||||
if(W.use_tool(src, user, 5 SECONDS, volume=50) && !cell)
|
||||
user.visible_message("[user] deconstructs [src]!", span_notice("You unfasten the securing bolts, and [src] falls to pieces!"))
|
||||
deconstruct()
|
||||
|
||||
@@ -896,6 +900,8 @@
|
||||
lawupdate = FALSE
|
||||
scrambledcodes = TRUE // These are rogue borgs.
|
||||
ionpulse = TRUE
|
||||
sensor_protection = TRUE //Your funny lightbulb won't save you now. Prepare to die!
|
||||
|
||||
var/playstyle_string = "<span class='big bold'>You are a Syndicate assault cyborg!</span><br>\
|
||||
<b>You are armed with powerful offensive tools to aid you in your mission: help the operatives secure the nuclear authentication disk. \
|
||||
Your cyborg LMG will slowly produce ammunition from your power supply, and your operative pinpointer will find and locate fellow nuclear operatives. \
|
||||
@@ -923,6 +929,7 @@
|
||||
|
||||
/mob/living/silicon/robot/modules/syndicate/medical
|
||||
icon_state = "synd_medical"
|
||||
sensor_protection = FALSE //Not a direct combat module like the assault borg (usually)
|
||||
playstyle_string = "<span class='big bold'>You are a Syndicate medical cyborg!</span><br>\
|
||||
<b>You are armed with powerful medical tools to aid you in your mission: help the operatives secure the nuclear authentication disk. \
|
||||
Your hypospray will produce Restorative Nanites, a wonder-drug that will heal most types of bodily damages, including clone and brain damage. It also produces morphine for offense. \
|
||||
@@ -933,6 +940,7 @@
|
||||
|
||||
/mob/living/silicon/robot/modules/syndicate/saboteur
|
||||
icon_state = "synd_engi"
|
||||
sensor_protection = FALSE //DEFINITELY not a direct combat module
|
||||
playstyle_string = "<span class='big bold'>You are a Syndicate saboteur cyborg!</span><br>\
|
||||
<b>You are armed with robust engineering tools to aid you in your mission: help the operatives secure the nuclear authentication disk. \
|
||||
Your destination tagger will allow you to stealthily traverse the disposal network across the station \
|
||||
@@ -1357,3 +1365,6 @@
|
||||
var/datum/computer_file/program/robotact/program = modularInterface.get_robotact()
|
||||
if(program)
|
||||
program.force_full_update()
|
||||
|
||||
/mob/living/silicon/robot/get_eye_protection()
|
||||
return sensor_protection
|
||||
|
||||
@@ -207,17 +207,15 @@
|
||||
if(is_centcom)
|
||||
new_access = get_centcom_access(target)
|
||||
else
|
||||
var/datum/job/job
|
||||
for(var/jobtype in subtypesof(/datum/job))
|
||||
var/datum/job/J = new jobtype
|
||||
if(J.title == target)
|
||||
job = J
|
||||
break
|
||||
var/datum/job/job = SSjob.GetJob(target)
|
||||
if(!job)
|
||||
to_chat(user, span_warning("No class exists for this job: [target]"))
|
||||
return
|
||||
new_access = job.get_access()
|
||||
target_id_card.access -= get_all_centcom_access() + get_all_accesses()
|
||||
if(target_id_card.registered_account)
|
||||
target_id_card.registered_account.account_job = job
|
||||
|
||||
target_id_card.access = list()
|
||||
target_id_card.access |= new_access
|
||||
target_id_card.originalassignment = target
|
||||
target_id_card.assignment = target
|
||||
|
||||
@@ -32,13 +32,18 @@ Place a pool filter somewhere in the pool if you want people to be able to modif
|
||||
. = ..()
|
||||
water_overlay = new /obj/effect/overlay/poolwater(get_turf(src))
|
||||
|
||||
/turf/open/indestructible/sound/pool/proc/set_colour(colour)
|
||||
water_overlay.color = colour
|
||||
|
||||
/turf/open/indestructible/sound/pool/end/ChangeTurf(path, list/new_baseturfs, flags)
|
||||
/turf/open/indestructible/sound/pool/Destroy()
|
||||
if(water_overlay)
|
||||
qdel(water_overlay)
|
||||
. = ..()
|
||||
return ..()
|
||||
|
||||
/turf/open/indestructible/sound/pool/examine(mob/user)
|
||||
. = ..() // This is a list
|
||||
if(!HAS_TRAIT(user,TRAIT_CLUMSY) && calculate_zap(user))
|
||||
. += span_warning("It's probably not the best idea to jump in...")
|
||||
|
||||
/turf/open/indestructible/sound/pool/proc/set_colour(colour)
|
||||
water_overlay.color = colour
|
||||
|
||||
/turf/open/CanPass(atom/movable/mover, turf/target)
|
||||
var/datum/component/swimming/S = mover.GetComponent(/datum/component/swimming) //If you're swimming around, you don't really want to stop swimming just like that do you?
|
||||
@@ -99,7 +104,7 @@ Place a pool filter somewhere in the pool if you want people to be able to modif
|
||||
splash(dropping)
|
||||
|
||||
/datum/mood_event/poolparty
|
||||
description = "<span class='nicegreen'>I love swimming!.</span>\n"
|
||||
description = "<span class='nicegreen'>I love swimming!</span>\n"
|
||||
mood_change = 2
|
||||
timeout = 2 MINUTES
|
||||
|
||||
@@ -109,14 +114,12 @@ Place a pool filter somewhere in the pool if you want people to be able to modif
|
||||
timeout = 2 MINUTES
|
||||
|
||||
/datum/mood_event/poolwet
|
||||
description = "<span class='warning'>Eugh! my clothes are soaking wet from that swim.</span>\n"
|
||||
description = "<span class='warning'>Eugh! My clothes are soaking wet from that swim.</span>\n"
|
||||
mood_change = -4
|
||||
timeout = 4 MINUTES
|
||||
|
||||
/turf/open/indestructible/sound/pool/proc/splash(mob/user)
|
||||
user.forceMove(src)
|
||||
playsound(src, 'sound/effects/splosh.ogg', 100, 1) //Credit to hippiestation for this sound file!
|
||||
user.visible_message("<span class='boldwarning'>SPLASH!</span>")
|
||||
//Used to determine how zappy to be to a perhaps-electronic user entering this pool.
|
||||
/turf/open/indestructible/sound/pool/proc/calculate_zap(mob/user)
|
||||
var/zap = 0
|
||||
if(issilicon(user)) //Do not throw brick in a pool. Brick begs.
|
||||
zap = 1 //Sorry borgs! Swimming will come at a cost.
|
||||
@@ -135,6 +138,13 @@ Place a pool filter somewhere in the pool if you want people to be able to modif
|
||||
zap --
|
||||
if(zap > 0)
|
||||
zap = 3 - zap // 1 is higher severity emp than 2
|
||||
return zap
|
||||
|
||||
/turf/open/indestructible/sound/pool/proc/splash(mob/user)
|
||||
user.forceMove(src)
|
||||
playsound(src, 'sound/effects/splosh.ogg', 100, 1) //Credit to hippiestation for this sound file!
|
||||
user.visible_message("<span class='boldwarning'>SPLASH!</span>")
|
||||
var/zap = calculate_zap(user)
|
||||
if(zap > 0)
|
||||
user.emp_act(zap)
|
||||
user.emote("scream") //Chad coders use M.say("*scream")
|
||||
@@ -165,6 +175,15 @@ Place a pool filter somewhere in the pool if you want people to be able to modif
|
||||
if(H.head && !(H.head.clothing_flags & SHOWEROKAY))
|
||||
return TRUE
|
||||
|
||||
/turf/open/indestructible/sound/pool/singularity_act() // Pool's closed
|
||||
playsound(src, 'sound/effects/splosh.ogg', 100, 1) // Slourmping up all the pool water is very sploshy.
|
||||
visible_message(span_warning("The pool's water is sucked into the singularity!"))
|
||||
for(var/turf/open/indestructible/sound/pool/water in get_area_turfs(get_area(src))) // Basically, we can just turn into plating or something.
|
||||
if(water != src)
|
||||
if(isnull(id) || id == water.id) // To make sure this is the same pool being drained
|
||||
water.ChangeTurf(/turf/open/floor/plating, flags = CHANGETURF_INHERIT_AIR)
|
||||
ChangeTurf(/turf/open/floor/plating, flags = CHANGETURF_INHERIT_AIR)
|
||||
|
||||
/obj/effect/turf_decal/pool
|
||||
name = "Pool siding"
|
||||
icon = 'icons/obj/pool.dmi'
|
||||
|
||||
@@ -408,7 +408,10 @@
|
||||
if(modifier)
|
||||
for(var/mob/living/L in range(1, target_turf) - K.firer - target)
|
||||
var/armor = L.run_armor_check(K.def_zone, K.flag, "", "", K.armour_penetration)
|
||||
L.apply_damage(K.damage*modifier, K.damage_type, K.def_zone, armor)
|
||||
var/effective_modifier = modifier
|
||||
if(K.pressure_decrease_active)
|
||||
effective_modifier *= K.pressure_decrease
|
||||
L.apply_damage(K.damage*effective_modifier, K.damage_type, K.def_zone, armor)
|
||||
to_chat(L, span_userdanger("You're struck by a [K.name]!"))
|
||||
|
||||
/obj/item/borg/upgrade/modkit/aoe/turfs
|
||||
|
||||
@@ -428,7 +428,7 @@
|
||||
|
||||
/datum/religion_rites/ruinousknife
|
||||
name = "Ruinous Knife"
|
||||
desc = "Creates a knife that is mostly cosmetic, but is also a weapon."
|
||||
desc = "Creates a knife that is mostly cosmetic, but is also a weapon. It is extra effective as a butchering tool, and can be upgraded with crafting alongside a piece of ruinous metal."
|
||||
ritual_length = 5 SECONDS
|
||||
invoke_msg = "please, old ones, lend us a tool of holy creation."
|
||||
favor_cost = 50
|
||||
|
||||
@@ -105,25 +105,30 @@
|
||||
COMSIG_LIVING_STATUS_KNOCKDOWN,
|
||||
COMSIG_LIVING_STATUS_IMMOBILIZE,
|
||||
COMSIG_LIVING_STATUS_PARALYZE,
|
||||
COMSIG_CARBON_STATUS_STAMCRIT,
|
||||
)
|
||||
|
||||
var/stun_cap_amount = 40
|
||||
var/stun_cap_amount = 4 SECONDS
|
||||
|
||||
/obj/item/organ/cyberimp/brain/anti_stun/Remove(mob/living/carbon/M, special = FALSE)
|
||||
. = ..()
|
||||
UnregisterSignal(M, signalCache)
|
||||
UnregisterSignal(M, COMSIG_CARBON_STATUS_STAMCRIT)
|
||||
|
||||
/obj/item/organ/cyberimp/brain/anti_stun/Insert()
|
||||
. = ..()
|
||||
RegisterSignal(owner, signalCache, .proc/on_signal)
|
||||
RegisterSignal(owner, COMSIG_CARBON_STATUS_STAMCRIT, .proc/on_signal_stamina)
|
||||
|
||||
/obj/item/organ/cyberimp/brain/anti_stun/proc/on_signal(datum/source, amount)
|
||||
if((organ_flags & ORGAN_FAILING) && amount > 0)
|
||||
if(!(organ_flags & ORGAN_FAILING) && amount > 0)
|
||||
addtimer(CALLBACK(src, .proc/clear_stuns), stun_cap_amount, TIMER_UNIQUE|TIMER_OVERRIDE)
|
||||
|
||||
/obj/item/organ/cyberimp/brain/anti_stun/proc/on_signal_stamina()
|
||||
if(!(organ_flags & ORGAN_FAILING))
|
||||
addtimer(CALLBACK(src, .proc/clear_stuns), stun_cap_amount, TIMER_UNIQUE|TIMER_OVERRIDE)
|
||||
|
||||
/obj/item/organ/cyberimp/brain/anti_stun/proc/clear_stuns()
|
||||
if(owner || !(organ_flags & ORGAN_FAILING))
|
||||
if(owner && !(organ_flags & ORGAN_FAILING))
|
||||
owner.remove_CC()
|
||||
|
||||
/obj/item/organ/cyberimp/brain/anti_stun/emp_act(severity)
|
||||
|
||||
@@ -58,6 +58,105 @@
|
||||
-->
|
||||
<div class="commit sansserif">
|
||||
|
||||
<h2 class="date">16 April 2022</h2>
|
||||
<h3 class="author">Altoids updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="spellcheck">The loading screen now provides a lovely percent-completion as the game boots up.</li>
|
||||
<li class="spellcheck">The strange atmospherics equalization demon has been quieted.</li>
|
||||
<li class="bugfix">It is now possible to select more negative quirks for yourself when you have exactly 6 positive ones enabled.</li>
|
||||
</ul>
|
||||
<h3 class="author">Marmio64 updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="rscadd">Adds upgraded versions of the ruinous knife from the old gods chaplain sect.</li>
|
||||
<li class="tweak">Ruinous knife damage lowered, extra butcher rewards.</li>
|
||||
</ul>
|
||||
<h3 class="author">Mqiib updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="imageadd">Shifts pathfinder cloak down a pixel to look less weird and probably correct</li>
|
||||
</ul>
|
||||
<h3 class="author">SomeguyManperson updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="bugfix">cns rebooter should work now</li>
|
||||
</ul>
|
||||
<h3 class="author">ToasterBiome updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="rscadd">Adds ClothesMate to dorms</li>
|
||||
<li class="rscadd">Adds vents/scrubbers to Brig area</li>
|
||||
<li class="rscadd">Adds vents/scrubbers to Incinerator area</li>
|
||||
<li class="rscadd">Adds vents/scrubbers to R&D area</li>
|
||||
<li class="rscadd">Adds Disposals piping to HOP room</li>
|
||||
<li class="rscadd">Adds power cable to connect CMO room</li>
|
||||
<li class="rscadd">Adds Armsky</li>
|
||||
<li class="rscadd">Adds sink to Kitchen</li>
|
||||
<li class="rscadd">Adds fire extinguishers to Engineering</li>
|
||||
<li class="rscadd">Adds cremator button in Chapel</li>
|
||||
<li class="rscadd">Adds door helpers to sec to keep greytiders out</li>
|
||||
<li class="rscadd">Adds Brig Physician surgery bag</li>
|
||||
<li class="rscadd">Adds breaching shotguns to armory</li>
|
||||
<li class="rscadd">Adds fluff to Security outposts</li>
|
||||
<li class="rscadd">Adds fluff to Cargo</li>
|
||||
<li class="tweak">Moves pool, gives a washing area, and adds generally more fluff to Fitness Room</li>
|
||||
<li class="tweak">Makes Secure Storage bigger to have field generators (for Readystorm)</li>
|
||||
<li class="tweak">Moves some stuff around in Atmospherics and adds machinery/items it was lacking</li>
|
||||
<li class="tweak">Moves a bunch of scrubbers/vents out from under machinery (A LOT)</li>
|
||||
<li class="tweak">Moves Atmospherics vents/scrubbers for easier Atmospherics</li>
|
||||
<li class="tweak">Moves Atmospherics pipes/power a little to follow Disposals pipes</li>
|
||||
<li class="tweak">Changes public Morgue door access</li>
|
||||
<li class="tweak">Makes Atmospherics area in sec a maintenance area</li>
|
||||
<li class="tweak">Makes Virology Atmospherics area maintenance area</li>
|
||||
<li class="tweak">Shuffled Hydroponics around and gave them the stupid chem machine that KiloStation has</li>
|
||||
<li class="bugfix">Connects some missing pipes to vents in hallway</li>
|
||||
<li class="bugfix">Fixes Chemistry/Bridge maint access</li>
|
||||
<li class="bugfix">Fixes Toxins connectors facing the wrong direction</li>
|
||||
<li class="bugfix">Fixes Medbay Cryo freezer facing the wrong direction</li>
|
||||
<li class="bugfix">Fixes Air Alarm in Hydroponics</li>
|
||||
<li class="bugfix">Fixes AI Whale top airlock</li>
|
||||
<li class="bugfix">Fixes Incinerator buttons being switched</li>
|
||||
<li class="bugfix">Fixes science pod not docking at centcom</li>
|
||||
<li class="bugfix">Fix armory hardsuit shutters</li>
|
||||
<li class="bugfix">Fixes toolbelt in Primary Tool Storage to actually be a belt (and adds another)</li>
|
||||
</ul>
|
||||
<h3 class="author">adamsong updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="bugfix">fixes runtimes with winter coat hoods</li>
|
||||
<li class="tweak">mice can no longer empty boxes on tables</li>
|
||||
<li class="bugfix">fixed the ventcrawling gland giving permanent ventcrawl</li>
|
||||
<li class="spellcheck">Fixed the spelling of Anthropomorphic Transmorphosizer</li>
|
||||
<li class="bugfix">fixed runtime in status world topic reading revdata</li>
|
||||
<li class="bugfix">fixed admin ghosts being unable to change sec records rank</li>
|
||||
<li class="tweak">New id change program now changes bank account job (therefore pay and vendor access)</li>
|
||||
<li class="bugfix">fixed money breaking due to being a string</li>
|
||||
<li class="bugfix">fixed disconnect panel runtime</li>
|
||||
<li class="bugfix">fixed fingerprints not working properly when gloves aren't gloves</li>
|
||||
<li class="bugfix">fixed a runtime in the config/status world topic</li>
|
||||
</ul>
|
||||
|
||||
<h2 class="date">15 April 2022</h2>
|
||||
<h3 class="author">Altoids updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="bugfix">People who have died from traumatic brain injury no longer appear happy and healthy on crew monitoring consoles.</li>
|
||||
<li class="bugfix">It is now possible for the pool in dorms to be closed due to singularity.</li>
|
||||
<li class="tweak">Mobs which would be electrocuted were they to enter a pool now receive a small warning about that when they examine the pool turfs.</li>
|
||||
<li class="spellcheck">Having your mood changed by going into a pool no longer reduces your spelling abilities.</li>
|
||||
</ul>
|
||||
<h3 class="author">LoliconSlayer updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="rscadd">The wizard academy has reappeared in deep space, all space faring crew are advised to explore with caution.</li>
|
||||
</ul>
|
||||
<h3 class="author">ToasterBiome updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="rscadd">Nmajask is in the game now</li>
|
||||
<li class="rscadd">makes cloners able to scan for pods not directly among them but only on roundstart</li>
|
||||
</ul>
|
||||
<h3 class="author">adamsong updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="tweak">Removing a brain from an MMI kills the brain (fixable with mannitol), and removes recent memories</li>
|
||||
<li class="tweak">Positronic brains can now have all their memories reset</li>
|
||||
<li class="tweak">MMIs and Positronic Brains must 'reboot' after their body is deconstructed, preventing them from speaking</li>
|
||||
<li class="tweak">Removing the brain from an MMI during the reboot, will make the brain forget the borg death as well</li>
|
||||
<li class="tweak">SSD Positronic brains will poll for a new ghost when activated</li>
|
||||
</ul>
|
||||
|
||||
<h2 class="date">14 April 2022</h2>
|
||||
<h3 class="author">adamsong updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
@@ -1488,32 +1587,6 @@
|
||||
<li class="rscadd">Added proc to spawn an emergency bar</li>
|
||||
<li class="bugfix">fixed a runtime that prevents the bar from spawning</li>
|
||||
</ul>
|
||||
|
||||
<h2 class="date">15 January 2022</h2>
|
||||
<h3 class="author"> Xoxeyos updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="tweak">Portal Storm spell now costs only one spell point.</li>
|
||||
</ul>
|
||||
<h3 class="author">Notamaniac updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="bugfix">Fixes the smoker trait's nicotine addiction being changed to another addiction after being cloned.</li>
|
||||
</ul>
|
||||
<h3 class="author">adamsong updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="bugfix">fixed trash bag of holding bounty requiring normal bags of holding</li>
|
||||
</ul>
|
||||
|
||||
<h2 class="date">14 January 2022</h2>
|
||||
<h3 class="author">ToasterBiome updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="rscadd">add an extra air pump to toxins</li>
|
||||
<li class="tweak">moves paper bin one tile to the right</li>
|
||||
<li class="tweak">moved sci wardrobe vending machine to experimentor room</li>
|
||||
<li class="rscadd">add camera to incinerator and incinerator access</li>
|
||||
<li class="bugfix">fix rogue disposal pipe in theatre</li>
|
||||
<li class="bugfix">fix rogue power cables on the floor of botany backroom (power comes from the other way)</li>
|
||||
<li class="tweak">extend botany backroom so you can access the wardrobe without opening the locker</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<b>GoonStation 13 Development Team</b>
|
||||
|
||||
@@ -30821,3 +30821,97 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py.
|
||||
- bugfix: fixed energy katana being invisible
|
||||
nmajask:
|
||||
- bugfix: you can now see holographic items
|
||||
2022-04-15:
|
||||
Altoids:
|
||||
- bugfix: People who have died from traumatic brain injury no longer appear happy
|
||||
and healthy on crew monitoring consoles.
|
||||
- bugfix: It is now possible for the pool in dorms to be closed due to singularity.
|
||||
- tweak: Mobs which would be electrocuted were they to enter a pool now receive
|
||||
a small warning about that when they examine the pool turfs.
|
||||
- spellcheck: Having your mood changed by going into a pool no longer reduces your
|
||||
spelling abilities.
|
||||
LoliconSlayer:
|
||||
- rscadd: The wizard academy has reappeared in deep space, all space faring crew
|
||||
are advised to explore with caution.
|
||||
ToasterBiome:
|
||||
- rscadd: Nmajask is in the game now
|
||||
- rscadd: makes cloners able to scan for pods not directly among them but only on
|
||||
roundstart
|
||||
adamsong:
|
||||
- tweak: Removing a brain from an MMI kills the brain (fixable with mannitol), and
|
||||
removes recent memories
|
||||
- tweak: Positronic brains can now have all their memories reset
|
||||
- tweak: MMIs and Positronic Brains must 'reboot' after their body is deconstructed,
|
||||
preventing them from speaking
|
||||
- tweak: Removing the brain from an MMI during the reboot, will make the brain forget
|
||||
the borg death as well
|
||||
- tweak: SSD Positronic brains will poll for a new ghost when activated
|
||||
2022-04-16:
|
||||
Altoids:
|
||||
- spellcheck: The loading screen now provides a lovely percent-completion as the
|
||||
game boots up.
|
||||
- spellcheck: The strange atmospherics equalization demon has been quieted.
|
||||
- bugfix: It is now possible to select more negative quirks for yourself when you
|
||||
have exactly 6 positive ones enabled.
|
||||
Marmio64:
|
||||
- rscadd: Adds upgraded versions of the ruinous knife from the old gods chaplain
|
||||
sect.
|
||||
- tweak: Ruinous knife damage lowered, extra butcher rewards.
|
||||
Mqiib:
|
||||
- imageadd: Shifts pathfinder cloak down a pixel to look less weird and probably
|
||||
correct
|
||||
SomeguyManperson:
|
||||
- bugfix: cns rebooter should work now
|
||||
ToasterBiome:
|
||||
- rscadd: Adds ClothesMate to dorms
|
||||
- rscadd: Adds vents/scrubbers to Brig area
|
||||
- rscadd: Adds vents/scrubbers to Incinerator area
|
||||
- rscadd: Adds vents/scrubbers to R&D area
|
||||
- rscadd: Adds Disposals piping to HOP room
|
||||
- rscadd: Adds power cable to connect CMO room
|
||||
- rscadd: Adds Armsky
|
||||
- rscadd: Adds sink to Kitchen
|
||||
- rscadd: Adds fire extinguishers to Engineering
|
||||
- rscadd: Adds cremator button in Chapel
|
||||
- rscadd: Adds door helpers to sec to keep greytiders out
|
||||
- rscadd: Adds Brig Physician surgery bag
|
||||
- rscadd: Adds breaching shotguns to armory
|
||||
- rscadd: Adds fluff to Security outposts
|
||||
- rscadd: Adds fluff to Cargo
|
||||
- tweak: Moves pool, gives a washing area, and adds generally more fluff to Fitness
|
||||
Room
|
||||
- tweak: Makes Secure Storage bigger to have field generators (for Readystorm)
|
||||
- tweak: Moves some stuff around in Atmospherics and adds machinery/items it was
|
||||
lacking
|
||||
- tweak: Moves a bunch of scrubbers/vents out from under machinery (A LOT)
|
||||
- tweak: Moves Atmospherics vents/scrubbers for easier Atmospherics
|
||||
- tweak: Moves Atmospherics pipes/power a little to follow Disposals pipes
|
||||
- tweak: Changes public Morgue door access
|
||||
- tweak: Makes Atmospherics area in sec a maintenance area
|
||||
- tweak: Makes Virology Atmospherics area maintenance area
|
||||
- tweak: Shuffled Hydroponics around and gave them the stupid chem machine that
|
||||
KiloStation has
|
||||
- bugfix: Connects some missing pipes to vents in hallway
|
||||
- bugfix: Fixes Chemistry/Bridge maint access
|
||||
- bugfix: Fixes Toxins connectors facing the wrong direction
|
||||
- bugfix: Fixes Medbay Cryo freezer facing the wrong direction
|
||||
- bugfix: Fixes Air Alarm in Hydroponics
|
||||
- bugfix: Fixes AI Whale top airlock
|
||||
- bugfix: Fixes Incinerator buttons being switched
|
||||
- bugfix: Fixes science pod not docking at centcom
|
||||
- bugfix: Fix armory hardsuit shutters
|
||||
- bugfix: Fixes toolbelt in Primary Tool Storage to actually be a belt (and adds
|
||||
another)
|
||||
adamsong:
|
||||
- bugfix: fixes runtimes with winter coat hoods
|
||||
- tweak: mice can no longer empty boxes on tables
|
||||
- bugfix: fixed the ventcrawling gland giving permanent ventcrawl
|
||||
- spellcheck: Fixed the spelling of Anthropomorphic Transmorphosizer
|
||||
- bugfix: fixed runtime in status world topic reading revdata
|
||||
- bugfix: fixed admin ghosts being unable to change sec records rank
|
||||
- tweak: New id change program now changes bank account job (therefore pay and vendor
|
||||
access)
|
||||
- bugfix: fixed money breaking due to being a string
|
||||
- bugfix: fixed disconnect panel runtime
|
||||
- bugfix: fixed fingerprints not working properly when gloves aren't gloves
|
||||
- bugfix: fixed a runtime in the config/status world topic
|
||||
|
||||
4
html/changelogs/AutoChangelog-pr-13470.yml
Normal file
4
html/changelogs/AutoChangelog-pr-13470.yml
Normal file
@@ -0,0 +1,4 @@
|
||||
author: "Mqiib"
|
||||
delete-after: true
|
||||
changes:
|
||||
- tweak: "Assault cyborgs are no longer stunned by flashes or flashbangs."
|
||||
4
html/changelogs/AutoChangelog-pr-13584.yml
Normal file
4
html/changelogs/AutoChangelog-pr-13584.yml
Normal file
@@ -0,0 +1,4 @@
|
||||
author: "adamsong"
|
||||
delete-after: true
|
||||
changes:
|
||||
- bugfix: "fixed a runtime when checking if a mob is a clockie"
|
||||
@@ -1,4 +0,0 @@
|
||||
author: "ToasterBiome"
|
||||
delete-after: true
|
||||
changes:
|
||||
- rscadd: "Nmajask is in the game now"
|
||||
8
html/changelogs/AutoChangelog-pr-13722.yml
Normal file
8
html/changelogs/AutoChangelog-pr-13722.yml
Normal file
@@ -0,0 +1,8 @@
|
||||
author: "Alagoinha"
|
||||
delete-after: true
|
||||
changes:
|
||||
- imageadd: "hexane canister sprite"
|
||||
- imageadd: "halon canister sprite"
|
||||
- imageadd: "pluonium canister sprite"
|
||||
- imageadd: "zauker canister sprite"
|
||||
- imageadd: "healium canister sprite"
|
||||
4
html/changelogs/AutoChangelog-pr-13738.yml
Normal file
4
html/changelogs/AutoChangelog-pr-13738.yml
Normal file
@@ -0,0 +1,4 @@
|
||||
author: "SomeguyManperson"
|
||||
delete-after: true
|
||||
changes:
|
||||
- bugfix: "the KA damage aoe no longer disrespects pressure damage reduction"
|
||||
4
html/changelogs/AutoChangelog-pr-13749.yml
Normal file
4
html/changelogs/AutoChangelog-pr-13749.yml
Normal file
@@ -0,0 +1,4 @@
|
||||
author: "adamsong"
|
||||
delete-after: true
|
||||
changes:
|
||||
- tweak: "pod people no longer process alcohol faster"
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 374 KiB After Width: | Height: | Size: 374 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 50 KiB After Width: | Height: | Size: 51 KiB |
@@ -45,10 +45,19 @@ export const jobToColor = jobId => {
|
||||
return COLORS.department.other;
|
||||
};
|
||||
|
||||
export const healthToColor = (oxy, tox, burn, brute) => {
|
||||
const healthSum = oxy + tox + burn + brute;
|
||||
const level = Math.min(Math.max(Math.ceil(healthSum / 25), 0), 5);
|
||||
return HEALTH_COLOR_BY_LEVEL[level];
|
||||
export const healthToColor = (oxy, tox, burn, brute, is_alive) => { // Yogs -- show deadness
|
||||
if (is_alive === null || is_alive)
|
||||
{
|
||||
if (oxy === null) // No damage data -- just show that they're alive
|
||||
{
|
||||
return HEALTH_COLOR_BY_LEVEL[0];
|
||||
}
|
||||
const healthSum = oxy + tox + burn + brute;
|
||||
const level = Math.min(Math.max(Math.ceil(healthSum / 25), 0), 5);
|
||||
return HEALTH_COLOR_BY_LEVEL[level];
|
||||
}
|
||||
return HEALTH_COLOR_BY_LEVEL[5]; // Dead is dead, son
|
||||
// Yogs end
|
||||
};
|
||||
|
||||
export const HealthStat = props => {
|
||||
@@ -132,15 +141,12 @@ export const CrewConsoleContent = (props, context) => {
|
||||
</Table.Cell>
|
||||
<Table.Cell collapsing textAlign="center">
|
||||
<ColorBox
|
||||
color={sensor.oxydam !== null
|
||||
? healthToColor(
|
||||
sensor.oxydam,
|
||||
sensor.toxdam,
|
||||
sensor.burndam,
|
||||
sensor.brutedam) : (
|
||||
sensor.life_status
|
||||
? HEALTH_COLOR_BY_LEVEL[0]
|
||||
: HEALTH_COLOR_BY_LEVEL[5])} />
|
||||
color={healthToColor( // yogs -- show death when dead
|
||||
sensor.oxydam,
|
||||
sensor.toxdam,
|
||||
sensor.burndam,
|
||||
sensor.brutedam,
|
||||
sensor.life_status)} />
|
||||
</Table.Cell>
|
||||
<Table.Cell collapsing textAlign="center">
|
||||
{sensor.oxydam !== null ? (
|
||||
|
||||
@@ -6,6 +6,8 @@ SUBSYSTEM_DEF(Yogs)
|
||||
flags = SS_BACKGROUND
|
||||
init_order = -101 //last subsystem to initialize, and first to shut down
|
||||
|
||||
loading_points = 0.1 SECONDS // Yogs -- loading times
|
||||
|
||||
var/list/mentortickets //less of a ticket, and more just a log of everything someone has mhelped, and the responses
|
||||
var/endedshift = FALSE //whether or not we've announced that the shift can be ended
|
||||
var/last_rebwoink = 0 // Last time we bwoinked all admins about unclaimed tickets
|
||||
|
||||
@@ -243,7 +243,6 @@
|
||||
if(chem.current_cycle > 50)
|
||||
H.IsSleeping(3)
|
||||
H.adjustToxLoss(4*REAGENTS_EFFECT_MULTIPLIER)
|
||||
H.reagents.remove_reagent(chem.type, chem.metabolization_rate * REAGENTS_METABOLISM)
|
||||
return 0 // still get all the normal effects.
|
||||
|
||||
/datum/species/pod/handle_environment(datum/gas_mixture/environment, mob/living/carbon/human/H)
|
||||
|
||||
Reference in New Issue
Block a user