diff --git a/baystation12.dme b/baystation12.dme index e1421ebc1bd..25ee0cd65fa 100644 --- a/baystation12.dme +++ b/baystation12.dme @@ -667,6 +667,7 @@ #include "code\game\verbs\who.dm" #include "code\js\byjax.dm" #include "code\js\menus.dm" +#include "code\modules\spawnpoints.dm" #include "code\modules\admin\admin.dm" #include "code\modules\admin\admin_investigate.dm" #include "code\modules\admin\admin_memo.dm" diff --git a/code/controllers/master_controller.dm b/code/controllers/master_controller.dm index 77f3adfdbde..d64b237034d 100644 --- a/code/controllers/master_controller.dm +++ b/code/controllers/master_controller.dm @@ -32,7 +32,7 @@ datum/controller/game_controller var/last_thing_processed var/mob/list/expensive_mobs = list() var/rebuild_active_areas = 0 - + var/list/shuttle_list //for debugging and VV datum/controller/game_controller/New() @@ -85,6 +85,9 @@ datum/controller/game_controller/proc/setup() var/datum/ore_distribution/O = new() O.populate_distribution_map() + //Set up spawn points. + populate_spawn_points() + spawn(0) if(ticker) ticker.pregame() diff --git a/code/game/objects/effects/landmarks.dm b/code/game/objects/effects/landmarks.dm index ae155f32ade..e287ee845d6 100644 --- a/code/game/objects/effects/landmarks.dm +++ b/code/game/objects/effects/landmarks.dm @@ -40,6 +40,14 @@ latejoin += loc del(src) + if("JoinLateGateway") + latejoin_gateway += loc + del(src) + + if("JoinLateCryo") + latejoin_cryo += loc + del(src) + //prisoners if("prisonwarp") prisonwarp += loc diff --git a/code/global.dm b/code/global.dm index 1eb82f08cd7..c938c5b7a91 100644 --- a/code/global.dm +++ b/code/global.dm @@ -125,7 +125,12 @@ var/airtunnel_bottom = 72 // default var/list/monkeystart = list() var/list/wizardstart = list() var/list/newplayer_start = list() + +//Spawnpoints. var/list/latejoin = list() +var/list/latejoin_gateway = list() +var/list/latejoin_cryo = list() + var/list/prisonwarp = list() //prisoners go to these var/list/holdingfacility = list() //captured people go here var/list/xeno_spawn = list()//Aliens spawn at these. diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index 60d0036c3cc..529746fe583 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -53,6 +53,7 @@ datum/preferences var/be_random_name = 0 //whether we are a random name every round var/gender = MALE //gender of character (well duh) var/age = 30 //age of character + var/spawnpoint = "Arrivals Shuttle" //where this character will spawn (0-2). var/b_type = "A+" //blood type (not-chooseable) var/underwear = 1 //underwear type var/undershirt = 1 //undershirt type @@ -247,6 +248,7 @@ datum/preferences dat += "Gender: [gender == MALE ? "Male" : "Female"]
" dat += "Age: [age]" + dat += "Spawn Point: [spawnpoint]
" dat += "
" dat += "UI Style: [UI_style]
" @@ -1179,6 +1181,16 @@ datum/preferences var/skin_style_name = input(user, "Select a new skin style") as null|anything in list("default1", "default2", "default3") if(!skin_style_name) return + if("spawnpoint") + var/list/spawnkeys = list() + for(var/S in spawntypes) + spawnkeys += S + var/choice = input(user, "Where would you like to spawn when latejoining?") as null|anything in spawnkeys + if(!choice || !spawntypes[choice]) + spawnpoint = "Arrivals Shuttle" + return + spawnpoint = choice + else switch(href_list["preference"]) if("gender") diff --git a/code/modules/client/preferences_savefile.dm b/code/modules/client/preferences_savefile.dm index d8cbab3f0be..68bb5a9e3eb 100644 --- a/code/modules/client/preferences_savefile.dm +++ b/code/modules/client/preferences_savefile.dm @@ -108,6 +108,7 @@ S["age"] >> age S["species"] >> species S["language"] >> language + S["spawnpoint"] >> spawnpoint //colors to be consolidated into hex strings (requires some work with dna code) S["hair_red"] >> r_hair @@ -168,6 +169,7 @@ real_name = reject_bad_name(real_name) if(isnull(species)) species = "Human" if(isnull(language)) language = "None" + if(isnull(spawnpoint)) spawnpoint = "Arrivals Shuttle" if(isnull(nanotrasen_relation)) nanotrasen_relation = initial(nanotrasen_relation) if(!real_name) real_name = random_name(gender) be_random_name = sanitize_integer(be_random_name, 0, 1, initial(be_random_name)) diff --git a/code/modules/mob/new_player/new_player.dm b/code/modules/mob/new_player/new_player.dm index 1bc7730b362..b4d3f021962 100644 --- a/code/modules/mob/new_player/new_player.dm +++ b/code/modules/mob/new_player/new_player.dm @@ -159,7 +159,7 @@ src << alert("You are currently not whitelisted to play [client.prefs.species].") return 0 - AttemptLateSpawn(href_list["SelectedJob"]) + AttemptLateSpawn(href_list["SelectedJob"],client.prefs.spawnpoint) return if(href_list["privacy_poll"]) @@ -270,7 +270,7 @@ return 1 - proc/AttemptLateSpawn(rank) + proc/AttemptLateSpawn(rank,var/spawning_at) if (src != usr) return 0 if(!ticker || ticker.current_state != GAME_STATE_PLAYING) @@ -291,7 +291,21 @@ var/mob/living/carbon/human/character = create_character() //creates the human and transfers vars and mind job_master.EquipRank(character, rank, 1) //equips the human EquipCustomItems(character) - character.loc = pick(latejoin) + + //Find our spawning point. + var/join_message + var/datum/spawnpoint/S + + if(spawning_at) + S = spawntypes[spawning_at] + + if(S && istype(S)) + character.loc = pick(S.turfs) + join_message = S.msg + else + character.loc = pick(latejoin) + join_message = "has arrived on the station" + character.lastarea = get_area(loc) // Moving wheelchair if they have one if(character.buckled && istype(character.buckled, /obj/structure/stool/bed/chair/wheelchair)) @@ -305,18 +319,18 @@ if(character.mind.assigned_role != "Cyborg") data_core.manifest_inject(character) ticker.minds += character.mind//Cyborgs and AIs handle this in the transform proc. //TODO!!!!! ~Carn - AnnounceArrival(character, rank) + AnnounceArrival(character, rank, join_message) else character.Robotize() del(src) - proc/AnnounceArrival(var/mob/living/carbon/human/character, var/rank) + proc/AnnounceArrival(var/mob/living/carbon/human/character, var/rank, var/join_message) if (ticker.current_state == GAME_STATE_PLAYING) var/obj/item/device/radio/intercom/a = new /obj/item/device/radio/intercom(null)// BS12 EDIT Arrivals Announcement Computer, rather than the AI. if(character.mind.role_alt_title) rank = character.mind.role_alt_title - a.autosay("[character.real_name],[rank ? " [rank]," : " visitor," ] has arrived on the station.", "Arrivals Announcement Computer") + a.autosay("[character.real_name],[rank ? " [rank]," : " visitor," ] [join_message ? join_message : "has arrived on the station"].", "Arrivals Announcement Computer") del(a) proc/LateChoices() diff --git a/code/modules/spawnpoints.dm b/code/modules/spawnpoints.dm new file mode 100644 index 00000000000..71692f01cc4 --- /dev/null +++ b/code/modules/spawnpoints.dm @@ -0,0 +1,36 @@ +var/list/spawntypes = list() + +/proc/populate_spawn_points() + spawntypes = list() + for(var/type in typesof(/datum/spawnpoint)-/datum/spawnpoint) + var/datum/spawnpoint/S = new type() + spawntypes[S.display_name] = S + +/datum/spawnpoint + var/msg //Message to display on the arrivals computer. + var/list/turfs //List of turfs to spawn on. + var/display_name //Name used in preference setup. + +/datum/spawnpoint/arrivals + display_name = "Arrivals Shuttle" + msg = "has arrived on the station" + +/datum/spawnpoint/arrivals/New() + ..() + turfs = latejoin + +/datum/spawnpoint/gateway + display_name = "Gateway" + msg = "has completed translation from offsite gateway" + +/datum/spawnpoint/gateway/New() + ..() + turfs = latejoin_gateway + +/datum/spawnpoint/cryo + display_name = "Cryogenic Storage" + msg = "has completed cryogenic revival and clocked in" + +/datum/spawnpoint/cryo/New() + ..() + turfs = latejoin_cryo \ No newline at end of file