From 0e60f0e973f5068000b8858c08c3ec6b3029cf30 Mon Sep 17 00:00:00 2001
From: hislittlecuzingames
<142365554+hislittlecuzingames@users.noreply.github.com>
Date: Fri, 2 Aug 2024 21:11:48 -0400
Subject: [PATCH 01/66] cigarettes cigars lighters fit in helmet cosmetic
(#6841)
# About the pull request
Allows smoking rp items to fit in helmet cosmetic slots instead of
taking up "valuable" slots.
# Explain why it's good for the game
If you fill up your slots with gear, you often cannot fit smoking items
like cigarettes and lighters. This allows players to RP more with their
ability to take RP items without sacrificing gameplay items.
**please verify...**
I thought you'd use pipe equals to add bitflags in dm ie
my-bitflag |= MYNEWVALUE
This wouldn't compile though...
I saw ampersand equals removes items not on the right side of equals.
So I used regular equals and it seems to fit into backpacks and webbing
no problem.
# Testing Photographs and Procedure
I tested by spawning using "create humans" and spawning USCM and their
class.
I verified the items fit in each of the basic helmets and also put in
"game items" like bandages and an injector to assure they took the
cosmetic slots, not the "item" slots.
I also put the cigarettes into the 5 slot webbing and backpacks.
Screenshots & Videos
![354072752-7921f9a0-51af-49e1-a521-a3f9f8cd6363](https://github.com/user-attachments/assets/a5086670-0adb-49dc-b903-fa4180fe1d2c)
![354072765-f37b936a-3763-4d84-b047-69116d8d9b18](https://github.com/user-attachments/assets/cc928f13-e100-4e6d-8dee-828d0e6928f8)
![354072809-c56198eb-7482-4814-803b-e52193446e94](https://github.com/user-attachments/assets/91116610-9589-4c58-9871-2efd21523516)
![354073089-adb46a73-3798-4441-b381-0ef4432df429](https://github.com/user-attachments/assets/2f20364d-569e-4eb1-9fe0-4ef629e4a252)
![354073414-2bfb7d21-feba-4d7a-8632-233add523e30](https://github.com/user-attachments/assets/ee69872a-feca-420a-b3ec-1ce2087d3bc1)
# Changelog
:cl:
qol: Can roleplay easier with cigarettes, cigars, lighters counting as
cosmetic for helmet storage purposes.
/:cl:
---
code/game/objects/items/storage/boxes.dm | 1 +
code/game/objects/items/storage/fancy.dm | 1 +
code/game/objects/items/tools/flame_tools.dm | 2 ++
code/modules/clothing/head/helmet.dm | 4 ++--
4 files changed, 6 insertions(+), 2 deletions(-)
diff --git a/code/game/objects/items/storage/boxes.dm b/code/game/objects/items/storage/boxes.dm
index ab221b89bfe2..e385d4b5c17d 100644
--- a/code/game/objects/items/storage/boxes.dm
+++ b/code/game/objects/items/storage/boxes.dm
@@ -470,6 +470,7 @@
item_state = "zippo"
w_class = SIZE_TINY
flags_equip_slot = SLOT_WAIST
+ flags_obj = parent_type::flags_obj|OBJ_IS_HELMET_GARB
can_hold = list(/obj/item/tool/match)
/obj/item/storage/box/matches/fill_preset_inventory()
diff --git a/code/game/objects/items/storage/fancy.dm b/code/game/objects/items/storage/fancy.dm
index 5d7aecbc03db..79d38603dc7e 100644
--- a/code/game/objects/items/storage/fancy.dm
+++ b/code/game/objects/items/storage/fancy.dm
@@ -126,6 +126,7 @@
w_class = SIZE_TINY
throwforce = 2
flags_equip_slot = SLOT_WAIST
+ flags_obj = parent_type::flags_obj|OBJ_IS_HELMET_GARB
max_w_class = SIZE_TINY
storage_slots = 20
can_hold = list(
diff --git a/code/game/objects/items/tools/flame_tools.dm b/code/game/objects/items/tools/flame_tools.dm
index d5cd708f29b3..8af7d15e0ff3 100644
--- a/code/game/objects/items/tools/flame_tools.dm
+++ b/code/game/objects/items/tools/flame_tools.dm
@@ -177,6 +177,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
w_class = SIZE_TINY
flags_armor_protection = 0
flags_equip_slot = SLOT_EAR | SLOT_FACE
+ flags_obj = parent_type::flags_obj|OBJ_IS_HELMET_GARB
flags_atom = CAN_BE_SYRINGED
attack_verb = list("burnt", "singed")
blood_overlay_type = ""
@@ -693,6 +694,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
throwforce = 4
flags_atom = FPRINT|CONDUCT
flags_equip_slot = SLOT_WAIST
+ flags_obj = parent_type::flags_obj|OBJ_IS_HELMET_GARB
attack_verb = list("burnt", "singed")
/obj/item/tool/lighter/zippo
diff --git a/code/modules/clothing/head/helmet.dm b/code/modules/clothing/head/helmet.dm
index 463a4b16f7ec..845ce2a6eb6e 100644
--- a/code/modules/clothing/head/helmet.dm
+++ b/code/modules/clothing/head/helmet.dm
@@ -379,8 +379,8 @@ GLOBAL_LIST_INIT(allowed_helmet_items, list(
)
var/obj/item/storage/internal/headgear/pockets
- var/storage_slots = 2 // keep in mind, one slot is reserved for garb items
- var/storage_slots_reserved_for_garb = 2
+ var/storage_slots = 2 // Small items like injectors, bandages, etc
+ var/storage_slots_reserved_for_garb = 2 // Cosmetic items & now cigarettes and lighters for RP
var/storage_max_w_class = SIZE_TINY // can hold tiny items only, EXCEPT for glasses & metal flask.
var/storage_max_storage_space = 4
From be39c061d179e74e7f48da9db87faa70f8a5a116 Mon Sep 17 00:00:00 2001
From: cm13-github <128137806+cm13-github@users.noreply.github.com>
Date: Sat, 3 Aug 2024 02:17:14 +0100
Subject: [PATCH 02/66] Automatic changelog for PR #6841 [ci skip]
---
html/changelogs/AutoChangeLog-pr-6841.yml | 4 ++++
1 file changed, 4 insertions(+)
create mode 100644 html/changelogs/AutoChangeLog-pr-6841.yml
diff --git a/html/changelogs/AutoChangeLog-pr-6841.yml b/html/changelogs/AutoChangeLog-pr-6841.yml
new file mode 100644
index 000000000000..48d12288f28c
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-6841.yml
@@ -0,0 +1,4 @@
+author: "hislittlecuzingames"
+delete-after: True
+changes:
+ - qol: "Can roleplay easier with cigarettes, cigars, lighters counting as cosmetic for helmet storage purposes."
\ No newline at end of file
From 60411798835f61ec97a47bc1c0f4d51b172655ef Mon Sep 17 00:00:00 2001
From: Changelogs
Date: Sat, 3 Aug 2024 01:20:26 +0000
Subject: [PATCH 03/66] Automatic changelog compile [ci skip]
---
html/changelogs/AutoChangeLog-pr-6841.yml | 4 ----
html/changelogs/archive/2024-08.yml | 4 ++++
2 files changed, 4 insertions(+), 4 deletions(-)
delete mode 100644 html/changelogs/AutoChangeLog-pr-6841.yml
diff --git a/html/changelogs/AutoChangeLog-pr-6841.yml b/html/changelogs/AutoChangeLog-pr-6841.yml
deleted file mode 100644
index 48d12288f28c..000000000000
--- a/html/changelogs/AutoChangeLog-pr-6841.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-author: "hislittlecuzingames"
-delete-after: True
-changes:
- - qol: "Can roleplay easier with cigarettes, cigars, lighters counting as cosmetic for helmet storage purposes."
\ No newline at end of file
diff --git a/html/changelogs/archive/2024-08.yml b/html/changelogs/archive/2024-08.yml
index 841b74672ff1..0d86f2174654 100644
--- a/html/changelogs/archive/2024-08.yml
+++ b/html/changelogs/archive/2024-08.yml
@@ -30,3 +30,7 @@
kiVts:
- rscadd: Players will not get picked at certain ERT beacons if they dont have enough
playtime in relevant area.
+2024-08-03:
+ hislittlecuzingames:
+ - qol: Can roleplay easier with cigarettes, cigars, lighters counting as cosmetic
+ for helmet storage purposes.
From bf3226e67da47654985b2acbc18315ba5debc36f Mon Sep 17 00:00:00 2001
From: Zonespace <41448081+Zonespace27@users.noreply.github.com>
Date: Fri, 2 Aug 2024 18:12:13 -0700
Subject: [PATCH 04/66] Buffs cades against projectiles (#6727)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
# About the pull request
Barricades and tables are now better against projectiles.
Assuming a standard rifleman with an unmodified m41a vs. a barricade,
the probabilities of hitting are:
| Dist | Old | New | New (Xeno)
|---|---|---|---|
| 1 | 0 | 0 | 0|
| 2 | -0.1833 | 0.0045 |0|
| 3 | -0.0466 | 0.52 |0|
| 4 | 0.0550 | 0.85 |0|
| 5 | 0.2367 | 0.85 |0.0045|
| [6, ∞) | 0.3383 | 0.85 |0.52|
# Explain why it's good for the game
Cades are completely worthless in hvh situations, because they fail to
block the overwhelming majority of bullets (especially in cqc, where
most gunfights happen). This makes them better while still allowing
people who get within 2 tiles to attack easier.
# Changelog
:cl:
balance: Barricades are now far better at blocking bullets from the
front. They will not block most bullets if the shooter is within 2
tiles, however.
/:cl:
---------
Co-authored-by: John Doe
---
code/game/objects/objs.dm | 2 ++
code/game/objects/structures/barricade/barricade.dm | 1 +
code/game/objects/structures/tables_racks.dm | 4 ++++
code/modules/projectiles/projectile.dm | 5 ++---
4 files changed, 9 insertions(+), 3 deletions(-)
diff --git a/code/game/objects/objs.dm b/code/game/objects/objs.dm
index 77b15e22d055..9a0f21e9655a 100644
--- a/code/game/objects/objs.dm
+++ b/code/game/objects/objs.dm
@@ -23,6 +23,8 @@
/// an object's "projectile_coverage" var indicates the maximum probability of blocking a projectile, assuming density and throwpass. Used by barricades, tables and window frames
var/projectile_coverage = 0
+ /// How many tiles away from this object that a shooter needs to be to maximize this barricade's projectile coverage
+ var/projectile_coverage_distance_limit = 6
/// set to true if the item is garbage and should be deleted after awhile
var/garbage = FALSE
diff --git a/code/game/objects/structures/barricade/barricade.dm b/code/game/objects/structures/barricade/barricade.dm
index 28036f92d018..e04bbef7ecec 100644
--- a/code/game/objects/structures/barricade/barricade.dm
+++ b/code/game/objects/structures/barricade/barricade.dm
@@ -34,6 +34,7 @@
var/is_wired = FALSE
flags_barrier = HANDLE_BARRIER_CHANCE
projectile_coverage = PROJECTILE_COVERAGE_HIGH
+ projectile_coverage_distance_limit = 2
var/upgraded
var/brute_multiplier = 1
var/burn_multiplier = 1
diff --git a/code/game/objects/structures/tables_racks.dm b/code/game/objects/structures/tables_racks.dm
index a1542f7baf75..7d4c3021fd0a 100644
--- a/code/game/objects/structures/tables_racks.dm
+++ b/code/game/objects/structures/tables_racks.dm
@@ -30,6 +30,7 @@
var/flip_cooldown = 0 //If flip cooldown exists, don't allow flipping or putting back. This carries a WORLD.TIME value
health = 100
projectile_coverage = 20 //maximum chance of blocking a projectile
+ var/flipped_projectile_coverage_distance_limit = 2
var/flipped_projectile_coverage = PROJECTILE_COVERAGE_HIGH
var/upright_projectile_coverage = PROJECTILE_COVERAGE_LOW
surgery_duration_multiplier = SURGERY_SURFACE_MULT_UNSUITED
@@ -42,6 +43,7 @@
qdel(T)
if(flipped)
projectile_coverage = flipped_projectile_coverage
+ projectile_coverage_distance_limit = flipped_projectile_coverage_distance_limit
else
projectile_coverage = upright_projectile_coverage
@@ -446,6 +448,7 @@
INVOKE_ASYNC(movable_on_table, TYPE_PROC_REF(/atom/movable, throw_atom), pick(targets), 1, SPEED_FAST)
projectile_coverage = flipped_projectile_coverage
+ projectile_coverage_distance_limit = flipped_projectile_coverage_distance_limit
setDir(direction)
if(dir != NORTH)
@@ -473,6 +476,7 @@
verbs += /obj/structure/surface/table/verb/do_flip
projectile_coverage = upright_projectile_coverage
+ projectile_coverage_distance_limit = src::projectile_coverage_distance_limit
layer = initial(layer)
flipped = FALSE
diff --git a/code/modules/projectiles/projectile.dm b/code/modules/projectiles/projectile.dm
index d91e2ca47c1a..4e815eb4c60c 100644
--- a/code/modules/projectiles/projectile.dm
+++ b/code/modules/projectiles/projectile.dm
@@ -660,7 +660,7 @@
//Used by machines and structures to calculate shooting past cover
/obj/proc/calculate_cover_hit_boolean(obj/projectile/P, distance = 0, cade_direction_correct = FALSE)
- if(istype(P.shot_from, /obj/item/hardpoint)) //anything shot from a tank gets a bonus to bypassing cover
+ if(istype(P.shot_from, /obj/item/hardpoint) || istype(P.ammo, /datum/ammo/xeno)) //anything shot from a tank or a xeno gets a bonus to bypassing cover
distance -= 3
if(distance < 1 || (distance > 3 && cade_direction_correct))
@@ -668,10 +668,9 @@
//an object's "projectile_coverage" var indicates the maximum probability of blocking a projectile
var/effective_accuracy = P.get_effective_accuracy()
- var/distance_limit = 6 //number of tiles needed to max out block probability
var/accuracy_factor = 50 //degree to which accuracy affects probability (if accuracy is 100, probability is unaffected. Lower accuracies will increase block chance)
- var/hitchance = min(projectile_coverage, (projectile_coverage * distance/distance_limit) + accuracy_factor * (1 - effective_accuracy/100))
+ var/hitchance = min(projectile_coverage, (projectile_coverage * distance / (projectile_coverage_distance_limit * (cade_direction_correct ? 3 : 1))) + accuracy_factor * (1 - effective_accuracy/100))
#if DEBUG_HIT_CHANCE
to_world(SPAN_DEBUG("([name] as cover) Distance travelled: [P.distance_travelled] | Effective accuracy: [effective_accuracy] | Hit chance: [hitchance]"))
From 52a60e83c10312c2d9406d06a62c006ba98558c8 Mon Sep 17 00:00:00 2001
From: cm13-github <128137806+cm13-github@users.noreply.github.com>
Date: Sat, 3 Aug 2024 02:28:20 +0100
Subject: [PATCH 05/66] Automatic changelog for PR #6727 [ci skip]
---
html/changelogs/AutoChangeLog-pr-6727.yml | 4 ++++
1 file changed, 4 insertions(+)
create mode 100644 html/changelogs/AutoChangeLog-pr-6727.yml
diff --git a/html/changelogs/AutoChangeLog-pr-6727.yml b/html/changelogs/AutoChangeLog-pr-6727.yml
new file mode 100644
index 000000000000..ee28676f4cab
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-6727.yml
@@ -0,0 +1,4 @@
+author: "Zonespace27"
+delete-after: True
+changes:
+ - balance: "Barricades are now far better at blocking bullets from the front. They will not block most bullets if the shooter is within 2 tiles, however."
\ No newline at end of file
From 6d1335d99ebdd09a0c437e9a46e82e522904a5a2 Mon Sep 17 00:00:00 2001
From: Chris
Date: Sat, 3 Aug 2024 02:34:44 +0100
Subject: [PATCH 06/66] Buffs MP and Officer Armor's Bullet Armour (#6838)
# About the pull request
Small simple change, some additional clean
MPs and derived Officer Armour now gets Medium Bullet Armour (20)
Instead of Low (10).
Also removed some redundant armour variables that clarified it was the
same level already being derived from.
Also moved icon_state of Warden and Chief MP around to be in the same
order as most others.
# Explain why it's good for the game
MP and Officer Armor is already limited and restricted to certain roles,
it shouldn't be worse than standard.
And MPs gear should lean toward human threat rather than anything else.
# Testing Photographs and Procedure
Screenshots & Videos
Put screenshots and videos here with an empty line between the
screenshots and the `` tags.
# Changelog
:cl: MistChristmas
balance: Buffed MP and Officer Armor's Bullet Armour.
/:cl:
---
code/modules/clothing/suits/marine_armor/_marine_armor.dm | 8 +++-----
1 file changed, 3 insertions(+), 5 deletions(-)
diff --git a/code/modules/clothing/suits/marine_armor/_marine_armor.dm b/code/modules/clothing/suits/marine_armor/_marine_armor.dm
index 8a8d5934b506..3d89ecb7cabb 100644
--- a/code/modules/clothing/suits/marine_armor/_marine_armor.dm
+++ b/code/modules/clothing/suits/marine_armor/_marine_armor.dm
@@ -254,7 +254,7 @@
desc = "A standard Colonial Marines M2 Pattern Chestplate. Protects the chest from ballistic rounds, bladed objects and accidents. It has a small leather pouch strapped to it for limited storage."
icon_state = "mp_armor"
armor_melee = CLOTHING_ARMOR_MEDIUMHIGH
- armor_bullet = CLOTHING_ARMOR_LOW
+ armor_bullet = CLOTHING_ARMOR_MEDIUM
armor_laser = CLOTHING_ARMOR_LOW
armor_energy = CLOTHING_ARMOR_LOW
armor_bomb = CLOTHING_ARMOR_MEDIUM
@@ -287,19 +287,17 @@
black_market_value = 20
/obj/item/clothing/suit/storage/marine/MP/warden
- icon_state = "warden"
name = "\improper M3 pattern warden MP armor"
desc = "A well-crafted suit of M3 Pattern Armor typically distributed to Wardens. Useful for letting your men know who is in charge."
- armor_bio = CLOTHING_ARMOR_MEDIUMLOW
- armor_rad = CLOTHING_ARMOR_MEDIUMLOW
+ icon_state = "warden"
uniform_restricted = list(/obj/item/clothing/under/marine/warden)
specialty = "M3 pattern warden MP"
item_state_slots = list(WEAR_JACKET = "warden")
/obj/item/clothing/suit/storage/marine/MP/WO
- icon_state = "warrant_officer"
name = "\improper M3 pattern chief MP armor"
desc = "A well-crafted suit of M3 Pattern Armor typically distributed to Chief MPs. Useful for letting your men know who is in charge."
+ icon_state = "warrant_officer"
uniform_restricted = list(/obj/item/clothing/under/marine/officer/warrant)
specialty = "M3 pattern chief MP"
item_state_slots = list(WEAR_JACKET = "warrant_officer")
From 2d34057f3d757f4837c3e36552fc7d035f7cda97 Mon Sep 17 00:00:00 2001
From: cm13-github <128137806+cm13-github@users.noreply.github.com>
Date: Sat, 3 Aug 2024 02:40:08 +0100
Subject: [PATCH 07/66] Automatic changelog for PR #6838 [ci skip]
---
html/changelogs/AutoChangeLog-pr-6838.yml | 4 ++++
1 file changed, 4 insertions(+)
create mode 100644 html/changelogs/AutoChangeLog-pr-6838.yml
diff --git a/html/changelogs/AutoChangeLog-pr-6838.yml b/html/changelogs/AutoChangeLog-pr-6838.yml
new file mode 100644
index 000000000000..d9003271a4fc
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-6838.yml
@@ -0,0 +1,4 @@
+author: "MistChristmas"
+delete-after: True
+changes:
+ - balance: "Buffed MP and Officer Armor's Bullet Armour."
\ No newline at end of file
From 3ffcf5e5ce4541f6ba6c38b12d26d0f5d63e9ad2 Mon Sep 17 00:00:00 2001
From: Spy <31124786+SpypigDev@users.noreply.github.com>
Date: Sat, 3 Aug 2024 14:46:39 +1000
Subject: [PATCH 08/66] CIC Vendor Expansion (Part 2) (#6301)
# About The Pull Request
Follow up PR to
[#4707](https://github.com/cmss13-devs/cmss13/pull/4707). Aims to expand
XO vendors to bring them up to date with modern combat meta, as well as
clean up my SO vendor update in the process.
- Added gear specializations to the XO weapons vendor, offering the
essentials set of either a Medic or Engineer
- Adds a Magharn to rail attachments section in the XO weapons vendor
- Expanded belt/pouch options in the XO weapons vendor
- Added the 'other gear' section in the XO vendor, with various combat
supplies
Misc.
- Fixed XO/SO vendor code so that selecting the autoinjector pouch gives
you a full one, rather than empty
- ~~Increased XO policing skillset from 1, to 2, so they can actually
use the MP belt they are offered~~ (Already done in #6781 )
- Unified the SO armory vendor code into the regular SO vendor file,
rather than having two seperate
# Explain why it's good for the game
The XO gear vendors have sat untouched in the code for quite some time,
and have been left to fall behind the quickly changing meta of CM. With
a more updated selection of modern gear, XOs will no longer be
significantly out-geared by their Staff Officers when it comes to
organizing their combat kits, especially during hijack.
XOs will be brought up to par with the gear diversity that SOs have
enjoyed for some months now.
# Testing Photographs and Procedure
Select photos of the updated XO vendor menus, where changes have been
made
![Screenshot 2024-05-17
160207](https://github.com/cmss13-devs/cmss13/assets/31124786/bc48f7e7-a6d4-44a6-91c8-7e9090ab83a8)
![Screenshot 2024-05-17
160216](https://github.com/cmss13-devs/cmss13/assets/31124786/b48ebdd3-7f3a-42cb-9411-ae5385c9273d)
![Screenshot 2024-05-17
160228](https://github.com/cmss13-devs/cmss13/assets/31124786/f2b14ecb-ff72-4437-ad24-3692e0447d13)
![Screenshot 2024-05-17
160236](https://github.com/cmss13-devs/cmss13/assets/31124786/f07ff972-ed74-478e-9eec-e2080c128f60)
# Changelog
:cl:
refactor: SO armory vendor code refactored into the main SO gear vendor
code
balance: XO weapon and clothing vendors fitted with a more modernized
equipment set
balance: XO weapon vendor now offers Medic or Engineer essentials sets
fix: Vending an autoinjector pouch as SO or XO now produces a full
pouch, rather than empty
balance: SO's mod88 removed from cryo spawn and moved to their vendor
instead
/:cl:
---------
Co-authored-by: Drathek <76988376+Drulikar@users.noreply.github.com>
---
.../vendor_types/crew/senior_officers.dm | 99 ++++++++++++-------
.../vendor_types/crew/staff_officer.dm | 95 +++++++++++++++++-
.../vendor_types/crew/staff_officer_armory.dm | 89 -----------------
code/modules/gear_presets/uscm_ship.dm | 1 -
colonialmarines.dme | 1 -
maps/map_files/USS_Almayer/USS_Almayer.dmm | 4 +-
6 files changed, 159 insertions(+), 130 deletions(-)
delete mode 100644 code/game/machinery/vending/vendor_types/crew/staff_officer_armory.dm
diff --git a/code/game/machinery/vending/vendor_types/crew/senior_officers.dm b/code/game/machinery/vending/vendor_types/crew/senior_officers.dm
index b938db1d3db6..b63a73a90f06 100644
--- a/code/game/machinery/vending/vendor_types/crew/senior_officers.dm
+++ b/code/game/machinery/vending/vendor_types/crew/senior_officers.dm
@@ -329,19 +329,21 @@ GLOBAL_LIST_INIT(cm_vending_gear_xo, list(
list("Shotgun Slugs", 20, /obj/item/ammo_magazine/shotgun/slugs, null, VENDOR_ITEM_REGULAR),
list("Flechette Shells", 20, /obj/item/ammo_magazine/shotgun/flechette, null, VENDOR_ITEM_REGULAR),
+ list("SPECIALISATION KIT (CHOOSE 1)", 0, null, null, null),
+ list("Essential Engineer Set", 0, /obj/effect/essentials_set/engi, MARINE_CAN_BUY_ESSENTIALS, VENDOR_ITEM_RECOMMENDED),
+ list("Essential Medical Set", 0, /obj/effect/essentials_set/medic, MARINE_CAN_BUY_ESSENTIALS, VENDOR_ITEM_RECOMMENDED),
+
list("EXPLOSIVES", 0, null, null, null),
list("HEDP Grenade Pack", 15, /obj/item/storage/box/packet/high_explosive, null, VENDOR_ITEM_REGULAR),
list("HEFA Grenade Pack", 15, /obj/item/storage/box/packet/hefa, null, VENDOR_ITEM_REGULAR),
list("WP Grenade Pack", 15, /obj/item/storage/box/packet/phosphorus, null, VENDOR_ITEM_REGULAR),
list("RAIL ATTACHMENTS", 0, null, null, null),
+ list("Magnetic Harness", 12, /obj/item/attachable/magnetic_harness, null, VENDOR_ITEM_RECOMMENDED),
list("Red-Dot Sight", 15, /obj/item/attachable/reddot, null, VENDOR_ITEM_REGULAR),
list("Reflex Sight", 15, /obj/item/attachable/reflex, null, VENDOR_ITEM_REGULAR),
list("S4 2x Telescopic Mini-Scope", 15, /obj/item/attachable/scope/mini, null, VENDOR_ITEM_REGULAR),
- list("Helmet Visors", 0, null, null, null),
- list("Welding Visor", 5, /obj/item/device/helmet_visor/welding_visor, null, VENDOR_ITEM_RECOMMENDED),
-
list("UNDERBARREL ATTACHMENTS", 0, null, null, null),
list("Laser Sight", 15, /obj/item/attachable/lasersight, null, VENDOR_ITEM_REGULAR),
list("Angled Grip", 15, /obj/item/attachable/angledgrip, null, VENDOR_ITEM_REGULAR),
@@ -355,6 +357,22 @@ GLOBAL_LIST_INIT(cm_vending_gear_xo, list(
list("Extended Barrel", 15, /obj/item/attachable/extended_barrel, null, VENDOR_ITEM_REGULAR),
list("Recoil Compensator", 15, /obj/item/attachable/compensator, null, VENDOR_ITEM_REGULAR),
list("Suppressor", 15, /obj/item/attachable/suppressor, null, VENDOR_ITEM_REGULAR),
+
+ list("OTHER SUPPLIES", 0, null, null, null),
+ list("Welding Visor", 5, /obj/item/device/helmet_visor/welding_visor, null, VENDOR_ITEM_REGULAR),
+ list("Insulated Gloves", 3, /obj/item/clothing/gloves/yellow, null, VENDOR_ITEM_REGULAR),
+ list("Entrenching Tool", 1, /obj/item/tool/shovel/etool, null, VENDOR_ITEM_REGULAR),
+ list("Magnetic Harness", 12, /obj/item/attachable/magnetic_harness, null, VENDOR_ITEM_RECOMMENDED),
+ list("Radio Telephone Pack", 15, /obj/item/storage/backpack/marine/satchel/rto, null, VENDOR_ITEM_RECOMMENDED),
+ list("Motion Detector", 5, /obj/item/device/motiondetector, null, VENDOR_ITEM_RECOMMENDED),
+ list("Machete Scabbard (Full)", 5, /obj/item/storage/large_holster/machete/full, null, VENDOR_ITEM_REGULAR),
+ list("Binoculars", 5,/obj/item/device/binoculars, null, VENDOR_ITEM_REGULAR),
+ list("Rangefinder", 8, /obj/item/device/binoculars/range, null, VENDOR_ITEM_REGULAR),
+ list("Laser Designator", 12, /obj/item/device/binoculars/range/designator, null, VENDOR_ITEM_RECOMMENDED),
+ list("Fulton Recovery Device", 5, /obj/item/stack/fulton, null, VENDOR_ITEM_REGULAR),
+ list("Space Cleaner", 2, /obj/item/reagent_container/spray/cleaner, null, VENDOR_ITEM_REGULAR),
+ list("Whistle", 5, /obj/item/device/whistle, null, VENDOR_ITEM_REGULAR),
+ list("Flashlight", 1, /obj/item/device/flashlight, null, VENDOR_ITEM_REGULAR),
))
/obj/effect/essentials_set/xo/shotgunpreset
@@ -377,10 +395,16 @@ GLOBAL_LIST_INIT(cm_vending_gear_xo, list(
//------------UNIFORM/GEAR VENDOR---------------
GLOBAL_LIST_INIT(cm_vending_clothing_xo, list(
+ list("COMBAT EQUIPMENT (TAKE ALL)", 0, null, null, null),
+ list("Officer M3 Armor", 0, /obj/item/clothing/suit/storage/marine/MP/SO, MARINE_CAN_BUY_COMBAT_ARMOR, VENDOR_ITEM_MANDATORY),
+ list("Officer M10 Helmet", 0, /obj/item/clothing/head/helmet/marine/MP/SO, MARINE_CAN_BUY_COMBAT_HELMET, VENDOR_ITEM_MANDATORY),
+ list("Marine Combat Boots", 0, /obj/item/clothing/shoes/marine/knife, MARINE_CAN_BUY_COMBAT_SHOES, VENDOR_ITEM_MANDATORY),
+ list("Marine Combat Gloves", 0, /obj/item/clothing/gloves/marine, MARINE_CAN_BUY_GLOVES, VENDOR_ITEM_MANDATORY),
list("STANDARD EQUIPMENT (TAKE ALL)", 0, null, null, null),
list("Headset", 0, /obj/item/device/radio/headset/almayer/mcom/cdrcom, MARINE_CAN_BUY_EAR, VENDOR_ITEM_MANDATORY),
list("Satchel", 0, /obj/item/storage/backpack/satchel, MARINE_CAN_BUY_BACKPACK, VENDOR_ITEM_MANDATORY),
+ list("MRE", 0, /obj/item/storage/box/MRE, MARINE_CAN_BUY_MRE, VENDOR_ITEM_MANDATORY),
list("UNIFORM (CHOOSE ONE)", 0, null, null, null),
list("Service Uniform", 0, /obj/item/clothing/under/marine/officer/bridge, MARINE_CAN_BUY_UNIFORM, VENDOR_ITEM_RECOMMENDED),
@@ -393,53 +417,60 @@ GLOBAL_LIST_INIT(cm_vending_clothing_xo, list(
list("Mod 88 Pistol", 0, /obj/item/storage/belt/gun/m4a3/mod88, MARINE_CAN_BUY_SECONDARY, VENDOR_ITEM_REGULAR),
list("M44 Revolver", 0, /obj/item/storage/belt/gun/m44/mp, MARINE_CAN_BUY_SECONDARY, VENDOR_ITEM_REGULAR),
- list("BELTS (CHOOSE 1)", 0, null, null, null),
- list("G8-A General Utility Pouch", 0, /obj/item/storage/backpack/general_belt, MARINE_CAN_BUY_BELT, VENDOR_ITEM_RECOMMENDED),
- list("Military Police Belt", 0, /obj/item/storage/belt/security/MP/full, MARINE_CAN_BUY_BELT, VENDOR_ITEM_RECOMMENDED),
- list("M276 Medical Storage Rig", 0, /obj/item/storage/belt/medical/full, MARINE_CAN_BUY_BELT, VENDOR_ITEM_RECOMMENDED),
- list("M276 Ammo Load Rig", 0, /obj/item/storage/belt/marine, MARINE_CAN_BUY_BELT, VENDOR_ITEM_RECOMMENDED),
- list("M276 Holster Toolrig", 0, /obj/item/storage/belt/gun/utility/full, MARINE_CAN_BUY_BELT, VENDOR_ITEM_RECOMMENDED),
- list("M276 M82F Holster Rig", 0, /obj/item/storage/belt/gun/flaregun, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
-
- list("COMBAT EQUIPMENT (TAKE ALL)", 0, null, null, null),
- list("Officer M3 Armor", 0, /obj/item/clothing/suit/storage/marine/MP/SO, MARINE_CAN_BUY_ARMOR, VENDOR_ITEM_MANDATORY),
- list("Officer M10 Helmet", 0, /obj/item/clothing/head/helmet/marine/MP/SO, MARINE_CAN_BUY_HELMET, VENDOR_ITEM_MANDATORY),
- list("Marine Combat Boots", 0, /obj/item/clothing/shoes/marine/knife, MARINE_CAN_BUY_SHOES, VENDOR_ITEM_MANDATORY),
- list("Marine Combat Gloves", 0, /obj/item/clothing/gloves/marine, MARINE_CAN_BUY_GLOVES, VENDOR_ITEM_MANDATORY),
-
list("EYEWEAR (CHOOSE 1)", 0, null, null, null),
list("Medical HUD Glasses", 0, /obj/item/clothing/glasses/hud/health, MARINE_CAN_BUY_GLASSES, VENDOR_ITEM_RECOMMENDED),
list("Security HUD Glasses", 0, /obj/item/clothing/glasses/sunglasses/sechud, MARINE_CAN_BUY_GLASSES, VENDOR_ITEM_REGULAR),
list("Bimex Personal Shades", 0, /obj/item/clothing/glasses/sunglasses/big, MARINE_CAN_BUY_GLASSES, VENDOR_ITEM_RECOMMENDED),
list("Aviator Shades", 0, /obj/item/clothing/glasses/sunglasses/aviator, MARINE_CAN_BUY_GLASSES, VENDOR_ITEM_REGULAR),
+ list("HATS (CHOOSE 1)", 0, null, null, null),
+ list("Officer Beret", 0, /obj/item/clothing/head/beret/marine/chiefofficer, MARINE_CAN_BUY_HELMET, VENDOR_ITEM_REGULAR),
+ list("Service Peaked Cap", 0, /obj/item/clothing/head/marine/peaked/service, MARINE_CAN_BUY_HELMET, VENDOR_ITEM_REGULAR),
+ list("Patrol Cap", 0, /obj/item/clothing/head/cmcap, MARINE_CAN_BUY_HELMET, VENDOR_ITEM_REGULAR),
+ list("Officer Cap", 0, /obj/item/clothing/head/cmcap/bridge, MARINE_CAN_BUY_HELMET, VENDOR_ITEM_REGULAR),
+
list("PATCHES", 0, null, null, null),
- list("Falling Falcons Shoulder Patch", 0, /obj/item/clothing/accessory/patch/falcon, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_MANDATORY),
- list("USCM Shoulder Patch", 0, /obj/item/clothing/accessory/patch, MARINE_CAN_BUY_MRE, VENDOR_ITEM_MANDATORY),
+ list("Falling Falcons Shoulder Patch", 1, /obj/item/clothing/accessory/patch/falcon, null, VENDOR_ITEM_REGULAR),
+ list("USCM Shoulder Patch", 1, /obj/item/clothing/accessory/patch, null, VENDOR_ITEM_REGULAR),
+
+
+ list("BELT (CHOOSE 1)", 0, null, null, null),
+ list("G8-A General Utility Pouch", 0, /obj/item/storage/backpack/general_belt, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
+ list("M276 Ammo Load Rig", 0, /obj/item/storage/belt/marine, MARINE_CAN_BUY_BELT, VENDOR_ITEM_RECOMMENDED),
+ list("M276 Shotgun Shell Loading Rig", 0, /obj/item/storage/belt/shotgun, MARINE_CAN_BUY_BELT, VENDOR_ITEM_RECOMMENDED),
+ list("M276 Toolbelt Rig (Full)", 0, /obj/item/storage/belt/utility/full, MARINE_CAN_BUY_BELT, VENDOR_ITEM_RECOMMENDED),
+ list("M276 Holster Toolrig (Full)", 0, /obj/item/storage/belt/gun/utility/full, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
+ list("M276 Lifesaver Bag (Full)", 0, /obj/item/storage/belt/medical/lifesaver/full, MARINE_CAN_BUY_BELT, VENDOR_ITEM_RECOMMENDED),
+ list("M276 Medical Storage Rig (Full)", 0, /obj/item/storage/belt/medical/full, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
+ list("M276 M39 Holster Rig", 0, /obj/item/storage/belt/gun/m39, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
+ list("M276 M82F Holster Rig", 0, /obj/item/storage/belt/gun/flaregun, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
+ list("M276 M40 Grenade Rig", 0, /obj/item/storage/belt/grenade, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
+ list("Military Police Belt", 0, /obj/item/storage/belt/security/MP/full, MARINE_CAN_BUY_BELT, VENDOR_ITEM_RECOMMENDED),
list("POUCHES (CHOOSE 2)", 0, null, null, null),
- list("First-Aid Pouch (Refillable Injectors)", 0, /obj/item/storage/pouch/firstaid/full, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
+ list("Autoinjector Pouch", 0, /obj/item/storage/pouch/autoinjector/full, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_RECOMMENDED),
list("First-Aid Pouch (Splints, Gauze, Ointment)", 0, /obj/item/storage/pouch/firstaid/full/alternate, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
- list("First-Aid Pouch (Pill Packets)", 0, /obj/item/storage/pouch/firstaid/full/pills, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_RECOMMENDED),
- list("Large General Pouch", 0, /obj/item/storage/pouch/general/large, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
- list("Sidearm Pouch", 0, /obj/item/storage/pouch/pistol, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
+ list("First-Aid Pouch (Pill Packets)", 0, /obj/item/storage/pouch/firstaid/full/pills, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
+ list("Large General Pouch", 0, /obj/item/storage/pouch/general/large, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_RECOMMENDED),
+ list("Large Magazine Pouch", 0, /obj/item/storage/pouch/magazine/large, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_RECOMMENDED),
+ list("Large Shotgun Shell Pouch", 0, /obj/item/storage/pouch/shotgun/large, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_RECOMMENDED),
list("Large Pistol Magazine Pouch", 0, /obj/item/storage/pouch/magazine/pistol/large, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
list("Medical Pouch", 0, /obj/item/storage/pouch/medical, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
- list("Document Pouch", 0, /obj/item/storage/pouch/document, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
- list("Shotgun Shell Pouch", 0, /obj/item/storage/pouch/shotgun, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
+ list("Medical Kit Pouch", 0, /obj/item/storage/pouch/medkit, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
+ list("Pistol Pouch", 0, /obj/item/storage/pouch/pistol, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
+ list("Sling Pouch", 0, /obj/item/storage/pouch/sling, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
+ list("Tools Pouch (Full)", 0, /obj/item/storage/pouch/tools/full, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_RECOMMENDED),
+ list("Construction Pouch", 0, /obj/item/storage/pouch/construction, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
+ list("Electronics Pouch (Full)", 0, /obj/item/storage/pouch/electronics/full, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
+ list("Flare Pouch (Full)", 0, /obj/item/storage/pouch/flare/full, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
+ list("Fuel Tank Strap Pouch", 0, /obj/item/storage/pouch/flamertank, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
list("ACCESSORIES (CHOOSE 1)", 0, null, null, null),
- list("Shoulder Holster", 0, /obj/item/clothing/accessory/storage/holster, MARINE_CAN_BUY_ACCESSORY, VENDOR_ITEM_REGULAR),
- list("Black Webbing Vest", 0, /obj/item/clothing/accessory/storage/black_vest, MARINE_CAN_BUY_ACCESSORY, VENDOR_ITEM_REGULAR),
+ list("Black Webbing Vest", 0, /obj/item/clothing/accessory/storage/black_vest, MARINE_CAN_BUY_ACCESSORY, VENDOR_ITEM_RECOMMENDED),
list("Brown Webbing Vest", 0, /obj/item/clothing/accessory/storage/black_vest/brown_vest, MARINE_CAN_BUY_ACCESSORY, VENDOR_ITEM_REGULAR),
- list("Webbing", 0, /obj/item/clothing/accessory/storage/webbing, MARINE_CAN_BUY_ACCESSORY, VENDOR_ITEM_REGULAR),
list("Drop Pouch", 0, /obj/item/clothing/accessory/storage/droppouch, MARINE_CAN_BUY_ACCESSORY, VENDOR_ITEM_REGULAR),
-
- list("HATS (CHOOSE 1)", 0, null, null, null),
- list("Officer Beret", 0, /obj/item/clothing/head/beret/marine/chiefofficer, MARINE_CAN_BUY_MASK, VENDOR_ITEM_REGULAR),
- list("Service Peaked Cap", 0, /obj/item/clothing/head/marine/peaked/service, MARINE_CAN_BUY_MASK, VENDOR_ITEM_REGULAR),
- list("Patrol Cap", 0, /obj/item/clothing/head/cmcap, MARINE_CAN_BUY_MASK, VENDOR_ITEM_REGULAR),
- list("Officer Cap", 0, /obj/item/clothing/head/cmcap/bridge, MARINE_CAN_BUY_MASK, VENDOR_ITEM_REGULAR),
+ list("Webbing", 0, /obj/item/clothing/accessory/storage/webbing, MARINE_CAN_BUY_ACCESSORY, VENDOR_ITEM_REGULAR),
+ list("Shoulder Holster", 0, /obj/item/clothing/accessory/storage/holster, MARINE_CAN_BUY_ACCESSORY, VENDOR_ITEM_REGULAR),
))
diff --git a/code/game/machinery/vending/vendor_types/crew/staff_officer.dm b/code/game/machinery/vending/vendor_types/crew/staff_officer.dm
index 50b83ccdc54f..65fbf2917699 100644
--- a/code/game/machinery/vending/vendor_types/crew/staff_officer.dm
+++ b/code/game/machinery/vending/vendor_types/crew/staff_officer.dm
@@ -7,11 +7,11 @@
/obj/structure/machinery/cm_vending/clothing/staff_officer/get_listed_products(mob/user)
return GLOB.cm_vending_clothing_staff_officer
-//------------GEAR---------------
+//------------CLOTHING---------------
GLOBAL_LIST_INIT(cm_vending_clothing_staff_officer, list(
list("STANDARD EQUIPMENT (TAKE ALL)", 0, null, null, null),
- list("Boots", 0, /obj/item/clothing/shoes/marine/knife, MARINE_CAN_BUY_SHOES, VENDOR_ITEM_MANDATORY),
+ list("Boots", 0, /obj/item/clothing/shoes/marine/knife, MARINE_CAN_BUY_COMBAT_SHOES, VENDOR_ITEM_MANDATORY),
list("Headset", 0, /obj/item/device/radio/headset/almayer/mcom, MARINE_CAN_BUY_EAR, VENDOR_ITEM_MANDATORY),
list("MRE", 0, /obj/item/storage/box/MRE, MARINE_CAN_BUY_MRE, VENDOR_ITEM_MANDATORY),
@@ -31,12 +31,24 @@ GLOBAL_LIST_INIT(cm_vending_clothing_staff_officer, list(
list("Officer Cap", 0, /obj/item/clothing/head/cmcap/bridge, MARINE_CAN_BUY_HELMET, VENDOR_ITEM_RECOMMENDED),
list("Service Peaked Cap", 0, /obj/item/clothing/head/marine/peaked/service, MARINE_CAN_BUY_HELMET, VENDOR_ITEM_RECOMMENDED),
+ list("PATCHES", 0, null, null, null),
+ list("Falling Falcons Shoulder Patch", 1, /obj/item/clothing/accessory/patch/falcon, null, VENDOR_ITEM_REGULAR),
+ list("USCM Shoulder Patch", 1, /obj/item/clothing/accessory/patch, null, VENDOR_ITEM_REGULAR),
+
list("PERSONAL SIDEARM (CHOOSE 1)", 0, null, null, null),
list("M44 Revolver", 0, /obj/item/storage/belt/gun/m44/mp, MARINE_CAN_BUY_SECONDARY, VENDOR_ITEM_RECOMMENDED),
+ list("Mod 88 Pistol", 0, /obj/item/storage/belt/gun/m4a3/mod88, MARINE_CAN_BUY_SECONDARY, VENDOR_ITEM_RECOMMENDED),
list("M4A3 Pistol", 0, /obj/item/storage/belt/gun/m4a3/commander, MARINE_CAN_BUY_SECONDARY, VENDOR_ITEM_RECOMMENDED),
list("VP78 Pistol", 0, /obj/item/storage/belt/gun/m4a3/vp78, MARINE_CAN_BUY_SECONDARY, VENDOR_ITEM_RECOMMENDED),
+ list("ACCESSORIES (CHOOSE 1)", 0, null, null, null),
+ list("Black Webbing Vest", 0, /obj/item/clothing/accessory/storage/black_vest, MARINE_CAN_BUY_ACCESSORY, VENDOR_ITEM_RECOMMENDED),
+ list("Brown Webbing Vest", 0, /obj/item/clothing/accessory/storage/black_vest/brown_vest, MARINE_CAN_BUY_ACCESSORY, VENDOR_ITEM_REGULAR),
+ list("Drop Pouch", 0, /obj/item/clothing/accessory/storage/droppouch, MARINE_CAN_BUY_ACCESSORY, VENDOR_ITEM_REGULAR),
+ list("Webbing", 0, /obj/item/clothing/accessory/storage/webbing, MARINE_CAN_BUY_ACCESSORY, VENDOR_ITEM_REGULAR),
+ list("Shoulder Holster", 0, /obj/item/clothing/accessory/storage/holster, MARINE_CAN_BUY_ACCESSORY, VENDOR_ITEM_REGULAR),
+
list("BACKPACK (CHOOSE 1)", 0, null, null, null),
list("Backpack", 0, /obj/item/storage/backpack/marine, MARINE_CAN_BUY_BACKPACK, VENDOR_ITEM_REGULAR),
list("Satchel", 0, /obj/item/storage/backpack/marine/satchel, MARINE_CAN_BUY_BACKPACK, VENDOR_ITEM_REGULAR),
@@ -46,8 +58,85 @@ GLOBAL_LIST_INIT(cm_vending_clothing_staff_officer, list(
list("Binoculars", 5,/obj/item/device/binoculars, null, VENDOR_ITEM_REGULAR),
list("Rangefinder", 8, /obj/item/device/binoculars/range, null, VENDOR_ITEM_REGULAR),
list("Laser Designator", 12, /obj/item/device/binoculars/range/designator, null, VENDOR_ITEM_RECOMMENDED),
- list("Flashlight", 1, /obj/item/device/flashlight, null, VENDOR_ITEM_RECOMMENDED),
+ list("Flashlight", 1, /obj/item/device/flashlight, null, VENDOR_ITEM_REGULAR),
+ list("Motion Detector", 5, /obj/item/device/motiondetector, null, VENDOR_ITEM_RECOMMENDED),
+ list("Space Cleaner", 2, /obj/item/reagent_container/spray/cleaner, null, VENDOR_ITEM_REGULAR),
+ list("Whistle", 5, /obj/item/device/whistle, null, VENDOR_ITEM_REGULAR),
+ ))
+
+/obj/structure/machinery/cm_vending/gear/staff_officer_armory
+ name = "\improper ColMarTech Staff Officer Armory Equipment Rack"
+ desc = "An automated combat equipment vendor for Staff Officers."
+ req_access = list(ACCESS_MARINE_COMMAND)
+ icon_state = "mar_rack"
+ vendor_role = list(JOB_SO)
+
+/obj/structure/machinery/cm_vending/gear/staff_officer_armory/get_listed_products(mob/user)
+ return GLOB.cm_vending_gear_staff_officer_armory
+
+//------------ARMORY---------------
+
+GLOBAL_LIST_INIT(cm_vending_gear_staff_officer_armory, list(
+ list("COMBAT EQUIPMENT (TAKE ALL)", 0, null, null, null),
+ list("Officer M3 Armor", 0, /obj/item/clothing/suit/storage/marine/MP/SO, MARINE_CAN_BUY_COMBAT_ARMOR, VENDOR_ITEM_MANDATORY),
+ list("Officer M10 Helmet", 0, /obj/item/clothing/head/helmet/marine/MP/SO, MARINE_CAN_BUY_COMBAT_HELMET, VENDOR_ITEM_MANDATORY),
+ list("Marine Combat Boots", 0, /obj/item/clothing/shoes/marine/knife, MARINE_CAN_BUY_COMBAT_SHOES, VENDOR_ITEM_MANDATORY),
+ list("Marine Combat Gloves", 0, /obj/item/clothing/gloves/marine, MARINE_CAN_BUY_GLOVES, VENDOR_ITEM_MANDATORY),
+ list("MRE", 0, /obj/item/storage/box/MRE, MARINE_CAN_BUY_MRE, VENDOR_ITEM_MANDATORY),
+ list("Aviator Shades", 0, /obj/item/clothing/glasses/sunglasses/aviator, MARINE_CAN_BUY_GLASSES, VENDOR_ITEM_REGULAR),
+ list("Bayonet", 0, /obj/item/attachable/bayonet, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR),
+
+ list("SPECIALISATION KIT (CHOOSE 1)", 0, null, null, null),
+ list("Essential Engineer Set", 0, /obj/effect/essentials_set/engi, MARINE_CAN_BUY_ESSENTIALS, VENDOR_ITEM_MANDATORY),
+ list("Essential Medical Set", 0, /obj/effect/essentials_set/medic, MARINE_CAN_BUY_ESSENTIALS, VENDOR_ITEM_MANDATORY),
+
+ list("BELT (CHOOSE 1)", 0, null, null, null),
+ list("G8-A General Utility Pouch", 0, /obj/item/storage/backpack/general_belt, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
+ list("M276 Ammo Load Rig", 0, /obj/item/storage/belt/marine, MARINE_CAN_BUY_BELT, VENDOR_ITEM_RECOMMENDED),
+ list("M276 Shotgun Shell Loading Rig", 0, /obj/item/storage/belt/shotgun, MARINE_CAN_BUY_BELT, VENDOR_ITEM_RECOMMENDED),
+ list("M276 Toolbelt Rig (Full)", 0, /obj/item/storage/belt/utility/full, MARINE_CAN_BUY_BELT, VENDOR_ITEM_RECOMMENDED),
+ list("M276 Lifesaver Bag (Full)", 0, /obj/item/storage/belt/medical/lifesaver/full, MARINE_CAN_BUY_BELT, VENDOR_ITEM_RECOMMENDED),
+ list("M276 Medical Storage Rig (Full)", 0, /obj/item/storage/belt/medical/full, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
+ list("M276 M39 Holster Rig", 0, /obj/item/storage/belt/gun/m39, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
+ list("M276 Holster Toolrig (Full)", 0, /obj/item/storage/belt/gun/utility/full, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
+ list("M276 M82F Holster Rig", 0, /obj/item/storage/belt/gun/flaregun, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
+ list("M276 M40 Grenade Rig", 0, /obj/item/storage/belt/grenade, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
+
+ list("POUCHES (CHOOSE 2)", 0, null, null, null),
+ list("Autoinjector Pouch", 0, /obj/item/storage/pouch/autoinjector/full, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_RECOMMENDED),
+ list("First-Aid Pouch (Splints, Gauze, Ointment)", 0, /obj/item/storage/pouch/firstaid/full/alternate, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
+ list("First-Aid Pouch (Pill Packets)", 0, /obj/item/storage/pouch/firstaid/full/pills, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
+ list("Large General Pouch", 0, /obj/item/storage/pouch/general/large, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_RECOMMENDED),
+ list("Large Magazine Pouch", 0, /obj/item/storage/pouch/magazine/large, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_RECOMMENDED),
+ list("Large Shotgun Shell Pouch", 0, /obj/item/storage/pouch/shotgun/large, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_RECOMMENDED),
+ list("Large Pistol Magazine Pouch", 0, /obj/item/storage/pouch/magazine/pistol/large, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
+ list("Medical Pouch", 0, /obj/item/storage/pouch/medical, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
+ list("Medical Kit Pouch", 0, /obj/item/storage/pouch/medkit, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
+ list("Pistol Pouch", 0, /obj/item/storage/pouch/pistol, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
+ list("Sling Pouch", 0, /obj/item/storage/pouch/sling, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
+ list("Tools Pouch (Full)", 0, /obj/item/storage/pouch/tools/full, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_RECOMMENDED),
+ list("Construction Pouch", 0, /obj/item/storage/pouch/construction, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
+ list("Electronics Pouch (Full)", 0, /obj/item/storage/pouch/electronics/full, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
+ list("Flare Pouch (Full)", 0, /obj/item/storage/pouch/flare/full, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
+ list("Fuel Tank Strap Pouch", 0, /obj/item/storage/pouch/flamertank, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
+
+ list("MASK (CHOOSE 1)", 0, null, null, null),
+ list("Gas Mask", 0, /obj/item/clothing/mask/gas, MARINE_CAN_BUY_MASK, VENDOR_ITEM_REGULAR),
+ list("Heat Absorbent Coif", 0, /obj/item/clothing/mask/rebreather/scarf, MARINE_CAN_BUY_MASK, VENDOR_ITEM_REGULAR),
+
+ list("OTHER SUPPLIES", 0, null, null, null),
+ list("Welding Visor", 5, /obj/item/device/helmet_visor/welding_visor, null, VENDOR_ITEM_REGULAR),
+ list("Insulated Gloves", 3, /obj/item/clothing/gloves/yellow, null, VENDOR_ITEM_REGULAR),
+ list("Entrenching Tool", 1, /obj/item/tool/shovel/etool, null, VENDOR_ITEM_REGULAR),
+ list("Magnetic Harness", 12, /obj/item/attachable/magnetic_harness, null, VENDOR_ITEM_RECOMMENDED),
+ list("Radio Telephone Pack", 15, /obj/item/storage/backpack/marine/satchel/rto, null, VENDOR_ITEM_RECOMMENDED),
list("Motion Detector", 5, /obj/item/device/motiondetector, null, VENDOR_ITEM_RECOMMENDED),
+ list("Machete Scabbard (Full)", 5, /obj/item/storage/large_holster/machete/full, null, VENDOR_ITEM_REGULAR),
+ list("Binoculars", 5,/obj/item/device/binoculars, null, VENDOR_ITEM_REGULAR),
+ list("Rangefinder", 8, /obj/item/device/binoculars/range, null, VENDOR_ITEM_REGULAR),
+ list("Laser Designator", 12, /obj/item/device/binoculars/range/designator, null, VENDOR_ITEM_RECOMMENDED),
+ list("Fulton Recovery Device", 5, /obj/item/stack/fulton, null, VENDOR_ITEM_REGULAR),
list("Space Cleaner", 2, /obj/item/reagent_container/spray/cleaner, null, VENDOR_ITEM_REGULAR),
list("Whistle", 5, /obj/item/device/whistle, null, VENDOR_ITEM_REGULAR),
+ list("Flashlight", 1, /obj/item/device/flashlight, null, VENDOR_ITEM_REGULAR),
))
diff --git a/code/game/machinery/vending/vendor_types/crew/staff_officer_armory.dm b/code/game/machinery/vending/vendor_types/crew/staff_officer_armory.dm
deleted file mode 100644
index 46de6ed028d0..000000000000
--- a/code/game/machinery/vending/vendor_types/crew/staff_officer_armory.dm
+++ /dev/null
@@ -1,89 +0,0 @@
-/obj/structure/machinery/cm_vending/clothing/staff_officer_armory
- name = "\improper ColMarTech Staff Officer Armory Equipment Rack"
- desc = "An automated combat equipment vendor for Staff Officers."
- req_access = list(ACCESS_MARINE_COMMAND)
- icon_state = "mar_rack"
- vendor_role = list(JOB_SO)
-
-/obj/structure/machinery/cm_vending/clothing/staff_officer_armory/get_listed_products(mob/user)
- return GLOB.cm_vending_clothing_staff_officer_armory
-
-//------------GEAR---------------
-
-GLOBAL_LIST_INIT(cm_vending_clothing_staff_officer_armory, list(
- list("COMBAT EQUIPMENT (TAKE ALL)", 0, null, null, null),
- list("Officer M3 Armor", 0, /obj/item/clothing/suit/storage/marine/MP/SO, MARINE_CAN_BUY_COMBAT_ARMOR, VENDOR_ITEM_MANDATORY),
- list("Officer M10 Helmet", 0, /obj/item/clothing/head/helmet/marine/MP/SO, MARINE_CAN_BUY_COMBAT_HELMET, VENDOR_ITEM_MANDATORY),
- list("Marine Combat Boots", 0, /obj/item/clothing/shoes/marine/knife, MARINE_CAN_BUY_SHOES, VENDOR_ITEM_MANDATORY),
- list("Marine Combat Gloves", 0, /obj/item/clothing/gloves/marine, MARINE_CAN_BUY_GLOVES, VENDOR_ITEM_MANDATORY),
- list("MRE", 0, /obj/item/storage/box/MRE, MARINE_CAN_BUY_MRE, VENDOR_ITEM_MANDATORY),
- list("Aviator Shades", 0, /obj/item/clothing/glasses/sunglasses/aviator, MARINE_CAN_BUY_GLASSES, VENDOR_ITEM_REGULAR),
- list("Bayonet", 0, /obj/item/attachable/bayonet, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR),
-
- list("SPECIALISATION KIT (CHOOSE 1)", 0, null, null, null),
- list("Essential Engineer Set", 0, /obj/effect/essentials_set/engi, MARINE_CAN_BUY_ESSENTIALS, VENDOR_ITEM_RECOMMENDED),
- list("Essential Medical Set", 0, /obj/effect/essentials_set/medic, MARINE_CAN_BUY_ESSENTIALS, VENDOR_ITEM_RECOMMENDED),
-
- list("BELT (CHOOSE 1)", 0, null, null, null),
- list("G8-A General Utility Pouch", 0, /obj/item/storage/backpack/general_belt, MARINE_CAN_BUY_BELT, VENDOR_ITEM_RECOMMENDED),
- list("M276 Ammo Load Rig", 0, /obj/item/storage/belt/marine, MARINE_CAN_BUY_BELT, VENDOR_ITEM_RECOMMENDED),
- list("M276 Toolbelt Rig (Full)", 0, /obj/item/storage/belt/utility/full, MARINE_CAN_BUY_BELT, VENDOR_ITEM_RECOMMENDED),
- list("M276 Lifesaver Bag (Full)", 0, /obj/item/storage/belt/medical/lifesaver/full, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
- list("M276 Medical Storage Rig (Full)", 0, /obj/item/storage/belt/medical/full, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
- list("M276 M39 Holster Rig", 0, /obj/item/storage/belt/gun/m39, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
- list("M276 M82F Holster Rig", 0, /obj/item/storage/belt/gun/flaregun, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
- list("M276 Shotgun Shell Loading Rig", 0, /obj/item/storage/belt/shotgun, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
- list("M276 M40 Grenade Rig", 0, /obj/item/storage/belt/grenade, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
-
- list("POUCHES (CHOOSE 2)", 0, null, null, null),
- list("Autoinjector Pouch", 0, /obj/item/storage/pouch/autoinjector, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
- list("Construction Pouch", 0, /obj/item/storage/pouch/construction, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
- list("Document Pouch", 0, /obj/item/storage/pouch/document, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
- list("Electronics Pouch (Full)", 0, /obj/item/storage/pouch/electronics/full, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
- list("First-Aid Pouch (Refillable Injectors)", 0, /obj/item/storage/pouch/firstaid/full, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
- list("First-Aid Pouch (Splints, Gauze, Ointment)", 0, /obj/item/storage/pouch/firstaid/full/alternate, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
- list("First-Aid Pouch (Pill Packets)", 0, /obj/item/storage/pouch/firstaid/full/pills, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
- list("First Responder Pouch", 0, /obj/item/storage/pouch/first_responder, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
- list("Flare Pouch (Full)", 0, /obj/item/storage/pouch/flare/full, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
- list("Fuel Tank Strap Pouch", 0, /obj/item/storage/pouch/flamertank, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
- list("Large General Pouch", 0, /obj/item/storage/pouch/general/large, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_RECOMMENDED),
- list("Large Magazine Pouch", 0, /obj/item/storage/pouch/magazine/large, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
- list("Large Shotgun Shell Pouch", 0, /obj/item/storage/pouch/shotgun/large, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
- list("Large Pistol Magazine Pouch", 0, /obj/item/storage/pouch/magazine/pistol/large, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
- list("Medical Pouch", 0, /obj/item/storage/pouch/medical, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
- list("Medical Kit Pouch", 0, /obj/item/storage/pouch/medkit, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
- list("Pistol Pouch", 0, /obj/item/storage/pouch/pistol, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
- list("Sling Pouch", 0, /obj/item/storage/pouch/sling, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
- list("Tools Pouch (Full)", 0, /obj/item/storage/pouch/tools/full, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
-
- list("ACCESSORIES (CHOOSE 1)", 0, null, null, null),
- list("Black Webbing Vest", 0, /obj/item/clothing/accessory/storage/black_vest, MARINE_CAN_BUY_ACCESSORY, VENDOR_ITEM_REGULAR),
- list("Brown Webbing Vest", 0, /obj/item/clothing/accessory/storage/black_vest/brown_vest, MARINE_CAN_BUY_ACCESSORY, VENDOR_ITEM_RECOMMENDED),
- list("Drop Pouch", 0, /obj/item/clothing/accessory/storage/droppouch, MARINE_CAN_BUY_ACCESSORY, VENDOR_ITEM_REGULAR),
- list("Webbing", 0, /obj/item/clothing/accessory/storage/webbing, MARINE_CAN_BUY_ACCESSORY, VENDOR_ITEM_REGULAR),
- list("Shoulder Holster", 0, /obj/item/clothing/accessory/storage/holster, MARINE_CAN_BUY_ACCESSORY, VENDOR_ITEM_REGULAR),
-
- list("MASK (CHOOSE 1)", 0, null, null, null),
- list("Gas Mask", 0, /obj/item/clothing/mask/gas, MARINE_CAN_BUY_MASK, VENDOR_ITEM_REGULAR),
- list("Heat Absorbent Coif", 0, /obj/item/clothing/mask/rebreather/scarf, MARINE_CAN_BUY_MASK, VENDOR_ITEM_REGULAR),
-
- list("OTHER SUPPLIES", 0, null, null, null),
- list("Medical Helmet Optic", 5, /obj/item/device/helmet_visor/medical, null, VENDOR_ITEM_REGULAR),
- list("Welding Visor", 5, /obj/item/device/helmet_visor/welding_visor, null, VENDOR_ITEM_REGULAR),
- list("Magnetic Harness", 12, /obj/item/attachable/magnetic_harness, null, VENDOR_ITEM_REGULAR),
- list("Radio Telephone Pack", 15, /obj/item/storage/backpack/marine/satchel/rto, null, VENDOR_ITEM_RECOMMENDED),
- list("Binoculars", 5,/obj/item/device/binoculars, null, VENDOR_ITEM_REGULAR),
- list("Rangefinder", 8, /obj/item/device/binoculars/range, null, VENDOR_ITEM_REGULAR),
- list("Laser Designator", 12, /obj/item/device/binoculars/range/designator, null, VENDOR_ITEM_RECOMMENDED),
- list("Data Detector", 5, /obj/item/device/motiondetector/intel, null, VENDOR_ITEM_REGULAR),
- list("Flashlight", 1, /obj/item/device/flashlight, null, VENDOR_ITEM_RECOMMENDED),
- list("Fulton Recovery Device", 5, /obj/item/stack/fulton, null, VENDOR_ITEM_REGULAR),
- list("Motion Detector", 5, /obj/item/device/motiondetector, null, VENDOR_ITEM_REGULAR),
- list("Space Cleaner", 2, /obj/item/reagent_container/spray/cleaner, null, VENDOR_ITEM_REGULAR),
- list("Blowtorch", 5, /obj/item/tool/weldingtool, null, VENDOR_ITEM_REGULAR),
- list("Wrench", 1, /obj/item/tool/wrench, null, VENDOR_ITEM_REGULAR),
- list("Crowbar", 1, /obj/item/tool/crowbar, null, VENDOR_ITEM_REGULAR),
- list("Entrenching Tool", 1, /obj/item/tool/shovel/etool, null, VENDOR_ITEM_REGULAR),
- list("Whistle", 5, /obj/item/device/whistle, null, VENDOR_ITEM_REGULAR),
- list("Machete Scabbard (Full)", 5, /obj/item/storage/large_holster/machete/full, null, VENDOR_ITEM_REGULAR)
- ))
diff --git a/code/modules/gear_presets/uscm_ship.dm b/code/modules/gear_presets/uscm_ship.dm
index 76b0ea2c9341..ba4a8a684321 100644
--- a/code/modules/gear_presets/uscm_ship.dm
+++ b/code/modules/gear_presets/uscm_ship.dm
@@ -546,7 +546,6 @@
new_human.equip_to_slot_or_del(new /obj/item/device/radio/headset/almayer/mcom(new_human), WEAR_L_EAR)
new_human.equip_to_slot_or_del(new /obj/item/clothing/under/marine/officer/bridge(new_human), WEAR_BODY)
new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/dress(new_human), WEAR_FEET)
- new_human.equip_to_slot_or_del(new /obj/item/storage/belt/gun/m4a3/mod88(new_human), WEAR_WAIST)
new_human.equip_to_slot_or_del(new /obj/item/clothing/head/cmcap/bridge(new_human), WEAR_HEAD)
new_human.equip_to_slot_or_del(new back_item(new_human), WEAR_BACK)
new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/general/large(new_human), WEAR_L_STORE)
diff --git a/colonialmarines.dme b/colonialmarines.dme
index d4c8bf6ce6e3..d1dc35b9fe77 100644
--- a/colonialmarines.dme
+++ b/colonialmarines.dme
@@ -1003,7 +1003,6 @@
#include "code\game\machinery\vending\vendor_types\crew\sea.dm"
#include "code\game\machinery\vending\vendor_types\crew\senior_officers.dm"
#include "code\game\machinery\vending\vendor_types\crew\staff_officer.dm"
-#include "code\game\machinery\vending\vendor_types\crew\staff_officer_armory.dm"
#include "code\game\machinery\vending\vendor_types\crew\synthetic.dm"
#include "code\game\machinery\vending\vendor_types\crew\vehicle_crew.dm"
#include "code\game\machinery\vending\vendor_types\squad_prep\squad_engineer.dm"
diff --git a/maps/map_files/USS_Almayer/USS_Almayer.dmm b/maps/map_files/USS_Almayer/USS_Almayer.dmm
index c1d18d4f9483..dba72a936591 100644
--- a/maps/map_files/USS_Almayer/USS_Almayer.dmm
+++ b/maps/map_files/USS_Almayer/USS_Almayer.dmm
@@ -235,7 +235,7 @@
name = "General Listening Channel";
pixel_y = 28
},
-/obj/structure/machinery/cm_vending/clothing/staff_officer_armory,
+/obj/structure/machinery/cm_vending/gear/staff_officer_armory,
/turf/open/floor/almayer/redfull,
/area/almayer/command/cic)
"abR" = (
@@ -51901,7 +51901,7 @@
/turf/open/floor/almayer/test_floor4,
/area/almayer/maint/upper/u_a_p)
"ryR" = (
-/obj/structure/machinery/cm_vending/clothing/staff_officer_armory,
+/obj/structure/machinery/cm_vending/gear/staff_officer_armory,
/turf/open/floor/almayer/redfull,
/area/almayer/command/cic)
"ryY" = (
From 1beda3b48be1a2bf7f6453a65460feded955b55c Mon Sep 17 00:00:00 2001
From: cm13-github <128137806+cm13-github@users.noreply.github.com>
Date: Sat, 3 Aug 2024 05:52:06 +0100
Subject: [PATCH 09/66] Automatic changelog for PR #6301 [ci skip]
---
html/changelogs/AutoChangeLog-pr-6301.yml | 8 ++++++++
1 file changed, 8 insertions(+)
create mode 100644 html/changelogs/AutoChangeLog-pr-6301.yml
diff --git a/html/changelogs/AutoChangeLog-pr-6301.yml b/html/changelogs/AutoChangeLog-pr-6301.yml
new file mode 100644
index 000000000000..b45b76cea902
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-6301.yml
@@ -0,0 +1,8 @@
+author: "SpypigDev"
+delete-after: True
+changes:
+ - refactor: "SO armory vendor code refactored into the main SO gear vendor code"
+ - balance: "XO weapon and clothing vendors fitted with a more modernized equipment set"
+ - balance: "XO weapon vendor now offers Medic or Engineer essentials sets"
+ - bugfix: "Vending an autoinjector pouch as SO or XO now produces a full pouch, rather than empty"
+ - balance: "SO's mod88 removed from cryo spawn and moved to their vendor instead"
\ No newline at end of file
From 9ac8465a2241f5378e617582f833a4304300ea79 Mon Sep 17 00:00:00 2001
From: ihatethisengine <115417687+ihatethisengine@users.noreply.github.com>
Date: Sat, 3 Aug 2024 08:52:52 +0300
Subject: [PATCH 10/66] =?UTF-8?q?Sacrifice=20ability=20buff=20=E2=80=94=20?=
=?UTF-8?q?now=20guarantees=20to=20get=20the=20target=20out=20of=20crit=20?=
=?UTF-8?q?on=20top=20of=20the=20heal=20(#6845)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
# About the pull request
Now on top of transferring 75% of the healer's health the ability first
"uncrits" the target, i.e. sets a critted xeno health to zero (if health
was lower than zero) prior to the actual health transfer.
# Explain why it's good for the game
Sacrifice is generally not very impressive, because when you use it on a
xeno that have been critted (the obvious target for your Sacrifice
ability), you often end up spending a lot of your sacrifice healing
trying to get them out of the crit state (and sometimes it might not
even be enough to actually get them out of the crit state, due to
warding making them have a very huge negative health threshold), which
ends up in leaving your target at extremely low health, still stunned
from crit, and often without their source of warding (which is usually
you). This basically makes a lot of sacrifices be in vain, which is
pretty upsetting.
Now negative health is basically irrelevant for the sacrifice, as you
are guaranteed to put them out of crit. It still shouldn't be
overpowered, because even a full sacrifice heal will leave a critted
xeno with no more than 375 hp and this change doesn't affect sacrificing
for not critted xenos.
# Testing Photographs and Procedure
Screenshots & Videos
Yes, I tested this by bombing queen into -150, then sacrificing with
full health. Result is 375 hp.
# Changelog
:cl: ihatethisengine2
balance: sacrifice ability now guarantees to get the target out of crit
on top of the heal
/:cl:
---
.../mob/living/carbon/xenomorph/strains/castes/drone/healer.dm | 3 +++
1 file changed, 3 insertions(+)
diff --git a/code/modules/mob/living/carbon/xenomorph/strains/castes/drone/healer.dm b/code/modules/mob/living/carbon/xenomorph/strains/castes/drone/healer.dm
index 7ceaf2fed75e..736a3d54b422 100644
--- a/code/modules/mob/living/carbon/xenomorph/strains/castes/drone/healer.dm
+++ b/code/modules/mob/living/carbon/xenomorph/strains/castes/drone/healer.dm
@@ -257,6 +257,9 @@
xeno.say(";MY LIFE FOR THE QUEEN!!!")
+ if(target.health < 0)
+ target.gain_health(abs(target.health)) // gets them out of crit first
+
target.gain_health(xeno.health * transfer_mod)
target.updatehealth()
From 6bf78da8d8991a43ec8121383f34827451377712 Mon Sep 17 00:00:00 2001
From: cm13-github <128137806+cm13-github@users.noreply.github.com>
Date: Sat, 3 Aug 2024 06:58:11 +0100
Subject: [PATCH 11/66] Automatic changelog for PR #6845 [ci skip]
---
html/changelogs/AutoChangeLog-pr-6845.yml | 4 ++++
1 file changed, 4 insertions(+)
create mode 100644 html/changelogs/AutoChangeLog-pr-6845.yml
diff --git a/html/changelogs/AutoChangeLog-pr-6845.yml b/html/changelogs/AutoChangeLog-pr-6845.yml
new file mode 100644
index 000000000000..224db01fdc09
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-6845.yml
@@ -0,0 +1,4 @@
+author: "ihatethisengine2"
+delete-after: True
+changes:
+ - balance: "sacrifice ability now guarantees to get the target out of crit on top of the heal"
\ No newline at end of file
From 9144beb38a7fd4ae7f26a96224e84ad99d9b07b2 Mon Sep 17 00:00:00 2001
From: Vile Beggar
Date: Sat, 3 Aug 2024 07:53:08 +0200
Subject: [PATCH 12/66] Removes an unneeded var in mob_hud.dm (#6846)
# About the pull request
removes an unneeded var in mob_hud.dm. this got missed in my heartbreak
scan PR as i did not compile after adding the suggested changes
# Explain why it's good for the game
removes a warning when compiling the game
# Changelog
:cl:
code: removed an unneeded var in mob_hud.dm
/:cl:
---
code/datums/mob_hud.dm | 1 -
1 file changed, 1 deletion(-)
diff --git a/code/datums/mob_hud.dm b/code/datums/mob_hud.dm
index 33b756fc8447..011dc8e25dba 100644
--- a/code/datums/mob_hud.dm
+++ b/code/datums/mob_hud.dm
@@ -408,7 +408,6 @@ GLOBAL_LIST_INIT_TYPED(huds, /datum/mob_hud, list(
var/revive_enabled = stat == DEAD && check_tod() && is_revivable()
if(stat == DEAD)
revive_enabled = check_tod() && is_revivable()
- var/datum/internal_organ/heart/heart = islist(internal_organs_by_name) ? internal_organs_by_name["heart"] : null
var/holder2_set = 0
if(hivenumber)
From 873734fe77bc959c2411b4b4064f6c1c09c1f233 Mon Sep 17 00:00:00 2001
From: cm13-github <128137806+cm13-github@users.noreply.github.com>
Date: Sat, 3 Aug 2024 07:07:57 +0100
Subject: [PATCH 13/66] Automatic changelog for PR #6846 [ci skip]
---
html/changelogs/AutoChangeLog-pr-6846.yml | 4 ++++
1 file changed, 4 insertions(+)
create mode 100644 html/changelogs/AutoChangeLog-pr-6846.yml
diff --git a/html/changelogs/AutoChangeLog-pr-6846.yml b/html/changelogs/AutoChangeLog-pr-6846.yml
new file mode 100644
index 000000000000..8318cd0e3494
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-6846.yml
@@ -0,0 +1,4 @@
+author: "VileBeggar"
+delete-after: True
+changes:
+ - code_imp: "removed an unneeded var in mob_hud.dm"
\ No newline at end of file
From 2ee9bbee37fa5f6be0081e92f0911eb56bffc949 Mon Sep 17 00:00:00 2001
From: Steelpoint <6595389+Steelpoint@users.noreply.github.com>
Date: Sat, 3 Aug 2024 14:15:51 +0800
Subject: [PATCH 14/66] VP78 Improve Fire Range (#6735)
# About the pull request
This PR sets the maximum range of the VP78 to 6 tiles, up from 3, before
it experiences damage fall off.
# Explain why it's good for the game
Despite the buffs to the VP78 that raised its overall DPS from terrible
to average, by pistol standards, the weapon continues to flounder
amongst the community, its hard cap of 3 tiles before it experiences
horrible damage falloff, to the point the gun is dealing pitiful damage
at 5 to 6 tiles, makes the weapon anathema to much of the community, to
the point even Maintainers have pointed out how subpar the weapon is and
suggesting players use alternatives.
This state of affairs stands in stark contrast to the fact virtually
every single other pistol option Marines have access to feature a low
level of falloff at an identical value. The overall DPS of the VP78 is,
at optimal range, comparable to weapons like the Mod88 or the Revolver,
ergo I do not see any reason why the VP78 demands such a harsh penalty
to its damage at any range beyond close quarters, especially true of the
fact this weapon is in limited circulation and suffers very limited ammo
resupply possibilities.
# Testing Photographs and Procedure
Screenshots & Videos
Put screenshots and videos here with an empty line between the
screenshots and the `` tags.
# Changelog
:cl:
balance: The VP78 pistol will now deal maximum damage up to 6 tiles from
the shooters position before experiencing gradual damage falloff. This
is up from a previous maximum range of 3 tiles.
/:cl:
---------
Co-authored-by: Steelpoint
---
code/datums/ammo/bullet/pistol.dm | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/code/datums/ammo/bullet/pistol.dm b/code/datums/ammo/bullet/pistol.dm
index ced951241754..8b5239ba9127 100644
--- a/code/datums/ammo/bullet/pistol.dm
+++ b/code/datums/ammo/bullet/pistol.dm
@@ -180,12 +180,12 @@
headshot_state = HEADSHOT_OVERLAY_MEDIUM
debilitate = list(0,0,0,0,0,0,0,2)
- effective_range_max = 3
+ effective_range_max = 6
accuracy = HIT_ACCURACY_TIER_4
damage = 45
penetration= ARMOR_PENETRATION_TIER_6
shrapnel_chance = SHRAPNEL_CHANCE_TIER_2
- damage_falloff = DAMAGE_FALLOFF_TIER_6 //"VP78 - the only pistol viable as a primary."-Vampmare, probably.
+ damage_falloff = DAMAGE_FALLOFF_TIER_6
/datum/ammo/bullet/pistol/squash/toxin
name = "toxic squash-head pistol bullet"
From 9db8f36530979a1928f6ab67588adca73772e999 Mon Sep 17 00:00:00 2001
From: cm13-github <128137806+cm13-github@users.noreply.github.com>
Date: Sat, 3 Aug 2024 07:22:21 +0100
Subject: [PATCH 15/66] Automatic changelog for PR #6735 [ci skip]
---
html/changelogs/AutoChangeLog-pr-6735.yml | 4 ++++
1 file changed, 4 insertions(+)
create mode 100644 html/changelogs/AutoChangeLog-pr-6735.yml
diff --git a/html/changelogs/AutoChangeLog-pr-6735.yml b/html/changelogs/AutoChangeLog-pr-6735.yml
new file mode 100644
index 000000000000..8d84cd25a7b3
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-6735.yml
@@ -0,0 +1,4 @@
+author: "Steelpoint"
+delete-after: True
+changes:
+ - balance: "The VP78 pistol will now deal maximum damage up to 6 tiles from the shooters position before experiencing gradual damage falloff. This is up from a previous maximum range of 3 tiles."
\ No newline at end of file
From 6739ddcb02ae0edec6b130c2dbba741a72e520c7 Mon Sep 17 00:00:00 2001
From: Git-Nivrak <59925169+Git-Nivrak@users.noreply.github.com>
Date: Sat, 3 Aug 2024 08:50:08 +0200
Subject: [PATCH 16/66] Comtech Stuff (#6650)
# About the pull request
A bunch of qol and new items for combat technicians
# Explain why it's good for the game
Gives combat techs some new tools, toys and skills to make them feel
like an actual role rather than another guy with engineering skill.
# Sprite screenshots
![305680653-a9a4818a-83c9-43cf-8a12-a21cc95de856](https://github.com/user-attachments/assets/80ca281a-dd45-4a1f-9f6d-8f6f319c4a9d)
![305680657-5f5f6226-448e-4196-8a20-983da8f718be](https://github.com/user-attachments/assets/17128c68-9ff1-48de-9f6c-e52fea387ad0)
# Changelog
:cl: Nivrak, NervanCatos
balance: Modified engineering skill levels, Combat technicians now do
everything engineering related slightly faster. This does not affect any
other roles or skillchecks.
add: Adds the tactical compact nailgun to the Combat Technician's vendor
essential engineering kit, It cannot fire and uses 2 metal instead of 1
to repair. Credit to NervanCatos.
add: Added the M277 pattern construction rig, It comes with 6 slots
instead of 10 in the M276 but can carry metal and plasteel stacks.
Available in the CT vendor.
add: Added the Engineer Kit pouch, basically and engineer kit - in a
pouch. Restricted by engineering skill. Available in the CT vendor.
add: Added the Small Tool Webbing, A smaller variant of the tool webbing
with 6 slots instead of 7. Available in the CT vendor.
qol: Screwdriver, Crowbar, Blowtorch, Multitool, Wrench and Wirecutters
will now prioritize the tool webbing when quick equipping.
code: Added a new variable for items, preferred_storage which allows to
replicate the above behavior for other items and storages.
add: Added a new sentry upgrade, The omni-sentry. As the name suggests
it is omni-directional but has 30% reduces damage and a shorter range by
1.
qol: Made APC examine-text a bit more clear about what you should be
doing next.
/:cl:
---------
Co-authored-by: Drathek <76988376+Drulikar@users.noreply.github.com>
---
code/__DEFINES/skills.dm | 9 ++--
code/datums/skills/civilian.dm | 20 ++++----
code/datums/skills/clf.dm | 10 ++--
code/datums/skills/cmb.dm | 2 +-
code/datums/skills/commando.dm | 14 +++---
code/datums/skills/contractor.dm | 8 ++--
code/datums/skills/dutch.dm | 6 +--
code/datums/skills/forecon.dm | 12 ++---
code/datums/skills/freelancer.dm | 6 +--
code/datums/skills/mercenary.dm | 10 ++--
code/datums/skills/misc.dm | 6 +--
code/datums/skills/pmc.dm | 20 ++++----
code/datums/skills/rmc.dm | 8 ++--
code/datums/skills/synthetic.dm | 2 +-
code/datums/skills/upp.dm | 26 +++++-----
code/datums/skills/uscm.dm | 32 ++++++-------
code/datums/skills/wygoons.dm | 4 +-
.../colonialmarines/whiskey_outpost/skills.dm | 4 +-
code/game/jobs/job/marine/squad_info.dm | 6 +--
code/game/machinery/autolathe.dm | 10 ++--
code/game/machinery/colony_floodlights.dm | 12 ++---
code/game/machinery/computer/computer.dm | 2 +-
code/game/machinery/computer/demo_sim.dm | 2 +-
code/game/machinery/constructable_frame.dm | 2 +-
code/game/machinery/doors/airlock.dm | 6 +--
code/game/machinery/doors/multi_tile.dm | 4 +-
code/game/machinery/fusion_engine.dm | 6 +--
code/game/machinery/kitchen/smartfridge.dm | 6 +--
code/game/machinery/machinery.dm | 2 +-
.../telecomms/machine_interactions.dm | 4 +-
.../machinery/telecomms/portable_comms.dm | 2 +-
code/game/machinery/telecomms/presets.dm | 2 +-
code/game/machinery/vending/cm_vending.dm | 12 ++---
code/game/machinery/vending/vending.dm | 8 ++--
.../vending/vendor_types/requisitions.dm | 4 +-
.../vendor_types/squad_prep/squad_engineer.dm | 5 ++
.../vendor_types/squad_prep/squad_prep.dm | 3 +-
code/game/objects/items.dm | 3 ++
.../objects/items/circuitboards/computer.dm | 2 +-
code/game/objects/items/devices/multitool.dm | 3 +-
code/game/objects/items/devices/scanners.dm | 2 +-
.../objects/items/explosives/explosive.dm | 2 +-
code/game/objects/items/explosives/plastic.dm | 4 +-
code/game/objects/items/props/helmetgarb.dm | 4 +-
code/game/objects/items/storage/backpack.dm | 2 +-
code/game/objects/items/storage/belt.dm | 45 +++++++++++++++++-
code/game/objects/items/storage/pouch.dm | 22 +++++++++
code/game/objects/items/storage/toolkit.dm | 2 +-
.../objects/items/tools/maintenance_tools.dm | 6 ++-
.../objects/structures/barricade/barricade.dm | 8 +++-
.../structures/barricade/deployable.dm | 2 +-
.../objects/structures/barricade/metal.dm | 2 +-
.../objects/structures/barricade/plasteel.dm | 14 +++---
code/game/turfs/walls/walls.dm | 2 +-
code/modules/clothing/under/ties.dm | 21 ++++++++
code/modules/cm_marines/anti_air.dm | 2 +-
.../modules/cm_marines/equipment/kit_boxes.dm | 8 ++--
.../equipment/mortar/mortar_shells.dm | 2 +-
.../cm_marines/equipment/mortar/mortars.dm | 8 ++--
code/modules/cm_marines/orbital_cannon.dm | 2 +-
.../cm_tech/implements/xeno_handler.dm | 2 +-
code/modules/defenses/defenses.dm | 8 ++--
code/modules/defenses/handheld.dm | 11 ++++-
code/modules/defenses/sentry.dm | 8 +++-
code/modules/defenses/sentry_computer.dm | 4 +-
.../desert_dam/motion_sensor/sensortower.dm | 8 ++--
.../mob/living/carbon/human/inventory.dm | 2 +
code/modules/mob/mob_helpers.dm | 4 +-
code/modules/power/apc.dm | 26 +++++-----
code/modules/projectiles/gun_helpers.dm | 27 +++++++++++
code/modules/projectiles/guns/smgs.dm | 12 ++++-
.../projectiles/magazines/specialist.dm | 2 +-
.../chemistry_machinery/chem_master.dm | 2 +-
code/modules/vehicles/hardpoints/hardpoint.dm | 2 +-
.../vehicles/hardpoints/holder/holder.dm | 6 +--
.../multitile/multitile_hardpoints.dm | 4 +-
icons/mob/humans/onmob/items_lefthand_1.dmi | Bin 116593 -> 115379 bytes
icons/mob/humans/onmob/items_righthand_1.dmi | Bin 113442 -> 114511 bytes
icons/obj/items/clothing/belts.dmi | Bin 72464 -> 72348 bytes
.../weapons/guns/guns_by_faction/colony.dmi | Bin 26863 -> 27974 bytes
80 files changed, 377 insertions(+), 216 deletions(-)
diff --git a/code/__DEFINES/skills.dm b/code/__DEFINES/skills.dm
index d33e26c1c3f6..e4965907f707 100644
--- a/code/__DEFINES/skills.dm
+++ b/code/__DEFINES/skills.dm
@@ -70,10 +70,11 @@
// engineer skill
#define SKILL_ENGINEER_DEFAULT 0
-#define SKILL_ENGINEER_TRAINED 1 //barricade repair && c4 use (mini-engis, specs)
-#define SKILL_ENGINEER_ENGI 2 //plasteel barricade deconstruction, hacking&&planet engine fixing&&apc building, Telecomms fixing (Combat Engi, OT, etc.)
-#define SKILL_ENGINEER_MASTER 3 //Synths
-#define SKILL_ENGINEER_MAX 3
+#define SKILL_ENGINEER_NOVICE 1 //barricade repair && c4 use (mini-engis, specs)
+#define SKILL_ENGINEER_TRAINED 2 //plasteel barricade deconstruction, hacking&&planet engine fixing&&apc building, Telecomms fixing (OT, etc.)
+#define SKILL_ENGINEER_ENGI 3 // Slightly faster at everything (Combat Technicians)
+#define SKILL_ENGINEER_MASTER 4 //Synths
+#define SKILL_ENGINEER_MAX 4
//medical skill
#define SKILL_MEDICAL_DEFAULT 0
diff --git a/code/datums/skills/civilian.dm b/code/datums/skills/civilian.dm
index 0ff13ae67225..ff9cadf02913 100644
--- a/code/datums/skills/civilian.dm
+++ b/code/datums/skills/civilian.dm
@@ -20,7 +20,7 @@ CIVILIAN
SKILL_LEADERSHIP = SKILL_LEAD_MASTER,
SKILL_OVERWATCH = SKILL_OVERWATCH_TRAINED,
SKILL_MEDICAL = SKILL_MEDICAL_TRAINED,
- SKILL_ENGINEER = SKILL_ENGINEER_TRAINED,
+ SKILL_ENGINEER = SKILL_ENGINEER_NOVICE,
SKILL_VEHICLE = SKILL_VEHICLE_SMALL,
SKILL_INTEL = SKILL_INTEL_EXPERT,
)
@@ -31,7 +31,7 @@ CIVILIAN
SKILL_CQC = SKILL_CQC_DEFAULT,
SKILL_FIREMAN = SKILL_FIREMAN_TRAINED,
SKILL_ENDURANCE = SKILL_ENDURANCE_TRAINED,
- SKILL_ENGINEER = SKILL_ENGINEER_ENGI, //The ASRS consoles
+ SKILL_ENGINEER = SKILL_ENGINEER_TRAINED, //The ASRS consoles
SKILL_FIREARMS = SKILL_FIREARMS_CIVILIAN,
SKILL_POLICE = SKILL_POLICE_SKILLED, //The CMB Tradeband Compliance Device
)
@@ -43,7 +43,7 @@ CIVILIAN
SKILL_LEADERSHIP = SKILL_LEAD_MASTER,
SKILL_OVERWATCH = SKILL_OVERWATCH_TRAINED,
SKILL_MEDICAL = SKILL_MEDICAL_TRAINED,
- SKILL_ENGINEER = SKILL_ENGINEER_TRAINED,
+ SKILL_ENGINEER = SKILL_ENGINEER_NOVICE,
SKILL_VEHICLE = SKILL_VEHICLE_SMALL,
SKILL_POLICE = SKILL_POLICE_SKILLED,
SKILL_FIREMAN = SKILL_FIREMAN_SKILLED,
@@ -115,7 +115,7 @@ CIVILIAN
SKILL_ENDURANCE = SKILL_ENDURANCE_SURVIVOR,
SKILL_FIREARMS = SKILL_FIREARMS_EXPERT,
SKILL_VEHICLE = SKILL_VEHICLE_SMALL,
- SKILL_ENGINEER = SKILL_ENGINEER_ENGI,
+ SKILL_ENGINEER = SKILL_ENGINEER_TRAINED,
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI,
SKILL_POWERLOADER = SKILL_POWERLOADER_MASTER,
)
@@ -131,7 +131,7 @@ CIVILIAN
/datum/skills/civilian/survivor/clf
name = "Survivor CLF"
additional_skills = list(
- SKILL_ENGINEER = SKILL_ENGINEER_TRAINED,
+ SKILL_ENGINEER = SKILL_ENGINEER_NOVICE,
SKILL_MEDICAL = SKILL_MEDICAL_TRAINED,
SKILL_VEHICLE = SKILL_VEHICLE_SMALL,
SKILL_FIREMAN = SKILL_FIREMAN_SKILLED,
@@ -158,7 +158,7 @@ CIVILIAN
name = "Survivor Miner"
additional_skills = list(
SKILL_FIREMAN = SKILL_FIREMAN_TRAINED,
- SKILL_ENGINEER = SKILL_ENGINEER_TRAINED,
+ SKILL_ENGINEER = SKILL_ENGINEER_NOVICE,
SKILL_POWERLOADER = SKILL_POWERLOADER_MASTER,
SKILL_VEHICLE = SKILL_VEHICLE_SMALL,
)
@@ -167,7 +167,7 @@ CIVILIAN
name = "Survivor Trucker"
additional_skills = list(
SKILL_FIREMAN = SKILL_FIREMAN_TRAINED,
- SKILL_ENGINEER = SKILL_ENGINEER_ENGI,
+ SKILL_ENGINEER = SKILL_ENGINEER_TRAINED,
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI,
SKILL_VEHICLE = SKILL_VEHICLE_CREWMAN,
)
@@ -176,7 +176,7 @@ CIVILIAN
name = "Survivor Engineer"
additional_skills = list(
SKILL_FIREMAN = SKILL_FIREMAN_TRAINED,
- SKILL_ENGINEER = SKILL_ENGINEER_ENGI,
+ SKILL_ENGINEER = SKILL_ENGINEER_TRAINED,
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI,
SKILL_POWERLOADER = SKILL_POWERLOADER_MASTER,
SKILL_VEHICLE = SKILL_VEHICLE_SMALL,
@@ -192,7 +192,7 @@ CIVILIAN
/datum/skills/civilian/survivor/marshal
name = "Survivor Marshal"
skills = list(
- SKILL_ENGINEER = SKILL_ENGINEER_ENGI,
+ SKILL_ENGINEER = SKILL_ENGINEER_TRAINED,
SKILL_MELEE_WEAPONS = SKILL_MELEE_TRAINED,
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_TRAINED,
SKILL_MEDICAL = SKILL_MEDICAL_TRAINED,
@@ -201,7 +201,7 @@ CIVILIAN
SKILL_FIREARMS = SKILL_FIREARMS_TRAINED,
SKILL_POLICE = SKILL_POLICE_SKILLED,
SKILL_FIREMAN = SKILL_FIREMAN_SKILLED,
- SKILL_ENGINEER = SKILL_ENGINEER_TRAINED,
+ SKILL_ENGINEER = SKILL_ENGINEER_NOVICE,
SKILL_CQC = SKILL_CQC_SKILLED,
SKILL_FIREARMS = SKILL_FIREARMS_TRAINED,
)
diff --git a/code/datums/skills/clf.dm b/code/datums/skills/clf.dm
index 88aa14a41f79..64a8864d3c51 100644
--- a/code/datums/skills/clf.dm
+++ b/code/datums/skills/clf.dm
@@ -12,7 +12,7 @@ COLONIAL LIBERATION FRONT
SKILL_POLICE = SKILL_POLICE_SKILLED,
SKILL_FIREMAN = SKILL_FIREMAN_TRAINED,
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_TRAINED,
- SKILL_ENGINEER = SKILL_ENGINEER_TRAINED,
+ SKILL_ENGINEER = SKILL_ENGINEER_NOVICE,
SKILL_MEDICAL = SKILL_MEDICAL_TRAINED,
SKILL_VEHICLE = SKILL_VEHICLE_SMALL,
SKILL_ENDURANCE = SKILL_ENDURANCE_WEAK,
@@ -24,7 +24,7 @@ COLONIAL LIBERATION FRONT
skills = list(
SKILL_FIREMAN = SKILL_FIREMAN_TRAINED,
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI,
- SKILL_ENGINEER = SKILL_ENGINEER_ENGI,
+ SKILL_ENGINEER = SKILL_ENGINEER_TRAINED,
SKILL_MEDICAL = SKILL_MEDICAL_TRAINED,
SKILL_POWERLOADER = SKILL_POWERLOADER_TRAINED,
SKILL_VEHICLE = SKILL_VEHICLE_SMALL,
@@ -48,7 +48,7 @@ COLONIAL LIBERATION FRONT
skills = list(
SKILL_MEDICAL = SKILL_MEDICAL_TRAINED,
SKILL_CQC = SKILL_CQC_TRAINED,
- SKILL_ENGINEER = SKILL_ENGINEER_TRAINED, //to use c4 in demo set.
+ SKILL_ENGINEER = SKILL_ENGINEER_NOVICE, //to use c4 in demo set.
SKILL_LEADERSHIP = SKILL_LEAD_TRAINED,
SKILL_SPEC_WEAPONS = SKILL_SPEC_ALL,
SKILL_ENDURANCE = SKILL_ENDURANCE_TRAINED,
@@ -60,7 +60,7 @@ COLONIAL LIBERATION FRONT
name = "CLF Leader"
skills = list(
SKILL_FIREARMS = SKILL_FIREARMS_TRAINED,
- SKILL_ENGINEER = SKILL_ENGINEER_ENGI, // to use their C4
+ SKILL_ENGINEER = SKILL_ENGINEER_TRAINED, // to use their C4
SKILL_CQC = SKILL_CQC_SKILLED,
SKILL_LEADERSHIP = SKILL_LEAD_EXPERT,
SKILL_OVERWATCH = SKILL_OVERWATCH_TRAINED,
@@ -78,7 +78,7 @@ COLONIAL LIBERATION FRONT
name = "CLF Cell Commander"
skills = list(
SKILL_FIREARMS = SKILL_FIREARMS_EXPERT,
- SKILL_ENGINEER = SKILL_ENGINEER_ENGI,
+ SKILL_ENGINEER = SKILL_ENGINEER_TRAINED,
SKILL_CQC = SKILL_CQC_SKILLED,
SKILL_LEADERSHIP = SKILL_LEAD_MASTER,
SKILL_OVERWATCH = SKILL_OVERWATCH_TRAINED,
diff --git a/code/datums/skills/cmb.dm b/code/datums/skills/cmb.dm
index b29a4c314567..8fa7ca4dd892 100644
--- a/code/datums/skills/cmb.dm
+++ b/code/datums/skills/cmb.dm
@@ -26,7 +26,7 @@ COLONIAL MARSHALS
SKILL_LEADERSHIP = SKILL_LEAD_MASTER,
SKILL_OVERWATCH = SKILL_OVERWATCH_TRAINED,
SKILL_MEDICAL = SKILL_MEDICAL_MEDIC,
- SKILL_ENGINEER = SKILL_ENGINEER_ENGI,
+ SKILL_ENGINEER = SKILL_ENGINEER_TRAINED,
SKILL_FIREMAN = SKILL_FIREMAN_MASTER,
SKILL_FIREARMS = SKILL_FIREARMS_MAX,
SKILL_MELEE_WEAPONS = SKILL_MELEE_TRAINED,
diff --git a/code/datums/skills/commando.dm b/code/datums/skills/commando.dm
index ed5e5ee086e4..5133cb0e55ea 100644
--- a/code/datums/skills/commando.dm
+++ b/code/datums/skills/commando.dm
@@ -9,7 +9,7 @@ SPEC-OPS
skills = list(
SKILL_CQC = SKILL_CQC_EXPERT,
SKILL_FIREMAN = SKILL_FIREMAN_SKILLED,
- SKILL_ENGINEER = SKILL_ENGINEER_ENGI,
+ SKILL_ENGINEER = SKILL_ENGINEER_TRAINED,
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI,
SKILL_FIREARMS = SKILL_FIREARMS_EXPERT,
SKILL_MEDICAL = SKILL_MEDICAL_TRAINED,
@@ -24,7 +24,7 @@ SPEC-OPS
skills = list(
SKILL_CQC = SKILL_CQC_EXPERT,
SKILL_FIREMAN = SKILL_FIREMAN_SKILLED,
- SKILL_ENGINEER = SKILL_ENGINEER_ENGI,
+ SKILL_ENGINEER = SKILL_ENGINEER_TRAINED,
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI,
SKILL_FIREARMS = SKILL_FIREARMS_EXPERT,
SKILL_MEDICAL = SKILL_MEDICAL_MEDIC,
@@ -40,7 +40,7 @@ SPEC-OPS
skills = list(
SKILL_CQC = SKILL_CQC_EXPERT,
SKILL_FIREMAN = SKILL_FIREMAN_SKILLED,
- SKILL_ENGINEER = SKILL_ENGINEER_ENGI,
+ SKILL_ENGINEER = SKILL_ENGINEER_TRAINED,
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI,
SKILL_FIREARMS = SKILL_FIREARMS_EXPERT,
SKILL_LEADERSHIP = SKILL_LEAD_TRAINED,
@@ -56,7 +56,7 @@ SPEC-OPS
skills = list(
SKILL_CQC = SKILL_CQC_MASTER,
SKILL_FIREMAN = SKILL_FIREMAN_SKILLED,
- SKILL_ENGINEER = SKILL_ENGINEER_ENGI,
+ SKILL_ENGINEER = SKILL_ENGINEER_TRAINED,
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI,
SKILL_FIREARMS = SKILL_FIREARMS_EXPERT,
SKILL_MEDICAL = SKILL_MEDICAL_MEDIC,
@@ -71,7 +71,7 @@ SPEC-OPS
skills = list(
SKILL_CQC = SKILL_CQC_MASTER,
SKILL_FIREMAN = SKILL_FIREMAN_MASTER,
- SKILL_ENGINEER = SKILL_ENGINEER_ENGI,
+ SKILL_ENGINEER = SKILL_ENGINEER_TRAINED,
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI,
SKILL_FIREARMS = SKILL_FIREARMS_EXPERT,
SKILL_LEADERSHIP = SKILL_LEAD_TRAINED,
@@ -87,7 +87,7 @@ SPEC-OPS
skills = list(
SKILL_CQC = SKILL_CQC_MASTER,
SKILL_FIREMAN = SKILL_FIREMAN_MASTER,
- SKILL_ENGINEER = SKILL_ENGINEER_ENGI,
+ SKILL_ENGINEER = SKILL_ENGINEER_TRAINED,
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI,
SKILL_FIREARMS = SKILL_FIREARMS_EXPERT,
SKILL_LEADERSHIP = SKILL_LEAD_EXPERT,
@@ -105,7 +105,7 @@ SPEC-OPS
SKILL_CQC = SKILL_CQC_TRAINED,
SKILL_FIREMAN = SKILL_FIREMAN_TRAINED,
SKILL_FIREARMS = SKILL_FIREARMS_EXPERT,
- SKILL_ENGINEER = SKILL_ENGINEER_ENGI,
+ SKILL_ENGINEER = SKILL_ENGINEER_TRAINED,
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI,
SKILL_MEDICAL = SKILL_MEDICAL_TRAINED,
SKILL_POWERLOADER = SKILL_POWERLOADER_MASTER,
diff --git a/code/datums/skills/contractor.dm b/code/datums/skills/contractor.dm
index 183e95c941f5..5e079e5664d4 100644
--- a/code/datums/skills/contractor.dm
+++ b/code/datums/skills/contractor.dm
@@ -7,7 +7,7 @@ CONTRACTORS
name = "Contractor Standard"
skills = list(
SKILL_CQC = SKILL_CQC_TRAINED,
- SKILL_ENGINEER = SKILL_ENGINEER_TRAINED,
+ SKILL_ENGINEER = SKILL_ENGINEER_NOVICE,
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_TRAINED,
SKILL_FIREARMS = SKILL_FIREARMS_MAX,
SKILL_POLICE = SKILL_POLICE_SKILLED,
@@ -22,7 +22,7 @@ CONTRACTORS
/datum/skills/contractor/leader
name = "Contractor Leader"
skills = list(
- SKILL_ENGINEER = SKILL_ENGINEER_ENGI,
+ SKILL_ENGINEER = SKILL_ENGINEER_TRAINED,
SKILL_FIREARMS = SKILL_FIREARMS_MAX,
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI,
SKILL_LEADERSHIP = SKILL_LEAD_MASTER,
@@ -45,7 +45,7 @@ CONTRACTORS
SKILL_POLICE = SKILL_POLICE_SKILLED,
SKILL_FIREMAN = SKILL_FIREMAN_SKILLED,
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_TRAINED,
- SKILL_ENGINEER = SKILL_ENGINEER_TRAINED,
+ SKILL_ENGINEER = SKILL_ENGINEER_NOVICE,
SKILL_MEDICAL = SKILL_MEDICAL_DOCTOR,
SKILL_SURGERY = SKILL_SURGERY_TRAINED,
SKILL_VEHICLE = SKILL_VEHICLE_LARGE,
@@ -76,7 +76,7 @@ CONTRACTORS
name = "Contractor Machinegunner"
skills = list(
SKILL_CQC = SKILL_CQC_TRAINED,
- SKILL_ENGINEER = SKILL_ENGINEER_TRAINED,
+ SKILL_ENGINEER = SKILL_ENGINEER_NOVICE,
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_TRAINED,
SKILL_FIREARMS = SKILL_FIREARMS_MAX,
SKILL_POLICE = SKILL_POLICE_SKILLED,
diff --git a/code/datums/skills/dutch.dm b/code/datums/skills/dutch.dm
index 4f19233e66d0..ec550f8e2bdf 100644
--- a/code/datums/skills/dutch.dm
+++ b/code/datums/skills/dutch.dm
@@ -4,7 +4,7 @@
SKILL_CQC = SKILL_CQC_MASTER,
SKILL_FIREMAN = SKILL_FIREMAN_MAX,
SKILL_MELEE_WEAPONS = SKILL_MELEE_MAX,
- SKILL_ENGINEER = SKILL_ENGINEER_ENGI,
+ SKILL_ENGINEER = SKILL_ENGINEER_TRAINED,
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI,
SKILL_FIREARMS = SKILL_FIREARMS_EXPERT,
SKILL_LEADERSHIP = SKILL_LEAD_MASTER,
@@ -20,7 +20,7 @@
name = "Dutch's Dozen Mercenary"
skills = list(
SKILL_CQC = SKILL_CQC_TRAINED,
- SKILL_ENGINEER = SKILL_ENGINEER_ENGI,
+ SKILL_ENGINEER = SKILL_ENGINEER_TRAINED,
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI,
SKILL_FIREARMS = SKILL_FIREARMS_EXPERT,
SKILL_MEDICAL = SKILL_MEDICAL_TRAINED,
@@ -35,7 +35,7 @@
name = "Dutch's Dozen Medic"
skills = list(
SKILL_CQC = SKILL_CQC_TRAINED,
- SKILL_ENGINEER = SKILL_ENGINEER_ENGI,
+ SKILL_ENGINEER = SKILL_ENGINEER_TRAINED,
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_TRAINED,
SKILL_FIREARMS = SKILL_FIREARMS_EXPERT,
SKILL_MEDICAL = SKILL_MEDICAL_DOCTOR,
diff --git a/code/datums/skills/forecon.dm b/code/datums/skills/forecon.dm
index 724a49ee98ca..aef187ce05dd 100644
--- a/code/datums/skills/forecon.dm
+++ b/code/datums/skills/forecon.dm
@@ -8,7 +8,7 @@ MILITARY SURVIVORS
/datum/skills/military/survivor/forecon_standard
name = "Reconnaissance Rifleman"
skills = list(
- SKILL_ENGINEER = SKILL_ENGINEER_ENGI,
+ SKILL_ENGINEER = SKILL_ENGINEER_TRAINED,
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_DEFAULT,
SKILL_MELEE_WEAPONS = SKILL_MELEE_TRAINED,
SKILL_CQC = SKILL_CQC_TRAINED,
@@ -24,7 +24,7 @@ MILITARY SURVIVORS
/datum/skills/military/survivor/forecon_techician
name = "Reconnaissance Support Technician"
skills = list(
- SKILL_ENGINEER = SKILL_ENGINEER_ENGI,
+ SKILL_ENGINEER = SKILL_ENGINEER_TRAINED,
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI,
SKILL_MELEE_WEAPONS = SKILL_MELEE_TRAINED,
SKILL_CQC = SKILL_CQC_TRAINED,
@@ -41,7 +41,7 @@ MILITARY SURVIVORS
/datum/skills/military/survivor/forecon_marksman
name = "Reconnaissance Designated Marksman"
skills = list(
- SKILL_ENGINEER = SKILL_ENGINEER_ENGI,
+ SKILL_ENGINEER = SKILL_ENGINEER_TRAINED,
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_DEFAULT,
SKILL_MELEE_WEAPONS = SKILL_MELEE_TRAINED,
SKILL_CQC = SKILL_CQC_TRAINED,
@@ -58,7 +58,7 @@ MILITARY SURVIVORS
/datum/skills/military/survivor/forecon_smartgunner
name = "Reconnaissance Smartgunner"
skills = list(
- SKILL_ENGINEER = SKILL_ENGINEER_ENGI,
+ SKILL_ENGINEER = SKILL_ENGINEER_TRAINED,
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_DEFAULT,
SKILL_MELEE_WEAPONS = SKILL_MELEE_TRAINED,
SKILL_CQC = SKILL_CQC_TRAINED,
@@ -75,7 +75,7 @@ MILITARY SURVIVORS
/datum/skills/military/survivor/forecon_sniper
name = "Reconnaissance Sniper"
skills = list(
- SKILL_ENGINEER = SKILL_ENGINEER_ENGI,
+ SKILL_ENGINEER = SKILL_ENGINEER_TRAINED,
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_DEFAULT,
SKILL_MELEE_WEAPONS = SKILL_MELEE_TRAINED,
SKILL_CQC = SKILL_CQC_TRAINED,
@@ -92,7 +92,7 @@ MILITARY SURVIVORS
/datum/skills/military/survivor/forecon_squad_leader
name = "Reconnaissance Squad Leader"
skills = list(
- SKILL_ENGINEER = SKILL_ENGINEER_ENGI,
+ SKILL_ENGINEER = SKILL_ENGINEER_TRAINED,
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_DEFAULT,
SKILL_MELEE_WEAPONS = SKILL_MELEE_TRAINED,
SKILL_CQC = SKILL_CQC_SKILLED,
diff --git a/code/datums/skills/freelancer.dm b/code/datums/skills/freelancer.dm
index 09df9f32369c..cf7baa15532b 100644
--- a/code/datums/skills/freelancer.dm
+++ b/code/datums/skills/freelancer.dm
@@ -11,7 +11,7 @@ FREELANCERS
skills = list(
SKILL_FIREMAN = SKILL_FIREMAN_TRAINED,
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI,
- SKILL_ENGINEER = SKILL_ENGINEER_ENGI,
+ SKILL_ENGINEER = SKILL_ENGINEER_TRAINED,
SKILL_ENDURANCE = SKILL_ENDURANCE_TRAINED,
)
@@ -20,7 +20,7 @@ FREELANCERS
skills = list(
SKILL_FIREMAN = SKILL_FIREMAN_TRAINED,
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI,
- SKILL_ENGINEER = SKILL_ENGINEER_ENGI,
+ SKILL_ENGINEER = SKILL_ENGINEER_TRAINED,
SKILL_ENDURANCE = SKILL_ENDURANCE_TRAINED,
SKILL_MEDICAL = SKILL_MEDICAL_MEDIC,
SKILL_SURGERY = SKILL_SURGERY_TRAINED,
@@ -31,7 +31,7 @@ FREELANCERS
skills = list(
SKILL_FIREMAN = SKILL_FIREMAN_SKILLED,
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI,
- SKILL_ENGINEER = SKILL_ENGINEER_ENGI,
+ SKILL_ENGINEER = SKILL_ENGINEER_TRAINED,
SKILL_ENDURANCE = SKILL_ENDURANCE_TRAINED,
SKILL_MEDICAL = SKILL_MEDICAL_MEDIC,
SKILL_CQC = SKILL_CQC_TRAINED,
diff --git a/code/datums/skills/mercenary.dm b/code/datums/skills/mercenary.dm
index 1dc18eaa2fbc..35a6378f51a4 100644
--- a/code/datums/skills/mercenary.dm
+++ b/code/datums/skills/mercenary.dm
@@ -3,7 +3,7 @@
skills = list(
SKILL_CQC = SKILL_CQC_SKILLED,
SKILL_FIREMAN = SKILL_FIREMAN_SKILLED,
- SKILL_ENGINEER = SKILL_ENGINEER_ENGI,
+ SKILL_ENGINEER = SKILL_ENGINEER_TRAINED,
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI,
SKILL_FIREARMS = SKILL_FIREARMS_EXPERT,
SKILL_MEDICAL = SKILL_MEDICAL_TRAINED,
@@ -16,7 +16,7 @@
skills = list(
SKILL_CQC = SKILL_CQC_SKILLED,
SKILL_FIREMAN = SKILL_FIREMAN_SKILLED,
- SKILL_ENGINEER = SKILL_ENGINEER_ENGI,
+ SKILL_ENGINEER = SKILL_ENGINEER_TRAINED,
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI,
SKILL_FIREARMS = SKILL_FIREARMS_MAX,
SKILL_MEDICAL = SKILL_MEDICAL_TRAINED,
@@ -31,7 +31,7 @@
skills = list(
SKILL_CQC = SKILL_CQC_SKILLED,
SKILL_FIREMAN = SKILL_FIREMAN_SKILLED,
- SKILL_ENGINEER = SKILL_ENGINEER_ENGI,
+ SKILL_ENGINEER = SKILL_ENGINEER_TRAINED,
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI,
SKILL_FIREARMS = SKILL_FIREARMS_MAX,
SKILL_MEDICAL = SKILL_MEDICAL_MASTER,
@@ -62,7 +62,7 @@
skills = list(
SKILL_CQC = SKILL_CQC_SKILLED,
SKILL_FIREMAN = SKILL_FIREMAN_SKILLED,
- SKILL_ENGINEER = SKILL_ENGINEER_ENGI,
+ SKILL_ENGINEER = SKILL_ENGINEER_TRAINED,
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI,
SKILL_FIREARMS = SKILL_FIREARMS_MAX,
SKILL_MEDICAL = SKILL_MEDICAL_TRAINED,
@@ -78,7 +78,7 @@
skills = list(
SKILL_CQC = SKILL_CQC_SKILLED,
SKILL_FIREMAN = SKILL_FIREMAN_SKILLED,
- SKILL_ENGINEER = SKILL_ENGINEER_ENGI,
+ SKILL_ENGINEER = SKILL_ENGINEER_TRAINED,
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI,
SKILL_FIREARMS = SKILL_FIREARMS_MAX,
SKILL_LEADERSHIP = SKILL_LEAD_MASTER,
diff --git a/code/datums/skills/misc.dm b/code/datums/skills/misc.dm
index 0f0ca657f995..204890685b91 100644
--- a/code/datums/skills/misc.dm
+++ b/code/datums/skills/misc.dm
@@ -11,7 +11,7 @@ MISCELLANEOUS
SKILL_LEADERSHIP = SKILL_LEAD_EXPERT,
SKILL_OVERWATCH = SKILL_OVERWATCH_TRAINED,
SKILL_POWERLOADER = SKILL_POWERLOADER_MASTER,
- SKILL_ENGINEER = SKILL_ENGINEER_ENGI,
+ SKILL_ENGINEER = SKILL_ENGINEER_TRAINED,
SKILL_FIREMAN = SKILL_FIREMAN_TRAINED,
SKILL_LEADERSHIP = SKILL_LEAD_TRAINED,
SKILL_JTAC = SKILL_JTAC_EXPERT,
@@ -23,7 +23,7 @@ MISCELLANEOUS
SKILL_CQC = SKILL_CQC_MASTER,
SKILL_MELEE_WEAPONS = SKILL_MELEE_SUPER,
SKILL_ENDURANCE = SKILL_ENDURANCE_MASTER,
- SKILL_ENGINEER = SKILL_ENGINEER_ENGI,
+ SKILL_ENGINEER = SKILL_ENGINEER_TRAINED,
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI,
SKILL_MEDICAL = SKILL_MEDICAL_MEDIC,
SKILL_SURGERY = SKILL_SURGERY_EXPERT,
@@ -52,7 +52,7 @@ MISCELLANEOUS
name = "Souto Man"
skills = list(
SKILL_CQC = SKILL_CQC_MASTER,
- SKILL_ENGINEER = SKILL_ENGINEER_ENGI,
+ SKILL_ENGINEER = SKILL_ENGINEER_TRAINED,
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI,
SKILL_FIREARMS = SKILL_FIREARMS_EXPERT,
SKILL_MEDICAL = SKILL_MEDICAL_TRAINED,
diff --git a/code/datums/skills/pmc.dm b/code/datums/skills/pmc.dm
index df7027e2a7ab..1860157c0a54 100644
--- a/code/datums/skills/pmc.dm
+++ b/code/datums/skills/pmc.dm
@@ -14,7 +14,7 @@ Private Military Contractors
SKILL_POLICE = SKILL_POLICE_SKILLED,
SKILL_FIREMAN = SKILL_FIREMAN_SKILLED,
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI,
- SKILL_ENGINEER = SKILL_ENGINEER_ENGI,
+ SKILL_ENGINEER = SKILL_ENGINEER_TRAINED,
SKILL_ENDURANCE = SKILL_ENDURANCE_MASTER,
)
@@ -26,7 +26,7 @@ Private Military Contractors
SKILL_POLICE = SKILL_POLICE_SKILLED,
SKILL_FIREMAN = SKILL_FIREMAN_SKILLED,
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI,
- SKILL_ENGINEER = SKILL_ENGINEER_ENGI,
+ SKILL_ENGINEER = SKILL_ENGINEER_TRAINED,
SKILL_MEDICAL = SKILL_MEDICAL_MEDIC,
SKILL_SURGERY = SKILL_SURGERY_NOVICE,
SKILL_ENDURANCE = SKILL_ENDURANCE_MASTER,
@@ -40,7 +40,7 @@ Private Military Contractors
SKILL_POLICE = SKILL_POLICE_SKILLED,
SKILL_FIREMAN = SKILL_FIREMAN_SKILLED,
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI,
- SKILL_ENGINEER = SKILL_ENGINEER_ENGI,
+ SKILL_ENGINEER = SKILL_ENGINEER_TRAINED,
SKILL_MEDICAL = SKILL_MEDICAL_MEDIC,
SKILL_ENDURANCE = SKILL_ENDURANCE_MASTER,
SKILL_RESEARCH = SKILL_RESEARCH_TRAINED,
@@ -54,7 +54,7 @@ Private Military Contractors
SKILL_POLICE = SKILL_POLICE_SKILLED,
SKILL_FIREMAN = SKILL_FIREMAN_SKILLED,
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI,
- SKILL_ENGINEER = SKILL_ENGINEER_ENGI,
+ SKILL_ENGINEER = SKILL_ENGINEER_TRAINED,
SKILL_SPEC_WEAPONS = SKILL_SPEC_SMARTGUN,
SKILL_ENDURANCE = SKILL_ENDURANCE_MASTER,
SKILL_JTAC = SKILL_JTAC_BEGINNER,
@@ -68,7 +68,7 @@ Private Military Contractors
SKILL_POLICE = SKILL_POLICE_SKILLED,
SKILL_FIREMAN = SKILL_FIREMAN_SKILLED,
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI,
- SKILL_ENGINEER = SKILL_ENGINEER_ENGI,
+ SKILL_ENGINEER = SKILL_ENGINEER_TRAINED,
SKILL_CQC = SKILL_CQC_TRAINED,
SKILL_SPEC_WEAPONS = SKILL_SPEC_ALL,
SKILL_MELEE_WEAPONS = SKILL_MELEE_TRAINED,
@@ -83,7 +83,7 @@ Private Military Contractors
SKILL_POLICE = SKILL_POLICE_SKILLED,
SKILL_FIREMAN = SKILL_FIREMAN_SKILLED,
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI,
- SKILL_ENGINEER = SKILL_ENGINEER_ENGI,
+ SKILL_ENGINEER = SKILL_ENGINEER_TRAINED,
SKILL_CQC = SKILL_CQC_SKILLED,
SKILL_LEADERSHIP = SKILL_LEAD_TRAINED,
SKILL_OVERWATCH = SKILL_OVERWATCH_TRAINED,
@@ -99,7 +99,7 @@ Private Military Contractors
SKILL_POLICE = SKILL_POLICE_SKILLED,
SKILL_FIREMAN = SKILL_FIREMAN_SKILLED,
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI,
- SKILL_ENGINEER = SKILL_ENGINEER_ENGI,
+ SKILL_ENGINEER = SKILL_ENGINEER_TRAINED,
SKILL_CQC = SKILL_CQC_SKILLED,
SKILL_LEADERSHIP = SKILL_LEAD_TRAINED,
SKILL_OVERWATCH = SKILL_OVERWATCH_TRAINED,
@@ -116,7 +116,7 @@ Private Military Contractors
SKILL_POLICE = SKILL_POLICE_SKILLED,
SKILL_FIREMAN = SKILL_FIREMAN_SKILLED,
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI,
- SKILL_ENGINEER = SKILL_ENGINEER_ENGI,
+ SKILL_ENGINEER = SKILL_ENGINEER_TRAINED,
SKILL_ENDURANCE = SKILL_ENDURANCE_MASTER,
SKILL_LEADERSHIP = SKILL_LEAD_TRAINED,
SKILL_JTAC = SKILL_JTAC_TRAINED,
@@ -131,7 +131,7 @@ Private Military Contractors
SKILL_POLICE = SKILL_POLICE_SKILLED,
SKILL_FIREMAN = SKILL_FIREMAN_SKILLED,
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_TRAINED,
- SKILL_ENGINEER = SKILL_ENGINEER_TRAINED,
+ SKILL_ENGINEER = SKILL_ENGINEER_NOVICE,
SKILL_MEDICAL = SKILL_MEDICAL_DOCTOR,
SKILL_SURGERY = SKILL_SURGERY_EXPERT,
SKILL_ENDURANCE = SKILL_ENDURANCE_MASTER, //trained in medicine more than combat
@@ -160,7 +160,7 @@ Private Military Contractors
SKILL_POLICE = SKILL_POLICE_SKILLED,
SKILL_FIREMAN = SKILL_FIREMAN_SKILLED,
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI,
- SKILL_ENGINEER = SKILL_ENGINEER_ENGI,
+ SKILL_ENGINEER = SKILL_ENGINEER_TRAINED,
SKILL_MEDICAL = SKILL_MEDICAL_MEDIC,
SKILL_CQC = SKILL_CQC_TRAINED,
SKILL_LEADERSHIP = SKILL_LEAD_MASTER,
diff --git a/code/datums/skills/rmc.dm b/code/datums/skills/rmc.dm
index 89aa39b154ad..4385253e9a28 100644
--- a/code/datums/skills/rmc.dm
+++ b/code/datums/skills/rmc.dm
@@ -14,7 +14,7 @@ Royal Marines Commando
SKILL_POLICE = SKILL_POLICE_SKILLED,
SKILL_FIREMAN = SKILL_FIREMAN_SKILLED,
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI,
- SKILL_ENGINEER = SKILL_ENGINEER_ENGI,
+ SKILL_ENGINEER = SKILL_ENGINEER_TRAINED,
SKILL_ENDURANCE = SKILL_ENDURANCE_MASTER,
SKILL_MEDICAL = SKILL_MEDICAL_MEDIC,
SKILL_SURGERY = SKILL_SURGERY_NOVICE,
@@ -28,7 +28,7 @@ Royal Marines Commando
SKILL_POLICE = SKILL_POLICE_SKILLED,
SKILL_FIREMAN = SKILL_FIREMAN_SKILLED,
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI,
- SKILL_ENGINEER = SKILL_ENGINEER_ENGI,
+ SKILL_ENGINEER = SKILL_ENGINEER_TRAINED,
SKILL_ENDURANCE = SKILL_ENDURANCE_MASTER,
SKILL_MEDICAL = SKILL_MEDICAL_MEDIC,
SKILL_SURGERY = SKILL_SURGERY_NOVICE,
@@ -44,7 +44,7 @@ Royal Marines Commando
SKILL_POLICE = SKILL_POLICE_SKILLED,
SKILL_FIREMAN = SKILL_FIREMAN_SKILLED,
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI,
- SKILL_ENGINEER = SKILL_ENGINEER_ENGI,
+ SKILL_ENGINEER = SKILL_ENGINEER_TRAINED,
SKILL_ENDURANCE = SKILL_ENDURANCE_MASTER,
SKILL_MEDICAL = SKILL_MEDICAL_MEDIC,
SKILL_SURGERY = SKILL_SURGERY_NOVICE,
@@ -61,7 +61,7 @@ Royal Marines Commando
SKILL_POLICE = SKILL_POLICE_SKILLED,
SKILL_FIREMAN = SKILL_FIREMAN_SKILLED,
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI,
- SKILL_ENGINEER = SKILL_ENGINEER_ENGI,
+ SKILL_ENGINEER = SKILL_ENGINEER_TRAINED,
SKILL_ENDURANCE = SKILL_ENDURANCE_MASTER,
SKILL_MEDICAL = SKILL_MEDICAL_MEDIC,
SKILL_SURGERY = SKILL_SURGERY_NOVICE,
diff --git a/code/datums/skills/synthetic.dm b/code/datums/skills/synthetic.dm
index 3925dd9605b3..c4d7296dee5d 100644
--- a/code/datums/skills/synthetic.dm
+++ b/code/datums/skills/synthetic.dm
@@ -33,7 +33,7 @@ SYNTHETIC
name = SYNTH_COLONY
skills = list(
SKILL_CQC = SKILL_CQC_EXPERT,
- SKILL_ENGINEER = SKILL_ENGINEER_ENGI,
+ SKILL_ENGINEER = SKILL_ENGINEER_TRAINED,
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI,
SKILL_FIREARMS = SKILL_FIREARMS_EXPERT,
SKILL_SPEC_WEAPONS = SKILL_SPEC_ALL,
diff --git a/code/datums/skills/upp.dm b/code/datums/skills/upp.dm
index e367372719d6..8ada7ccad124 100644
--- a/code/datums/skills/upp.dm
+++ b/code/datums/skills/upp.dm
@@ -10,7 +10,7 @@ UNITED PROGRESSIVE PEOPLES
name = "UPP Private"
skills = list(
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_TRAINED,
- SKILL_ENGINEER = SKILL_ENGINEER_TRAINED,
+ SKILL_ENGINEER = SKILL_ENGINEER_NOVICE,
SKILL_MEDICAL = SKILL_MEDICAL_TRAINED,
SKILL_ENDURANCE = SKILL_ENDURANCE_TRAINED,
SKILL_CQC = SKILL_CQC_DEFAULT,
@@ -22,7 +22,7 @@ UNITED PROGRESSIVE PEOPLES
name = "UPP Sapper"
skills = list(
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI,
- SKILL_ENGINEER = SKILL_ENGINEER_ENGI,
+ SKILL_ENGINEER = SKILL_ENGINEER_TRAINED,
SKILL_MEDICAL = SKILL_MEDICAL_TRAINED,
SKILL_ENDURANCE = SKILL_ENDURANCE_TRAINED,
SKILL_CQC = SKILL_CQC_DEFAULT,
@@ -45,7 +45,7 @@ UNITED PROGRESSIVE PEOPLES
name = "UPP Specialist"
skills = list(
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_TRAINED,
- SKILL_ENGINEER = SKILL_ENGINEER_TRAINED,
+ SKILL_ENGINEER = SKILL_ENGINEER_NOVICE,
SKILL_ENDURANCE = SKILL_ENDURANCE_MASTER,
SKILL_CQC = SKILL_CQC_TRAINED,
SKILL_FIREMAN = SKILL_FIREMAN_TRAINED,
@@ -60,7 +60,7 @@ UNITED PROGRESSIVE PEOPLES
name = "UPP Squad Leader"
skills = list(
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI,
- SKILL_ENGINEER = SKILL_ENGINEER_ENGI,
+ SKILL_ENGINEER = SKILL_ENGINEER_TRAINED,
SKILL_ENDURANCE = SKILL_ENDURANCE_MASTER,
SKILL_CQC = SKILL_CQC_TRAINED,
SKILL_FIREMAN = SKILL_FIREMAN_SKILLED,
@@ -78,7 +78,7 @@ UNITED PROGRESSIVE PEOPLES
SKILL_FIREMAN = SKILL_FIREMAN_EXPERT,
SKILL_ENDURANCE = SKILL_ENDURANCE_MASTER,
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_TRAINED,
- SKILL_ENGINEER = SKILL_ENGINEER_TRAINED,
+ SKILL_ENGINEER = SKILL_ENGINEER_NOVICE,
SKILL_MEDICAL = SKILL_MEDICAL_TRAINED,
SKILL_FIREARMS = SKILL_FIREARMS_EXPERT,
)
@@ -93,7 +93,7 @@ UNITED PROGRESSIVE PEOPLES
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI,
SKILL_LEADERSHIP = SKILL_LEAD_EXPERT,
SKILL_OVERWATCH = SKILL_OVERWATCH_TRAINED,
- SKILL_ENGINEER = SKILL_ENGINEER_TRAINED,
+ SKILL_ENGINEER = SKILL_ENGINEER_NOVICE,
SKILL_MEDICAL = SKILL_MEDICAL_MEDIC,
SKILL_FIREARMS = SKILL_FIREARMS_EXPERT,
SKILL_VEHICLE = SKILL_VEHICLE_SMALL,
@@ -109,7 +109,7 @@ UNITED PROGRESSIVE PEOPLES
SKILL_LEADERSHIP = SKILL_LEAD_MASTER,
SKILL_OVERWATCH = SKILL_OVERWATCH_TRAINED,
SKILL_ENDURANCE = SKILL_ENDURANCE_MASTER,
- SKILL_ENGINEER = SKILL_ENGINEER_ENGI,
+ SKILL_ENGINEER = SKILL_ENGINEER_TRAINED,
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI,
SKILL_MEDICAL = SKILL_MEDICAL_MEDIC,
SKILL_FIREARMS = SKILL_FIREARMS_EXPERT,
@@ -126,7 +126,7 @@ UNITED PROGRESSIVE PEOPLES
SKILL_LEADERSHIP = SKILL_LEAD_MASTER,
SKILL_OVERWATCH = SKILL_OVERWATCH_TRAINED,
SKILL_ENDURANCE = SKILL_ENDURANCE_MASTER,
- SKILL_ENGINEER = SKILL_ENGINEER_ENGI,
+ SKILL_ENGINEER = SKILL_ENGINEER_TRAINED,
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI,
SKILL_MEDICAL = SKILL_MEDICAL_MEDIC,
SKILL_FIREARMS = SKILL_FIREARMS_EXPERT,
@@ -147,7 +147,7 @@ UNITED PROGRESSIVE PEOPLES
name = "UPP Private"
skills = list(
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_TRAINED,
- SKILL_ENGINEER = SKILL_ENGINEER_ENGI,
+ SKILL_ENGINEER = SKILL_ENGINEER_TRAINED,
SKILL_MEDICAL = SKILL_MEDICAL_TRAINED,
SKILL_ENDURANCE = SKILL_ENDURANCE_TRAINED,
SKILL_CQC = SKILL_CQC_TRAINED,
@@ -161,7 +161,7 @@ UNITED PROGRESSIVE PEOPLES
name = "UPP Sapper"
skills = list(
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI,
- SKILL_ENGINEER = SKILL_ENGINEER_ENGI,
+ SKILL_ENGINEER = SKILL_ENGINEER_TRAINED,
SKILL_MEDICAL = SKILL_MEDICAL_TRAINED,
SKILL_ENDURANCE = SKILL_ENDURANCE_TRAINED,
SKILL_CQC = SKILL_CQC_TRAINED,
@@ -176,7 +176,7 @@ UNITED PROGRESSIVE PEOPLES
name = "UPP Medic"
skills = list(
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_TRAINED,
- SKILL_ENGINEER = SKILL_ENGINEER_ENGI,
+ SKILL_ENGINEER = SKILL_ENGINEER_TRAINED,
SKILL_MEDICAL = SKILL_MEDICAL_DOCTOR,
SKILL_SURGERY = SKILL_SURGERY_TRAINED,
SKILL_ENDURANCE = SKILL_ENDURANCE_TRAINED,
@@ -192,7 +192,7 @@ UNITED PROGRESSIVE PEOPLES
name = "UPP Specialist"
skills = list(
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_TRAINED,
- SKILL_ENGINEER = SKILL_ENGINEER_ENGI,
+ SKILL_ENGINEER = SKILL_ENGINEER_TRAINED,
SKILL_MEDICAL = SKILL_MEDICAL_TRAINED,
SKILL_ENDURANCE = SKILL_ENDURANCE_TRAINED,
SKILL_CQC = SKILL_CQC_TRAINED,
@@ -210,7 +210,7 @@ UNITED PROGRESSIVE PEOPLES
name = "UPP Squad Leader"
skills = list(
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI,
- SKILL_ENGINEER = SKILL_ENGINEER_ENGI,
+ SKILL_ENGINEER = SKILL_ENGINEER_TRAINED,
SKILL_ENDURANCE = SKILL_ENDURANCE_TRAINED,
SKILL_SPEC_WEAPONS = SKILL_SPEC_UPP,
SKILL_FIREARMS = SKILL_FIREARMS_TRAINED,
diff --git a/code/datums/skills/uscm.dm b/code/datums/skills/uscm.dm
index 3daaef4156b8..1bfb58996b4e 100644
--- a/code/datums/skills/uscm.dm
+++ b/code/datums/skills/uscm.dm
@@ -12,7 +12,7 @@ United States Colonial Marines
name = "Crafty Private"
skills = list(
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_TRAINED,
- SKILL_ENGINEER = SKILL_ENGINEER_TRAINED,
+ SKILL_ENGINEER = SKILL_ENGINEER_NOVICE,
)
/datum/skills/combat_medic
@@ -28,7 +28,7 @@ United States Colonial Marines
name = "Crafty Combat Medic"
skills = list(
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_TRAINED,
- SKILL_ENGINEER = SKILL_ENGINEER_TRAINED,
+ SKILL_ENGINEER = SKILL_ENGINEER_NOVICE,
)
/datum/skills/combat_engineer
@@ -55,7 +55,7 @@ United States Colonial Marines
SKILL_FIREMAN = SKILL_FIREMAN_TRAINED,
SKILL_CQC = SKILL_CQC_TRAINED,
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_TRAINED,
- SKILL_ENGINEER = SKILL_ENGINEER_TRAINED, //to use c4 in demo set.
+ SKILL_ENGINEER = SKILL_ENGINEER_NOVICE, //to use c4 in demo set.
SKILL_SPEC_WEAPONS = SKILL_SPEC_TRAINED,
SKILL_MELEE_WEAPONS = SKILL_MELEE_TRAINED,
SKILL_ENDURANCE = SKILL_ENDURANCE_TRAINED,
@@ -66,7 +66,7 @@ United States Colonial Marines
name = "Fireteam Leader"
skills = list(
SKILL_FIREMAN = SKILL_FIREMAN_TRAINED,
- SKILL_ENGINEER = SKILL_ENGINEER_ENGI,
+ SKILL_ENGINEER = SKILL_ENGINEER_TRAINED,
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI,
SKILL_JTAC = SKILL_JTAC_EXPERT,
)
@@ -77,7 +77,7 @@ United States Colonial Marines
SKILL_CQC = SKILL_CQC_TRAINED,
SKILL_FIREMAN = SKILL_FIREMAN_TRAINED,
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI,
- SKILL_ENGINEER = SKILL_ENGINEER_ENGI,
+ SKILL_ENGINEER = SKILL_ENGINEER_TRAINED,
SKILL_LEADERSHIP = SKILL_LEAD_TRAINED,
SKILL_MEDICAL = SKILL_MEDICAL_TRAINED,
SKILL_ENDURANCE = SKILL_ENDURANCE_TRAINED,
@@ -90,7 +90,7 @@ United States Colonial Marines
name = "Intelligence Officer"
skills = list(
SKILL_FIREMAN = SKILL_FIREMAN_TRAINED,
- SKILL_ENGINEER = SKILL_ENGINEER_ENGI,
+ SKILL_ENGINEER = SKILL_ENGINEER_TRAINED,
SKILL_LEADERSHIP = SKILL_LEAD_TRAINED,
SKILL_OVERWATCH = SKILL_OVERWATCH_TRAINED,
SKILL_CQC = SKILL_CQC_TRAINED,
@@ -157,7 +157,7 @@ MILITARY NONCOMBATANT
SKILL_MEDICAL = SKILL_MEDICAL_MEDIC,
SKILL_SURGERY = SKILL_SURGERY_NOVICE,
SKILL_JTAC = SKILL_JTAC_TRAINED,
- SKILL_ENGINEER = SKILL_ENGINEER_ENGI,
+ SKILL_ENGINEER = SKILL_ENGINEER_TRAINED,
)
/datum/skills/MP
@@ -180,7 +180,7 @@ MILITARY NONCOMBATANT
SKILL_ENDURANCE = SKILL_ENDURANCE_TRAINED,
SKILL_MEDICAL = SKILL_MEDICAL_TRAINED,
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI,
- SKILL_ENGINEER = SKILL_ENGINEER_ENGI,
+ SKILL_ENGINEER = SKILL_ENGINEER_TRAINED,
)
/datum/skills/provost
@@ -216,7 +216,7 @@ MILITARY NONCOMBATANT
name = "Mess Technician"
skills = list(
SKILL_FIREARMS = SKILL_FIREARMS_EXPERT, // need to hunt food somehow
- SKILL_ENGINEER = SKILL_ENGINEER_TRAINED,
+ SKILL_ENGINEER = SKILL_ENGINEER_NOVICE,
SKILL_FIREMAN = SKILL_FIREMAN_TRAINED,
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_TRAINED,
SKILL_DOMESTIC = SKILL_DOMESTIC_MASTER
@@ -240,7 +240,7 @@ COMMAND STAFF
name = "General"
skills = list(
SKILL_CQC = SKILL_CQC_TRAINED,
- SKILL_ENGINEER = SKILL_ENGINEER_ENGI,
+ SKILL_ENGINEER = SKILL_ENGINEER_TRAINED,
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI,
SKILL_LEADERSHIP = SKILL_LEAD_MASTER,
SKILL_OVERWATCH = SKILL_OVERWATCH_TRAINED,
@@ -259,7 +259,7 @@ COMMAND STAFF
/datum/skills/commander
name = "Commanding Officer"
skills = list(
- SKILL_ENGINEER = SKILL_ENGINEER_ENGI,
+ SKILL_ENGINEER = SKILL_ENGINEER_TRAINED,
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI,
SKILL_LEADERSHIP = SKILL_LEAD_MASTER,
SKILL_OVERWATCH = SKILL_OVERWATCH_TRAINED,
@@ -282,7 +282,7 @@ COMMAND STAFF
/datum/skills/XO
name = "Executive Officer"
skills = list(
- SKILL_ENGINEER = SKILL_ENGINEER_ENGI, //to fix CIC apc.
+ SKILL_ENGINEER = SKILL_ENGINEER_TRAINED, //to fix CIC apc.
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI,
SKILL_LEADERSHIP = SKILL_LEAD_MASTER,
SKILL_OVERWATCH = SKILL_OVERWATCH_TRAINED,
@@ -303,7 +303,7 @@ COMMAND STAFF
/datum/skills/SO
name = "Staff Officer"
skills = list(
- SKILL_ENGINEER = SKILL_ENGINEER_ENGI,
+ SKILL_ENGINEER = SKILL_ENGINEER_TRAINED,
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI,
SKILL_LEADERSHIP = SKILL_LEAD_EXPERT,
SKILL_OVERWATCH = SKILL_OVERWATCH_TRAINED,
@@ -322,7 +322,7 @@ COMMAND STAFF
name = "Senior Enlisted Advisor"
skills = list(
SKILL_CQC = SKILL_CQC_SKILLED,
- SKILL_ENGINEER = SKILL_ENGINEER_ENGI,
+ SKILL_ENGINEER = SKILL_ENGINEER_TRAINED,
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI,
SKILL_FIREARMS = SKILL_FIREARMS_EXPERT,
SKILL_LEADERSHIP = SKILL_LEAD_EXPERT,
@@ -375,7 +375,7 @@ COMMAND STAFF
SKILL_JTAC = SKILL_JTAC_EXPERT,
SKILL_MEDICAL = SKILL_MEDICAL_TRAINED,
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI,
- SKILL_ENGINEER = SKILL_ENGINEER_ENGI,
+ SKILL_ENGINEER = SKILL_ENGINEER_TRAINED,
SKILL_MELEE_WEAPONS = SKILL_MELEE_TRAINED,
SKILL_INTEL = SKILL_INTEL_TRAINED,
)
@@ -392,7 +392,7 @@ COMMAND STAFF
SKILL_JTAC = SKILL_JTAC_EXPERT,
SKILL_INTEL = SKILL_INTEL_EXPERT,
SKILL_VEHICLE = SKILL_VEHICLE_SMALL,
- SKILL_ENGINEER = SKILL_ENGINEER_ENGI,
+ SKILL_ENGINEER = SKILL_ENGINEER_TRAINED,
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI,
SKILL_POLICE = SKILL_POLICE_FLASH,
SKILL_NAVIGATIONS = SKILL_NAVIGATIONS_TRAINED,
diff --git a/code/datums/skills/wygoons.dm b/code/datums/skills/wygoons.dm
index 2d2c247bd1ea..73d8da15b976 100644
--- a/code/datums/skills/wygoons.dm
+++ b/code/datums/skills/wygoons.dm
@@ -18,7 +18,7 @@
SKILL_MELEE_WEAPONS = SKILL_MELEE_TRAINED,
SKILL_MEDICAL = SKILL_MEDICAL_TRAINED,
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI,
- SKILL_ENGINEER = SKILL_ENGINEER_ENGI,
+ SKILL_ENGINEER = SKILL_ENGINEER_TRAINED,
)
/datum/skills/wy_goon_lead
@@ -31,6 +31,6 @@
SKILL_MELEE_WEAPONS = SKILL_MELEE_TRAINED,
SKILL_MEDICAL = SKILL_MEDICAL_TRAINED,
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI,
- SKILL_ENGINEER = SKILL_ENGINEER_ENGI,
+ SKILL_ENGINEER = SKILL_ENGINEER_TRAINED,
SKILL_LEADERSHIP = SKILL_LEAD_TRAINED,
)
diff --git a/code/game/gamemodes/colonialmarines/whiskey_outpost/skills.dm b/code/game/gamemodes/colonialmarines/whiskey_outpost/skills.dm
index a5126627adaf..746e6ed53c18 100644
--- a/code/game/gamemodes/colonialmarines/whiskey_outpost/skills.dm
+++ b/code/game/gamemodes/colonialmarines/whiskey_outpost/skills.dm
@@ -35,7 +35,7 @@
/datum/skills/honor_guard/lead
name = "Honor Guard Squad Leader"
skills = list(
- SKILL_ENGINEER = SKILL_ENGINEER_ENGI, //to fix CIC apc.
+ SKILL_ENGINEER = SKILL_ENGINEER_TRAINED, //to fix CIC apc.
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI,
SKILL_LEADERSHIP = SKILL_LEAD_MASTER,
SKILL_OVERWATCH = SKILL_OVERWATCH_TRAINED,
@@ -49,7 +49,7 @@
/datum/skills/mortar_crew
name = "Mortar Crew"
skills = list(
- SKILL_ENGINEER = SKILL_ENGINEER_ENGI,
+ SKILL_ENGINEER = SKILL_ENGINEER_TRAINED,
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI,
SKILL_JTAC = SKILL_JTAC_BEGINNER,
SKILL_POWERLOADER = SKILL_POWERLOADER_MASTER,
diff --git a/code/game/jobs/job/marine/squad_info.dm b/code/game/jobs/job/marine/squad_info.dm
index 37db48c3116e..406263115196 100644
--- a/code/game/jobs/job/marine/squad_info.dm
+++ b/code/game/jobs/job/marine/squad_info.dm
@@ -146,7 +146,7 @@
if(skillcheck(H, SKILL_MEDICAL, SKILL_MEDICAL_TRAINED))
Med = TRUE
else
- if(skillcheck(H, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED))
+ if(skillcheck(H, SKILL_ENGINEER, SKILL_ENGINEER_NOVICE))
Eng = TRUE
ID = H.get_idcard()
squad_info_data["fireteams"][team]["tl"] = list(
@@ -223,7 +223,7 @@
if(skillcheck(H, SKILL_MEDICAL, SKILL_MEDICAL_TRAINED))
Med = TRUE
else
- if(skillcheck(H, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED))
+ if(skillcheck(H, SKILL_ENGINEER, SKILL_ENGINEER_NOVICE))
Eng = TRUE
mar[H.real_name] = list(
"name" = H.real_name,
@@ -270,7 +270,7 @@
if(skillcheck(H, SKILL_MEDICAL, SKILL_MEDICAL_TRAINED))
Med = TRUE
else
- if(skillcheck(H, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED))
+ if(skillcheck(H, SKILL_ENGINEER, SKILL_ENGINEER_NOVICE))
Eng = TRUE
mar[H.real_name] = list(
"name" = H.real_name,
diff --git a/code/game/machinery/autolathe.dm b/code/game/machinery/autolathe.dm
index 4150aead979e..4013aec3fb29 100644
--- a/code/game/machinery/autolathe.dm
+++ b/code/game/machinery/autolathe.dm
@@ -224,7 +224,7 @@
if("cutwire")
if(!panel_open)
return FALSE
- if(!skillcheck(usr, SKILL_ENGINEER, SKILL_ENGINEER_ENGI))
+ if(!skillcheck(usr, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED))
to_chat(usr, SPAN_WARNING("You don't understand anything about this wiring..."))
return FALSE
var/obj/item/held_item = usr.get_held_item()
@@ -238,7 +238,7 @@
if("fixwire")
if(!panel_open)
return FALSE
- if(!skillcheck(usr, SKILL_ENGINEER, SKILL_ENGINEER_ENGI))
+ if(!skillcheck(usr, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED))
to_chat(usr, SPAN_WARNING("You don't understand anything about this wiring..."))
return FALSE
var/obj/item/held_item = usr.get_held_item()
@@ -251,7 +251,7 @@
if("pulsewire")
if(!panel_open)
return FALSE
- if(!skillcheck(usr, SKILL_ENGINEER, SKILL_ENGINEER_ENGI))
+ if(!skillcheck(usr, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED))
to_chat(usr, SPAN_WARNING("You don't understand anything about this wiring..."))
return FALSE
var/obj/item/held_item = usr.get_held_item()
@@ -269,7 +269,7 @@
/obj/structure/machinery/autolathe/attackby(obj/item/O as obj, mob/user as mob)
if(HAS_TRAIT(O, TRAIT_TOOL_SCREWDRIVER))
- if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI))
+ if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED))
to_chat(user, SPAN_WARNING("You are not trained to dismantle machines..."))
return
panel_open = !panel_open
@@ -586,7 +586,7 @@
stored_material = list("metal" = 56250, "plastic" = 20000) //15 metal and 10 plastic sheets
/obj/structure/machinery/autolathe/armylathe/attack_hand(mob/user)
- if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI))
+ if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED))
to_chat(user, SPAN_WARNING("You have no idea how to operate the [name]."))
return FALSE
. = ..()
diff --git a/code/game/machinery/colony_floodlights.dm b/code/game/machinery/colony_floodlights.dm
index 0267c7e95487..e8f59ad643d7 100644
--- a/code/game/machinery/colony_floodlights.dm
+++ b/code/game/machinery/colony_floodlights.dm
@@ -125,7 +125,7 @@
/obj/structure/machinery/colony_floodlight/attackby(obj/item/I, mob/user)
if(damaged)
if(HAS_TRAIT(I, TRAIT_TOOL_SCREWDRIVER))
- if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI))
+ if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED))
to_chat(user, SPAN_WARNING("You have no clue how to repair [src]."))
return FALSE
@@ -160,7 +160,7 @@
return TRUE
else if(HAS_TRAIT(I, TRAIT_TOOL_CROWBAR))
- if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI))
+ if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED))
to_chat(user, SPAN_WARNING("You have no clue how to repair [src]."))
return FALSE
@@ -183,7 +183,7 @@
return
var/obj/item/tool/weldingtool/welder = I
- if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI))
+ if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED))
to_chat(user, SPAN_WARNING("You have no clue how to repair [src]."))
return FALSE
@@ -206,7 +206,7 @@
else if(iscoil(I))
var/obj/item/stack/cable_coil/coil = I
- if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI))
+ if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED))
to_chat(user, SPAN_WARNING("You have no clue how to repair [src]."))
return FALSE
@@ -228,7 +228,7 @@
return TRUE
else if(istype(I, /obj/item/device/lightreplacer))
- if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI))
+ if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED))
to_chat(user, SPAN_WARNING("You have no clue how to repair [src]."))
return FALSE
@@ -271,7 +271,7 @@
if(ishuman(user))
if(damaged)
. += SPAN_WARNING("It is damaged.")
- if(skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI))
+ if(skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED))
switch(repair_state)
if(FLOODLIGHT_REPAIR_UNSCREW) . += SPAN_INFO("You must first unscrew its maintenance hatch.")
if(FLOODLIGHT_REPAIR_CROWBAR) . += SPAN_INFO("You must crowbar its lighting assembly out or use a light replacer.")
diff --git a/code/game/machinery/computer/computer.dm b/code/game/machinery/computer/computer.dm
index bfa64ab174ed..bb434e8ca114 100644
--- a/code/game/machinery/computer/computer.dm
+++ b/code/game/machinery/computer/computer.dm
@@ -99,7 +99,7 @@
if(!deconstructible)
to_chat(user, SPAN_WARNING("You can't figure out how to deconstruct [src]..."))
return
- if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI))
+ if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED))
to_chat(user, SPAN_WARNING("You don't know how to deconstruct [src]..."))
return
playsound(src.loc, 'sound/items/Screwdriver.ogg', 25, 1)
diff --git a/code/game/machinery/computer/demo_sim.dm b/code/game/machinery/computer/demo_sim.dm
index f633e8f351d4..2b2ca9fda775 100644
--- a/code/game/machinery/computer/demo_sim.dm
+++ b/code/game/machinery/computer/demo_sim.dm
@@ -11,7 +11,7 @@
/obj/structure/machinery/computer/demo_sim/attackby(obj/item/B, mob/living/user)
if(inoperable())
return
- if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI))
+ if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED))
to_chat(user, SPAN_WARNING("You don't know how to configure [src]."))
return
if(configuration)
diff --git a/code/game/machinery/constructable_frame.dm b/code/game/machinery/constructable_frame.dm
index 0c8cc62c3f87..3b7880320da7 100644
--- a/code/game/machinery/constructable_frame.dm
+++ b/code/game/machinery/constructable_frame.dm
@@ -15,7 +15,7 @@
var/list/req_component_names = null
var/state = CONSTRUCTION_STATE_BEGIN
var/required_skill = SKILL_CONSTRUCTION_ENGI
- var/required_dismantle_skill = SKILL_ENGINEER_ENGI
+ var/required_dismantle_skill = SKILL_ENGINEER_TRAINED
/obj/structure/machinery/constructable_frame/Initialize(mapload, ...)
. = ..()
diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm
index 84f02f0a5bbd..9ac9765371f3 100644
--- a/code/game/machinery/doors/airlock.dm
+++ b/code/game/machinery/doors/airlock.dm
@@ -439,7 +439,7 @@ GLOBAL_LIST_INIT(airlock_wire_descriptions, list(
return
if(panel_open)
- if(ishuman(usr) && !skillcheck(usr, SKILL_ENGINEER, SKILL_ENGINEER_ENGI))
+ if(ishuman(usr) && !skillcheck(usr, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED))
to_chat(usr, SPAN_WARNING("You look into \the [src]'s access panel and can only see a jumbled mess of colored wires..."))
return FALSE
@@ -483,7 +483,7 @@ GLOBAL_LIST_INIT(airlock_wire_descriptions, list(
add_fingerprint(usr)
if((in_range(src, usr) && istype(loc, /turf)) && panel_open)
- if(ishuman(usr) && !skillcheck(usr, SKILL_ENGINEER, SKILL_ENGINEER_ENGI))
+ if(ishuman(usr) && !skillcheck(usr, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED))
to_chat(usr, SPAN_WARNING("You don't understand anything about [src]'s wiring!"))
return FALSE
@@ -649,7 +649,7 @@ GLOBAL_LIST_INIT(airlock_wire_descriptions, list(
else if(attacking_item.pry_capable)
if(attacking_item.pry_capable == IS_PRY_CAPABLE_CROWBAR && panel_open && welded)
- if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI))
+ if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED))
to_chat(user, SPAN_WARNING("You don't seem to know how to deconstruct machines."))
return
playsound(loc, 'sound/items/Crowbar.ogg', 25, 1)
diff --git a/code/game/machinery/doors/multi_tile.dm b/code/game/machinery/doors/multi_tile.dm
index f95ef09e812f..6e7f571a0d4e 100644
--- a/code/game/machinery/doors/multi_tile.dm
+++ b/code/game/machinery/doors/multi_tile.dm
@@ -262,14 +262,14 @@
var/datum/door_controller/single/control = linked_dropship.door_control.door_controllers[direction]
if (control.status != SHUTTLE_DOOR_BROKEN)
return ..()
- if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI) && !skillcheck(user, SKILL_PILOT, SKILL_PILOT_TRAINED))
+ if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED) && !skillcheck(user, SKILL_PILOT, SKILL_PILOT_TRAINED))
to_chat(user, SPAN_WARNING("You don't seem to understand how to restore a remote connection to [src]."))
return
if(user.action_busy)
return
to_chat(user, SPAN_WARNING("You begin to restore the remote connection to [src]."))
- if(!do_after(user, (skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI) ? 5 SECONDS : 8 SECONDS), INTERRUPT_ALL, BUSY_ICON_BUILD))
+ if(!do_after(user, (skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED) ? 5 SECONDS : 8 SECONDS), INTERRUPT_ALL, BUSY_ICON_BUILD))
to_chat(user, SPAN_WARNING("You fail to restore a remote connection to [src]."))
return
unlock(TRUE)
diff --git a/code/game/machinery/fusion_engine.dm b/code/game/machinery/fusion_engine.dm
index 72f836717b0f..06ae3321a2c5 100644
--- a/code/game/machinery/fusion_engine.dm
+++ b/code/game/machinery/fusion_engine.dm
@@ -140,7 +140,7 @@
if(overloaded)
. += SPAN_INFO("It is overloaded.")
return
- if(skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI))
+ if(skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED))
. += SPAN_INFO("You could overload its safeties with a multitool.")
/obj/structure/machinery/power/reactor/power_change()
@@ -344,7 +344,7 @@
if(!is_ship_reactor)
return
- if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI))
+ if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED))
return
to_chat(user, SPAN_WARNING("You start [overloaded ? "overloading" : "restoring"] the safeties on [src]."))
@@ -446,7 +446,7 @@
var/repair_time = 20 SECONDS
repair_time *= user.get_skill_duration_multiplier(SKILL_ENGINEER)
- if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI))
+ if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED))
repair_time += 5 SECONDS
to_chat(user, SPAN_NOTICE("You start repairing [src] with [tool]."))
diff --git a/code/game/machinery/kitchen/smartfridge.dm b/code/game/machinery/kitchen/smartfridge.dm
index 774153316baa..957f6c97eca3 100644
--- a/code/game/machinery/kitchen/smartfridge.dm
+++ b/code/game/machinery/kitchen/smartfridge.dm
@@ -350,7 +350,7 @@
if("cutwire")
if(!panel_open)
return FALSE
- if(!skillcheck(usr, SKILL_ENGINEER, SKILL_ENGINEER_ENGI))
+ if(!skillcheck(usr, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED))
to_chat(usr, SPAN_WARNING("You don't understand anything about this wiring..."))
return FALSE
var/obj/item/held_item = user.get_held_item()
@@ -364,7 +364,7 @@
if("fixwire")
if(!panel_open)
return FALSE
- if(!skillcheck(usr, SKILL_ENGINEER, SKILL_ENGINEER_ENGI))
+ if(!skillcheck(usr, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED))
to_chat(usr, SPAN_WARNING("You don't understand anything about this wiring..."))
return FALSE
var/obj/item/held_item = user.get_held_item()
@@ -377,7 +377,7 @@
if("pulsewire")
if(!panel_open)
return FALSE
- if(!skillcheck(usr, SKILL_ENGINEER, SKILL_ENGINEER_ENGI))
+ if(!skillcheck(usr, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED))
to_chat(usr, SPAN_WARNING("You don't understand anything about this wiring..."))
return FALSE
var/obj/item/held_item = user.get_held_item()
diff --git a/code/game/machinery/machinery.dm b/code/game/machinery/machinery.dm
index f835ecaa424c..f7244fb8ce0d 100644
--- a/code/game/machinery/machinery.dm
+++ b/code/game/machinery/machinery.dm
@@ -171,7 +171,7 @@ Class Procs:
. += "It does not appear to be working."
var/msg = get_repair_move_text(FALSE)
- if(msg && skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI))
+ if(msg && skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED))
. += SPAN_WARNING("[msg]")
/obj/structure/machinery/emp_act(severity)
diff --git a/code/game/machinery/telecomms/machine_interactions.dm b/code/game/machinery/telecomms/machine_interactions.dm
index 9bffa8ebe450..31cd2cf94d4e 100644
--- a/code/game/machinery/telecomms/machine_interactions.dm
+++ b/code/game/machinery/telecomms/machine_interactions.dm
@@ -22,7 +22,7 @@
attack_hand(user)
else
- if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI))
+ if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED))
to_chat(user, SPAN_WARNING("You stare at \the [src] cluelessly..."))
return 0
@@ -103,7 +103,7 @@
// You need a multitool to use this, or be silicon
if(!isSilicon(user))
- if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI))
+ if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED))
to_chat(user, SPAN_WARNING("You stare at \the [src] cluelessly..."))
return
// istype returns false if the value is null
diff --git a/code/game/machinery/telecomms/portable_comms.dm b/code/game/machinery/telecomms/portable_comms.dm
index c2a9bb1072ac..cf7ef1c1f2ef 100644
--- a/code/game/machinery/telecomms/portable_comms.dm
+++ b/code/game/machinery/telecomms/portable_comms.dm
@@ -3,7 +3,7 @@
desc = "A portable compact TC-4T telecommunications construction kit. Used to set up subspace communications lines between planetary and extra-planetary locations. Needs cabling."
icon = 'icons/obj/structures/machinery/comm_tower2.dmi'
icon_state = "construct_0_0"
- required_skill = SKILL_ENGINEER_ENGI
+ required_skill = SKILL_ENGINEER_TRAINED
required_dismantle_skill = 5
density = TRUE
anchored = FALSE
diff --git a/code/game/machinery/telecomms/presets.dm b/code/game/machinery/telecomms/presets.dm
index 0c9e875534da..de2491126c7c 100644
--- a/code/game/machinery/telecomms/presets.dm
+++ b/code/game/machinery/telecomms/presets.dm
@@ -122,7 +122,7 @@
return
if(user.action_busy)
return
- if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED))
+ if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_NOVICE))
to_chat(user, SPAN_WARNING("You're not trained to repair [src]..."))
return
var/obj/item/tool/weldingtool/WT = I
diff --git a/code/game/machinery/vending/cm_vending.dm b/code/game/machinery/vending/cm_vending.dm
index db173e7b1608..2d15d4c37da8 100644
--- a/code/game/machinery/vending/cm_vending.dm
+++ b/code/game/machinery/vending/cm_vending.dm
@@ -153,7 +153,7 @@ GLOBAL_LIST_EMPTY(vending_products)
/obj/structure/machinery/cm_vending/get_examine_text(mob/living/carbon/human/user)
. = ..()
- if(skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI) && hackable)
+ if(skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED) && hackable)
. += SPAN_NOTICE("You believe you can hack this one to remove the access requirements.")
/obj/structure/machinery/cm_vending/proc/hack_access(mob/user)
@@ -678,7 +678,7 @@ GLOBAL_LIST_EMPTY(vending_products)
to_chat(user, SPAN_WARNING("You need to set [src] back upright first."))
return
if(HAS_TRAIT(W, TRAIT_TOOL_SCREWDRIVER))
- if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI))
+ if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED))
to_chat(user, SPAN_WARNING("You do not understand how to repair the broken [src]."))
return FALSE
else if(stat & MAINT)
@@ -705,7 +705,7 @@ GLOBAL_LIST_EMPTY(vending_products)
to_chat(user, SPAN_WARNING("[msg]"))
return FALSE
else if(HAS_TRAIT(W, TRAIT_TOOL_WIRECUTTERS))
- if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI))
+ if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED))
to_chat(user, SPAN_WARNING("You do not understand how to repair the broken [src]."))
return FALSE
else if(stat & REPAIR_STEP_ONE)
@@ -722,7 +722,7 @@ GLOBAL_LIST_EMPTY(vending_products)
to_chat(user, SPAN_WARNING("[msg]"))
return FALSE
else if(iswire(W))
- if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI))
+ if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED))
to_chat(user, SPAN_WARNING("You do not understand how to repair the broken [src]."))
return FALSE
var/obj/item/stack/cable_coil/CC = W
@@ -745,7 +745,7 @@ GLOBAL_LIST_EMPTY(vending_products)
to_chat(user, SPAN_WARNING("[msg]"))
return
else if(istype(W, /obj/item/stack/sheet/metal))
- if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI))
+ if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED))
to_chat(user, SPAN_WARNING("You do not understand how to repair the broken [src]."))
return FALSE
var/obj/item/stack/sheet/metal/M = W
@@ -768,7 +768,7 @@ GLOBAL_LIST_EMPTY(vending_products)
else if(HAS_TRAIT(W, TRAIT_TOOL_MULTITOOL))
var/obj/item/device/multitool/MT = W
- if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI) && !skillcheckexplicit(user, SKILL_ANTAG, SKILL_ANTAG_AGENT))
+ if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED) && !skillcheckexplicit(user, SKILL_ANTAG, SKILL_ANTAG_AGENT))
to_chat(user, SPAN_WARNING("You do not understand how tweak access requirements in [src]."))
return FALSE
if(stat != WORKING)
diff --git a/code/game/machinery/vending/vending.dm b/code/game/machinery/vending/vending.dm
index a05245e4b185..c6ef6eb7a574 100644
--- a/code/game/machinery/vending/vending.dm
+++ b/code/game/machinery/vending/vending.dm
@@ -207,7 +207,7 @@ GLOBAL_LIST_EMPTY_TYPED(total_vending_machines, /obj/structure/machinery/vending
to_chat(user, "You [panel_open ? "open" : "close"] the maintenance panel.")
update_icon()
return TRUE
- else if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI))
+ else if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED))
to_chat(user, SPAN_WARNING("You do not understand how to repair the broken [src.name]."))
return FALSE
else if(stat & BROKEN)
@@ -234,7 +234,7 @@ GLOBAL_LIST_EMPTY_TYPED(total_vending_machines, /obj/structure/machinery/vending
to_chat(user, SPAN_WARNING("[msg]"))
return FALSE
else if(HAS_TRAIT(item, TRAIT_TOOL_WIRECUTTERS))
- if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI))
+ if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED))
to_chat(user, SPAN_WARNING("You do not understand how to repair the broken [src.name]."))
return FALSE
else if(stat == WORKING && panel_open)
@@ -254,7 +254,7 @@ GLOBAL_LIST_EMPTY_TYPED(total_vending_machines, /obj/structure/machinery/vending
to_chat(user, SPAN_WARNING("[msg]"))
return FALSE
else if(istype(item, /obj/item/stack/cable_coil))
- if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI))
+ if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED))
to_chat(user, SPAN_WARNING("You do not understand how to repair the broken [src.name]."))
return FALSE
var/obj/item/stack/cable_coil/CC = item
@@ -277,7 +277,7 @@ GLOBAL_LIST_EMPTY_TYPED(total_vending_machines, /obj/structure/machinery/vending
to_chat(user, SPAN_WARNING("[msg]"))
return
else if(istype(item, /obj/item/stack/sheet/metal))
- if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI))
+ if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED))
to_chat(user, SPAN_WARNING("You do not understand how to repair the broken [src.name]."))
return FALSE
var/obj/item/stack/sheet/metal/M = item
diff --git a/code/game/machinery/vending/vendor_types/requisitions.dm b/code/game/machinery/vending/vendor_types/requisitions.dm
index fee0cde601aa..a4328bad5ea4 100644
--- a/code/game/machinery/vending/vendor_types/requisitions.dm
+++ b/code/game/machinery/vending/vendor_types/requisitions.dm
@@ -140,6 +140,7 @@
list("Powerloader Certification", 0.75, /obj/item/pamphlet/skill/powerloader, VENDOR_ITEM_REGULAR),
list("Spare PDT/L Battle Buddy Kit", floor(scale * 4), /obj/item/storage/box/pdt_kit, VENDOR_ITEM_REGULAR),
list("W-Y brand rechargeable mini-battery", floor(scale * 3), /obj/item/cell/crap, VENDOR_ITEM_REGULAR),
+ list("Nailgun Magazine (7x45mm)", floor(scale * 4), /obj/item/ammo_magazine/smg/nailgun, VENDOR_ITEM_REGULAR),
list("EXPLOSIVES BOXES", -1, null, null),
list("M15 Fragmentation Grenade Packet", 0, /obj/item/storage/box/packet/m15, VENDOR_ITEM_REGULAR),
@@ -161,7 +162,8 @@
list("OTHER BOXES", -1, null, null),
list("Box of M94 Marking Flare Packs", 0, /obj/item/ammo_box/magazine/misc/flares, VENDOR_ITEM_REGULAR),
list("Box of M89 Signal Flare Packs", 0, /obj/item/ammo_box/magazine/misc/flares/signal, VENDOR_ITEM_REGULAR),
- list("Box of High-Capacity Power Cells", 0, /obj/item/ammo_box/magazine/misc/power_cell, VENDOR_ITEM_REGULAR)
+ list("Box of High-Capacity Power Cells", 0, /obj/item/ammo_box/magazine/misc/power_cell, VENDOR_ITEM_REGULAR),
+ list("Nailgun Magazine Box (7x45mm)", floor(scale * 2), /obj/item/ammo_box/magazine/nailgun, VENDOR_ITEM_REGULAR)
)
/obj/structure/machinery/cm_vending/sorted/cargo_guns/stock(obj/item/item_to_stock, mob/user)
diff --git a/code/game/machinery/vending/vendor_types/squad_prep/squad_engineer.dm b/code/game/machinery/vending/vendor_types/squad_prep/squad_engineer.dm
index 29299654899e..53ce7986f195 100644
--- a/code/game/machinery/vending/vendor_types/squad_prep/squad_engineer.dm
+++ b/code/game/machinery/vending/vendor_types/squad_prep/squad_engineer.dm
@@ -138,6 +138,7 @@ GLOBAL_LIST_INIT(cm_vending_clothing_engi, list(
list("M276 Mortar Operator Belt", 0, /obj/item/storage/belt/gun/mortarbelt, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
list("M276 Toolbelt Rig (Full)", 0, /obj/item/storage/belt/utility/full, MARINE_CAN_BUY_BELT, VENDOR_ITEM_MANDATORY),
list("M276 M40 Grenade Rig", 0, /obj/item/storage/belt/grenade, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
+ list("M277 Pattern Construction Rig", 0, /obj/item/storage/belt/utility/construction, MARINE_CAN_BUY_BELT, VENDOR_ITEM_RECOMMENDED),
list("POUCHES (CHOOSE 2)", 0, null, null, null),
list("Construction Pouch", 0, /obj/item/storage/pouch/construction, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_RECOMMENDED),
@@ -153,6 +154,8 @@ GLOBAL_LIST_INIT(cm_vending_clothing_engi, list(
list("Medium General Pouch", 0, /obj/item/storage/pouch/general/medium, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
list("Pistol Pouch", 0, /obj/item/storage/pouch/pistol, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
list("Tools Pouch (Full)", 0, /obj/item/storage/pouch/tools/full, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
+ list("Engineer kit Pouch", 0, /obj/item/storage/pouch/engikit, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
+
list("ACCESSORIES (CHOOSE 1)", 0, null, null, null),
list("Black Webbing Vest", 0, /obj/item/clothing/accessory/storage/black_vest, MARINE_CAN_BUY_ACCESSORY, VENDOR_ITEM_REGULAR),
@@ -160,6 +163,7 @@ GLOBAL_LIST_INIT(cm_vending_clothing_engi, list(
list("Shoulder Holster", 0, /obj/item/clothing/accessory/storage/holster, MARINE_CAN_BUY_ACCESSORY, VENDOR_ITEM_REGULAR),
list("Webbing", 0, /obj/item/clothing/accessory/storage/webbing, MARINE_CAN_BUY_ACCESSORY, VENDOR_ITEM_REGULAR),
list("Drop Pouch", 0, /obj/item/clothing/accessory/storage/droppouch, MARINE_CAN_BUY_ACCESSORY, VENDOR_ITEM_REGULAR),
+ list("Small Tool Webbing (Full)", 0, /obj/item/clothing/accessory/storage/tool_webbing/small/equipped, MARINE_CAN_BUY_ACCESSORY, VENDOR_ITEM_REGULAR),
list("MASK (CHOOSE 1)", 0, null, null, null),
list("Gas Mask", 0, /obj/item/clothing/mask/gas, MARINE_CAN_BUY_MASK, VENDOR_ITEM_REGULAR),
@@ -211,4 +215,5 @@ GLOBAL_LIST_INIT(cm_vending_clothing_engi, list(
/obj/item/cell/high,
/obj/item/tool/shovel/etool/folded,
/obj/item/device/lightreplacer,
+ /obj/item/weapon/gun/smg/nailgun/compact/tactical,
)
diff --git a/code/game/machinery/vending/vendor_types/squad_prep/squad_prep.dm b/code/game/machinery/vending/vendor_types/squad_prep/squad_prep.dm
index a799ff25d051..ff43ca68657d 100644
--- a/code/game/machinery/vending/vendor_types/squad_prep/squad_prep.dm
+++ b/code/game/machinery/vending/vendor_types/squad_prep/squad_prep.dm
@@ -339,7 +339,8 @@
list("Binoculars", floor(scale * 1), /obj/item/device/binoculars, VENDOR_ITEM_REGULAR),
list("MB-6 Folding Barricades (x3)", floor(scale * 2), /obj/item/stack/folding_barricade/three, VENDOR_ITEM_REGULAR),
list("Spare PDT/L Battle Buddy Kit", floor(scale * 3), /obj/item/storage/box/pdt_kit, VENDOR_ITEM_REGULAR),
- list("W-Y brand rechargeable mini-battery", floor(scale * 2.5), /obj/item/cell/crap, VENDOR_ITEM_REGULAR)
+ list("W-Y brand rechargeable mini-battery", floor(scale * 2.5), /obj/item/cell/crap, VENDOR_ITEM_REGULAR),
+ list("Nailgun Magazine (7x45mm)", floor(scale * 4), /obj/item/ammo_magazine/smg/nailgun, VENDOR_ITEM_REGULAR)
)
//--------------SQUAD ATTACHMENTS VENDOR--------------
diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm
index 03e1f126e9d8..d8bf3d9d8f79 100644
--- a/code/game/objects/items.dm
+++ b/code/game/objects/items.dm
@@ -163,6 +163,9 @@
/// How much to offset the item randomly either way alongside Y visually
var/ground_offset_y = 0
+ /// Special storages this item prioritizes
+ var/list/preferred_storage
+
/obj/item/Initialize(mapload, ...)
. = ..()
diff --git a/code/game/objects/items/circuitboards/computer.dm b/code/game/objects/items/circuitboards/computer.dm
index 43215faf0fbb..58ff86130cd6 100644
--- a/code/game/objects/items/circuitboards/computer.dm
+++ b/code/game/objects/items/circuitboards/computer.dm
@@ -180,7 +180,7 @@
else if(HAS_TRAIT(tool, TRAIT_TOOL_BLACKMARKET_HACKER))
to_chat(user, SPAN_WARNING("You start messing around with the electronics of [src]..."))
if(do_after(user, 8 SECONDS, INTERRUPT_ALL, BUSY_ICON_FRIENDLY))
- if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI))
+ if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED))
to_chat(user, SPAN_WARNING("You have no idea what you're doing."))
return
to_chat(user, SPAN_WARNING("Huh? You find a processor bus with the letters 'B.M.' written in white crayon over it. You start fiddling with it."))
diff --git a/code/game/objects/items/devices/multitool.dm b/code/game/objects/items/devices/multitool.dm
index a92135b9d7ed..73e5b86a69eb 100644
--- a/code/game/objects/items/devices/multitool.dm
+++ b/code/game/objects/items/devices/multitool.dm
@@ -18,6 +18,7 @@
matter = list("metal" = 50,"glass" = 20)
inherent_traits = list(TRAIT_TOOL_MULTITOOL)
+ preferred_storage = list(/obj/item/clothing/accessory/storage/tool_webbing = WEAR_ACCESSORY)
var/hack_speed = 10 SECONDS // Only used for vendors right now
var/next_scan
@@ -46,7 +47,7 @@
/obj/item/device/multitool/attack_self(mob/user)
..()
- if(world.time < next_scan || !ishuman(user) || !skillcheck(user,SKILL_ENGINEER,SKILL_ENGINEER_TRAINED))
+ if(world.time < next_scan || !ishuman(user) || !skillcheck(user,SKILL_ENGINEER,SKILL_ENGINEER_NOVICE))
return
next_scan = world.time + 15
diff --git a/code/game/objects/items/devices/scanners.dm b/code/game/objects/items/devices/scanners.dm
index 8c507dad18e3..0e7680cd2f7d 100644
--- a/code/game/objects/items/devices/scanners.dm
+++ b/code/game/objects/items/devices/scanners.dm
@@ -329,7 +329,7 @@ FORENSIC SCANNER
if(!(istype(user, /mob/living/carbon/human) || SSticker) && SSticker.mode.name != "monkey")
to_chat(user, SPAN_DANGER("You don't have the dexterity to do this!"))
return
- if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI))
+ if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED))
to_chat(user, SPAN_WARNING("You do not know how to use the [name]."))
return
if(!istype(O))
diff --git a/code/game/objects/items/explosives/explosive.dm b/code/game/objects/items/explosives/explosive.dm
index 1bd6985bc015..0be81ba8a0ed 100644
--- a/code/game/objects/items/explosives/explosive.dm
+++ b/code/game/objects/items/explosives/explosive.dm
@@ -259,7 +259,7 @@
to_chat(usr, SPAN_DANGER("This is beyond your understanding..."))
return
- if(!skillcheck(H, SKILL_ENGINEER, SKILL_ENGINEER_ENGI))
+ if(!skillcheck(H, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED))
to_chat(usr, SPAN_DANGER("You have no idea how to use this..."))
return
diff --git a/code/game/objects/items/explosives/plastic.dm b/code/game/objects/items/explosives/plastic.dm
index 58cbca9a5ab3..c6a3dfaed5f9 100644
--- a/code/game/objects/items/explosives/plastic.dm
+++ b/code/game/objects/items/explosives/plastic.dm
@@ -25,7 +25,7 @@
antigrief_protection = TRUE //Should it be checked by antigrief?
var/req_skill = SKILL_ENGINEER
- var/req_skill_level = SKILL_ENGINEER_TRAINED
+ var/req_skill_level = SKILL_ENGINEER_NOVICE
/obj/item/explosive/plastic/Destroy()
disarm()
@@ -46,7 +46,7 @@
. = ..()
/obj/item/explosive/plastic/attack_self(mob/user)
- if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED))
+ if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_NOVICE))
to_chat(user, SPAN_WARNING("You don't seem to know how to use [src]..."))
return
diff --git a/code/game/objects/items/props/helmetgarb.dm b/code/game/objects/items/props/helmetgarb.dm
index 5b9b81804311..9da509d16c5a 100644
--- a/code/game/objects/items/props/helmetgarb.dm
+++ b/code/game/objects/items/props/helmetgarb.dm
@@ -176,12 +176,12 @@
if(src != user.get_inactive_hand())
to_chat(user, SPAN_WARNING("You need to hold \the [src] in hand in order to repair them."))
return
- if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED)) // level 2 is enough to repair damaged NVG
+ if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_NOVICE)) // level 2 is enough to repair damaged NVG
to_chat(user, SPAN_WARNING("You are not trained to repair electronics..."))
return
if(shape == NVG_SHAPE_BROKEN)
- if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI)) // level 3 is needed to repair broken NVG
+ if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED)) // level 3 is needed to repair broken NVG
to_chat(user, SPAN_WARNING("Repair of this complexity is too difficult for you, find someone more trained."))
return
diff --git a/code/game/objects/items/storage/backpack.dm b/code/game/objects/items/storage/backpack.dm
index 06636d2c3f76..9ed53236789d 100644
--- a/code/game/objects/items/storage/backpack.dm
+++ b/code/game/objects/items/storage/backpack.dm
@@ -15,7 +15,7 @@
cant_hold = list(/obj/item/storage/firstaid, /obj/item/storage/toolkit)
can_hold_skill = list(
/obj/item/storage/firstaid = list(SKILL_MEDICAL, SKILL_MEDICAL_MEDIC),
- /obj/item/storage/toolkit = list(SKILL_ENGINEER, SKILL_ENGINEER_ENGI),
+ /obj/item/storage/toolkit = list(SKILL_ENGINEER, SKILL_ENGINEER_TRAINED),
)
drop_sound = "armorequip"
var/worn_accessible = FALSE //whether you can access its content while worn on the back
diff --git a/code/game/objects/items/storage/belt.dm b/code/game/objects/items/storage/belt.dm
index 97d76729be72..14961c69eaf5 100644
--- a/code/game/objects/items/storage/belt.dm
+++ b/code/game/objects/items/storage/belt.dm
@@ -117,7 +117,6 @@
)
storage_slots = 10
-
/obj/item/storage/belt/utility/full/fill_preset_inventory()
new /obj/item/tool/screwdriver(src)
new /obj/item/tool/wrench(src)
@@ -136,6 +135,50 @@
new /obj/item/tool/wirecutters(src)
new /obj/item/device/t_scanner(src)
+/obj/item/storage/belt/utility/construction
+ name = "\improper M277 pattern construction rig"
+ desc = "The M277 is a common rig used by Combat Technicians to carry around materials and other supplies. It consists of a modular belt with various clips. This version sarafices storage space for specialized material loading clips."
+ storage_slots = 6
+ can_hold = list(
+ /obj/item/tool/crowbar,
+ /obj/item/tool/screwdriver,
+ /obj/item/tool/weldingtool,
+ /obj/item/tool/wirecutters,
+ /obj/item/tool/wrench,
+ /obj/item/tool/extinguisher/mini,
+ /obj/item/tool/shovel/etool,
+ /obj/item/stack/cable_coil,
+ /obj/item/weapon/gun/smg/nailgun/compact,
+ /obj/item/cell,
+ /obj/item/circuitboard,
+ /obj/item/stock_parts,
+ /obj/item/device/demo_scanner,
+ /obj/item/device/reagent_scanner,
+ /obj/item/device/assembly,
+ /obj/item/device/multitool,
+ /obj/item/device/flashlight,
+ /obj/item/device/t_scanner,
+ /obj/item/device/analyzer,
+ /obj/item/explosive/plastic,
+ /obj/item/device/lightreplacer,
+ /obj/item/stack/sheet,
+ /obj/item/stack/sandbags_empty,
+ /obj/item/stack/sandbags,
+ /obj/item/stack/barbed_wire,
+ /obj/item/defenses/handheld/sentry,
+ /obj/item/stack/rods,
+ /obj/item/stack/tile,
+ )
+
+ bypass_w_limit = list(
+ /obj/item/tool/shovel/etool,
+ /obj/item/device/lightreplacer,
+ /obj/item/stack/sheet,
+ /obj/item/stack/sandbags_empty,
+ /obj/item/stack/sandbags,
+ /obj/item/defenses/handheld/sentry,
+ )
+
/obj/item/storage/belt/utility/full/pred
name = "\improper Yautja toolbelt"
desc = "A modular belt with various clips. This version lacks any hunting functionality, and is commonly used by engineers to transport important tools."
diff --git a/code/game/objects/items/storage/pouch.dm b/code/game/objects/items/storage/pouch.dm
index 63516ac20aa0..9c8c7080bdc3 100644
--- a/code/game/objects/items/storage/pouch.dm
+++ b/code/game/objects/items/storage/pouch.dm
@@ -802,6 +802,28 @@
for(var/i = 1 to storage_slots)
new /obj/item/reagent_container/syringe(src)
+/obj/item/storage/pouch/engikit
+ name = "engineer kit pouch"
+ storage_flags = STORAGE_FLAGS_POUCH
+ icon_state = "construction"
+ desc = "It's specifically made to hold engineering items. Requires engineering skills to use effectively."
+ storage_slots = 6
+ can_hold_skill = list(
+ /obj/item/circuitboard = list(SKILL_ENGINEER, SKILL_ENGINEER_TRAINED),
+ /obj/item/device/flashlight = list(SKILL_ENGINEER, SKILL_ENGINEER_TRAINED),
+ /obj/item/clothing/glasses/welding = list(SKILL_ENGINEER, SKILL_ENGINEER_TRAINED),
+ /obj/item/device/analyzer = list(SKILL_ENGINEER, SKILL_ENGINEER_TRAINED),
+ /obj/item/device/demo_scanner = list(SKILL_ENGINEER, SKILL_ENGINEER_TRAINED),
+ /obj/item/device/reagent_scanner = list(SKILL_ENGINEER, SKILL_ENGINEER_TRAINED),
+ /obj/item/device/t_scanner = list(SKILL_ENGINEER, SKILL_ENGINEER_TRAINED),
+ /obj/item/stack/cable_coil = list(SKILL_ENGINEER, SKILL_ENGINEER_TRAINED),
+ /obj/item/cell = list(SKILL_ENGINEER, SKILL_ENGINEER_TRAINED),
+ /obj/item/device/assembly = list(SKILL_ENGINEER, SKILL_ENGINEER_TRAINED),
+ /obj/item/stock_parts = list(SKILL_ENGINEER, SKILL_ENGINEER_TRAINED),
+ /obj/item/explosive/plastic = list(SKILL_ENGINEER, SKILL_ENGINEER_TRAINED),
+ )
+ can_hold_skill_only = TRUE
+
/obj/item/storage/pouch/medkit
name = "medical kit pouch"
storage_flags = STORAGE_FLAGS_POUCH
diff --git a/code/game/objects/items/storage/toolkit.dm b/code/game/objects/items/storage/toolkit.dm
index e3171eca40f6..cccca19c241c 100644
--- a/code/game/objects/items/storage/toolkit.dm
+++ b/code/game/objects/items/storage/toolkit.dm
@@ -23,7 +23,7 @@
)
storage_flags = STORAGE_FLAGS_BOX
required_skill_for_nest_opening = SKILL_ENGINEER
- required_skill_level_for_nest_opening = SKILL_ENGINEER_ENGI
+ required_skill_level_for_nest_opening = SKILL_ENGINEER_TRAINED
///icon state to use when kit is full
var/icon_full
diff --git a/code/game/objects/items/tools/maintenance_tools.dm b/code/game/objects/items/tools/maintenance_tools.dm
index 8febff63ee5d..f45953040a07 100644
--- a/code/game/objects/items/tools/maintenance_tools.dm
+++ b/code/game/objects/items/tools/maintenance_tools.dm
@@ -29,6 +29,7 @@
matter = list("metal" = 150)
attack_verb = list("bashed", "battered", "bludgeoned", "whacked")
inherent_traits = list(TRAIT_TOOL_WRENCH)
+ preferred_storage = list(/obj/item/clothing/accessory/storage/tool_webbing = WEAR_ACCESSORY)
/*
@@ -52,7 +53,7 @@
attack_verb = list("stabbed")
flags_item = CAN_DIG_SHRAPNEL
inherent_traits = list(TRAIT_TOOL_SCREWDRIVER)
-
+ preferred_storage = list(/obj/item/clothing/accessory/storage/tool_webbing = WEAR_ACCESSORY)
/obj/item/tool/screwdriver/Initialize()
@@ -135,6 +136,7 @@
sharp = IS_SHARP_ITEM_SIMPLE
edge = 1
inherent_traits = list(TRAIT_TOOL_WIRECUTTERS)
+ preferred_storage = list(/obj/item/clothing/accessory/storage/tool_webbing = WEAR_ACCESSORY)
/obj/item/tool/wirecutters/tactical
name = "tactical wirecutters"
@@ -189,6 +191,7 @@
/// Used to slowly deplete the fuel when the tool is left on.
var/weld_tick = 0
var/has_welding_screen = FALSE
+ preferred_storage = list(/obj/item/clothing/accessory/storage/tool_webbing = WEAR_ACCESSORY)
/obj/item/tool/weldingtool/Initialize()
. = ..()
@@ -472,6 +475,7 @@
attack_verb = list("attacked", "bashed", "battered", "bludgeoned", "whacked")
inherent_traits = list(TRAIT_TOOL_CROWBAR)
pry_capable = IS_PRY_CAPABLE_CROWBAR
+ preferred_storage = list(/obj/item/clothing/accessory/storage/tool_webbing = WEAR_ACCESSORY)
/obj/item/tool/crowbar/red
icon = 'icons/obj/items/items.dmi'
diff --git a/code/game/objects/structures/barricade/barricade.dm b/code/game/objects/structures/barricade/barricade.dm
index e04bbef7ecec..a7d3d4d16cd4 100644
--- a/code/game/objects/structures/barricade/barricade.dm
+++ b/code/game/objects/structures/barricade/barricade.dm
@@ -454,6 +454,10 @@
to_chat(user, SPAN_WARNING("You'll need some adequate repair material in your other hand to patch up [src]!"))
return FALSE
+ if(material.amount < nailgun.material_per_repair)
+ to_chat(user, SPAN_WARNING("You'll need more adequate repair material in your other hand to patch up [src]!"))
+ return FALSE
+
var/repair_value = 0
for(var/validSheetType in repair_materials)
if(validSheetType == material.sheettype)
@@ -470,7 +474,7 @@
return FALSE
if(!material || (material != user.l_hand && material != user.r_hand) || material.amount <= 0)
- to_chat(user, SPAN_WARNING("You seems to have misplaced the repair material!"))
+ to_chat(user, SPAN_WARNING("You seem to have misplaced the repair material!"))
return FALSE
if(!nailgun.in_chamber || !nailgun.current_mag || nailgun.current_mag.current_rounds < 3)
@@ -480,7 +484,7 @@
update_health(-repair_value*maxhealth)
to_chat(user, SPAN_WARNING("You nail [material] to [src], restoring some of its integrity!"))
update_damage_state()
- material.use(1)
+ material.use(nailgun.material_per_repair)
nailgun.current_mag.current_rounds -= 3
nailgun.in_chamber = null
nailgun.load_into_chamber()
diff --git a/code/game/objects/structures/barricade/deployable.dm b/code/game/objects/structures/barricade/deployable.dm
index 0f69b0951b05..ad559f2e13bd 100644
--- a/code/game/objects/structures/barricade/deployable.dm
+++ b/code/game/objects/structures/barricade/deployable.dm
@@ -31,7 +31,7 @@
if(HAS_TRAIT(item, TRAIT_TOOL_CROWBAR))
if(user.action_busy)
return
- if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED))
+ if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_NOVICE))
to_chat(user, SPAN_WARNING("You do not know how to collapse [src] using a crowbar..."))
return
user.visible_message(SPAN_NOTICE("[user] starts collapsing [src]."), \
diff --git a/code/game/objects/structures/barricade/metal.dm b/code/game/objects/structures/barricade/metal.dm
index 3e79af2e21e1..f16e6851341b 100644
--- a/code/game/objects/structures/barricade/metal.dm
+++ b/code/game/objects/structures/barricade/metal.dm
@@ -48,7 +48,7 @@
if(!..())
return FALSE
- if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED))
+ if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_NOVICE))
if(!silent)
to_chat(user, SPAN_WARNING("You're not trained to repair [src]..."))
return FALSE
diff --git a/code/game/objects/structures/barricade/plasteel.dm b/code/game/objects/structures/barricade/plasteel.dm
index 1acedae9997d..fb5a08954a5d 100644
--- a/code/game/objects/structures/barricade/plasteel.dm
+++ b/code/game/objects/structures/barricade/plasteel.dm
@@ -69,7 +69,7 @@
if(!..())
return FALSE
- if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED))
+ if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_NOVICE))
if(!silent)
to_chat(user, SPAN_WARNING("You're not trained to repair [src]..."))
return FALSE
@@ -95,7 +95,7 @@
if(busy || tool_cooldown > world.time)
return
tool_cooldown = world.time + 10
- if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI))
+ if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED))
to_chat(user, SPAN_WARNING("You are not trained to assemble [src]..."))
return
@@ -112,7 +112,7 @@
return
if(HAS_TRAIT(item, TRAIT_TOOL_CROWBAR))
- if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI))
+ if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED))
to_chat(user, SPAN_WARNING("You are not trained to modify [src]..."))
return
playsound(src.loc, 'sound/items/Crowbar.ogg', 25, 1)
@@ -136,7 +136,7 @@
if(busy || tool_cooldown > world.time)
return
tool_cooldown = world.time + 10
- if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI))
+ if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED))
to_chat(user, SPAN_WARNING("You are not trained to assemble [src]..."))
return
if(!do_after(user, 10, INTERRUPT_ALL|BEHAVIOR_IMMOBILE, BUSY_ICON_BUILD, src))
@@ -151,7 +151,7 @@
if(busy || tool_cooldown > world.time)
return
tool_cooldown = world.time + 10
- if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI))
+ if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED))
to_chat(user, SPAN_WARNING("You are not trained to assemble [src]..."))
return
if(!do_after(user, 10, INTERRUPT_ALL|BEHAVIOR_IMMOBILE, BUSY_ICON_BUILD, src))
@@ -169,7 +169,7 @@
if(busy || tool_cooldown > world.time)
return
tool_cooldown = world.time + 10
- if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI))
+ if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED))
to_chat(user, SPAN_WARNING("You are not trained to assemble [src]..."))
return
var/turf/open/T = loc
@@ -190,7 +190,7 @@
if(busy || tool_cooldown > world.time)
return
tool_cooldown = world.time + 10
- if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI))
+ if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED))
to_chat(user, SPAN_WARNING("You are not trained to assemble [src]..."))
return
user.visible_message(SPAN_NOTICE("[user] starts unseating [src]'s panels."),
diff --git a/code/game/turfs/walls/walls.dm b/code/game/turfs/walls/walls.dm
index bb1694359b98..f82ba6ddadaf 100644
--- a/code/game/turfs/walls/walls.dm
+++ b/code/game/turfs/walls/walls.dm
@@ -566,7 +566,7 @@
// Check again for presence of objects
if(!material || (material != user.l_hand && material != user.r_hand) || material.amount <= 0)
- to_chat(user, SPAN_WARNING("You seems to have misplaced the repair material!"))
+ to_chat(user, SPAN_WARNING("You seem to have misplaced the repair material!"))
return FALSE
if(!NG.in_chamber || !NG.current_mag || NG.current_mag.current_rounds < (4*amount_needed-1))
diff --git a/code/modules/clothing/under/ties.dm b/code/modules/clothing/under/ties.dm
index d78c0faeeca8..6ec29911c958 100644
--- a/code/modules/clothing/under/ties.dm
+++ b/code/modules/clothing/under/ties.dm
@@ -584,6 +584,11 @@
desc = "A brown synthcotton webbing that is similar in function to civilian tool aprons, but is more durable for field usage."
hold = /obj/item/storage/internal/accessory/tool_webbing
+/obj/item/clothing/accessory/storage/tool_webbing/small
+ name = "Small Tool Webbing"
+ desc = "A brown synthcotton webbing that is similar in function to civilian tool aprons, but is more durable for field usage. This is the small low-budget version."
+ hold = /obj/item/storage/internal/accessory/tool_webbing/small
+
/obj/item/storage/internal/accessory/tool_webbing
storage_slots = 7
can_hold = list(
@@ -594,8 +599,24 @@
/obj/item/tool/wirecutters,
/obj/item/stack/cable_coil,
/obj/item/device/multitool,
+ /obj/item/tool/shovel/etool,
+ /obj/item/weapon/gun/smg/nailgun/compact,
)
+/obj/item/storage/internal/accessory/tool_webbing/small
+ storage_slots = 6
+
+/obj/item/clothing/accessory/storage/tool_webbing/small/equipped
+ hold = /obj/item/storage/internal/accessory/tool_webbing/small/equipped
+
+/obj/item/storage/internal/accessory/tool_webbing/small/equipped/fill_preset_inventory()
+ new /obj/item/tool/screwdriver(src)
+ new /obj/item/tool/wrench(src)
+ new /obj/item/tool/weldingtool(src)
+ new /obj/item/tool/crowbar(src)
+ new /obj/item/tool/wirecutters(src)
+ new /obj/item/device/multitool(src)
+
/obj/item/clothing/accessory/storage/tool_webbing/equipped
hold = /obj/item/storage/internal/accessory/tool_webbing/equipped
diff --git a/code/modules/cm_marines/anti_air.dm b/code/modules/cm_marines/anti_air.dm
index e867c0d64083..3c69a0fe241a 100644
--- a/code/modules/cm_marines/anti_air.dm
+++ b/code/modules/cm_marines/anti_air.dm
@@ -131,7 +131,7 @@ GLOBAL_DATUM(almayer_aa_cannon, /obj/structure/anti_air_cannon)
if(..())
return
- if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI))
+ if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED))
to_chat(user, SPAN_WARNING("You have no idea how to use that console."))
return TRUE
diff --git a/code/modules/cm_marines/equipment/kit_boxes.dm b/code/modules/cm_marines/equipment/kit_boxes.dm
index 2a2c2d450523..c1621baa9b5d 100644
--- a/code/modules/cm_marines/equipment/kit_boxes.dm
+++ b/code/modules/cm_marines/equipment/kit_boxes.dm
@@ -283,15 +283,15 @@
specialist_assignment = "Scout"
user.skills.set_skill(SKILL_SPEC_WEAPONS, SKILL_SPEC_SCOUT)
//this is to be able to use C4s that are coming with the kit
- if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED))
- user.skills.set_skill(SKILL_ENGINEER, SKILL_ENGINEER_TRAINED)
+ if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_NOVICE))
+ user.skills.set_skill(SKILL_ENGINEER, SKILL_ENGINEER_NOVICE)
if("Demo")
spec_box = new /obj/item/storage/box/spec/demolitionist(T)
specialist_assignment = "Demo"
user.skills.set_skill(SKILL_SPEC_WEAPONS, SKILL_SPEC_ROCKET)
//this is to be able to use C4s that are coming with the kit
- if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED))
- user.skills.set_skill(SKILL_ENGINEER, SKILL_ENGINEER_TRAINED)
+ if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_NOVICE))
+ user.skills.set_skill(SKILL_ENGINEER, SKILL_ENGINEER_NOVICE)
if(specialist_assignment)
user.put_in_hands(spec_box)
card.set_assignment((user.assigned_squad && squad_assignment_update ? (user.assigned_squad.name + " ") : "") + card.assignment + " ([specialist_assignment])")
diff --git a/code/modules/cm_marines/equipment/mortar/mortar_shells.dm b/code/modules/cm_marines/equipment/mortar/mortar_shells.dm
index 1cb93c6a809e..1d6cb3be0a3c 100644
--- a/code/modules/cm_marines/equipment/mortar/mortar_shells.dm
+++ b/code/modules/cm_marines/equipment/mortar/mortar_shells.dm
@@ -112,7 +112,7 @@
icon_state = initial(icon_state)
/obj/item/mortar_shell/custom/attackby(obj/item/W as obj, mob/user)
- if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI))
+ if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED))
to_chat(user, SPAN_WARNING("You do not know how to tinker with [name]."))
return
if(HAS_TRAIT(W, TRAIT_TOOL_SCREWDRIVER))
diff --git a/code/modules/cm_marines/equipment/mortar/mortars.dm b/code/modules/cm_marines/equipment/mortar/mortars.dm
index 018bd7b9e11c..e7e258494e52 100644
--- a/code/modules/cm_marines/equipment/mortar/mortars.dm
+++ b/code/modules/cm_marines/equipment/mortar/mortars.dm
@@ -91,7 +91,7 @@
if(isyautja(user))
to_chat(user, SPAN_WARNING("You kick [src] but nothing happens."))
return
- if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED))
+ if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_NOVICE))
to_chat(user, SPAN_WARNING("You don't have the training to use [src]."))
return
if(busy)
@@ -213,7 +213,7 @@
var/obj/item/mortar_shell/mortar_shell = item
var/turf/target_turf = locate(targ_x + dial_x + offset_x, targ_y + dial_y + offset_y, z)
var/area/target_area = get_area(target_turf)
- if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED))
+ if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_NOVICE))
to_chat(user, SPAN_WARNING("You don't have the training to fire [src]."))
return
if(busy)
@@ -277,7 +277,7 @@
addtimer(CALLBACK(src, PROC_REF(handle_shell), target_turf, mortar_shell), travel_time)
if(HAS_TRAIT(item, TRAIT_TOOL_WRENCH))
- if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED))
+ if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_NOVICE))
to_chat(user, SPAN_WARNING("You don't have the training to undeploy [src]."))
return
if(fixed)
@@ -410,7 +410,7 @@
var/turf/deploy_turf = get_turf(user)
if(!deploy_turf)
return
- if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED))
+ if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_NOVICE))
to_chat(user, SPAN_WARNING("You don't have the training to deploy [src]."))
return
var/area/area = get_area(deploy_turf)
diff --git a/code/modules/cm_marines/orbital_cannon.dm b/code/modules/cm_marines/orbital_cannon.dm
index a4286b043eba..d3eca0ea3ba3 100644
--- a/code/modules/cm_marines/orbital_cannon.dm
+++ b/code/modules/cm_marines/orbital_cannon.dm
@@ -681,7 +681,7 @@ GLOBAL_LIST_EMPTY(orbital_cannon_cancellation)
if(..())
return
- if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI))
+ if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED))
to_chat(user, SPAN_WARNING("You have no idea how to use that console."))
return TRUE
diff --git a/code/modules/cm_tech/implements/xeno_handler.dm b/code/modules/cm_tech/implements/xeno_handler.dm
index cbafec7499ee..d3340ffcdff8 100644
--- a/code/modules/cm_tech/implements/xeno_handler.dm
+++ b/code/modules/cm_tech/implements/xeno_handler.dm
@@ -53,7 +53,7 @@
SKILL_FIREARMS = SKILL_FIREARMS_EXPERT,
SKILL_POLICE = SKILL_POLICE_SKILLED,
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI,
- SKILL_ENGINEER = SKILL_ENGINEER_ENGI,
+ SKILL_ENGINEER = SKILL_ENGINEER_TRAINED,
SKILL_LEADERSHIP = SKILL_LEAD_MASTER,
SKILL_OVERWATCH = SKILL_OVERWATCH_TRAINED,
SKILL_ENDURANCE = SKILL_ENDURANCE_EXPERT,
diff --git a/code/modules/defenses/defenses.dm b/code/modules/defenses/defenses.dm
index af4e497862fa..fef8498f802a 100644
--- a/code/modules/defenses/defenses.dm
+++ b/code/modules/defenses/defenses.dm
@@ -185,7 +185,7 @@
additional_shock++
if(prob(50))
var/mob/living/carbon/human/H = user
- if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED))
+ if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_NOVICE))
if(turned_on)
additional_shock++
H.electrocute_act(40, src, additional_shock)//god damn Hans...
@@ -204,7 +204,7 @@
to_chat(user, SPAN_WARNING("You've hacked \the [src], it's now ours!"))
return
- if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED))
+ if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_NOVICE))
to_chat(user, SPAN_WARNING("You don't have the training to do this."))
return
// if the sentry can have key interacted with
@@ -368,7 +368,7 @@
to_chat(user, SPAN_WARNING("It must be anchored to the ground before you can activate it."))
return
- if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI))
+ if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED))
if(locked)
to_chat(user, SPAN_WARNING("The control panel on [src] is locked to non-engineers."))
return
@@ -490,7 +490,7 @@
return
if(!friendly_faction(usr.faction))
return
- if(!skillcheck(usr, SKILL_ENGINEER, SKILL_ENGINEER_ENGI))
+ if(!skillcheck(usr, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED))
to_chat(usr, SPAN_WARNING("You don't have the training to do this."))
return
diff --git a/code/modules/defenses/handheld.dm b/code/modules/defenses/handheld.dm
index 5b5831c9bb15..242d902cbd13 100644
--- a/code/modules/defenses/handheld.dm
+++ b/code/modules/defenses/handheld.dm
@@ -114,7 +114,8 @@
. += list("DMR Upgrade" = image(icon = 'icons/obj/structures/machinery/defenses/sentry.dmi', icon_state = "DMR uac_sentry_handheld"))
. += list(
"Shotgun Upgrade" = image(icon = 'icons/obj/structures/machinery/defenses/sentry.dmi', icon_state = "Shotgun uac_sentry_handheld"),
- "Mini-Sentry Upgrade" = image(icon = 'icons/obj/structures/machinery/defenses/sentry.dmi', icon_state = "Mini uac_sentry_handheld")
+ "Mini-Sentry Upgrade" = image(icon = 'icons/obj/structures/machinery/defenses/sentry.dmi', icon_state = "Mini uac_sentry_handheld"),
+ "Omni-Sentry Upgrade" = image(icon = 'icons/obj/structures/machinery/defenses/sentry.dmi', icon_state="Normal uac_sentry_handheld")
)
/obj/item/defenses/handheld/sentry/upgrade_string_to_type(upgrade_string)
@@ -125,6 +126,8 @@
return /obj/item/defenses/handheld/sentry/shotgun
if("Mini-Sentry Upgrade")
return /obj/item/defenses/handheld/sentry/mini
+ if("Omni-Sentry Upgrade")
+ return /obj/item/defenses/handheld/sentry/omni
/obj/item/defenses/handheld/sentry/dmr
name = "handheld UA 725-D sniper sentry"
@@ -143,6 +146,12 @@
defense_type = /obj/structure/machinery/defenses/sentry/mini
deployment_time = 0.75 SECONDS
+/obj/item/defenses/handheld/sentry/omni
+ name = "handheld UA 571-D omnidirectional sentry gun"
+ icon = 'icons/obj/structures/machinery/defenses/sentry.dmi'
+ icon_state = "Normal uac_sentry_handheld"
+ defense_type = /obj/structure/machinery/defenses/sentry/omni
+
/obj/item/defenses/handheld/sentry/wy
name = "handheld WY 202-GMA1 smart sentry"
desc = "A compact version of the Weyland-Yutani defenses. Designed for deployment in the field."
diff --git a/code/modules/defenses/sentry.dm b/code/modules/defenses/sentry.dm
index 8ad4cd407e75..6c9c5ad68fea 100644
--- a/code/modules/defenses/sentry.dm
+++ b/code/modules/defenses/sentry.dm
@@ -223,7 +223,7 @@
if(istype(O, ammo))
var/obj/item/ammo_magazine/M = O
- if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI) || user.action_busy)
+ if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED) || user.action_busy)
return
if(ammo.current_rounds)
@@ -900,5 +900,11 @@
omni_directional = TRUE
handheld_type = /obj/item/defenses/handheld/sentry/upp/light
+/obj/structure/machinery/defenses/sentry/omni
+ name = "\improper UA 571-D omnidirectional sentry gun"
+ omni_directional = TRUE
+ damage_mult = 0.7
+ sentry_range = 4
+
#undef SENTRY_FIREANGLE
#undef SENTRY_RANGE
diff --git a/code/modules/defenses/sentry_computer.dm b/code/modules/defenses/sentry_computer.dm
index 639a74e6ba30..3c278a6c06b2 100644
--- a/code/modules/defenses/sentry_computer.dm
+++ b/code/modules/defenses/sentry_computer.dm
@@ -308,7 +308,7 @@
. = ..()
if(!on)
return UI_CLOSE
- if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI))
+ if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED))
return UI_UPDATE
@@ -383,7 +383,7 @@
. = ..()
if(.)
return
- if(!skillcheck(usr, SKILL_ENGINEER, SKILL_ENGINEER_ENGI))
+ if(!skillcheck(usr, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED))
to_chat(usr, SPAN_WARNING("You are not authorised to configure the sentry."))
return
if(params["index"])
diff --git a/code/modules/desert_dam/motion_sensor/sensortower.dm b/code/modules/desert_dam/motion_sensor/sensortower.dm
index a3f33d4da078..41859167458f 100644
--- a/code/modules/desert_dam/motion_sensor/sensortower.dm
+++ b/code/modules/desert_dam/motion_sensor/sensortower.dm
@@ -101,7 +101,7 @@
add_fingerprint(user)
- if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI))
+ if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED))
to_chat(user, SPAN_WARNING("You have no clue how this thing works..."))
return FALSE
@@ -135,7 +135,7 @@
to_chat(user, SPAN_WARNING("You need a stronger blowtorch!"))
return
if(buildstate == SENSORTOWER_BUILDSTATE_BLOWTORCH && !is_on)
- if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI))
+ if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED))
to_chat(user, SPAN_WARNING("You have no clue how to repair this thing."))
return FALSE
var/obj/item/tool/weldingtool/WT = O
@@ -159,7 +159,7 @@
else if(HAS_TRAIT(O, TRAIT_TOOL_WIRECUTTERS))
if(buildstate == SENSORTOWER_BUILDSTATE_WIRECUTTERS && !is_on)
- if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI))
+ if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED))
to_chat(user, SPAN_WARNING("You have no clue how to repair this thing."))
return FALSE
playsound(loc, 'sound/items/Wirecutter.ogg', 25, 1)
@@ -176,7 +176,7 @@
return TRUE
else if(HAS_TRAIT(O, TRAIT_TOOL_WRENCH))
if(buildstate == SENSORTOWER_BUILDSTATE_WRENCH && !is_on)
- if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI))
+ if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED))
to_chat(user, SPAN_WARNING("You have no clue how to repair this thing."))
return FALSE
playsound(loc, 'sound/items/Ratchet.ogg', 25, 1)
diff --git a/code/modules/mob/living/carbon/human/inventory.dm b/code/modules/mob/living/carbon/human/inventory.dm
index 3f419333d218..dec4a7f3fbe0 100644
--- a/code/modules/mob/living/carbon/human/inventory.dm
+++ b/code/modules/mob/living/carbon/human/inventory.dm
@@ -412,6 +412,8 @@
/mob/living/carbon/human/get_item_by_slot(slot_id)
switch(slot_id)
+ if(WEAR_ACCESSORY)
+ return w_uniform.accessories
if(WEAR_BACK)
return back
if(WEAR_FACE)
diff --git a/code/modules/mob/mob_helpers.dm b/code/modules/mob/mob_helpers.dm
index 37a6c46c23cc..058f8ae4aabc 100644
--- a/code/modules/mob/mob_helpers.dm
+++ b/code/modules/mob/mob_helpers.dm
@@ -420,8 +420,10 @@ GLOBAL_LIST_INIT(limb_types_by_name, list(
if(skillcheck(src, SKILL_ENGINEER, SKILL_ENGINEER_MASTER))
return DURATION_MULTIPLIER_TIER_3
else if(skillcheck(src, SKILL_ENGINEER, SKILL_ENGINEER_ENGI))
- return DURATION_MULTIPLIER_TIER_2
+ return (DURATION_MULTIPLIER_TIER_3 + DURATION_MULTIPLIER_TIER_2) / 2
else if(skillcheck(src, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED))
+ return DURATION_MULTIPLIER_TIER_2
+ else if(skillcheck(src, SKILL_ENGINEER, SKILL_ENGINEER_NOVICE))
return DURATION_MULTIPLIER_TIER_1
// Construction
if(SKILL_CONSTRUCTION)
diff --git a/code/modules/power/apc.dm b/code/modules/power/apc.dm
index 6c1c234eaadd..7183ce8bf660 100644
--- a/code/modules/power/apc.dm
+++ b/code/modules/power/apc.dm
@@ -373,7 +373,7 @@ GLOBAL_LIST_INIT(apc_wire_descriptions, list(
. = list(desc)
if(stat & BROKEN)
- . += SPAN_INFO("It appears to be completely broken. It's hard to see what else is wrong with it.")
+ . += SPAN_INFO("It appears to be completely broken. Bash it open with any tool.")
return
if(opened)
if(has_electronics && terminal)
@@ -559,7 +559,7 @@ GLOBAL_LIST_INIT(apc_wire_descriptions, list(
if(HAS_TRAIT(W, TRAIT_TOOL_CROWBAR) && opened)
if(has_electronics == 1)
if(user.action_busy) return
- if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI))
+ if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED))
to_chat(user, SPAN_WARNING("You have no idea how to deconstruct [src]."))
return
if(terminal)
@@ -591,7 +591,7 @@ GLOBAL_LIST_INIT(apc_wire_descriptions, list(
opened = APC_COVER_OPEN
update_icon()
else if(istype(W, /obj/item/cell) && opened) //Trying to put a cell inside
- if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI))
+ if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED))
to_chat(user, SPAN_WARNING("You have no idea how to fit [W] into [src]."))
return
if(cell)
@@ -609,7 +609,7 @@ GLOBAL_LIST_INIT(apc_wire_descriptions, list(
update_icon()
else if(HAS_TRAIT(W, TRAIT_TOOL_SCREWDRIVER)) //Haxing
if(opened)
- if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI))
+ if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED))
to_chat(user, SPAN_WARNING("\The [src]'s wiring confuses you."))
return
if(cell)
@@ -643,7 +643,7 @@ GLOBAL_LIST_INIT(apc_wire_descriptions, list(
tgui_interact(user) //then close them and open up the new ones (wires/panel)
else if(istype(W, /obj/item/card/id)) //Trying to unlock the interface with an ID card
- if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI))
+ if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED))
to_chat(user, SPAN_WARNING("You're not sure where to swipe \the [W] on [src]."))
return
if(opened)
@@ -661,7 +661,7 @@ GLOBAL_LIST_INIT(apc_wire_descriptions, list(
else
to_chat(user, SPAN_WARNING("Access denied."))
else if(iswire(W) && !terminal && opened && has_electronics != 2)
- if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI))
+ if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED))
to_chat(user, SPAN_WARNING("You have no idea what to do with [src]."))
return
if(loc:intact_tile)
@@ -688,7 +688,7 @@ GLOBAL_LIST_INIT(apc_wire_descriptions, list(
make_terminal()
terminal.connect_to_network()
else if(HAS_TRAIT(W, TRAIT_TOOL_WIRECUTTERS) && terminal && opened && has_electronics != 2)
- if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI))
+ if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED))
to_chat(user, SPAN_WARNING("You have no idea what to do with [W]."))
return
if(loc:intact_tile)
@@ -712,7 +712,7 @@ GLOBAL_LIST_INIT(apc_wire_descriptions, list(
qdel(terminal)
terminal = null
else if(istype(W, /obj/item/circuitboard/apc) && opened && has_electronics == 0 && !(stat & BROKEN))
- if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI))
+ if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED))
to_chat(user, SPAN_WARNING("You have no idea what to do with [W]."))
return
user.visible_message(SPAN_NOTICE("[user] starts inserting the power control board into [src]."),
@@ -724,7 +724,7 @@ GLOBAL_LIST_INIT(apc_wire_descriptions, list(
SPAN_NOTICE("You insert the power control board into [src]."))
qdel(W)
else if(istype(W, /obj/item/circuitboard/apc) && opened && has_electronics == 0 && (stat & BROKEN))
- if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI))
+ if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED))
to_chat(user, SPAN_WARNING("You have no idea what to do with [W]."))
return
to_chat(user, SPAN_WARNING("You cannot put the board inside, the frame is damaged."))
@@ -733,7 +733,7 @@ GLOBAL_LIST_INIT(apc_wire_descriptions, list(
if(!HAS_TRAIT(W, TRAIT_TOOL_BLOWTORCH))
to_chat(user, SPAN_WARNING("You need a stronger blowtorch!"))
return
- if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI))
+ if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED))
to_chat(user, SPAN_WARNING("You have no idea what to do with [W]."))
return
var/obj/item/tool/weldingtool/WT = W
@@ -750,7 +750,7 @@ GLOBAL_LIST_INIT(apc_wire_descriptions, list(
deconstruct()
return
else if(istype(W, /obj/item/frame/apc) && opened && (stat & BROKEN))
- if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI))
+ if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED))
to_chat(user, SPAN_WARNING("You have no idea what to do with [W]."))
return
if(has_electronics)
@@ -908,7 +908,7 @@ GLOBAL_LIST_INIT(apc_wire_descriptions, list(
if(usr == user && opened && (!isRemoteControlling(user)))
if(cell)
- if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI))
+ if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED))
to_chat(user, SPAN_WARNING("You have no idea how to remove the power cell from [src]."))
return
user.put_in_hands(cell)
@@ -1043,7 +1043,7 @@ GLOBAL_LIST_INIT(apc_wire_descriptions, list(
else if(prob(H.getBrainLoss()))
to_chat(user, SPAN_WARNING("You momentarily forget how to use [src]."))
return 0
- if(!skillcheck(H, SKILL_ENGINEER, SKILL_ENGINEER_ENGI))
+ if(!skillcheck(H, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED))
to_chat(H, SPAN_WARNING("You don't know how to use \the [src]'s interface."))
return
return 1
diff --git a/code/modules/projectiles/gun_helpers.dm b/code/modules/projectiles/gun_helpers.dm
index efc7abf3aa20..51a5988f2fd0 100644
--- a/code/modules/projectiles/gun_helpers.dm
+++ b/code/modules/projectiles/gun_helpers.dm
@@ -536,6 +536,33 @@ DEFINES in setup.dm, referenced here.
var/obj/item/active_hand = get_active_hand()
if(active_hand)
+ if(active_hand.preferred_storage)
+ for(var/storage in active_hand.preferred_storage)
+ var/list/items_in_slot
+ if(islist(get_item_by_slot(active_hand.preferred_storage[storage])))
+ items_in_slot = get_item_by_slot(active_hand.preferred_storage[storage])
+ else
+ items_in_slot = list(get_item_by_slot(active_hand.preferred_storage[storage]))
+
+ for(var/item_in_slot in items_in_slot)
+ if(istype(item_in_slot, storage))
+ var/slot = active_hand.preferred_storage[storage]
+ switch(slot)
+ if(WEAR_ACCESSORY)
+ slot = WEAR_IN_ACCESSORY
+ if(WEAR_WAIST)
+ slot = WEAR_IN_BELT
+ if(WEAR_BACK)
+ slot = WEAR_IN_BACK
+ if(WEAR_J_STORE)
+ slot = WEAR_IN_J_STORE
+ if(WEAR_HEAD)
+ slot = WEAR_IN_HELMET
+ if(WEAR_FEET)
+ slot = WEAR_IN_SHOES
+
+ if(equip_to_slot_if_possible(active_hand, slot, ignore_delay = TRUE, del_on_fail = FALSE, disable_warning = TRUE, redraw_mob = TRUE))
+ return TRUE
if(w_uniform)
for(var/obj/accessory in w_uniform.accessories)
var/obj/item/storage/internal/accessory/holster/holster = accessory
diff --git a/code/modules/projectiles/guns/smgs.dm b/code/modules/projectiles/guns/smgs.dm
index 466a09612c54..6d125e6915c3 100644
--- a/code/modules/projectiles/guns/smgs.dm
+++ b/code/modules/projectiles/guns/smgs.dm
@@ -665,6 +665,7 @@
start_automatic = FALSE
var/nailing_speed = 2 SECONDS //Time to apply a sheet for patching. Also haha name. Try to keep sync with soundbyte duration
var/repair_sound = 'sound/weapons/nailgun_repair_long.ogg'
+ var/material_per_repair = 1
/obj/item/weapon/gun/smg/nailgun/set_gun_config_values()
..()
@@ -689,9 +690,16 @@
icon_state = "cnailgun"
item_state = "nailgun"
w_class = SIZE_SMALL
+ flags_gun_features = GUN_AUTO_EJECTOR|GUN_CAN_POINTBLANK|GUN_NO_DESCRIPTION
/obj/item/weapon/gun/smg/nailgun/compact/able_to_fire(mob/living/user)
. = ..()
- if(.)
- click_empty(user)
return FALSE
+
+/obj/item/weapon/gun/smg/nailgun/compact/tactical
+ name = "tactical compact nailgun"
+ desc = "A carpentry tool, used to drive nails into tough surfaces. This one is military grade, it's olive drab and tacticool. Cannot fire nails as a projectile."
+ icon_state = "tnailgun"
+ item_state = "tnailgun"
+ w_class = SIZE_SMALL
+ material_per_repair = 2
diff --git a/code/modules/projectiles/magazines/specialist.dm b/code/modules/projectiles/magazines/specialist.dm
index 547d231e1c69..38b9137be54f 100644
--- a/code/modules/projectiles/magazines/specialist.dm
+++ b/code/modules/projectiles/magazines/specialist.dm
@@ -265,7 +265,7 @@
. += SPAN_NOTICE("Contains a warhead.")
/obj/item/ammo_magazine/rocket/custom/attackby(obj/item/W as obj, mob/user as mob)
- if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI))
+ if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED))
to_chat(user, SPAN_WARNING("You do not know how to tinker with [name]."))
return
if(current_rounds <= 0)
diff --git a/code/modules/reagents/chemistry_machinery/chem_master.dm b/code/modules/reagents/chemistry_machinery/chem_master.dm
index 6f6d45b6712e..2394146918a9 100644
--- a/code/modules/reagents/chemistry_machinery/chem_master.dm
+++ b/code/modules/reagents/chemistry_machinery/chem_master.dm
@@ -434,7 +434,7 @@
icon_state = "industry_mixer0"
base_state = "industry_mixer"
req_skill = SKILL_ENGINEER
- req_skill_level = SKILL_ENGINEER_ENGI
+ req_skill_level = SKILL_ENGINEER_TRAINED
pill_maker = FALSE
vial_maker = TRUE
max_pill_count = 0
diff --git a/code/modules/vehicles/hardpoints/hardpoint.dm b/code/modules/vehicles/hardpoints/hardpoint.dm
index f94d0dc6b373..f0b519759727 100644
--- a/code/modules/vehicles/hardpoints/hardpoint.dm
+++ b/code/modules/vehicles/hardpoints/hardpoint.dm
@@ -336,7 +336,7 @@
. = ..()
if(health <= 0)
. += "It's busted!"
- else if(isobserver(user) || (ishuman(user) && (skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED) || skillcheck(user, SKILL_VEHICLE, SKILL_VEHICLE_CREWMAN))))
+ else if(isobserver(user) || (ishuman(user) && (skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_NOVICE) || skillcheck(user, SKILL_VEHICLE, SKILL_VEHICLE_CREWMAN))))
. += "It's at [round(get_integrity_percent(), 1)]% integrity!"
//reloading hardpoint - take mag from backup clips and replace current ammo with it. Will change in future. Called via weapons loader
diff --git a/code/modules/vehicles/hardpoints/holder/holder.dm b/code/modules/vehicles/hardpoints/holder/holder.dm
index df91cbc51b65..948142383cca 100644
--- a/code/modules/vehicles/hardpoints/holder/holder.dm
+++ b/code/modules/vehicles/hardpoints/holder/holder.dm
@@ -23,7 +23,7 @@
. = ..()
if(health <= 0)
. += "It's busted!"
- else if(isobserver(user) || (ishuman(user) && (skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED) || skillcheck(user, SKILL_VEHICLE, SKILL_VEHICLE_CREWMAN))))
+ else if(isobserver(user) || (ishuman(user) && (skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_NOVICE) || skillcheck(user, SKILL_VEHICLE, SKILL_VEHICLE_CREWMAN))))
. += "It's at [round(get_integrity_percent(), 1)]% integrity!"
for(var/obj/item/hardpoint/H in hardpoints)
. += "There is \a [H] module installed on [src]."
@@ -100,7 +100,7 @@
/obj/item/hardpoint/holder/attackby(obj/item/O, mob/user)
if(HAS_TRAIT(O, TRAIT_TOOL_CROWBAR))
- if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI))
+ if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED))
to_chat(user, SPAN_WARNING("You don't know what to do with \the [O] on \the [src]."))
return
@@ -113,7 +113,7 @@
return
if(istype(O, /obj/item/hardpoint))
- if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI))
+ if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED))
to_chat(user, SPAN_WARNING("You don't know what to do with \the [O] on \the [src]."))
return
diff --git a/code/modules/vehicles/multitile/multitile_hardpoints.dm b/code/modules/vehicles/multitile/multitile_hardpoints.dm
index b94b8459890f..5d1612852f8c 100644
--- a/code/modules/vehicles/multitile/multitile_hardpoints.dm
+++ b/code/modules/vehicles/multitile/multitile_hardpoints.dm
@@ -63,7 +63,7 @@
//Putting on hardpoints
//Similar to repairing stuff, down to the time delay
/obj/vehicle/multitile/proc/install_hardpoint(obj/item/O, mob/user)
- if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI))
+ if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED))
to_chat(user, SPAN_WARNING("You don't know what to do with [O] on \the [src]."))
return
@@ -132,7 +132,7 @@
//User-orientated proc for taking of hardpoints
//Again, similar to the above ones
/obj/vehicle/multitile/proc/uninstall_hardpoint(obj/item/O, mob/user)
- if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI))
+ if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED))
to_chat(user, SPAN_WARNING("You don't know what to do with \the [O] on \the [src]."))
return
diff --git a/icons/mob/humans/onmob/items_lefthand_1.dmi b/icons/mob/humans/onmob/items_lefthand_1.dmi
index cb80cb6cc10c19569c5e5f6a4c4ecf25750665de..45a3b51ecdf24d485d6595736fceb71ffbf8c23b 100644
GIT binary patch
literal 115379
zcmc$_2T)T{)GmqzQBY735NS$P5F)*UjS{N#UZi)VccLgF(m{HYE*+$IK_Jq53%z#&
z2@nDyc_-+9-+k}?b7$_nckh2@ICHYw*=OywzO~l3H^Fa|WNr~ZASNInxCNGdtx7;}
z)fo7De*GFyl99=hPC#(&vbVan>uYltQ)laUuGWqY1O%QbsY&u`)3Udr1N%?ZyIA6P
zOmvLTetp=NRp}^vD7=zw1Gcx0T#HJKYFZnCzX*sdE<2|Z{BgQjN`GYP?Tz6^J7bR!
ztilb=GxKF+-AOA#U09LH`RM|7fi5Q=WfbaxrW<(>ea&ofxt-5iZiAu1J%y>;#_afXyPOnXc-
zeKh-tXgp1U=ADGqb4*3N*0wW^k_}`@`jor9_gW99G3WS8jLki4t&M|N1=v)9SXiDm0PEw%<@b6La%^ribUJX9;(2
z(*41ND=39S;8hc_j!A@HE~Db$5GmnYwcC?YLCG@Nw04I2>f;{$<&Q0
zh9sk(hs@?toH>2D-7=;8^~;rrRaMLTgg*!sB}6DPcXP|$J7>R7(Rlo9C4wcAO#U%V
z+~$J-f?|lPfaOZgmB%e{j8wn;pGT3H$vk`$`A$mv?!;3W9w9D@E~gU)`UA8tx1RAm
zbsExunZ?bWhw5K+ll$Lq&E)d_5CLgkzw#KZuxIG|+4W_f78QK^Nf*=keXpWACdr`D
zwePS;+3sI{@HYi_k2*T}q}6n*Lwv8jDNV3hFy=EJg!NDleo_&Bby_y43%|!hK=Xom
z$)VK2(Z7*n!;@)3VD1f9I)m4%I(=5pS6&3dUW*?ebUx~^t|Yy&=-r&q<%f9xLXqRP
z38~GYf>B;wR3El
z{Xd!_ZpEYsf|$RU|@&C*G5cht)74M)E3*z>(T1JP_J4q^FFy+=AGGvv(2
zSM#NWXBnfdxx3Rs?;I?snZg1ae_eX@bXwT(&-$NBACFch9|)_f(BHmw|3|!u_mhH}
zZ$aEwu5HnEArmfLIsA6xp7-rnHh;3%vOzwFSC7mk89bgp$NA2@IMDYIP14SZhUUeDHnmRO7B&4W}ZWBQ(~!^d^y%Kk_5%
z=o@0^NMzuZ=%*9$WblaK--KQ68@~x3#cePdKX~`4(medzrqG`z1n-w@9nyY+v=`Yg
zUh&K8$DCTNqA8As7|DyAADw0EKa{v3?tF>XJE-p`@5*JuF6LJSue?{HURCp|^DHH0
zc%)TH%{5mA9y!Z~(SG-I!yc_1LfePS^tYbYr25v?I|hxsOw4k|TpjJ*QT_a%-vwoMOC<@uY6|HtZSW@a1bsN0W?<9m
zI_f%K?L+%aKiY~ayt-xnJHHe;Y@@&lD*h}qiy-|r%Gq=0m0zmXgRaV`Z*Tnlf;tDLb=1zUpIjxC6Lm0OO6@ve&N$
zJUqDkb@lElqtu%_!5!XWwD~pFhQw8d;S|O6RbQ*2>ErU7PsRg|oC|*ZIQm}wFf%~2
zZsWanZ04;A*@w(m6(S$L7>7rc1$9OC=pQFd@uC}zKt_*ZdMhTp$BTr{600WMd-<3E
zw**|1F4{k7{ys+T!G8Ee4aL1@0=GguKsL2cJI}rNX6}b|kV1Ni_B@NUUdCTOKV?hy
z9df+rVQiGl3c0JxY~4OFa++MoRj&r|-lMNdudY8ZdFk28@-5;ksN^+;)Lny}OBWrw
zG>qO`XZ{)f=0G8Av0W**E(}gO{&)&^;YbFxeL}oF=%CQ0Jt%l+%EWrnUY72NFo9CD
z;ge0#lBfz%`fc;ObwoGg882ox=*`!3Irom9
z3kRJCa`qkmQ|wdYk~*j^x)LO3vj37*J+m%Mm3qrzP_MC)aD30`Z`A`gZN8S7Vn(Pe
zkye}jAsV^1ZGHZ+<34KrZ@tjtE&0e9NKJaRh$qcfr~e$R)oY)GqUig(`RaQPj?bY6;a)-jOPyFv{tJOW*l}ZOHEPMKInZAdvms+p-sv>q+a{{h`+Cmt4v63MIIaJ!8y6}ks2r{=H7g*Er0l99Tkd9kZJU^zg^r9A6O_c=w?&U0TnJMjZ
zAbUSLYrm)=xf_T%7sL1LLTNfEKM+F`MQK}Tn=E<i~g8SVy@NjW6VUSXYE0*l-;%8V*nk~g$>T=v~d?_1ElBDsoD-Yw;cnYf9P
z($ghrS;1(7CyZE9CHojkJH{8Z!CH!SZGys(tt!Ul#?6T8N=pC!Ivo|}QcW|w412#a
zf?npZfLwM1C%DAr=KVM9%U7n!P@7fq5ePnu`gfnNM$dlwo`GC1R8`GcnF>ZUW*}(=
zbM@?=i_@UPp%@r?*b1E0L213jN%P}_%uF0KNVRKpSsaB*pT4pfF%roS$;YTY8
z0Q3Dwk-piPe*TNf-kK8=joi+oUdKp+2bAgV_ONqtg6r(wZKr9lAL*PHm
zXx&%$*EEX35Gv0m(cL$*B(mOhH;d$R6|$1RqqWT4`)B(}!Qcu}se$*m-mAj?-SYi>
zn<)CyUd%b)@`?hI$KPHDs!s#ZTszu)r|?;GcXA;OUFSzhL02V^w;mzpr+h3!E2Na1P?X)
zD2?UZ?VX8veW*QH9y0Z=i;432iTOHVuX
z>=NR@X_Zk3j!pG?@%baiEX2K`D8A#}R!x`*hXZ>>D$Jw&vP2}AcKe;-bzfTFR~uv4tLw@xy-@kiMANgwLq>hw
z@>ryHQL}4^%iI9{2*>#~9crA`=`F;+nrFbYl#%HN%3_jXEj^l1pO$(u)+i^?TL^M+
zeYr(^?D6E+vNZw|rT%FQeFiZXGtqZ)wa1>kyP!E4)QjLwTZTj9&
zee99*RV)5RIf4*h{C=FX;BxQyjGRmZsc+2mp=o|^=iJjB)Mb3-^KD9}OSyVd;lXBZ
z^4TrxGDYft-zo5p#s=SjfS`wQ?o*APl+x?iBv}aAMbY;vW5T~LeQ!SV`N2imFCJn5
ztMONy%D;J+h5nn`d-Hq77gYpLvj_nA11@7~!ux-VdLIA!`=Bj->7TFq|2mYI(*(9b
zfiXSat{Rrwjs8--TP_9#W!n4DfXJ{5mVvn*@zv4Ux292Bx#aS+lAQ`vOjuX#ci+iG
z6};hJ&%u4SmeaNUX&?l}6GeL!y$h`$S->1xC8H~xG0RvVGbW4rhk^u{t&($(L|$l0
zP6Oqv`JTki-WQxe$7!Qk#n_&Dzf9wRG79Uh`+oD?IB4|j7fnDggag6sB$%qbbhZE1
zeQ<$pohoceYV>e_*$Auhk%&xFMJ39$CK~(lJa_%A$j+yi;9*5Q!y`M4(Vl-=RJP-I
z(E+0wOb8`OJO=+n?%KMd<;RUB&@JUu%iY+&f=d(Y^F*Mm5OH1oGI>JMBKs{^>zJnN
z$&_|0Gz5)^@k~LAUGU*-(CqF^)nk6G=k3GuaoNri%pC&QC-s-5zm~M5Q5x$@(Nh?`
zT&|P4&(~(jHc#cL?t3F_o$~GAb%s#f+6QQ2Z;1?13tZbHw9?7~v-^Oz!#B2^>twgY
zo@UH+j0y~QBnhii0kRnh`1joX_7^Xhjfc+wHPWT{;gVCvG0}VVoL^1
z3lf5{nlC2pEDKhCb)3k27B?nnUxjW%?3k^$VZ#fi$sSLKmu`hq*O=)m1Xef!mfS%@
zTj2%GTrhR;MR^uSh3Wg4?=#R9LTl(G$4)pIW-a^GgNCw-+xMP%SJn@tShKhn{7iH#
zz3G+vFn7YLXuwuc^^r_yi@1M(lonfGzB3~1^L^YOPu=&4jpjcqoLA*QudX?TAv5gO
zL@8@LFm33(oSskEI*Tv|_+-77#HWfxxYf$~`gYVRdDUw1z|rE&*y+1Hn^`P`=@8f5
zKOS(0#Nkg>r~S4
z?**&CfAg)BU#?ghR$VV8!DU!WQvYb_yl)9JEp$cY9I+*rcY-Z}nV&4z+y3D_TE;EL
ziPs|!_mYed8lz51n?pLN#tK7Kzxh3}rU;3dpL5%5xqOmqf5yKCx*FYx;sU-#d+N%y
z=i8>Hgq=+?Guu|5CREgnc(fY$ELN4ncuyk2>(IYYWWL(Cgn5%(66Y(D#CDUV_-Q{Ur7XM8ZI%TpChUacPV>VR>z+2G)yggSvA=-H)pk*p5S>vU3{yj&dstr
zyatgpC&50}q1*Vcp@@%@K8GE$UkvbBOwCwn)8B0WjI3rS*bCG2C8qz+ok-XPsy%eb
zID6CX@^V8X#dQrz%Z&|w75;uy>c8Qf!>hk2{=XFs3I6{B*8g-UDfRbtwm5?|01m0A
z!vOd3WgI|Fg@u{-v8X2>T&`GXqI4RGh~M(g6A)zcLKSS$xb%#U_y)3u>2g@6Q16yR
z&rNzU?dVFt{uJkUg!igpUlO@6aWtKh<^Runa^_z6klB-WH3yA!QXaz671_Ti;ih@)
z$>?xGj{|&4&)fhZyNWy
zA`X6En1wB|f+&R*toufEq~bW#RhsMgX2pKg
z-jPsYkw3OnyZj|D+rFf6e6cUIV55qH_4W_Ph`qQV2+o{2|A$rJW%B5G<(4ww4HRx3
z3dZ9KU7fUk_Hj>=!~!oXTrWh2OX)-ntz5xjZGSZg_?7;^Dk7eO(e#~)ZonI}GOz63
zxOu}9i)yiwisF+eeujN94iulw;lk?N7CGx3ch2jNDvdnH>Gc56fFq&!}{@o4JWs#BL>T6|IU&tHB~h?O%b88}FBWch7a1
z9t`2nIhO_f&K1)`hsUZ_szQw#dypo-RxpqH52)bLYL&x1Wlsh)n@u&;4-;r9yl@u#
z4#MGI)q!7mZ`D$(e4#(AR__Ua(9tvz{h-6HE8HQsqi)VSUw)FWmhIs#zT(HdPPbum@y8L-E{HlTeCjy1bFd)nSa^Uz&x7pNnyG^h103zsRc(WGxLLnNQM~s7k
zXUJa{0=07!Erj5z>QnRH=I~8_LbX0g-#8rMEpC@MKU5GGS|#TwSBvfQg_^8Qz&Gbs
z2Xuq|;0Q~89{zi1%63h9l(OerM(GXB?|@%BmZ=U!s%U~x0e=O2D4
z|7#ucYa#JLCWWR6*$^?|wSmgJq8d}Z9#64Wmqo-~3SuYoES1I>!XSp*{>H%9UQc+R
zt7|hb+M5q7*saN4kD~BBl&)NdqFZyfJWe;&AGWFaG99?9;&ca=b2TnW7qlomj$O(X
zX<1zjQ=U`Kug&jw^wKGB>%Z}#76w4JHx7Z
z9CNC7Sn5Ka;c{NdX#fx~Z#|GN9DUjm=1KN1)@okhvY4*pD*NXvDGJ7XzE@aJ6XNtZ4dllJJj~?CIN=z#fG-r
z^53#_`G1XCSw0%~DWTCMjxQTKFQs=`$ytx7?*Wh0hexkgtO9%IL)mumA;|JQ;ZCbB
z{#!+ZD=kXLjCQ*Cyig%cOsYa%QX&Q?Fj8@luE7Vu(n_Yz@N8&Hk96}gw_QJoe{iSl
zuFq#3bC!~c&wc0|zKzUJbUlETmLs
zyNAHij>BRn?Um0)<@8HA#datSvfD#j@RoD_QFLs(&|lL81+!u+nHZO>RTBX@L4U@=
zwe|H~qSUR{t8ng%dcdH&OG&T${2S2W9Xg#>E45Cl#i;W1pZ6wgEfd@QNNoU%xL@Ot
z+IhG|G3KJ`O&F?KGa}kRAB|1IEQK&zf6WJ7o7uJJ{xxGyE5nif1dNNEH+s4%s#&2a
z8^bRj13#|5{|vpC*l*T1Tts0gt>}lxV)GdP9REDWn&CLx)DHq}-VRgQMl6TgKvjrR
zghYW)uBM*#z*%032~*L!i1?}1%LsE0U>*%P|31ma89AThW=M2cSsG0P4*Q87FRY>U
zTqSSBPijqA#pVVCc73}}LeNcaqug#)lybmAoGk{#u`8UlqCoRj9A!7|azi{0K>Q^|
zsLG37P*LSNl!S5;=p&fgek%wsy;g4M4?Q?rmW{FvmGSAs*5QbfvO5Q9(&nF9d1o;T
zzSjt-S1v@m*Q3{t0{pm{FT4?-2g%+6vdFeV_U^A+H0kgNif2;uE}_hX*sb%gH?F8A>B3L&)wYKPs%rWKD2!DgZ%hSYYL
zZ&b;<2WpbZzX78S7K=+qwBfB+a@moiI;_^v6hn=BP2Z#J^%g@7;6hcWb^CcRkHc&|poPj_!ujhpr=>kXfdBD>t>R59J8hozuUf~1H*0C(-o;$t&Te)V
zTydiu^DX|jqlgUK04DKo@qThY_@X#aO6qinO|ty%v?gHJPuT%Y1{(WlrDWtuG|XMh
z(H;Jk_pbL-$<@_BFv-#BE~Mt7anm#Fw=W}B^BQT-+%x?5kC{2j?K_TO<&IRqL;(5<
zN+vP*C5)!Hy_#aemQM2IVFvW8Am|R2G1t^eI(gXIQ=zqlPxOU=@~3{HD$3en%bF%K(rOv00jyXu
z7t<=OJ>Yk?u>H5r#O~quzXl#0A#MQ}c;~gt|9VwFaQ3$lx60DJf`((^kAaLbmB3fKVzW&esoXj{Qe1cFe4o&CAw}JYR5V7DbMG
zQdiCO)y$XxjxP72!Gn6rURMX4~?H)m5F~RE4yX_nTst;YyHmH-J%?`np}!
z@3M9Q2J*Xc=3A;YZ5QUJ*!cTUrn_4Wk-xB23Jy)Hwof;bp1lpQ
z?0D}JQ9I#eTHkSPv;v3<>@c1mq$!LFR663lHE$-w`(-S5x`y2PVaYUqpk3ya#YM+2
z7a#s$Rfl__?Z2bNkLA+yP7`LUs_Ltb#}g#0!q@A%mZVykoNRZCEj;XtPsPTd@xmq;
zz4?>Uv`QHIa70-=BDti4s%!bO!dNzVYy1q%fn)MqPjRvPbfgcI{588w1Jqj)+g-<^
zN=u*4+kl6hC^;+p=T=L$an?(pAv)FrH8NNjV0Bg7r;xwhmSMXS-Y`~x_NHlBT_2h?
z6|;|+I2aC_NATuOXQfp`w>>vIBhZPi3x4|{pyvB7p;Sh`Lt1PJQQElWqwsr1Eli7@
z>EC`K!>pcRi(N2UK8=h}&Sux`IRm|(o~E0-BzA2i1Yf3Q82r8sAE*K2s+@MUeG5;w
z!Nf%b=HxuV6Gy@frA?;=Y2I5;cIR7+{BSdZTQM8WkUiUD_&kGHh9b+sq3B%)2YiF3
z(NH%{wv`
z<$VPlj{m#Gz#F1zKx7aAxMOPExF}Z3z%6#KZk?W^91h$K+{QFCO)j$8jz97YqdR91
zGnQlEo*fl0VRb=e!L`MNoU{G;ru(mHOD2iyk%iO#<+$LUegf82$cnFSsN{%(wp`Jb+1R1pbAJg;7kvY&3^~BidaD)
zW##I3U6@rGF2U8+)uilUV{?z*>_5f99)30TRY1XgLCRjgMn8}01uGIsv_
z5=#=rQ^2SNuMm-{J2;e7+f8K(*l)opD&2Z0o5a1NN>Ayx+6K7zhK}R^(a2x4aex6%
zmYZs*sNC_jn{W2B8OaTEc5$hCx7hZB_?g2~!Otu3%e@`xMs~-$(`?|axh9|XbMt@M
z&+XW+Ux`=O)~>a9kgy%RGxe>oRGulf3(0Bu$4)YM!c)p%ZaG
zbwWXSKbr#Bt{ql6K2*R~
z19Hk1B7P=IlHnngd40tD+<6{E?US9lvzf>$TKb+*f#lCMQcWQOg1=`0fPIDi27xXI
zf`wQkoLS5=r4g{{9uKaWRzmrS&Ff>bIF1ShTI34-y`J2@z7a3g!WZ1Hg3=+h=vf)o
z6y)mK@v!Ye+uMdHx*L9Q{}$iP*|t;rRtts_rL0D}tkGQQdnJf_V{X3MJuqOqU-9#&
zvpAp6hdB|S*mbA`GVDXA^o({Yy7M{jQM6Oo+Cxc6Wi^JA3QI3p&3--SUUKoilG&>0
z?A|QcW^%nBOw7E{vGegA@7^7Y@IO{rgJMMuOY$7TvVp#+gsHxhV#R&K3CWdYQXM+=
zx+c}=ZzC)+WBg;V+H4v-!opU-7;2i^fkOSnrC==pyKM#&sH(YiM0;{Qv3Z)?*QNkSjkgw(
z@%gxKf+{|3Y$@2xg_RUC*;sifyq@D6
zB??yg+9zt3a9O__c3a|*TC0E)E!q6$9ysES9^LzKTrhj?w!a;Y7+!$8_HR7|Zy5|~
zygFNxkCrB-`7ZAOd99^!*osROh^V2UbPmaL%*W(JRdYEcpewA}1+3jRCI^Y+%JIwkcuMOZ=ytwUiFMs-Uv6
zn)eN(6?hJ`XD$e6$1mrfw^ss|#X%@am#*E2lY&2^_iA>Bj)mh+dM4tmw^)|Vm;|9>
z69bi^1%4l)^tD^P3$|D^**FJgy{e&QoJ?tVWZ~#!!xr8-Do_(iAu_?(l~;_O*Y-*3
z`JgTda>S141z{TN(CNJ?@`zgXj)ZW-y#n
zj|B|dH&5i@;c8Ll+dm?i|=esI8MeV@Sb)_fap;mOFyw
zJd?M!wniKB&OAK7Gh6R9O5H--OKJcK*r@=kzFG~AZtShm`wph`h*bgxf$19>aUW$q
zk7Soh#gAlo+#oD&;m!-FR$4e(2f|<}U^jVxX!`YZ1mQ|63o=VD4HLveCy7@(GN`
zS>EsP$m}m`aBk&8z6_4RnE=_KBGRqdGpi=_EFt$gd!x9+K}TOywy_dpBCg4YffJ12
znfFh?1(};&)7p~lqiSB#y)*(*g18KW**eHCTdDAML=T!M{^WY$tSl|4fAn3c*GnMR
z{%rzemQOJX`bAU{452*Jb(CIag_q5*97tm
zU25i(ga^1l8HUL~eB)`tAzFkakJLcaRKA$58i^qdEllm(Ia1$Q^|?dnNmqZJ*342*
zN=M;gciuGLS$~MzbPthMB_G}@*4jw=hgnc!g-h@WNll|KUd$}V0>L>0QN(?HY27@E
z55(V)^%)K#$W3o!bsHVpx^5Y|NZvPq{M>A&&-qvioO=
z??^7~nKt>X+5V08|lwe>h29Q-?a*eN66ep0FiPoRdzNS_m?M#SzYcPtOBD-;3Jt0|mze
z-}#yCgKd~!(&2fzx8oH1`PSr}0wILFL4!q|bN$K>XP+EcO^72F^`~cS4MFT@(4Zx3
z;LPaVFX(ng>eZX-7(3081Mi$kc?DAg{DS>-f^mk~O4$eRB{Vwv-Vnxd2d>(PR;oTl
zw}2*dQw7yU`ij52CA{g|8lv$eiqgog=)IFxbEDfaJDZPp?qf@ccjD8)u05)n4t@x|yf`G$$C)IyqzO2~DVZ26`4FA+zt?O-g!nR;&@N-z(r|pb$
zjEbSqrr@I&@j&|MVU8DGO&%oUD&URUphk>EMdAIIBsXVayYk)5ln2DAxTr&6)x|n+
zCuUwvCwG3{d+HI}c}A%eihrw_-qhg3lEgr&Z3f}V+GG+gtcuOGDp?fALa60$0L)kf
zaD*l3^gk&LGpoCR5A7E6g=Dq30B}JU7e$R(skTo(t)cfp32)6T$_^Z}Iia-k3+Bj2
zSgr;tryIYF-}8A?shDx@E;%)4R8u%a{sLTZcKnRreJa2Ru^VWbwqZR(AslVOF8vAT
zUr_Wuiq!D)n%kYuurW7js%6S)yA@{4kv5yl8NYWEdafGe+T|Pl=Km>1~d}ZFkoGMog8Hl`MCKP8RjQqwO8=k
z191IXLzXLm!5bOLkRJ}a4Ybtxh
zb_4CF^ro~?{}#=$!BKaQhP&a5vfFPo)QZ_$DylMElSM4u2E%FGg$W7I)m38dh_z0t
z8)iIzczfjFl~xE455=pgkn6ZfHg2qrby=J4K6$*6M<=-BjPLe&*xs8*P)~z@Y%68#
zg^xS@4KVme44^3)Q^(Ar>xRVXII5Y`1iagt9;XyM4G!|L?jx*`p!5yP%d`SitkXFr
z6zv$k^<#U_N7se2RP|tpjTWIh
zFKL#x*r4k5;tDNc+tQ~lGZI1lxTP%RK>&7KXZ@6WXvetsE>ysM?#-sUL+L0G)K__R
zYeLVJRrk*f8f?deIbJ2o(C1d$hXUqbxeMD>0(^mnMiaCm=0l%awTQ-;&uF#%^q2Gz
zYwvI;l*WGj$=$hJ`w0gRJX}<-2HpcHb@0FcqE#!nl1f;mc^&Xyu?R
zjcR|zck_2Q7iiAr2o3o2;m`dY~n^SoLo}2=#+d!;rJ)a*`ZEr{}e}8~)
zB4QBT;y1-cq?OgaFDRTSOg1)oL;fTg1GvU(pb#f`Ke=}vDacKz45g7hbL?Z_dt#IVp5)(YCvs6y_b}&Rq~XL^(1hc!
zWa5r^z)X{6)|+TF(wWAr99TmOB&W!9h~YVLaozGq^6)c>GzQF^^rJteFVDpBSq9Gs
zPs75^NMt@4Mpy_(gaVDap~Q>9Swz*f0rqIvsh?s=1Kj%7p3&q2;!ex_xvYo~E^E^z
zyUk^}9|v@riaCiQri77QZ#wLZEA?O<9vT
z2-N@{82j`3VoKgPB+ta&0PIXa2#wHXMAC7f5D6*$QzB2Zl&Ts$3VzxI0U;mh)WfX!u_6y%4iiQTo0fM<+Tpl+Isg`8t7CTH(yHXW%&OGg&Vp
zg&7(Y(nAl&2-m|W;Fc1Z6=`)@t+P=V*@V|-soU%~+e5_snk}-vYHK*d;A30BymE8)
z$Mf*)fhdHn!%L`;I(ul0*4@;P>RnzZm{RPqo?9Qs;F_ClPIb7up_-elkEr#sIt-t56(eltgH|yW4xN$$PZE`a1i!X5KvwSAwacW(<_H;ds3j4~mI2wp?
z!}>w=S(b)LR5Lwov(HY3fm8Oi(<6%2=c9F3dOw4DzImyO`l;0@?}l$>_v=vK(!6sr
zh7W(sfzTN^*~8vQPaceBm;zj$yh8lLx_E|LLTED$b@d;5sJ-ZHzq4cOo;c1e|An*H
zddLnc)y+Gta2y&PS8IwzA_w?!bJ+R~m~s`eurxcvDM*1v0Fg@ia-P-#z?Ia7vGgxj
zFMl|F*;YJY<2(0~7c%K`D1F`V7f6{@+Bchq+z
zJnZS;ulO?pP88h#qF_bL7i-Dz`1MT&2?ZcmbIuj+RN!r$cghuB3m4sc^YHfIa88de
z@O5?M)L7oBm0ZL)vMeJ;d6Gg7wbPEfk7!)ZIF
zF}UqLU1Qmx2~T+deMQ!;Z7u_vu{Fy(kJMX~-s&ulM_X(*H5_c^kcSl0F-@Tzf_*O6
z1M(yPBcixSqUKBHO22-X_BK*0Mj}EwC;Mf7BI!y?
zcye#XpeEg@*g4`A8~
z(*mqQ1FzO!tR8ny3M}55fGFXvy?EUGP&cFF4vM?xmv82w<(+p5G}9<567MOhk=<3mrExfhrY4H
zkMQ#o)!q934HJL>7-=57ZQr8%N@-9euw+ecuB7gH!eA^ro?aBmtbO;`IbggkMn3X_
zfFu~Kto@Gzaqs^gB9?X1A+tzCYNlBJr0+$TSyxOP*f~!p{V~mza~KqPhD*fB(p`|Z
zs`_u=W}F^wX0^4wH0rGAvbSZ-k#mT|;*s|mE`}G!MhZz_yqS4%#Q0%HY<&FotjD~D
zmscHVd1|GaKT4HFP!4_!J2v~?G
znA4*A771%y-W_QOl1qE4HSh~Br<$^H}n^p&U1(~EH#-ckFKG`
zofY;=>ykXdHigN_gr!Zr7#W4hE5P~chk^Kp{QUgvAdr@#Vi>}54SKYx>)ELO=FOYP
zap;w#rTz()5GrpG+^lE*cjZMVYd^7Us*A(jPl|GLrFC?4*xA{mseEESLFEZcNxjCp
zdV1vllp_#`0FM{oSaS7jkVmtj^B8|x9}ZX!1K{b26BRSqdtrY%^-dO)bwwMPr$&Tf
z6Td?nVK1cp6P^lxPVAywFDEbmk>`qJTO1}9ksJo}9s@%uJ+}zyy{PZY|GkBo8dl)W)<6=>2?#}%t
z9Bg=L88+GEqZ&>kJFHdZQ+XVh7aJR!)0ZsZDS~sH^aTUszb<|6RNROy&!(ly@8cfv
zRKAs+WEg=GFZg#c?
zl<7ytabWd%J)e?A$>MYVE{qJjbs%110AcOpu6S?LO?D2b%`Up6AYT)RobFL4y%m+TY~~&mb48MAXlj;V
zFrRCtIXO5c04{R_$PRPPCsY0tihkdxzk`mu>=3-c2f5z3gC>N
z>>_QIPO){R)M~DoSVZT%TiXpbt4(2fI+PkFSLwkkhy>e>_%W6W*O={3D_~I9wRz+TLRxoqE)2|I10|s6=dO3=Y815`oIjt>
zdjv$pYV24&>sMR_MW1A}q|2e*K@|8byosc~)79A%*u79ZLE;_$fzJU8kX{An%|{6V
zn-&%T!>%!=PQ>8iV&W1QspsmsxGKnRdBA?ewEuAz^Vf
zftt4V4+O$_;P{tSc*BcwW(o?5Cpz(x8E!O!iTg;n#`!8Fj{1iRsU$%Jg$JGp`
zSE;|Z+v5g;JV2&(-ffTnk>#(Mf^K~|T^SVLRPO-#0>*$(d{6357{L{|v!sMGy5PYW
zh#)kg`PgB9-Eie1LLHNo82c5YOe|4d;~hduN!M)#Fd@ZNw{WO)4AC|V7@%15cBXmz
zqGZf%2lnVxYM%IbpS#p3aJeyW;?lsjh}0tObJKG08UI!POj2wDDzqb8Gu3e?%mrMdsHet
z8;5tCFVij0$XC^u4A&y#0HN3Jwnd3qoUXz;l3PNR$YKZhrXf7~wrPhuMWB
z53Y0L$eh<9>s$t7dHc2a<`@>>@RL$J?QZF`c?GA_R8@l}HT4;OUkji#tB{}Npwi`!
zD}OCdq?iE+wY4=hq=B&@k<}tNP>{yAt+|0TJ%pb}g)xnPXNd?{-VXA2zNb@;oxr11qaG(k3@%w*bff1%9}f+b5Dd=oV+god+BbqqvJBs}z
z%cU$A0mu8g(6}gGuU0U#P65n`pYo#3HI-m
zGSl@|#S6r0{W#t>fT{bJU9Qe^)+@VR2C!}Z&%D0_blB}i=G>wpu@jdGl^{qV_M9Y3
z0t;-X!QRw!o}2?5_i1asAESeh%f*_~Kbah0NP*=I(S8c=0the>p7n+4l>Nrf)x3$q
z5wQ*TuwOY!22YQ+tAN#9U@LEJ`xUvd92XbYdDv)1-1PL<8h1(U60!I}J9#we93ik5
z%4{|kHhm2hT>&^nO~}-%OvKQn)69gv>0NHFus(&1jg|v0l8u0kJ%P_lYmP}7)CVc;B7cKgsRT?kNytB2
zn(WVnODQC~$lYF}yikb&f+;_Ays;rnQogu}E7`3@3rF-LhgAIXH6ef>Hkz343f
zILVVLJY)SK+veU@$CnM92P%^M*2(mqO4ky8mf!Qz^sA?JlGWc1Lp^_b9{$?XA=eO+
zh-Wo8;%UeBu)4c2%K~@Q1QEm8@w@ZIu^b>rPxTjY{)Ww}*Ec1ll~e~D)vaa*n4sj=
zGTCnO{C9#1KoNl5zo90CKA3$xX&=xc=$cy=|j6sV>E^_FGuZEuqmLrSyd`=*_tL*&Y0cN#H|Z(qNPnmO1CgJ64oflSW)&I6ah
znHOuo5Y9h;{tT#@<^qApnkntlzjW|m9gOVkRkuo{ulEHdv!PD*r1PUHnfOo{$%Ujz
zq8pLRwQOdKH4@70Igk7LAT|4UmHUlEun;wOtjFH)nA{y!Uu?vEaZQf67OEK+Xdzk<
zzsU?*&SmH2t$5K3#4Z9L&Za0d1EUHO7s|3slZx9jx5_A}b|fL2&X$G;tW5NT>J9_+
zdQ4PQ2EdvD+k(~2lVu8E{{n(
zaLe%`oh-QTx@bXB(Wr3Vt#PUKo5M@W-G{>%)ZqXFref&$*rz!iAZHt~Sh>}el?}YA
z-e5}^TtQ+O$Ngop@a|>mH<5sD5vng2V$p1EQ~EI=;4C5+N93&_97%>Njg?l|s
z{wUzamZ;q+S^1{SYKXBTrWBvbh+)6ieN+I0!5@9EM)*C{%1Bmi*uC!8d+y=6H(R^N
zJ-d95l2X9C&Dw?ZH4jcEl)eziM|g0Yv@$kAxLNXjZIWk;NJ-Z#s{oXZCMioeIAI$)
zatG(#(B{~NbA&fGz1*x3{jSTWuOA0Axw&^^rJCuG+oL3CeJ*Tz6eDTgF54t-;;)aC
zT%vfE|BJI(T>~Cf`3icpSJFq%`5|u0#aSP|2kby+^sQ3VmzVT#a-<
zsCAp(7IL+`YfSTf+ssT?%V(N>Dn38(iHhj~N3*{FqGwa1aWE@odd6^Z>=s&E8M&(5
ze5e62C_fg}Z4J}H4f&RLbL_2^DpqB2Losk}R@c&K*QMh^#bkj#2Tz)9`>YX`dA!<)
zpUwiNj84S|gW+4C+3N;Vw{2copRZB^o~iO}4c{6<6o}Gk$fvEyUQfei`QnlR+J9rK
zrDYlsV_Ml%ugN|;{(W}3&~{bGEs4*&_TQm{?ABG#qC3Q=7C^43{_wp?VCQe+Pu3Pm
zsvpCE;I8P=V0E9Z$ySio%jwaCRok8wA-B`>;+T(T2)k0vEMYr29vAvxU?Drt+Z%u&
z@&BUkt;3>fzy8qyMFd5p8UoMzka>XkO&z8
zhL7y_&9NLshM3scTYRc|7#EH+^?=d$%GBZkXsd$C%O5x{Ry~Xzf0LGUr`{9zMR)Yf
zi24!rC6fTM-b|gzQ8bEsachR;jQXyso?bDKODVycqc%&Zsj2CK3&67k)7)lbx%$Dt
zL(6MuxDKDKAGBQo(k*dJ-?K(%%b0?eCFe9kX%7K8G3<8PUxO{#w)A_>^+ykCJfC;i
z8>xItWC)zWmefJiDAVcg@zOu?wEL$@)e}F={LkK`USPxP{ysEssz)Kly_Y_X>u1+&
zcps}D@`9*z0$C64KGb4`bWcw~hmh+}SDR1^oCtM|R3Kiz#SG%CR{8+g18l1~hU
zBkk23ljY|~m0sa4i}%4B=N=-X<+9lr+udG`QetD6d8*NDbB6nkF{x$g89Ug12)HIZyUOvYIZ<)lM;9tH;x2-rUUW-dtf_K$Y7=&0`RoBshjIT@UU}
z7j?g^S`EK|9(|wiI4aG&l+~Pt)z4n+>#ZqQdTN{Xp(8oJwzrt58&~q6)t|vQHJ;_=
z<>8TMW?o|V05EPhNmSaQX|&}k_c1K?5o1B_Ca9C&q|H%@3r*_aV93#_@AOT
zGiMbx$AO+9P}p!$2_bRY90pZ9Cw;QV(ZG(^)d_;QcnJZt1FoEvmpnE;eqlu>2VcM9
zr5yXA`}{NvW;s&YNnb$X<}d-BN7M%@JR6IfamInsBMQaPUT4mgpY3B%rzNn>RYP|i
z*q+RH+3*9sdvvzj1Ik!)?zchGv#=iKG7Q}j8*Iw6Y-QIkBa!(3VV6rGyYOjWy
zkRiAgiH^@*81xVmD#^oddWp%C=kG57
zM=4IzrfzEq#s+oAA2Mf=_we!Y9X7M#wvguwgnKO!T_NhCoRTJ6Bgq;wq;7e#2x*
zogx)bf@xCa__A6&V?^mY-q@$wyHcQRfU_AB!|a1uuc05}!~=3uR+}u5b91C<6xJS-
zck2?Y@L^{6UK3}Gs?Z6DCtLm~8{gzEPdWrOl{yMdc{A(1jB>eNgXb?&1RY0?{`T@3
zwB1e_$|$FYEmbaNJvW~y9FCz-7)tC{)haUz@V!Tu5B%%Prp1xSwM#nLh1q3ULDGV7
zuUV3IkmIjfazj-79vn4H5*i
zS>`gp*nZaY%{#tNmc7_Uo6QB2$Fcc^`4r&;x>XqCr7x
zcCDA>?~>ZXV}9l+@Zib=L4a&Y_Ltm0*wfgcRU$EtEA^?qY+K|NMKMstx_1{@A$_nl
zSlwaoteL_y%e&wByv;S@LvR1
zEksDg&Hi*eynI;`P*Y^pfQd{~&m=vF=v162{qnvKy-F*h*(tGQ*T-WoRry7xe7Lu+Jw7(%COlque~XmkVg%cFcJzt#tBe6mqmF{{H;F
ziEicPtK+F`{35+Zt)hoeDTcJ9pqEudrl3nv)e646`JoQvqq?^hVI;00uvdw7p84`s
zdoDNH0xt%yCCzLEowf`x^;ee#f%<6=D@-EHs?)6${zrnM9J$5wI%j@^GdvDAZ124>p~{qI8U|CEXU?-wyybH!Ri
zu+=B5r0%R;G!|L5|FZ}SieZ!}-nA>q4#bv+e3}B=MZ>HVmj25#`RSnZy#SsqH_4F2f4rHb5h#$@qd*g!_3bxrb>(@I-Ch!o9J@qeOo2fD>MT7;VZ?S^ZUKK38o2J
zokz4nW>a|;Nu968CE-)ushx!xM$_W*k7dglnVweiJUb+3Hp}&&J;c8I(=OtjITH2r
z^*yd;oiq9~u9EeYB~i*VJ@=yXM4a+@_ua-Xme9SH)mB5FT4|EU7wOO+)0MH_JTLd`
zqCc|7WM#SZ4&sVuY27R&AeNC=iFu}N#oc|FURI$}CGFlk{a|Tx9ao^YBDR=gz&|Xk
zvqp5qhr8R`)~_P~fpAG4;QaM&*CK}_`#JBP7}$*H%GmUM3F~kKzJIr)2+H50)}3Pc
z6cg@#Dmx|tdstK~J$0T@h?jXrUO5cq7ZCV3c0g2fI)UY{l`S{p>&YiaE8;~vC7uQG
z25l6IpF8KE#&TcH8rbq`XQf^roE^P$75_dg9i|(Kq?)x(whQM8;2a&p#(
z2tZYXBZMvDdYi6BOZCfeo~^;)FQ(liAq{y)?wCAVHb$^*5Bs+t>2dR198hv^{utIM
z+aZ`@byv1Cnu&9_SvJaMEP%}FIg%ErHw3fv&cBh{*GT41$h%4?Vl_C4!c$Hn7e@1}
z4Y*66-HeU)pn72uZq?qC=*Y0Ln&6>=Ea)jTtVIo~o-{qaYyVjU^7A83-`-eiAIBi&
zWkC^!YoB7sa`TH@zK;+?ir^H%jn~Dd2A%KI#W=9MP&Mzhu=C_)8sctD+`@x}6~_yD
zQQkTUxCJq~j{IH(%}Gr0Ih3*?pKDDg+FAbwgu?@MdM|l!@Lil0ePA&*m9t6mqbK9(
zdot{_Vg%UVlAv1S(_$VDX36~8nU)o)C&-8s3x4O_Th@xs(dv5d4n=x-Aoov-OTzUE
z^6J0VAbyzS1xK+}hO4!n?Cp+P)MpQno7$?b1Q*XG-``m`tdv!j$ms~!FoB)~eLArl7o$31))4bEyDq+GtcHY$h$zDGu^s5@b#b}q
zE(>Hf%YYvo97Ppq6-BB&yY`%BhD80^>UTt(CJxCLTCxx^jZe1r66y+?9*jkmV?j8d
z^^H|3S>;vdnCXPo2TGp@cN~{A;6OC0Ht_m151>IkDKDJP*Nz$Z>k6jiW?fmy4Bm@58Z8G>RCDe6S#F#_Et}KB!mFX1Q_tqjS=s
zU%zngq{66Mh#G&H&PmKV4$?uqrxTydHC=vcthRj`%W;K%Z&&-4+|1dA{-F>>{$J`I$s=i6;f%y-(JYt1j+yc
z3nSbe#T_cF%PrTU7amWz?DNEnQM#J9p2?pFg`TxfF|uDup0{~#+_yjqs-C|943nc1
zxl5(_oj)5L&Wl=B_z6<jXd@9LMpbz^Pba8oMOwUs
zH>k*NL;BCQsmOf5)86&J*8->?68YgZ(^rS5emx~RW4q?L!40$o%PT8iPEN?f##Ope
zM`|z*Hc@Hsa&fIWv((rPwu$tYP}sDpJF~D>K~P#-5_LR{Ge$p@afqumZ?JuQ_IkTG
z)k7&UI{voKE~DL%onzF;#}V8D&Iot$YU?iq8_C9}7$YyWo~zRyaf}jp_1yf{$mpn&N`8BZI!BL&Ve3}$7~|{LbdKs~rB^e`MxSDMFI~;0
zz3IL=n@F(n>3q$E1APGGtV&NxTte+(6Y}sE$IAtj3*{TpyCphBt#REV8ClPdg0>&%
zGODKPOapC@DI1>o@^M}kbMvNYc9E9g>mm)qM|h+3C))<*-4q{I6fowgC+aoU=!w$U
znqHvM#t4&nk+6VJwH8UuwD``{6_dBGbY)H)AM3*NPHI2v2=#XqwrC%Bo9&_-zl^46
zq^8c98s=t`bj?nd)+}=iA4zs_vSC3u6jF-LRC4ybgf+_d3?T%3{guog?KXZGQct35
z@$(u)&uKq25R8yi$@Dx~@?2`@KK~T4NA^Kk4G#uY{Pwr=tPU?BX8_{N+Yo!$D?Mk<
zzRT1&uUuO+Y#pWid~a~#E}|mG#c`Jn;ypw^$6klG-)?NiLytFLfb{j1W%FvZBce#n
zQ))nG{C-D6Ogqk7^Texlim_m9lEl!#&M7Ul&=OE&|H!UCM
zV_K&;y1#8k-BeOg+%lD(_<4rcG3$~~XOu@ri;RqXTJ5wSW6L1n?0EWIcuZ*a$iDob
z#4fsjb`f)6MMxTwEYIW)wtBt)+Z)y`3pw(?`y^9w
zeqQ4f8}i6oVTEw=9-SQdM)ObCII#%NHV}wp(N%33R=Ru6%0im+a0}1d$lNFQGxV__
z$Lp^{DahF^t2=XL`ATE9eN#sWl!_dWH3WWqJ-L_^GJ-GVp+2}~Ub)6AOS1ga`ZBItx80zJScSIiJ?ykkJt56u%ce7UmSz-8PZ>=RgzK%hXg>xU}|CP$5&oHmGnY$p{mfKNMPd`ov6_t2Le47m*7T~0blzo@eOKC6J
zm#XM|N#!`syQ|AmuYboj?%2Wx+_Ay9EV|>H{dxwdH7XlZ#LJ@Kya5qLedhbDnBsGA
zUc`s@VfjYBO7`O&%aP5h-|}~9xgh4KW5xkJ6aLcp#E5`MWp)X|S}J<0Vu*J$1U4tk
z04t~AUTV=en{b0@+=Rq&=xQOZNx~Mz^oZzd%!948^ZJ6~3Vy9G4j!BzxBS8?t$W^S
zL0ikk&U7PgT~|$YRsbb{+Wmqa8Nh~g%({nJ>1df>=X^H$4KrQ;4tamHY@HuiKf3~(
zD7Rh)4JE$<4pU>#|Mrp`*o0@QNSaSOm1!{cuxUf&Vxvjg
z*&u2G)*kuEx}sNx(q8JRiXLjP07AVt_;IVPWjQr6N^HNhz%^(|dMS
zttOy;zu^YqEbpxs>zp?s!N^{z=x8%rRuKk@3ay(69%!xW+k*BcQ4wBuWJ-T(%hVJV
zOP1ERtFbX2W~~n|o|kT4HA1{YN;q3Oy@YMFmsrP0twUi~bm)3Gg4p{q65H+=I<5K2
z=JbiMlg%6HJo40Cxi9e4Fx3t?>LsC0BR)DS<$L0?<(^r1_U{Ek3d5XN-wVgYAXP6=
zxDW}pkEGgI<*RUlu+)18=hkN$Teu7f-=aN5UQX+|$%|YNFRq6T3NPU4v;9o0R-efv
zd%}r?!)`$IG)yk>%c0xbhYKu0)G^hTo%APnO*IIZbeA0$GKKoxdPs>P^0Z{Ief&Dp
zyPExQ-AU+n3#5oUVwX8Or}Rya92rY)1L_TD$x^He+q@fxtyI`oQm2j!FWa1cq7}9y
z6~&zo{(1T~9YORd(ojb6eSZRJq1)yH0+BSAFN@zLEz{KIgS)a~?UVtPy9-&&2{z=n
zU%LzW>AXJ=r0}hr3s;@14s3bu%o?n9v}2*8>!M1L)O*ZfP8-YbKV#KM=DfhGQ@tA#
zq;3Ol1@MBDj4UlT_cq_0L)4zj$dtpZt6%8N#ou(vUyse1U*nb%+V@rAN(#R6-mNH8rrkXc`0@Y%4K
z`a4?kQFEf%*E-mpky5D&o5{PCLV%
zDM?Y56Fn)TFJyU;D3WK4jP6@K=7}D)9v9EkGtzAqn43k?3Ld#;4}3Nd6RTp`(1i~7
zXT8`x|$)m?KY`SiY}LnUFfVLca|NzgbWxM4$kkl$_Hb;
zB?f0>(inEIvz$Wgf(97b*l;0>OG{sN;GedqsgI?DySiQl1ouTr#9^d-`dq~NaNVHP
z1T>Q_{2T!DrHS2&(w@C?ka~ro#)~RCF}|K!j4=c~2Q9?X
zpIJet-kEthCu$y9ue$aipq>
z*BN>?;oroElir^!`%4}J0EdLVdnfleTQ
zx|6Oq0m0R|F~)D}t^+eNB3phl&H1Z>ql(yB)I;s+wzIP{q?z3odD!|z)Wn>TxI$Q}
zq0#6e@k^_>OSSg5H-~T3OYT+%oXKD$EucE=odin2=i*{9A%SrD@VhJkb)}hvxqe}^
zI6r4`Rs2})r5g{%rV2YPm-w=Ih&tUP0;TG?d3l=$ag0j6{HR^~>uok1K{IUM>Cbxz
z^!iulUwoUD_gJI6
z?85fw*+%fGwLd*FG!2X;=F2gTHHmk5$Y_3e=FnMq)oIY0Q?G)oF|<}ZcY2Ki{;G@f
zaWnXyQKDP~}TVCZ0s@{))+_dz{({XpAr{IkD7Qd)o(eI|fPaCq2!GXCJQJ1&$5
zT#uUG%_E`Zu;dRur6?v0K&Vhl0SPbLm;6H9JMv$(06dLgbpi|N%k=h~%lkx1SCj{)
zib^(n4e~5l)88b&mfzkTrlUGH?j>f^4y`XW{`PGGHvn@-mJ2BFYm7+?7I$*uI755%
z?F77Wx6@dDVAWX5;C2?=3~nFrNB<-|>2Sg?HQtl8Vd^GtA#NmGwzL}&?zxCqN3dOe
z+A#|U`e-?=Gj8didRuS@0XJQ2L~N~~dCls_>A~uqX{
z_n!{Z!TTPnuqPH!)Y({6-tu<)TN?=sZSI%gfkj{(Mib*2POBSJg|Zp&}zC^q5$`wWq=_Q+o_3Y
zXoC9s!E-p<({tlvAvirK;KgxvrG
zOM-z**AEA8-Uac3#}b$K*LF7pGU*oHUN*Ck-;qxpyz~d7I&3+3zO|A>9I(WNUW1cw
zbiyzAQQZ@^*EAjfo+%Sr-g4IUL*%D&XUm~AeJE_}Ha{xK5Zl-P-%aWxUxhQye|G!@
z1zGj~>oe)UBY?{jMf{HUeu(h}!KO?}!iDi`FdP2=97nGCKIT}kJr2gB{P$o+#_!z!
zPy=&xCfENHgG;GmPvQhNJAO%T-2NEU7eZ&KU^X1F5JX*CBU%--GaK(|*uJ+^&$Fvb
z7#TN%&$qO);x{zJ1$p!Ktyf0sy4;{z=HMKF2EZQ8v|T;6`=B_->4@Yvt<2)eBG@G}
z7qGc@mZL>mt{`$kjU-TaiAYIrLLPB&_@1056)Z@cL!gl6i#wlcPULD?ZFGO~3td_G
z!Jsm`4vGilm)tIPdn*v?&b*o$%7BjntnEJBY?T{b`|S$5x>#j8UB2P!eN!biYDc*8bezT^tt1(4iRbk3f8Zc%Pi`BzL_EjsMfcAK^Ni%_<{9CGs(y
zgZ0w(^0L4vs;Bg?hW)iRVJE!K=9+J#v9g+9;55^0+jzT>Yyqr!(mFm)26?Zlnsqfj
zm3JpwF5xR!J|-sx7i1(bLnT
z6g>Fsb5c(MdGE4w2ZORko86Z-mu^5dww8-$*q-tdakNw$98bqN7`I}OnQ2&4@K!p~
zpZ=w2wWaPU3*^mTarS{sPb`>7szj$i_}L3k-YzFt@R`8s>1f-*CU?s})1(zHDF>9Dov!XE3rS6=O`^Mv3O2e{DbiqRhbFQ-EGzW{32
z2s%or>|@cQ@yp{5;X6Ig4n3*~ULJb=IzJ?YoL_r{A#4}0_=Oz52r%@FAAFproyd1y
ztb3#M;p(ZxU4}rgtis5aZDNFos7J)LYQ~F2`biEZ7)n)qi}+9c
z%t^nwvng=7RtA+8(%H+}Tt9`;R))ahiurybQa=TbVNgPv*c5q*Hy%txr_b$7zTtBD
z#>Qw)7_B2VL`6lVc`UPeA#9FwERi%k3COSQd5ZG`w?B7xYQwe2cD*2;Q
z!|qHw-aa@qty;h-BIot@=4F)D@z
zR`j+)(zvbd%(BX2T4Tg-AkEsDM3Vw0`Zow(knLGi`WadS_z4yR>WJ{HFLKjCu83J}
zJ$@(JYGbru^~!06{g3-~E@Nj!%<7$?15_A|@GTsi3v$Ka8K#L?JIAeHfl;=_-`0BM
zVdzilp96T4nv{14>u0A8uTzB+hWA#`C*5}op~4JQaHGd|a@x{O5Q2Sl?)(i>8njI3
zwDQLiq1zA}r(;nao#gJQNHED6IXH@yT+Nb=s0|d{(^CGbS`&-T6LmWMa~J{vJmPC26&2`ro)jW1smFX!NW{+-v*
zDgdAknhy8}3QdqGkFsXbaKARrWO(*z2=jCz|69Hj1rOcAA^QUC?*^1%i
zQglK8&VddESNw7DtBC7<1;njeOy^%n%6R52zbDx^JNuQF+xG_eBvQ|kl4r}lf;4wM
z9()KSf5zEs=3^9>@=-erLTyJzE6cs{Lyp3KV`j?xGc;gwFiz*ZtM2~?Gb68T9Y3x>
zjNS@uU4WO
z>>4Uu@bvT=hB67$Ba++#d>67Uf(pjmLzhcA^B0F|yp037wP#N4Q)pPn3OF6_w4U)~(F4y~k8XV8Py2}#q
zT-<}v6!b}7&*YRh*=||<{ZUD|N@r+;}=&7Lv
zy~`_D+FAaS!4tmm3Y1JNRNdp2GV#ww5e8R|MkO(KhmNi$Wa-Jojk0lZ83zl2`0RXC
z+)_t1yrEq~~8`Sr#9fX%PMGB<5DYAqY;v2CgL@pw2Ss8Te93t2+uz8YQP1zsY
zye$w1%UXeqJ2eZ=k(zJ-aD{)*IXmrqT78^{d!N>W9Av^F5JEyiBXrTyjkwRH5|B3%
zYtj#nnZ0<*`tE44Pc)%jgG4BT#4|K5ftxD%p*lS`x2y2wqrc57>O2@FRpEFKa+fp3
zDgGeur$+WfTMpS35-qA-MqJJBH;QFb^6NsMj;x7Asp2<6Pg%CMF
zkjaBNkv^Df%Wt=OyGaU#uQ=e@(EpQU&YNoibl|;SFPTGJZn7l?l|_N5qJM_Q|b9y
z>>uiCNfMA?p}a5hXZaBRc~l+Z4K11OXf-PoM6KXfZwF9#PS+C7QKaRU$Gf~a7TRHiQxq7mSNTE!iv)NS*Y+(!f09n9@dr~xrNZd{
zyf)($`l2FTr}(9mZ-vLvoi}iH?1M>VR=7K3o`^u@SqNW1U(4a(q2f&*Ihnl_ek@Q^
z8A4CKbW|4<|NIj^ptlTP?Z#~_vywbPGmow&o9m>Uj1EZxIT;XkhaSmRVnAs3LKaVb
z>g|Zc_@m5wrbh+^QJkJ5M#{yKZJ|?qYJZN}qIXC-MLI=@hPVsZ5!a!WnFwWK`>&b_3m7w7ph7l<#K}ZpX{}agNlJQZND-B&f;9mLy
z6BA?Q+9J*rPCX?`NJ!Wi+r0cx
zkl^uOfbn^#W>^~Qf8oIuDn~rxe_(4tsnUK|^C?Y;6nf)fgIX6IQY=w;c7Foh;D6f|BH8j
zNt6mW?f7%p8i2bPV+1Id+v~U3e=ud;xeMIOwya^&GJ;1qi(kq%AYeDB1TGWHg4G)j
z@|Q}I250#3<>iBB0BYkK=WzH32aCbIkiTqKB$!!PupmG+EN*S(Us0FKKZTv|&4rxB
zH90wLeSQ2Pdl4)Qn46!E9mQ!xfUz(B!#BLMFabQsia(
z<}?GzOtq4Sf)RZ+g0hOz{`{sjW=gA$2Ne1t6~)Aw%ss@XlFP`^R(c;E)*HuZFum|u
z|5!30kQROPH>hLMzJ^iNL=4_|xr_TVXb>F7o)4aIRykJ3H>)Eci@Q*DKRYg46LU2l
zL*mXrz*F7dO6b=n)&<;l*~aFWum^JChO!QLT)ypny$@C7m%gz}>M6UCs6UhU!ZXv1(o7AH
z^Eu~q8?`h+HV^q<=)ZJkf-n}y
z$0AV8wy)0q7=G3@GkUT)lIc9}iVLHfrnr$V`U|N0M=0Z7O;+=$*iRIstJ?!(Nk<t2i@bZU95RT3&_NeTG>lQA>-#u|G+x+#@qam)~QH_QW++@RATD&$z&YJ*!BCM@a~pJ
z$*LxHbMIdI`2QXZ@-FeQTJTp*6ah!&$9r#8bDJo01v0#B4C#n8SmODOM@=BsZ_k_W
z|MtTU?9(3^^!6Qq|5fw~zh<-&xSTC*YFx~-Iyjzw^*X}&wfI=-vYTR8r)Vukp~NIw
zp$YQFKqLL19S|K%+$W@!1S!llxzwL0ALY|U@Q}bMyf*A;r7X8DR7xo3zUl~s^|??&
zVKKA0uS~xdIAvE&s$3r85fF^Bi&w{DKmQ=`9;9G;
zJ{hsf>WK*=y@Nz_saB=M_o`MYW2OX9f3}Rr{CZjqZ5yZ{Uymhd@sTZV?MFbfe
zQ=ovm?~}#dzm_MfQ^0h%xVx@cXyQmX)O$JB@Um9eap%mfMG}*l$-FN|
z@7AMPcn8N#?2eA)e)w!F@)OQGYN*0zPR3t>Zd~_o&g(m~ui9CcE=#+*dr6cHTFHN*
z*^PUVa9#m2UEM~m=fdPT>y<7du573m*7rOn5ibKH#HW~fJrGKwbayebGCTX~KFN%F
zT(p0{?#wd79ZWEpwW@@p7W1t$`IH*#0!Fu&#sWzu%SfYW&(j{;
zb07E8oUMGT)IQT3-YOfsK=-fJT$OWc^pYY!a?FlP8sEc@HX
zVvD7(3HL6Qq}FrJx#)_lBs&?tnB=o+DvWIa;-fNGx!b{2)wmWtL$nM6hjgjn?t#e`
z^Ynb((Ac1)r(|`|L^i_WbwPwIh=Nn%^xCZas+HVunD`97X~9iigol2h
zg1ES~2p+WVs)nh``F3PAEUZl66E&-TVRJN_lg801Y32JPJQli#!eU}$hthoSEq6D$
zE=9_-Xo{;k;+>K{WEZhK`G%{UQ6Q0|IcUntM;Y%mq
za#R;Mq?_xp28ykU$8~81nK(rl-rfFY$rH=o`TPDE+|)vVoE>vZkmmiw;@i7>-#%z+
z{u_*psB>%+!=W0Cy@H;P#gnsU50nTjKo-v@s+7vTo$H0v)m2r|7e(qo@x~PG4dH8t
zeSf$ETbXiurnLfe!^Rk1IK6EDKY>&XWR3U@R)%2s50Xs}4gCKtc>SO8Sx2*dd`#dr
zq1UuF>frQr+!Ly%<~xm3NnIHy5Agk&-#?E@^E^fJ;pN1bYjJ$fVy}_wb
z@A18`v&I>;-hX0{?)4tEV@s=Y@ni7~xTd-Yoamc$@8%7c<{Gr;$gP{
zxI=^XwGhPmF#M%#lhI!atj1`wFMl(A`~`NcLP(>kV~fV>LPdd0PJ|rtb
zCXWq93LBwGh%{3HDQuxAQAP*D+}m@M(>vy-?`}humX-*l{lL>d<1QQ)sogTP&^-Su
zGG4W=(_kHa6jfOoRol$2ofTJ`@7z0uqi
z9bsV9)8!j*GXB(`K>)iYBBH;k$+hc#U(!nwaN1ivJ$f}x51cTL_{rRRMdRaIfxS;0
zq~muxm5BgtXB!*B9Zx7MM9Kzpn{2f9n5!73{0cMRJZ`!&O{8(EkJMlS@iTi98=Y-)
zy>~tad^ET!Rne6j>wDcYQ&^Q$pPKk+?v}Pc(ba-eZ`_S5=-gjEnP#BrvYrk(hm^Ri
zb^BRZ5!0i*Y9NJiufju_=+x!!o~C&*@U^4(QWCG=qfb-Ba?}O$iuGj5oRY?A4S6T!
zAJe6w|H|NRl=yPRr1|)9XRi9Dopo)3Rgn;THn;9E2nX9vT|ONDk^95bT7`u*sX8@j?KEe}GAJ{>m`soE0|3_P9~ccXerCYMN2@`uduS<4Pq%
zFt=r?)z48n9{Kp{p`fFky4bV0NVgf0d0!?|st_+$7UL~Q)%
z-ULsGG&oQ!r}$558T1tIF@T4|ubZoP2?#dm7tKebxMZiTo>g}GBL`8&=%ZNXSLT%-xU>mH)Tfy~F8=7Hc6o=n0rHmV5s;XplxCn!dnK_F+Yd;oCzSwEQHjE8~AvPeI
zm(V=KR5*-meZSkKdDKcf?44NYiF7l4XGTwNKS
zxA$VgMiRl4STGnYIy(B%__K0pyvSd_xIlW~!D|+rnLRqc>y^$!@nt`Lr}Y-{tK~l_
zxV%tiFMsfD>F&I3e~+sB5e`?$T#+et)JZfcIB!GECy$qv>FP|v9TC)YU&yTb=Rem#2erz|_
z+pgnlWjAw@r?@_lBI@My5^|9W7Ll5on&Nlf)5(}5XwQ0W-SxCRv$*&k?0q
zdjHOmG<-*$UH<(;Y!5Vqb^uVCO;@ntd^$=2t_r2Qj1#UE)ZhFa=|iSp+UY+cFPi>X
z^rW{Vxr#=1kJ9ujQ@Z%l$p`AqU{sttAqH^mF}xs6g;nFa5|ZUUZ?*Pcr)m1#K6(d&
zf#&X`FNWtj>Co{mY^a4m-bYCvKHF-aM3Jsn#yNCid2jXLs|Z_OaIcc0-sZ-8T$y;(
zT|oeVTloEdrqpX2h^YuV*gUAXQbQ8i{b}pV
z4Stu&kE)fOl-X5Nr1C4PxmcqARSN*hOtS;oepdJ(7i_OYmcQM`f~2LTVE`>4vmHpD
zbs_o9Dn;hC0&fh3S8P4%e6HSxO9bjHe&m*vbf$^=VaV-bw4j)qo9kUtVjZ+U`Kygf
zNlon*CnskigYa#jtI}kJ#Xasn9Glh)s0G$IEgrm?vS!%jLpr;i4M?+whKAbM=C%$g
zeF%>%BjK%tFOR(V+rPE*W05^MrA~h=SIG7O3*NYTeR@;V{9;vAb97abayENAMtR2>
z9Q1rx0R?l9cjTYG+1m-~-=ZlU5DliK3#aHb)I~Ypo`zufz`Q3?4TM
zUbx9cigq_;MV%f=1k;b)8Qprhz13K|%~J|!G&gvjP4+YWOk%vch`pm?PD7?$D$aY8
zj4tHsvDWM(>R6lU-7j43WW++i~92}{jGsaz4mB?0k)0^lZU;I2<@xr36teTzd*g@Yqn?_%r
zzco$t=00(gG%%%!35?*t8Xc~TcHt72lvn<9<4lBzXzB$R;dg86jfjW{DOuSYkh`?}
z_XPw5YFrM}%~H1v^RjoXo?;miazA8DKQrX}*HLk2Wnntud|T!xCOYa=-JxdyV*9(_
z{)ZDYH#AQM;QBw?e=z$$pZ~vJ^6|fk?vt%rV?%npV_yWx
zCu8=0cX#9H>Ly2=FFyXZ&knv|eDq5B+|yR?UjC29%>46@|2AaZs;nFj9P5v!tWco<
z@%q(bihoAM1EXR=WaMrO3|k~9+d2dFqsI~2<%#eJ`YSUd^(23rY!g<=T{%az??}
z1EAK5zG?;HW@bgrG_n
zz9+w(j$n}*VZb%t&0&?PZXq`S_-O9vZ}b29e}Ad-N>F}bT%|_+E(nDh>~~On;ym6v
z*~Er;xQj8_eW;);JLdci;!9!;le)pED)=6ZlS1;u-@koGDEp_RSfLdRS=Lu1ItuI9
z;WJu?Qd>GZUpi!*TNVh*!zZk(nPAZ6j8W7`=BB-EuCq
z{L5?eU&_Wl0&9~WSZ2n=y&Pzh@%v~{7;RV4$g6zxx5#-S1Gex-!nPFCYv@Zr
z0nK|FC)S4zr_lXqX1eQ#7A_jimO3s_T9OJ)Lz`I9C^4%5f(r
zClZ$EjnTpP+S(xpUQE>OJ>Wu^>s9-~Tk0M;;f(;W@Bb|aCJK;#$GwvlcjSv;J?xW%
zVJrjnMDpU|VoKuisZ7uD=6_H=Z)fiL#5}flJCYE>mh(eJ6}&k|dL|_6jItCH_}rhK
zfRc_)W`Hs$00|N+#HN8XV=8(I3ZA~BqdV-+%*Z#>)_w-8-xxj98Qk*>4kB?b%X@D%
z;Mh8{c&hgQ7W(FhH!}SX$v?xBX4&Vu(8=NvwfD?YXVg#Q`^YhZpta=&J!T>iP+Kv@+D8(lTYl&bGmISge
zYm@P26tI+J9)qH+r|$*R{R60$mcHHa;U1CqUCr>Qz26o|T2e6EX9<7`Fq*KdJ@lV96qz}H0idG?5z)yF
z!tX$fE$`u-8(gVFf1nfQ;)~Q{I}1*|syCDs#)ER%G+gYe`TrAa3)X(k@kiU0e4gibFP)
z+lm3Xdgo^!(m(V06)OR$c>BdI!;b@{6W<5Ae&XgV9W%!(
zEsKM7JGq@0<>a^<&DT}c5`n!WVXwaq!sj1uhgfUp=S*%v(%`?d%Md(*&YNEYYbkgJ
zO5AUkG&c?T57dowRNtfeI(mWA<@x@Ha8HVp3Q1E|oIm~@UUQg$byEQ}4*XVkGsak-
zv}YjZ=hl=gb;&r^I}tUAOU`N!w>2dU9=CQvi$H
z+va^+@cen-@IMA#RjJ8Iv%KwlCE?b~mizWs^Ox6DEgCMsBA+|+spht8EpDWhruR!y
zXRT#gECYdU!{TA30KCLfM&Md-KX5G%|$
zC|+Ea52@^a-w+W$1zR`dlB^*Q?uXaSJY8C&tF1bhGleebd55RT3WqU@`Qq7Ie{i@H
z=z0-4P3u;yf_g~OdRzk%Hu}f0UlZ$s95~s`SJLIBi=6LoZ5gF08J_?yh)eepuS{52Jjqzq1*vOlGZW2RmeUa;_|%#=
zu6EoIwsFZ`oO!3YmD7*J!DkyN~-5R
zaoGu=NtPHg3-Hd`vKusZoHv{&IMI*;_seL>X76-obUvE>U7vcH6Gbgd7X=i{}fyJ83!Pho&pAQ98ZA`B$_L-PsTb>r7~
zvn+^e>lQ_?zKzj<*!OcZzE5~8zqxA6-Sl+tdpSLl5QLhiv2>vTG0@Y~e^q06H~ZCT
zF~u_T6+o(@DDS(V48fl2-ro51d}<6WS%vd|WarzVRg~Yra#nk2^vDy2Z@1e)zch63
zx>wznRIul>fXC2MRnQq0VRnG&aQGSF*DN#7t&EdG->NEV-0J4)ot-Car!oKGEpMXy
z7}`LX1-crZ__XZcW2me$2f2-p9&%E_uE)=_1dkwa5t;M-Z6p!V2rsCIz%cpeu2?SJ
z&i?C=JbOobJ)ek3k^d1t{oktLv+>xU3bYtF2K1-x|Cg$XIf~_fH1y*I%`D>osH9FU
z7aEL<*gB248s$s}mIw)XJO5o+s>ZQ>B3+!ZP0zp;^e-E;;k)c5tbfQQ|LL`q8S}rg
z`R@k38IR-pmiovT-Vn_PCH*VZmoxcSd9T)}cKDFq&`(OrrtN>NS^d9A_w9bSx%~`K
z5ny1@`{!E)hI=K=7Z@|QojW2qnHcnbKE@@S!babM+=+yQ#B?L}OX(O-&eZ|5pt;S^
z?oK5Mh?)tyyLlGrSy-UnK4~EHeF-J0lxMC@-KTD=b8HnXk6NOS@3_;B(!rrS5Ppq@&QfrIC&%R
zeDMA2uHFKs3!hRNP`dC|;7lWFjU>7)6U}w7??Ab1<)bAzMo#xJt-kkD@K!*u-y0cg
za1Wi6uZh$=pWX$3N_VDnO~r_~4@*t;zYVC~T(9oZlIreyw45g=9ZONeEa8fe=WwvL
z78wyICZfd)b>70y>A0DBQ*20Azhq|XboUn(Dg!W$PEe-<0{NG}e9B;X1?u<`l-I-S
z-s((S-IeWDMl+as&m$#%fqFFLRuQ{+jQ($3sVkYN-&cq~h)*+5_<=w(7{J%%%*W_7
z5YX*wXoS|*&g=O^78XA5p-K9;W(q{y+gs3IjOi8xh~^;>AjgkR1Ql*bv$L~rIXV5K
z`fO@yGK1nr3GpazlQ-oI9HuG{k{Red26WTpS4$Uq3xU2mIV2@R7Xh%L*W7<5bW|JGtUi8t>g67Kut|VSlwj{Lj{4On=0eO(S+!j1t
z1Tn5YlexJnqSVt-d$%)5P|*8R1Yz2<4u{0?Q8>N-bLLE(Q@1`z-kHDwv@uVX9)ixe
z+9{VMoGBB7JUW_GTh8cxb*>a2ZHVK;B=J^5qgFdcpq!&BqAl4u(|5t^uYZ9ocbVuz
zEiE!~Dkjs9Pj@Ih6nJS+;_b;+%*^AUB=Ft#kO!C$-{TF-??t5_9PweEcYsd5+)|ZT
zIe)JWyome?K1jad~s|xt3Z)#rX0M
zKvx(ZKbA@&k5@M_p||**KDGH0Or#A#0WF}I3GmVE!b16RK?*@lg_Ge4P;e2b>w4Wu
z>j8xUec0e$LwxtTK~8LMBp)Bb16UuC;cA^e>h3JHqyO44RdD)i@;|wJ5mvFk(K_Mx
zSI?YTvnJf{0n!H~ycLNoO2=tW2|&lYieXaDr-5Cv`&aYtVR!ijTJ6Qtb=<-tfuJXf
zjsR?6;Be>KI7`fe3_iPf^hA+WNlxyBv%_U0y6xwj-dVG&BD3M;jJ%UQn#=36fklLF
z^n%S$B`R1;u$f_I??YwGeBHs~9mu!}$9K-JDnx=fE0M-F~X%0Yi~FjK05lAn2d~(
z^MzWXAX`I?94;l#J;?qZ3`Ny?0>AL{^NX&5?*F{&X2e$#n(LJ05=HT@?>Xu97}vP|
z^(`L7^QQ50Y{>);^{0U$rv-(D4oUZO3nUyOZW|jm&SZ;y{rr(#zEfIoTz0S6{@DBM
zud%_fZ0c2P1`pu^pY-C+3TgzJ;qer#G}`J_Ou3N@Su=n|urgM5;hWpE$(b|XX`DOr
zt)cGr3SCP$H^EKZ0-in>Cn9=J|0E=NlB-%|?<2-KVLjG}9>c@}l2L}fc#os`Fy%h*T
z(wfJQeXf^dkB^RzT?2`56>{_QsXj{yI4{fP?2xh>zUWV}>YbXhQ7D=V`?Q_LWiFrd8o-4@wvDV$pMo+(uHRd_GfONk;@0?>
zA#TpwekoXiYWGfiSx^VNhfmo`y%t}UrcKJ9SoZ<{TTFz{en6jIA^ffG^}$CuCIwtI
z$zLmnh&{Y)tujNfWvT6p*4^;N*jf8=M8J;I4AqX_@eem9SDP9Uheo+ekB7>ApL{X=
zKaI9S@RkBuvoIjD8Pph%PMs8pKPs!)CpNP1H|p+`H;wM%OUnu4E2Uo8i%#HhNCq0Fm8&u62lBE3mYwhSJo%`3Co9LRNbI%xL^Q=5`=;!3jiymU(C|VIp
z@$1d}pQPQrp+YS#-|d~NbxQv<5Q=QRFxY@z&Q+tIP$$722ka_YSb5++9sqnmS
z!dft+ipfdsj^kTn;5%Nt6Xbir-baE-qoZ&Rk0q*HiNRR_lh}Om=C1OmtdY
zk`F=a=lgJ48TVdsc#!e-vtnuRBwXoD)1{me$@QpbX0tuwN@jdF=op~rI^oE*6FpS&$0^$$;sk=vedbMcEfBD6dP2`Q<4`U1oNl8xcW2;7XnsT!XpE6#U
zQg6h-Lm7M%P^({mvzE2p1CI<8?CaVbD*{US=!v}Myc2b85g`^PJ`e!i-D}2rosZkB
zIK2+d2G}VoYZDXgCzjsS^(HWx9xQf7W8DY2u{=SHldr1k366|dhQFsPU`9Fgis}g_
z{UoB}HF{1rT*plvuW`mTA@vV$X%|Hb`VK8+;yWYy!18jy9j)I%K_MZjhBHM)MMIXd
z*MH_nXre0VwQ>fi25v(}&e2_KH8Ql}4*vK<+=MaS&RV^_y?x34b|LWcqqvqmc%K}i
zuIGQ*tM(`B4}+dY>{yXj+UB=Xy7%UHqMqc8>fI@GQ_znbRD&L)Kj`2G!-Y$&@
z=NyGvIq&{7H(H{9(HEG^%NhRuOu7_OksR1=qK{lh(rvoWao*5*gkKg^>2^noeB<
zw7&uG_%upvJLQ|Ox$#;4G6EL^BEZCg0l823I{B=&b|~9iVf0ErxH>cv!z{Tiw7ULe
zLBh+Ld2{o3JvCnMP7ka^=`X9&?vG!^zjd)Z9!z5%{V>~EFaVA(9+}9>x##G}NYBtq
z+y^;vs~V$a9GxRc?1mW|LvFYn*_>TYbwuz|`D(sycC!$F5e>uepXSb2jMXW9PtoF1
z_e{jC!H*;gBR$n!K0KL=BFaFINx*vs1GctJkF9fC?^@_)G
zrQef(92qG$-_slsp{p`0DY2iodg@pA9xFq)R$O|j40S^p2CZ9Cyw+JXlH@8_yfS}$
z=E~+95gjdUsPkcJlh*5LU4eVQxWw>t|Ia(|0lJ34J>#q#bw2pMbxT6}V3Dv<&JEi4
z`)@_Yhp&V-rMZDXWO8+Wpxx}vyZSpLQnr$gD)5|Jp2u;X
z8Uq8vqC2H_mc83hsksa5_U*rae+KsS_WtZ#W8XaWC@gQ#8(!M`z$i@70^v|<0dtCJ
ze>fzF2d5oJJ%54yX!Rw9%y-EUvOHx;xk?Ukw~4@G5();NUu^Age5Wcz4UcA$-~FH7
zJcuZflTx_Z({`Szn9V_qmE7FCel>kBKQAwh*$QO_f$AcbwBaCgpFRZzn8DB+1gxZu
zR%K$2B!(6h(c{`&azN)!sKLadde*2b*(~0(a^&0@BH|dLE-KGivd=M`0+r<-anx%n
zU>m~8xdVwc!Y{q+ajbOh)W7*Czx-Mb%TT7Syi7mC>8l2n?*#iDs5|v7RhU;8ZXPAl
zz{@&Azc(&3(_u4V{Ot2kU=v1R4sdzk9mo>4bf>L|M<*hd%kabck~x2!5b58B-fs0Z
zeN`g;pJ{h3rf8?0o;-+4D~zq2)p042zUG#9y~-tp5RAGI;8F7%AGxWwB=#bA)}6SG
znsE^V`jaEFmOA6BlNvvt!HQ>XHzm7Peyh9~M%FJ=Ty1kUehN>M2?Hk6*7c<>55JF&
z3z|%Yn<}albY#&q!PVNrt{K_$iH1945!~P=sWu-9GU?A-)Y}{~-!ge7sbsW6aCH?8X9rUJW-65&%WyWj
zm=1q|QX|df#y@YB72;g5pV)*gZ#mj<1;t}X&exz)X^--tLJk%%t4b9sXvSP#MK_j_m-
zmg&98{415W--6tv-nqD;fimNhiy;vg|BR!a*?IPSCf``_cT|&RHW+!r$D>D@>?eUbdgYZzX3D(l;*xH)CVa1Ltw0KDUD~_VxziGIDWqmwO((tK?`qoPT<_
z)+}KBBOiS1ok5RSkAjTu?a(O_8EqURwuy1rbo>yz$Qu{XB=AC0IhzzD?$jxjT)_F8
zjyOGLNVV;Rjq}J`mCA8h%L`rmo@8GE|9C7r8U{)ndb7#DJ=lbfLvP{s2P+M6uyS|m
zb6*IfqXe^9Cq1ajM#QAd6HLfurrqRO&RiTPwl|P8Ik{O|f;by%h(nb(`C@UvH>|*v
zhS9pF=`pogD+0$CKk82j6K397;vpm<2?kq|A>ZNUUf`G=l{>hbqJmUyJ^eAhB`?i{
zxrm3jshzrA2neT&hE!f1l5o8U1GDmSK4WjJ4VFKELut^$*eik9m%5lWm-dlm&yFyyT)b;Fo|3iXKyP*%4*gRG
zswCVhEnc?*YO}7EwH^J9H1>($urOhjWRiLRe
z$iUjD2BNPnZPF*l^3s2>>iZ1raly4dsy8yc