Tag mode : Changeling Clown Among Regular Mimes (#28601)

* Add (most) of the code for tag mode

* Dynamic mode adjustements to make it work

* Don't need that

* They are no longer a mime

* Forgot that
This commit is contained in:
ShiftyRail
2021-01-31 15:30:35 +01:00
committed by GitHub
parent 604841ffa6
commit 72725af8a1
28 changed files with 310 additions and 30 deletions

View File

@@ -307,6 +307,10 @@
#define isERT(H) (H.mind && H.mind.GetRole(RESPONDER))
#define isclownling(H) (H.mind && H.mind.GetRole(CLOWN_LING))
#define istagmime(H) (H.mind && H.mind.GetRole(TAG_MIME))
//Banning someone from the Syndicate role bans them from all antagonist roles
#define isantagbanned(H) (jobban_isbanned(H, "Syndicate"))

View File

@@ -70,6 +70,8 @@
#define STREAMER "streamer"
#define XENOMORPH "alien"
#define PRISONER "prisoner"
#define CLOWN_LING "clown ling"
#define TAG_MIME "tag mime"
#define GREET_DEFAULT "default"
#define GREET_ROUNDSTART "roundstart"

View File

@@ -640,3 +640,49 @@
G.AssignToRole(M.mind,1)
G.Greet(GREET_ROUNDSTART)
return 1
//////////////////////////////////////////////
// //
// TAG MODE (speical) ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// //
//////////////////////////////////////////////
/datum/dynamic_ruleset/roundstart/tag_mode
name = "Tag mode"
role_category = /datum/role/changeling/changeling_clown
restricted_from_jobs = list()
enemy_jobs = list()
required_pop = list(0,0,0,0,0,0,0,0,0,0)
required_candidates = 1
weight = 10
cost = 10
requirements = list(101,101,101,101,101,101,101,101,101,101) // So that's not possible to roll it naturally
high_population_requirement = 10
flags = MINOR_RULESET
/datum/dynamic_ruleset/roundstart/tag_mode/execute()
// Populate tagmode spawn list
for(var/obj/effect/landmark/A in landmarks_list)
if(A.name in valid_landmark_lists)
tag_mode_spawns += get_turf(A)
qdel(A)
A = null
continue
init_tag_mode_spawns()
// Spawn the clown...
var/mob/M = pick(candidates)
assigned += M
candidates -= M
var/datum/role/changeling/changeling_clown/clown = new
clown.AssignToRole(M.mind,1)
clown.Greet(GREET_ROUNDSTART)
// And everyone else as mimes.
for (var/mob/M2 in (mode.get_ready_players() - M))
var/datum/role/tag_mode_mime/mime = new
mime.AssignToRole(M2.mind,1)
mime.Greet(GREET_ROUNDSTART)
return 1

View File

@@ -252,6 +252,9 @@
for(var/datum/faction/F in factions)
if (F.check_win())
return 1
for(var/datum/role/R in orphaned_roles)
if (R.check_win())
return 1
if(emergency_shuttle.location==2 || ticker.station_was_nuked)
return 1
return 0

View File

@@ -1,2 +1,5 @@
/datum/objective/freeform/changeling
explanation_text = "Varied adversity is required for adaptation and evolution. Create chaos and test the limits of your powers in unusual ways so that the Hive genome can grow toward perfection."
/datum/objective/freeform/changeling_clown
explanation_text = "The scars of the clown-mime great war are still very present in your memories. You have managed to slip through, unnoticed, in this station of Mimes. The Honkmother has granted you unsual changeling powers to aid you on your task. Show them what true HONKing is."

View File

@@ -12,3 +12,6 @@
/datum/objective/survive/potions //You still get greentext if you survive
explanation_text = "Sell some potions and make loads of money."
name = "Sell potions"
/datum/objective/survive/tag_mode_mime
explanation_text = "You are an ordinary Mime living in a space station. Your goal is to survive to the end of the shift... or become something more, if you dare."

View File

@@ -15,7 +15,7 @@
..()
wikiroute = role_wiki[BLOBOVERMIND]
/datum/role/blob_overmind/OnPostSetup()
/datum/role/blob_overmind/OnPostSetup(var/laterole = FALSE)
. = ..()
AnnounceObjectives()
@@ -86,4 +86,4 @@
to_chat(antag.current, "<span class='warning'>When you have found a location, wait until you spawn; this will happen automatically and you cannot speed up the process.</span>")
to_chat(antag.current, "<span class='warning'>If you go outside of the station level, or in space, then you will die; make sure your location has lots of ground to cover.</span>")
to_chat(antag.current, "<span class='info'><a HREF='?src=\ref[antag.current];getwiki=[wikiroute]'>(Wiki Guide)</a></span>")
to_chat(antag.current, "<span class='info'><a HREF='?src=\ref[antag.current];getwiki=[wikiroute]'>(Wiki Guide)</a></span>")

View File

@@ -19,7 +19,7 @@
to_chat(antag.current, "<span class='danger'>The diseases you are carrying were added to your notes.</span>")
/datum/role/catbeast/OnPostSetup()
/datum/role/catbeast/OnPostSetup(var/laterole = FALSE)
var/mob/living/carbon/human/H = antag.current
H.set_species("Tajaran", force_organs=1)
H.my_appearance.s_tone = CATBEASTBLACK

View File

@@ -24,7 +24,7 @@
var/mimicing = ""
/datum/role/changeling/OnPostSetup()
/datum/role/changeling/OnPostSetup(var/laterole = FALSE)
. = ..()
power_holder = new /datum/power_holder/changeling(src)
antag.current.add_spell(new /spell/changeling/evolve, "changeling_spell_ready", /obj/abstract/screen/movable/spell_master/changeling )

View File

@@ -17,7 +17,7 @@
..()
wikiroute = role_wiki[CULTIST]
/datum/role/cultist/OnPostSetup()
/datum/role/cultist/OnPostSetup(var/laterole = FALSE)
. = ..()
if(!.)
return

View File

@@ -9,7 +9,7 @@
var/obj/item/weapon/storage/backpack/holding/grinch/our_bag = null
// -- Transforms us into the devlish Grinch
/datum/role/grinch/OnPostSetup()
/datum/role/grinch/OnPostSetup(var/laterole = FALSE)
. = ..()
var/mob/old_mob = antag.current
var/mob/living/simple_animal/hostile/gremlin/grinch/G = new
@@ -50,4 +50,4 @@
. += "<br/>"
for (var/obj/item/I in get_contents_in_object(our_bag))
bounty += shop_prices[I.type]
. += "The Grinch managed to steal $[bounty] worth of items!<br/>"
. += "The Grinch managed to steal $[bounty] worth of items!<br/>"

View File

@@ -48,7 +48,7 @@ datum/role/madmonkey/Greet(var/greeting,var/custom)
else //default
to_chat(antag.current, "<img src='data:image/png;base64,[icon2base64(logo)]' style='position: relative; top: 10;'/> <span class='warning'><B>You are a [name]!</B><BR>Bite crewmembers to add to your ranks!</span>")
/datum/role/madmonkey/OnPostSetup()
/datum/role/madmonkey/OnPostSetup(var/laterole = FALSE)
if(faction)
return
var/datum/faction/F = find_active_faction_by_type(/datum/faction/junglefever)

View File

@@ -13,7 +13,7 @@
stat_datum_type = /datum/stat/role/ninja
/datum/role/ninja/OnPostSetup()
/datum/role/ninja/OnPostSetup(var/laterole = FALSE)
. =..()
if(!.)
return

View File

@@ -21,7 +21,7 @@
AppendObjective(/datum/objective/escape_prisoner)
AppendObjective(/datum/objective/minimize_casualties)
/datum/role/prisoner/OnPostSetup()
/datum/role/prisoner/OnPostSetup(var/laterole = FALSE)
..()
//Make the prisoner
var/mob/living/carbon/human/H = antag.current

View File

@@ -7,7 +7,7 @@
wikiroute = ROLE_MINOR
var/remaining_vows = 3
/datum/role/rambler/OnPostSetup()
/datum/role/rambler/OnPostSetup(var/laterole = FALSE)
. =..()
if(ishuman(antag.current))
equip_rambler(antag.current)

View File

@@ -42,7 +42,7 @@
to_chat(antag.current, "<span class='info'><a HREF='?src=\ref[antag.current];getwiki=[wikiroute]'>(Wiki Guide)</a></span>")
/datum/role/revolutionary/OnPostSetup()
/datum/role/revolutionary/OnPostSetup(var/laterole = FALSE)
. = ..()
AnnounceObjectives()
@@ -57,7 +57,7 @@
stat_datum_type = /datum/stat/role/revolutionary/leader
/datum/role/revolutionary/leader/OnPostSetup()
/datum/role/revolutionary/leader/OnPostSetup(var/laterole = FALSE)
.=..()
if(!.)
return

View File

@@ -243,7 +243,7 @@
P.grant_spell()
// Return 1 on success, 0 on failure.
/datum/role/proc/OnPostSetup()
/datum/role/proc/OnPostSetup(var/laterole = FALSE)
return 1
/datum/role/proc/update_antag_hud()
@@ -252,6 +252,9 @@
/datum/role/proc/process()
return
/datum/role/proc/check_win()
return
// Create objectives here.
/datum/role/proc/ForgeObjectives()
return
@@ -574,7 +577,7 @@
/datum/role/highlander/ForgeObjectives()
AppendObjective(/datum/objective/hijack)
/datum/role/highlander/OnPostSetup()
/datum/role/highlander/OnPostSetup(var/laterole = FALSE)
. = ..()
if(!.)
return
@@ -588,7 +591,7 @@
required_pref = MALF
logo_state = "malf-logo"
/datum/role/malfAI/OnPostSetup()
/datum/role/malfAI/OnPostSetup(var/laterole = FALSE)
. = ..()
if(!.)
return
@@ -620,7 +623,7 @@ Once done, you will be able to interface with all systems, notably the onboard n
required_jobs = list("Cyborg")
logo_state = "malf-logo"
/datum/role/malfbot/OnPostSetup()
/datum/role/malfbot/OnPostSetup(var/laterole = FALSE)
if(!isrobot(antag.current))
return FALSE
Greet()
@@ -683,4 +686,4 @@ Once done, you will be able to interface with all systems, notably the onboard n
dat += "<br/>The greytide leader's former slaves were: <br/>"
for (var/ckey in former_minions)
dat += "<img src='data:image/png;base64,[icon2base64(logo_slave)]' style='position: relative; top: 10;'/> <b>[ckey]</b> as <b>[former_minions[ckey]]</b><br/>"
return jointext(dat, "")
return jointext(dat, "")

View File

@@ -24,7 +24,7 @@
to_chat(antag.current, "Entertain your audience to obtain followers and subscribers!")
antag.current << sound('sound/machines/lawsync.ogg')
/datum/role/streamer/OnPostSetup()
/datum/role/streamer/OnPostSetup(var/laterole = FALSE)
. = ..()
update_streamer_hud()
ForgeObjectives()

View File

@@ -42,7 +42,7 @@
/datum/role/wizard/summon_magic/Greet()
to_chat(antag.current, "<B>You are a Magician!</B><BR>Your own safety matters above all else, trust no one and kill anyone who gets in your way. However, armed as you are, now would be the perfect time to settle that score or grab that pair of yellow gloves you've been eyeing...")
/datum/role/wizard/summon_magic/OnPostSetup()
/datum/role/wizard/summon_magic/OnPostSetup(var/laterole = FALSE)
return TRUE
/datum/role/wizard/summon_magic/GetScoreboard()
@@ -70,9 +70,9 @@
/datum/role/wizard/summon_potions/Greet()
to_chat(antag.current, "<B>You are a Potion Seller!</B><BR>Your own safety matters abov- Fuck that, GO SELL SOME POTIONS!")
/datum/role/wizard/summon_potions/OnPostSetup()
/datum/role/wizard/summon_potions/OnPostSetup(var/laterole = FALSE)
return TRUE
/datum/role/wizard/summon_potions/GetScoreboard()
. = ..()
. += "The [name] received the following as a result of a summoning spell: [summons_received]<BR>"

View File

@@ -0,0 +1,142 @@
// -- Civvie landmarks.
var/list/valid_landmark_lists = list("Mime", "Clown", "Bartender", "Chef", "Botanist", "Assistant", "Librarian", "Chaplain")
var/list/turf/tag_mode_spawns = list()
var/list/tag_mode_non_used_spawns = list()
/proc/init_tag_mode_spawns()
if (tag_mode_spawns.len == 0)
CRASH("tag mode spawn list not initialised")
for (var/i = 1 to tag_mode_spawns.len)
tag_mode_non_used_spawns.Add(i)
// -- Clown ling
/datum/controller/gameticker
var/tag_mode_ling_iterations = 0
/datum/role/changeling/changeling_clown
name = "Changeling Clown"
disallow_job = TRUE
id = CLOWN_LING
/datum/role/changeling/changeling_clown/OnPostSetup(var/laterole = FALSE)
// Spawn them
if (!laterole)
var/index = pick(tag_mode_non_used_spawns)
antag.current.forceMove(tag_mode_spawns[index])
tag_mode_non_used_spawns -= index
// Give them the outfit
var/datum/outfit/mime/clown_ling/concrete_outfit = new
concrete_outfit.items_to_collect[/obj/item/weapon/card/id/captains_spare] = SURVIVAL_BOX // Everyone gets a spare in tagmode.
concrete_outfit.equip(antag.current)
// Give them the changeling powers
. = ..()
// Objective
ForgeObjectives()
// Make their mask special and liked to them
ticker.tag_mode_ling_iterations++
var/list/gas_mask = recursive_type_check(antag.current, /obj/item/clothing/mask/gas/clown_hat/ling_mask) // (a bit ugly but I don't see how else to do it)
for (var/obj/item/clothing/mask/gas/clown_hat/ling_mask/LM in gas_mask)
LM.our_ling = src
/datum/role/changeling/changeling_clown/ForgeObjectives()
AppendObjective(/datum/objective/freeform/changeling_clown)
/datum/role/changeling/changeling_clown/Greet(var/greeting,var/custom)
if(!greeting)
return
var/icon/logo = icon('icons/logos.dmi', logo_state)
switch (greeting)
if (GREET_ROUNDSTART)
to_chat(antag.current, "<img src='data:image/png;base64,[icon2base64(logo)]' style='position: relative; top: 10;'/> <span class='danger'>You are a Changeling Clown.</span>")
to_chat(antag.current, "<span class='danger'>You are inflitrated among the Mimes of the station. Your objective is to take them out. Be careful, as you are alone and with no backup.</span>")
to_chat(antag.current, "<span class='info'><a HREF='?src=\ref[antag.current];getwiki=[wikiroute]'>(Wiki Guide)</a></span>")
if (GREET_LATEJOIN)
to_chat(antag.current, "<img src='data:image/png;base64,[icon2base64(logo)]' style='position: relative; top: 10;'/> <span class='danger'>You have become Changeling Clown.</span>")
to_chat(antag.current, "<span class='danger'>By equipping the mask of the clown, you have lost your Mime-minity and you must now continue their work. Wipe out the remaning mimes from the station.</span>")
to_chat(antag.current, "<span class='info'><a HREF='?src=\ref[antag.current];getwiki=[wikiroute]'>(Wiki Guide)</a></span>")
AnnounceObjectives()
antag.current << sound('sound/effects/ling_intro.ogg')
/datum/role/changeling/changeling_clown/check_win()
for(var/datum/role/tag_mode_mime/R in ticker.mode.orphaned_roles)
if (!R.antag.current.stat) // alive
return FALSE
to_chat(world, "<h2>The changeling clown has won!</h2>")
to_chat(world, "<span class='notice'>All mimes are dead. The changeling clown was [antag.key], with [ticker.tag_mode_ling_iterations] changes from the original clown changeling.</span>")
return TRUE
// -- Clown cursed mask item
/obj/item/clothing/mask/gas/clown_hat/ling_mask
var/datum/role/changeling/changeling_clown/our_ling
/obj/item/clothing/mask/gas/clown_hat/ling_mask/equipped(var/mob/user, var/slot, hand_index = 0)
. = ..()
if (slot == slot_wear_mask)
if (our_ling.antag.current.stat && istagmime(user)) // Our ling is dead...
our_ling.Drop()
var/datum/role/tag_mode_mime = user.mind.GetRole(TAG_MIME)
tag_mode_mime.Drop()
user.mind.miming = 0
var/mob/living/carbon/human/H = user
for(var/spell/aoe_turf/conjure/forcewall/mime/spell in H.spell_list)
user.remove_spell(spell)
for(var/spell/targeted/oathbreak/spell in H.spell_list)
user.remove_spell(spell)
// Long live the new ling
var/datum/role/changeling/changeling_clown/CC = new
CC.AssignToRole(user.mind, 1)
CC.OnPostSetup(TRUE)
CC.Greet(GREET_LATEJOIN)
our_ling = CC
// -- Mimes
var/spawned_mimes_tag_mode = 1
/datum/role/tag_mode_mime
name = "Mime"
disallow_job = TRUE
id = TAG_MIME
/datum/role/tag_mode_mime/OnPostSetup(var/laterole = FALSE)
// Spawn them
if (tag_mode_non_used_spawns.len == 0)
init_tag_mode_spawns()
if (!laterole)
var/index = pick(tag_mode_non_used_spawns)
antag.current.forceMove(tag_mode_spawns[index])
tag_mode_non_used_spawns -= index
// Give them the outfit
var/datum/outfit/mime/concrete_outfit = new
concrete_outfit.items_to_collect[/obj/item/weapon/card/id/captains_spare] = SURVIVAL_BOX // Everyone gets a spare in tagmode.
concrete_outfit.equip(antag.current)
// Objective
ForgeObjectives()
/datum/role/tag_mode_mime/ForgeObjectives()
AppendObjective(/datum/objective/survive/tag_mode_mime)
/datum/role/tag_mode_mime/Greet(var/greeting,var/custom)
if(!greeting)
return
switch (greeting)
if (GREET_ROUNDSTART)
to_chat(antag.current, "<span class='notice'><big>You are a Mime.</big></span>")
to_chat(antag.current, "<span class='notice'>You are an ordinary mime. Your objective is to find the clown infiltred among the crew and steal his mask to gain his power - or to simply survive.</span>")

View File

@@ -284,7 +284,7 @@
if (joined)
joined.HandleRecruitedRole(newRole)
newRole.OnPostSetup(FALSE)
newRole.OnPostSetup()
if ((chosen_greeting && chosen_greeting != "custom") || (chosen_greeting == "custom" && custom_greeting))
newRole.Greet(chosen_greeting,custom_greeting)

View File

@@ -420,16 +420,30 @@
/datum/outfit/mime/post_equip(var/mob/living/carbon/human/H)
..()
H.add_spell(new /spell/aoe_turf/conjure/forcewall/mime, "grey_spell_ready")
H.add_spell(new /spell/targeted/oathbreak/)
mob_rename_self(H,"mime")
if (H.mind)
H.mind.miming = MIMING_OUT_OF_CHOICE
if (type == /datum/outfit/mime) // A bit hacky but post_equip should always call its parent.
H.add_spell(new /spell/aoe_turf/conjure/forcewall/mime, "grey_spell_ready")
H.add_spell(new /spell/targeted/oathbreak/)
mob_rename_self(H,"mime")
if (H.mind)
H.mind.miming = MIMING_OUT_OF_CHOICE
/datum/outfit/mime/post_equip_priority(var/mob/living/carbon/human/H)
items_to_collect[/obj/item/weapon/coin/clown] = SURVIVAL_BOX
return ..()
// -- Clown ling (aka fake mime)
/datum/outfit/mime/clown_ling
items_to_collect = list(
/obj/item/weapon/bikehorn = null,
/obj/item/weapon/stamp/clown = null,
/obj/item/clothing/under/rank/clown = null,
/obj/item/clothing/mask/gas/clown_hat/ling_mask = null,
)
/datum/outfit/mime/clown_ling/post_equip(var/mob/living/carbon/human/H)
. = ..()
mob_rename_self(H,"clown")
// -- Janitor
/datum/outfit/janitor

View File

@@ -46,6 +46,9 @@ var/datum/controller/gameticker/ticker
// Hack
var/obj/machinery/media/jukebox/superjuke/thematic/theme = null
// Tag mode!
var/tag_mode_enabled = FALSE
#define LOBBY_TICKING 1
#define LOBBY_TICKING_RESTARTED 2
/datum/controller/gameticker/proc/pregame()
@@ -733,6 +736,27 @@ var/datum/controller/gameticker/ticker
to_chat(R, R.connected_ai?"<b>You have synchronized with an AI. Their name will be stated shortly. Other AIs can be ignored.</b>":"<b>You are not synchronized with an AI, and therefore are not required to heed the instructions of any unless you are synced to them.</b>")
R.lawsync()
// -- Tag mode!
/datum/controller/gameticker/proc/tag_mode(var/mob/user)
tag_mode_enabled = TRUE
to_chat(world, "<h1>Tag mode enabled!<h1>")
to_chat(world, "<span class='notice'>Tag mode is a 'gamemode' about a changeling clown infiltrated in a station populated by Mimes. His goal is to destroy it. Any mime killing the clown will in turn become the changeling.</span>")
to_chat(world, "<span class='notice'>The game ends when all mimes are dead, or when the shuttle is called.</span>")
to_chat(world, "<span class='notice'>Have fun!</span>")
// This is /datum/forced_ruleset thing. This shit exists ONLY for pre-roundstart rulesets. Yes. This is a thing.
var/datum/forced_ruleset/tag_mode = new
tag_mode.name = "Tag mode"
tag_mode.calledBy = "[key_name(user)]"
forced_roundstart_ruleset += tag_mode
dynamic_forced_extended = TRUE
/datum/controller/gameticker/proc/cancel_tag_mode(var/mob/user)
tag_mode_enabled = FALSE
to_chat(world, "<h1>Tag mode has been cancelled.<h1>")
dynamic_forced_extended = FALSE
forced_roundstart_ruleset = list()
/world/proc/has_round_started()
return ticker && ticker.current_state >= GAME_STATE_PLAYING

View File

@@ -713,6 +713,7 @@ var/global/floorIsLava = 0
<A href='?src=\ref[src];xgm_panel=1'>XGM Panel</A><br>
<A href='?src=\ref[src];toggle_light=1'>Slow down lighting (Forces MC to crash, do not panic.)</A><br>
<hr />
<A href='?src=\ref[src];tag_mode=1'>Toggle tag mode! (it is currently [ticker?.tag_mode_enabled ? "On" : "Off"])</A><br>
"}
if(wages_enabled)

View File

@@ -5674,6 +5674,13 @@
mass_delete_in_zone() // Refreshes the window
else if(href_list["tag_mode"])
if (!check_rights(R_FUN))
to_chat(usr, "You don't have the necessary permissions to do this.")
return
else
toggle_tag_mode(usr)
/datum/admins/proc/updateRelWindow()
var/text = list()
text += "<h3>Religions in game</h3>"

View File

@@ -0,0 +1,17 @@
/datum/admins/proc/toggle_tag_mode(var/mob/user)
if (!check_rights(R_FUN))
to_chat(user, "<span class='notice'>You need +FUN to do this.</span>")
return
if (ticker.tag_mode_enabled)
var/confirm_cancel = alert(user, "Do you wish to cancel tag mode?", "Tag mode!", "Yes", "No")
if (confirm_cancel == "Yes")
message_admins("[key_name(user)] has cancelled tag mode.")
log_admin("[key_name(user)] has cancelled tag mode.")
ticker.cancel_tag_mode(user)
else
var/confirm = alert(user, "Do you wish to enable tag mode? All players spawn as mimes, one as a disguised clown changeling. Killing the clown changeling will grant its powers to its killer.", "Tag mode!", "Yes", "No")
if (confirm == "Yes")
message_admins("[key_name(user)] has cancelled tag mode.")
log_admin("[key_name(user)] has cancelled tag mode.")
ticker.tag_mode(user)

View File

@@ -385,6 +385,15 @@
if(character.client.prefs.randomslot)
character.client.prefs.random_character_sqlite(character, character.ckey)
// Very hacky. Sorry about that
if(ticker.tag_mode_enabled == TRUE)
character.mind.assigned_role = "MODE"
var/datum/outfit/mime/mime_outfit = new
mime_outfit.equip(character)
var/datum/role/tag_mode_mime/mime = new
mime.AssignToRole(character.mind,1)
mime.Greet(GREET_ROUNDSTART)
if(character.mind.assigned_role != "MODE")
job_master.EquipRank(character, rank, 1) //Must come before OnPostSetup for uplinks
@@ -393,7 +402,7 @@
var/turf/T = character.loc
for(var/role in character.mind.antag_roles)
var/datum/role/R = character.mind.antag_roles[role]
R.OnPostSetup()
R.OnPostSetup(TRUE) // Latejoiner post-setup.
R.ForgeObjectives()
R.AnnounceObjectives()
@@ -418,7 +427,7 @@
character.store_position()
// WHY THE FUCK IS THIS HERE
// FOR GOD'S SAKE USE EVENTS TODO: use latejoin dynamic rulesets to deal with that
// FOR GOD'S SAKE USE EVENTS TODO: use latejoin dynamic rulesets to deal with that // (they did not do that)
if(bomberman_mode)
character.client << sound('sound/bomberman/start.ogg')
if(character.wear_suit)

View File

@@ -462,6 +462,7 @@
#include "code\datums\gamemode\role\streamer.dm"
#include "code\datums\gamemode\role\summonsurvivors.dm"
#include "code\datums\gamemode\role\syndicate.dm"
#include "code\datums\gamemode\role\tag_mode.dm"
#include "code\datums\gamemode\role\vampire_role.dm"
#include "code\datums\gamemode\role\vox_raider.dm"
#include "code\datums\gamemode\role\wizard.dm"
@@ -1320,6 +1321,7 @@
#include "code\modules\admin\verbs\profiling.dm"
#include "code\modules\admin\verbs\randomverbs.dm"
#include "code\modules\admin\verbs\striketeam.dm"
#include "code\modules\admin\verbs\tagmode.dm"
#include "code\modules\admin\verbs\ticklag.dm"
#include "code\modules\admin\verbs\tripAI.dm"
#include "code\modules\admin\verbs\SDQL_2\SDQL_2.dm"