diff --git a/_maps/map_files/KiloStation/KiloStation.dmm b/_maps/map_files/KiloStation/KiloStation.dmm
index 60c962e480b6..86da42206e98 100644
--- a/_maps/map_files/KiloStation/KiloStation.dmm
+++ b/_maps/map_files/KiloStation/KiloStation.dmm
@@ -2997,6 +2997,12 @@
/obj/structure/reagent_dispensers/watertank,
/turf/open/floor/plating,
/area/station/maintenance/port/greater)
+"anE" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/mapping_helpers/broken_floor,
+/obj/effect/landmark/generic_maintenance_landmark,
+/turf/open/floor/plating,
+/area/station/maintenance/department/security)
"anF" = (
/obj/machinery/flasher/portable,
/obj/effect/turf_decal/tile/neutral{
@@ -17169,6 +17175,7 @@
/obj/effect/decal/cleanable/dirt,
/obj/structure/cable,
/obj/effect/mapping_helpers/broken_floor,
+/obj/effect/landmark/generic_maintenance_landmark,
/turf/open/floor/plating,
/area/station/maintenance/department/security)
"bVp" = (
@@ -20833,6 +20840,7 @@
},
/obj/effect/decal/cleanable/dirt,
/obj/structure/cable,
+/obj/effect/landmark/generic_maintenance_landmark,
/turf/open/floor/plating,
/area/station/maintenance/aft)
"clD" = (
@@ -22939,7 +22947,6 @@
/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{
dir = 4
},
-/obj/effect/landmark/generic_maintenance_landmark,
/turf/open/floor/wood,
/area/station/maintenance/port/fore)
"cyf" = (
@@ -23837,6 +23844,7 @@
"cDF" = (
/obj/machinery/airalarm/directional/east,
/obj/effect/mapping_helpers/broken_floor,
+/obj/effect/landmark/generic_maintenance_landmark,
/turf/open/floor/wood,
/area/station/maintenance/department/crew_quarters/bar)
"cDN" = (
@@ -24107,7 +24115,6 @@
/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{
dir = 4
},
-/obj/effect/landmark/generic_maintenance_landmark,
/obj/structure/sign/poster/contraband/random/directional/south,
/obj/effect/mapping_helpers/broken_floor,
/turf/open/floor/plating,
@@ -24987,7 +24994,6 @@
/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{
dir = 8
},
-/obj/effect/landmark/generic_maintenance_landmark,
/obj/structure/cable,
/turf/open/floor/plating,
/area/station/maintenance/department/electrical)
@@ -37532,7 +37538,6 @@
"hek" = (
/obj/effect/turf_decal/tile/neutral,
/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4,
-/obj/effect/landmark/generic_maintenance_landmark,
/turf/open/floor/iron/dark,
/area/station/security/interrogation)
"hel" = (
@@ -42678,7 +42683,6 @@
/turf/open/floor/engine,
/area/station/engineering/supermatter/room)
"iUd" = (
-/obj/effect/landmark/generic_maintenance_landmark,
/obj/effect/spawner/random/medical/two_percent_xeno_egg_spawner,
/turf/open/floor/engine,
/area/station/science/xenobiology)
@@ -48807,6 +48811,7 @@
/obj/effect/mapping_helpers/burnt_floor,
/obj/effect/decal/cleanable/dirt,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/effect/landmark/generic_maintenance_landmark,
/turf/open/floor/plating,
/area/station/maintenance/department/security/brig)
"lcf" = (
@@ -52597,7 +52602,6 @@
/turf/open/floor/engine,
/area/station/engineering/supermatter/room)
"muH" = (
-/obj/effect/landmark/generic_maintenance_landmark,
/obj/effect/landmark/blobstart,
/obj/effect/landmark/event_spawn,
/obj/effect/spawner/random/trash/mess,
@@ -53137,6 +53141,7 @@
},
/obj/effect/decal/cleanable/dirt,
/obj/machinery/light/small/directional/east,
+/obj/effect/landmark/generic_maintenance_landmark,
/turf/open/floor/plating,
/area/station/maintenance/department/security)
"mCW" = (
@@ -56405,7 +56410,6 @@
/area/station/cargo/warehouse)
"nON" = (
/obj/effect/decal/cleanable/dirt,
-/obj/effect/landmark/generic_maintenance_landmark,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/effect/mapping_helpers/broken_floor,
/obj/structure/cable,
@@ -63766,6 +63770,7 @@
},
/obj/effect/mapping_helpers/burnt_floor,
/obj/machinery/atmospherics/components/binary/pump/off/supply/hidden/layer4,
+/obj/effect/landmark/generic_maintenance_landmark,
/turf/open/floor/plating,
/area/station/maintenance/port/greater)
"qpy" = (
@@ -63977,7 +63982,6 @@
c_tag = "Autopsy Room";
name = "detective camera"
},
-/obj/effect/landmark/generic_maintenance_landmark,
/obj/effect/landmark/start/detective,
/turf/open/floor/iron/dark,
/area/station/security/detectives_office)
@@ -74059,7 +74063,6 @@
"tSu" = (
/obj/effect/decal/cleanable/dirt,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/effect/landmark/generic_maintenance_landmark,
/obj/effect/turf_decal/siding/wood{
dir = 8
},
@@ -81149,6 +81152,14 @@
/obj/item/food/grown/poppy/lily,
/turf/open/floor/iron/dark,
/area/station/service/chapel/monastery)
+"wvR" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/cable,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/effect/landmark/generic_maintenance_landmark,
+/turf/open/floor/plating,
+/area/station/maintenance/aft)
"wvW" = (
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -99561,7 +99572,7 @@ cql
osY
rkz
aky
-uaZ
+anE
keP
cuF
hKh
@@ -115511,7 +115522,7 @@ mWQ
igk
bFz
uZY
-wct
+wvR
bFZ
bRT
cEw
diff --git a/_maps/map_files/LimaStation/LimaStation.dmm b/_maps/map_files/LimaStation/LimaStation.dmm
index a0e4b6ae4635..f8758a5eab3a 100644
--- a/_maps/map_files/LimaStation/LimaStation.dmm
+++ b/_maps/map_files/LimaStation/LimaStation.dmm
@@ -11599,10 +11599,6 @@
},
/turf/open/floor/iron,
/area/station/engineering/atmos)
-"erh" = (
-/obj/effect/landmark/generic_maintenance_landmark,
-/turf/open/floor/engine,
-/area/station/science/xenobiology)
"err" = (
/obj/machinery/door/airlock/external{
name = "Transit Tube External Access"
@@ -16665,7 +16661,6 @@
/turf/open/floor/iron,
/area/station/hallway/secondary/command)
"ggV" = (
-/obj/effect/landmark/generic_maintenance_landmark,
/obj/item/radio/intercom/directional/east,
/turf/open/floor/iron/sepia,
/area/station/service/chapel/office)
@@ -59419,7 +59414,6 @@
"uKZ" = (
/obj/effect/landmark/event_spawn,
/obj/effect/landmark/blobstart,
-/obj/effect/landmark/generic_maintenance_landmark,
/obj/effect/turf_decal/stripes/line,
/turf/open/floor/iron/dark,
/area/station/engineering/atmos/experiment_room)
@@ -114713,7 +114707,7 @@ eGa
qYG
nwa
tYh
-erh
+wTw
wTw
jvZ
vda
diff --git a/_maps/map_files/PubbyStation/PubbyStation.dmm b/_maps/map_files/PubbyStation/PubbyStation.dmm
index 13915cd8937b..2a8eb0223c34 100644
--- a/_maps/map_files/PubbyStation/PubbyStation.dmm
+++ b/_maps/map_files/PubbyStation/PubbyStation.dmm
@@ -7692,6 +7692,7 @@
/obj/machinery/light/small/directional/north,
/obj/machinery/airalarm/directional/north,
/obj/structure/chair/stool/bar/directional/west,
+/obj/effect/landmark/generic_maintenance_landmark,
/turf/open/floor/plating,
/area/station/maintenance/solars/port)
"ayD" = (
@@ -9474,13 +9475,6 @@
"aEd" = (
/turf/closed/wall,
/area/station/commons/toilet/restrooms)
-"aEf" = (
-/obj/structure/urinal{
- pixel_y = 32
- },
-/obj/effect/landmark/generic_maintenance_landmark,
-/turf/open/floor/iron/freezer,
-/area/station/commons/toilet/restrooms)
"aEg" = (
/obj/structure/urinal{
pixel_y = 32
@@ -10319,6 +10313,7 @@
"aGL" = (
/obj/item/clothing/suit/apron/chef,
/obj/structure/chair/stool/bar/directional/west,
+/obj/effect/landmark/generic_maintenance_landmark,
/turf/open/floor/plating,
/area/station/maintenance/department/cargo)
"aGM" = (
@@ -10771,6 +10766,7 @@
/obj/structure/cable,
/obj/machinery/light/small/directional/north,
/obj/machinery/airalarm/directional/north,
+/obj/effect/landmark/generic_maintenance_landmark,
/turf/open/floor/plating,
/area/station/maintenance/solars/starboard)
"aJw" = (
@@ -11271,7 +11267,6 @@
/area/station/service/cafeteria)
"aLE" = (
/obj/structure/sink/directional/east,
-/obj/effect/landmark/generic_maintenance_landmark,
/turf/open/floor/iron/freezer,
/area/station/commons/toilet/auxiliary)
"aLF" = (
@@ -23287,6 +23282,7 @@
/obj/effect/decal/cleanable/dirt,
/obj/machinery/atmospherics/pipe/smart/manifold/general/visible,
/obj/machinery/light/small/directional/south,
+/obj/effect/landmark/generic_maintenance_landmark,
/turf/open/floor/plating,
/area/station/maintenance/department/engine)
"bEl" = (
@@ -25333,6 +25329,7 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{
dir = 4
},
+/obj/effect/landmark/generic_maintenance_landmark,
/turf/open/floor/iron/dark,
/area/station/maintenance/department/engine)
"bMD" = (
@@ -26031,6 +26028,7 @@
/area/station/engineering/gravity_generator)
"bPC" = (
/obj/structure/chair/stool/bar/directional/west,
+/obj/effect/landmark/generic_maintenance_landmark,
/turf/open/floor/plating,
/area/station/maintenance/department/engine)
"bPD" = (
@@ -30419,7 +30417,6 @@
/turf/open/floor/iron/showroomfloor,
/area/station/service/chapel/monastery)
"cis" = (
-/obj/effect/landmark/generic_maintenance_landmark,
/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan,
/obj/effect/turf_decal/tile/green/half{
dir = 1
@@ -33635,10 +33632,6 @@
/obj/machinery/light/small/directional/east,
/turf/open/floor/plating,
/area/station/service/abandoned_gambling_den)
-"cBq" = (
-/obj/effect/landmark/generic_maintenance_landmark,
-/turf/open/floor/plating,
-/area/station/service/abandoned_gambling_den)
"cBr" = (
/obj/structure/table/wood/poker,
/obj/item/toy/cards/deck,
@@ -33954,13 +33947,6 @@
/obj/effect/mapping_helpers/broken_floor,
/turf/open/floor/plating,
/area/station/maintenance/department/cargo)
-"cKA" = (
-/obj/effect/landmark/generic_maintenance_landmark,
-/obj/effect/turf_decal/tile/purple/anticorner{
- dir = 1
- },
-/turf/open/floor/iron/white/smooth_corner,
-/area/station/science/research)
"cKF" = (
/obj/machinery/holopad,
/obj/effect/landmark/start/medical_doctor,
@@ -34243,6 +34229,10 @@
},
/turf/open/floor/plating,
/area/station/science/lab)
+"cYY" = (
+/obj/effect/landmark/generic_maintenance_landmark,
+/turf/open/floor/plating,
+/area/station/maintenance/department/security/brig)
"daO" = (
/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2,
/turf/open/floor/iron/smooth,
@@ -34964,7 +34954,6 @@
/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{
dir = 8
},
-/obj/effect/landmark/generic_maintenance_landmark,
/turf/open/floor/wood,
/area/station/service/bar)
"dGR" = (
@@ -36466,10 +36455,6 @@
/obj/effect/mapping_helpers/requests_console/supplies,
/turf/open/floor/iron/dark,
/area/station/cargo/miningdock)
-"eUb" = (
-/obj/effect/landmark/generic_maintenance_landmark,
-/turf/open/floor/iron,
-/area/station/engineering/atmos)
"eUe" = (
/obj/machinery/disposal/delivery_chute{
dir = 4;
@@ -38964,6 +38949,11 @@
/obj/effect/spawner/random/vending/snackvend,
/turf/open/floor/iron/dark,
/area/station/hallway/secondary/exit/departure_lounge)
+"gLZ" = (
+/obj/structure/cable,
+/obj/effect/landmark/generic_maintenance_landmark,
+/turf/open/floor/wood,
+/area/station/maintenance/department/engine)
"gMA" = (
/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{
dir = 8
@@ -39024,6 +39014,14 @@
/mob/living/carbon/human/species/monkey,
/turf/open/floor/grass,
/area/station/science/genetics)
+"gPY" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{
+ dir = 4
+ },
+/obj/effect/landmark/generic_maintenance_landmark,
+/turf/open/floor/plating,
+/area/station/maintenance/department/security/brig)
"gQa" = (
/obj/structure/disposalpipe/segment,
/obj/structure/cable,
@@ -39282,7 +39280,6 @@
/turf/open/floor/iron/dark/smooth_edge,
/area/station/service/chapel/monastery)
"hae" = (
-/obj/effect/landmark/generic_maintenance_landmark,
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{
@@ -45274,6 +45271,7 @@
/area/station/engineering/engine_smes)
"mnG" = (
/obj/effect/spawner/random/maintenance,
+/obj/effect/landmark/generic_maintenance_landmark,
/turf/open/floor/wood,
/area/station/service/abandoned_gambling_den)
"mnR" = (
@@ -48424,15 +48422,6 @@
/obj/structure/cable,
/turf/open/floor/engine,
/area/station/engineering/supermatter/room)
-"oNY" = (
-/obj/effect/landmark/generic_maintenance_landmark,
-/obj/structure/cable,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{
- dir = 4
- },
-/turf/open/floor/plating,
-/area/station/maintenance/department/crew_quarters/dorms)
"oOj" = (
/obj/structure/disposalpipe/segment{
dir = 4
@@ -49994,7 +49983,6 @@
/area/station/service/library/artgallery)
"pYj" = (
/obj/effect/decal/cleanable/dirt,
-/obj/effect/landmark/generic_maintenance_landmark,
/obj/item/radio/intercom/directional/north,
/turf/open/floor/iron,
/area/station/science/xenobiology)
@@ -52014,6 +52002,7 @@
"ryS" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/brown/visible/layer2,
/obj/effect/decal/cleanable/vomit/old,
+/obj/effect/landmark/generic_maintenance_landmark,
/turf/open/floor/plating,
/area/station/maintenance/department/engine)
"rzp" = (
@@ -55089,6 +55078,7 @@
dir = 10
},
/obj/structure/cable,
+/obj/effect/landmark/generic_maintenance_landmark,
/turf/open/floor/plating,
/area/station/maintenance/department/cargo)
"tDz" = (
@@ -55165,6 +55155,7 @@
"tGl" = (
/obj/item/wrench,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/effect/landmark/generic_maintenance_landmark,
/turf/open/floor/plating,
/area/station/maintenance/department/engine)
"tHk" = (
@@ -58772,6 +58763,10 @@
/obj/item/radio/intercom/directional/west,
/turf/open/floor/iron/smooth_large,
/area/station/engineering/atmos)
+"wmC" = (
+/obj/effect/landmark/generic_maintenance_landmark,
+/turf/open/floor/plating,
+/area/station/maintenance/department/science)
"wmE" = (
/obj/effect/turf_decal/stripes/line{
dir = 8
@@ -59923,6 +59918,11 @@
dir = 1
},
/area/station/security/brig)
+"wXP" = (
+/obj/effect/mapping_helpers/broken_floor,
+/obj/effect/landmark/generic_maintenance_landmark,
+/turf/open/floor/plating,
+/area/station/maintenance/department/engine)
"wYi" = (
/obj/machinery/atmospherics/pipe/bridge_pipe/green/visible{
dir = 4
@@ -60871,6 +60871,15 @@
},
/turf/open/floor/iron,
/area/station/maintenance/disposal)
+"xFA" = (
+/obj/structure/cable,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{
+ dir = 4
+ },
+/obj/effect/landmark/generic_maintenance_landmark,
+/turf/open/floor/plating,
+/area/station/maintenance/department/crew_quarters/dorms)
"xFF" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/iron/cafeteria,
@@ -76745,7 +76754,7 @@ wYu
ajD
ajD
ajD
-ajD
+cYY
mwg
aiu
aht
@@ -78532,7 +78541,7 @@ aaa
aaa
aiu
aiX
-ajD
+cYY
aks
aiu
ait
@@ -79313,7 +79322,7 @@ aof
aiu
aqh
lqc
-bTc
+gPY
atq
aut
aiu
@@ -86094,7 +86103,7 @@ rle
bNU
nYb
dSr
-rle
+gLZ
dJm
kev
wfO
@@ -86337,7 +86346,7 @@ xwC
ewb
bva
bPA
-bSw
+wXP
bSw
bXV
bDi
@@ -97895,7 +97904,7 @@ bWO
bTQ
ksv
sGc
-eUb
+bWO
wCz
mvA
mkS
@@ -99351,7 +99360,7 @@ qxE
stG
anm
sFK
-sFK
+xFA
uGx
sFK
cBA
@@ -99683,7 +99692,7 @@ bCR
aqm
fBp
eDR
-eUb
+bWO
bWO
wCz
bMX
@@ -100115,7 +100124,7 @@ aaa
aJc
wMF
cBn
-cBq
+fNg
fNg
fNg
iEU
@@ -101405,7 +101414,7 @@ aaa
aaa
aaa
ajy
-oNY
+sFK
alg
aaa
aaa
@@ -102454,7 +102463,7 @@ qhH
erO
aBT
atn
-aEf
+aEg
aGF
jXJ
aGF
@@ -103266,7 +103275,7 @@ aap
uDS
geR
tKI
-cKA
+wlK
cVa
pQX
bzd
@@ -107909,7 +107918,7 @@ izF
mES
lWy
lWy
-lWy
+wmC
lWy
bwm
aaa
diff --git a/code/controllers/subsystem/job.dm b/code/controllers/subsystem/job.dm
index 7d9c21c8dc3b..a95ac6cedf4b 100644
--- a/code/controllers/subsystem/job.dm
+++ b/code/controllers/subsystem/job.dm
@@ -549,7 +549,7 @@ SUBSYSTEM_DEF(job)
[CONFIG_GET(flag/jobs_have_minimal_access) ? "full crew, only your job's necessities" : "skeleton crew, additional access may"] \
have been added to your ID card."))
- if(ishuman(equipping))
+ if(ishuman(equipping) && (job.job_flags & JOB_CREW_MANIFEST)) // NON-MODULE CHANGE
var/mob/living/carbon/human/wageslave = equipping
wageslave.add_mob_memory(/datum/memory/key/account, remembered_id = wageslave.account_id)
diff --git a/code/game/objects/items/mail.dm b/code/game/objects/items/mail.dm
index c9fddbe19d63..7e0a12d69af1 100644
--- a/code/game/objects/items/mail.dm
+++ b/code/game/objects/items/mail.dm
@@ -115,7 +115,7 @@
return TRUE
balloon_alert(user, "hold it!")
return FALSE
-
+
/obj/item/mail/attack_self(mob/user)
if(!unwrap(user))
@@ -261,7 +261,7 @@
if(human.stat == DEAD || !human.mind)
continue
// Skip wizards, nuke ops, cyborgs; Centcom does not send them mail
- if(!(human.mind.assigned_role.job_flags & JOB_CREW_MEMBER))
+ if(!(human.mind.assigned_role.job_flags & JOB_CREW_MANIFEST)) // NON-MODULE CHANGE
continue
mail_recipients += human.mind
@@ -391,7 +391,7 @@
return TRUE
else
balloon_alert(user, "tinkering with something...")
-
+
if(!do_after(user, 2 SECONDS, target = src))
after_unwrap(user)
return FALSE
@@ -446,13 +446,13 @@
continue
mail_recipients += person.mind_ref
mail_recipients_for_input += avoid_assoc_duplicate_keys(person.name, used_names)
-
+
var/recipient = tgui_input_list(user, "Choose a recipient", "Mail Counterfeiting", mail_recipients_for_input)
if(isnull(recipient))
return FALSE
if(!(src in user.contents))
return FALSE
-
+
var/index = mail_recipients_for_input.Find(recipient)
var/obj/item/mail/traitor/shady_mail
@@ -460,7 +460,7 @@
shady_mail = new /obj/item/mail/traitor
else
shady_mail = new /obj/item/mail/traitor/envelope
-
+
shady_mail.made_by_cached_ckey = user.ckey
shady_mail.made_by_cached_name = user.mind.name
diff --git a/code/modules/jobs/job_types/_job.dm b/code/modules/jobs/job_types/_job.dm
index 6275cad061a1..3b1550fa3fbd 100644
--- a/code/modules/jobs/job_types/_job.dm
+++ b/code/modules/jobs/job_types/_job.dm
@@ -180,10 +180,11 @@
return
/mob/living/carbon/human/on_job_equipping(datum/job/equipping, datum/preferences/used_pref) // NON-MODULE CHANGE: LOADOUTS
- var/datum/bank_account/bank_account = new(real_name, equipping, dna.species.payday_modifier)
- bank_account.payday(STARTING_PAYCHECKS, TRUE)
- account_id = bank_account.account_id
- bank_account.replaceable = FALSE
+ if(equipping.job_flags & JOB_CREW_MANIFEST) // NON-MODULE CHANGE
+ var/datum/bank_account/bank_account = new(real_name, equipping, dna.species.payday_modifier)
+ bank_account.payday(STARTING_PAYCHECKS, TRUE)
+ account_id = bank_account.account_id
+ bank_account.replaceable = FALSE
dress_up_as_job(equipping, FALSE, used_pref) // NON-MODULE CHANGE: LOADOUTS
diff --git a/code/modules/modular_computers/file_system/programs/jobmanagement.dm b/code/modules/modular_computers/file_system/programs/jobmanagement.dm
index 3e599cf623eb..767259dd83c2 100644
--- a/code/modules/modular_computers/file_system/programs/jobmanagement.dm
+++ b/code/modules/modular_computers/file_system/programs/jobmanagement.dm
@@ -28,6 +28,7 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0)
JOB_ASSISTANT,
"Bridge Officer", //NON-MODULE CHANGE // MELBERT MODULARIZE ME
"Asset Protection", // NON-MODULE CHANGE
+ "Stowaway",
)
//The scaling factor of max total positions in relation to the total amount of people on board the station in %
diff --git a/maplestation.dme b/maplestation.dme
index dcc35bf1b770..f32d2ae1ac15 100644
--- a/maplestation.dme
+++ b/maplestation.dme
@@ -5560,6 +5560,7 @@
#include "maplestation_modules\code\modules\jobs\job_types\psychologist.dm"
#include "maplestation_modules\code\modules\jobs\job_types\research_director.dm"
#include "maplestation_modules\code\modules\jobs\job_types\scientist.dm"
+#include "maplestation_modules\code\modules\jobs\job_types\stowaway.dm"
#include "maplestation_modules\code\modules\jobs\job_types\xenobiologist.dm"
#include "maplestation_modules\code\modules\jobs\job_types\antagonists\infiltrator.dm"
#include "maplestation_modules\code\modules\jobs\job_types\antagonists\syndicate.dm"
diff --git a/maplestation_modules/code/controllers/subsystem/economy.dm b/maplestation_modules/code/controllers/subsystem/economy.dm
index cb338133994d..2cadc2a24959 100644
--- a/maplestation_modules/code/controllers/subsystem/economy.dm
+++ b/maplestation_modules/code/controllers/subsystem/economy.dm
@@ -47,8 +47,10 @@
var/error_prob = prob(8)
// Percent change that something will be redacted from the paper.
var/redacted_prob = prob(15)
+ // Whether the base subject is a good corp or a bad one
+ var/good_or_evil = prob(50)
// The 'base' subject of the paper.
- var/paper_base_subject = pick_list(COMPANY_FILE, "companies")
+ var/paper_base_subject = pick_list(COMPANY_FILE, good_or_evil ? "good_companies" : "bad_companies")
// The month to this paper's date.
var/rand_month = rand(1, 12)
// A var tracking the date range we can use for randomizing dates.
@@ -94,9 +96,7 @@
paper_primary_subject = paper_base_subject
all_tracked_data += "subject_one"
if(findtext(paper_contents, "subject_two"))
- paper_secondary_subject = pick_list(COMPANY_FILE, "companies")
- if(paper_secondary_subject == paper_base_subject) // okay but what are the odds of picking the same name, threee times?
- paper_secondary_subject = pick_list(COMPANY_FILE, "companies")
+ paper_secondary_subject = pick_list(COMPANY_FILE, good_or_evil ? "bad_companies" : "good_companies") // reversed
all_tracked_data += "subject_two"
if(findtext(paper_contents, "victim"))
var/list/possible_names = list(
diff --git a/maplestation_modules/code/modules/events/resource_drift.dm b/maplestation_modules/code/modules/events/resource_drift.dm
index 9b87541f0fc0..e0ddf3d44960 100644
--- a/maplestation_modules/code/modules/events/resource_drift.dm
+++ b/maplestation_modules/code/modules/events/resource_drift.dm
@@ -100,7 +100,9 @@
* Generate a "source event" / reason as to why the crates and debris are spawning.
*/
/datum/round_event/resource_drift/proc/get_source()
- var/list/parties = strings(COMPANY_FILE, "companies")
+ var/list/parties = list()
+ parties += strings(COMPANY_FILE, "bad_companies")
+ parties += strings(COMPANY_FILE, "good_companies")
parties += list("Space Station [rand(1, 12)]", "Space Station [rand(14, 99)]", "raider", "pirate")
. = pick_list(RESOURCE_EVENT_FILE, "drift_reasons")
diff --git a/maplestation_modules/code/modules/jobs/job_types/stowaway.dm b/maplestation_modules/code/modules/jobs/job_types/stowaway.dm
new file mode 100644
index 000000000000..b0a9675f29e2
--- /dev/null
+++ b/maplestation_modules/code/modules/jobs/job_types/stowaway.dm
@@ -0,0 +1,207 @@
+/datum/job/stowaway
+ title = "Stowaway"
+ description = "You've snuck on board, and now you're stuck here. \
+ You spawn randomly in the maintenance tunnels, with no radio, no PDA, \
+ no bank account, and no records in the crew database."
+ rpg_title = "Stowaway" // TES4: Oblivion
+ paycheck = PAYCHECK_ZERO
+ total_positions = 0
+ spawn_positions = 1
+ supervisors = "no one"
+ exp_granted_type = EXP_TYPE_CREW
+ config_tag = "STOWAWAY"
+ faction = FACTION_STATION
+
+ outfit = /datum/outfit/job/stowaway
+ plasmaman_outfit = /datum/outfit/job/stowaway/plasmaman
+
+ paycheck = PAYCHECK_ZERO
+
+ display_order = JOB_DISPLAY_ORDER_PRISONER + 0.1
+
+ department_for_prefs = /datum/job_department/assistant
+
+ job_flags = JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_ASSIGN_QUIRKS | JOB_NEW_PLAYER_JOINABLE
+ allow_bureaucratic_error = FALSE
+ random_spawns_possible = FALSE
+
+/datum/job/stowaway/get_default_roundstart_spawn_point()
+ return find_maintenance_spawn(atmos_sensitive = TRUE, require_darkness = FALSE)
+
+/datum/job/stowaway/after_spawn(mob/living/spawned, client/player_client)
+ . = ..()
+ var/datum/status_effect/backstory/backstory = spawned.apply_status_effect(/datum/status_effect/backstory)
+ var/backstory_ref = "click here"
+ to_chat(player_client, examine_block("\
+ [span_boldnotice("You find yourself stown away in [get_area_name(spawned)] on [station_name()].")]\n\
+ [span_notice("All you have to your name is the clothes on your back, some tools, and a small amount of cash.")]\n\
+ [span_notice("The crew has no record of your existence.")]\n\
+ [span_notice("(If you would like to be provided an optional, random backstory, with more or less equipment: [backstory_ref].)")]\
+ "))
+
+// Applied to fresh stowaways to give them an option of getting a random backstory
+/datum/status_effect/backstory
+ id = "stowaway_backstory"
+ alert_type = /atom/movable/screen/alert/status_effect/backstory
+ duration = 5 MINUTES
+ tick_interval = -1
+
+/datum/status_effect/backstory/Topic(href, list/href_list)
+ . = ..()
+ if(href_list["backstory"])
+ give_backstory()
+
+/datum/status_effect/backstory/proc/give_backstory()
+ if(SSticker.current_state != GAME_STATE_PLAYING)
+ return
+
+ var/backstory_gist
+ var/backstory_suggested_goal
+ var/backstory_equipment
+ var/list/backstory_equipment_items
+
+ var/mob/living/carbon/human/stowaway = owner
+ switch(rand(1, 7))
+ if(1)
+ backstory_gist = "You are a stowaway, who snuck on board to escape your old life. \
+ You're not sure what to do now, but you're sure you'll think of something."
+ backstory_suggested_goal = "Find a new life on board the station."
+
+ if(2)
+ backstory_gist = "You are a station reclamation agent, working for Nanotrasen, left behind mistakenly after the last crew departed. \
+ All you want is to get back off this station."
+ backstory_suggested_goal = "Get off the station, preferably without being detained."
+ backstory_equipment_items = list(
+ /obj/item/storage/belt/utility = ITEM_SLOT_BELT,
+ /obj/item/clothing/gloves/color/yellow = ITEM_SLOT_BACKPACK,
+ )
+ backstory_equipment = "A toolbelt and some insulated gloves."
+
+ if(3)
+ var/old_boss = pick_list(COMPANY_FILE, "bad_companies")
+ backstory_gist = "You are an ex-syndicate agent, employed by the [old_boss], who failed your last task and ended up marooned on this station. \
+ You're not sure what to do now, but you're sure you'll think of something."
+ backstory_suggested_goal = "Finish your last objective, or give up your old life and start anew - maybe on the station itself."
+ backstory_equipment_items = list(
+ /obj/item/clothing/gloves/combat = ITEM_SLOT_BACKPACK,
+ /obj/item/clothing/mask/gas/syndicate = ITEM_SLOT_BACKPACK,
+ (stowaway.jumpsuit_style == PREF_SKIRT ? /obj/item/clothing/under/syndicate/skirt : /obj/item/clothing/under/syndicate) = ITEM_SLOT_BACKPACK,
+ )
+ backstory_equipment = "A syndicate turtleneck and mask, and some insulated combat gloves."
+
+ if(4)
+ var/old_boss = pick_list(COMPANY_FILE, "good_companies")
+ backstory_gist = "You used to work for [old_boss], but you were fired on the job, and have ended up marooned on this station. \
+ You're not sure what to do now, but you're sure you'll think of something."
+ backstory_suggested_goal = "Give up your old life and start anew - maybe on the station itself, or attempt to reconcile with [old_boss]."
+
+ if(5)
+ var/datum/job/old_job = pick(SSjob.joinable_occupations)
+ var/reasons = pick("who was fired", "who had their station decomissioned")
+ backstory_gist = "You are a former [old_job.title], [reasons]. You've snuck on board to get your old position back."
+ backstory_suggested_goal = "Get your job as [old_job.title] back, and prove yourself - or find a new calling."
+
+ var/datum/outfit/job/job_outfit = old_job.outfit
+ backstory_equipment_items = list(
+ initial(job_outfit.uniform) = ITEM_SLOT_BACKPACK,
+ initial(job_outfit.head) = ITEM_SLOT_BACKPACK,
+ initial(job_outfit.shoes) = ITEM_SLOT_BACKPACK,
+ )
+ list_clear_nulls(backstory_equipment_items) // if the job doesn't have a head/shoes/whatever, don't spawn it
+ backstory_equipment = "Your old uniform."
+
+ if(6)
+ backstory_gist = "You woke up randomly in the maintenance tunnels, with no memory of who you are or how you got here."
+ backstory_suggested_goal = "Figure out who you are, and why you're here... or start anew."
+
+ if(7)
+ backstory_gist = "You got in trouble with [pick("the law", "the criminal underworld", "the syndicate", "the corporation you worked for", "the corporation you worked against")], and had to flee. \
+ You've snuck on board to escape your old life."
+ backstory_suggested_goal = "Find a new life on board the station."
+
+
+ var/final_info = "[backstory_gist]\n\n[backstory_suggested_goal]"
+ if(length(backstory_equipment_items) && backstory_equipment)
+ final_info += span_notice("\n\nAdditional equipment: [backstory_equipment]")
+
+ to_chat(owner, examine_block(span_infoplain(final_info)))
+
+ for(var/thing in backstory_equipment_items)
+ owner.equip_to_slot_if_possible(new thing(owner.loc), backstory_equipment_items[thing], disable_warning = TRUE, redraw_mob = FALSE, initial = TRUE)
+
+ qdel(src)
+
+// Screen alert for the above effect
+/atom/movable/screen/alert/status_effect/backstory
+ name = "Optional: Stowaway Backstory"
+ desc = "Not sure what to do? Click here for a random backstory and some extra equipment. \
+ This will go away shortly, so don't worry if you don't want it."
+ icon_state = "surrender"
+
+/atom/movable/screen/alert/status_effect/backstory/Click(location, control, params)
+ . = ..()
+ if(!.)
+ return
+ var/datum/status_effect/backstory/backstory = attached_effect
+ backstory.give_backstory()
+
+// The stowaway outfit, assistant but poorer
+/datum/outfit/job/stowaway
+ name = "Stowaway"
+ jobtype = /datum/job/stowaway
+
+ id = /obj/item/card/id/maint_tech
+ uniform = /obj/item/clothing/under/color/black
+ l_hand = /obj/item/storage/toolbox/mechanical/old/multitool
+ ears = null
+ belt = null
+
+ backpack_contents = list(
+ /obj/item/flashlight = 1,
+ /obj/item/radio = 1,
+ /obj/item/stack/spacecash/c100 = 1,
+ )
+
+/datum/outfit/job/stowaway/post_equip(mob/living/carbon/human/equipped, visualsOnly)
+ . = ..()
+ if(visualsOnly)
+ return
+ var/obj/item/card/id/id = equipped.wear_id?.GetID()
+ if(istype(id))
+ id.registered_age = rand(25, 65)
+ id.registered_name = ""
+ id.update_label()
+
+ var/obj/item/clothing/under/clothes = equipped.w_uniform
+ if(istype(clothes))
+ clothes.sensor_mode = SENSOR_OFF
+ clothes.has_sensor = BROKEN_SENSORS
+ equipped.update_suit_sensors()
+
+/datum/outfit/job/stowaway/plasmaman
+ uniform = /obj/item/clothing/under/plasmaman
+ gloves = /obj/item/clothing/gloves/color/plasmaman
+ head = /obj/item/clothing/head/helmet/space/plasmaman
+ r_hand = /obj/item/tank/internals/plasmaman/belt/full
+ internals_slot = ITEM_SLOT_HANDS
+
+// ID card stowaways spawn with
+/obj/item/card/id/maint_tech
+ name = "Maintenance Technician ID"
+ desc = "An old ID card once given to poorly paid technicians."
+ trim = /datum/id_trim/maintenance_technician
+ icon_state = "retro"
+
+// ID trim for the stolen ID card
+/datum/id_trim/maintenance_technician
+ access = list(ACCESS_EXTERNAL_AIRLOCKS, ACCESS_MAINT_TUNNELS)
+ assignment = "Maintenance Technician"
+ trim_state = "trim_stationengineer" // for posterity, doesn't show anyways
+ department_color = COLOR_ASSISTANT_GRAY
+
+// Old toolbox subtype that spawns with a multitool
+/obj/item/storage/toolbox/mechanical/old/multitool
+
+/obj/item/storage/toolbox/mechanical/old/multitool/PopulateContents()
+ . = ..()
+ new /obj/item/multitool(src)
diff --git a/strings/companies.json b/strings/companies.json
index 6b7feb87fcde..a2d406d2b31f 100644
--- a/strings/companies.json
+++ b/strings/companies.json
@@ -1,35 +1,38 @@
{
- "companies": [
- "Nanotrasen",
- "TerraGov",
- "Lizard Empire",
- "Gorlex",
- "Gorlex Marauders",
- "Donk Co.",
- "Donk Corporation",
- "Waffle Co.",
- "Waffle Corporation",
- "Cybersun",
- "Cybersun Industries",
- "Animal Rights Consortium",
- "Tiger Cooperative",
- "Interdyne",
- "Interdyne Pharmaceutics",
+ "good_companies": [
"Apadyne Technologies",
"Aussec Armory",
- "Scarborough Arms",
- "Kalashnikov Concern",
- "IMI",
"Auto-Ordnance Company",
- "Nakamura Engineering",
"DeForest Medical Corporation",
- "HONK Ltd.",
- "The Wizard Federation",
- "Eight-O Corporation",
- "Robust Industries, LLC",
- "Pwr Game, LLC",
+ "IMI",
+ "Kalashnikov Concern",
+ "Nakamura Engineering",
+ "Nanotrasen",
+ "Scarborough Arms",
+ "TerraGov",
"Sophronia Broadcasting",
"Comrade Computing",
- "Spinward Stellar Coalition"
+ "Spinward Stellar Coalition",
+ "Eight-O Corporation",
+ "Robust Industries, LLC",
+ "Pwr Game, LLC"
+ ],
+ "bad_companies": [
+ "Animal Rights Consortium",
+ "Cybersun Industries",
+ "Donk Co.",
+ "Donk Corporation",
+ "Gorlex Marauders",
+ "Gorlex",
+ "Interdyne Pharmaceutics",
+ "Interdyne",
+ "Tiger Cooperative",
+ "Waffle Co.",
+ "Waffle Corporation"
+ ],
+ "other_companies": [
+ "Lizard Empire",
+ "HONK Ltd.",
+ "The Wizard Federation"
]
}
diff --git a/tgui/packages/tgui/interfaces/common/JobToIcon.ts b/tgui/packages/tgui/interfaces/common/JobToIcon.ts
index 9919f0edb659..7c71b8c9b388 100644
--- a/tgui/packages/tgui/interfaces/common/JobToIcon.ts
+++ b/tgui/packages/tgui/interfaces/common/JobToIcon.ts
@@ -51,6 +51,7 @@ export const JOB2ICON = {
'Ordnance Technician': 'bomb', // Non-module change
'Asset Protection': 'person-military-pointing', // Non-module change
'Bridge Officer': 'paperclip', // Non-module change
+ 'Stowaway': 'person-through-window', // Non-module change
} as const;
export type AvailableJob = keyof typeof JOB2ICON;