Skip to content

Commit

Permalink
Suppression Agents (vlggms#2001)
Browse files Browse the repository at this point in the history
* Suppression agents

easier cityweapons

Update CentCom.dmm

Update suppression.dm

Update suppression.dm

Update agent.dm

Update agent.dm

Update suppression.dm

asd

Update suppression.dm

Update code/modules/jobs/job_types/suppression.dm

udpate

Update agent.dm

updates to examine

Update CentCom.dmm

Update suppression.dm

finishes

Update CentCom.dmm

* Update ego_gun.dm
  • Loading branch information
Kitsunemitsu authored Apr 18, 2024
1 parent 711f1cb commit a95e7fe
Show file tree
Hide file tree
Showing 17 changed files with 1,813 additions and 1,517 deletions.
Binary file modified ModularTegustation/Teguicons/head_item.dmi
Binary file not shown.
Binary file modified ModularTegustation/Teguicons/head_worn.dmi
Binary file not shown.
3,034 changes: 1,547 additions & 1,487 deletions _maps/map_files/generic/CentCom.dmm

Large diffs are not rendered by default.

34 changes: 18 additions & 16 deletions code/__DEFINES/jobs.dm
Original file line number Diff line number Diff line change
Expand Up @@ -22,28 +22,30 @@
#define JOB_DISPLAY_ORDER_CAPTAIN 7
#define JOB_DISPLAY_ORDER_AGENT 8
#define JOB_DISPLAY_ORDER_INTERN 9
#define JOB_DISPLAY_ORDER_SUPPRESSION 10

//Not affiliated with LC
#define JOB_DISPLAY_ORDER_MEDICAL 10
#define JOB_DISPLAY_ORDER_MEDICALASSIST 11
#define JOB_DISPLAY_ORDER_HHPP 12
#define JOB_DISPLAY_ORDER_CIVILIAN 13
#define JOB_DISPLAY_ORDER_ANTAG 14
#define JOB_DISPLAY_ORDER_DIRECTOR 15
#define JOB_DISPLAY_ORDER_VETERAN 16
#define JOB_DISPLAY_ORDER_ASSOCIATION 17
#define JOB_DISPLAY_ORDER_FIXERLEAD 18
#define JOB_DISPLAY_ORDER_FIXER 19
#define JOB_DISPLAY_ORDER_MEDICAL 11
#define JOB_DISPLAY_ORDER_MEDICALASSIST 12
#define JOB_DISPLAY_ORDER_HHPP 13
#define JOB_DISPLAY_ORDER_CIVILIAN 14
#define JOB_DISPLAY_ORDER_ANTAG 15
#define JOB_DISPLAY_ORDER_DIRECTOR 16
#define JOB_DISPLAY_ORDER_VETERAN 17
#define JOB_DISPLAY_ORDER_ASSOCIATION 18
#define JOB_DISPLAY_ORDER_FIXERLEAD 19
#define JOB_DISPLAY_ORDER_FIXER 20

//RP roles
#define JOB_DISPLAY_ORDER_REPRESENTATIVE 20
#define JOB_DISPLAY_ORDER_MISC 21
#define JOB_DISPLAY_ORDER_REPRESENTATIVE 22

//Syndicate
#define JOB_DISPLAY_ORDER_SYNDICATEHEAD 21
#define JOB_DISPLAY_ORDER_SYNDICATEVET 22
#define JOB_DISPLAY_ORDER_SYNDICATESUPPORT 23
#define JOB_DISPLAY_ORDER_SYNDICATEGOON 24
#define JOB_DISPLAY_ORDER_SYNDICATEEXTRA 25
#define JOB_DISPLAY_ORDER_SYNDICATEHEAD 23
#define JOB_DISPLAY_ORDER_SYNDICATEVET 24
#define JOB_DISPLAY_ORDER_SYNDICATESUPPORT 25
#define JOB_DISPLAY_ORDER_SYNDICATEGOON 26
#define JOB_DISPLAY_ORDER_SYNDICATEEXTRA 27

//Clerk
#define JOB_DISPLAY_ORDER_CLERK 999
10 changes: 5 additions & 5 deletions code/game/objects/items/ego_weapons/_ego_weapon.dm
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,9 @@
/// How much knockback does this weapon deal, if at all?
var/knockback = FALSE

//Is there a bonus to equipping this?
var/equip_bonus = 0

/obj/item/ego_weapon/attack(mob/living/target, mob/living/user)
if(!CanUseEgo(user))
return FALSE
Expand Down Expand Up @@ -95,9 +98,6 @@
if(2 to INFINITY)
. += span_notice("This weapon attacks extremely slow.")

if(!knockback)
return

switch(knockback)
if(KNOCKBACK_LIGHT)
. += span_notice("This weapon has slight enemy knockback.")
Expand All @@ -108,7 +108,7 @@
if(KNOCKBACK_HEAVY)
. += span_notice("This weapon has neck-snapping enemy knockback.")

else
else if(knockback)
. += span_notice("This weapon has [knockback >= 10 ? "neck-snapping": ""] enemy knockback.")

/obj/item/ego_weapon/Topic(href, href_list)
Expand Down Expand Up @@ -136,7 +136,7 @@

var/mob/living/carbon/human/H = user
for(var/atr in attribute_requirements)
if(attribute_requirements[atr] > get_attribute_level(H, atr))
if(attribute_requirements[atr] > get_attribute_level(H, atr) + equip_bonus)
to_chat(H, span_notice("You cannot use [src]!"))
return FALSE
if(!SpecialEgoCheck(H))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,44 @@ Kirie*/
lefthand_file = 'ModularTegustation/Teguicons/lc13_left.dmi'
righthand_file = 'ModularTegustation/Teguicons/lc13_right.dmi'


//City weapons have extremely high requirements. These people will be able to use them a little earlier.
/obj/item/ego_weapon/city/examine(mob/user)
. = ..()
if(user.mind)
if(user.mind.assigned_role in list("Disciplinary Officer", "Emergency Response Agent")) //These guys get a bonus to equipping gacha.
. += span_notice("Due to your abilities, you get a +20 to your stats when equipping this weapon.")

/obj/item/ego_weapon/city/CanUseEgo(mob/living/user)
if(user.mind)
if(user.mind.assigned_role in list("Disciplinary Officer", "Emergency Response Agent")) //These guys get a bonus to equipping gacha.
equip_bonus = 20
else
equip_bonus = 0
. = ..()



/obj/item/gun/ego_gun/city
icon = 'ModularTegustation/Teguicons/lc13_weapons.dmi'
lefthand_file = 'ModularTegustation/Teguicons/lc13_left.dmi'
righthand_file = 'ModularTegustation/Teguicons/lc13_right.dmi'

/obj/item/gun/ego_gun/city/examine(mob/user)
. = ..()
if(user.mind)
if(user.mind.assigned_role in list("Disciplinary Officer", "Emergency Response Agent")) //These guys get a bonus to equipping gacha.
. += span_notice("Due to your abilities, you get a +20 to your stats when equipping this weapon.")

/obj/item/gun/ego_gun/city/CanUseEgo(mob/living/user)
if(user.mind)
if(user.mind.assigned_role in list("Disciplinary Officer", "Emergency Response Agent")) //These guys get a bonus to equipping gacha.
equip_bonus = 20
else
equip_bonus = 0
. = ..()


/*This place has different balance, from grade 1 to 8
Grade 8 - 18 DPS No requirements; all garbage
Grade 7 - 22 DPS (Teth) No requirements
Expand Down
9 changes: 9 additions & 0 deletions code/modules/clothing/head/departmentberet.dm
Original file line number Diff line number Diff line change
Expand Up @@ -33,3 +33,12 @@
name = "welfare head beret"
desc = "A blue beret emblazened with the welfare logo. It smells of coffee."
icon_state = "beret_com"

//Other agents
//Agent beret
/obj/item/clothing/head/beret/tegu/lobotomy/agent
name = "agent head beret"
desc = "A grey beret that's standard among lobotomy corporation agents."
icon_state = "beret_mining"


3 changes: 2 additions & 1 deletion code/modules/clothing/suits/ego_gear/_ego_gear.dm
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
var/obj/item/clothing/head/ego_hat/hat = null // Hat type, see clothing/head/_ego_head.dm
var/obj/item/clothing/neck/ego_neck/neck = null // Neckwear, see clothing/neck/_neck.dm
var/list/attribute_requirements = list()
var/equip_bonus

/obj/item/clothing/suit/armor/ego_gear/Initialize()
. = ..()
Expand Down Expand Up @@ -81,7 +82,7 @@

var/mob/living/carbon/human/H = user
for(var/atr in attribute_requirements)
if(attribute_requirements[atr] > get_attribute_level(H, atr))
if(attribute_requirements[atr] > get_attribute_level(H, atr) + equip_bonus)
to_chat(H, "<span class='notice'>You cannot use [src]!</span>")
return FALSE
if(!SpecialEgoCheck(H))
Expand Down
16 changes: 16 additions & 0 deletions code/modules/clothing/suits/ego_gear/non_abnormality/_cityarmor.dm
Original file line number Diff line number Diff line change
@@ -1,3 +1,19 @@
/obj/item/clothing/suit/armor/ego_gear/city
icon = 'icons/obj/clothing/ego_gear/lc13_armor.dmi'
worn_icon = 'icons/mob/clothing/ego_gear/lc13_armor.dmi'


//City armor have extremely high requirements. These people will be able to use them a little earlier.
/obj/item/clothing/suit/armor/ego_gear/city/examine(mob/user)
. = ..()
if(user.mind)
if(user.mind.assigned_role in list("Disciplinary Officer", "Emergency Response Agent")) //These guys get a bonus to equipping gacha.
. += span_notice("Due to your abilities, you get a +20 to your stats when equipping this armor.")

/obj/item/clothing/suit/armor/ego_gear/city/CanUseEgo(mob/living/user)
if(user.mind)
if(user.mind.assigned_role in list("Disciplinary Officer", "Emergency Response Agent")) //These guys get a bonus to equipping gacha.
equip_bonus = 20
else
equip_bonus = 0
. = ..()
2 changes: 1 addition & 1 deletion code/modules/jobs/access.dm
Original file line number Diff line number Diff line change
Expand Up @@ -374,7 +374,7 @@

/proc/get_all_jobs()
return list("Clerk","Agent Intern", "Agent", "Senior Agent", "Veteran Agent", "Agent Lieutenant", "Agent Captain", "Department Captain", "Department Head", "Sephirah", "Records Officer", "Extraction Officer", "Manager", "Main Office Representative",
"Rabbit Team", "Rabbit Team Leader",
"Rabbit Team", "Rabbit Team Leader", "Disciplinary Officer", "Emergency Response Agent",

//R Corp Assault
"Ground Commander", "Lieutenant Commander", "Operations Officer", "Rabbit Squad Captain", "Reindeer Squad Captain", "Rhino Squad Captain", "Raven Squad Captain",
Expand Down
13 changes: 9 additions & 4 deletions code/modules/jobs/job_types/agent.dm
Original file line number Diff line number Diff line change
Expand Up @@ -110,14 +110,20 @@
if(upgradecheck == "Health Hud")
var/datum/atom_hud/medsensor = GLOB.huds[DATA_HUD_MEDICAL_ADVANCED]
medsensor.add_hud_to(H)

//Enable suppression agents.
for(var/datum/job/processing in SSjob.occupations)
if(istype(processing, /datum/job/suppression/captain))
processing.total_positions = 1

return ..()


/datum/outfit/job/agent
name = "Agent"
jobtype = /datum/job/agent

head = /obj/item/clothing/head/beret/sec
head = /obj/item/clothing/head/beret/tegu/lobotomy/agent
belt = /obj/item/pda/security
ears = /obj/item/radio/headset/alt
glasses = /obj/item/clothing/glasses/sunglasses
Expand All @@ -132,8 +138,8 @@
/datum/job/agent/captain
title = "Agent Captain"
selection_color = "#BB9999"
total_positions = 2
spawn_positions = 2
total_positions = 1
spawn_positions = 1
outfit = /datum/outfit/job/agent/captain
display_order = JOB_DISPLAY_ORDER_CAPTAIN
normal_attribute_level = 20 // Used to have 21, but it was just picked for the roundstart +1 stat to instantly mirror. - Kirie/Kitsunemitsu
Expand All @@ -153,7 +159,6 @@
head = /obj/item/clothing/head/hos/beret
ears = /obj/item/radio/headset/heads/agent_captain/alt
l_pocket = /obj/item/commandprojector
suit = /obj/item/clothing/suit/armor/vest/alt
backpack_contents = list(/obj/item/melee/classic_baton=1,
/obj/item/info_printer=1,
/obj/item/announcementmaker/lcorp)
Expand Down
165 changes: 165 additions & 0 deletions code/modules/jobs/job_types/suppression.dm
Original file line number Diff line number Diff line change
@@ -0,0 +1,165 @@
/datum/job/suppression
title = "Emergency Response Agent"
department_head = list("Manager", "Disciplinary Officer")
faction = "Station"
total_positions = 0
spawn_positions = 0
supervisors = "the Manager and the Disciplinary Officer"
selection_color = "#ccaaaa"
exp_requirements = 3000
exp_type = EXP_TYPE_CREW
exp_type_department = EXP_TYPE_SECURITY

outfit = /datum/outfit/job/suppression
display_order = JOB_DISPLAY_ORDER_SUPPRESSION

access = list() // LC13:To-Do
minimal_access = list()

allow_bureaucratic_error = FALSE

roundstart_attributes = list(
FORTITUDE_ATTRIBUTE = 20,
PRUDENCE_ATTRIBUTE = 20,
TEMPERANCE_ATTRIBUTE = 20,
JUSTICE_ATTRIBUTE = 20
)

job_important = "You are an L-Corp Emergency Response Agent. Your job is to suppress Abnormalities. You cannot work. Use :h to talk on your departmental radio."
job_abbreviation = "ERA"

var/normal_attribute_level = 20 // Scales with round time & facility upgrades

/datum/job/suppression/after_spawn(mob/living/carbon/human/H, mob/M, latejoin = FALSE)
ADD_TRAIT(H, TRAIT_WORK_FORBIDDEN, JOB_TRAIT)

//Blatant Copypasta. pls fix
var/set_attribute = normal_attribute_level

// Variables from abno queue subsystem
var/spawned_abnos = SSabnormality_queue.spawned_abnos
var/rooms_start = SSabnormality_queue.rooms_start

if(spawned_abnos > rooms_start * 0.95) // Full facility!
set_attribute *= 4
else if(spawned_abnos > rooms_start * 0.7) // ALEPHs around here
set_attribute *= 3
else if(spawned_abnos > rooms_start * 0.5) // WAWs and others
set_attribute *= 2.5
else if(spawned_abnos > rooms_start * 0.35) // HEs
set_attribute *= 2
else if(spawned_abnos > rooms_start * 0.2) // Shouldn't be anything more than TETHs
set_attribute *= 1.5

set_attribute += GetFacilityUpgradeValue(UPGRADE_AGENT_STATS)*2 //Get double stats because this is all they get.

for(var/A in roundstart_attributes)
roundstart_attributes[A] = round(set_attribute)

return ..()


/datum/outfit/job/suppression
name = "Emergency Response Agent"
jobtype = /datum/job/suppression

head = /obj/item/clothing/head/beret/sec
belt = /obj/item/pda/security
ears = /obj/item/radio/headset/headset_discipline
accessory = /obj/item/clothing/accessory/armband/lobotomy/discipline
glasses = /obj/item/clothing/glasses/sunglasses
uniform = /obj/item/clothing/under/suit/lobotomy
backpack_contents = list(
/obj/item/melee/classic_baton=1,
/obj/item/suppressionupdate = 1,
)
shoes = /obj/item/clothing/shoes/laceup
gloves = /obj/item/clothing/gloves/color/black
implants = list(/obj/item/organ/cyberimp/eyes/hud/security)

// Suppression Officer
/datum/job/suppression/captain
title = "Disciplinary Officer"
selection_color = "#ccccff"
total_positions = 0
spawn_positions = 0
outfit = /datum/outfit/job/suppression/captain
display_order = JOB_DISPLAY_ORDER_COMMAND
normal_attribute_level = 20

access = list(ACCESS_COMMAND) // LC13:To-Do
exp_requirements = 6000
exp_type = EXP_TYPE_CREW
exp_type_department = EXP_TYPE_SECURITY
mapexclude = list("wonderlabs", "mini")
job_important = "You are the Disciplinary Officer. Lead the Emergency Response Agents and other Disciplinary staff into combat."

job_abbreviation = "DO"

/datum/job/suppression/captain/after_spawn(mob/living/carbon/human/H, mob/M)
. = ..()
for(var/datum/job/processing in SSjob.occupations)
if(istype(processing, /datum/job/suppression))
processing.total_positions = 3
if(istype(processing, /datum/job/suppression/captain))
processing.total_positions = 1

/datum/outfit/job/suppression/captain
name = "Disciplinary Officer"
jobtype = /datum/job/suppression/captain
head = /obj/item/clothing/head/hos/beret
ears = /obj/item/radio/headset/heads/headset_discipline
l_pocket = /obj/item/commandprojector
suit = /obj/item/clothing/suit/armor/vest/alt
backpack_contents = list(
/obj/item/melee/classic_baton=1,
/obj/item/announcementmaker/lcorp=1,
/obj/item/suppressionupdate = 1,
)


//Stat update
/obj/item/suppressionupdate
name = "stat equalizer"
desc = "A localized source of stats, only usable by Emergency Response Agents and the Disciplinary Officer"
icon = 'ModularTegustation/Teguicons/teguitems.dmi'
icon_state = "canopic_jar"
w_class = WEIGHT_CLASS_SMALL
slot_flags = ITEM_SLOT_BELT | ITEM_SLOT_POCKETS
var/list/suppressionroles = list("Emergency Response Agent", "Disciplinary Officer")

/obj/item/suppressionupdate/attack_self(mob/living/carbon/human/user)
if(!istype(user) || !(user?.mind?.assigned_role in suppressionroles))
to_chat(user, span_notice("The Gadget's light flashes red. You aren't an ERA or Disciplinary Officer. Check the label before use."))
return

var/list/attribute_list = list(FORTITUDE_ATTRIBUTE, PRUDENCE_ATTRIBUTE, TEMPERANCE_ATTRIBUTE, JUSTICE_ATTRIBUTE)

//I got lazy and this needs to be shipped out today
var/set_attribute = 20

// Variables from abno queue subsystem
var/spawned_abnos = SSabnormality_queue.spawned_abnos
var/rooms_start = SSabnormality_queue.rooms_start

if(spawned_abnos > rooms_start * 0.95) // Full facility!
set_attribute *= 4
else if(spawned_abnos > rooms_start * 0.7) // ALEPHs around here
set_attribute *= 3
else if(spawned_abnos > rooms_start * 0.5) // WAWs and others
set_attribute *= 2.5
else if(spawned_abnos > rooms_start * 0.35) // HEs
set_attribute *= 2
else if(spawned_abnos > rooms_start * 0.2) // Shouldn't be anything more than TETHs
set_attribute *= 1.5

set_attribute += GetFacilityUpgradeValue(UPGRADE_AGENT_STATS)*2 //Get double stats because this is all they get.

//Set all stats to 0
for(var/A in attribute_list)
var/processing = get_attribute_level(user, A)
user.adjust_attribute_level(A, -1*processing)

//Now we have to bring it back up
user.adjust_all_attribute_levels(set_attribute)
to_chat(user, span_notice("You feel reset, and more ready for combat."))
Loading

0 comments on commit a95e7fe

Please sign in to comment.