diff --git a/code/__DEFINES/__game.dm b/code/__DEFINES/__game.dm
index f84b3d316d3c..ca8b9f1ef5de 100644
--- a/code/__DEFINES/__game.dm
+++ b/code/__DEFINES/__game.dm
@@ -147,6 +147,14 @@
#define PLAY_SYNTH (1<<5)
#define PLAY_MISC (1<<6)
+//toggles_hunting_grounds
+#define PLAY_MERC (1<<0)
+#define PLAY_TWE (1<<1)
+#define PLAY_UPP (1<<2)
+#define PLAY_CLF (1<<3)
+#define PLAY_XENO_T2 (1<<4)
+#define PLAY_XENO_T3 (1<<5)
+
//toggles_admin
/// Splits admin tabs in Statpanel
#define SPLIT_ADMIN_TABS (1<<0)
@@ -167,6 +175,8 @@
#define TOGGLES_ERT_DEFAULT (PLAY_LEADER|PLAY_MEDIC|PLAY_ENGINEER|PLAY_HEAVY|PLAY_SMARTGUNNER|PLAY_SYNTH|PLAY_MISC)
+#define TOGGLES_ERT_GROUNDS (PLAY_MERC|PLAY_TWE|PLAY_UPP|PLAY_CLF|PLAY_XENO_T2|PLAY_XENO_T3)
+
#define TOGGLES_ADMIN_DEFAULT (ADMIN_AFK_SAFE)
// Game Intents
diff --git a/code/__DEFINES/mode.dm b/code/__DEFINES/mode.dm
index 64a889f23a96..4dbb6fd0c95a 100644
--- a/code/__DEFINES/mode.dm
+++ b/code/__DEFINES/mode.dm
@@ -291,13 +291,14 @@ DEFINE_BITFIELD(whitelist_status, list(
#define FACTION_SOUTO "Souto Man"
#define FACTION_COLONIST "Colonist"
#define FACTION_YAUTJA "Yautja"
+#define FACTION_HUNTED "Hunted"
#define FACTION_ZOMBIE "Zombie"
#define FACTION_MONKEY "Monkey" // Nanu
#define FACTION_LIST_MARINE list(FACTION_MARINE)
-#define FACTION_LIST_HUMANOID list(FACTION_MARINE, FACTION_PMC, FACTION_WY, FACTION_WY_DEATHSQUAD, FACTION_CLF, FACTION_CONTRACTOR, FACTION_MARSHAL, FACTION_UPP, FACTION_FREELANCER, FACTION_SURVIVOR, FACTION_NEUTRAL, FACTION_COLONIST, FACTION_MERCENARY, FACTION_DUTCH, FACTION_HEFA, FACTION_GLADIATOR, FACTION_PIRATE, FACTION_PIZZA, FACTION_SOUTO, FACTION_YAUTJA, FACTION_ZOMBIE, FACTION_TWE)
+#define FACTION_LIST_HUMANOID list(FACTION_MARINE, FACTION_PMC, FACTION_WY, FACTION_WY_DEATHSQUAD, FACTION_CLF, FACTION_CONTRACTOR, FACTION_MARSHAL, FACTION_UPP, FACTION_FREELANCER, FACTION_SURVIVOR, FACTION_NEUTRAL, FACTION_COLONIST, FACTION_MERCENARY, FACTION_DUTCH, FACTION_HEFA, FACTION_GLADIATOR, FACTION_PIRATE, FACTION_PIZZA, FACTION_SOUTO, FACTION_YAUTJA, FACTION_ZOMBIE, FACTION_TWE, FACTION_HUNTED)
#define FACTION_LIST_ERT_OTHER list(FACTION_HEFA, FACTION_GLADIATOR, FACTION_PIRATE, FACTION_PIZZA, FACTION_SOUTO)
-#define FACTION_LIST_ERT_ALL list(FACTION_PMC, FACTION_WY_DEATHSQUAD, FACTION_WY, FACTION_CLF, FACTION_CONTRACTOR, FACTION_UPP, FACTION_FREELANCER, FACTION_MERCENARY, FACTION_DUTCH, FACTION_HEFA, FACTION_GLADIATOR, FACTION_PIRATE, FACTION_PIZZA, FACTION_SOUTO, FACTION_MARSHAL, FACTION_TWE)
+#define FACTION_LIST_ERT_ALL list(FACTION_PMC, FACTION_WY_DEATHSQUAD, FACTION_WY, FACTION_CLF, FACTION_CONTRACTOR, FACTION_UPP, FACTION_FREELANCER, FACTION_MERCENARY, FACTION_DUTCH, FACTION_HEFA, FACTION_GLADIATOR, FACTION_PIRATE, FACTION_PIZZA, FACTION_SOUTO, FACTION_MARSHAL, FACTION_TWE, FACTION_HUNTED)
#define FACTION_LIST_WY list(FACTION_PMC, FACTION_WY_DEATHSQUAD, FACTION_WY)
#define FACTION_LIST_UPP list(FACTION_UPP)
#define FACTION_LIST_CLF list(FACTION_CLF)
@@ -312,6 +313,7 @@ DEFINE_BITFIELD(whitelist_status, list(
#define FACTION_LIST_MARINE_UPP list(FACTION_MARINE, FACTION_UPP)
#define FACTION_LIST_MARINE_TWE list(FACTION_MARINE, FACTION_TWE)
#define FACTION_LIST_YAUTJA list(FACTION_YAUTJA)
+#define FACTION_LIST_HUNTED list(FACTION_HUNTED)
// Xenomorphs
#define FACTION_PREDALIEN "Predalien"
diff --git a/code/controllers/subsystem/who.dm b/code/controllers/subsystem/who.dm
index 6c817fb1245e..5f5510dc6489 100644
--- a/code/controllers/subsystem/who.dm
+++ b/code/controllers/subsystem/who.dm
@@ -46,6 +46,7 @@ SUBSYSTEM_DEF(who)
"yautja" = 0,
"infected_preds" = 0,
"humans" = 0,
+ "hunted" = 0,
"infected_humans" = 0,
"uscm" = 0,
"uscm_marines" = 0,
@@ -134,6 +135,7 @@ SUBSYSTEM_DEF(who)
factions_additional += list(list("content" = "Marines: [counted_additional["uscm_marines"]]", "color" = "#5442bd", "text" = "Players playing as Marines"))
factions_additional += list(list("content" = "Yautjas: [counted_additional["yautja"]]", "color" = "#7ABA19", "text" = "Players playing as Yautja"))
factions_additional += list(list("content" = "Infected Predators: [counted_additional["infected_preds"]]", "color" = "#7ABA19", "text" = "Players playing as Infected Yautja"))
+ factions_additional += list(list("content" = "Hunted In Preserve: [counted_additional["hunted"]]", "color" = "#476816", "text" = "Players playing as hunted in preserve"))
for(var/i in 1 to length(counted_factions))
if(!counted_factions[counted_factions[i]])
diff --git a/code/datums/emergency_calls/emergency_call.dm b/code/datums/emergency_calls/emergency_call.dm
index 241a5b3ba6d6..dddacde34776 100644
--- a/code/datums/emergency_calls/emergency_call.dm
+++ b/code/datums/emergency_calls/emergency_call.dm
@@ -49,6 +49,21 @@
var/max_engineers = 1
var/max_heavies = 1
var/max_smartgunners = 1
+ ///xeno roles
+ var/xeno_t3 = 0
+ var/xeno_t2 = 0
+ var/max_xeno_t3 = 1
+ var/max_xeno_t2 = 1
+ ///Hunting Grounds
+ var/mercs = 0
+ var/royal_marines= 0
+ var/upp = 0
+ var/clf = 0
+ var/max_mercs = 1
+ var/max_royal_marines= 1
+ var/max_upp = 1
+ var/max_clf = 1
+
var/shuttle_id = MOBILE_SHUTTLE_ID_ERT1 //Empty shuttle ID means we're not using shuttles (aka spawn straight into cryo)
var/auto_shuttle_launch = TRUE
var/spawn_max_amount = FALSE
diff --git a/code/datums/emergency_calls/pred_hunt/hunting_calls.dm b/code/datums/emergency_calls/pred_hunt/hunting_calls.dm
new file mode 100644
index 000000000000..cf8a0fff8358
--- /dev/null
+++ b/code/datums/emergency_calls/pred_hunt/hunting_calls.dm
@@ -0,0 +1,154 @@
+//Predator Hunting Ground ERTs
+
+
+/datum/emergency_call/pred
+ name = "template"
+ probability = 0
+ name_of_spawn = /obj/effect/landmark/ert_spawns/distress/hunt_spawner
+ shuttle_id = ""
+ var/hunt_name
+ var/message = "You are still expected to uphold the RP of the standard as this character!"
+
+/datum/emergency_call/pred/mixed
+ name = "Hunting Grounds multi Faction Small"
+ hunt_name = "Multi Faction (small)"
+ mob_max = 4
+ mob_min = 1
+ max_clf = 1
+ max_upp = 1
+ max_royal_marines = 1
+
+/datum/emergency_call/pred/create_member(datum/mind/man, turf/override_spawn_loc)
+ var/turf/spawn_loc = override_spawn_loc ? override_spawn_loc : get_spawn_point()
+
+ if(!istype(spawn_loc))
+ return //Didn't find a useable spawn point.
+
+ var/mob/living/carbon/human/hunted = new(spawn_loc)
+ man.transfer_to(hunted, TRUE)
+
+ if(mercs < max_mercs && HAS_FLAG(hunted.client.prefs.toggles_ert_pred, PLAY_MERC))
+ mercs++
+ var/list/hunted_types = list(/datum/equipment_preset/other/freelancer/leader/hunted, /datum/equipment_preset/other/freelancer/standard/hunted)
+ var/hunted_type = pick(hunted_types)
+ arm_equipment(hunted, hunted_type , TRUE, TRUE)
+ to_chat(hunted, SPAN_BOLD("No one is more professional than I. Unlike other mercenaries, your group was registered as a legitimate business that dealt in violence. Working for various high profile clients, information classified to the public circulated somewhat freely in your circle - stories you dismissed as anecdotal or hearsay. The last job you took proved particularly hazardous and truthful: as you were clearing local fauna around a dig site, a massive man-shaped shimmering thing lunged at you and knocked you out in one blow. Groggily opening your eyes, you try to make sense of your surroundings, and get up."))
+ else if(upp < max_upp && HAS_FLAG(hunted.client.prefs.toggles_ert_pred, PLAY_UPP))
+ upp++
+ var/list/hunted_types = list(/datum/equipment_preset/upp/soldier/hunted, /datum/equipment_preset/upp/leader/hunted, /datum/equipment_preset/upp/machinegunner/hunted, /datum/equipment_preset/upp/sapper/hunted)
+ var/hunted_type = pick(hunted_types)
+ arm_equipment(hunted, hunted_type , TRUE, TRUE)
+ to_chat(hunted, SPAN_BOLD("Life was alright. Previously relocated from your noisier post on the frontier, you were now stationed just on the outer veil of Union territory. Combat patrols and sawdust rations turned into boring guard shifts and proper food, making your peacekeeping duty a much envied task. Then, your life came crumbling down. An unknown alien surprised you and the rest of your garrison, slaughtering effectively everyone. Just as you were about to escape, it caught you in a trap, and dragged you into the darkness. Now awake in a completely different place, still sore from the confrontation, you wonder what you'd have to do to get back home safe and sound."))
+ else if(royal_marines < max_royal_marines && HAS_FLAG(hunted.client.prefs.toggles_ert_pred, PLAY_TWE))
+ royal_marines++
+ var/list/hunted_types = list(/datum/equipment_preset/twe/royal_marine/standard/hunted, /datum/equipment_preset/twe/royal_marine/team_leader/hunted, /datum/equipment_preset/twe/royal_marine/lieuteant/hunted)
+ var/hunted_type = pick(hunted_types)
+ arm_equipment(hunted, hunted_type , TRUE, TRUE)
+ to_chat(hunted, SPAN_BOLD("You were starting to get sick and tired of these Australians. Posted and wrangled around Oceania, you had spent the last half decade from refugee camp to metropolis, making sure order was maintained most of the time and partaking in a riot action now and then. You were ready to give about anything for your job to be more interesting, and like a monkey's paw, the wish came true. One night, your barracks got blown up before your very eyes while on guard duty, and to your dismay, it was not a terrorist. You attempted to gun the monster down, but failed, your friends torn apart before your very eyes. Being the last one alive, the thing takes you with it, shackles you, and throws you into a cell. You black out again, and wake up here, wherever you are. At least you hope things will be more interesting now, or so you tell yourself."))
+ else if(clf < max_clf && HAS_FLAG(hunted.client.prefs.toggles_ert_pred, PLAY_CLF))
+ clf++
+ var/list/hunted_types = list(/datum/equipment_preset/clf/soldier/hunted, /datum/equipment_preset/clf/leader/hunted, /datum/equipment_preset/clf/engineer/hunted)
+ var/hunted_type = pick(hunted_types)
+ arm_equipment(hunted, hunted_type , TRUE, TRUE)
+ to_chat(hunted, SPAN_BOLD("Your whole life was a struggle. Fighting tooth and nail for the independence of your colony from one master to the next, with not much change, your home ended up crushed under the boot of the oppressor. Filled with rage, you traveled with your cell of freedom fighters from one system to the next, wreaking havoc and mayhem, which eventually makes you notorious for your brutal executions of government officials and military. While on a raid gone wrong, your comrades get slaughtered by a marine squad, and as you scamper to get away, something else catches you off guard. KO'd and taken away, you wake up in conditions not much different from your previous ones, determined to get revenge against your oppressor once more."))
+ else
+ var/list/hunted_types = list(/datum/equipment_preset/uscm/rifleman_pve/hunted, /datum/equipment_preset/uscm/tl_pve/hunted, /datum/equipment_preset/uscm/sg_pve/hunted,)
+ var/hunted_type = pick(hunted_types)
+ arm_equipment(hunted, hunted_type , TRUE, TRUE)
+ to_chat(hunted, SPAN_BOLD("You dreamt of becoming the ultimate badass ever since you were a kid. Nukes, knives, sharp sticks - and the corps was for you, enlisting into the marines as soon as you could join. There were little regrets from you, happily gunning down anything, anytime, and anywhere you were told to go... until now. During a jungle patrol, your entire squad was torn to shreds by a single cloaker - something you previously figured was made up just to scare chickenshit privates. Riddling the freak with bullet holes, it finally catches you off guard, and after that it's all hazy. Waking up, you realize you're still alive... and that it left you with your weapon. Big mistake. You get up."))
+
+ addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(playsound_client), hunted.client, 'sound/misc/hunt_begin.ogg'), 10 SECONDS)
+ show_blurb(hunted, 15, message, null, "center", "center", COLOR_RED, null, null, 1)
+
+/datum/emergency_call/pred/mixed/medium
+ name = "Hunting Grounds multi Faction Medium"
+ hunt_name = "Multi Faction (group)"
+ mob_max = 6
+ mob_min = 4
+ max_clf = 2
+ max_upp = 2
+ max_royal_marines = 1
+ max_mercs = 1
+
+
+/datum/emergency_call/pred/mixed/hard
+ name = "Hunting Grounds multi Faction Large"
+ hunt_name = "Multi Faction (large)"
+ mob_max = 8
+ mob_min = 6
+ max_clf = 2
+ max_upp = 2
+ max_royal_marines = 1
+ max_mercs = 1
+
+/datum/emergency_call/pred/mixed/harder
+ name = "Hunting Grounds multi Faction Larger"
+ hunt_name = "Multi Faction (larger)"
+ mob_max = 12
+ mob_min = 6
+ max_clf = 3
+ max_upp = 2
+ max_royal_marines = 2
+ max_mercs = 2
+
+/datum/emergency_call/pred/xeno
+ name = "Hunting Grounds Xenos Small"
+ hunt_name = "serpents (small)"
+ name_of_spawn = /obj/effect/landmark/ert_spawns/distress/hunt_spawner/xeno
+ mob_max = 4
+ mob_min = 1
+ hostility = TRUE
+ max_xeno_t3 = 1
+ max_xeno_t2 = 1
+
+/datum/emergency_call/pred/xeno/create_member(datum/mind/player, turf/override_spawn_loc)
+ var/turf/spawn_loc = override_spawn_loc ? override_spawn_loc : get_spawn_point()
+ var/mob/current_mob = player.current
+ var/mob/living/carbon/xenomorph/new_xeno
+
+ if(!istype(spawn_loc))
+ return // Didn't find a usable spawn point.
+
+ if(xeno_t3 < max_xeno_t3 && HAS_FLAG(current_mob.client.prefs.toggles_ert_pred, PLAY_XENO_T3))
+ xeno_t3++
+ var/list/xeno_types = list(/mob/living/carbon/xenomorph/praetorian, /mob/living/carbon/xenomorph/ravager)
+ var/xeno_type = pick(xeno_types)
+ new_xeno = new xeno_type(spawn_loc, null, XENO_HIVE_FERAL)
+ player.transfer_to(new_xeno, TRUE)
+ QDEL_NULL(current_mob)
+ to_chat(new_xeno, SPAN_BOLD("You are a xeno"))
+ else if(xeno_t2 < max_xeno_t2 && HAS_FLAG(current_mob.client.prefs.toggles_ert_pred, PLAY_XENO_T2))
+ xeno_t2++
+ var/list/xeno_types = list(/mob/living/carbon/xenomorph/lurker, /mob/living/carbon/xenomorph/warrior)
+ var/xeno_type = pick(xeno_types)
+ new_xeno = new xeno_type(spawn_loc, null, XENO_HIVE_FERAL)
+ player.transfer_to(new_xeno, TRUE)
+ QDEL_NULL(current_mob)
+ to_chat(new_xeno, SPAN_BOLD("You are a xeno let loose on a strang "))
+ else
+ var/list/xeno_types = list(/mob/living/carbon/xenomorph/drone)
+ var/xeno_type = pick(xeno_types)
+ new_xeno = new xeno_type(spawn_loc, null, XENO_HIVE_FERAL)
+ player.transfer_to(new_xeno, TRUE)
+ to_chat(new_xeno, SPAN_BOLD("You are a xeno"))
+
+ addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(playsound_client), new_xeno.client, 'sound/misc/hunt_begin.ogg'), 10 SECONDS)
+ show_blurb(new_xeno, 15, message, null, "center", "center", COLOR_RED, null, null, 1)
+
+/datum/emergency_call/pred/xeno/med
+ name = "Hunting Grounds Xenos Medium"
+ hunt_name = "serpents (group)"
+ mob_max = 6
+ mob_min = 3
+ hostility = TRUE
+ max_xeno_t3 = 3
+ max_xeno_t2 = 1
+
+/datum/emergency_call/pred/xeno/hard
+ name = "Hunting Grounds Xenos Large"
+ hunt_name = "serpents (large)"
+ mob_max = 8
+ mob_min = 4
+ hostility = TRUE
+ max_xeno_t3 = 3
+ max_xeno_t2 = 3
diff --git a/code/datums/lazy_template.dm b/code/datums/lazy_template.dm
index 03715cbd80b8..9d85d9cf56dc 100644
--- a/code/datums/lazy_template.dm
+++ b/code/datums/lazy_template.dm
@@ -91,6 +91,13 @@
for(var/thing in (turf.get_all_contents() - turf))
loaded_atom_movables |= thing
+ for(var/turf/initializing_turf as anything in loaded_turfs)
+ var/area/turf_area = initializing_turf.loc // not using get_area as these are turfs, and the loc is guaranteed to be an area
+ if(!turf_area.static_lighting)
+ continue
+
+ new/datum/static_lighting_object(initializing_turf)
+
SSatoms.InitializeAtoms(loaded_areas + loaded_atom_movables + loaded_turfs)
SEND_SIGNAL(src, COMSIG_LAZY_TEMPLATE_LOADED, loaded_atom_movables, loaded_turfs, loaded_areas)
diff --git a/code/datums/soundOutput.dm b/code/datums/soundOutput.dm
index cc7334d2cb98..b17c6d3c66fb 100644
--- a/code/datums/soundOutput.dm
+++ b/code/datums/soundOutput.dm
@@ -141,6 +141,8 @@
/// Pulls mob's area's sound_environment and applies if necessary and not overridden.
/datum/soundOutput/proc/update_area_environment()
var/area/owner_area = get_area(owner.mob)
+ if(!owner_area)
+ return
var/new_environment = owner_area.sound_environment
if(owner.mob.sound_environment_override != SOUND_ENVIRONMENT_NONE) //override in effect, can't apply
diff --git a/code/game/turfs/floor_types.dm b/code/game/turfs/floor_types.dm
index 5e72483f420f..78ab82712409 100644
--- a/code/game/turfs/floor_types.dm
+++ b/code/game/turfs/floor_types.dm
@@ -2306,9 +2306,6 @@
/turf/open/floor/corsat/squareswood/north
dir = NORTH
-/turf/open/floor/corsat/tan
- icon_state = "tan"
-
/turf/open/floor/corsat/tan/north
dir = NORTH
@@ -3571,3 +3568,22 @@
/turf/open/floor/yellowfull
icon_state = "yellowfull"
+
+/turf/open/floor/corsat/squareswood/pred
+ icon_state = "squareswood"
+
+/turf/open/floor/corsat/squareswood/pred/north
+ dir = NORTH
+
+/turf/open/floor/strata/gray_multi_tiles/pred
+ color = "#5e5d5d"
+ icon_state = "multi_tiles"
+
+/turf/open/floor/strata/gray_multi_tiles/south/pred
+ dir = SOUTH
+
+/turf/open/floor/cult/pred
+ icon_state = "cult"
+
+/turf/open/gm/grass/grass2/pred
+ icon_state = "grass2"
diff --git a/code/game/turfs/open.dm b/code/game/turfs/open.dm
index 680348e4d995..285abf799d62 100644
--- a/code/game/turfs/open.dm
+++ b/code/game/turfs/open.dm
@@ -449,6 +449,18 @@
baseturfs = /turf/open/gm/dirt
minimap_color = MINIMAP_DIRT
+/turf/open/gm/dirt/beach
+ icon_state = "beach"
+
+/turf/open/gm/dirt/beach/northeast
+ dir = NORTHEAST
+
+/turf/open/gm/dirt/beach/southeast
+ dir = SOUTHEAST
+
+/turf/open/gm/dirt/beach/northwest
+ dir = NORTHWEST
+
/turf/open/gm/dirt/Initialize(mapload, ...)
. = ..()
if(rand(0,15) == 0)
@@ -536,9 +548,10 @@
scorchable = "grass1"
/turf/open/gm/dirtgrassborder/north
+ dir = NORTH
/turf/open/gm/dirtgrassborder/south
- dir = 1
+ dir = 2
/turf/open/gm/dirtgrassborder/west
dir = 4
@@ -832,6 +845,9 @@
/turf/open/gm/coast/beachcorner2
icon_state = "beachcorner2"
+/turf/open/gm/coast/beachcorner2/east
+ dir = EAST
+
/turf/open/gm/coast/beachcorner2/north_west
/turf/open/gm/coast/beachcorner2/north_east
diff --git a/code/game/turfs/walls/wall_types.dm b/code/game/turfs/walls/wall_types.dm
index 8f18d1a3840a..ce27647df18e 100644
--- a/code/game/turfs/walls/wall_types.dm
+++ b/code/game/turfs/walls/wall_types.dm
@@ -479,6 +479,10 @@ INITIALIZE_IMMEDIATE(/turf/closed/wall/indestructible/splashscreen)
. = ..()
icon_state = "[type]vault"
+/turf/closed/wall/cult/hunting_grounds
+ name = "wall"
+ hull = TRUE
+
//Hangar walls
/turf/closed/wall/hangar
diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm
index 7a21df21f343..1dcc3f6cddf5 100644
--- a/code/modules/client/preferences.dm
+++ b/code/modules/client/preferences.dm
@@ -68,6 +68,7 @@ GLOBAL_LIST_INIT(bgstate_options, list(
var/toggles_sound = TOGGLES_SOUND_DEFAULT
var/toggles_flashing = TOGGLES_FLASHING_DEFAULT
var/toggles_ert = TOGGLES_ERT_DEFAULT
+ var/toggles_ert_pred = TOGGLES_ERT_GROUNDS
var/chat_display_preferences = CHAT_TYPE_ALL
var/item_animation_pref_level = SHOW_ITEM_ANIMATIONS_ALL
var/pain_overlay_pref_level = PAIN_OVERLAY_BLURRY
@@ -657,6 +658,16 @@ GLOBAL_LIST_INIT(bgstate_options, list(
dat += "Spawn as Synth: [toggles_ert & PLAY_SYNTH ? "Yes" : "No"]
"
dat += "Spawn as Miscellaneous: [toggles_ert & PLAY_MISC ? "Yes" : "No"]
"
dat += ""
+ dat += "