mirror of
https://github.com/Sandstorm-Station/Sandstorm-Station-13.git
synced 2026-08-29 00:00:19 +01:00
Merge branch 'master' of https://github.com/Citadel-Station-13/Citadel-Station-13
This commit is contained in:
@@ -2982,14 +2982,14 @@
|
||||
/turf/open/floor/plating,
|
||||
/area/security/main)
|
||||
"afS" = (
|
||||
/obj/machinery/door/airlock/security/glass{
|
||||
name = "Brig EVA Storage";
|
||||
req_access_txt = "3"
|
||||
},
|
||||
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
|
||||
dir = 4
|
||||
},
|
||||
/obj/machinery/door/firedoor,
|
||||
/obj/machinery/door/airlock/security{
|
||||
name = "Brig EVA Storage";
|
||||
req_access_txt = "1"
|
||||
},
|
||||
/turf/open/floor/plasteel/dark,
|
||||
/area/security/brig)
|
||||
"afT" = (
|
||||
@@ -37546,33 +37546,21 @@
|
||||
/area/maintenance/aft)
|
||||
"bKK" = (
|
||||
/obj/effect/decal/cleanable/cobweb/cobweb2,
|
||||
/obj/structure/cable{
|
||||
icon_state = "0-8"
|
||||
},
|
||||
/obj/machinery/power/apc{
|
||||
areastring = "/area/medical/medbay/central";
|
||||
dir = 4;
|
||||
name = "Medbay APC";
|
||||
pixel_x = 24
|
||||
},
|
||||
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
|
||||
/turf/open/floor/plating,
|
||||
/area/maintenance/aft)
|
||||
"bKL" = (
|
||||
/obj/structure/disposalpipe/segment{
|
||||
dir = 10
|
||||
/obj/machinery/power/apc{
|
||||
areastring = "/area/medical/medbay/central";
|
||||
dir = 1;
|
||||
name = "Medbay Central APC";
|
||||
pixel_y = 24
|
||||
},
|
||||
/obj/structure/cable{
|
||||
icon_state = "2-8"
|
||||
icon_state = "0-2"
|
||||
},
|
||||
/obj/structure/cable{
|
||||
icon_state = "4-8"
|
||||
},
|
||||
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
|
||||
dir = 10
|
||||
},
|
||||
/turf/open/floor/plating,
|
||||
/area/maintenance/aft)
|
||||
/turf/open/floor/plasteel/white,
|
||||
/area/medical/medbay/central)
|
||||
"bKM" = (
|
||||
/obj/machinery/atmospherics/components/unary/vent_pump/on{
|
||||
dir = 4
|
||||
@@ -46397,7 +46385,6 @@
|
||||
/obj/effect/turf_decal/bot{
|
||||
dir = 1
|
||||
},
|
||||
/obj/structure/reagent_dispensers/fueltank,
|
||||
/obj/structure/extinguisher_cabinet{
|
||||
pixel_x = -5;
|
||||
pixel_y = 30
|
||||
@@ -46405,6 +46392,7 @@
|
||||
/obj/structure/cable{
|
||||
icon_state = "4-8"
|
||||
},
|
||||
/obj/structure/reagent_dispensers/fueltank/high,
|
||||
/turf/open/floor/plasteel,
|
||||
/area/engine/engineering)
|
||||
"cig" = (
|
||||
@@ -46564,7 +46552,6 @@
|
||||
icon_state = "1-2"
|
||||
},
|
||||
/obj/structure/disposalpipe/segment,
|
||||
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
|
||||
/turf/open/floor/plasteel,
|
||||
/area/maintenance/disposal/incinerator)
|
||||
"ciF" = (
|
||||
@@ -53276,27 +53263,6 @@
|
||||
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
|
||||
/turf/open/floor/plating,
|
||||
/area/maintenance/department/medical/morgue)
|
||||
"cTL" = (
|
||||
/obj/structure/cable{
|
||||
icon_state = "1-2"
|
||||
},
|
||||
/obj/structure/cable{
|
||||
icon_state = "2-4"
|
||||
},
|
||||
/turf/open/floor/plasteel/dark,
|
||||
/area/medical/morgue)
|
||||
"cTM" = (
|
||||
/obj/machinery/power/apc{
|
||||
areastring = "/area/maintenance/department/medical/morgue";
|
||||
dir = 4;
|
||||
name = "Morgue Maintenance APC";
|
||||
pixel_x = 26
|
||||
},
|
||||
/obj/structure/cable{
|
||||
icon_state = "0-8"
|
||||
},
|
||||
/turf/open/floor/plasteel/dark,
|
||||
/area/medical/morgue)
|
||||
"cTO" = (
|
||||
/obj/structure/disposalpipe/segment{
|
||||
dir = 4
|
||||
@@ -55927,7 +55893,6 @@
|
||||
"juy" = (
|
||||
/obj/structure/mopbucket,
|
||||
/obj/item/mop,
|
||||
/obj/item/reagent_containers/spray/cleaner,
|
||||
/turf/open/floor/plating,
|
||||
/area/maintenance/port/fore)
|
||||
"juG" = (
|
||||
@@ -98231,9 +98196,9 @@ cCQ
|
||||
cCS
|
||||
chg
|
||||
cCS
|
||||
bLK
|
||||
bLK
|
||||
bLK
|
||||
bMK
|
||||
bMK
|
||||
bMK
|
||||
gXs
|
||||
aaa
|
||||
aaa
|
||||
@@ -98745,9 +98710,9 @@ aaf
|
||||
bMK
|
||||
chg
|
||||
bMK
|
||||
bLK
|
||||
bLK
|
||||
bLK
|
||||
bMK
|
||||
bMK
|
||||
bMK
|
||||
aaf
|
||||
aoV
|
||||
aoV
|
||||
@@ -99477,8 +99442,8 @@ bfK
|
||||
bfK
|
||||
bfK
|
||||
bof
|
||||
bhh
|
||||
bsx
|
||||
bKL
|
||||
brf
|
||||
btV
|
||||
bvh
|
||||
bwH
|
||||
@@ -99749,7 +99714,7 @@ bDR
|
||||
bDR
|
||||
bIn
|
||||
bJC
|
||||
bKL
|
||||
bUZ
|
||||
bLT
|
||||
bLT
|
||||
bLT
|
||||
@@ -102043,7 +102008,7 @@ bfL
|
||||
bhp
|
||||
biB
|
||||
biB
|
||||
cTL
|
||||
biB
|
||||
bkU
|
||||
bmX
|
||||
bpE
|
||||
@@ -102300,7 +102265,7 @@ bfL
|
||||
bhq
|
||||
bhm
|
||||
bkb
|
||||
cTM
|
||||
bhm
|
||||
bla
|
||||
bmZ
|
||||
bpH
|
||||
|
||||
@@ -21880,7 +21880,7 @@
|
||||
/obj/effect/turf_decal/stripes/line{
|
||||
dir = 4
|
||||
},
|
||||
/obj/structure/reagent_dispensers/fueltank,
|
||||
/obj/structure/reagent_dispensers/fueltank/high,
|
||||
/turf/open/floor/plasteel,
|
||||
/area/engine/secure_construction)
|
||||
"aVY" = (
|
||||
@@ -70916,8 +70916,9 @@
|
||||
/area/science/mixing)
|
||||
"guK" = (
|
||||
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
|
||||
/obj/structure/lattice,
|
||||
/turf/open/space/basic,
|
||||
/area/space)
|
||||
/area/space/nearstation)
|
||||
"gDY" = (
|
||||
/obj/machinery/light,
|
||||
/obj/machinery/atmospherics/pipe/simple/cyan/visible,
|
||||
|
||||
@@ -49404,7 +49404,7 @@
|
||||
},
|
||||
/obj/machinery/door/airlock/security/glass{
|
||||
name = "Security E.V.A. Storage";
|
||||
req_access_txt = "3"
|
||||
req_access_txt = "1"
|
||||
},
|
||||
/obj/effect/turf_decal/stripes/line{
|
||||
dir = 8
|
||||
@@ -81587,12 +81587,12 @@
|
||||
/turf/open/floor/plasteel,
|
||||
/area/engine/storage)
|
||||
"cHt" = (
|
||||
/obj/structure/reagent_dispensers/fueltank,
|
||||
/obj/effect/decal/cleanable/dirt,
|
||||
/obj/machinery/status_display/ai{
|
||||
pixel_y = -32
|
||||
},
|
||||
/obj/effect/turf_decal/bot,
|
||||
/obj/structure/reagent_dispensers/fueltank/high,
|
||||
/turf/open/floor/plasteel,
|
||||
/area/engine/storage)
|
||||
"cHu" = (
|
||||
|
||||
@@ -14492,7 +14492,6 @@
|
||||
/turf/open/floor/plating,
|
||||
/area/maintenance/starboard)
|
||||
"aym" = (
|
||||
/obj/structure/reagent_dispensers/fueltank,
|
||||
/obj/effect/turf_decal/delivery,
|
||||
/obj/effect/turf_decal/tile/neutral{
|
||||
dir = 1
|
||||
@@ -14503,6 +14502,7 @@
|
||||
/obj/effect/turf_decal/tile/neutral{
|
||||
dir = 8
|
||||
},
|
||||
/obj/structure/reagent_dispensers/fueltank/high,
|
||||
/turf/open/floor/plasteel/dark,
|
||||
/area/engine/engineering)
|
||||
"ayn" = (
|
||||
@@ -85505,8 +85505,8 @@
|
||||
/obj/effect/decal/cleanable/dirt,
|
||||
/obj/effect/decal/cleanable/cobweb/cobweb2,
|
||||
/obj/machinery/atmospherics/components/binary/pump/on{
|
||||
name = "Space Loop Out";
|
||||
dir = 8
|
||||
dir = 8;
|
||||
name = "Space Loop Out"
|
||||
},
|
||||
/turf/open/floor/plating{
|
||||
icon_state = "panelscorched"
|
||||
|
||||
@@ -53981,8 +53981,8 @@
|
||||
pixel_y = -26
|
||||
},
|
||||
/obj/structure/cable,
|
||||
/obj/structure/reagent_dispensers/fueltank,
|
||||
/obj/effect/turf_decal/bot,
|
||||
/obj/structure/reagent_dispensers/fueltank/high,
|
||||
/turf/open/floor/plasteel,
|
||||
/area/engine/storage_shared)
|
||||
"cvh" = (
|
||||
@@ -67078,12 +67078,12 @@
|
||||
/area/engine/atmos)
|
||||
"kgv" = (
|
||||
/obj/structure/railing{
|
||||
icon_state = "railing";
|
||||
dir = 4
|
||||
dir = 4;
|
||||
icon_state = "railing"
|
||||
},
|
||||
/obj/structure/railing{
|
||||
icon_state = "railing";
|
||||
dir = 8
|
||||
dir = 8;
|
||||
icon_state = "railing"
|
||||
},
|
||||
/turf/open/floor/plasteel/stairs/old,
|
||||
/area/maintenance/department/medical)
|
||||
@@ -71237,12 +71237,12 @@
|
||||
"tcW" = (
|
||||
/obj/structure/stairs/west,
|
||||
/obj/structure/railing{
|
||||
icon_state = "railing";
|
||||
dir = 4
|
||||
dir = 4;
|
||||
icon_state = "railing"
|
||||
},
|
||||
/obj/structure/railing{
|
||||
icon_state = "railing";
|
||||
dir = 8
|
||||
dir = 8;
|
||||
icon_state = "railing"
|
||||
},
|
||||
/turf/open/floor/plating,
|
||||
/area/maintenance/department/medical)
|
||||
|
||||
@@ -4548,7 +4548,7 @@
|
||||
/obj/machinery/door/firedoor,
|
||||
/obj/machinery/door/airlock/security/glass{
|
||||
name = "Security E.V.A. Storage";
|
||||
req_access_txt = "3"
|
||||
req_access_txt = "1"
|
||||
},
|
||||
/obj/structure/cable/yellow{
|
||||
icon_state = "4-8"
|
||||
@@ -15223,7 +15223,6 @@
|
||||
/turf/open/floor/plating,
|
||||
/area/maintenance/starboard/fore)
|
||||
"aCN" = (
|
||||
/obj/structure/reagent_dispensers/fueltank,
|
||||
/obj/item/radio/intercom{
|
||||
name = "Station Intercom (General)";
|
||||
pixel_x = -30
|
||||
@@ -15231,6 +15230,7 @@
|
||||
/obj/effect/turf_decal/bot{
|
||||
dir = 1
|
||||
},
|
||||
/obj/structure/reagent_dispensers/fueltank/high,
|
||||
/turf/open/floor/plasteel{
|
||||
dir = 1
|
||||
},
|
||||
@@ -48921,7 +48921,7 @@
|
||||
/turf/open/floor/plating,
|
||||
/area/maintenance/starboard)
|
||||
"bTi" = (
|
||||
/obj/machinery/vending/wardrobe/atmos_wardrobe,
|
||||
/obj/machinery/portable_atmospherics/canister,
|
||||
/turf/open/floor/plasteel/dark,
|
||||
/area/engine/atmos)
|
||||
"bTk" = (
|
||||
@@ -82905,8 +82905,8 @@
|
||||
/area/medical/morgue)
|
||||
"tID" = (
|
||||
/obj/machinery/atmospherics/components/binary/pump/on{
|
||||
name = "Space Loop Out";
|
||||
dir = 4
|
||||
dir = 4;
|
||||
name = "Space Loop Out"
|
||||
},
|
||||
/turf/open/floor/plasteel/white,
|
||||
/area/science/circuit)
|
||||
@@ -83329,8 +83329,8 @@
|
||||
/area/maintenance/port/aft)
|
||||
"xHA" = (
|
||||
/obj/machinery/atmospherics/components/binary/pump/on{
|
||||
name = "Space Loop In";
|
||||
dir = 8
|
||||
dir = 8;
|
||||
name = "Space Loop In"
|
||||
},
|
||||
/turf/open/floor/plasteel/white,
|
||||
/area/science/circuit)
|
||||
|
||||
@@ -24502,10 +24502,6 @@
|
||||
/obj/effect/turf_decal/loading_area{
|
||||
dir = 1
|
||||
},
|
||||
/obj/effect/turf_decal/stripes/corner,
|
||||
/obj/effect/turf_decal/stripes/corner{
|
||||
dir = 1
|
||||
},
|
||||
/obj/effect/turf_decal/tile/yellow{
|
||||
dir = 1
|
||||
},
|
||||
@@ -25146,13 +25142,13 @@
|
||||
/turf/open/floor/plasteel,
|
||||
/area/engine/engineering)
|
||||
"aNg" = (
|
||||
/obj/structure/reagent_dispensers/fueltank,
|
||||
/obj/structure/sign/warning/nosmoking{
|
||||
pixel_y = -32
|
||||
},
|
||||
/obj/effect/turf_decal/stripes/line{
|
||||
dir = 5
|
||||
},
|
||||
/obj/structure/reagent_dispensers/fueltank/high,
|
||||
/turf/open/floor/plasteel,
|
||||
/area/engine/engineering)
|
||||
"aNh" = (
|
||||
|
||||
@@ -46837,7 +46837,7 @@
|
||||
/obj/effect/turf_decal/tile/yellow{
|
||||
dir = 8
|
||||
},
|
||||
/obj/structure/reagent_dispensers/fueltank,
|
||||
/obj/structure/reagent_dispensers/fueltank/high,
|
||||
/turf/open/floor/plasteel,
|
||||
/area/engine/engineering)
|
||||
"cdL" = (
|
||||
@@ -54460,8 +54460,8 @@
|
||||
/area/maintenance/department/security/brig)
|
||||
"gjv" = (
|
||||
/obj/machinery/atmospherics/components/binary/pump/on{
|
||||
name = "Space Loop In";
|
||||
dir = 1
|
||||
dir = 1;
|
||||
name = "Space Loop In"
|
||||
},
|
||||
/turf/open/floor/plating,
|
||||
/area/maintenance/department/science)
|
||||
|
||||
@@ -14393,7 +14393,6 @@
|
||||
/obj/machinery/light{
|
||||
dir = 1
|
||||
},
|
||||
/obj/structure/reagent_dispensers/fueltank,
|
||||
/obj/machinery/camera{
|
||||
c_tag = "Engineering Access"
|
||||
},
|
||||
@@ -14401,6 +14400,7 @@
|
||||
name = "Station Intercom (General)";
|
||||
pixel_y = 20
|
||||
},
|
||||
/obj/structure/reagent_dispensers/fueltank/high,
|
||||
/turf/open/floor/plasteel/dark/corner{
|
||||
dir = 1
|
||||
},
|
||||
|
||||
@@ -13,6 +13,7 @@
|
||||
var/err_file = ""
|
||||
var/static/list/interpreters = list("[MS_WINDOWS]" = "cmd /c", "[UNIX]" = "sh -c")
|
||||
var/interpreter = interpreters["[world.system_type]"]
|
||||
log_subsystem("SHELL", "Executing command [command]")
|
||||
if(interpreter)
|
||||
for(var/seo_id in shelleo_ids)
|
||||
if(!shelleo_ids[seo_id])
|
||||
@@ -36,6 +37,7 @@
|
||||
else
|
||||
CRASH("Operating System: [world.system_type] not supported") // If you encounter this error, you are encouraged to update this proc with support for the new operating system
|
||||
. = list(errorcode, stdout, stderr)
|
||||
log_subsystem("SHELL", "Finished execution: [errorcode], [stdout], [stderr]")
|
||||
#undef SHELLEO_NAME
|
||||
#undef SHELLEO_ERR
|
||||
#undef SHELLEO_OUT
|
||||
|
||||
@@ -98,6 +98,7 @@ SUBSYSTEM_DEF(input)
|
||||
var/client/C = clients[i]
|
||||
C.keyLoop()
|
||||
|
||||
#define NONSENSICAL_VERB "NONSENSICAL_VERB_THAT_DOES_NOTHING"
|
||||
/// *sigh
|
||||
/client/verb/NONSENSICAL_VERB_THAT_DOES_NOTHING()
|
||||
set name = "NONSENSICAL_VERB_THAT_DOES_NOTHING"
|
||||
|
||||
@@ -16,6 +16,32 @@
|
||||
to_chat(M, "<span class='warning'>[parent] only accepts machine parts!</span>")
|
||||
return FALSE
|
||||
|
||||
/datum/component/storage/concrete/rped/quick_empty(mob/M)
|
||||
var/atom/A = parent
|
||||
if(!M.canUseStorage() || !A.Adjacent(M) || M.incapacitated())
|
||||
return
|
||||
if(check_locked(null, M, TRUE))
|
||||
return FALSE
|
||||
A.add_fingerprint(M)
|
||||
var/list/things = contents()
|
||||
var/lowest_rating = INFINITY
|
||||
for(var/obj/item/B in things)
|
||||
if(B.get_part_rating() < lowest_rating)
|
||||
lowest_rating = B.get_part_rating()
|
||||
for(var/obj/item/B in things)
|
||||
if(B.get_part_rating() > lowest_rating)
|
||||
things.Remove(B)
|
||||
if(lowest_rating == INFINITY)
|
||||
to_chat(M, "<span class='notice'>There's no parts to dump out from [parent].</span>")
|
||||
return
|
||||
to_chat(M, "<span class='notice'>You start dumping out tier/cell rating [lowest_rating] parts from [parent].</span>")
|
||||
var/turf/T = get_turf(A)
|
||||
var/datum/progressbar/progress = new(M, length(things), T)
|
||||
while (do_after(M, 10, TRUE, T, FALSE, CALLBACK(src, .proc/mass_remove_from_storage, T, things, progress)))
|
||||
stoplag(1)
|
||||
qdel(progress)
|
||||
A.do_squish(0.8, 1.2)
|
||||
|
||||
/datum/component/storage/concrete/bluespace/rped
|
||||
collection_mode = COLLECT_EVERYTHING
|
||||
allow_quick_gather = TRUE
|
||||
@@ -33,5 +59,29 @@
|
||||
to_chat(M, "<span class='warning'>[parent] only accepts machine parts!</span>")
|
||||
return FALSE
|
||||
|
||||
/datum/component/storage/concrete/cyborg/rped
|
||||
max_items = 150
|
||||
|
||||
/datum/component/storage/concrete/bluespace/rped/quick_empty(mob/M)
|
||||
var/atom/A = parent
|
||||
if(!M.canUseStorage() || !A.Adjacent(M) || M.incapacitated())
|
||||
return
|
||||
if(check_locked(null, M, TRUE))
|
||||
return FALSE
|
||||
A.add_fingerprint(M)
|
||||
var/list/things = contents()
|
||||
var/lowest_rating = INFINITY
|
||||
for(var/obj/item/B in things)
|
||||
if(B.get_part_rating() < lowest_rating)
|
||||
lowest_rating = B.get_part_rating()
|
||||
for(var/obj/item/B in things)
|
||||
if(B.get_part_rating() > lowest_rating)
|
||||
things.Remove(B)
|
||||
if(lowest_rating == INFINITY)
|
||||
to_chat(M, "<span class='notice'>There's no parts to dump out from [parent].</span>")
|
||||
return
|
||||
to_chat(M, "<span class='notice'>You start dumping out tier/cell rating [lowest_rating] parts from [parent].</span>")
|
||||
var/turf/T = get_turf(A)
|
||||
var/datum/progressbar/progress = new(M, length(things), T)
|
||||
while (do_after(M, 10, TRUE, T, FALSE, CALLBACK(src, .proc/mass_remove_from_storage, T, things, progress)))
|
||||
stoplag(1)
|
||||
qdel(progress)
|
||||
A.do_squish(0.8, 1.2)
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
return
|
||||
. = ..()
|
||||
|
||||
if(AM.movement_type & FLYING)
|
||||
if(AM.movement_type & FLYING || iseffect(AM))
|
||||
return
|
||||
|
||||
triggermine(AM)
|
||||
|
||||
@@ -18,8 +18,8 @@
|
||||
else
|
||||
if(zero_amount())
|
||||
return
|
||||
chosen_circuit = input("What type of circuit would you like to remove?", "Choose a Circuit Type", chosen_circuit) in list("airlock","firelock","fire alarm","air alarm","APC")
|
||||
if(zero_amount())
|
||||
chosen_circuit = input("What type of circuit would you like to remove?", "Choose a Circuit Type", chosen_circuit) as null|anything in list("airlock","firelock","fire alarm","air alarm","APC")
|
||||
if(zero_amount() || !chosen_circuit || !in_range(src,user))
|
||||
return
|
||||
switch(chosen_circuit)
|
||||
if("airlock")
|
||||
|
||||
@@ -32,7 +32,10 @@
|
||||
|
||||
/obj/item/integrated_circuit/proc/get_pin_data(pin_type, pin_number)
|
||||
var/datum/integrated_io/pin = get_pin_ref(pin_type, pin_number)
|
||||
return pin.get_data()
|
||||
var/data = pin.get_data()
|
||||
if(istext(data))
|
||||
data = sanitize_text(data)
|
||||
return data
|
||||
|
||||
/obj/item/integrated_circuit/proc/get_pin_data_as_type(pin_type, pin_number, as_type)
|
||||
var/datum/integrated_io/pin = get_pin_ref(pin_type, pin_number)
|
||||
|
||||
@@ -91,7 +91,7 @@
|
||||
/obj/item/integrated_circuit/proc/load(list/component_params)
|
||||
// Load name
|
||||
if(component_params["name"])
|
||||
displayed_name = component_params["name"]
|
||||
displayed_name = html_encode(component_params["name"])
|
||||
|
||||
// Load input values
|
||||
if(component_params["inputs"])
|
||||
@@ -104,7 +104,7 @@
|
||||
|
||||
var/datum/integrated_io/pin = inputs[index]
|
||||
// The pins themselves validate the data.
|
||||
pin.write_data_to_pin(input_value)
|
||||
pin.write_data_to_pin(istext(input_value)? html_encode(input_value) : input_value)
|
||||
// TODO: support for special input types, such as internal refs and maybe typepaths
|
||||
|
||||
if(!isnull(component_params["special"]))
|
||||
@@ -152,19 +152,17 @@
|
||||
/obj/item/electronic_assembly/proc/load(list/assembly_params)
|
||||
// Load modified name, if any.
|
||||
if(assembly_params["name"])
|
||||
name = assembly_params["name"]
|
||||
name = html_encode(assembly_params["name"])
|
||||
|
||||
// Load modified description, if any.
|
||||
if(assembly_params["desc"])
|
||||
desc = assembly_params["desc"]
|
||||
desc = html_encode(assembly_params["desc"])
|
||||
|
||||
if(assembly_params["detail_color"])
|
||||
detail_color = assembly_params["detail_color"]
|
||||
|
||||
update_icon()
|
||||
|
||||
|
||||
|
||||
// Attempts to save an assembly into a save file format.
|
||||
// Returns null if assembly is not complete enough to be saved.
|
||||
/datum/controller/subsystem/processing/circuit/proc/save_electronic_assembly(obj/item/electronic_assembly/assembly)
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
|
||||
/datum/keybinding/client/communication/say
|
||||
hotkey_keys = list("CtrlT")
|
||||
classic_keys = list("Unbound")
|
||||
name = "Say"
|
||||
full_name = "IC Say"
|
||||
clientside = "say"
|
||||
@@ -15,6 +16,7 @@
|
||||
|
||||
/datum/keybinding/client/communication/me
|
||||
hotkey_keys = list("CtrlM")
|
||||
classic_keys = list("Unbound")
|
||||
name = "Me"
|
||||
full_name = "Me (emote)"
|
||||
clientside = "me"
|
||||
@@ -22,7 +24,6 @@
|
||||
//indicators
|
||||
/datum/keybinding/client/communication/say_with_indicator
|
||||
hotkey_keys = list("T")
|
||||
classic_keys = list()
|
||||
name = "say_with_indicator"
|
||||
full_name = "Say with Typing Indicator"
|
||||
|
||||
@@ -33,7 +34,6 @@
|
||||
|
||||
/datum/keybinding/client/communication/me_with_indicator
|
||||
hotkey_keys = list("M")
|
||||
classic_keys = list()
|
||||
name = "me_with_indicator"
|
||||
full_name = "Me (emote) with Typing Indicator"
|
||||
|
||||
@@ -44,28 +44,24 @@
|
||||
|
||||
/datum/keybinding/client/communication/subtle
|
||||
hotkey_keys = list("5")
|
||||
classic_keys = list()
|
||||
name = "Subtle"
|
||||
full_name = "Subtle Emote"
|
||||
clientside = "subtle"
|
||||
|
||||
/datum/keybinding/client/communication/subtler
|
||||
hotkey_keys = list("6")
|
||||
classic_keys = list()
|
||||
name = "Subtler"
|
||||
full_name = "Subtler Anti-Ghost Emote"
|
||||
clientside = "subtler-anti-ghost"
|
||||
|
||||
/datum/keybinding/client/communication/whisper
|
||||
hotkey_keys = list("Y")
|
||||
classic_keys = list()
|
||||
name = "Whisper"
|
||||
full_name = "Whisper"
|
||||
clientside = "whisper"
|
||||
|
||||
/datum/keybinding/client/communication/looc
|
||||
hotkey_keys = list("L")
|
||||
classic_keys = list()
|
||||
name = "LOOC"
|
||||
full_name = "Local Out of Character chat"
|
||||
clientside = "looc"
|
||||
|
||||
@@ -22,12 +22,15 @@
|
||||
full_macro_assert()
|
||||
|
||||
// removes all the existing macros
|
||||
/client/proc/erase_all_macros()
|
||||
/client/proc/erase_all_macros(datum/preferences/prefs_override = prefs)
|
||||
var/erase_output = ""
|
||||
var/list/set_text = list()
|
||||
for(var/macroset in SSinput.all_macrosets)
|
||||
set_text += "[macroset].*"
|
||||
set_text = set_text.Join(";")
|
||||
if(!prefs_override)
|
||||
for(var/macroset in SSinput.all_macrosets)
|
||||
set_text += "[macroset].*"
|
||||
set_text = set_text.Join(";")
|
||||
else
|
||||
set_text = prefs_override.hotkeys? "[SKIN_MACROSET_HOTKEYS].*" : "[SKIN_MACROSET_CLASSIC_INPUT].*;[SKIN_MACROSET_CLASSIC_HOTKEYS].*"
|
||||
var/list/macro_set = params2list(winget(src, "[set_text]", "command"))
|
||||
for(var/k in 1 to length(macro_set))
|
||||
var/list/split_name = splittext(macro_set[k], ".")
|
||||
@@ -44,13 +47,6 @@
|
||||
var/command = macroset[key]
|
||||
winset(src, "[name]-[REF(key)]", "parent=[name];name=[key];command=[command]")
|
||||
|
||||
/client/proc/set_macros(datum/preferences/prefs_override = prefs)
|
||||
keys_held.Cut()
|
||||
|
||||
apply_macro_set(SKIN_MACROSET_HOTKEYS, SSinput.macroset_hotkey)
|
||||
apply_macro_set(SKIN_MACROSET_CLASSIC_HOTKEYS, SSinput.macroset_classic_hotkey)
|
||||
apply_macro_set(SKIN_MACROSET_CLASSIC_INPUT, SSinput.macroset_classic_input)
|
||||
|
||||
/client/proc/set_hotkeys_preference(datum/preferences/prefs_override = prefs)
|
||||
if(prefs_override.hotkeys)
|
||||
winset(src, null, "map.focus=true input.background-color=[COLOR_INPUT_DISABLED] mainwindow.macro=[SKIN_MACROSET_HOTKEYS]")
|
||||
@@ -64,27 +60,97 @@
|
||||
/client/proc/full_macro_assert(datum/preferences/prefs_override = prefs)
|
||||
INVOKE_ASYNC(src, .proc/do_full_macro_assert, prefs_override) // winget sleeps.
|
||||
|
||||
// TODO: OVERHAUL ALL OF THIS AGAIN. While this works this is flatout horrid with the "use list but also don't use lists" crap. I hate my life.
|
||||
/client/proc/do_full_macro_assert(datum/preferences/prefs_override = prefs)
|
||||
erase_all_macros()
|
||||
set_macros(prefs_override)
|
||||
update_special_keybinds(prefs_override)
|
||||
// First, wipe
|
||||
erase_all_macros(prefs_override)
|
||||
keys_held.Cut()
|
||||
// First, collect sets. Make sure to COPY, as we are modifying these!
|
||||
var/list/macrosets = prefs_override.hotkeys? list(
|
||||
SKIN_MACROSET_HOTKEYS = SSinput.macroset_hotkey.Copy()
|
||||
) : list(
|
||||
SKIN_MACROSET_CLASSIC_INPUT = SSinput.macroset_classic_input.Copy(),
|
||||
SKIN_MACROSET_CLASSIC_HOTKEYS = SSinput.macroset_classic_hotkey.Copy()
|
||||
)
|
||||
// Collect special clientside keybinds
|
||||
var/list/clientside = update_special_keybinds(prefs_override)
|
||||
// ANTI COLLISION SYSTEM:
|
||||
// If hotkey, do "standard" anti collision permutation
|
||||
// We fully permutate alt/ctrl/shift with the key and then subtract the key's actual binding.
|
||||
// Then, we set all the permutations BUT the actual binding to nonsensical things to force BYOND to not
|
||||
// be "greedy" with key matching, aka matching Shift+T for T when Shift+T isn't EXPLICITLY defined.
|
||||
// This is extremely ugly, but the alternative is arguably worse (manually binding every key instead of using ANY)
|
||||
if(prefs_override.hotkeys)
|
||||
for(var/keybind in clientside)
|
||||
var/command = clientside[keybind]
|
||||
var/alt = findtext(keybind, "Alt")
|
||||
if(alt)
|
||||
keybind = copytext(keybind, 1, alt) + copytext(keybind, alt + 3, 0)
|
||||
var/ctrl = findtext(keybind, "Ctrl")
|
||||
if(ctrl)
|
||||
keybind = copytext(keybind, 1, ctrl) + copytext(keybind, ctrl + 4, 0)
|
||||
var/shift = findtext(keybind, "Shift")
|
||||
if(shift)
|
||||
keybind = copytext(keybind, 1, shift) + copytext(keybind, shift + 5, 0)
|
||||
var/actual = "[alt? "Alt+" : ""][ctrl? "Ctrl+" : ""][shift? "Shift+" : ""][keybind]"
|
||||
var/list/overriding = keybind_modifier_permutation(keybind, alt, ctrl, shift, TRUE)
|
||||
overriding -= actual
|
||||
for(var/macroset in macrosets)
|
||||
var/list/the_set = macrosets[macroset]
|
||||
the_set[actual] = command
|
||||
for(var/i in overriding)
|
||||
the_set[i] = NONSENSICAL_VERB
|
||||
else
|
||||
// For classic mode, we just directly set things because BYOND is so jank why do we even bother?
|
||||
// What we want is to force Ctrl on for all keybinds without Ctrl or Alt set, to preserve old behavior
|
||||
for(var/keybind in clientside)
|
||||
var/command = clientside[keybind]
|
||||
var/alt = findtext(keybind, "Alt")
|
||||
if(alt)
|
||||
keybind = copytext(keybind, 1, alt) + copytext(keybind, alt + 3, 0)
|
||||
var/ctrl = findtext(keybind, "Ctrl")
|
||||
if(ctrl)
|
||||
keybind = copytext(keybind, 1, ctrl) + copytext(keybind, ctrl + 4, 0)
|
||||
var/shift = findtext(keybind, "Shift")
|
||||
if(shift)
|
||||
keybind = copytext(keybind, 1, shift) + copytext(keybind, shift + 5, 0)
|
||||
var/actual
|
||||
if(!alt && !ctrl)
|
||||
actual = "Ctrl+[keybind]"
|
||||
else
|
||||
actual = "[alt? "Alt+" : ""][ctrl? "Ctrl+" : ""][shift? "Shift+" : ""][keybind]"
|
||||
macrosets[SKIN_MACROSET_CLASSIC_HOTKEYS]["[alt? "Alt+" : ""][ctrl? "Ctrl+" : ""][shift? "Shift+" : ""][keybind]"] = command
|
||||
macrosets[SKIN_MACROSET_CLASSIC_INPUT][actual] = command
|
||||
for(var/macroset in macrosets)
|
||||
var/list/the_set = macrosets[macroset]
|
||||
the_set[actual] = command
|
||||
|
||||
// Lastly, set the actual macros.
|
||||
for(var/macroset in macrosets)
|
||||
apply_macro_set(macroset, macrosets[macroset])
|
||||
// Finally, set hotkeys.
|
||||
set_hotkeys_preference(prefs_override)
|
||||
|
||||
/client/proc/do_special_keybind(key, command, datum/preferences/prefs_override = prefs)
|
||||
var/alt = findtext(key, "Alt")
|
||||
if(alt)
|
||||
key = copytext(key, 1, alt) + copytext(key, alt + 3, 0)
|
||||
var/ctrl = findtext(key, "Ctrl")
|
||||
if(ctrl)
|
||||
key = copytext(key, 1, ctrl) + copytext(key, ctrl + 4, 0)
|
||||
var/shift = findtext(key, "Shift")
|
||||
if(shift)
|
||||
key = copytext(key, 1, shift) + copytext(key, shift + 5, 0)
|
||||
if(!alt && !ctrl && !shift && !prefs_override.hotkeys)
|
||||
return /// DO NOT.
|
||||
key = "[alt? "Alt+":""][ctrl? "Ctrl+":""][shift? "Shift+":""][key]"
|
||||
for(var/macroset in SSinput.all_macrosets)
|
||||
winset(src, "[macroset]-[REF(key)]", "parent=[macroset];name=[key];command=[command]")
|
||||
/proc/keybind_modifier_permutation(key, alt = FALSE, ctrl = FALSE, shift = FALSE, self = TRUE)
|
||||
var/list/permutations = list()
|
||||
if(!shift)
|
||||
permutations += "Shift"
|
||||
if(!ctrl)
|
||||
permutations += "Ctrl"
|
||||
if(!alt)
|
||||
permutations += "Alt"
|
||||
// ALT + CTRL + SHIFT
|
||||
. = list()
|
||||
do_keybind_modifier_permutations(key, permutations, .)
|
||||
if(self)
|
||||
. += key
|
||||
|
||||
/proc/do_keybind_modifier_permutations(key, list/permutations = list(), list/out = list())
|
||||
. = out
|
||||
for(var/mod in permutations.Copy())
|
||||
permutations -= mod
|
||||
. += "[mod]+[key]"
|
||||
do_keybind_modifier_permutations("[mod]+[key]", permutations.Copy(), .)
|
||||
|
||||
/**
|
||||
* Updates the keybinds for special keys
|
||||
@@ -94,12 +160,15 @@
|
||||
* At the time of writing this, communication(OOC, Say, IC) require macros
|
||||
* Arguments:
|
||||
* * direct_prefs - the preference we're going to get keybinds from
|
||||
*
|
||||
* Returns list of special keybind in key = Mod1Mod2Mod3Key format, NOT Mod1+Mod2+Mod3+Key format.
|
||||
*/
|
||||
/client/proc/update_special_keybinds(datum/preferences/direct_prefs)
|
||||
var/datum/preferences/D = direct_prefs || prefs
|
||||
if(!D?.key_bindings)
|
||||
return
|
||||
movement_keys = list()
|
||||
. = list()
|
||||
for(var/key in D.key_bindings)
|
||||
for(var/kb_name in D.key_bindings[key])
|
||||
switch(kb_name)
|
||||
@@ -115,4 +184,4 @@
|
||||
var/datum/keybinding/KB = GLOB.keybindings_by_name[kb_name]
|
||||
if(!KB.clientside)
|
||||
continue
|
||||
do_special_keybind(key, KB.clientside, D)
|
||||
.[key] = KB.clientside
|
||||
|
||||
@@ -20,16 +20,20 @@
|
||||
ckeys_allowed = list("poojawa")
|
||||
extra = TRUE
|
||||
extra_color_src = MUTCOLORS3
|
||||
matrixed_sections = MATRIX_RED_GREEN
|
||||
|
||||
/datum/sprite_accessory/tails/mam_tails/sabresune
|
||||
name = "Sabresune"
|
||||
icon_state = "sabresune"
|
||||
ckeys_allowed = list("poojawa")
|
||||
matrixed_sections = MATRIX_RED_GREEN
|
||||
|
||||
/datum/sprite_accessory/tails_animated/mam_tails_animated/sabresune
|
||||
name = "Sabresune"
|
||||
icon_state = "sabresune"
|
||||
ckeys_allowed = list("poojawa")
|
||||
color_src = MATRIXED
|
||||
matrixed_sections = MATRIX_RED_GREEN
|
||||
|
||||
/datum/sprite_accessory/mam_body_markings/sabresune
|
||||
name = "Sabresune"
|
||||
|
||||
@@ -0,0 +1,4 @@
|
||||
author: "silicons"
|
||||
delete-after: True
|
||||
changes:
|
||||
- bugfix: "keybinds generate anti-collision bindings where necessary automatically now"
|
||||
@@ -0,0 +1,4 @@
|
||||
author: "Hatterhat"
|
||||
delete-after: True
|
||||
changes:
|
||||
- tweak: "RPEDs now drop their lowest part tier first when quick-emptied (used inhand)."
|
||||
@@ -0,0 +1,4 @@
|
||||
author: "MrJWhit"
|
||||
delete-after: True
|
||||
changes:
|
||||
- bugfix: "Effects can no longer trigger landmines"
|
||||
@@ -0,0 +1,5 @@
|
||||
author: "MrJWhit"
|
||||
delete-after: True
|
||||
changes:
|
||||
- tweak: "Replaced engineering fuel tank with a large fuel tank"
|
||||
- tweak: "Changed access to sec suit storage from armory access in every map to other security access"
|
||||
@@ -0,0 +1,4 @@
|
||||
author: "timothyteakettle"
|
||||
delete-after: True
|
||||
changes:
|
||||
- bugfix: "circuits get pin data proc is sanitized when text is returned as data"
|
||||
@@ -0,0 +1,5 @@
|
||||
author: "Putnam3145"
|
||||
delete-after: True
|
||||
changes:
|
||||
- tweak: "You can now exit polycircuit input"
|
||||
- bugfix: "Polycircuits now check for range"
|
||||
Reference in New Issue
Block a user