Adds the Odyssey gamemode. (#18972)

https://forums.aurorastation.org/topic/20198-mission-briefing-auroras-gamemode-revolution

To-do:

- [x] Finish storyteller verbs.
- [x] Storyteller landmarks.
- [x] Proper storyteller spawning. Right now the gamemode system is
happy with just picking one storyteller and no actors.
- [x] Antagonist whitelists code.
- [x] Adding the Storyteller whitelist.
- [x] Mission map loading code.
- [x] Map in a bunch of missions.
- [ ] Storyteller adminhelps.

---------

Co-authored-by: Matt Atlas <liermattia@gmail.com>
Co-authored-by: DreamySkrell <>
This commit is contained in:
Matt Atlas
2024-11-26 20:18:43 +00:00
committed by GitHub
co-authored by Matt Atlas DreamySkrell <>
parent e1f5de6298
commit 1da20ad33f
194 changed files with 242505 additions and 1904 deletions
+7 -45
View File
@@ -121,7 +121,7 @@
set name = "Del-All"
// to prevent REALLY stupid deletions
var/blocked = list(/obj, /mob, /mob/living, /mob/living/carbon, /mob/living/carbon/human, /mob/abstract, /mob/abstract/observer, /mob/living/silicon, /mob/living/silicon/robot, /mob/living/silicon/ai)
var/blocked = list(/obj, /mob, /mob/living, /mob/living/carbon, /mob/living/carbon/human, /mob/abstract, /mob/abstract/ghost/observer, /mob/living/silicon, /mob/living/silicon/robot, /mob/living/silicon/ai)
var/hsbitem = input(usr, "Choose an object to delete.", "Delete:") as null|anything in typesof(/obj) + typesof(/mob) - blocked
if(hsbitem)
for(var/atom/O in world)
@@ -177,7 +177,7 @@
if(alert("This mob is being controlled by [M.ckey]. Are you sure you wish to assume control of it? [M.ckey] will be made a ghost.",,"Yes","No") != "Yes")
return
else
var/mob/abstract/observer/ghost = new/mob/abstract/observer(M,1)
var/mob/abstract/ghost/observer/ghost = new/mob/abstract/ghost/observer(M,1)
ghost.ckey = M.ckey
message_admins(SPAN_NOTICE("[key_name_admin(usr)] assumed direct control of [M]."), 1)
log_admin("[key_name(usr)] assumed direct control of [M].")
@@ -301,7 +301,7 @@
for(var/spawn_observer in chosen_observers)
var/mob/living/carbon/human/H = new /mob/living/carbon/human(get_turf(usr))
do_dressing(H)
var/mob/abstract/observer/O = spawn_observer
var/mob/abstract/ghost/observer/O = spawn_observer
H.ckey = O.ckey
qdel(O)
@@ -313,58 +313,20 @@
return
do_dressing(H)
/client/proc/do_dressing(var/mob/living/carbon/human/M = null)
/proc/do_dressing(var/mob/living/carbon/human/M = null)
if(!M || !istype(M))
M = input("Select a mob you would like to dress.", "Set Human Outfit") as null|anything in GLOB.human_mob_list
M = tgui_input_list(usr, "Select a mob you would like to dress.", "Set Human Outfit", GLOB.human_mob_list)
if(!M)
return
var/list/outfit_catagories = list()
switch(alert("Would you like ERT outfits, or standard admin outfits?", "ERT-or-Admin?", "ERT", "Admin", "Cancel"))
if("Cancel")
return
if("ERT")
outfit_catagories["SCC-ERT"] = typesof(/obj/outfit/admin/ert/scc)
outfit_catagories["NT-ERT"] = typesof(/obj/outfit/admin/ert/nanotrasen)
outfit_catagories["Deathsquad"] = typesof(/obj/outfit/admin/deathsquad)
outfit_catagories["TCFL"] = typesof(/obj/outfit/admin/ert/legion)
outfit_catagories["Syndicate"] = typesof(/obj/outfit/admin/deathsquad/syndicate)
outfit_catagories["Freelance Mercenaries"] = typesof(/obj/outfit/admin/ert/mercenary)
outfit_catagories["Free Solarian Fleets Marines"] = typesof(/obj/outfit/admin/ert/fsf)
outfit_catagories["Kataphracts"] = typesof(/obj/outfit/admin/ert/kataphract)
outfit_catagories["Eridani"] = typesof(/obj/outfit/admin/ert/ap_eridani)
outfit_catagories["IAC"] = typesof(/obj/outfit/admin/ert/iac)
outfit_catagories["Kosmostrelki"] = typesof(/obj/outfit/admin/ert/pra_cosmonaut)
outfit_catagories["Elyran Navy"] = typesof(/obj/outfit/admin/ert/elyran_trooper)
if("Admin")
outfit_catagories["Stellar Corporate Conglomerate"] = typesof(/obj/outfit/admin/scc)
outfit_catagories["NanoTrasen"] = typesof(/obj/outfit/admin/nt)
outfit_catagories["Antagonist"] = typesof(/obj/outfit/admin/syndicate)
outfit_catagories["Event"] = typesof(/obj/outfit/admin/event)
outfit_catagories["TCFL"] = typesof(/obj/outfit/admin/tcfl)
outfit_catagories["Killers"] = typesof(/obj/outfit/admin/killer)
outfit_catagories["Job"] = subtypesof(/obj/outfit/job)
outfit_catagories["Megacorps"] = subtypesof(/obj/outfit/admin/megacorp)
outfit_catagories["Pod Survivors"] = subtypesof(/obj/outfit/admin/pod)
outfit_catagories["Miscellaneous"] = typesof(/obj/outfit/admin/random)
outfit_catagories["Miscellaneous"] += /obj/outfit/admin/random_employee
var/chosen_catagory = input("Select an outfit catagory.", "Robust Quick-dress Shop") as null|anything in outfit_catagories
if(isnull(chosen_catagory))
return
var/list/outfit_types = list()
for(var/outfit in outfit_catagories[chosen_catagory])
var/obj/outfit/admin/A = new outfit
outfit_types[A.name] = A
var/chosen_outfit = input("Select an outfit.", "Robust Quick-dress Shop") as null|anything in outfit_types
var/chosen_outfit = tgui_input_list(usr, "Select an outfit.", "Set Human Outfit", GLOB.outfit_cache)
if(isnull(chosen_outfit))
return
feedback_add_details("admin_verb","SEQ") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc
var/obj/outfit/O = outfit_types[chosen_outfit]
var/obj/outfit/O = GLOB.outfit_cache[chosen_outfit]
if(O)
for(var/obj/item/I in M)
if(istype(I, /obj/item/implant))