mirror of
https://github.com/vgstation-coders/vgstation13.git
synced 2025-12-09 16:14:13 +00:00
Create the Judge Strike team (#30252)
This commit is contained in:
@@ -21,6 +21,7 @@
|
||||
#define SPIDERINFESTATION "spider infestation"
|
||||
#define SPIDERCLAN "spider clan"
|
||||
#define XENOMORPH_HIVE "alien hivemind"
|
||||
#define JUSTICE_DEPARTMENT "justice department"
|
||||
//-------
|
||||
#define HIVEMIND "changeling hivemind"
|
||||
#define WIZFEDERATION "wizard federation"
|
||||
@@ -78,6 +79,7 @@
|
||||
#define PRISONER "prisoner"
|
||||
#define CLOWN_LING "clown ling"
|
||||
#define TAG_MIME "tag mime"
|
||||
#define JUDGE "judge"
|
||||
|
||||
#define GREET_DEFAULT "default"
|
||||
#define GREET_ROUNDSTART "roundstart"
|
||||
|
||||
@@ -852,3 +852,21 @@
|
||||
return FALSE
|
||||
return TRUE
|
||||
|
||||
//////////////////////////////////////////////
|
||||
// //
|
||||
// JUDGE ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// //
|
||||
//////////////////////////////////////////////
|
||||
|
||||
/datum/dynamic_ruleset/midround/from_ghosts/faction_based/judge
|
||||
name = "Judge"
|
||||
role_category = /datum/role/judge
|
||||
my_fac = /datum/faction/justice
|
||||
required_pop = list(101,101,101,101,101,101,101,101,101,101)
|
||||
required_candidates = 1
|
||||
max_candidates = 5
|
||||
weight = BASE_RULESET_WEIGHT
|
||||
cost = 20
|
||||
requirements = list(10,10,10,10,10,10,10,10,10,10)
|
||||
logo = "gun-logo"
|
||||
repeatable = TRUE
|
||||
|
||||
20
code/datums/gamemode/objectives/restore_order.dm
Normal file
20
code/datums/gamemode/objectives/restore_order.dm
Normal file
@@ -0,0 +1,20 @@
|
||||
/datum/objective/restore_order
|
||||
explanation_text = "Restore order to the station."
|
||||
name = "Restore order"
|
||||
|
||||
/datum/objective/restore_order/IsFulfilled()
|
||||
return count_living_antags() == 0
|
||||
|
||||
/proc/count_living_antags()
|
||||
var/living_antags = 0
|
||||
for(var/mob/guy in player_list)
|
||||
if(!guy.client)
|
||||
continue
|
||||
if(istype(guy, /mob/new_player))
|
||||
continue
|
||||
if(guy.stat == DEAD)
|
||||
continue
|
||||
if(!guy.mind || !length(guy.mind.antag_roles))
|
||||
continue
|
||||
living_antags++
|
||||
return living_antags
|
||||
94
code/datums/gamemode/role/judge.dm
Normal file
94
code/datums/gamemode/role/judge.dm
Normal file
@@ -0,0 +1,94 @@
|
||||
/datum/role/judge
|
||||
name = JUDGE
|
||||
id = JUDGE
|
||||
required_pref = JUDGE
|
||||
special_role = JUDGE
|
||||
logo_state = "gun-logo"
|
||||
wikiroute = JUDGE
|
||||
disallow_job = TRUE
|
||||
restricted_jobs = list()
|
||||
|
||||
/datum/role/judge/OnPostSetup(laterole = FALSE)
|
||||
. =..()
|
||||
if(!.)
|
||||
return
|
||||
if(ishuman(antag.current))
|
||||
var/datum/outfit/special/with_id/judge/equipment = new
|
||||
equipment.equip(antag.current)
|
||||
var/new_name = pick(antag.current.gender == MALE ? judge_male_names : judge_female_names)
|
||||
antag.current.fully_replace_character_name(antag.current.real_name, "Judge [new_name]")
|
||||
|
||||
/datum/role/judge/ForgeObjectives()
|
||||
AppendObjective(/datum/objective/restore_order)
|
||||
|
||||
/datum/role/judge/Greet(greeting, custom)
|
||||
if(!greeting)
|
||||
return
|
||||
|
||||
var/icon/logo = icon('icons/logos.dmi', logo_state)
|
||||
switch(greeting)
|
||||
if(GREET_CUSTOM)
|
||||
to_chat(antag.current, "<img src='data:image/png;base64,[icon2base64(logo)]' style='position: relative; top: 10;'/> <span class='danger'>[custom]</span>")
|
||||
else
|
||||
to_chat(antag.current, "<img src='data:image/png;base64,[icon2base64(logo)]' style='position: relative; top: 10;'/> <span class='danger'>You are a Judge! <br>The station has fallen into chaos and the crew needs your help to restore order.</span>")
|
||||
to_chat(antag.current, "<span class='bold'>Uphold the law.</span>")
|
||||
|
||||
to_chat(antag.current, "<span class='info'><a HREF='?src=\ref[antag.current];getwiki=[wikiroute]'>(Wiki Guide)</a></span>")
|
||||
|
||||
/datum/outfit/special/with_id/judge
|
||||
outfit_name = "Judge"
|
||||
|
||||
backpack_types = list(
|
||||
BACKPACK_STRING = /obj/item/weapon/storage/backpack/security,
|
||||
)
|
||||
|
||||
items_to_spawn = list(
|
||||
"Default" = list(
|
||||
slot_wear_mask_str = /obj/item/clothing/mask/gas/swat,
|
||||
slot_ears_str = /obj/item/device/radio/headset/ert,
|
||||
slot_w_uniform_str = /obj/item/clothing/under/darkred,
|
||||
slot_shoes_str = /obj/item/clothing/shoes/combat,
|
||||
slot_head_str = /obj/item/clothing/head/helmet/dredd,
|
||||
slot_glasses_str = /obj/item/clothing/glasses/hud/security,
|
||||
slot_gloves_str = /obj/item/clothing/gloves/combat,
|
||||
slot_belt_str = /obj/item/weapon/storage/belt/security,
|
||||
slot_wear_suit_str = /obj/item/clothing/suit/armor/xcomsquaddie/dredd,
|
||||
slot_l_store_str = /obj/item/weapon/storage/bag/ammo_pouch/judge
|
||||
)
|
||||
)
|
||||
|
||||
items_to_collect = list(
|
||||
/obj/item/weapon/gun/lawgiver/demolition = GRASP_LEFT_HAND,
|
||||
/obj/item/binoculars,
|
||||
/obj/item/weapon/storage/box/flashbangs,
|
||||
/obj/item/weapon/gun/projectile/shotgun/nt12/widowmaker2000,
|
||||
/obj/item/weapon/melee/classic_baton/daystick,
|
||||
/obj/item/weapon/autocuffer,
|
||||
)
|
||||
|
||||
pda_type = /obj/item/device/pda/ert
|
||||
pda_slot = slot_r_store
|
||||
id_type = /obj/item/weapon/card/id/judge
|
||||
|
||||
/datum/outfit/special/with_id/judge/post_equip(mob/living/carbon/human/H)
|
||||
equip_accessory(H, /obj/item/clothing/accessory/holster/knife/boot/preloaded/tactical, /obj/item/clothing/shoes, 5)
|
||||
return ..()
|
||||
|
||||
/obj/item/weapon/storage/bag/ammo_pouch/judge
|
||||
desc = "Designed to hold stray magazines and spare bullets. This one has been enlarged significantly."
|
||||
storage_slots = 7
|
||||
|
||||
/obj/item/weapon/storage/bag/ammo_pouch/judge/New()
|
||||
..()
|
||||
for(var/i in 1 to storage_slots)
|
||||
new /obj/item/ammo_storage/magazine/a12ga(src)
|
||||
|
||||
/datum/faction/justice
|
||||
name = "Justice Department"
|
||||
ID = JUSTICE_DEPARTMENT
|
||||
initial_role = JUDGE
|
||||
late_role = JUDGE
|
||||
desc = "I AM THE LAW"
|
||||
logo_state = "gun-logo"
|
||||
initroletype = /datum/role/judge
|
||||
roletype = /datum/role/judge
|
||||
@@ -224,6 +224,11 @@ var/global/list/obj/item/device/pda/PDAs = list()
|
||||
if (cartridge)
|
||||
cartridge.initialize()
|
||||
|
||||
/obj/item/device/pda/ert
|
||||
name = "ERT PDA"
|
||||
default_cartridge = /obj/item/weapon/cartridge/security
|
||||
icon_state = "pda-ert"
|
||||
|
||||
/obj/item/device/pda/medical
|
||||
name = "Medical PDA"
|
||||
default_cartridge = /obj/item/weapon/cartridge/medical
|
||||
|
||||
@@ -864,3 +864,12 @@
|
||||
..()
|
||||
access = get_all_accesses()
|
||||
access += get_all_centcom_access()
|
||||
|
||||
/obj/item/weapon/card/id/judge
|
||||
name = "Judge ID card"
|
||||
assignment = "Judge"
|
||||
icon_state = "ERT_empty"
|
||||
|
||||
/obj/item/weapon/card/id/judge/New()
|
||||
..()
|
||||
access = get_centcom_access("Emergency Responder")
|
||||
|
||||
@@ -31,12 +31,14 @@
|
||||
flags = FPRINT
|
||||
slot_flags = SLOT_BELT
|
||||
force = 10
|
||||
var/hurt_intent_stun_duration = 0.8 SECONDS
|
||||
var/normal_stun_duration = 0.5 SECONDS
|
||||
|
||||
/obj/item/weapon/melee/classic_baton/attack(mob/M as mob, mob/living/user as mob)
|
||||
if (clumsy_check(user) && prob(50))
|
||||
to_chat(user, "<span class='warning'>You club yourself over the head.</span>")
|
||||
user.Knockdown(8)
|
||||
user.Stun(8)
|
||||
user.Knockdown(hurt_intent_stun_duration)
|
||||
user.Stun(hurt_intent_stun_duration)
|
||||
if(ishuman(user))
|
||||
var/mob/living/carbon/human/H = user
|
||||
H.apply_damage(2*force, BRUTE, LIMB_HEAD)
|
||||
@@ -54,17 +56,17 @@
|
||||
if(!..())
|
||||
return
|
||||
playsound(src, "swing_hit", 50, 1, -1)
|
||||
if (M.stuttering < 8 && (!(M_HULK in M.mutations)) /*&& (!istype(H:wear_suit, /obj/item/clothing/suit/judgerobe))*/)
|
||||
M.stuttering = 8
|
||||
M.Stun(8)
|
||||
M.Knockdown(8)
|
||||
if (M.stuttering < hurt_intent_stun_duration && (!(M_HULK in M.mutations)) /*&& (!istype(H:wear_suit, /obj/item/clothing/suit/judgerobe))*/)
|
||||
M.stuttering = hurt_intent_stun_duration
|
||||
M.Stun(hurt_intent_stun_duration)
|
||||
M.Knockdown(hurt_intent_stun_duration)
|
||||
for(var/mob/O in viewers(M))
|
||||
if (O.client)
|
||||
O.show_message("<span class='danger'>[M] has been beaten with \the [src] by [user]!</span>", 1, "<span class='warning'>You hear someone fall</span>", 2)
|
||||
else
|
||||
playsound(src, 'sound/weapons/Genhit.ogg', 50, 1, -1)
|
||||
M.Stun(5)
|
||||
M.Knockdown(5)
|
||||
M.Stun(normal_stun_duration)
|
||||
M.Knockdown(normal_stun_duration)
|
||||
M.attack_log += text("\[[time_stamp()]\] <font color='orange'>Has been attacked with [src.name] by [user.name] ([user.ckey])</font>")
|
||||
user.attack_log += text("\[[time_stamp()]\] <font color='red'>Used the [src.name] to attack [M.name] ([M.ckey])</font>")
|
||||
log_attack("<font color='red'>[user.name] ([user.ckey]) attacked [M.name] ([M.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)])</font>")
|
||||
@@ -79,6 +81,13 @@
|
||||
if (O.client)
|
||||
O.show_message("<span class='danger'>[M] has been stunned with \the [src] by [user]!</span>", 1, "<span class='warning'>You hear someone fall</span>", 2)
|
||||
|
||||
/obj/item/weapon/melee/classic_baton/daystick
|
||||
name = "\improper Daystick"
|
||||
desc = "The Daystick is named as such as a Judge would \"beat the daylights\" out of a target."
|
||||
hurt_intent_stun_duration = 1.6 SECONDS
|
||||
normal_stun_duration = 1 SECONDS
|
||||
force = 15
|
||||
|
||||
//Telescopic baton
|
||||
/obj/item/weapon/melee/telebaton
|
||||
name = "telescopic baton"
|
||||
|
||||
@@ -100,7 +100,7 @@
|
||||
max_shells = 2
|
||||
ammo_type = "/obj/item/ammo_casing/shotgun/beanbag"
|
||||
fire_sound = 'sound/weapons/shotgun_small.ogg'
|
||||
|
||||
|
||||
/obj/item/weapon/gun/projectile/shotgun/doublebarrel/process_chambered()
|
||||
if(in_chamber)
|
||||
return 1
|
||||
@@ -167,7 +167,7 @@
|
||||
w_class = W_CLASS_MEDIUM
|
||||
slot_flags = SLOT_BELT
|
||||
ammo_type = "/obj/item/ammo_casing/shotgun/buckshot"
|
||||
|
||||
|
||||
/obj/item/weapon/gun/projectile/shotgun/doublebarrel/sawnoff/empty
|
||||
ammo_type = null
|
||||
|
||||
@@ -204,3 +204,8 @@
|
||||
var/MT = stored_magazine ? "[stored_magazine.max_ammo > 4 ? "-drum-20" : "-mag-4"]" : ""
|
||||
icon_state = "[initial(icon_state)]["[MT]"][stored_magazine ? "" : "-m"][chambered ? "" : "-e"]"
|
||||
item_state = icon_state
|
||||
|
||||
/obj/item/weapon/gun/projectile/shotgun/nt12/widowmaker2000
|
||||
name = "\improper Widowmaker 2000"
|
||||
desc = "Also known as the \"Colt Widowmaker M2000 SMG shotgun\"."
|
||||
w_class = W_CLASS_MEDIUM
|
||||
|
||||
@@ -10,6 +10,8 @@ var/list/last_names = file2list("config/names/last.txt")
|
||||
var/list/clown_names = file2list("config/names/clown.txt")
|
||||
var/list/mush_first = file2list("config/names/mushman_first.txt")
|
||||
var/list/mush_last = file2list("config/names/mushman_last.txt")
|
||||
var/list/judge_male_names = file2list("config/names/judge_male.txt")
|
||||
var/list/judge_female_names = file2list("config/names/judge_female.txt")
|
||||
|
||||
var/list/verbs = file2list("config/names/verbs.txt")
|
||||
var/list/adjectives = file2list("config/names/adjectives.txt")
|
||||
@@ -22,4 +24,4 @@ var/list/golem_names = file2list("config/names/golem.txt")
|
||||
var/list/borer_names = file2list("config/names/borer.txt")
|
||||
var/list/hologram_names = file2list("config/names/hologram.txt")
|
||||
|
||||
var/list/autoborg_silly_names = file2listExceptComments("config/names/autoborg_silly.txt")
|
||||
var/list/autoborg_silly_names = file2listExceptComments("config/names/autoborg_silly.txt")
|
||||
|
||||
16
config/names/judge_female.txt
Normal file
16
config/names/judge_female.txt
Normal file
@@ -0,0 +1,16 @@
|
||||
Anderson
|
||||
Bachmann
|
||||
Beeny
|
||||
Castillo
|
||||
Dekker
|
||||
Eastwood
|
||||
Hershey
|
||||
Janus
|
||||
Lamia
|
||||
Maitland
|
||||
McGruder
|
||||
Nixon
|
||||
Perrier
|
||||
Pin
|
||||
Sanchez
|
||||
Steel
|
||||
38
config/names/judge_male.txt
Normal file
38
config/names/judge_male.txt
Normal file
@@ -0,0 +1,38 @@
|
||||
Bruce
|
||||
Bulgarin
|
||||
Buratino
|
||||
Deacon
|
||||
Dirty Frank
|
||||
Dolman
|
||||
Dredd
|
||||
Fairfax
|
||||
Fargo
|
||||
Francisco
|
||||
Gerhart
|
||||
Giant
|
||||
Goodman
|
||||
Greel
|
||||
Griffin
|
||||
Herriman
|
||||
Izaaks
|
||||
Joyce
|
||||
Kazan
|
||||
Logan
|
||||
McTighe
|
||||
Morphy
|
||||
Niles
|
||||
Oldham
|
||||
Omar
|
||||
Pepper
|
||||
Prager
|
||||
Ramos
|
||||
Renga
|
||||
Rico
|
||||
Roffman
|
||||
Shenker
|
||||
Silver
|
||||
Smiley
|
||||
Solomon
|
||||
Stark
|
||||
Vass
|
||||
Volt
|
||||
@@ -414,6 +414,7 @@
|
||||
#include "code\datums\gamemode\objectives\objective.dm"
|
||||
#include "code\datums\gamemode\objectives\plague.dm"
|
||||
#include "code\datums\gamemode\objectives\ramble.dm"
|
||||
#include "code\datums\gamemode\objectives\restore_order.dm"
|
||||
#include "code\datums\gamemode\objectives\sample.dm"
|
||||
#include "code\datums\gamemode\objectives\silence.dm"
|
||||
#include "code\datums\gamemode\objectives\spesstv.dm"
|
||||
@@ -463,6 +464,7 @@
|
||||
#include "code\datums\gamemode\role\cultist.dm"
|
||||
#include "code\datums\gamemode\role\giant_spider.dm"
|
||||
#include "code\datums\gamemode\role\grinch.dm"
|
||||
#include "code\datums\gamemode\role\judge.dm"
|
||||
#include "code\datums\gamemode\role\legacy_cultist.dm"
|
||||
#include "code\datums\gamemode\role\madmonkey.dm"
|
||||
#include "code\datums\gamemode\role\ninja.dm"
|
||||
|
||||
Reference in New Issue
Block a user