Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Event Spawn: Synthetic K9 Rescue Teams #6490

Merged
merged 50 commits into from
Oct 17, 2024
Merged
Show file tree
Hide file tree
Changes from 45 commits
Commits
Show all changes
50 commits
Select commit Hold shift + click to select a range
d039ce1
DOG INCOMING!
blackdragonTOW Jun 17, 2024
b9393ef
Add files via upload
blackdragonTOW Jun 17, 2024
8299fa0
Update code/game/objects/items/cosmetics.dm
blackdragonTOW Jun 17, 2024
479467f
Update code/modules/gear_presets/synth_k9.dm
blackdragonTOW Jun 17, 2024
4e23d91
Update code/modules/mob/living/carbon/human/powers/human_powers.dm
blackdragonTOW Jun 17, 2024
a24ad61
Update code/modules/gear_presets/synth_k9.dm
blackdragonTOW Jun 17, 2024
11ca5ee
Update code/game/objects/items/devices/scanners.dm
blackdragonTOW Jun 17, 2024
06a41c5
Update code/game/objects/items/devices/scanners.dm
blackdragonTOW Jun 17, 2024
9baeead
Update marine.dm
blackdragonTOW Jun 17, 2024
fb14e70
Update cosmetics.dm
blackdragonTOW Jun 17, 2024
b7cdb71
Update scanners.dm
blackdragonTOW Jun 17, 2024
45676ea
Various fix requests (still WIP)
blackdragonTOW Jun 17, 2024
ad7b521
Update kit_boxes.dm
blackdragonTOW Jun 17, 2024
5b9e3f2
Update marine_uniform.dm
blackdragonTOW Jun 17, 2024
6ec0f18
Update pamphlets.dm
blackdragonTOW Jun 17, 2024
8188a46
Update scanners.dm
blackdragonTOW Jun 17, 2024
e45411b
tgui inputs and more
blackdragonTOW Jun 18, 2024
8db7833
Update k9_synth.dm
blackdragonTOW Jun 18, 2024
944fcbd
Update cosmetics.dm
blackdragonTOW Jun 18, 2024
c1ab5b6
Update emote.dm
blackdragonTOW Jun 18, 2024
78282dd
species vars and prep for resolving merge conflict
blackdragonTOW Jun 19, 2024
d4b6b0e
Clearing update_icons conflic
blackdragonTOW Jun 19, 2024
fb29ffc
Merge branch 'master' into K9-Rescue-Unit
blackdragonTOW Jun 19, 2024
952627c
Final stretch of the first review!
blackdragonTOW Jun 19, 2024
c786760
Sprite Change Requests
blackdragonTOW Jun 30, 2024
7fc1668
TacMap K9 Medic icon to match new K
blackdragonTOW Jul 1, 2024
934c8ed
Minor Alignment issue, just a pixel nudge
blackdragonTOW Jul 1, 2024
acf257a
Update code/modules/mob/living/carbon/human/powers/human_powers.dm
blackdragonTOW Jul 4, 2024
528346f
Add files via upload
blackdragonTOW Jul 7, 2024
ddd745b
Add files via upload
blackdragonTOW Jul 7, 2024
cf54b65
This is so dumb
blackdragonTOW Jul 7, 2024
25e5f2c
Merge branch 'master' of https://github.com/cmss13-devs/cmss13 into K…
blackdragonTOW Jul 7, 2024
b43a4ad
Merge branch 'master' of https://github.com/cmss13-devs/cmss13 into K…
blackdragonTOW Aug 7, 2024
d3c5a33
Deconfliction
blackdragonTOW Aug 7, 2024
b40652c
Merge branch 'master' of https://github.com/cmss13-devs/cmss13 into K…
blackdragonTOW Aug 18, 2024
e6e02f8
Merge branch 'master' of https://github.com/cmss13-devs/cmss13 into K…
blackdragonTOW Aug 21, 2024
c47dc99
Merge branch 'master' of https://github.com/cmss13-devs/cmss13 into K…
blackdragonTOW Aug 23, 2024
927b121
Update code/modules/mob/living/carbon/human/update_icons.dm
blackdragonTOW Aug 23, 2024
897e95c
Update code/modules/mob/living/carbon/human/update_icons.dm
blackdragonTOW Aug 23, 2024
47807a2
Update code/game/objects/items/cosmetics.dm
blackdragonTOW Aug 23, 2024
20712f2
Update code/game/objects/items/cosmetics.dm
blackdragonTOW Aug 23, 2024
94f4be2
Update code/game/objects/items/cosmetics.dm
blackdragonTOW Aug 23, 2024
93cac24
Update code/datums/factions/uscm.dm
blackdragonTOW Aug 23, 2024
c6aee0a
Merge branch 'master' of https://github.com/cmss13-devs/cmss13 into K…
blackdragonTOW Aug 23, 2024
f1b36a5
Harry's code requests
blackdragonTOW Aug 23, 2024
872b7ca
Update code/game/objects/items/cosmetics.dm
blackdragonTOW Aug 24, 2024
f0d4448
Update code/game/objects/items/cosmetics.dm
blackdragonTOW Aug 24, 2024
71ce016
Update code/modules/mob/living/carbon/human/species/emote-synth_k9.dm
blackdragonTOW Aug 24, 2024
be9eb29
Harry code requests pt 2, and emote fix
blackdragonTOW Aug 24, 2024
5e44dc2
Update code/game/objects/items/cosmetics.dm
blackdragonTOW Oct 17, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions code/__DEFINES/human.dm
Original file line number Diff line number Diff line change
Expand Up @@ -191,6 +191,7 @@
#define SYNTH_GEN_ONE "First Generation Synthetic"
#define SYNTH_GEN_TWO "Second Generation Synthetic"
#define SYNTH_GEN_THREE "Third Generation Synthetic"
#define SYNTH_K9 "Synthetic K9"

#define PLAYER_SYNTHS list(SYNTH_GEN_ONE, SYNTH_GEN_TWO, SYNTH_GEN_THREE)
#define SYNTH_TYPES list(SYNTH_COLONY, SYNTH_COLONY_GEN_ONE, SYNTH_COLONY_GEN_TWO, SYNTH_COMBAT, SYNTH_INFILTRATOR, SYNTH_WORKING_JOE, SYNTH_GEN_ONE, SYNTH_GEN_TWO, SYNTH_GEN_THREE)
Expand Down
1 change: 1 addition & 0 deletions code/__DEFINES/job.dm
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,7 @@ GLOBAL_LIST_INIT(job_squad_roles, JOB_SQUAD_ROLES_LIST)
#define JOB_COMBAT_REPORTER "Combat Correspondent"
#define JOB_MESS_SERGEANT "Mess Technician"
#define JOB_SYNTH "Synthetic"
#define JOB_SYNTH_K9 "Synthetic K9"
#define JOB_WORKING_JOE "Working Joe"

#define JOB_CO "Commanding Officer"
Expand Down
2 changes: 2 additions & 0 deletions code/__DEFINES/mobs.dm
Original file line number Diff line number Diff line change
Expand Up @@ -218,6 +218,7 @@
#define SPECIAL_BONEBREAK (1<<13) //species do not get their bonebreak chance modified by endurance
#define NO_SHRAPNEL (1<<14)
#define HAS_HARDCRIT (1<<15)
#define NO_OVERLAYS (1<<16) // Stop OnMob overlays from appearing on sprite

//=================================================

Expand Down Expand Up @@ -346,6 +347,7 @@ GLOBAL_LIST_INIT(default_xeno_onmob_icons, list(
#define SPECIES_HUMAN "Human"
#define SPECIES_YAUTJA "Yautja"
#define SPECIES_SYNTHETIC "Synthetic"
#define SPECIES_SYNTHETIC_K9 "Synthetic K9"
#define SPECIES_MONKEY "Monkey"
#define SPECIES_ZOMBIE "Zombie"

Expand Down
3 changes: 3 additions & 0 deletions code/__DEFINES/paygrade_defs/marines.dm
Original file line number Diff line number Diff line change
Expand Up @@ -78,3 +78,6 @@

/// MO10S, Commandant of the Marine Corps
#define PAY_SHORT_MO10S "MO10S"

/// SYN_K9, Synthetic K9
#define PAY_SHORT_SYN_K9 "K9"
1 change: 1 addition & 0 deletions code/__DEFINES/typecheck/humanoids.dm
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
#define isworkingjoe(A) (ishuman(A) && istype(A?:species, /datum/species/synthetic/colonial/working_joe))
#define ishazardjoe(A) (ishuman(A) && istype(A?:species, /datum/species/synthetic/colonial/working_joe/hazard))
#define isinfiltratorsynthetic(A) (ishuman(A) && istype(A?:species, /datum/species/synthetic/infiltrator))
#define isk9synth(A) (ishuman(A) && istype(A?:species, /datum/species/synthetic/synth_k9))

//Specic group checks, use instead of typechecks (but use traits instead)
#define issamespecies(A, B) (A.species?.group == B.species?.group)
Expand Down
8 changes: 7 additions & 1 deletion code/datums/factions/uscm.dm
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,11 @@
if(JOB_SQUAD_ENGI) marine_rk = "engi"
if(JOB_SQUAD_SPECIALIST) marine_rk = "spec"
if(JOB_SQUAD_TEAM_LEADER) marine_rk = "tl"
if(JOB_SQUAD_MEDIC) marine_rk = "med"
if(JOB_SQUAD_MEDIC)
if(current_human.rank_fallback == "medk9")
marine_rk = "medk9" //We don't need Medics to lose their job when converting to K9 Handlers as it would duplicate JOB_SQUAD_MEDIC
else
marine_rk = "med"
if(JOB_SQUAD_SMARTGUN) marine_rk = "gun"
if(JOB_XO) marine_rk = "xo"
if(JOB_CO) marine_rk = "co"
Expand Down Expand Up @@ -139,6 +143,8 @@
border_rk = "command"
if(JOB_SYNTH)
marine_rk = "syn"
if(JOB_SYNTH_K9)
marine_rk = "syn_k9"
if(JOB_MESS_SERGEANT)
marine_rk = "messtech"
// Provost
Expand Down
10 changes: 10 additions & 0 deletions code/datums/paygrades/factions/uscm/marine.dm
Original file line number Diff line number Diff line change
Expand Up @@ -231,3 +231,13 @@
ranking = 25
pay_multiplier = 7
officer_grade = GRADE_FLAG

//Historical Background: Combat Dogs were given the lowest officer rank possible, they have no notional command but if someone were to abuse the animal, the offender could be charged with assaulting an officer.
/datum/paygrade/marine/k9
paygrade = PAY_SHORT_SYN_K9
name = "Second Lieutenant Combat Lifesaver"
prefix = "2ndLt Combat Lifesaver"
rank_pin = /obj/item/clothing/accessory/ranks/marine/o1
ranking = 12
pay_multiplier = 0
officer_grade = GRADE_OFFICER
25 changes: 25 additions & 0 deletions code/datums/skills/synthetic.dm
Original file line number Diff line number Diff line change
Expand Up @@ -88,3 +88,28 @@ SYNTHETIC
SKILL_DOMESTIC = SKILL_DOMESTIC_MASTER,
SKILL_ANTAG = SKILL_ANTAG_AGENT,
)

/datum/skills/synth_k9
name = "Synthetic K9"
skills = list(
SKILL_CQC = SKILL_CQC_MASTER,
SKILL_ENGINEER = SKILL_ENGINEER_DEFAULT,
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_DEFAULT,
SKILL_FIREARMS = SKILL_FIREARMS_CIVILIAN,
SKILL_SPEC_WEAPONS = SKILL_SPEC_ALL,
SKILL_LEADERSHIP = SKILL_LEAD_NOVICE,
SKILL_OVERWATCH = SKILL_OVERWATCH_DEFAULT,
SKILL_MEDICAL = SKILL_MEDICAL_MASTER,
SKILL_SURGERY = SKILL_SURGERY_DEFAULT,
SKILL_RESEARCH = SKILL_RESEARCH_DEFAULT,
SKILL_MELEE_WEAPONS = SKILL_MELEE_SUPER,
SKILL_PILOT = SKILL_PILOT_EXPERT,
SKILL_POLICE = SKILL_POLICE_SKILLED,
SKILL_FIREMAN = SKILL_FIREMAN_MAX,
SKILL_POWERLOADER = SKILL_POWERLOADER_DEFAULT,
SKILL_VEHICLE = SKILL_VEHICLE_DEFAULT,
SKILL_JTAC = SKILL_JTAC_NOVICE,
SKILL_INTEL = SKILL_INTEL_NOVICE,
SKILL_DOMESTIC = SKILL_DOMESTIC_MASTER,
SKILL_NAVIGATIONS = SKILL_NAVIGATIONS_DEFAULT,
)
28 changes: 28 additions & 0 deletions code/game/machinery/vending/vendor_types/crew/k9_synth.dm
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
/obj/structure/machinery/cm_vending/clothing/k9_synth
name = "\improper Wey-Yu Synthetic K9 Equipment Requisitions"
desc = "An automated equipment vendor for Synthetic K9s."
show_points = FALSE
req_access = list(ACCESS_MARINE_SYNTH)
vendor_role = list(JOB_SYNTH_K9)

/obj/structure/machinery/cm_vending/clothing/k9_synth/get_listed_products(mob/user)
return GLOB.cm_vending_clothing_k9_synth

//------------GEAR---------------

GLOBAL_LIST_INIT(cm_vending_clothing_k9_synth, list(
list("STANDARD EQUIPMENT (TAKE ALL)", 0, null, null, null),
list("Headset", 0, /obj/item/device/radio/headset/almayer/mcom/synth, MARINE_CAN_BUY_EAR, VENDOR_ITEM_MANDATORY),
list("K9 Serial ID Tags", 0, /obj/item/clothing/under/rank/synthetic/synth_k9, MARINE_CAN_BUY_UNIFORM, VENDOR_ITEM_MANDATORY),
list("Name Changer", 0, /obj/item/k9_name_changer/, MARINE_CAN_BUY_ACCESSORY, VENDOR_ITEM_MANDATORY),

list("HANDLER KIT (CHOOSE 1)", 0, null, null, null),
list("Squad Corpsman -> K9 Handler", 0, /obj/item/storage/box/kit/k9_handler/corpsman, MARINE_CAN_BUY_ESSENTIALS, VENDOR_ITEM_RECOMMENDED),
list("Military Police -> K9 Handler", 0, /obj/item/storage/box/kit/k9_handler/mp, MARINE_CAN_BUY_ESSENTIALS, VENDOR_ITEM_REGULAR),
harryob marked this conversation as resolved.
Show resolved Hide resolved

list("CARRYPACK (CHOOSE 1)", 0, null, null, null),
list("Medical Carry Harness", 0, /obj/item/storage/backpack/marine/k9_synth/medicalpack, MARINE_CAN_BUY_BACKPACK, VENDOR_ITEM_RECOMMENDED),
list("Cargo Carry Harness", 0, /obj/item/storage/backpack/marine/k9_synth/cargopack, MARINE_CAN_BUY_BACKPACK, VENDOR_ITEM_REGULAR),
list("MP Carry Harness", 0, /obj/item/storage/backpack/marine/k9_synth/mppack, MARINE_CAN_BUY_BACKPACK, VENDOR_ITEM_REGULAR),

))
2 changes: 2 additions & 0 deletions code/game/objects/items.dm
Original file line number Diff line number Diff line change
Expand Up @@ -163,6 +163,8 @@
var/ground_offset_x = 0
/// How much to offset the item randomly either way alongside Y visually
var/ground_offset_y = 0
/// bypass any species specific OnMob overlay blockers
var/force_overlays_on = FALSE

/// Special storages this item prioritizes
var/list/preferred_storage
Expand Down
33 changes: 33 additions & 0 deletions code/game/objects/items/cosmetics.dm
Original file line number Diff line number Diff line change
Expand Up @@ -146,3 +146,36 @@
sharp = FALSE
edge = FALSE
force = 0

/obj/item/k9_name_changer
name = "K9 name implanter"
desc = "Syncs the implanted W-Y Serial Chip to the unit's prefered name."
blackdragonTOW marked this conversation as resolved.
Show resolved Hide resolved
icon = 'icons/obj/items/items.dmi'
icon_state = "efundcard"
w_class = SIZE_TINY

/obj/item/k9_name_changer/attack_self(mob/user)
. = ..()
var/newname = capitalize(tgui_input_text(user, "What do you wish to be named", "Name:", encode = FALSE))
if(!newname)
return

var/verify = tgui_input_list(user, "Are you SURE you wish to be named: [newname]?", "Confirm", list("Yes", "No"))
if(verify != "Yes")
return

user.change_real_name(user, newname)
if(istype(user, /mob/living/carbon/human))
var/mob/living/carbon/human/altered_human = user
var/obj/item/card/id/ID = altered_human.get_idcard()
if(ID)
ID.name = "[altered_human.real_name]'s ID Card"
ID.registered_name = "[altered_human.real_name]"
if(ID.assignment)
ID.name += " ([ID.assignment])"

var/genderswap = tgui_input_list(user, "Which Gender?", "Gender", list("male", "female"))
blackdragonTOW marked this conversation as resolved.
Show resolved Hide resolved
if(!genderswap)
return
user.gender = genderswap
blackdragonTOW marked this conversation as resolved.
Show resolved Hide resolved
qdel(src)
57 changes: 57 additions & 0 deletions code/game/objects/items/devices/scanners.dm
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ PLANT ANALYZER
MASS SPECTROMETER
REAGENT SCANNER
FORENSIC SCANNER
K9 SCANNER
*/
/obj/item/device/t_scanner
name = "\improper T-ray scanner"
Expand Down Expand Up @@ -491,3 +492,59 @@ FORENSIC SCANNER
flags_atom = FPRINT
flags_equip_slot = SLOT_WAIST
inherent_traits = list(TRAIT_TOOL_TRADEBAND)

/obj/item/device/k9_scanner
name = "\improper K9 tracking device"
desc = "A small handheld tool used to track Synthetic K9 helpers, they tend to run off to strange places at inopportune times..."
icon_state = "tracking0"
item_state = "tracking1"
pickup_sound = 'sound/handling/multitool_pickup.ogg'
drop_sound = 'sound/handling/multitool_drop.ogg'
flags_atom = FPRINT
force = 5
w_class = SIZE_TINY
throwforce = 5
throw_range = 15
throw_speed = SPEED_VERY_FAST

matter = list("metal" = 50,"glass" = 20)

var/mob/living/carbon/human/tracked_k9

/obj/item/device/k9_scanner/Destroy()
. = ..()
tracked_k9 = null

/obj/item/device/k9_scanner/attack(mob/attacked_mob as mob, mob/user as mob)
if(!isk9synth(attacked_mob))
to_chat(user, SPAN_BOLDWARNING("ERROR: Cannot Sync To This."))
return
//we now know the attacked mob is a k9
tracked_k9 = attacked_mob
icon_state = "tracking1"
to_chat(user, SPAN_WARNING("[src] is now synced to: [attacked_mob]."))

/obj/item/device/k9_scanner/attack_self(mob/user)
. = ..()
if (!tracked_k9)
to_chat(user, SPAN_WARNING("ERROR: No K9 unit currently tracked. Use scanner on K9 unit to track them."))
return

var/turf/self_turf = get_turf(src)
var/turf/scanner_turf = get_turf(tracked_k9)
var/area/self_area = get_area(self_turf)
var/area/scanner_area = get_area(scanner_turf)

if(self_turf.z != scanner_turf.z || self_area.fake_zlevel != scanner_area.fake_zlevel)
to_chat(user, SPAN_BOLDWARNING("The [src] lights up: <b>UNABLE TO REACH LINKED K9!<b>"))
playsound(src, 'sound/machines/buzz-sigh.ogg', 15, TRUE)
return

var/dist = get_dist(self_turf, scanner_turf)
var/direction = dir2text(Get_Compass_Dir(self_turf, scanner_turf))
if(dist > 1)
to_chat(user, SPAN_BOLDNOTICE("[src] lights up: [tracked_k9] is <b>'[dist] meters to the [direction]</b>'"))
else
to_chat(user, SPAN_BOLDNOTICE("[src] lights up: <b>--><--</b>"))
playsound(src, 'sound/machines/ping.ogg', 15, TRUE)

37 changes: 37 additions & 0 deletions code/game/objects/items/pamphlets.dm
Original file line number Diff line number Diff line change
Expand Up @@ -99,6 +99,43 @@
ID.set_assignment((user.assigned_squad ? (user.assigned_squad.name + " ") : "") + "Spotter")
GLOB.data_core.manifest_modify(user.real_name, WEAKREF(user), "Spotter")

/obj/item/pamphlet/skill/k9_handler
name = "K9 handler instructional pamphlet"
desc = "A pamphlet used to quickly impart vital knowledge. This one has the image of a Synthetic K9 Rescue unit on it."
icon_state = "pamphlet_k9_handler"
trait = /datum/character_trait/skills/k9_handler
bypass_pamphlet_limit = TRUE

/obj/item/pamphlet/skill/k9_handler/can_use(mob/living/carbon/human/user)
if(isk9synth(user))
to_chat(user, SPAN_WARNING("You don't need to use this! Give it to another marine to make them your handler."))
return FALSE

if(user.job != JOB_SQUAD_MEDIC && user.job != JOB_POLICE)
to_chat(user, SPAN_WARNING("This is not meant for you."))
return

var/obj/item/card/id/ID = user.get_idcard()
if(!istype(ID)) //not wearing an ID
to_chat(user, SPAN_WARNING("You should wear your ID before doing this."))
return FALSE
if(!ID.check_biometrics(user))
to_chat(user, SPAN_WARNING("You should wear your ID before doing this."))
return FALSE

return ..()

/obj/item/pamphlet/skill/k9_handler/on_use(mob/living/carbon/human/user)
. = ..()
user.rank_fallback = "medk9"
user.hud_set_squad()
user.assigned_equipment_preset.minimap_icon = "medic_k9"
user.update_minimap_icon()

var/obj/item/card/id/ID = user.get_idcard()
ID.set_assignment((user.assigned_squad ? (user.assigned_squad.name + " ") : "") + "K9 Handler")
GLOB.data_core.manifest_modify(user.real_name, WEAKREF(user), "K9 Handler")

/obj/item/pamphlet/skill/machinegunner
name = "heavy machinegunner instructional pamphlet"
desc = "A pamphlet used to quickly impart vital knowledge. This one has an engineering and a machinegun insignia."
Expand Down
20 changes: 20 additions & 0 deletions code/game/objects/items/storage/backpack.dm
Original file line number Diff line number Diff line change
Expand Up @@ -453,6 +453,26 @@
xeno_icon_state = "medicpack"
xeno_types = list(/mob/living/carbon/xenomorph/runner, /mob/living/carbon/xenomorph/praetorian, /mob/living/carbon/xenomorph/drone, /mob/living/carbon/xenomorph/warrior, /mob/living/carbon/xenomorph/defender, /mob/living/carbon/xenomorph/sentinel, /mob/living/carbon/xenomorph/spitter)

/obj/item/storage/backpack/marine/k9_synth/
icon_override = 'icons/mob/humans/species/synth_k9/onmob/synth_k9_overlays.dmi'
uniform_restricted = list(/obj/item/clothing/under/rank/synthetic/synth_k9) //K9 Synth only
force_overlays_on = TRUE

/obj/item/storage/backpack/marine/k9_synth/cargopack
name = "\improper M209 portable K9 backpack"
desc = "Form fitted for the K9 Rescue Unit line of synthetics. Designed to lug gear into the battlefield."
icon_state = "marinepack_k9"

/obj/item/storage/backpack/marine/k9_synth/medicalpack
name = "\improper M210 portable K9 medical backpack"
desc = "Form fitted for the K9 Rescue Unit line of synthetics. For carrying medical supplies."
icon_state = "marinepack_medic_k9"

/obj/item/storage/backpack/marine/k9_synth/mppack
name = "\improper M553 portable K9 police backpack"
desc = "Form fitted for the K9 Rescue Unit line of synthetics. For carrying MP Equipment."
icon_state = "mppack_k9"

/obj/item/storage/backpack/marine/medic/upp
name = "\improper UPP corpsman backpack"
desc = "Uncommon issue backpack worn by UPP medics from isolated sectors. You can swear you can see a faded USCM symbol."
Expand Down
1 change: 1 addition & 0 deletions code/modules/asset_cache/asset_list_items.dm
Original file line number Diff line number Diff line change
Expand Up @@ -256,6 +256,7 @@
list("ass", "hudsquad_ass"),
list("Eng", "hudsquad_engi"),
list("Med", "hudsquad_med"),
list("medk9", "hudsquad_medk9"),
list("SG", "hudsquad_gun"),
list("Spc", "hudsquad_spec"),
list("TL", "hudsquad_tl"),
Expand Down
5 changes: 5 additions & 0 deletions code/modules/character_traits/skills.dm
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,11 @@
trait_desc = "Boosts the JTAC skill by 1. Crewmember received additional training in using JTAC equipment and Ghillie outfits."
skill = SKILL_JTAC

/datum/character_trait/skills/k9_handler
trait_name = "K9 Handler Training"
trait_desc = "Allows the user to interface with Wey-Yu Synthetic K9 Units for rescue purposes"
skill = SKILL_JTAC

/datum/character_trait/skills/powerloader
trait_name = "Powerloader Usage Training"
trait_desc = "Boosts the powerloader skill to 1. Crewmember received training in operating powerloaders."
Expand Down
9 changes: 9 additions & 0 deletions code/modules/clothing/under/marine_uniform.dm
Original file line number Diff line number Diff line change
Expand Up @@ -952,6 +952,15 @@
worn_state = "rdalt"
flags_jumpsuit = FALSE

/obj/item/clothing/under/rank/synthetic/synth_k9
name = "\improper W-Y K9 serial identification collar"
desc = "Contains a serialized manufacturing number related to this unit's manufacturing date and time."
icon = 'icons/mob/humans/species/synth_k9/onmob/synth_k9_overlays.dmi'
flags_item = NODROP
icon_state = "k9_dogtags"
worn_state = "k9_dogtags"
flags_jumpsuit = FALSE

/obj/item/clothing/under/rank/synthetic/frontier
name = "\improper frontier jumpsuit"
desc = "A cargo jumpsuit dressed down for full range of motion and state-of-the-art frontier temperature control. It's the best thing an engineer can wear in the Outer Veil."
Expand Down
28 changes: 28 additions & 0 deletions code/modules/cm_marines/equipment/kit_boxes.dm
Original file line number Diff line number Diff line change
Expand Up @@ -545,6 +545,34 @@
new /obj/item/device/binoculars/range/designator/spotter(src)
new /obj/item/pamphlet/skill/spotter(src)

/obj/item/storage/box/kit/k9_handler/mp
name = "\improper Police K9 handler Kit"
desc = "Contains the equipment needed for a Police K9 Handler to perform their duties."
pro_case_overlay = "k9_handler"

/obj/item/storage/box/kit/k9_handler/mp/fill_preset_inventory()
new /obj/item/device/k9_scanner(src)
new /obj/item/storage/firstaid/synth(src)
new /obj/item/device/helmet_visor/welding_visor(src)
new /obj/item/device/binoculars(src)
new /obj/item/pamphlet/skill/k9_handler(src)
new /obj/item/storage/box/evidence(src)
new /obj/item/restraint/handcuffs(src)
new /obj/item/reagent_container/spray/pepper(src)

/obj/item/storage/box/kit/k9_handler/corpsman
name = "\improper Medical K9 handler Kit"
desc = "Contains the equipment needed for a Medical K9 Handler to perform their duties."
pro_case_overlay = "k9_handler"

/obj/item/storage/box/kit/k9_handler/corpsman/fill_preset_inventory()
new /obj/item/device/k9_scanner(src)
new /obj/item/storage/firstaid/synth(src)
new /obj/item/device/helmet_visor/welding_visor(src)
new /obj/item/device/binoculars(src)
new /obj/item/pamphlet/skill/k9_handler(src)
new /obj/item/storage/pouch/autoinjector/full(src)

/obj/item/storage/box/kit/engineering_supply_kit
name = "\improper Engineering Supply Kit"

Expand Down
Loading
Loading