diff --git a/code/modules/ghostroles/spawner/base.dm b/code/modules/ghostroles/spawner/base.dm index e2d8e0d9868..f787b6b43cc 100644 --- a/code/modules/ghostroles/spawner/base.dm +++ b/code/modules/ghostroles/spawner/base.dm @@ -167,6 +167,13 @@ if(welcome_message) to_chat(user, SPAN_NOTICE(welcome_message)) universe.OnPlayerLatejoin(user) + if(current_map.use_overmap) + var/obj/effect/overmap/visitable/sector = map_sectors["[user.z]"] + if(sector?.invisible_until_ghostrole_spawn) + sector.x = sector.start_x + sector.y = sector.start_y + sector.z = current_map.overmap_z + sector.invisible_until_ghostrole_spawn = FALSE return TRUE //Proc to check if a specific user can edit this spawner (open/close/...) diff --git a/code/modules/ghostroles/spawner/human/human.dm b/code/modules/ghostroles/spawner/human/human.dm index 9c0f34ab99a..e2c0f22e1cb 100644 --- a/code/modules/ghostroles/spawner/human/human.dm +++ b/code/modules/ghostroles/spawner/human/human.dm @@ -177,10 +177,6 @@ return M -//Proc executed after someone is spawned in -/datum/ghostspawner/human/post_spawn(mob/user) - . = ..() - /// Used for cryo to free up a slot when a ghost cryos. /mob/living/carbon/human var/datum/weakref/ghost_spawner diff --git a/code/modules/overmap/sectors.dm b/code/modules/overmap/sectors.dm index 3343912541d..6a07eb2016c 100644 --- a/code/modules/overmap/sectors.dm +++ b/code/modules/overmap/sectors.dm @@ -50,6 +50,8 @@ var/global/area/overmap/map_overmap // Global object used to locate the overmap /// null | num | list. If a num or a (num, num) list, the radius or random bounds for placing this sector near the main map's overmap icon. var/list/place_near_main + var/invisible_until_ghostrole_spawn = FALSE + /obj/effect/overmap/visitable/Initialize() . = ..() if(. == INITIALIZE_HINT_QDEL) @@ -77,7 +79,8 @@ var/global/area/overmap/map_overmap // Global object used to locate the overmap start_y = start_y || rand(map_low, map_high) home = locate(start_x, start_y, current_map.overmap_z) - forceMove(home) + if(!invisible_until_ghostrole_spawn) + forceMove(home) update_name() diff --git a/html/changelogs/geeves-hidden-offships.yml b/html/changelogs/geeves-hidden-offships.yml new file mode 100644 index 00000000000..a3bea508585 --- /dev/null +++ b/html/changelogs/geeves-hidden-offships.yml @@ -0,0 +1,6 @@ +author: Geeves + +delete-after: True + +changes: + - rscadd: "Ghostspawner ships now only spawn into the game area once its first crewmember wakes up." \ No newline at end of file diff --git a/maps/away/ships/coc_ranger/coc_ship.dm b/maps/away/ships/coc_ranger/coc_ship.dm index fa715385b24..431ec19ec94 100644 --- a/maps/away/ships/coc_ranger/coc_ship.dm +++ b/maps/away/ships/coc_ranger/coc_ship.dm @@ -94,6 +94,8 @@ "nav_ranger_corvette_2" ) + invisible_until_ghostrole_spawn = TRUE + /obj/effect/overmap/visitable/ship/ranger_corvette/New() designation = "[pick("Argia sa Mar", "Kuenoi", "Xansan", "Greentree", "Rautakaivos Kaupunki", "Dorshafen", "Inverkeithing", "Uusi Viipuri", "Horner Station", "Commander Ashia Patvardhan", "Sevaschaiv", "Rahe", "Czsari", "Suwon", "Kamoga", "Jagalaw", "Dalakyhr", "Gurmori", "Ohdker", "Dainshu", "Boch-Zivir", "Kill Emperor Boleslaw", "Expletive Sol", "Letter of Marque", "Free Fisanduh", "Gaucho", "Treaty of Xansan", "Pirates Beware", "Moroz Here We Come!", "This Ship Kills Privateers", "Lower The Black Flag", "Frontier Spirit", "Freedom", "Independence", "Self-Determination", "Let's Have A Second Collapse", "Send More Solarians", "You Can Run But You Can't Hide", "Frontier Alliance", "Here's To You, Governor Hawkins", "Remember Jamestown", "Good Riddance to Kambiz Entezam", "We're Coming For You In Hell, Terrence Hopper", "Warpway Safari Company", "Badlands Gun Club", "Light's Edge Light Foot", "Now Entering Free Xanu", "Weeping Stars, Weep No More", "Rebel's Reach Outreach Program", "Rugged Individualism", "Don't Tread On Me", "Snake In The Grass", "Konyang Yacht Club", "Ranger Ship")]" ..() diff --git a/maps/away/ships/coc_ranger/coc_ship_ghostroles.dm b/maps/away/ships/coc_ranger/coc_ship_ghostroles.dm index d589ad70524..5a87aee6bd4 100644 --- a/maps/away/ships/coc_ranger/coc_ship_ghostroles.dm +++ b/maps/away/ships/coc_ranger/coc_ship_ghostroles.dm @@ -62,4 +62,4 @@ /obj/item/card/id/ranger_ship name = "ranger ship id" - access = list(access_external_airlocks) \ No newline at end of file + access = list(access_external_airlocks) diff --git a/maps/away/ships/dominia/dominian_corvette.dm b/maps/away/ships/dominia/dominian_corvette.dm index aec79616974..af6910a1c8c 100644 --- a/maps/away/ships/dominia/dominian_corvette.dm +++ b/maps/away/ships/dominia/dominian_corvette.dm @@ -85,6 +85,8 @@ "nav_dominian_corvette_2" ) + invisible_until_ghostrole_spawn = TRUE + /obj/effect/overmap/visitable/ship/dominian_corvette/New() designation = "[pick("Lammergeier", "Eagle", "Hawk", "Owl", "Vulture", "Sparrowhawk", "Falcon", "Peregrine", "Condor", "Harrier", "Kestrel", "Osprey", "Yastr", "Merlin", "Kite", "Seriema", "Caracaras")]" ..() diff --git a/maps/away/ships/dominia/dominian_corvette_ghostroles.dm b/maps/away/ships/dominia/dominian_corvette_ghostroles.dm index 06720a6195e..1152a8f71da 100644 --- a/maps/away/ships/dominia/dominian_corvette_ghostroles.dm +++ b/maps/away/ships/dominia/dominian_corvette_ghostroles.dm @@ -102,4 +102,4 @@ /obj/item/card/id/imperial_fleet name = "imperial fleet id" - access = list(access_imperial_fleet_voidsman_ship, access_external_airlocks) \ No newline at end of file + access = list(access_imperial_fleet_voidsman_ship, access_external_airlocks) diff --git a/maps/away/ships/einstein/ee_spy_ship.dm b/maps/away/ships/einstein/ee_spy_ship.dm index fe8cbd41731..74739080489 100644 --- a/maps/away/ships/einstein/ee_spy_ship.dm +++ b/maps/away/ships/einstein/ee_spy_ship.dm @@ -43,6 +43,8 @@ "nav_ee_spy_ship_2" ) + invisible_until_ghostrole_spawn = TRUE + /obj/effect/overmap/visitable/ship/ee_spy_ship/New() designation = "[pick("Brilliance", "Oppenheimer", "Fermi", "Slingshot", "Shanghai", "Bern", "Hadron", "Positron", "Invention", "Nikola Tesla", "Quark")]" ..() diff --git a/maps/away/ships/einstein/ee_spy_ship_ghostroles.dm b/maps/away/ships/einstein/ee_spy_ship_ghostroles.dm index 91bb8d214aa..ff7c9f90b8f 100644 --- a/maps/away/ships/einstein/ee_spy_ship_ghostroles.dm +++ b/maps/away/ships/einstein/ee_spy_ship_ghostroles.dm @@ -75,4 +75,4 @@ /obj/item/card/id/ee_ship name = "ee research ship id" - access = list(access_ee_spy_ship, access_external_airlocks) \ No newline at end of file + access = list(access_ee_spy_ship, access_external_airlocks) diff --git a/maps/away/ships/elyra/elyra_strike_craft.dm b/maps/away/ships/elyra/elyra_strike_craft.dm index c8b50da5284..9490edbd440 100644 --- a/maps/away/ships/elyra/elyra_strike_craft.dm +++ b/maps/away/ships/elyra/elyra_strike_craft.dm @@ -43,6 +43,8 @@ "nav_elyran_strike_craft_2" ) + invisible_until_ghostrole_spawn = TRUE + /obj/effect/overmap/visitable/ship/elyran_strike_craft/New() designation = "[pick("Persepolis", "Damascus", "Medina", "Aemaq", "New Suez", "Bursa", "Republican", "Falcon", "Gelin", "Sphinx", "Takam", "Dandan", "Anqa", "Falak", "Uthra", "Djinn", "Roc", "Shadhavar", "Karkadann")]" ..() diff --git a/maps/away/ships/elyra/elyra_strike_craft_ghostroles.dm b/maps/away/ships/elyra/elyra_strike_craft_ghostroles.dm index 1f71a7dcb83..41316b84120 100644 --- a/maps/away/ships/elyra/elyra_strike_craft_ghostroles.dm +++ b/maps/away/ships/elyra/elyra_strike_craft_ghostroles.dm @@ -87,4 +87,4 @@ /obj/item/card/id/elyran_naval_infantry_craft name = "elyran naval infantry craft id" - access = list(access_elyran_naval_infantry_ship, access_external_airlocks) \ No newline at end of file + access = list(access_elyran_naval_infantry_ship, access_external_airlocks) diff --git a/maps/away/ships/iac/iac_rescue_ship.dm b/maps/away/ships/iac/iac_rescue_ship.dm index 79bf463e71c..a4599f3838a 100644 --- a/maps/away/ships/iac/iac_rescue_ship.dm +++ b/maps/away/ships/iac/iac_rescue_ship.dm @@ -84,6 +84,8 @@ "nav_iac_rescue_ship_5" ) + invisible_until_ghostrole_spawn = TRUE + /obj/effect/overmap/visitable/ship/iac_rescue_ship/New() designation = "[pick("Angitia", "Eir", "Vejovis", "Dharti", "Serket", "He Xiangu", "Sirona", "Ixtlilton", "Boris Yegorov", "Simi", "Aleksandra Hro'makar", "Assistance", "Helping Hand", "Free Aid", "Safe Haven", "Grace", "Compassion", "Relief")]" ..() diff --git a/maps/away/ships/kataphracts/kataphract_ship.dm b/maps/away/ships/kataphracts/kataphract_ship.dm index cde2d4e3565..e5b2ca99747 100644 --- a/maps/away/ships/kataphracts/kataphract_ship.dm +++ b/maps/away/ships/kataphracts/kataphract_ship.dm @@ -34,6 +34,8 @@ "Intrepid" = list("nav_kataphract_ship_dockintrepid") ) + invisible_until_ghostrole_spawn = TRUE + /obj/effect/overmap/visitable/ship/kataphract_ship/New() designation = "[pick("Pious Avenger", "Persistent Conviction", "Solemn Retribution", "Venerable Ironscales", "Blade of Faith", "Glorious Succor", "Sacred Retribution", "Unflinching Soul", "Unrelenting Fervor", "Ascendant Absolution")]" ..() diff --git a/maps/away/ships/orion/orion_express_ship.dm b/maps/away/ships/orion/orion_express_ship.dm index 66fa79e0986..bf4ec112b6a 100644 --- a/maps/away/ships/orion/orion_express_ship.dm +++ b/maps/away/ships/orion/orion_express_ship.dm @@ -45,6 +45,8 @@ "nav_orion_express_ship_3" ) + invisible_until_ghostrole_spawn = TRUE + /obj/effect/overmap/visitable/ship/orion_express_ship/New() designation = "[pick("Messenger", "Traveler", "Highspeed", "Punctual", "Unstoppable", "Pony Express", "Courier", "Telegram", "Carrier Pigeon", "Fuel Stop", "Convenience")]" ..() diff --git a/maps/away/ships/pra/database_freighter/database_freighter.dm b/maps/away/ships/pra/database_freighter/database_freighter.dm index bc74e4db9d7..7f7ca544605 100644 --- a/maps/away/ships/pra/database_freighter/database_freighter.dm +++ b/maps/away/ships/pra/database_freighter/database_freighter.dm @@ -33,6 +33,8 @@ "Database Freighter Shuttle" = list("nav_database_freighter_shuttle") ) + invisible_until_ghostrole_spawn = TRUE + /obj/effect/overmap/visitable/ship/database_freighter/New() if (prob(50)) designation = "Hadii" diff --git a/maps/away/ships/pra/database_freighter/database_freighter_ghostroles.dm b/maps/away/ships/pra/database_freighter/database_freighter_ghostroles.dm index 6257a05e185..115a77169b2 100644 --- a/maps/away/ships/pra/database_freighter/database_freighter_ghostroles.dm +++ b/maps/away/ships/pra/database_freighter/database_freighter_ghostroles.dm @@ -54,4 +54,4 @@ uniform = /obj/item/clothing/under/tajaran/database_freighter/captain suit = /obj/item/clothing/suit/storage/toggle/labcoat - accessory = /obj/item/clothing/accessory/hadii_pin \ No newline at end of file + accessory = /obj/item/clothing/accessory/hadii_pin diff --git a/maps/away/ships/pra/headmaster/headmaster_ghostroles.dm b/maps/away/ships/pra/headmaster/headmaster_ghostroles.dm index 594fc57285c..478b2587b65 100644 --- a/maps/away/ships/pra/headmaster/headmaster_ghostroles.dm +++ b/maps/away/ships/pra/headmaster/headmaster_ghostroles.dm @@ -94,4 +94,4 @@ /obj/item/storage/box/hadii_manifesto = 1, /obj/item/storage/box/hadii_card = 1 ) - l_hand = /obj/item/device/megaphone \ No newline at end of file + l_hand = /obj/item/device/megaphone diff --git a/maps/away/ships/pra/headmaster/headmaster_ship.dm b/maps/away/ships/pra/headmaster/headmaster_ship.dm index 886a2f1a633..4ef17b7cd47 100644 --- a/maps/away/ships/pra/headmaster/headmaster_ship.dm +++ b/maps/away/ships/pra/headmaster/headmaster_ship.dm @@ -33,6 +33,8 @@ "Orbital Fleet Shuttle" = list("nav_headmaster_shuttle") ) + invisible_until_ghostrole_spawn = TRUE + /obj/effect/overmap/visitable/ship/headmaster_ship/New() if (prob(50)) designation = "Hadii" diff --git a/maps/away/ships/skrell_smuggler/tirakqi_freighter.dm b/maps/away/ships/skrell_smuggler/tirakqi_freighter.dm index 5288e7e906a..ef9dce4f3a8 100644 --- a/maps/away/ships/skrell_smuggler/tirakqi_freighter.dm +++ b/maps/away/ships/skrell_smuggler/tirakqi_freighter.dm @@ -45,6 +45,8 @@ "nav_tirakqi_freighter_4" ) + invisible_until_ghostrole_spawn = TRUE + /obj/effect/overmap/visitable/ship/tirakqi_freighter/New() designation = "[pick("Bigger Squib", "Frightful Whaler", "Star Spanner", "Lu'Kaax", "Star Scamp", "Ocean Ink", "Yippi")]" ..() diff --git a/maps/away/ships/sol_merc/fsf_patrol_ship.dm b/maps/away/ships/sol_merc/fsf_patrol_ship.dm index 23d0e1b9d5a..fa315529f35 100644 --- a/maps/away/ships/sol_merc/fsf_patrol_ship.dm +++ b/maps/away/ships/sol_merc/fsf_patrol_ship.dm @@ -43,6 +43,8 @@ "nav_fsf_patrol_ship_2" ) + invisible_until_ghostrole_spawn = TRUE + /obj/effect/overmap/visitable/ship/fsf_patrol_ship/New() designation = "[pick("Varangian", "Swiss Guard", "Free Company", "Praetorian", "Gurkha", "Roland", "Whispering Death", "Gordon Ingram", "Jungle Work", "Habiru", "Francs-Tireurs", "Catalan", "Navarrese", "Breton", "Corsair", "Landsknecht", "Hessian")]" ..() diff --git a/maps/away/ships/sol_pirate/sfa_patrol_ship.dm b/maps/away/ships/sol_pirate/sfa_patrol_ship.dm index 1eb0c3c54db..a76c4984743 100644 --- a/maps/away/ships/sol_pirate/sfa_patrol_ship.dm +++ b/maps/away/ships/sol_pirate/sfa_patrol_ship.dm @@ -82,6 +82,8 @@ "nav_sfa_patrol_ship_2" ) + invisible_until_ghostrole_spawn = TRUE + /obj/effect/overmap/visitable/ship/sfa_patrol_ship/New() designation = "[pick("Brigand", "Zheng Yi Sao", "Corruption", "Edward Teach", "Beauchamp's Revenge", "Blackguard", "Viking", "Despoiler", "Wayward Son", "Black Sheep", "Gluttony", "Pride", "Avarice", "Greed", "Envy", "Sloth", "Wrath", "We're The Good Ones", "Reformed", "Repentant", "Recidivist", "Just Following Orders", "Habitual Offender", "Felon", "Misdemeanor", "Conscientious Objector")]" ..() diff --git a/maps/away/ships/sol_pirate/sfa_patrol_ship_ghostroles.dm b/maps/away/ships/sol_pirate/sfa_patrol_ship_ghostroles.dm index a9d0af60f4e..7e88fb65e7d 100644 --- a/maps/away/ships/sol_pirate/sfa_patrol_ship_ghostroles.dm +++ b/maps/away/ships/sol_pirate/sfa_patrol_ship_ghostroles.dm @@ -121,4 +121,4 @@ /obj/item/card/id/sfa_ship name = "sfa patrol ship id" - access = list(access_sol_ships, access_external_airlocks) \ No newline at end of file + access = list(access_sol_ships, access_external_airlocks) diff --git a/maps/away/ships/sol_ssmd/ssmd_ship.dm b/maps/away/ships/sol_ssmd/ssmd_ship.dm index 47c57b3a82a..7f6ffd57ece 100644 --- a/maps/away/ships/sol_ssmd/ssmd_ship.dm +++ b/maps/away/ships/sol_ssmd/ssmd_ship.dm @@ -107,6 +107,8 @@ "nav_ssmd_corvette_2" ) + invisible_until_ghostrole_spawn = TRUE + /obj/effect/overmap/visitable/ship/ssmd_corvette/New() designation = "[pick("Asparuh", "Magyar", "Hussar", "Black Army", "Hunyadi", "Piast", "Hussite", "Tepes", "Komondor", "Turul", "Vistula", "Sikorski", "Mihai", "Blue Army", "Strzyga", "Leszy", "Danube", "Sokoly", "Patriotism", "Duty", "Loyalty", "Florian Geyer", "Pilsudski", "Chopin", "Levski", "Valkyrie", "Tresckow", "Olbricht", "Dubcek", "Kossuth", "Nagy", "Clausewitz", "Poniatowski", "Orzel", "Turul", "Skanderbeg", "Ordog", "Perun", "Poroniec", "Klobuk", "Cavalryman", "Szalai's Own", "Upior", "Szalai's Pride", "Kuvasz", "Fellegvar", "Nowa Bratislawa", "Zbior", "Stadter", "Homesteader", "Premyslid", "Bohemia", "Discipline", "Cavalryman", "Order", "Law", "Tenacity", "Diligence", "Valiant", "Konik", "Victory", "Triumph", "Vanguard", "Jager", "Grenadier", "Honor Guard", "Visegrad", "Nil", "Warsaw", "Budapest", "Prague", "Sofia", "Bucharest", "Home Army", "Kasimir", "Veles", "Blyskawica", "Kubus")]" ..() diff --git a/maps/away/ships/tajara/taj_smuggler/tajaran_smuggler.dm b/maps/away/ships/tajara/taj_smuggler/tajaran_smuggler.dm index f439ac18f2a..d2aafe76786 100644 --- a/maps/away/ships/tajara/taj_smuggler/tajaran_smuggler.dm +++ b/maps/away/ships/tajara/taj_smuggler/tajaran_smuggler.dm @@ -36,6 +36,8 @@ "nav_tajaran_smuggler_2" ) + invisible_until_ghostrole_spawn = TRUE + /obj/effect/overmap/visitable/ship/tajaran_smuggler/New() designation = "[pick("Brave Ha'rron", "Trickster Farwa", "Legal and Safe Cargo", "Adhomian Trader", "Minharrzka", "Rredouane's Chosen", "Adhomai's Pride")]" ..() diff --git a/maps/away/ships/tajara/taj_smuggler/tajaran_smuggler_ghostroles.dm b/maps/away/ships/tajara/taj_smuggler/tajaran_smuggler_ghostroles.dm index 4a10695e442..84c0514f46c 100644 --- a/maps/away/ships/tajara/taj_smuggler/tajaran_smuggler_ghostroles.dm +++ b/maps/away/ships/tajara/taj_smuggler/tajaran_smuggler_ghostroles.dm @@ -87,4 +87,4 @@ name = "Tajaran Smuggler Captain" uniform = /obj/item/clothing/under/syndicate - head = /obj/item/clothing/head/padded \ No newline at end of file + head = /obj/item/clothing/head/padded diff --git a/maps/away/ships/tcfl_patrol/tcfl_peacekeeper_ship.dm b/maps/away/ships/tcfl_patrol/tcfl_peacekeeper_ship.dm index ebf86631c13..aaa2e373d75 100644 --- a/maps/away/ships/tcfl_patrol/tcfl_peacekeeper_ship.dm +++ b/maps/away/ships/tcfl_patrol/tcfl_peacekeeper_ship.dm @@ -43,6 +43,8 @@ "nav_tcfl_peacekeeper_ship_2" ) + invisible_until_ghostrole_spawn = TRUE + /obj/effect/overmap/visitable/ship/tcfl_peacekeeper_ship/New() designation = "[pick("Castle", "Rook", "Gin Rummy", "Pawn", "Bishop", "Knight", "Blackjack", "Torch", "Liberty", "President Dorn", "Independence", "Civic Duty", "Democracy", "Progress", "Prosperity", "New Gibson", "Biesel", "Justice", "Equality")]" ..() diff --git a/maps/away/ships/tcfl_patrol/tcfl_peacekeeper_ship_ghostroles.dm b/maps/away/ships/tcfl_patrol/tcfl_peacekeeper_ship_ghostroles.dm index 653629646a8..a998df95bb4 100644 --- a/maps/away/ships/tcfl_patrol/tcfl_peacekeeper_ship_ghostroles.dm +++ b/maps/away/ships/tcfl_patrol/tcfl_peacekeeper_ship_ghostroles.dm @@ -105,4 +105,4 @@ /obj/item/card/id/tcfl_ship name = "tcfl peacekeeper ship id" - access = list(access_tcfl_peacekeeper_ship, access_external_airlocks) \ No newline at end of file + access = list(access_tcfl_peacekeeper_ship, access_external_airlocks) diff --git a/maps/away/ships/tramp_freighter/tramp_freighter.dm b/maps/away/ships/tramp_freighter/tramp_freighter.dm index 98ce322829d..a33d5df81d2 100644 --- a/maps/away/ships/tramp_freighter/tramp_freighter.dm +++ b/maps/away/ships/tramp_freighter/tramp_freighter.dm @@ -43,6 +43,8 @@ "nav_tramp_freighter_2" ) + invisible_until_ghostrole_spawn = TRUE + /obj/effect/overmap/visitable/ship/tramp_freighter/New() designation = "[pick("Tuckerbag", "Do No Harm", "Volatile Cargo", "Stay Clear", "Entrepreneurial", "Good Things Only", "Worthless", "Skip This One", "Pay No Mind", "Customs-Cleared", "Friendly", "Reactor Leak", "Fool's Gold", "Cursed Cargo", "Guards Aboard")]" ..() @@ -107,4 +109,4 @@ /obj/effect/shuttle_landmark/freighter_shuttle/transit name = "In transit" landmark_tag = "nav_transit_freighter_shuttle" - base_turf = /turf/space/transit/north \ No newline at end of file + base_turf = /turf/space/transit/north diff --git a/maps/away/ships/wildlands_militia/militia_ship.dm b/maps/away/ships/wildlands_militia/militia_ship.dm index 65976f6fd44..3e9247b296d 100644 --- a/maps/away/ships/wildlands_militia/militia_ship.dm +++ b/maps/away/ships/wildlands_militia/militia_ship.dm @@ -43,6 +43,8 @@ "nav_militia_ship_2" ) + invisible_until_ghostrole_spawn = TRUE + /obj/effect/overmap/visitable/ship/militia_ship/New() designation = "[pick("Volunteer", "Part-Timer", "Last Line", "Fearless", "Protector", "Minuteman", "Watchdog", "Family Man", "Guardian", "Hoplite", "Home Guard", "Defender")]" ..()