diff --git a/code/datums/outfits/outfit_admin.dm b/code/datums/outfits/outfit_admin.dm
index 40c38ac0627..4a6f2a941ff 100644
--- a/code/datums/outfits/outfit_admin.dm
+++ b/code/datums/outfits/outfit_admin.dm
@@ -721,6 +721,38 @@
/obj/item/weapon/melee/classic_baton/telescopic = 1,
/obj/item/ammo_box/magazine/m50 = 2)
+/datum/outfit/admin/paranormal_ert
+ name = "Paranormal ERT member"
+
+ uniform = /obj/item/clothing/under/syndicate
+ suit = /obj/item/clothing/suit/space/hardsuit/ert/paranormal
+ back = /obj/item/weapon/storage/backpack/ert/security
+ belt = /obj/item/weapon/gun/energy/gun/nuclear
+ gloves = /obj/item/clothing/gloves/color/black
+ shoes = /obj/item/clothing/shoes/combat
+ head = /obj/item/clothing/head/helmet/space/hardsuit/ert/paranormal
+ l_ear = /obj/item/device/radio/headset/ert/alt
+ glasses = /obj/item/clothing/glasses/hud/security/sunglasses
+ id = /obj/item/weapon/card/id/centcom
+ pda = /obj/item/device/pda/centcom
+ backpack_contents = list(
+ /obj/item/weapon/storage/box/survival = 1,
+ /obj/item/clothing/mask/gas/sechailer/swat = 1,
+ /obj/item/weapon/storage/box/zipties = 1,
+ /obj/item/device/flashlight = 1)
+
+/datum/outfit/admin/paranormal_ert/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
+ . = ..()
+ if(visualsOnly)
+ return
+
+ var/obj/item/weapon/card/id/I = H.wear_id
+ if(istype(I))
+ apply_to_card(I, H, get_centcom_access("Emergency Response Team Member"), "Emergency Response Team Member")
+
+ var/obj/item/weapon/implant/L = new /obj/item/weapon/implant/mindshield(H)
+ L.implant(H)
+
/datum/outfit/admin/janitorial_ert
name = "Janitorial ERT member"
@@ -731,16 +763,18 @@
gloves = /obj/item/clothing/gloves/color/yellow
shoes = /obj/item/clothing/shoes/galoshes
head = /obj/item/clothing/head/helmet/space/hardsuit/ert/janitor
- l_ear = /obj/item/device/radio/headset/centcom
+ l_ear = /obj/item/device/radio/headset/ert/alt
glasses = /obj/item/clothing/glasses/sunglasses
id = /obj/item/weapon/card/id/centcom
pda = /obj/item/device/pda/centcom
backpack_contents = list(
/obj/item/weapon/caution = 2,
+ /obj/item/weapon/storage/box/survival = 1,
/obj/item/weapon/reagent_containers/spray/cleaner = 1,
/obj/item/weapon/storage/bag/trash = 1,
/obj/item/weapon/storage/box/lights/mixed = 1,
- /obj/item/weapon/holosign_creator = 1)
+ /obj/item/weapon/holosign_creator = 1,
+ /obj/item/device/flashlight = 1)
/datum/outfit/admin/janitorial_ert/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
. = ..()
diff --git a/code/modules/admin/secrets.dm b/code/modules/admin/secrets.dm
index c5004b9dd12..9692eac6713 100644
--- a/code/modules/admin/secrets.dm
+++ b/code/modules/admin/secrets.dm
@@ -68,9 +68,10 @@
IC Events
Teams
Send SIT - Syndicate Infiltration Team
-
Send in the Deathsquad
Send in a Syndie Strike Team
+
Send in the Deathsquad
Send in a HONKsquad
+ Send in a Gimmick Team
Change Security Level
Security Level - Green
Security Level - Blue
diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm
index f32d594834d..2279d45a8ed 100644
--- a/code/modules/admin/topic.dm
+++ b/code/modules/admin/topic.dm
@@ -2524,6 +2524,10 @@
if(usr.client.syndicate_infiltration_team())
feedback_inc("admin_secrets_fun_used",1)
feedback_add_details("admin_secrets_fun_used","SyndieInfiltrationTeam")
+ if("gimmickteam")
+ if(usr.client.gimmick_team())
+ feedback_inc("admin_secrets_fun_used",1)
+ feedback_add_details("admin_secrets_fun_used","GimmickTeam")
if("tripleAI")
usr.client.triple_ai()
feedback_inc("admin_secrets_fun_used",1)
diff --git a/code/modules/admin/verbs/gimmick_team.dm b/code/modules/admin/verbs/gimmick_team.dm
new file mode 100644
index 00000000000..9aecae47d17
--- /dev/null
+++ b/code/modules/admin/verbs/gimmick_team.dm
@@ -0,0 +1,84 @@
+// Gimmick Team
+// Spawns a group of player-controlled mobs with an outfit specified by the admin, at their location.
+
+/client/proc/gimmick_team()
+ set category = "Event"
+ set name = "Send Gimmick Team"
+ set desc = "Spawns a group of players in the specified outfit."
+ if(!check_rights(R_EVENT))
+ return
+ if(!ticker)
+ alert("The game hasn't started yet!")
+ return
+ if(alert("Do you want to spawn a Gimmick Team at YOUR CURRENT LOCATION?",,"Yes","No")=="No")
+ return
+ var/pick_manually = 0
+ if(alert("Pick the team members manually? If you select yes, you pick from ghosts. If you select no, ghosts get offered the chance to join.",,"Yes","No")=="Yes")
+ pick_manually = 1
+ var/list/teamsizeoptions = list(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
+ var/teamsize = input(src, "How many team members?") as null|anything in teamsizeoptions
+ if(!(teamsize in teamsizeoptions))
+ alert("Invalid team size specified. Aborting.")
+ return
+ var/themission = null
+ while(!themission)
+ themission = sanitize(copytext(input(src, "Please specify a briefing message for the team.", "Specify Mission", ""),1,MAX_MESSAGE_LEN))
+ if(!themission)
+ alert("No mission specified. Aborting.")
+ return
+ var/admin_outfits = subtypesof(/datum/outfit/admin)
+ var/outfit_list = list()
+ for(var/type in admin_outfits)
+ var/datum/outfit/admin/O = type
+ outfit_list[initial(O.name)] = type
+ var/dresscode = input("Select Outfit", "Dress-a-mob") as null|anything in outfit_list
+ if(isnull(dresscode))
+ return
+
+ var/list/players_to_spawn = list()
+ if(pick_manually)
+ var/list/possible_ghosts = list()
+ for(var/mob/dead/observer/G in player_list)
+ if(!G.client.is_afk())
+ if(!(G.mind && G.mind.current && G.mind.current.stat != DEAD))
+ possible_ghosts += G
+ for(var/i=teamsize,(i>0&&possible_ghosts.len),i--) //Decrease with every member selected.
+ var/candidate = input("Pick characters to spawn. This will go on until there either no more ghosts to pick from, or the slots are full.", "Active Players") as null|anything in possible_ghosts // auto-picks if only one candidate
+ possible_ghosts -= candidate
+ players_to_spawn += candidate
+ else
+ to_chat(src, "Polling candidates...")
+ players_to_spawn = pollCandidates("Do you want to play as an event character?")
+
+ if(!players_to_spawn.len)
+ to_chat(src, "Nobody volunteered.")
+ return 0
+
+ var/datum/outfit/O = outfit_list[dresscode]
+ var/turf/T = get_turf(mob)
+ for(var/mob/thisplayer in players_to_spawn)
+ var/mob/living/carbon/human/H = new /mob/living/carbon/human(T)
+ H.name = random_name(pick(MALE,FEMALE))
+ var/datum/preferences/A = new() //Randomize appearance
+ A.real_name = H.name
+ A.copy_to(H)
+ H.dna.ready_dna(H)
+
+ H.mind_initialize()
+ H.mind.assigned_role = "MODE"
+ H.mind.special_role = "Event Character"
+ ticker.mode.traitors |= H.mind //Adds them to extra antag list
+
+ H.key = thisplayer.key
+
+ H.equipOutfit(O, FALSE)
+
+ to_chat(H, "
[themission]")
+
+
+ message_admins("[key_name_admin(src)] has spawned a Gimmick Team.", 1)
+ log_admin("[key_name(src)] used Spawn Gimmick Team.")
+ feedback_add_details("admin_verb","SPAWNGIM") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
+
+// ---------------------------------------------------------------------------------------------------------
+
diff --git a/paradise.dme b/paradise.dme
index e0bd5450ef0..411d10f73ba 100644
--- a/paradise.dme
+++ b/paradise.dme
@@ -1047,6 +1047,7 @@
#include "code\modules\admin\verbs\dice.dm"
#include "code\modules\admin\verbs\freeze.dm"
#include "code\modules\admin\verbs\getlogs.dm"
+#include "code\modules\admin\verbs\gimmick_team.dm"
#include "code\modules\admin\verbs\honksquad.dm"
#include "code\modules\admin\verbs\infiltratorteam_syndicate.dm"
#include "code\modules\admin\verbs\map_template_loadverb.dm"