diff --git a/config/jobconfig.toml b/config/jobconfig.toml index 40be43eee0c..523a92427a9 100644 --- a/config/jobconfig.toml +++ b/config/jobconfig.toml @@ -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 diff --git a/modular_skyrat/modules/automapper/code/area_spawn_subsystem.dm b/modular_skyrat/modules/automapper/code/area_spawn_subsystem.dm index d7c31575993..a51d17b559b 100644 --- a/modular_skyrat/modules/automapper/code/area_spawn_subsystem.dm +++ b/modular_skyrat/modules/automapper/code/area_spawn_subsystem.dm @@ -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. diff --git a/modular_zubbers/code/modules/automapper/code/overrides/area_spawn_subsystem.dm b/modular_zubbers/code/modules/automapper/code/overrides/area_spawn_subsystem.dm index 03c4d57bfef..d9c962c153c 100644 --- a/modular_zubbers/code/modules/automapper/code/overrides/area_spawn_subsystem.dm +++ b/modular_zubbers/code/modules/automapper/code/overrides/area_spawn_subsystem.dm @@ -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, diff --git a/modular_zubbers/code/modules/jobs/stowaway.dm b/modular_zubbers/code/modules/jobs/stowaway.dm new file mode 100644 index 00000000000..19b237f9d85 --- /dev/null +++ b/modular_zubbers/code/modules/jobs/stowaway.dm @@ -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)) diff --git a/tgstation.dme b/tgstation.dme index e55ac5ceecc..a2a3445d570 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -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"