Stowaway Job (#3494)

## About The Pull Request
Adds a stowaway job (not really a job)
You as a stowaway are a non-crew inhabitant of the station. 
## Why It's Good For The Game

Requested by players. 


## Proof Of Testing
<details>
<summary>Screenshots/Videos</summary>

</details>

## Changelog
🆑
add: Stowaway job (anti-job) added. 
/🆑

---------

Co-authored-by: lessthanthree <83487515+lessthnthree@users.noreply.github.com>
Co-authored-by: Arturlang <24881678+Arturlang@users.noreply.github.com>
Co-authored-by: Roxy <75404941+TealSeer@users.noreply.github.com>
This commit is contained in:
nevimer
2025-06-06 04:22:41 -04:00
committed by GitHub
co-authored by lessthanthree Arturlang Roxy
parent 1b7725c7fe
commit 9da4166fba
5 changed files with 69 additions and 10 deletions
+7
View File
@@ -341,6 +341,13 @@
"Spawn Positions" = 5
"Total Positions" = 5
[STOWAWAY]
"Playtime Requirements" = 2400
"Required Account Age" = 7
"# Required Character Age" = 0
"Spawn Positions" = 20
"Total Positions" = 20
[VANGUARD_OPERATIVE]
"Playtime Requirements" = 400
"Required Account Age" = 40
@@ -266,7 +266,7 @@ SUBSYSTEM_DEF(area_spawn)
/// See code/__DEFINES/~skyrat_defines/automapper.dm
var/mode = AREA_SPAWN_MODE_OPEN
/// Map blacklist, this is used to determine what maps we should not spawn on.
var/list/blacklisted_stations = list("Void Raptor", "Runtime Station", "MultiZ Debug", "Gateway Test", "Blueshift", "Biodome")
var/list/blacklisted_stations = list("Void Raptor", "Runtime Station", "MultiZ Debug", "Gateway Test", "Blueshift", "Biodome", "Moon Station", "Box Station")
/// If failing to find a suitable area is OK, then this should be TRUE or CI will fail.
/// Should probably be true if the target_areas are random, such as ruins.
var/optional = FALSE
@@ -323,7 +323,7 @@ SUBSYSTEM_DEF(area_spawn)
/// The atom type that we want to spawn
var/desired_atom
/// Map blacklist, this is used to determine what maps we should not spawn on.
var/list/blacklisted_stations = list("Void Raptor", "Runtime Station", "MultiZ Debug", "Gateway Test")
var/list/blacklisted_stations = list("Void Raptor", "Runtime Station", "MultiZ Debug", "Gateway Test", "Moon Station", "Box Station")
/**
* Spawn the atoms.
@@ -1,11 +1,3 @@
/datum/area_spawn/New()
blacklisted_stations |= list("Lima Station", "Moon Station", "Box Station")
. = ..()
/datum/area_spawn_over/New()
blacklisted_stations |= list("Lima Station", "Moon Station", "Box Station")
. = ..()
/datum/area_spawn_over/big_bertha
target_areas = list(
/area/station/ai_monitored/security/armory,
@@ -0,0 +1,59 @@
/datum/job/assistant/stowaway
title = "Stowaway"
description = "Be a stowaway aboard a hazardous research station that is infamous for many reasons."
faction = FACTION_NONE
supervisors = "yourself"
minimal_player_age = 7
total_positions = 20
spawn_positions = 20
exp_requirements = 2400
exp_required_type = EXP_TYPE_CREW
exp_granted_type = EXP_TYPE_SPECIAL
config_tag = "STOWAWAY"
liver_traits = list(TRAIT_MAINTENANCE_METABOLISM)
job_flags = JOB_NEW_PLAYER_JOINABLE|JOB_REOPEN_ON_ROUNDSTART_LOSS|JOB_ASSIGN_QUIRKS|JOB_CANNOT_OPEN_SLOTS
/datum/job/assistant/stowaway/after_spawn(mob/living/spawned, client/player_client)
. = ..()
for(var/obj/item/card/id/to_del in spawned.contents)
spawned.dropItemToGround(to_del, force = TRUE)
qdel(to_del)
for(var/obj/item/modular_computer/pda/to_del in spawned.contents)
spawned.dropItemToGround(to_del, force = TRUE)
qdel(to_del)
var/mob/living/carbon/human/human_holder = spawned
var/datum/bank_account/account = SSeconomy.bank_accounts_by_id["[human_holder.account_id]"]
account?.Destroy()
var/turf/T = find_maintenance_spawn(atmos_sensitive = TRUE, require_darkness = FALSE)
if(!T) // no safe spots... find another method.
for(var/i in 1 to 16)
var/turf/picked_safe = get_safe_random_station_turf_equal_weight()
T = picked_safe
break
spawned.forceMove(T)
spawned.put_in_hands(new /obj/item/storage/toolbox/mechanical)
spawned.equip_to_slot(new /obj/item/card/cardboard, ITEM_SLOT_ID)
// Fixes for station traits...
/datum/station_trait/wallets/on_job_after_spawn(datum/source, datum/job/job, mob/living/living_mob, mob/M, joined_late)
if(!(job.job_flags & JOB_EQUIP_RANK))
return
. = ..()
/obj/effect/landmark/start/stowaway
name = "Stowaway"
icon_state = "Assistant"
// This is purely to satisfy unit tests, stowaway spawn locations are handled in after_spawn()
/datum/area_spawn/stowaway_landmark
blacklisted_stations = list("Runtime Station", "MultiZ Debug", "Gateway Test")
amount_to_spawn = 5
desired_atom = /obj/effect/landmark/start/stowaway
/datum/area_spawn/stowaway_landmark/New()
. = ..()
target_areas = shuffle(typesof(/area/station/maintenance/fore) | typesof(/area/station/maintenance/aft) | typesof(/area/station/maintenance/port) | typesof(/area/station/maintenance/starboard))
+1
View File
@@ -9339,6 +9339,7 @@
#include "modular_zubbers\code\modules\job_interns\config.dm"
#include "modular_zubbers\code\modules\job_interns\job_interns.dm"
#include "modular_zubbers\code\modules\jobs\_job.dm"
#include "modular_zubbers\code\modules\jobs\stowaway.dm"
#include "modular_zubbers\code\modules\jobs\job_types\blacksmith.dm"
#include "modular_zubbers\code\modules\jobs\job_types\cargo_technician.dm"
#include "modular_zubbers\code\modules\jobs\job_types\chaplain.dm"