diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_lava_canyon.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_lava_canyon.dmm
index 15350793fad4..3efc7429d803 100644
--- a/_maps/RandomRuins/LavaRuins/lavaland_surface_lava_canyon.dmm
+++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_lava_canyon.dmm
@@ -150,7 +150,7 @@
pixel_x = -5;
pixel_y = 12
},
-/obj/item/clothing/head/helmet/chaplain/ancient{
+/obj/item/clothing/head/witchunter{
pixel_y = 13;
pixel_x = -5
},
diff --git a/_maps/RandomRuins/SpaceRuins/spacemall.dmm b/_maps/RandomRuins/SpaceRuins/spacemall.dmm
index b6b1b11615a8..322ab73490f9 100644
--- a/_maps/RandomRuins/SpaceRuins/spacemall.dmm
+++ b/_maps/RandomRuins/SpaceRuins/spacemall.dmm
@@ -2809,10 +2809,9 @@
/obj/item/clothing/head/collectable/chef,
/obj/item/clothing/head/collectable/HoP,
/obj/item/clothing/head/collectable/rabbitears,
-/obj/item/clothing/head/helmet/chaplain,
+/obj/item/clothing/head/witchunter,
/obj/item/clothing/neck/cloak/trans,
/obj/item/clothing/neck/cloak/cap,
-/obj/item/clothing/head/helmet/chaplain/witchunter_hat,
/obj/item/clothing/neck/beads,
/obj/item/clothing/neck/necklace/dope,
/obj/item/clothing/neck/stripedredscarf,
diff --git a/_maps/RandomRuins/WasteRuins/wasteplanet_pandora.dmm b/_maps/RandomRuins/WasteRuins/wasteplanet_pandora.dmm
index a880d2947ae2..207d91d4219a 100644
--- a/_maps/RandomRuins/WasteRuins/wasteplanet_pandora.dmm
+++ b/_maps/RandomRuins/WasteRuins/wasteplanet_pandora.dmm
@@ -424,7 +424,7 @@
"qo" = (
/obj/structure/closet/cabinet,
/obj/item/spear/bonespear,
-/obj/item/clothing/suit/armor/riot/chaplain/studentuni,
+/obj/item/clothing/suit/armor/witchhunter,
/obj/item/reagent_containers/food/snacks/grown/berries/death,
/turf/open/floor/wood/waste,
/area/ruin/wasteplanet)
@@ -461,7 +461,7 @@
/area/ruin/wasteplanet)
"qU" = (
/obj/structure/closet/cabinet,
-/obj/item/clothing/suit/armor/riot/chaplain/studentuni,
+/obj/item/clothing/suit/armor/witchhunter,
/turf/open/floor/wood/waste,
/area/ruin/wasteplanet)
"rh" = (
@@ -492,7 +492,7 @@
"sV" = (
/obj/structure/closet/cabinet,
/obj/item/claymore/bone,
-/obj/item/clothing/suit/armor/riot/chaplain/studentuni,
+/obj/item/clothing/suit/armor/witchhunter,
/turf/open/floor/wood/waste,
/area/ruin/wasteplanet)
"tB" = (
diff --git a/_maps/configs/syndicate_gorlex_komodo.json b/_maps/configs/syndicate_gorlex_komodo.json
index 73ce92630014..2bc7a358b754 100644
--- a/_maps/configs/syndicate_gorlex_komodo.json
+++ b/_maps/configs/syndicate_gorlex_komodo.json
@@ -33,7 +33,7 @@
"slots": 1
},
"Mechanic": {
- "outfit": "/datum/outfit/job/syndicate/miner/gorlex",
+ "outfit": "/datum/outfit/job/syndicate/engineer/gorlex",
"slots": 1
},
"Trooper": {
@@ -45,7 +45,7 @@
"slots": 2
},
"Bridge Officer": {
- "outfit": "/datum/outfit/job/syndicate/head_of_personnel",
+ "outfit": "/datum/outfit/job/syndicate/head_of_personnel/cybersun",
"slots": 1
}
},
diff --git a/_maps/shuttles/roumain/srm_elder.dmm b/_maps/shuttles/roumain/srm_elder.dmm
index 0fdb4827655a..5ea4e25b4687 100644
--- a/_maps/shuttles/roumain/srm_elder.dmm
+++ b/_maps/shuttles/roumain/srm_elder.dmm
@@ -2617,7 +2617,7 @@
/obj/item/clothing/under/suit/roumain,
/obj/item/clothing/suit/armor/roumain,
/obj/item/clothing/head/cowboy/sec/roumain,
-/obj/item/clothing/suit/armor/riot/chaplain/witchhunter,
+/obj/item/clothing/suit/armor/witchhunter,
/obj/item/flashlight/lantern,
/obj/structure/closet/secure_closet/hunter,
/obj/item/lighter,
diff --git a/_maps/shuttles/syndicate/syndicate_gorlex_komodo.dmm b/_maps/shuttles/syndicate/syndicate_gorlex_komodo.dmm
index fc7e7a029b82..445b6391a30d 100644
--- a/_maps/shuttles/syndicate/syndicate_gorlex_komodo.dmm
+++ b/_maps/shuttles/syndicate/syndicate_gorlex_komodo.dmm
@@ -188,17 +188,16 @@
/turf/open/floor/plating/rust,
/area/ship/maintenance/starboard)
"dD" = (
-/obj/item/clothing/shoes/jackboots,
/obj/item/clothing/mask/gas/syndicate,
/obj/effect/turf_decal/techfloor{
dir = 10
},
-/obj/item/clothing/head/beret/black,
-/obj/item/clothing/under/syndicate,
/obj/structure/closet/syndicate{
desc = "It's a basic storage unit.";
name = "uniform closet"
},
+/obj/item/clothing/shoes/combat,
+/obj/item/clothing/under/syndicate/hardliners,
/turf/open/floor/mineral/plastitanium,
/area/ship/hallway/central)
"dG" = (
@@ -372,21 +371,21 @@
pixel_x = -12;
pixel_y = 7
},
-/obj/item/clothing/under/syndicate/sniper,
/obj/item/clothing/shoes/combat,
/obj/item/clothing/mask/gas/syndicate,
-/obj/item/clothing/suit/armor/vest/duster,
/obj/structure/closet/secure_closet/wall/directional/south{
icon_state = "sec_wall";
name = "Bridge Officer's Locker";
req_access_txt = "57"
},
/obj/item/melee/classic_baton/telescopic,
-/obj/item/clothing/neck/chameleon,
/obj/item/radio/headset/syndicate,
/obj/item/megaphone{
pixel_x = -2
},
+/obj/item/clothing/under/syndicate/cybersun/officer,
+/obj/item/clothing/suit/cybersun_suit,
+/obj/item/clothing/head/HoS/cybersun,
/turf/open/floor/plasteel/dark,
/area/ship/bridge)
"eN" = (
@@ -653,12 +652,10 @@
dir = 1;
layer = 2.8
},
-/obj/item/clothing/shoes/jackboots,
/obj/item/clothing/mask/gas/syndicate,
/obj/effect/turf_decal/techfloor{
dir = 8
},
-/obj/item/clothing/under/syndicate,
/obj/structure/closet/syndicate{
desc = "It's a basic storage unit.";
name = "uniform closet"
@@ -668,6 +665,8 @@
pixel_x = -23;
pixel_y = 4
},
+/obj/item/clothing/shoes/combat,
+/obj/item/clothing/under/syndicate/hardliners,
/turf/open/floor/mineral/plastitanium,
/area/ship/hallway/central)
"hk" = (
@@ -1156,8 +1155,6 @@
/obj/structure/closet/wall/orange/directional/south{
name = "Engineering locker"
},
-/obj/item/clothing/under/syndicate/coldres,
-/obj/item/clothing/suit/toggle/industrial,
/obj/item/clothing/shoes/workboots,
/obj/item/clothing/head/welding,
/obj/item/clothing/head/hardhat/red,
@@ -1174,6 +1171,8 @@
/obj/structure/cable{
icon_state = "1-4"
},
+/obj/item/clothing/under/syndicate/hardliners,
+/obj/item/clothing/suit/hazardvest/hardliners,
/turf/open/floor/plasteel/tech,
/area/ship/engineering)
"ls" = (
@@ -2880,11 +2879,6 @@
/obj/item/ammo_box/magazine/m10mm,
/obj/item/ammo_box/c10mm,
/obj/item/clothing/gloves/tackler/combat/insulated,
-/obj/item/clothing/suit/armor/vest/leather{
- desc = "Lightly armored leather overcoat meant as casual wear for high-ranking officers. Bears the crest of the Gorlex Marauders."
- },
-/obj/item/clothing/mask/gas/sechailer/swat,
-/obj/item/clothing/head/HoS/beret/syndicate,
/obj/structure/closet/secure_closet/wall/directional/west{
icon_state = "sec_wall";
name = "Sergeant's Locker";
@@ -2892,11 +2886,12 @@
},
/obj/item/melee/classic_baton/telescopic,
/obj/item/clothing/suit/armor/vest/blueshirt,
-/obj/item/clothing/under/syndicate/combat,
-/obj/item/clothing/under/syndicate,
/obj/item/clothing/accessory/holster,
/obj/item/clothing/shoes/combat,
/obj/item/radio/headset/syndicate,
+/obj/item/clothing/under/syndicate/hardliners/officer,
+/obj/item/clothing/suit/armor/hardliners/sergeant,
+/obj/item/clothing/head/hardliners/peaked,
/turf/open/floor/plasteel/dark,
/area/ship/bridge)
"AS" = (
@@ -3124,18 +3119,17 @@
name = "captain's locker";
req_access_txt = "20"
},
-/obj/item/clothing/under/syndicate/combat,
-/obj/item/clothing/suit/armor/vest/capcarapace/syndicate,
/obj/item/clothing/gloves/krav_maga/combatglovesplus,
-/obj/item/clothing/shoes/jackboots,
/obj/item/clothing/glasses/thermal/eyepatch,
-/obj/item/clothing/head/HoS/beret/syndicate,
-/obj/item/clothing/head/HoS/syndicate,
/obj/item/gun/ballistic/revolver,
/obj/item/clothing/under/syndicate/sniper,
/obj/item/ammo_box/a357,
/obj/item/ammo_box/a357,
/obj/item/radio/headset/syndicate/alt/leader,
+/obj/item/clothing/shoes/combat,
+/obj/item/clothing/under/syndicate/hardliners/officer,
+/obj/item/clothing/suit/toggle/armor/vest/hardliners,
+/obj/item/clothing/head/hardliners/peaked,
/turf/open/floor/carpet/black,
/area/ship/bridge)
"El" = (
@@ -3347,7 +3341,6 @@
},
/area/ship/maintenance/starboard)
"GD" = (
-/obj/item/clothing/shoes/jackboots,
/obj/item/clothing/mask/gas/syndicate,
/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{
dir = 4
@@ -3356,11 +3349,12 @@
dir = 9
},
/obj/item/clothing/mask/balaclava,
-/obj/item/clothing/under/syndicate/gorlex,
/obj/structure/closet/syndicate{
desc = "It's a basic storage unit.";
name = "uniform closet"
},
+/obj/item/clothing/shoes/combat,
+/obj/item/clothing/under/syndicate/hardliners,
/turf/open/floor/mineral/plastitanium,
/area/ship/hallway/central)
"GJ" = (
@@ -3845,7 +3839,6 @@
/turf/open/floor/mineral/plastitanium,
/area/ship/hallway/aft)
"Lb" = (
-/obj/item/clothing/shoes/jackboots,
/obj/item/clothing/neck/scarf/red,
/obj/item/clothing/mask/bandana/skull,
/obj/item/clothing/mask/gas/syndicate,
@@ -3855,11 +3848,12 @@
/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{
dir = 4
},
-/obj/item/clothing/under/utility,
/obj/structure/closet/syndicate{
desc = "It's a basic storage unit.";
name = "uniform closet"
},
+/obj/item/clothing/shoes/combat,
+/obj/item/clothing/under/syndicate/hardliners/jumpsuit,
/turf/open/floor/mineral/plastitanium,
/area/ship/hallway/central)
"Lj" = (
@@ -4064,21 +4058,16 @@
/obj/effect/turf_decal/techfloor{
dir = 9
},
-/obj/item/clothing/under/syndicate/skirt,
/obj/structure/closet/syndicate{
desc = "It's a basic storage unit.";
name = "uniform closet"
},
+/obj/item/clothing/shoes/combat,
+/obj/item/clothing/under/syndicate/hardliners/jumpsuit,
/turf/open/floor/mineral/plastitanium,
/area/ship/hallway/central)
"Ni" = (
/obj/effect/turf_decal/industrial/warning,
-/obj/item/clothing/suit/armor/vest/syndie,
-/obj/item/clothing/suit/armor/vest/syndie,
-/obj/item/clothing/suit/armor/vest/syndie,
-/obj/item/clothing/head/helmet/operator,
-/obj/item/clothing/head/helmet/operator,
-/obj/item/clothing/head/helmet/operator,
/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{
dir = 4
},
@@ -4090,9 +4079,21 @@
name = "Armor Locker";
req_access_txt = "1"
},
-/obj/item/storage/belt/military,
-/obj/item/storage/belt/military,
-/obj/item/storage/belt/military,
+/obj/item/clothing/suit/armor/hardliners/jacket,
+/obj/item/clothing/suit/armor/hardliners/jacket,
+/obj/item/clothing/suit/armor/hardliners/jacket,
+/obj/item/clothing/suit/armor/hardliners,
+/obj/item/clothing/suit/armor/hardliners,
+/obj/item/clothing/suit/armor/hardliners,
+/obj/item/clothing/head/helmet/hardliners,
+/obj/item/clothing/head/helmet/hardliners,
+/obj/item/clothing/head/helmet/hardliners,
+/obj/item/storage/belt/security/webbing/hardliners,
+/obj/item/storage/belt/security/webbing/hardliners,
+/obj/item/storage/belt/security/webbing/hardliners,
+/obj/item/clothing/glasses/hud/security/sunglasses/hardliners,
+/obj/item/clothing/glasses/hud/security/sunglasses/hardliners,
+/obj/item/clothing/glasses/hud/security/sunglasses/hardliners,
/turf/open/floor/mineral/plastitanium/red,
/area/ship/security/armory)
"Nj" = (
@@ -4271,7 +4272,6 @@
/turf/open/floor/plasteel/telecomms_floor,
/area/ship/cargo)
"PE" = (
-/obj/structure/chair/comfy,
/obj/effect/decal/cleanable/dirt/dust,
/obj/effect/turf_decal/trimline/transparent/bar/filled/line{
dir = 8
@@ -4281,6 +4281,7 @@
pixel_y = -1
},
/obj/machinery/airalarm/directional/west,
+/obj/structure/chair/comfy/red,
/turf/open/floor/mineral/plastitanium,
/area/ship/crew/canteen)
"PG" = (
@@ -5096,17 +5097,17 @@
/area/ship/hallway/central)
"WQ" = (
/obj/structure/railing,
-/obj/item/clothing/shoes/jackboots,
/obj/item/clothing/mask/gas/syndicate,
/obj/effect/turf_decal/techfloor{
dir = 8
},
/obj/item/clothing/mask/balaclava,
-/obj/item/clothing/under/syndicate/gorlex,
/obj/structure/closet/syndicate{
desc = "It's a basic storage unit.";
name = "uniform closet"
},
+/obj/item/clothing/shoes/combat,
+/obj/item/clothing/under/syndicate/hardliners,
/turf/open/floor/mineral/plastitanium,
/area/ship/hallway/central)
"WR" = (
@@ -5426,12 +5427,8 @@
/obj/structure/cable{
icon_state = "1-8"
},
-/obj/item/clothing/under/utility,
/obj/item/clothing/suit/longcoat/roboblack,
-/obj/item/clothing/suit/apron/surgical,
-/obj/item/clothing/neck/stethoscope,
/obj/item/clothing/mask/surgical,
-/obj/item/clothing/head/beret/black,
/obj/item/clothing/gloves/color/latex/nitrile/evil{
pixel_x = 1;
pixel_y = -3
@@ -5442,6 +5439,9 @@
pixel_x = -3;
pixel_y = 3
},
+/obj/item/clothing/suit/hardliners,
+/obj/item/clothing/head/hardliners,
+/obj/item/clothing/under/syndicate/hardliners,
/turf/open/floor/mineral/plastitanium,
/area/ship/medical)
"Zy" = (
diff --git a/check_regex.yaml b/check_regex.yaml
index e01c41995e8e..d03e15391975 100644
--- a/check_regex.yaml
+++ b/check_regex.yaml
@@ -38,7 +38,7 @@ standards:
- exactly:
[
- 268,
+ 265,
"non-bitwise << uses",
'(?A selection has already been made. Self-Destructing...")
- return
-
-
/obj/item/storage/box/holy
- name = "Templar Kit"
-
-/obj/item/storage/box/holy/PopulateContents()
- new /obj/item/clothing/head/helmet/chaplain(src)
- new /obj/item/clothing/suit/armor/riot/chaplain(src)
-
-/obj/item/storage/box/holy/student
- name = "Profane Scholar Kit"
-
-/obj/item/storage/box/holy/student/PopulateContents()
- new /obj/item/clothing/suit/armor/riot/chaplain/studentuni(src)
- new /obj/item/clothing/head/helmet/chaplain/cage(src)
-
-/obj/item/clothing/suit/armor/riot/chaplain/studentuni
- name = "student robe"
- desc = "The uniform of a bygone institute of learning."
- icon_state = "chaplain_studentuni"
- item_state = "studentuni"
- body_parts_covered = ARMS|CHEST
- allowed = list(/obj/item/storage/book/bible, /obj/item/nullrod, /obj/item/reagent_containers/food/drinks/bottle/holywater, /obj/item/storage/fancy/candle_box, /obj/item/candle, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman)
-
-/obj/item/clothing/head/helmet/chaplain/cage
- name = "cage"
- desc = "A cage that restrains the will of the self, allowing one to see the profane world for what it is."
- flags_inv = HIDEHAIR //bald
- mob_overlay_icon = 'icons/mob/large-worn-icons/64x64/head.dmi'
- icon_state = "cage"
- item_state = "cage"
- worn_x_dimension = 64
- worn_y_dimension = 64
-
-/obj/item/storage/box/holy/sentinel
- name = "Stone Sentinel Kit"
-
-/obj/item/storage/box/holy/sentinel/PopulateContents()
- new /obj/item/clothing/suit/armor/riot/chaplain/ancient(src)
- new /obj/item/clothing/head/helmet/chaplain/ancient(src)
-
-/obj/item/clothing/head/helmet/chaplain/ancient
- name = "ancient helmet"
- desc = "None may pass!"
- icon_state = "knight_ancient"
- item_state = "knight_ancient"
-
-/obj/item/clothing/suit/armor/riot/chaplain/ancient
- name = "ancient armour"
- desc = "Defend the treasure..."
- icon_state = "chaplain_ancient"
- item_state = "knight_ancient"
-
-/obj/item/storage/box/holy/witchhunter
name = "Witchhunter Kit"
-/obj/item/storage/box/holy/witchhunter/PopulateContents()
- new /obj/item/clothing/suit/armor/riot/chaplain/witchhunter(src)
- new /obj/item/clothing/head/helmet/chaplain/witchunter_hat(src)
-
-/obj/item/clothing/suit/armor/riot/chaplain/witchhunter
- name = "witchunter garb"
- desc = "This worn outfit saw much use back in the day."
- icon_state = "chaplain_witchhunter"
- item_state = "witchhunter"
- body_parts_covered = CHEST|GROIN|LEGS|ARMS
-
-/obj/item/clothing/head/helmet/chaplain/witchunter_hat
- name = "witchunter hat"
- desc = "This hat saw much use back in the day."
- icon_state = "witchhunterhat"
- item_state = "witchhunterhat"
- flags_cover = HEADCOVERSEYES
- flags_inv = HIDEEYES|HIDEHAIR
-
-/obj/item/storage/box/holy/adept
- name = "Divine Adept Kit"
-
-/obj/item/storage/box/holy/adept/PopulateContents()
- new /obj/item/clothing/suit/armor/riot/chaplain/adept(src)
- new /obj/item/clothing/head/helmet/chaplain/adept(src)
-
-/obj/item/clothing/head/helmet/chaplain/adept
- name = "adept hood"
- desc = "Its only heretical when others do it."
- icon_state = "crusader"
- item_state = "crusader"
- flags_cover = HEADCOVERSEYES
- flags_inv = HIDEHAIR|HIDEFACE|HIDEEARS
+/obj/item/storage/box/holy/PopulateContents()
+ new /obj/item/clothing/head/witchunter(src)
+ new /obj/item/clothing/suit/armor/witchhunter(src)
-/obj/item/clothing/suit/armor/riot/chaplain/adept
- name = "adept robes"
- desc = "The ideal outfit for burning the unfaithful."
- icon_state = "chaplain_crusader"
- item_state = "crusader"
/obj/item/storage/box/holy/follower
name = "Followers of the Chaplain Kit"
@@ -203,62 +65,6 @@
var/reskinned = FALSE
var/chaplain_spawnable = TRUE
-/obj/item/nullrod/Initialize()
- . = ..()
- AddComponent(/datum/component/anti_magic, TRUE, TRUE, FALSE, null, null, FALSE)
-
-/obj/item/nullrod/attack_self(mob/user)
- if(user.mind && (user.mind.holy_role) && !reskinned)
- reskin_holy_weapon(user)
-
-/**
- * reskin_holy_weapon: Shows a user a list of all available nullrod reskins and based on his choice replaces the nullrod with the reskinned version
- *
- * Arguments:
- * * M The mob choosing a nullrod reskin
- */
-/obj/item/nullrod/proc/reskin_holy_weapon(mob/M)
- if(GLOB.holy_weapon_type)
- return
- var/list/display_names = list()
- var/list/nullrod_icons = list()
- for(var/V in typesof(/obj/item/nullrod))
- var/obj/item/nullrod/rodtype = V
- if(initial(rodtype.chaplain_spawnable))
- display_names[initial(rodtype.name)] = rodtype
- nullrod_icons += list(initial(rodtype.name) = image(icon = initial(rodtype.icon), icon_state = initial(rodtype.icon_state)))
-
- nullrod_icons = sortList(nullrod_icons)
- var/choice = show_radial_menu(M, src , nullrod_icons, custom_check = CALLBACK(src, PROC_REF(check_menu), M), radius = 42, require_near = TRUE)
- if(!choice || !check_menu(M))
- return
-
- var/A = display_names[choice] // This needs to be on a separate var as list member access is not allowed for new
- var/obj/item/nullrod/holy_weapon = new A
- GLOB.holy_weapon_type = holy_weapon.type
-
- SSblackbox.record_feedback("tally", "chaplain_weapon", 1, "[choice]")
-
- if(holy_weapon)
- holy_weapon.reskinned = TRUE
- qdel(src)
- M.put_in_active_hand(holy_weapon)
-
-/**
- * check_menu: Checks if we are allowed to interact with a radial menu
- *
- * Arguments:
- * * user The mob interacting with a menu
- */
-/obj/item/nullrod/proc/check_menu(mob/user)
- if(!istype(user))
- return FALSE
- if(QDELETED(src) || reskinned)
- return FALSE
- if(user.incapacitated() || !user.is_holding(src))
- return FALSE
- return TRUE
-
/obj/item/nullrod/godhand
icon_state = "disintegrate"
item_state = "disintegrate"
@@ -648,13 +454,6 @@
hitsound = 'sound/weapons/bite.ogg'
var/used_blessing = FALSE
-/obj/item/nullrod/carp/attack_self(mob/living/user)
- if(used_blessing)
- else if(user.mind && (user.mind.holy_role))
- to_chat(user, "You are blessed by Carp-Sie. Wild space carp will no longer attack you.")
- user.faction |= "carp"
- used_blessing = TRUE
-
/obj/item/nullrod/claymore/bostaff //May as well make it a "claymore" and inherit the blocking
name = "monk's staff"
desc = "A long, tall staff made of polished wood. Traditionally used in ancient old-Earth martial arts, it is now used to harass the clown."
diff --git a/code/game/objects/items/storage/book.dm b/code/game/objects/items/storage/book.dm
index 45fee1d67660..67dba503642d 100644
--- a/code/game/objects/items/storage/book.dm
+++ b/code/game/objects/items/storage/book.dm
@@ -1,3 +1,10 @@
+//need to refactor this.
+GLOBAL_LIST_INIT(biblenames, list("Bible", "Quran", "Scrapbook", "Burning Bible", "Clown Bible", "Banana Bible", "Creeper Bible", "White Bible", "Holy Light", "The God Delusion", "Tome", "The King in Yellow", "Ithaqua", "Scientology", "Melted Bible", "Necronomicon", "Insulationism", "Guru Granth Sahib"))
+//If you get these two lists not matching in size, there will be runtimes and I will hurt you in ways you couldn't even begin to imagine
+// if your bible has no custom itemstate, use one of the existing ones
+GLOBAL_LIST_INIT(biblestates, list("bible", "koran", "scrapbook", "burning", "honk1", "honk2", "creeper", "white", "holylight", "atheist", "tome", "kingyellow", "ithaqua", "scientology", "melted", "necronomicon", "insuls", "gurugranthsahib"))
+GLOBAL_LIST_INIT(bibleitemstates, list("bible", "koran", "scrapbook", "burning", "honk1", "honk2", "creeper", "white", "holylight", "atheist", "tome", "kingyellow", "ithaqua", "scientology", "melted", "necronomicon", "kingyellow", "gurugranthsahib"))
+
/obj/item/storage/book
name = "hollowed book"
desc = "I guess someone didn't like it."
@@ -17,18 +24,6 @@
/obj/item/storage/book/attack_self(mob/user)
to_chat(user, "The pages of [title] have been cut out!")
-GLOBAL_LIST_INIT(biblenames, list("Bible", "Quran", "Scrapbook", "Burning Bible", "Clown Bible", "Banana Bible", "Creeper Bible", "White Bible", "Holy Light", "The God Delusion", "Tome", "The King in Yellow", "Ithaqua", "Scientology", "Melted Bible", "Necronomicon", "Insulationism", "Guru Granth Sahib"))
-//If you get these two lists not matching in size, there will be runtimes and I will hurt you in ways you couldn't even begin to imagine
-// if your bible has no custom itemstate, use one of the existing ones
-GLOBAL_LIST_INIT(biblestates, list("bible", "koran", "scrapbook", "burning", "honk1", "honk2", "creeper", "white", "holylight", "atheist", "tome", "kingyellow", "ithaqua", "scientology", "melted", "necronomicon", "insuls", "gurugranthsahib"))
-GLOBAL_LIST_INIT(bibleitemstates, list("bible", "koran", "scrapbook", "burning", "honk1", "honk2", "creeper", "white", "holylight", "atheist", "tome", "kingyellow", "ithaqua", "scientology", "melted", "necronomicon", "kingyellow", "gurugranthsahib"))
-
-/mob/proc/bible_check() //The bible, if held, might protect against certain things
- var/obj/item/storage/book/bible/B = locate() in src
- if(is_holding(B))
- return B
- return 0
-
/obj/item/storage/book/bible
name = "bible"
desc = "Apply to head repeatedly."
@@ -41,205 +36,6 @@ GLOBAL_LIST_INIT(bibleitemstates, list("bible", "koran", "scrapbook", "burning",
var/deity_name = "Christ"
force_string = "holy"
-/obj/item/storage/book/bible/Initialize()
- . = ..()
- AddComponent(/datum/component/anti_magic, FALSE, TRUE)
-
-/obj/item/storage/book/bible/attack_self(mob/living/carbon/human/H)
- if(!istype(H))
- return
- if(!H.can_read(src))
- return FALSE
- // If H is the Chaplain, we can set the icon_state of the bible (but only once!)
- if(!GLOB.bible_icon_state && H.mind.holy_role == HOLY_ROLE_HIGHPRIEST)
- var/dat = "
Pick Bible StylePick a bible style
"
- for(var/i in 1 to GLOB.biblestates.len)
- var/icon/bibleicon = icon('icons/obj/storage.dmi', GLOB.biblestates[i])
- var/nicename = GLOB.biblenames[i]
- H << browse_rsc(bibleicon, nicename)
- dat += {" | [nicename] |
"}
- dat += "
"
- H << browse(dat, "window=editicon;can_close=0;can_minimize=0;size=250x650")
-
-/obj/item/storage/book/bible/Topic(href, href_list)
- if(!usr.canUseTopic(src, BE_CLOSE))
- return
- if(href_list["seticon"] && !GLOB.bible_icon_state)
- var/iconi = text2num(href_list["seticon"])
- var/biblename = GLOB.biblenames[iconi]
- icon_state = GLOB.biblestates[iconi]
- item_state = GLOB.bibleitemstates[iconi]
-
- if(icon_state == "honk1" || icon_state == "honk2")
- var/mob/living/carbon/human/H = usr
- H.dna.add_mutation(CLOWNMUT)
- H.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/clown_hat(H), ITEM_SLOT_MASK)
- if(icon_state == "insuls")
- var/mob/living/carbon/human/H =usr
- var/obj/item/clothing/gloves/color/fyellow/insuls = new
- insuls.name = "insuls"
- insuls.desc = "A mere copy of the true insuls."
- insuls.siemens_coefficient = 0.99999
- H.equip_to_slot(insuls, ITEM_SLOT_GLOVES)
- GLOB.bible_icon_state = icon_state
- GLOB.bible_item_state = item_state
-
- SSblackbox.record_feedback("text", "religion_book", 1, "[biblename]")
- usr << browse(null, "window=editicon")
-
-/obj/item/storage/book/bible/proc/bless(mob/living/L, mob/living/user)
- if(GLOB.religious_sect)
- return GLOB.religious_sect.sect_bless(L,user)
- if(!ishuman(L))
- return
- var/mob/living/carbon/human/H = L
- for(var/X in H.bodyparts)
- var/obj/item/bodypart/BP = X
- if(!IS_ORGANIC_LIMB(BP))
- to_chat(user, "[src.deity_name] refuses to heal this metallic taint!")
- return 0
-
- var/heal_amt = 10
- var/list/hurt_limbs = H.get_damaged_bodyparts(1, 1, null, BODYTYPE_ORGANIC)
-
- if(hurt_limbs.len)
- for(var/X in hurt_limbs)
- var/obj/item/bodypart/affecting = X
- if(affecting.heal_damage(heal_amt, heal_amt, null, BODYTYPE_ORGANIC))
- H.update_damage_overlays()
- H.visible_message("[user] heals [H] with the power of [deity_name]!")
- to_chat(H, "May the power of [deity_name] compel you to be healed!")
- playsound(src.loc, "punch", 25, TRUE, -1)
- SEND_SIGNAL(H, COMSIG_ADD_MOOD_EVENT, "blessing", /datum/mood_event/blessing)
- return 1
-
-/obj/item/storage/book/bible/attack(mob/living/M, mob/living/carbon/human/user, heal_mode = TRUE)
-
- if (!user.IsAdvancedToolUser())
- to_chat(user, "You don't have the dexterity to do this!")
- return
-
- if (HAS_TRAIT(user, TRAIT_CLUMSY) && prob(50))
- to_chat(user, "[src] slips out of your hand and hits your head.")
- user.take_bodypart_damage(10)
- user.Unconscious(400)
- return
-
- var/chaplain = 0
- if(user.mind && (user.mind.holy_role))
- chaplain = 1
-
- if(!chaplain)
- to_chat(user, "The book sizzles in your hands.")
- user.take_bodypart_damage(0,10)
- return
-
- if (!heal_mode)
- return ..()
-
- var/smack = 1
-
- if (M.stat != DEAD)
- if(chaplain && user == M)
- to_chat(user, "You can't heal yourself!")
- return
-
- if(prob(60) && bless(M, user))
- smack = 0
- else if(iscarbon(M))
- var/mob/living/carbon/C = M
- if(!istype(C.head, /obj/item/clothing/head/helmet))
- C.adjustOrganLoss(ORGAN_SLOT_BRAIN, 5, 60)
- to_chat(C, "You feel dumber.")
-
- if(smack)
- M.visible_message("[user] beats [M] over the head with [src]!", \
- "[user] beats [M] over the head with [src]!")
- playsound(src.loc, "punch", 25, TRUE, -1)
- log_combat(user, M, "attacked", src)
-
- else
- M.visible_message("[user] smacks [M]'s lifeless corpse with [src].")
- playsound(src.loc, "punch", 25, TRUE, -1)
-
-/obj/item/storage/book/bible/afterattack(atom/A, mob/user, proximity)
- . = ..()
- if(!proximity)
- return
- if(isfloorturf(A))
- to_chat(user, "You hit the floor with the bible.")
- if(user.mind && (user.mind.holy_role))
- for(var/obj/effect/rune/R in orange(2,user))
- R.invisibility = 0
- if(user?.mind?.holy_role)
- if(A.reagents && A.reagents.has_reagent(/datum/reagent/water)) // blesses all the water in the holder
- to_chat(user, "You bless [A].")
- var/water2holy = A.reagents.get_reagent_amount(/datum/reagent/water)
- A.reagents.del_reagent(/datum/reagent/water)
- A.reagents.add_reagent(/datum/reagent/water/holywater,water2holy)
- if(A.reagents && A.reagents.has_reagent(/datum/reagent/fuel/unholywater)) // yeah yeah, copy pasted code - sue me
- to_chat(user, "You purify [A].")
- var/unholy2clean = A.reagents.get_reagent_amount(/datum/reagent/fuel/unholywater)
- A.reagents.del_reagent(/datum/reagent/fuel/unholywater)
- A.reagents.add_reagent(/datum/reagent/water/holywater,unholy2clean)
- if(istype(A, /obj/item/storage/book/bible) && !istype(A, /obj/item/storage/book/bible/syndicate))
- to_chat(user, "You purify [A], conforming it to your belief.")
- var/obj/item/storage/book/bible/B = A
- B.name = name
- B.icon_state = icon_state
- B.item_state = item_state
- if(istype(A, /obj/item/cult_bastard) && !iscultist(user))
- var/obj/item/cult_bastard/sword = A
- to_chat(user, "You begin to exorcise [sword].")
- playsound(src,'sound/hallucinations/veryfar_noise.ogg',40,TRUE)
- if(do_after(user, 40, target = sword))
- playsound(src,'sound/effects/pray_chaplain.ogg',60,TRUE)
- for(var/obj/item/soulstone/SS in sword.contents)
- SS.usability = TRUE
- for(var/mob/living/simple_animal/shade/EX in SS)
- SSticker.mode.remove_cultist(EX.mind, 1, 0)
- EX.icon_state = "ghost1"
- EX.name = "Purified [EX.name]"
- SS.release_shades(user)
- qdel(SS)
- new /obj/item/nullrod/claymore(get_turf(sword))
- user.visible_message("[user] purifies [sword]!")
- qdel(sword)
- else if(istype(A, /obj/item/soulstone) && !iscultist(user))
- var/obj/item/soulstone/SS = A
- if(SS.purified)
- return
- to_chat(user, "You begin to exorcise [SS].")
- playsound(src,'sound/hallucinations/veryfar_noise.ogg',40,TRUE)
- if(do_after(user, 40, target = SS))
- playsound(src,'sound/effects/pray_chaplain.ogg',60,TRUE)
- SS.usability = TRUE
- SS.purified = TRUE
- SS.icon_state = "purified_soulstone"
- for(var/mob/M in SS.contents)
- if(M.mind)
- SS.icon_state = "purified_soulstone2"
- if(iscultist(M))
- SSticker.mode.remove_cultist(M.mind, FALSE, FALSE)
- for(var/mob/living/simple_animal/shade/EX in SS)
- EX.icon_state = "ghost1"
- EX.name = "Purified [initial(EX.name)]"
- user.visible_message("[user] purifies [SS]!")
- else if(istype(A, /obj/item/nullrod/scythe/talking))
- var/obj/item/nullrod/scythe/talking/sword = A
- to_chat(user, "You begin to exorcise [sword]...")
- playsound(src,'sound/hallucinations/veryfar_noise.ogg',40,TRUE)
- if(do_after(user, 40, target = sword))
- playsound(src,'sound/effects/pray_chaplain.ogg',60,TRUE)
- for(var/mob/living/simple_animal/shade/S in sword.contents)
- to_chat(S, "You were destroyed by the exorcism!")
- qdel(S)
- sword.possessed = FALSE //allows the chaplain (or someone else) to reroll a new spirit for their sword
- sword.name = initial(sword.name)
- REMOVE_TRAIT(sword, TRAIT_NODROP, HAND_REPLACEMENT_TRAIT) //in case the "sword" is a possessed dummy
- user.visible_message("[user] exorcises [sword]!", \
- "You successfully exorcise [sword]!")
-
/obj/item/storage/book/bible/koran
name = "Koran"
icon_state = "koran"
@@ -253,34 +49,6 @@ GLOBAL_LIST_INIT(bibleitemstates, list("bible", "koran", "scrapbook", "burning",
new /obj/item/reagent_containers/food/drinks/bottle/whiskey(src)
/obj/item/storage/book/bible/syndicate
+ name = "Syndicate Tome"
icon_state ="ebook"
deity_name = "The Syndicate"
- throw_speed = 2
- throwforce = 18
- throw_range = 7
- force = 18
- hitsound = 'sound/weapons/sear.ogg'
- damtype = BURN
- name = "Syndicate Tome"
- attack_verb = list("attacked", "burned", "blessed", "damned", "scorched")
- var/uses = 1
-
-/obj/item/storage/book/bible/syndicate/attack_self(mob/living/carbon/human/H)
- if (uses)
- H.mind.holy_role = HOLY_ROLE_PRIEST
- uses -= 1
- to_chat(H, "You try to open the book AND IT BITES YOU!")
- playsound(src.loc, 'sound/effects/snap.ogg', 50, TRUE)
- H.apply_damage(5, BRUTE, pick(BODY_ZONE_L_ARM, BODY_ZONE_R_ARM))
- to_chat(H, "Your name appears on the inside cover, in blood.")
- var/ownername = H.real_name
- desc += "The name [ownername] is written in blood inside the cover."
-
-/obj/item/storage/book/bible/syndicate/attack(mob/living/M, mob/living/carbon/human/user, heal_mode = TRUE)
- if (user.a_intent == INTENT_HELP)
- return ..()
- else
- return ..(M,user,heal_mode = FALSE)
-
-/obj/item/storage/book/bible/syndicate/add_blood_DNA(list/blood_dna)
- return FALSE
diff --git a/code/game/objects/items/storage/boxes.dm b/code/game/objects/items/storage/boxes.dm
index 3cd1e72192ee..8aa7b1d9c478 100644
--- a/code/game/objects/items/storage/boxes.dm
+++ b/code/game/objects/items/storage/boxes.dm
@@ -856,6 +856,16 @@
for(var/i in 1 to 7)
new /obj/item/ammo_casing/shotgun/buckshot(src)
+/obj/item/storage/box/techshot
+ name = "box of unloaded shotgun tech shells"
+ desc = "A box full of unloaded tech shells, capable of producing a variety of effects once loaded."
+ icon_state = "techshot_box"
+ illustration = null
+
+/obj/item/storage/box/techshot/PopulateContents()
+ for(var/i in 1 to 7)
+ new /obj/item/ammo_casing/shotgun/techshell(src)
+
/obj/item/storage/box/beanbag
name = "box of beanbags"
desc = "A box full of beanbag shells."
diff --git a/code/game/objects/structures/crates_lockers/closets/job_closets.dm b/code/game/objects/structures/crates_lockers/closets/job_closets.dm
index 0e65a5aeb760..dac919bb428c 100644
--- a/code/game/objects/structures/crates_lockers/closets/job_closets.dm
+++ b/code/game/objects/structures/crates_lockers/closets/job_closets.dm
@@ -98,7 +98,7 @@
icon_door = "black"
/obj/structure/closet/wardrobe/chaplain_black/PopulateContents()
- new /obj/item/choice_beacon/holy(src)
+ new /obj/item/storage/box/holy(src)
new /obj/item/clothing/accessory/pocketprotector/cosmetology(src)
new /obj/item/clothing/under/rank/civilian/chaplain(src)
new /obj/item/clothing/shoes/sneakers/black(src)
diff --git a/code/modules/antagonists/cult/runes.dm b/code/modules/antagonists/cult/runes.dm
index 7355880e6da1..5058dc73f081 100644
--- a/code/modules/antagonists/cult/runes.dm
+++ b/code/modules/antagonists/cult/runes.dm
@@ -61,10 +61,6 @@ Runes can either be invoked by one's self or with many different cultists. Each
if(do_after(user, 15, target = src))
to_chat(user, "You carefully erase the [lowertext(cultist_name)] rune.")
qdel(src)
- else if(istype(I, /obj/item/nullrod))
- user.say("BEGONE FOUL MAGIKS!!", forced = "nullrod")
- to_chat(user, "You disrupt the magic of [src] with [I].")
- qdel(src)
/obj/effect/rune/attack_hand(mob/living/user)
. = ..()
@@ -502,9 +498,6 @@ structure_check() searches for nearby cultist structures required for the invoca
if(do_after(user, 50, target = src)) //Prevents accidental erasures.
log_game("Summon Narsie rune erased by [key_name(user)] with [I.name]")
message_admins("[ADMIN_LOOKUPFLW(user)] erased a Narsie rune with [I.name]")
- else if(istype(I, /obj/item/nullrod)) //Begone foul magiks. You cannot hinder me.
- log_game("Summon Narsie rune erased by [key_name(user)] using a null rod")
- message_admins("[ADMIN_LOOKUPFLW(user)] erased a Narsie rune with a null rod")
else
..()
diff --git a/code/modules/antagonists/revenant/revenant.dm b/code/modules/antagonists/revenant/revenant.dm
index 76da8304df09..084176f4b8c4 100644
--- a/code/modules/antagonists/revenant/revenant.dm
+++ b/code/modules/antagonists/revenant/revenant.dm
@@ -190,17 +190,6 @@
return BULLET_ACT_FORCE_PIERCE
return ..()
-//damage, gibbing, and dying
-/mob/living/simple_animal/revenant/attackby(obj/item/W, mob/living/user, params)
- . = ..()
- if(istype(W, /obj/item/nullrod))
- visible_message("[src] violently flinches!", \
- "As \the [W] passes through you, you feel your essence draining away!")
- adjustBruteLoss(25) //hella effective
- inhibited = TRUE
- update_action_buttons_icon()
- addtimer(CALLBACK(src, PROC_REF(reset_inhibit)), 30)
-
/mob/living/simple_animal/revenant/proc/reset_inhibit()
inhibited = FALSE
update_action_buttons_icon()
diff --git a/code/modules/antagonists/wizard/equipment/artefact.dm b/code/modules/antagonists/wizard/equipment/artefact.dm
index a95ef0d1b579..a20b905b590d 100644
--- a/code/modules/antagonists/wizard/equipment/artefact.dm
+++ b/code/modules/antagonists/wizard/equipment/artefact.dm
@@ -58,14 +58,6 @@
if(spawn_amt_left <= 0)
qdel(src)
-/obj/effect/rend/attackby(obj/item/I, mob/user, params)
- if(istype(I, /obj/item/nullrod))
- user.visible_message("[user] seals \the [src] with \the [I].")
- qdel(src)
- return
- else
- return ..()
-
/obj/effect/rend/singularity_pull()
return
diff --git a/code/modules/cargo/blackmarket/blackmarket_items/weapons.dm b/code/modules/cargo/blackmarket/blackmarket_items/weapons.dm
index 7d22846e123e..11fef220ee01 100644
--- a/code/modules/cargo/blackmarket/blackmarket_items/weapons.dm
+++ b/code/modules/cargo/blackmarket/blackmarket_items/weapons.dm
@@ -209,6 +209,38 @@
stock_max = 3
availability_prob = 30
+/datum/blackmarket_item/weapon/mecha_syringe_gun
+ name = "Mounted Syringe Gun"
+ desc = "We ripped this off an old Nanotrasen exosuit. It's a real advanced piece of equipment. Exosuit not included."
+ item = /obj/item/mecha_parts/mecha_equipment/medical/syringe_gun
+
+ price_min = 5000
+ price_max = 7000
+ stock = 1
+ availability_prob = 15
+
+/datum/blackmarket_item/weapon/mecha_hades
+ name = "Mounted FNX-99 Carbine"
+ desc = "This so called \"Hades\" carbine is sure to burn brightly above the competition! Not to be confused with the \"Hades\" energy rifle. Exosuit not included."
+ item = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/carbine
+ pair_item = /datum/blackmarket_item/weapon/mecha_hades_ammo
+
+ price_min = 2000
+ price_max = 3000
+ stock_max = 2
+ availability_prob = 25
+
+/datum/blackmarket_item/weapon/mecha_hades_ammo
+ name = "FNX-99 Incediary Ammo"
+ desc = "A box of 24 incendiary shells for the FNX-99 mounted carbine."
+ item = /obj/item/mecha_ammo/incendiary
+
+ price_min = 250
+ price_max = 350
+ stock_min = 3
+ stock_max = 5
+ availability_prob = 0
+
/datum/blackmarket_item/weapon/model_h
name = "Model H"
desc = "A Model H slug pistol. The H stands for Hurt. Chambered in ferromagnetic slugs."
diff --git a/code/modules/cargo/packs/ammo.dm b/code/modules/cargo/packs/ammo.dm
index ab521998f07c..aa165cbc8149 100644
--- a/code/modules/cargo/packs/ammo.dm
+++ b/code/modules/cargo/packs/ammo.dm
@@ -70,6 +70,12 @@
cost = 500
contains = list(/obj/item/ammo_box/a12g/slug)
+/datum/supply_pack/ammo/techshells
+ name = "Unloaded Shotgun Technological Shells Crate"
+ desc = "Contains a box of 7 versatile tech shells, capable of producing a variety of deadly effects for any situation. Some assembly required."
+ cost = 210
+ contains = list(/obj/item/storage/box/techshot)
+
/*
.38 ammo
*/
diff --git a/code/modules/cargo/packs/mechs.dm b/code/modules/cargo/packs/mechs.dm
index 376c22fc0db8..937126a86361 100644
--- a/code/modules/cargo/packs/mechs.dm
+++ b/code/modules/cargo/packs/mechs.dm
@@ -109,6 +109,14 @@ Mech Equipment
/obj/item/mecha_parts/mecha_equipment/drill
)
+/datum/supply_pack/mech/equipment/diamond_drill
+ name = "Mech diamond drill kit"
+ desc = "Contains mechanized diamond drill, for the enterprising prospector!"
+ cost = 750
+ contains = list(
+ /obj/item/mecha_parts/mecha_equipment/drill/diamonddrill
+ )
+
/datum/supply_pack/mech/equipment/scanner
name = "Mech scanner kit"
desc = "An electronic mining scanner, graded to interface with a mech."
@@ -125,6 +133,22 @@ Mech Equipment
/obj/item/mecha_parts/mecha_equipment/generator
)
+/datum/supply_pack/mech/equipment/nuclear_gen
+ name = "Mech nuclear generator kit"
+ desc = "Contains a uranium-fueled generator for a mech, ideal for polluting the environment."
+ cost = 1250
+ contains = list(
+ /obj/item/mecha_parts/mecha_equipment/generator/nuclear
+ )
+
+/datum/supply_pack/mech/equipment/tesla_energy_relay
+ name = "Mech tesla relay kit"
+ desc = "Contains an advanced exosuit module which draws power from nearby APCs."
+ cost = 1750
+ contains = list(
+ /obj/item/mecha_parts/mecha_equipment/tesla_energy_relay
+ )
+
/datum/supply_pack/mech/equipment/clamp
name = "Mech clamp kit"
desc = "Contains a clamp designed for mechanized freight hauling."
@@ -133,6 +157,37 @@ Mech Equipment
/obj/item/mecha_parts/mecha_equipment/hydraulic_clamp
)
+/datum/supply_pack/mech/equipment/extinguisher
+ name = "Mech extinguisher kit"
+ desc = "Contains a heavy duty fire extinguisher, for heavy duty firefighting."
+ cost = 250
+ contains = list(
+ /obj/item/mecha_parts/mecha_equipment/extinguisher
+ )
+
+/datum/supply_pack/mech/equipment/cable_layer
+ name = "Mech RCL Kit"
+ desc = "Contains a \"rapid cable layer\" for laying down long lengths of wire."
+ cost = 250
+ contains = list(
+ /obj/item/mecha_parts/mecha_equipment/cable_layer
+ )
+
+/datum/supply_pack/mech/equipment/mech_sleeper
+ name = "Mech Mounted Sleeper Kit"
+ desc = "Contains a mounted sleeper device, used for retrieving and stabilizing patients."
+ cost = 1000
+ contains = list(
+ /obj/item/mecha_parts/mecha_equipment/medical/sleeper
+ )
+
+/datum/supply_pack/mech/equipment/beam_gun
+ name = "Mech Beam Gun Kit"
+ desc = "Contains an advanced mounted medical beamgun, capable of alleviating wounds to targets."
+ cost = 7000
+ contains = list(
+ /obj/item/mecha_parts/mecha_equipment/medical/mechmedbeam
+ )
/datum/supply_pack/mech/equipment/rcs
name = "Mech RCS kit"
desc = "A gas fueled RCS pack, ideal for mechanized space operation."
@@ -149,19 +204,40 @@ Mech Equipment
/obj/item/mecha_parts/mecha_equipment/conversion_kit/ripley
)
+/datum/supply_pack/mech/equipment/melee_armor_booster
+ name = "Mech CCW armor kit"
+ desc = "A \"close combat weaponry\" module designed to deflect melee attacks."
+ cost = 750
+ contains = list(
+ /obj/item/mecha_parts/mecha_equipment/anticcw_armor_booster
+ )
+
+/datum/supply_pack/mech/equipment/projectile_armor_booster
+ name = "Mech projectile armor kit"
+ desc = "A protective exosuit module designed to deflect ranged attacks."
+ cost = 1000
+ contains = list(
+ /obj/item/mecha_parts/mecha_equipment/antiproj_armor_booster
+ )
+
/*
weapons
*/
-/datum/supply_pack/mech/equipment/pka
+/datum/supply_pack/mech/weapon
+ name = "Mech weapons crate"
+ crate_type = /obj/structure/closet/crate/secure/weapon
+ crate_name = "mech weapon crate"
+
+/datum/supply_pack/mech/weapon/pka
name = "Mech Mounted Proto-Kinetic Accelerator kit"
desc = "A ranged mining attachment for any mech."
- cost = 1500
+ cost = 750
contains = list(
/obj/item/mecha_parts/mecha_equipment/weapon/energy/mecha_kineticgun
)
-/datum/supply_pack/mech/equipment/laser
+/datum/supply_pack/mech/weapon/laser
name = "Immolator kit"
desc = "A light laser cannon designed for combat usage."
cost = 1000
@@ -169,10 +245,75 @@ weapons
/obj/item/mecha_parts/mecha_equipment/weapon/energy/laser
)
-/datum/supply_pack/mech/equipment/biglaser
+/datum/supply_pack/mech/weapon/biglaser
name = "Solaris kit"
desc = "A heavy laser cannon designed for combat usage."
cost = 2000
contains = list(
/obj/item/mecha_parts/mecha_equipment/weapon/energy/laser/heavy
)
+
+/datum/supply_pack/mech/weapon/ion_cannon
+ name = "MK4 ion cannon kit"
+ desc = "Contains a heavy ion cannon for disabling technology in large blasts."
+ cost = 3000
+ contains = list(
+ /obj/item/mecha_parts/mecha_equipment/weapon/energy/ion
+ )
+
+/datum/supply_pack/mech/weapon/scattershot
+ name = "LBX AC 10 kit"
+ desc = "Contains a \"Scattershot\" gun to mount on combat exosuits."
+ cost = 1750
+ contains = list(
+ /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/scattershot
+ )
+
+/datum/supply_pack/mech/weapon/lmg
+ name = "Ultra AC 2 kit"
+ desc = "Contains a mounted gun which fires in three round bursts."
+ cost = 2250
+ contains = list(
+ /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/lmg
+ )
+
+/datum/supply_pack/mech/weapon/missile_rack
+ name = "BRM-6 kit"
+ desc = "Contains a low-explosive missile launcher, excellent for breaching through obstacles."
+ cost = 3000
+ contains = list(
+ /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/breaching
+ )
+
+/*
+ammo
+*/
+
+/datum/supply_pack/mech/ammo
+ name = "Mech ammo crate"
+ crate_type = /obj/structure/closet/crate/secure/gear
+ crate_name = "mech ammo crate"
+
+/datum/supply_pack/mech/ammo/scattershot_ammo
+ name = "LBX AC 10 ammo box"
+ desc = "Contains a fourty-round box of upscaled buckshot, to be loaded directly in a mounted LBX AC 10."
+ cost = 500
+ contains = list(
+ /obj/item/mecha_ammo/scattershot
+ )
+
+/datum/supply_pack/mech/ammo/lmg_ammo
+ name = "Ultra AC 2 ammo box"
+ desc = "Contains a three hundred-round box of heavy ammunition for the Ultra AC 2."
+ cost = 750
+ contains = list(
+ /obj/item/mecha_ammo/lmg
+ )
+
+/datum/supply_pack/mech/ammo/missile_rack_ammo
+ name = "BRM-6 missile box"
+ desc = "Contains a box of six breaching missiles designed to explode upon striking hard surfaces."
+ cost = 1000
+ contains = list(
+ /obj/item/mecha_ammo/missiles_br
+ )
diff --git a/code/modules/clothing/factions/hardliners.dm b/code/modules/clothing/factions/hardliners.dm
new file mode 100644
index 000000000000..5c3423f745c0
--- /dev/null
+++ b/code/modules/clothing/factions/hardliners.dm
@@ -0,0 +1,181 @@
+//////////////
+//Jumpsuits//
+/////////////
+
+/obj/item/clothing/under/syndicate/hardliners
+ name = "hardliners uniform"
+ desc = "A crimson combat uniform, reminiscent of the Gorlex Marauders at the height of the Inter-Corporate Wars. It's oddly comfortable, and warm."
+ icon_state = "hardliners"
+ item_state = "hardliners"
+ armor = list("melee" = 10, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 40)
+ can_adjust = FALSE
+ icon = 'icons/obj/clothing/faction/hardliners/uniforms.dmi'
+ mob_overlay_icon = 'icons/mob/clothing/faction/hardliners/uniforms.dmi'
+
+/obj/item/clothing/under/syndicate/hardliners/jumpsuit
+ name = "hardliners jumpsuit"
+ desc = "A black jumpsuit with white overalls, a scant reminder of the old miners of Gorlex VII."
+ icon_state = "hl_jumpsuit"
+ item_state = "hl_jumpsuit"
+
+/obj/item/clothing/under/syndicate/hardliners/officer
+ name = "hardliners officer uniform"
+ desc = "A button-up uniform with cargo pants, certainly more tactical than most officer uniforms."
+ icon_state = "hl_officer"
+ item_state = "hl_officer"
+
+////////////////////
+//Unarmored suits//
+///////////////////
+
+/obj/item/clothing/suit/hardliners
+ name = "white smock"
+ desc = "A plain-white surgical smock typically worn by both Hardliners and Cybersun staff. Even mercenaries need medical attention!"
+ icon = 'icons/obj/clothing/faction/hardliners/suits.dmi'
+ mob_overlay_icon = 'icons/mob/clothing/faction/hardliners/suits.dmi'
+ icon_state = "hl_apron"
+ item_state = "whitecloth"
+
+/obj/item/clothing/suit/hazardvest/hardliners
+ name = "blood-red hazard vest"
+ desc = "A white high-visibility vest, worn by mechanics associated with Hardliners. Safety first!"
+ icon = 'icons/obj/clothing/faction/hardliners/suits.dmi'
+ mob_overlay_icon = 'icons/mob/clothing/faction/hardliners/suits.dmi'
+ icon_state = "hl_hazard"
+ item_state = "whitecloth"
+
+//////////////////
+//Armored suits//
+/////////////////
+
+/obj/item/clothing/suit/armor/hardliners
+ name = "hardliners armor vest"
+ desc = "A slim Type I armored vest, painted in a classic white associated with the Hardliners. It would probably make bloodstains very obvious..."
+ icon_state = "hl_vest"
+ item_state = "armor"
+ icon = 'icons/obj/clothing/faction/hardliners/suits.dmi'
+ mob_overlay_icon = 'icons/mob/clothing/faction/hardliners/suits.dmi'
+ blood_overlay_type = "armor"
+
+/obj/item/clothing/suit/armor/hardliners/jacket
+ name = "hardliners armored kutte"
+ desc = "A leather Kutte with a slim Type I armored vest, painted in a classic white associated with the Hardliners. The patch of the Hardliner movement can be seen behind the leather kutte, a nostalgic callback to the leather outfits used by the civilians of Gorlex VII."
+ icon_state = "hl_jacket"
+ item_state = "armor"
+ icon = 'icons/obj/clothing/faction/hardliners/suits.dmi'
+ mob_overlay_icon = 'icons/mob/clothing/faction/hardliners/suits.dmi'
+ blood_overlay_type = "armor"
+
+/obj/item/clothing/suit/armor/hardliners/sergeant
+ name = "hardliners sergeant jacket"
+ desc = "An armored jacket typically worn by sergeant of the Hardliners. They're reminiscent of the garb worn by old Gorlex navymen, prior to its destruction."
+ body_parts_covered = CHEST|GROIN|ARMS
+ icon_state = "hl_sergeant"
+ item_state = "hl_sergeant"
+ blood_overlay_type = "coat"
+ armor = list("melee" = 35, "bullet" = 30, "laser" = 30, "energy" = 40, "bomb" = 25, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50)
+
+/obj/item/clothing/suit/toggle/armor/vest/hardliners
+ name = "hardliners captain coat"
+ desc = "An imposing armored coat worn by captains of Hardliner fleets, hand-designed by Cybersun tailors to provide maximum protection to its wearer."
+ body_parts_covered = CHEST|GROIN|ARMS
+ icon_state = "hl_captain"
+ item_state = "hl_captain"
+ icon = 'icons/obj/clothing/faction/hardliners/suits.dmi'
+ mob_overlay_icon = 'icons/mob/clothing/faction/hardliners/suits.dmi'
+ blood_overlay_type = "coat"
+ armor = list("melee" = 35, "bullet" = 30, "laser" = 30, "energy" = 40, "bomb" = 25, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50)
+ togglename = "buttons"
+
+///////////////
+//Spacesuits//
+//////////////
+
+/obj/item/clothing/head/helmet/space/hardsuit/syndi/hl
+ name = "white-red hardsuit helmet"
+ desc = "An advanced dual-mode helmet derived from ICW-era advanced special operations helmets, its red partly replaced by white. It is in EVA mode. Manufactured by Cybersun Biodynamics."
+ alt_desc = "An advanced dual-mode helmet derived from ICW-era advanced special operations helmets, its red partly replaced by white. It is in combat mode. Manufactured by Cybersun Biodynamics."
+ icon_state = "hardsuit1-hl"
+ item_state = "hardsuit1-hl"
+ icon = 'icons/obj/clothing/faction/hardliners/head.dmi'
+ mob_overlay_icon = 'icons/mob/clothing/faction/hardliners/head.dmi'
+ hardsuit_type = "hl"
+
+/obj/item/clothing/suit/space/hardsuit/syndi/hl
+ name = "white-red hardsuit"
+ desc = "An advanced dual-mode hardsuit derived from ICW-era advanced special operations hardsuits, its red partly replaced by white. It is in EVA mode. Manufactured by Cybersun Biodynamics."
+ alt_desc = "An advanced dual-mode hardsuit derived from ICW-era advanced special operations hardsuits, its red partly replaced by white. It is in combat mode. Manufactured by Cybersun Biodynamics."
+ icon_state = "hardsuit1-hl"
+ item_state = "hardsuit1-hl"
+ hardsuit_type = "hl"
+ icon = 'icons/obj/clothing/faction/hardliners/suits.dmi'
+ mob_overlay_icon = 'icons/mob/clothing/faction/hardliners/suits.dmi'
+ helmettype = /obj/item/clothing/head/helmet/space/hardsuit/syndi/hl
+ lightweight = 1
+ jetpack = null
+
+/////////
+//Hats//
+////////
+
+/obj/item/clothing/head/hardliners
+ name = "white surgical cap"
+ desc = "A surgical cap used by doctors of Hardliner fleets, matching their white smocks."
+ icon_state = "hl_surgery"
+ icon = 'icons/obj/clothing/faction/hardliners/head.dmi'
+ mob_overlay_icon = 'icons/mob/clothing/faction/hardliners/head.dmi'
+
+
+/obj/item/clothing/head/hardhat/hardliners
+ name = "white-red hard hat"
+ desc = "A white-red hardhat typically used by both miners and mechanics under the Hardliner fleets."
+ icon_state = "hl_hardhat"
+ icon = 'icons/obj/clothing/faction/hardliners/head.dmi'
+ mob_overlay_icon = 'icons/mob/clothing/faction/hardliners/head.dmi'
+
+/obj/item/clothing/head/hardliners/peaked
+ name = "Hardliner peaked cap"
+ desc = "A stylish peaked cap utilized by high-ranking officers of the Hardliner movement. Most who wear it are likely to have been a veteran of the ICW, still vying for revenge against Nanotrasen..."
+ icon_state = "hl_officer"
+ item_state = "hl_officer"
+
+/obj/item/clothing/head/helmet/hardliners
+ name = "hardliners X-11 helmet"
+ desc = "A well-armored helmet utilized by the Hardliners, though painted in their iconic white. Either it makes them stick out like a sore thumb, or it provides excellent camouflage in snow-covered planets."
+ icon = 'icons/obj/clothing/faction/hardliners/head.dmi'
+ mob_overlay_icon = 'icons/mob/clothing/faction/hardliners/head.dmi'
+ armor = list("melee" = 40, "bullet" = 60, "laser" = 35, "energy" = 35, "bomb" = 40, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50) // The guys who specialize in ballistics would probably have better bullet armor. Maybe.
+ icon_state = "hl_x11"
+ item_state = "hl_x11"
+
+/obj/item/clothing/head/helmet/hardliners/swat
+ name = "hardliners pilot helmet"
+ desc = "A modified X-11 helmet utilized by regular pilots, as well as the feared mech pilots of the Hardliner movement. The attached visor helps protect against sudden flashes from explosions."
+ flash_protect = FLASH_PROTECTION_WELDER
+ icon_state = "hl_pilot"
+ item_state = "hl_pilot"
+
+////////////
+//Glasses//
+///////////
+
+/obj/item/clothing/glasses/hud/security/sunglasses/hardliners
+ name = "hardliners security goggles"
+ desc = "Tinted-red flash-proof goggles used by Hardliners, with an integrated security HUD, courtesy of their partners, Cybersun."
+ icon_state = "hl_goggles"
+ item_state = "hl_goggles"
+ icon = 'icons/obj/clothing/faction/hardliners/eyes.dmi'
+ mob_overlay_icon = 'icons/mob/clothing/faction/hardliners/eyes.dmi'
+ glass_colour_type = /datum/client_colour/glass_colour/red
+
+//////////
+//Belts//
+/////////
+
+/obj/item/storage/belt/security/webbing/hardliners
+ name = "hardliners webbing"
+ desc = "A set of tactical webbing for operators of the Hardliner movement, can hold security gear."
+ icon_state = "hl_webbing"
+ item_state = "hl_webbing"
+ icon = 'icons/obj/clothing/faction/hardliners/belt.dmi'
+ mob_overlay_icon = 'icons/mob/clothing/faction/hardliners/belt.dmi'
diff --git a/code/modules/clothing/head/jobs.dm b/code/modules/clothing/head/jobs.dm
index 994cc6042ef2..eb76c13fb541 100644
--- a/code/modules/clothing/head/jobs.dm
+++ b/code/modules/clothing/head/jobs.dm
@@ -272,3 +272,12 @@
#undef DRILL_SHOUTING
#undef DRILL_YELLING
#undef DRILL_CANADIAN
+
+/obj/item/clothing/head/witchunter
+ name = "witchunter hat"
+ desc = "This hat saw much use back in the day."
+ icon_state = "witchhunterhat"
+ item_state = "witchhunterhat"
+ flags_cover = HEADCOVERSEYES
+ flags_inv = HIDEEYES|HIDEHAIR
+ armor = list("melee" = 30, "bullet" = 10, "laser" = 10, "energy" = 10, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 80, "acid" = 80)
diff --git a/code/modules/clothing/head/misc_special.dm b/code/modules/clothing/head/misc_special.dm
index b9e828ab3974..c04b61563f53 100644
--- a/code/modules/clothing/head/misc_special.dm
+++ b/code/modules/clothing/head/misc_special.dm
@@ -315,13 +315,6 @@
var/datum/brain_trauma/mild/phobia/conspiracies/paranoia
var/warped = FALSE
-/obj/item/clothing/head/foilhat/Initialize(mapload)
- . = ..()
- if(!warped)
- AddComponent(/datum/component/anti_magic, FALSE, FALSE, TRUE, ITEM_SLOT_HEAD, 6, TRUE, null, CALLBACK(src, PROC_REF(warp_up)))
- else
- warp_up()
-
/obj/item/clothing/head/foilhat/equipped(mob/living/carbon/human/user, slot)
. = ..()
if(slot != ITEM_SLOT_HEAD || warped)
diff --git a/code/modules/clothing/outfits/factions/syndicate.dm b/code/modules/clothing/outfits/factions/syndicate.dm
index 8f13554f4b00..5e04d87d88c6 100644
--- a/code/modules/clothing/outfits/factions/syndicate.dm
+++ b/code/modules/clothing/outfits/factions/syndicate.dm
@@ -54,10 +54,10 @@
box = /obj/item/storage/box/survival/syndie
/datum/outfit/job/syndicate/assistant/gorlex
- name = "Syndicate - Junior Agent (Gorlex Marauders)"
+ name = "Syndicate - Junior Agent (Hardliner)"
- uniform = /obj/item/clothing/under/syndicate/gorlex
- alt_uniform = /obj/item/clothing/under/syndicate
+ uniform = /obj/item/clothing/under/syndicate/hardliners
+ alt_uniform = /obj/item/clothing/under/syndicate/hardliners/jumpsuit
/datum/outfit/job/syndicate/assistant/ngr
name = "Syndicate - Initiate (New Gorlex Republic)"
@@ -306,11 +306,12 @@
/datum/outfit/job/syndicate/captain/gorlex
- name = "Syndicate - Captain (Gorlex Marauders)"
- uniform = /obj/item/clothing/under/syndicate/ngr/officer
+ name = "Syndicate - Captain (Hardliner)"
+ uniform = /obj/item/clothing/under/syndicate/hardliners/officer
- head = /obj/item/clothing/head/ngr/peaked
- suit = /obj/item/clothing/suit/armor/ngr/captain
+ head = /obj/item/clothing/head/hardliners/peaked
+ suit = /obj/item/clothing/suit/toggle/armor/vest/hardliners
+ shoes = /obj/item/clothing/shoes/combat
/datum/outfit/job/syndicate/captain/ngr
name = "Syndicate - Captain (New Gorlex Republic)"
@@ -428,17 +429,6 @@
id = /obj/item/card/id/syndicate_command/captain_id
gloves = /obj/item/clothing/gloves/combat
-/datum/outfit/job/syndicate/ce/gorlex
- name = "Syndicate - Foreman (Gorlex Marauders)"
-
- ears = /obj/item/radio/headset/syndicate/alt
- uniform = /obj/item/clothing/under/syndicate/gorlex
- alt_uniform = null
- suit = /obj/item/clothing/suit/toggle/hazard
- alt_suit = null
- shoes = /obj/item/clothing/shoes/jackboots
- gloves = /obj/item/clothing/gloves/combat
-
/datum/outfit/job/syndicate/ce/ngr
name = "Syndicate - Foreman (New Gorlex Republic)"
@@ -566,24 +556,27 @@
backpack_contents = list(/obj/item/melee/baton/loaded=1)
/datum/outfit/job/syndicate/hos/gorlex
- name = "Syndicate - Sergeant (Gorlex)"
+ name = "Syndicate - Sergeant (Hardliner)"
id_assignment = "Sergeant"
+ uniform = /obj/item/clothing/under/syndicate/hardliners/officer
+ head = /obj/item/clothing/head/hardliners/peaked
+ suit = /obj/item/clothing/suit/armor/hardliners/sergeant
+ id = /obj/item/card/id/syndicate_command/crew_id
+ shoes = /obj/item/clothing/shoes/combat
+ suit_store = /obj/item/gun/ballistic/automatic/pistol
+
/datum/outfit/job/syndicate/hos/ngr
name = "Syndicate - Lieutenant (New Gorlex Republic)"
id_assignment = "Lieutenant"
- ears = /obj/item/radio/headset/syndicate/alt
uniform = /obj/item/clothing/under/syndicate/ngr/officer
head = /obj/item/clothing/head/ngr/peaked
- suit =/obj/item/clothing/suit/armor/ngr/lieutenant
+ suit = /obj/item/clothing/suit/armor/ngr/lieutenant
id = /obj/item/card/id/syndicate_command/crew_id
shoes = /obj/item/clothing/shoes/combat
- glasses = /obj/item/clothing/glasses/hud/security/sunglasses
suit_store = /obj/item/gun/ballistic/automatic/pistol
- r_pocket = /obj/item/assembly/flash/handheld
- l_pocket = /obj/item/restraints/handcuffs
- backpack_contents = list(/obj/item/melee/baton/loaded=1)
+
/datum/outfit/job/syndicate/hos/twink
name = "Syndicate - Lieutenant (Twinkleshine, NGR)"
@@ -691,13 +684,15 @@
uniform = /obj/item/clothing/under/syndicate/medic
accessory = /obj/item/clothing/accessory/armband/medblue
- shoes = /obj/item/clothing/shoes/jackboots
+ shoes = /obj/item/clothing/shoes/combat
/datum/outfit/job/syndicate/doctor/gorlex
- name = "Syndicate - Medical Doctor (Gorlex)"
+ name = "Syndicate - Medical Doctor (Hardliner)"
- uniform = /obj/item/clothing/under/syndicate/gorlex
- glasses = /obj/item/clothing/glasses/hud/health/prescription
+ uniform = /obj/item/clothing/under/syndicate/hardliners
+ head = /obj/item/clothing/head/hardliners
+ suit = /obj/item/clothing/suit/hardliners
+ glasses = /obj/item/clothing/glasses/hud/health
r_pocket = /obj/item/kitchen/knife/combat/survival
back = /obj/item/storage/backpack/duffelbag/syndie/med
id = /obj/item/card/id/syndicate_command/crew_id
@@ -904,7 +899,25 @@
/datum/outfit/job/syndicate/security/gorlex
- name = "Syndicate - Assault Operative (Gorlex)"
+ name = "Syndicate - Trooper (Hardliner)"
+ id_assignment = "Trooper"
+ job_icon = "securityofficer"
+
+ uniform = /obj/item/clothing/under/syndicate/hardliners
+ belt = /obj/item/storage/belt/security/webbing/hardliners
+ suit = /obj/item/clothing/suit/armor/hardliners
+ gloves = /obj/item/clothing/gloves/color/black
+ head = /obj/item/clothing/head/helmet/hardliners
+ shoes = /obj/item/clothing/shoes/combat
+ l_pocket = /obj/item/restraints/handcuffs
+ r_pocket = /obj/item/assembly/flash/handheld
+
+/datum/outfit/job/syndicate/security/gorlex
+ name = "Syndicate - Pilot (Hardliner)"
+ id_assignment = "Pilot"
+ job_icon = "securityofficer"
+
+ head = /obj/item/clothing/head/helmet/hardliners/swat
/datum/outfit/job/syndicate/security/ngr
name = "Syndicate - Operative (New Gorlex Republic)"
@@ -920,6 +933,14 @@
l_pocket = /obj/item/restraints/handcuffs
r_pocket = /obj/item/assembly/flash/handheld
+/datum/outfit/job/syndicate/security/ngr/pilot
+ name = "Syndicate - Pilot (New Gorlex Republic)"
+ id_assignment = "Pilot"
+ job_icon = "securityofficer"
+
+ uniform = /obj/item/clothing/under/syndicate/ngr/fatigues
+ head = /obj/item/clothing/head/helmet/ngr/swat
+
/datum/outfit/job/syndicate/security/twink
name = "Syndicate - Operative (Twinkleshine)"
@@ -987,10 +1008,12 @@
/obj/item/stack/marker_beacon/ten=1)
/datum/outfit/job/syndicate/miner/gorlex
- name = "Syndicate - Wrecker (Gorlex Marauders)"
+ name = "Syndicate - Wrecker (Hardliner)"
id_assignment = "Wrecker"
- uniform = /obj/item/clothing/under/syndicate/gorlex
+ head = /obj/item/clothing/head/hardhat/hardliners
+ suit = /obj/item/clothing/suit/hazardvest/hardliners
+ uniform = /obj/item/clothing/under/syndicate/hardliners/jumpsuit
accessory = /obj/item/clothing/accessory/armband/cargo
shoes = /obj/item/clothing/shoes/workboots
ears = /obj/item/radio/headset/alt
@@ -1090,10 +1113,12 @@
id = /obj/item/card/id/syndicate_command/crew_id
/datum/outfit/job/syndicate/engineer/gorlex
- name = "Syndicate - Mechanic (Gorlex Marauders)"
+ name = "Syndicate - Mechanic (Hardliner)"
id_assignment = "Mechanic"
- uniform = /obj/item/clothing/under/syndicate/gorlex
+ head = /obj/item/clothing/head/hardhat/hardliners
+ suit = /obj/item/clothing/suit/hazardvest/hardliners
+ uniform = /obj/item/clothing/under/syndicate/hardliners
shoes = /obj/item/clothing/shoes/workboots
glasses = null
diff --git a/code/modules/clothing/spacesuits/hardsuit.dm b/code/modules/clothing/spacesuits/hardsuit.dm
index 7eaccd402e35..557a69c5acb2 100644
--- a/code/modules/clothing/spacesuits/hardsuit.dm
+++ b/code/modules/clothing/spacesuits/hardsuit.dm
@@ -585,11 +585,6 @@
max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT
helmettype = /obj/item/clothing/head/helmet/space/hardsuit/wizard
-/obj/item/clothing/suit/space/hardsuit/wizard/Initialize()
- . = ..()
- AddComponent(/datum/component/anti_magic, TRUE, FALSE, FALSE, ITEM_SLOT_OCLOTHING, INFINITY, FALSE)
-
-
//Medical hardsuit
/obj/item/clothing/head/helmet/space/hardsuit/medical
name = "medical hardsuit helmet"
diff --git a/code/modules/clothing/spacesuits/miscellaneous.dm b/code/modules/clothing/spacesuits/miscellaneous.dm
index ae6ebb525a64..67dc7ce529b3 100644
--- a/code/modules/clothing/spacesuits/miscellaneous.dm
+++ b/code/modules/clothing/spacesuits/miscellaneous.dm
@@ -332,10 +332,6 @@ Contains:
actions_types = list()
resistance_flags = FIRE_PROOF
-/obj/item/clothing/suit/space/hardsuit/ert/paranormal/Initialize()
- . = ..()
- AddComponent(/datum/component/anti_magic, FALSE, FALSE, TRUE, ITEM_SLOT_OCLOTHING)
-
/obj/item/clothing/suit/space/hardsuit/ert/paranormal
name = "paranormal response team hardsuit"
desc = "Powerful wards are built into this hardsuit, protecting the user from all manner of paranormal threats."
@@ -345,10 +341,6 @@ Contains:
max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT
resistance_flags = FIRE_PROOF
-/obj/item/clothing/suit/space/hardsuit/ert/paranormal/Initialize()
- . = ..()
- AddComponent(/datum/component/anti_magic, TRUE, TRUE, TRUE, ITEM_SLOT_OCLOTHING)
-
/obj/item/clothing/suit/space/hardsuit/ert/paranormal/inquisitor
name = "inquisitor's hardsuit"
icon_state = "hardsuit-inq"
@@ -373,11 +365,6 @@ Contains:
resistance_flags = FIRE_PROOF
allowed = list(/obj/item/flashlight, /obj/item/tank/internals, /obj/item/pickaxe, /obj/item/spear, /obj/item/organ/regenerative_core/legion, /obj/item/kitchen/knife, /obj/item/kinetic_crusher, /obj/item/resonator, /obj/item/melee/transforming/cleaving_saw)
-
-/obj/item/clothing/suit/space/hardsuit/berserker/Initialize()
- . = ..()
- AddComponent(/datum/component/anti_magic, TRUE, TRUE, TRUE, ITEM_SLOT_OCLOTHING)
-
/obj/item/clothing/suit/space/hardsuit/berserker/RemoveHelmet()
var/obj/item/clothing/head/helmet/space/hardsuit/berserker/helm = helmet
if(helm?.berserk_active)
diff --git a/code/modules/clothing/suits/jobs.dm b/code/modules/clothing/suits/jobs.dm
index 79aaf15c4d34..56018c288b6a 100644
--- a/code/modules/clothing/suits/jobs.dm
+++ b/code/modules/clothing/suits/jobs.dm
@@ -286,3 +286,10 @@
body_parts_covered = HEAD
flags_inv = HIDEHAIR|HIDEEARS|HIDEFACE|HIDEFACIALHAIR
+/obj/item/clothing/suit/armor/witchhunter
+ name = "witchunter garb"
+ desc = "This worn outfit saw much use back in the day."
+ icon_state = "chaplain_witchhunter"
+ item_state = "witchhunter"
+ body_parts_covered = CHEST|GROIN|LEGS|ARMS
+ allowed = list(/obj/item/storage/book/bible, /obj/item/reagent_containers/food/drinks/bottle/holywater, /obj/item/storage/fancy/candle_box, /obj/item/candle, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman)
diff --git a/code/modules/holiday/halloween.dm b/code/modules/holiday/halloween.dm
index e95bdb2063a8..d5b0c0ff6638 100644
--- a/code/modules/holiday/halloween.dm
+++ b/code/modules/holiday/halloween.dm
@@ -243,17 +243,6 @@
if(prob(5))
playsound(loc, 'sound/spookoween/insane_low_laugh.ogg', 300, TRUE)
-/mob/living/simple_animal/hostile/clown_insane/attackby(obj/item/O, mob/user)
- if(istype(O, /obj/item/nullrod))
- if(prob(5))
- visible_message("[src] finally found the peace it deserves. You hear honks echoing off into the distance.")
- playsound(loc, 'sound/spookoween/insane_low_laugh.ogg', 300, TRUE)
- qdel(src)
- else
- visible_message("[src] seems to be resisting the effect!")
- return
- return ..()
-
/mob/living/simple_animal/hostile/clown_insane/handle_temperature_damage()
return
diff --git a/code/modules/hydroponics/grown/melon.dm b/code/modules/hydroponics/grown/melon.dm
index 1378fb0253fc..1c6b19313ee4 100644
--- a/code/modules/hydroponics/grown/melon.dm
+++ b/code/modules/hydroponics/grown/melon.dm
@@ -52,19 +52,3 @@
dried_type = null
wine_power = 70 //Water to wine, baby.
wine_flavor = "divinity"
-
-/obj/item/reagent_containers/food/snacks/grown/holymelon/Initialize()
- . = ..()
- var/uses = 1
- if(seed)
- uses = round(seed.potency / 20)
- AddComponent(/datum/component/anti_magic, TRUE, TRUE, FALSE, ITEM_SLOT_HANDS, uses, TRUE, CALLBACK(src, PROC_REF(block_magic)), CALLBACK(src, PROC_REF(expire))) //deliver us from evil o melon god
-
-/obj/item/reagent_containers/food/snacks/grown/holymelon/proc/block_magic(mob/user, major)
- if(major)
- to_chat(user, "[src] hums slightly, and seems to decay a bit.")
-
-/obj/item/reagent_containers/food/snacks/grown/holymelon/proc/expire(mob/user)
- to_chat(user, "[src] rapidly turns into ash!")
- qdel(src)
- new /obj/effect/decal/cleanable/ash(drop_location())
diff --git a/code/modules/jobs/job_types/chaplain.dm b/code/modules/jobs/job_types/chaplain.dm
index 870697476794..ab4ceb6968c0 100644
--- a/code/modules/jobs/job_types/chaplain.dm
+++ b/code/modules/jobs/job_types/chaplain.dm
@@ -16,8 +16,6 @@
var/obj/item/storage/book/bible/booze/B = new
if(GLOB.religion)
- if(H.mind)
- H.mind.holy_role = HOLY_ROLE_PRIEST
B.deity_name = GLOB.deity
B.name = GLOB.bible_name
B.icon_state = GLOB.bible_icon_state
@@ -30,8 +28,6 @@
if(GLOB.religious_sect)
GLOB.religious_sect.on_conversion(H)
return
- if(H.mind)
- H.mind.holy_role = HOLY_ROLE_HIGHPRIEST
var/new_religion = DEFAULT_RELIGION
if(M.client && M.client.prefs.custom_names["religion"])
diff --git a/code/modules/mining/lavaland/necropolis_chests.dm b/code/modules/mining/lavaland/necropolis_chests.dm
index 7b80559d2691..268413ef203c 100644
--- a/code/modules/mining/lavaland/necropolis_chests.dm
+++ b/code/modules/mining/lavaland/necropolis_chests.dm
@@ -501,10 +501,6 @@
if(input)
src.warcry = input
-/obj/item/immortality_talisman/Initialize()
- . = ..()
- AddComponent(/datum/component/anti_magic, TRUE, TRUE, TRUE)
-
/datum/action/item_action/hands_free/immortality
name = "Immortality"
diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm
index 4430fc1da300..f92e8d762f2d 100644
--- a/code/modules/mob/living/carbon/human/examine.dm
+++ b/code/modules/mob/living/carbon/human/examine.dm
@@ -314,10 +314,6 @@
msg += ""
- if(HAS_TRAIT(user, TRAIT_SPIRITUAL) && mind?.holy_role)
- msg += "[t_He] [t_has] a holy aura about [t_him].\n"
- SEND_SIGNAL(user, COMSIG_ADD_MOOD_EVENT, "religious_comfort", /datum/mood_event/religiously_comforted)
-
switch(stat)
if(UNCONSCIOUS, HARD_CRIT)
msg += "[t_He] [t_is]n't responding to anything around [t_him] and seem[p_s()] to be asleep.\n"
diff --git a/code/modules/mob/living/simple_animal/hostile/human/skeleton.dm b/code/modules/mob/living/simple_animal/hostile/human/skeleton.dm
index 675c6fc99342..b251dda91e48 100644
--- a/code/modules/mob/living/simple_animal/hostile/human/skeleton.dm
+++ b/code/modules/mob/living/simple_animal/hostile/human/skeleton.dm
@@ -47,8 +47,8 @@
melee_damage_upper = 30
deathmessage = "collapses into a pile of bones, its gear clanging as it hits the ground!"
loot = list(/obj/effect/decal/remains/human,
- /obj/item/clothing/suit/armor/riot/chaplain,
- /obj/item/clothing/head/helmet/chaplain,
+ /obj/item/clothing/suit/armor/witchhunter,
+ /obj/item/clothing/head/witchunter,
/obj/item/claymore/weak{name = "holy sword"})
/mob/living/simple_animal/hostile/human/skeleton/ice
diff --git a/code/modules/projectiles/ammunition/ballistic/shotgun.dm b/code/modules/projectiles/ammunition/ballistic/shotgun.dm
index 8e5f2e128ac7..9f6a8c169ecd 100644
--- a/code/modules/projectiles/ammunition/ballistic/shotgun.dm
+++ b/code/modules/projectiles/ammunition/ballistic/shotgun.dm
@@ -111,8 +111,8 @@
desc = "A shotgun shell which fires a spread of incendiary pellets."
icon_state = "dragonsbreath"
projectile_type = /obj/projectile/bullet/incendiary/shotgun/dragonsbreath
- pellets = 4
- variance = 35
+ pellets = 8
+ variance = 45
/obj/item/ammo_casing/shotgun/meteorslug
name = "meteorslug shell"
@@ -128,20 +128,20 @@
/obj/item/ammo_casing/shotgun/ion
name = "ion shell"
- desc = "An advanced shotgun shell which uses a subspace ansible crystal to produce an effect similar to a standard ion rifle. \
- The unique properties of the crystal split the pulse into a spread of individually weaker bolts."
+ desc = "An advanced shotgun shell which uses a micro laser to focus the effects of an EMP reaction to produce an effect similar to a standard ion rifle. \
+ The more uncontrolled nature of the reaction causes the pulse to spread into multiple individually weaker bolts."
icon_state = "ion"
projectile_type = /obj/projectile/ion/weak
- pellets = 4
- variance = 35
+ pellets = 8
+ variance = 25
/obj/item/ammo_casing/shotgun/laserscatter
name = "scatter laser shell"
desc = "An advanced shotgun shell that uses a micro laser to replicate the effects of a scatter laser weapon in a ballistic package."
icon_state = "laser"
projectile_type = /obj/projectile/beam/weak
- pellets = 4 //WS edit: makes scatter lasers based again
- variance = 35
+ pellets = 8
+ variance = 25
/obj/item/ammo_casing/shotgun/pulseslug
name = "pulse slug"
diff --git a/code/modules/projectiles/projectile/bullets/shotgun.dm b/code/modules/projectiles/projectile/bullets/shotgun.dm
index e102c4c3b48f..ba9c8c88d7f8 100644
--- a/code/modules/projectiles/projectile/bullets/shotgun.dm
+++ b/code/modules/projectiles/projectile/bullets/shotgun.dm
@@ -18,7 +18,7 @@
/obj/projectile/bullet/incendiary/shotgun/dragonsbreath
name = "dragonsbreath pellet"
- damage = 5
+ damage = 8
armour_penetration = -35
/obj/projectile/bullet/slug/stun
diff --git a/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm b/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm
index aead73d2bce5..10519c75c434 100644
--- a/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm
+++ b/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm
@@ -2093,13 +2093,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_name = "Trapper's Beer"
glass_desc = "The Ashen Huntsman's blessings, in a glass. Despite proclaiming an ascetic lifestyle, it's okay to have a little fun once in a while."
-/datum/reagent/consumable/ethanol/trappist/on_mob_life(mob/living/carbon/M)
- if(M.mind.holy_role)
- M.adjustFireLoss(-2.5, 0)
- M.jitteriness = max(0, M.jitteriness-1)
- M.stuttering = max(0, M.stuttering-1)
- return ..()
-
/datum/reagent/consumable/ethanol/blazaam
name = "Hyperspace Highball"
description = "A strange drink mixed with bluespace crystal flakes, which is already extremely expensive on its own merit."
diff --git a/code/modules/religion/religion_sects.dm b/code/modules/religion/religion_sects.dm
index 92327a2ed689..3ddce78ae6e5 100644
--- a/code/modules/religion/religion_sects.dm
+++ b/code/modules/religion/religion_sects.dm
@@ -135,8 +135,6 @@
if(iscyborg(L))
var/mob/living/silicon/robot/R = L
var/charge_amt = 50
- if(L.mind?.holy_role == HOLY_ROLE_HIGHPRIEST)
- charge_amt *= 2
R.cell?.charge += charge_amt
R.visible_message("[user] charges [R] with the power of [GLOB.deity]!")
to_chat(R, "You are charged by the power of [GLOB.deity]!")
diff --git a/code/modules/religion/religion_structures.dm b/code/modules/religion/religion_structures.dm
index f9c449c56e9b..e9d76ca8bf5a 100644
--- a/code/modules/religion/religion_structures.dm
+++ b/code/modules/religion/religion_structures.dm
@@ -18,10 +18,6 @@
var/can_i_see = FALSE
if(isobserver(user))
can_i_see = TRUE
- else if(isliving(user))
- var/mob/living/L = user
- if(L.mind?.holy_role)
- can_i_see = TRUE
if(!can_i_see || !sect_to_altar)
return
@@ -57,62 +53,6 @@
pushed_mob.forceMove(loc)
return ..()
-/obj/structure/altar_of_gods/attackby(obj/item/C, mob/user, params)
- //If we can sac, we do nothing but the sacrifice instead of typical attackby behavior (IE damage the structure)
- if(sect_to_altar?.can_sacrifice(C,user))
- sect_to_altar.on_sacrifice(C,user)
- return TRUE
- . = ..()
- //everything below is assumed you're bibling it up
- if(!istype(C, /obj/item/storage/book/bible))
- return
- if(sect_to_altar)
- if(!sect_to_altar.rites_list)
- to_chat(user, "Your sect doesn't have any rites to perform!")
- return
- var/rite_select = input(user,"Select a rite to perform!","Select a rite",null) in sect_to_altar.rites_list
- if(!rite_select || !user.canUseTopic(src, BE_CLOSE, FALSE, NO_TK))
- to_chat(user,"You cannot perform the rite at this time.")
- return
- var/selection2type = sect_to_altar.rites_list[rite_select]
- performing_rite = new selection2type(src)
- if(!performing_rite.perform_rite(user, src))
- QDEL_NULL(performing_rite)
- else
- performing_rite.invoke_effect(user, src)
- sect_to_altar.adjust_favor(-performing_rite.favor_cost)
- QDEL_NULL(performing_rite)
- return
-
- if(user.mind.holy_role != HOLY_ROLE_HIGHPRIEST)
- to_chat(user, "You are not the high priest, and therefore cannot select a religious sect.")
- return
-
- var/list/available_options = generate_available_sects(user)
- if(!available_options)
- return
-
- var/sect_select = input(user,"Select a sect (You CANNOT revert this decision!)","Select a Sect",null) in available_options
- if(!sect_select || !user.canUseTopic(src, BE_CLOSE, FALSE, NO_TK))
- to_chat(user,"You cannot select a sect at this time.")
- return
- var/type_selected = available_options[sect_select]
- GLOB.religious_sect = new type_selected()
- for(var/i in GLOB.player_list)
- if(!isliving(i))
- continue
- var/mob/living/am_i_holy_living = i
- if(!am_i_holy_living.mind?.holy_role)
- continue
- GLOB.religious_sect.on_conversion(am_i_holy_living)
- sect_to_altar = GLOB.religious_sect
- if(sect_to_altar.altar_icon)
- icon = sect_to_altar.altar_icon
- if(sect_to_altar.altar_icon_state)
- icon_state = sect_to_altar.altar_icon_state
-
-
-
/obj/structure/altar_of_gods/proc/generate_available_sects(mob/user) //eventually want to add sects you get from unlocking certain achievements
. = list()
for(var/i in subtypesof(/datum/religion_sect))
diff --git a/code/modules/vending/wardrobes.dm b/code/modules/vending/wardrobes.dm
index bbc53154aac6..da3fdb134010 100644
--- a/code/modules/vending/wardrobes.dm
+++ b/code/modules/vending/wardrobes.dm
@@ -375,7 +375,7 @@
icon_state = "chapdrobe"
product_ads = "Are you being bothered by cultists or pesky revenants? Then come and dress like the holy man!;Clothes for men of the cloth!"
vend_reply = "Thank you for using the ChapDrobe!"
- products = list(/obj/item/choice_beacon/holy = 1,
+ products = list(/obj/item/storage/box/holy = 1,
/obj/item/storage/backpack/cultpack = 1,
/obj/item/clothing/head/beret/service = 1, //WS edit - berets
/obj/item/clothing/accessory/pocketprotector/cosmetology = 1,
diff --git a/html/changelogs/AutoChangeLog-pr-2836.yml b/html/changelogs/AutoChangeLog-pr-2836.yml
deleted file mode 100644
index 48c7e17ac4d3..000000000000
--- a/html/changelogs/AutoChangeLog-pr-2836.yml
+++ /dev/null
@@ -1,13 +0,0 @@
-author: Sadhorizon
-changes:
- - {rscadd: Added the Sunskipper-class Culinary Vessel.}
- - {rscadd: Every drink and booze dispenser drink is in the booze-o-mat now.}
- - {rscadd: 'Added bottles for triple sec, lemon juice, creme de cacao and creme
- de menthe.'}
- - {rscdel: Removed the Boyardee-class Entertainment Vessel.}
- - {rscdel: Independent chefs no longer get kitchen cqc.}
- - {tweak: The "syndicate waiter's outfit" renamed to just "waiter's outfit".}
- - {tweak: Indpenedent bartenders now start with a waistcoat.}
- - {tweak: "Edited waiter's outfit. Also, the role now gets kitchen access."}
- - {tweak: Independent cooks now start with laceup shoes.}
-delete-after: true
diff --git a/html/changelogs/AutoChangeLog-pr-2943.yml b/html/changelogs/AutoChangeLog-pr-2943.yml
deleted file mode 100644
index 72956c599ab8..000000000000
--- a/html/changelogs/AutoChangeLog-pr-2943.yml
+++ /dev/null
@@ -1,11 +0,0 @@
-author: Gristlebee
-changes:
- - {rscadd: Wrecked Factory ruin}
- - {rscadd: Indestructible titanium walls}
- - {rscadd: 'Lavaland atmos subtypes for plating, rusted plating, concrete, white
- and dark turfs'}
- - {balance: Syndicate Space Simple Mobs have their max temp increased}
- - {tweak: Wall_lockers updatepaths on the Aegis}
- - {code_imp: 'Adds ruin to map_catalogue,txt, lavaland.dm and adds it to lavaland.dm
- areas'}
-delete-after: true
diff --git a/html/changelogs/AutoChangeLog-pr-3092.yml b/html/changelogs/AutoChangeLog-pr-3092.yml
deleted file mode 100644
index 3f7d28d4a56c..000000000000
--- a/html/changelogs/AutoChangeLog-pr-3092.yml
+++ /dev/null
@@ -1,5 +0,0 @@
-author: meemofcourse
-changes:
- - {rscadd: 'SUNS 3x6 logo decal, SUNS tiles, SUNS emblem floor decal, Desk and Wall
- flag, folders, PDA, cards, locker, bedsheets, and headsets.'}
-delete-after: true
diff --git a/html/changelogs/archive/2024-06.yml b/html/changelogs/archive/2024-06.yml
index 56f937d3951f..52605700af12 100644
--- a/html/changelogs/archive/2024-06.yml
+++ b/html/changelogs/archive/2024-06.yml
@@ -199,3 +199,44 @@
- rscadd: Pickaxe was added to the autolathe.
meemofcourse:
- rscadd: PGF jobs now grant you the Kalixcian Common language
+2024-06-13:
+ FalloutFalcon:
+ - rscdel: Removed alot of chaplain stuff we will never use
+ - rscdel: The chaplain is now just as magic as the average person
+ Gristlebee:
+ - rscadd: Wrecked Factory ruin
+ - rscadd: Indestructible titanium walls
+ - rscadd: Lavaland atmos subtypes for plating, rusted plating, concrete, white and
+ dark turfs
+ - balance: Syndicate Space Simple Mobs have their max temp increased
+ - tweak: Wall_lockers updatepaths on the Aegis
+ - code_imp: Adds ruin to map_catalogue,txt, lavaland.dm and adds it to lavaland.dm
+ areas
+ - rscadd: Techshell box
+ - rscadd: Techshells to the outpost market for 175 credits
+ - tweak: Scatter ion description
+ - balance: Techshell recipes no longer require higher tier stock parts, adjusts
+ scatter laser, scatter ion, dragonsbreath and pulse slug recipes
+ - balance: Buffs scatter lasers, scatter ion and dragonsbreath
+ PositiveEntropy:
+ - rscadd: The Hardliners have now made a proper appearance in the Frontier!
+ Sadhorizon:
+ - rscadd: Added the Sunskipper-class Culinary Vessel.
+ - rscadd: Every drink and booze dispenser drink is in the booze-o-mat now.
+ - rscadd: Added bottles for triple sec, lemon juice, creme de cacao and creme de
+ menthe.
+ - rscdel: Removed the Boyardee-class Entertainment Vessel.
+ - rscdel: Independent chefs no longer get kitchen cqc.
+ - tweak: The "syndicate waiter's outfit" renamed to just "waiter's outfit".
+ - tweak: Indpenedent bartenders now start with a waistcoat.
+ - tweak: Edited waiter's outfit. Also, the role now gets kitchen access.
+ - tweak: Independent cooks now start with laceup shoes.
+ meemofcourse:
+ - rscadd: SUNS 3x6 logo decal, SUNS tiles, SUNS emblem floor decal, Desk and Wall
+ flag, folders, PDA, cards, locker, bedsheets, and headsets.
+2024-06-14:
+ Gristlebee:
+ - bugfix: Posibrains/MMI pilots being permaslept on mech destruction
+2024-06-15:
+ Rye-Rice:
+ - imageadd: Rylie Was Forced To Resprite Concrete when she was 6!
diff --git a/icons/mob/clothing/faction/hardliners/belt.dmi b/icons/mob/clothing/faction/hardliners/belt.dmi
new file mode 100644
index 000000000000..a864128547d6
Binary files /dev/null and b/icons/mob/clothing/faction/hardliners/belt.dmi differ
diff --git a/icons/mob/clothing/faction/hardliners/eyes.dmi b/icons/mob/clothing/faction/hardliners/eyes.dmi
new file mode 100644
index 000000000000..aec97963fd99
Binary files /dev/null and b/icons/mob/clothing/faction/hardliners/eyes.dmi differ
diff --git a/icons/mob/clothing/faction/hardliners/head.dmi b/icons/mob/clothing/faction/hardliners/head.dmi
new file mode 100644
index 000000000000..839826a7c426
Binary files /dev/null and b/icons/mob/clothing/faction/hardliners/head.dmi differ
diff --git a/icons/mob/clothing/faction/hardliners/suits.dmi b/icons/mob/clothing/faction/hardliners/suits.dmi
new file mode 100644
index 000000000000..05f41eb00d25
Binary files /dev/null and b/icons/mob/clothing/faction/hardliners/suits.dmi differ
diff --git a/icons/mob/clothing/faction/hardliners/uniforms.dmi b/icons/mob/clothing/faction/hardliners/uniforms.dmi
new file mode 100644
index 000000000000..8726f50b2f54
Binary files /dev/null and b/icons/mob/clothing/faction/hardliners/uniforms.dmi differ
diff --git a/icons/mob/clothing/faction/ngr/head.dmi b/icons/mob/clothing/faction/ngr/head.dmi
index 08af6ee9ba08..c370f07aa0f3 100644
Binary files a/icons/mob/clothing/faction/ngr/head.dmi and b/icons/mob/clothing/faction/ngr/head.dmi differ
diff --git a/icons/mob/clothing/head.dmi b/icons/mob/clothing/head.dmi
index 721de12b60b6..c2a73da609b9 100644
Binary files a/icons/mob/clothing/head.dmi and b/icons/mob/clothing/head.dmi differ
diff --git a/icons/mob/clothing/head/armor.dmi b/icons/mob/clothing/head/armor.dmi
index 4cec91ad0110..38adc74f3317 100644
Binary files a/icons/mob/clothing/head/armor.dmi and b/icons/mob/clothing/head/armor.dmi differ
diff --git a/icons/mob/clothing/head/spacesuits.dmi b/icons/mob/clothing/head/spacesuits.dmi
index 12923a0e281c..55a7f69de51f 100644
Binary files a/icons/mob/clothing/head/spacesuits.dmi and b/icons/mob/clothing/head/spacesuits.dmi differ
diff --git a/icons/mob/clothing/suits/spacesuits.dmi b/icons/mob/clothing/suits/spacesuits.dmi
index ee9896871a91..da5075195992 100644
Binary files a/icons/mob/clothing/suits/spacesuits.dmi and b/icons/mob/clothing/suits/spacesuits.dmi differ
diff --git a/icons/obj/clothing/faction/hardliners/belt.dmi b/icons/obj/clothing/faction/hardliners/belt.dmi
new file mode 100644
index 000000000000..e8925f9c5d36
Binary files /dev/null and b/icons/obj/clothing/faction/hardliners/belt.dmi differ
diff --git a/icons/obj/clothing/faction/hardliners/eyes.dmi b/icons/obj/clothing/faction/hardliners/eyes.dmi
new file mode 100644
index 000000000000..2e339c1b510a
Binary files /dev/null and b/icons/obj/clothing/faction/hardliners/eyes.dmi differ
diff --git a/icons/obj/clothing/faction/hardliners/head.dmi b/icons/obj/clothing/faction/hardliners/head.dmi
new file mode 100644
index 000000000000..5101eeedce9c
Binary files /dev/null and b/icons/obj/clothing/faction/hardliners/head.dmi differ
diff --git a/icons/obj/clothing/faction/hardliners/suits.dmi b/icons/obj/clothing/faction/hardliners/suits.dmi
new file mode 100644
index 000000000000..39da1c952739
Binary files /dev/null and b/icons/obj/clothing/faction/hardliners/suits.dmi differ
diff --git a/icons/obj/clothing/faction/hardliners/uniforms.dmi b/icons/obj/clothing/faction/hardliners/uniforms.dmi
new file mode 100644
index 000000000000..233eb500c826
Binary files /dev/null and b/icons/obj/clothing/faction/hardliners/uniforms.dmi differ
diff --git a/icons/obj/clothing/faction/ngr/head.dmi b/icons/obj/clothing/faction/ngr/head.dmi
index 822766336620..d2258c5565dd 100644
Binary files a/icons/obj/clothing/faction/ngr/head.dmi and b/icons/obj/clothing/faction/ngr/head.dmi differ
diff --git a/icons/obj/clothing/hats.dmi b/icons/obj/clothing/hats.dmi
index fb23d4bc2afe..cf7f5ff09bd0 100644
Binary files a/icons/obj/clothing/hats.dmi and b/icons/obj/clothing/hats.dmi differ
diff --git a/icons/obj/clothing/head/armor.dmi b/icons/obj/clothing/head/armor.dmi
index c6792be933fc..6757e591c853 100644
Binary files a/icons/obj/clothing/head/armor.dmi and b/icons/obj/clothing/head/armor.dmi differ
diff --git a/icons/obj/clothing/head/spacesuits.dmi b/icons/obj/clothing/head/spacesuits.dmi
index 5c2351c7489f..8befad3b380f 100644
Binary files a/icons/obj/clothing/head/spacesuits.dmi and b/icons/obj/clothing/head/spacesuits.dmi differ
diff --git a/icons/obj/clothing/suits/spacesuits.dmi b/icons/obj/clothing/suits/spacesuits.dmi
index c86acdcbf3e5..2208c8b7cf98 100644
Binary files a/icons/obj/clothing/suits/spacesuits.dmi and b/icons/obj/clothing/suits/spacesuits.dmi differ
diff --git a/icons/obj/storage.dmi b/icons/obj/storage.dmi
index 03f2163cddce..df2add959648 100644
Binary files a/icons/obj/storage.dmi and b/icons/obj/storage.dmi differ
diff --git a/icons/turf/walls/concrete.dmi b/icons/turf/walls/concrete.dmi
index a201e7ab6375..da6a6e45a4ce 100644
Binary files a/icons/turf/walls/concrete.dmi and b/icons/turf/walls/concrete.dmi differ
diff --git a/icons/turf/walls/hexacrete.dmi b/icons/turf/walls/hexacrete.dmi
index 6866ac7f536f..f120455f46ad 100644
Binary files a/icons/turf/walls/hexacrete.dmi and b/icons/turf/walls/hexacrete.dmi differ
diff --git a/shiptest.dme b/shiptest.dme
index b38c7ff84045..70a39551e007 100644
--- a/shiptest.dme
+++ b/shiptest.dme
@@ -1965,6 +1965,7 @@
#include "code\modules\clothing\factions\clip.dm"
#include "code\modules\clothing\factions\frontiersmen.dm"
#include "code\modules\clothing\factions\gezena.dm"
+#include "code\modules\clothing\factions\hardliners.dm"
#include "code\modules\clothing\factions\nanotrasen.dm"
#include "code\modules\clothing\factions\ngr.dm"
#include "code\modules\clothing\factions\suns.dm"