diff --git a/baystation12.dme b/baystation12.dme
index 2b02c844aa..38b5899d66 100644
--- a/baystation12.dme
+++ b/baystation12.dme
@@ -546,6 +546,7 @@
#include "code\game\objects\items\crayons.dm"
#include "code\game\objects\items\glassjar.dm"
#include "code\game\objects\items\latexballoon.dm"
+#include "code\game\objects\items\paintkit.dm"
#include "code\game\objects\items\shooting_range.dm"
#include "code\game\objects\items\toys.dm"
#include "code\game\objects\items\trash.dm"
@@ -925,13 +926,14 @@
#include "code\modules\clothing\under\syndicate.dm"
#include "code\modules\clothing\under\accessories\accessory.dm"
#include "code\modules\clothing\under\accessories\armband.dm"
+#include "code\modules\clothing\under\accessories\badges.dm"
#include "code\modules\clothing\under\accessories\holster.dm"
+#include "code\modules\clothing\under\accessories\lockets.dm"
#include "code\modules\clothing\under\accessories\storage.dm"
#include "code\modules\clothing\under\jobs\civilian.dm"
#include "code\modules\clothing\under\jobs\engineering.dm"
#include "code\modules\clothing\under\jobs\medsci.dm"
#include "code\modules\clothing\under\jobs\security.dm"
-#include "code\modules\customitems\item_defines.dm"
#include "code\modules\customitems\item_spawning.dm"
#include "code\modules\detectivework\evidence.dm"
#include "code\modules\detectivework\footprints_and_rag.dm"
diff --git a/code/controllers/communications.dm b/code/controllers/communications.dm
index 9e82c55d05..723d2e001a 100644
--- a/code/controllers/communications.dm
+++ b/code/controllers/communications.dm
@@ -72,7 +72,7 @@ Radio:
1355 - Medical
1357 - Engineering
1359 - Security
-1341 - death squad
+1341 - deathsquad
1443 - Confession Intercom
1347 - Cargo techs
1349 - Service people
diff --git a/code/datums/supplypacks.dm b/code/datums/supplypacks.dm
index 315c21ef17..1a7a9b8ae0 100644
--- a/code/datums/supplypacks.dm
+++ b/code/datums/supplypacks.dm
@@ -259,7 +259,7 @@ var/list/all_supply_groups = list("Operations","Security","Hospitality","Enginee
name = "Corgi Crate"
contains = list()
cost = 50
- containertype = /obj/structure/largecrate/lisa
+ containertype = /obj/structure/largecrate/animal/corgi
containername = "Corgi Crate"
group = "Hydroponics"
@@ -289,7 +289,7 @@ var/list/all_supply_groups = list("Operations","Security","Hospitality","Enginee
/datum/supply_packs/cow
name = "Cow crate"
cost = 30
- containertype = /obj/structure/largecrate/cow
+ containertype = /obj/structure/largecrate/animal/cow
containername = "Cow crate"
access = access_hydroponics
group = "Hydroponics"
@@ -297,7 +297,7 @@ var/list/all_supply_groups = list("Operations","Security","Hospitality","Enginee
/datum/supply_packs/goat
name = "Goat crate"
cost = 25
- containertype = /obj/structure/largecrate/goat
+ containertype = /obj/structure/largecrate/animal/goat
containername = "Goat crate"
access = access_hydroponics
group = "Hydroponics"
@@ -305,19 +305,11 @@ var/list/all_supply_groups = list("Operations","Security","Hospitality","Enginee
/datum/supply_packs/chicken
name = "Chicken crate"
cost = 20
- containertype = /obj/structure/largecrate/chick
+ containertype = /obj/structure/largecrate/animal/chick
containername = "Chicken crate"
access = access_hydroponics
group = "Hydroponics"
-/datum/supply_packs/lisa
- name = "Corgi crate"
- contains = list()
- cost = 50
- containertype = /obj/structure/largecrate/lisa
- containername = "Corgi crate"
- group = "Hydroponics"
-
/datum/supply_packs/seeds
name = "Seeds crate"
contains = list(/obj/item/seeds/chiliseed,
@@ -1525,7 +1517,32 @@ var/list/all_supply_groups = list("Operations","Security","Hospitality","Enginee
/obj/item/weapon/stock_parts/subspace/crystal,
/obj/item/weapon/storage/toolbox/electrical)
+/datum/supply_packs/randomised/exosuit_mod
+ num_contained = 1
+ contains = list(
+ /obj/item/device/kit/paint/ripley,
+ /obj/item/device/kit/paint/ripley/death,
+ /obj/item/device/kit/paint/ripley/flames_red,
+ /obj/item/device/kit/paint/ripley/flames_blue
+ )
+ name = "Random APLU modkit"
+ cost = 200
+ containertype = /obj/structure/closet/crate
+ containername = "heavy crate"
+ group = "Miscellaneous"
+/datum/supply_packs/randomised/exosuit_mod/durand
+ contains = list(
+ /obj/item/device/kit/paint/durand,
+ /obj/item/device/kit/paint/durand/seraph,
+ /obj/item/device/kit/paint/durand/phazon
+ )
+ name = "Random Durand exosuit modkit"
-
-
+/datum/supply_packs/randomised/exosuit_mod/gygax
+ contains = list(
+ /obj/item/device/kit/paint/gygax,
+ /obj/item/device/kit/paint/gygax/darkgygax,
+ /obj/item/device/kit/paint/gygax/recitence
+ )
+ name = "Random Gygax exosuit modkit"
diff --git a/code/game/gamemodes/gameticker.dm b/code/game/gamemodes/gameticker.dm
index 41183aeffa..08ad7e7253 100644
--- a/code/game/gamemodes/gameticker.dm
+++ b/code/game/gamemodes/gameticker.dm
@@ -292,7 +292,7 @@ var/global/datum/controller/gameticker/ticker
if(player.mind.assigned_role != "MODE")
job_master.EquipRank(player, player.mind.assigned_role, 0)
UpdateFactionList(player)
- EquipCustomItems(player)
+ equip_custom_items(player)
if(captainless)
for(var/mob/M in player_list)
if(!istype(M,/mob/new_player))
diff --git a/code/game/jobs/job/medical.dm b/code/game/jobs/job/medical.dm
index 5b6fca11b6..c3ebe4e71e 100644
--- a/code/game/jobs/job/medical.dm
+++ b/code/game/jobs/job/medical.dm
@@ -214,7 +214,7 @@
if (H.mind.role_alt_title)
switch(H.mind.role_alt_title)
if("Emergency Medical Technician")
- H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/medical/fluff/short(H), slot_w_uniform)
+ H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/medical/paramedic(H), slot_w_uniform)
H.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/toggle/fr_jacket(H), slot_wear_suit)
if("Paramedic")
H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/medical/black(H), slot_w_uniform)
diff --git a/code/game/machinery/suit_storage_unit.dm b/code/game/machinery/suit_storage_unit.dm
index d45cade6c5..d1e728e676 100644
--- a/code/game/machinery/suit_storage_unit.dm
+++ b/code/game/machinery/suit_storage_unit.dm
@@ -736,6 +736,10 @@
user << "The cycler already contains a helmet."
return
+ if(I.icon_override == CUSTOM_ITEM_MOB)
+ user << "You cannot refit a customised voidsuit."
+ return
+
user << "You fit \the [I] into the suit cycler."
user.drop_item()
I.loc = src
@@ -755,6 +759,10 @@
user << "The cycler already contains a voidsuit."
return
+ if(I.icon_override == CUSTOM_ITEM_MOB)
+ user << "You cannot refit a customised voidsuit."
+ return
+
user << "You fit \the [I] into the suit cycler."
user.drop_item()
I.loc = src
diff --git a/code/game/mecha/combat/gygax.dm b/code/game/mecha/combat/gygax.dm
index 7e8df94015..b47564e2b3 100644
--- a/code/game/mecha/combat/gygax.dm
+++ b/code/game/mecha/combat/gygax.dm
@@ -17,7 +17,7 @@
max_equip = 3
/obj/mecha/combat/gygax/dark
- desc = "A lightweight exosuit used by Nanotrasen Death Squads. A significantly upgraded Gygax security mech."
+ desc = "A lightweight exosuit used by NanoTrasen Heavy Asset Protection. A significantly upgraded Gygax security mech."
name = "Dark Gygax"
icon_state = "darkgygax"
initial_icon = "darkgygax"
diff --git a/code/game/mecha/equipment/tools/tools.dm b/code/game/mecha/equipment/tools/tools.dm
index 67d8e5667c..432c990114 100644
--- a/code/game/mecha/equipment/tools/tools.dm
+++ b/code/game/mecha/equipment/tools/tools.dm
@@ -1076,18 +1076,6 @@
do_after_cooldown()
return 1
-/obj/item/weapon/paintkit //Please don't use this for anything, it's a base type for custom mech paintjobs.
- name = "mecha customisation kit"
- desc = "A generic kit containing all the needed tools and parts to turn a mech into another mech."
- icon = 'icons/obj/custom_items.dmi'
- icon_state = "royce_kit"
-
- var/new_name = "mech" //What is the variant called?
- var/new_desc = "A mech." //How is the new mech described?
- var/new_icon = "ripley" //What base icon will the new mech use?
- var/removable = null //Can the kit be removed?
- var/list/allowed_types = list() //Types of mech that the kit will work on.
-
/obj/item/mecha_parts/mecha_equipment/tool/passenger
name = "passenger compartment"
desc = "A mountable passenger compartment for exo-suits. Rather cramped."
diff --git a/code/game/mecha/mecha.dm b/code/game/mecha/mecha.dm
index 2afb089d68..b52f98827a 100644
--- a/code/game/mecha/mecha.dm
+++ b/code/game/mecha/mecha.dm
@@ -815,34 +815,6 @@
user.visible_message("[user] attaches [W] to [src].", "You attach [W] to [src]")
return
- else if(istype(W, /obj/item/weapon/paintkit))
-
- if(occupant)
- user << "You can't customize a mech while someone is piloting it - that would be unsafe!"
- return
-
- var/obj/item/weapon/paintkit/P = W
- var/found = null
-
- for(var/type in P.allowed_types)
- if(type==src.initial_icon)
- found = 1
- break
-
- if(!found)
- user << "That kit isn't meant for use on this class of exosuit."
- return
-
- user.visible_message("[user] opens [P] and spends some quality time customising [src].")
-
- src.name = P.new_name
- src.desc = P.new_desc
- src.initial_icon = P.new_icon
- src.reset_icon()
-
- user.drop_item()
- qdel(P)
-
else
call((proc_res["dynattackby"]||src), "dynattackby")(W,user)
/*
diff --git a/code/game/objects/items/paintkit.dm b/code/game/objects/items/paintkit.dm
new file mode 100644
index 0000000000..34802577d6
--- /dev/null
+++ b/code/game/objects/items/paintkit.dm
@@ -0,0 +1,178 @@
+/obj/item/device/kit
+ icon_state = "modkit"
+ icon = 'icons/obj/device.dmi'
+ var/new_name = "mech" //What is the variant called?
+ var/new_desc = "A mech." //How is the new mech described?
+ var/new_icon = "ripley" //What base icon will the new mech use?
+ var/new_icon_file
+ var/uses = 1 // Uses before the kit deletes itself.
+
+/obj/item/device/kit/examine()
+ ..()
+ usr << "It has [uses] [uses>1?"uses":"use"] left."
+
+/obj/item/device/kit/proc/use(var/amt, var/mob/user)
+ uses -= amt
+ playsound(get_turf(user), 'sound/items/Screwdriver.ogg', 50, 1)
+ if(uses<1)
+ user.drop_item()
+ qdel(src)
+
+// Root hardsuit kit defines.
+// Icons for modified hardsuits need to be in the proper .dmis because suit cyclers may cock them up.
+/obj/item/device/kit/suit
+ name = "voidsuit modification kit"
+ desc = "A kit for modifying a voidsuit."
+ uses = 2
+ var/new_light_overlay
+ var/new_mob_icon_file
+
+/obj/item/clothing/head/helmet/space/void/attackby(var/obj/item/O, var/mob/user)
+ if(istype(O,/obj/item/device/kit/suit))
+ var/obj/item/device/kit/suit/kit = O
+ name = "[kit.new_name] suit helmet"
+ desc = kit.new_desc
+ icon_state = "[kit.new_icon]_helmet"
+ item_state = "[kit.new_icon]_helmet"
+ if(kit.new_icon_file)
+ icon = kit.new_icon_file
+ if(kit.new_mob_icon_file)
+ icon_override = kit.new_mob_icon_file
+ if(kit.new_light_overlay)
+ light_overlay = kit.new_light_overlay
+ user << "You set about modifying the helmet into [src]."
+ var/mob/living/carbon/human/H = user
+ if(istype(H))
+ species_restricted = list(H.species.name)
+ kit.use(1,user)
+ return 1
+ return ..()
+
+/obj/item/clothing/suit/space/void/attackby(var/obj/item/O, var/mob/user)
+ if(istype(O,/obj/item/device/kit/suit))
+ var/obj/item/device/kit/suit/kit = O
+ name = "[kit.new_name] voidsuit"
+ desc = kit.new_desc
+ icon_state = "[kit.new_icon]_suit"
+ item_state = "[kit.new_icon]_suit"
+ if(kit.new_icon_file)
+ icon = kit.new_icon_file
+ if(kit.new_mob_icon_file)
+ icon_override = kit.new_mob_icon_file
+ user << "You set about modifying the suit into [src]."
+ var/mob/living/carbon/human/H = user
+ if(istype(H))
+ species_restricted = list(H.species.name)
+ kit.use(1,user)
+ return 1
+ return ..()
+
+/obj/item/device/kit/paint
+ name = "mecha customisation kit"
+ desc = "A kit containing all the needed tools and parts to repaint a mech."
+ var/removable = null
+ var/list/allowed_types = list()
+
+/obj/item/device/kit/paint/examine()
+ ..()
+ usr << "This kit will convert an exosuit into: [new_name]."
+ usr << "This kit can be used on the following exosuit models:"
+ for(var/exotype in allowed_types)
+ usr << "- [capitalize(exotype)]"
+
+/obj/mecha/attackby(var/obj/item/weapon/W, var/mob/user)
+ if(istype(W, /obj/item/device/kit/paint))
+ if(occupant)
+ user << "You can't customize a mech while someone is piloting it - that would be unsafe!"
+ return
+
+ var/obj/item/device/kit/paint/P = W
+ var/found = null
+
+ for(var/type in P.allowed_types)
+ if(type==src.initial_icon)
+ found = 1
+ break
+
+ if(!found)
+ user << "That kit isn't meant for use on this class of exosuit."
+ return
+
+ user.visible_message("[user] opens [P] and spends some quality time customising [src].")
+ src.name = P.new_name
+ src.desc = P.new_desc
+ src.initial_icon = P.new_icon
+ if(P.new_icon_file)
+ src.icon = P.new_icon_file
+ src.reset_icon()
+ P.use(1, user)
+ return 1
+ else
+ return ..()
+
+//Ripley APLU kits.
+/obj/item/device/kit/paint/ripley
+ name = "\"Classic\" APLU customisation kit"
+ new_name = "APLU \"Classic\""
+ new_desc = "A very retro APLU unit; didn't they retire these back in 2543?"
+ new_icon = "ripley-old"
+ allowed_types = list("ripley")
+
+/obj/item/device/kit/paint/ripley/death
+ name = "\"Reaper\" APLU customisation kit"
+ new_name = "APLU \"Reaper\""
+ new_desc = "A terrifying, grim power loader. Why do those clamps have spikes?"
+ new_icon = "deathripley"
+ allowed_types = list("ripley","firefighter")
+
+/obj/item/device/kit/paint/ripley/flames_red
+ name = "\"Firestarter\" APLU customisation kit"
+ new_name = "APLU \"Firestarter\""
+ new_desc = "A standard APLU exosuit with stylish orange flame decals."
+ new_icon = "ripley_flames_red"
+
+/obj/item/device/kit/paint/ripley/flames_blue
+ name = "\"Burning Chrome\" APLU customisation kit"
+ new_name = "APLU \"Burning Chrome\""
+ new_desc = "A standard APLU exosuit with stylish blue flame decals."
+ new_icon = "ripley_flames_blue"
+
+// Durand kits.
+/obj/item/device/kit/paint/durand
+ name = "\"Classic\" Durand customisation kit"
+ new_name = "Durand \"Classic\""
+ new_desc = "An older model of Durand combat exosuit. This model was retired for rotating a pilot's torso 180 degrees."
+ new_icon = "old_durand"
+ allowed_types = list("durand")
+
+/obj/item/device/kit/paint/durand/seraph
+ name = "\"Cherubim\" Durand customisation kit"
+ new_name = "Durand \"Cherubim\""
+ new_desc = "A Durand combat exosuit modelled after ancient Earth entertainment. Your heart goes doki-doki just looking at it."
+ new_icon = "old_durand"
+
+/obj/item/device/kit/paint/durand/phazon
+ name = "\"Sypher\" Durand customisation kit"
+ new_name = "Durand \"Sypher\""
+ new_desc = "A Durand combat exosuit with some very stylish neons and decals. Seems to blur slightly at the edges; probably an optical illusion."
+ new_icon = "phazon"
+
+// Gygax kits.
+/obj/item/device/kit/paint/gygax
+ name = "\"Jester\" Gygax customisation kit"
+ new_name = "Gygax \"Jester\""
+ new_desc = "A Gygax exosuit modelled after the infamous combat-troubadors of Earth's distant past. Terrifying to behold."
+ new_icon = "honker"
+ allowed_types = list("gygax")
+
+/obj/item/device/kit/paint/gygax/darkgygax
+ name = "\"Silhouette\" Gygax customisation kit"
+ new_name = "Gygax \"Silhouette\""
+ new_desc = "An ominous Gygax exosuit modelled after the fictional corporate 'death squads' that were popular in pulp action-thrillers back in 2554."
+ new_icon = "darkgygax"
+
+/obj/item/device/kit/paint/gygax/recitence
+ name = "\"Gaoler\" Gygax customisation kit"
+ new_name = "Durand \"Gaoler\""
+ new_desc = "A bulky silver Gygax exosuit. The extra armour appears to be painted on, but it's very shiny."
+ new_icon = "recitence"
\ No newline at end of file
diff --git a/code/game/objects/items/toys.dm b/code/game/objects/items/toys.dm
index 5f5fbff188..09da666a46 100644
--- a/code/game/objects/items/toys.dm
+++ b/code/game/objects/items/toys.dm
@@ -923,6 +923,11 @@
desc = "A plushie of a fuzzy spider! It has eight legs - all the better to hug you with."
icon_state = "spiderplushie"
+/obj/item/toy/plushie/farwa
+ name = "farwa plush"
+ desc = "A farwa plush doll. It's soft and comforting!"
+ icon_state = "farwaplushie"
+
//Toy cult sword
/obj/item/toy/cultsword
name = "foam sword"
diff --git a/code/game/objects/items/weapons/cards_ids.dm b/code/game/objects/items/weapons/cards_ids.dm
index 833524399d..75693427ef 100644
--- a/code/game/objects/items/weapons/cards_ids.dm
+++ b/code/game/objects/items/weapons/cards_ids.dm
@@ -81,7 +81,7 @@
/obj/item/device/taperecorder,
/obj/item/device/hailer,
/obj/item/device/megaphone,
- /obj/item/clothing/accessory/holobadge,
+ /obj/item/clothing/accessory/badge/holo,
/obj/structure/closet/crate/secure,
/obj/structure/closet/secure_closet,
/obj/machinery/librarycomp,
@@ -162,17 +162,6 @@
/obj/item/weapon/card/id/GetID()
return src
-/obj/item/weapon/card/id/attackby(obj/item/weapon/W as obj, mob/user as mob)
- ..()
- if(istype(W,/obj/item/weapon/id_wallet))
- user << "You slip [src] into [W]."
- src.name = "[src.registered_name]'s [W.name] ([src.assignment])"
- src.desc = W.desc
- src.icon = W.icon
- src.icon_state = W.icon_state
- qdel(W)
- return
-
/obj/item/weapon/card/id/verb/read()
set name = "Read ID Card"
set category = "Object"
@@ -297,7 +286,7 @@
/obj/item/weapon/card/id/centcom/ERT
name = "\improper Emergency Response Team ID"
assignment = "Emergency Response Team"
-
+
/obj/item/weapon/card/id/centcom/ERT/New()
..()
access += get_all_accesses()
diff --git a/code/game/objects/items/weapons/cigs_lighters.dm b/code/game/objects/items/weapons/cigs_lighters.dm
index 957bfde1f5..736c995870 100644
--- a/code/game/objects/items/weapons/cigs_lighters.dm
+++ b/code/game/objects/items/weapons/cigs_lighters.dm
@@ -416,35 +416,33 @@ CIGARETTE PACKETS ARE IN FANCY.DM
icon = 'icons/obj/items.dmi'
icon_state = "lighter-g"
item_state = "lighter-g"
- var/icon_on = "lighter-g-on"
- var/icon_off = "lighter-g"
w_class = 1
throwforce = 4
flags = CONDUCT
slot_flags = SLOT_BELT
attack_verb = list("burnt", "singed")
+ var/base_state
/obj/item/weapon/flame/lighter/zippo
name = "\improper Zippo lighter"
desc = "The zippo."
icon_state = "zippo"
item_state = "zippo"
- icon_on = "zippoon"
- icon_off = "zippo"
/obj/item/weapon/flame/lighter/random
New()
- var/color = pick("r","c","y","g")
- icon_on = "lighter-[color]-on"
- icon_off = "lighter-[color]"
- icon_state = icon_off
+ icon_state = "lighter-[pick("r","c","y","g")]"
+ item_state = icon_state
+ base_state = icon_state
/obj/item/weapon/flame/lighter/attack_self(mob/living/user)
+ if(!base_state)
+ base_state = icon_state
if(user.r_hand == src || user.l_hand == src)
if(!lit)
lit = 1
- icon_state = icon_on
- item_state = icon_on
+ icon_state = "[base_state]on"
+ item_state = "[base_state]on"
if(istype(src, /obj/item/weapon/flame/lighter/zippo) )
user.visible_message("Without even breaking stride, [user] flips open and lights [src] in one smooth movement.")
else
@@ -462,8 +460,8 @@ CIGARETTE PACKETS ARE IN FANCY.DM
processing_objects.Add(src)
else
lit = 0
- icon_state = icon_off
- item_state = icon_off
+ icon_state = "[base_state]"
+ item_state = "[base_state]"
if(istype(src, /obj/item/weapon/flame/lighter/zippo) )
user.visible_message("You hear a quiet click, as [user] shuts off [src] without even looking at what they're doing.")
else
diff --git a/code/game/objects/items/weapons/kitchen.dm b/code/game/objects/items/weapons/kitchen.dm
index 4eef78e45c..cfb05d1148 100644
--- a/code/game/objects/items/weapons/kitchen.dm
+++ b/code/game/objects/items/weapons/kitchen.dm
@@ -155,6 +155,12 @@
"\red [user] is slitting \his stomach open with the [src.name]! It looks like \he's trying to commit seppuku.")
return (BRUTELOSS)
+/obj/item/weapon/kitchenknife/hook
+ name = "meat hook"
+ desc = "A sharp, metal hook what sticks into things."
+ icon_state = "hook_knife"
+ item_state = "hook_knife"
+
/obj/item/weapon/kitchenknife/ritual
name = "ritual knife"
desc = "The unearthly energies that once powered this blade are now dormant."
diff --git a/code/game/objects/items/weapons/storage/belt.dm b/code/game/objects/items/weapons/storage/belt.dm
index 47821d6a24..79b1852e7b 100644
--- a/code/game/objects/items/weapons/storage/belt.dm
+++ b/code/game/objects/items/weapons/storage/belt.dm
@@ -92,12 +92,9 @@
/obj/item/weapon/storage/belt/medical/emt
name = "EMT utility belt"
desc = "A sturdy black webbing belt with attached pouches."
- icon = 'icons/obj/custom_items.dmi'
icon_state = "emsbelt"
item_state = "emsbelt"
-
-
/obj/item/weapon/storage/belt/security
name = "security belt"
desc = "Can hold security gear like handcuffs and flashes."
diff --git a/code/game/objects/items/weapons/storage/firstaid.dm b/code/game/objects/items/weapons/storage/firstaid.dm
index 7b2c03ba4a..c23dfcdb51 100644
--- a/code/game/objects/items/weapons/storage/firstaid.dm
+++ b/code/game/objects/items/weapons/storage/firstaid.dm
@@ -289,3 +289,17 @@
new /obj/item/weapon/reagent_containers/pill/tramadol( src )
new /obj/item/weapon/reagent_containers/pill/tramadol( src )
new /obj/item/weapon/reagent_containers/pill/tramadol( src )
+
+/obj/item/weapon/storage/pill_bottle/citalopram
+ name = "bottle of Citalopram pills"
+ desc = "Contains pills used to stabilize a patient's mood."
+
+ New()
+ ..()
+ new /obj/item/weapon/reagent_containers/pill/citalopram( src )
+ new /obj/item/weapon/reagent_containers/pill/citalopram( src )
+ new /obj/item/weapon/reagent_containers/pill/citalopram( src )
+ new /obj/item/weapon/reagent_containers/pill/citalopram( src )
+ new /obj/item/weapon/reagent_containers/pill/citalopram( src )
+ new /obj/item/weapon/reagent_containers/pill/citalopram( src )
+ new /obj/item/weapon/reagent_containers/pill/citalopram( src )
\ No newline at end of file
diff --git a/code/game/objects/random/random.dm b/code/game/objects/random/random.dm
index de73e5e7b3..18e0c75e1a 100644
--- a/code/game/objects/random/random.dm
+++ b/code/game/objects/random/random.dm
@@ -158,7 +158,7 @@
spawn_nothing_percentage = 50
item_to_spawn()
return pick(prob(3);/obj/item/weapon/storage/pill_bottle/tramadol,\
- prob(4);/obj/item/weapon/haircomb/fluff/cado_keppel_1,\
+ prob(4);/obj/item/weapon/haircomb,\
prob(2);/obj/item/weapon/storage/pill_bottle/happy,\
prob(2);/obj/item/weapon/storage/pill_bottle/zoom,\
prob(5);/obj/item/weapon/contraband/poster,\
diff --git a/code/game/objects/structures/coathanger.dm b/code/game/objects/structures/coathanger.dm
index a54c40b755..decba4bfd3 100644
--- a/code/game/objects/structures/coathanger.dm
+++ b/code/game/objects/structures/coathanger.dm
@@ -4,7 +4,7 @@
icon = 'icons/obj/coatrack.dmi'
icon_state = "coatrack0"
var/obj/item/clothing/suit/coat
- var/list/allowed = list(/obj/item/clothing/suit/storage/labcoat, /obj/item/clothing/suit/storage/toggle/labcoat, /obj/item/clothing/suit/storage/det_suit)
+ var/list/allowed = list(/obj/item/clothing/suit/storage/toggle/labcoat, /obj/item/clothing/suit/storage/det_suit)
/obj/structure/coatrack/attack_hand(mob/user as mob)
user.visible_message("[user] takes [coat] off \the [src].", "You take [coat] off the \the [src]")
diff --git a/code/game/objects/structures/crates_lockers/largecrate.dm b/code/game/objects/structures/crates_lockers/largecrate.dm
index 5419ee2639..a0ef655579 100644
--- a/code/game/objects/structures/crates_lockers/largecrate.dm
+++ b/code/game/objects/structures/crates_lockers/largecrate.dm
@@ -23,44 +23,7 @@
return attack_hand(user)
/obj/structure/largecrate/mule
- icon_state = "mulecrate"
-
-/obj/structure/largecrate/lisa
- icon_state = "lisacrate"
-
-/obj/structure/largecrate/lisa/attackby(obj/item/weapon/W as obj, mob/user as mob) //ugly but oh well
- if(istype(W, /obj/item/weapon/crowbar))
- new /mob/living/simple_animal/corgi/Lisa(loc)
- ..()
-
-/obj/structure/largecrate/cow
- name = "cow crate"
- icon_state = "lisacrate"
-
-/obj/structure/largecrate/cow/attackby(obj/item/weapon/W as obj, mob/user as mob)
- if(istype(W, /obj/item/weapon/crowbar))
- new /mob/living/simple_animal/cow(loc)
- ..()
-
-/obj/structure/largecrate/goat
- name = "goat crate"
- icon_state = "lisacrate"
-
-/obj/structure/largecrate/goat/attackby(obj/item/weapon/W as obj, mob/user as mob)
- if(istype(W, /obj/item/weapon/crowbar))
- new /mob/living/simple_animal/hostile/retaliate/goat(loc)
- ..()
-
-/obj/structure/largecrate/chick
- name = "chicken crate"
- icon_state = "lisacrate"
-
-/obj/structure/largecrate/chick/attackby(obj/item/weapon/W as obj, mob/user as mob)
- if(istype(W, /obj/item/weapon/crowbar))
- var/num = rand(4, 6)
- for(var/i = 0, i < num, i++)
- new /mob/living/simple_animal/chick(loc)
- ..()
+ name = "MULE crate"
/obj/structure/largecrate/hoverpod
name = "\improper Hoverpod assembly crate"
@@ -71,9 +34,43 @@
if(istype(W, /obj/item/weapon/crowbar))
var/obj/item/mecha_parts/mecha_equipment/ME
var/obj/mecha/working/hoverpod/H = new (loc)
-
+
ME = new /obj/item/mecha_parts/mecha_equipment/tool/hydraulic_clamp
ME.attach(H)
ME = new /obj/item/mecha_parts/mecha_equipment/tool/passenger
ME.attach(H)
..()
+
+/obj/structure/largecrate/animal
+ icon_state = "mulecrate"
+ var/held_count = 1
+ var/held_type
+
+/obj/structure/largecrate/animal/New()
+ ..()
+ for(var/i = 1;i<=held_count;i++)
+ new held_type(src)
+
+/obj/structure/largecrate/animal/corgi
+ name = "corgi carrier"
+ held_type = /mob/living/simple_animal/corgi
+
+/obj/structure/largecrate/animal/cow
+ name = "cow crate"
+ held_type = /mob/living/simple_animal/cow
+
+/obj/structure/largecrate/animal/goat
+ name = "goat crate"
+ held_type = /mob/living/simple_animal/hostile/retaliate/goat
+
+/obj/structure/largecrate/animal/cat
+ name = "cat carrier"
+ held_type = /mob/living/simple_animal/cat
+
+/obj/structure/largecrate/animal/cat/bones
+ held_type = /mob/living/simple_animal/cat/fluff/bones
+
+/obj/structure/largecrate/animal/chick
+ name = "chicken crate"
+ held_count = 5
+ held_type = /mob/living/simple_animal/chick
\ No newline at end of file
diff --git a/code/global.dm b/code/global.dm
index fce133f586..bfb1806b80 100644
--- a/code/global.dm
+++ b/code/global.dm
@@ -268,4 +268,4 @@ var/global/obj/item/device/radio/intercom/global_announcer = new(null)
var/list/station_departments = list("Command", "Medical", "Engineering", "Science", "Security", "Cargo", "Civilian")
var/global/const/TICKS_IN_DAY = 864000
-var/global/const/TICKS_IN_SECOND = 10
+var/global/const/TICKS_IN_SECOND = 10
diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm
index b522d7e7c6..7d29322163 100644
--- a/code/modules/admin/admin.dm
+++ b/code/modules/admin/admin.dm
@@ -1010,6 +1010,46 @@ var/global/floorIsLava = 0
var/datum/seed/S = plant_controller.seeds[seedtype]
S.harvest(usr,0,0,1)
+/datum/admins/proc/spawn_custom_item()
+ set category = "Debug"
+ set desc = "Spawn a custom item."
+ set name = "Spawn Custom Item"
+
+ if(!check_rights(R_SPAWN)) return
+
+ var/owner = input("Select a ckey.", "Spawn Custom Item") as null|anything in custom_items
+ if(!owner|| !custom_items[owner])
+ return
+
+ var/list/possible_items = custom_items[owner]
+ var/datum/custom_item/item_to_spawn = input("Select an item to spawn.", "Spawn Custom Item") as null|anything in possible_items
+ if(!item_to_spawn)
+ return
+
+ item_to_spawn.spawn_item(get_turf(usr))
+
+/datum/admins/proc/check_custom_items()
+
+ set category = "Debug"
+ set desc = "Check the custom item list."
+ set name = "Check Custom Items"
+
+ if(!check_rights(R_SPAWN)) return
+
+ if(!custom_items)
+ usr << "Custom item list is null."
+ return
+
+ if(!custom_items.len)
+ usr << "Custom item list not populated."
+ return
+
+ for(var/assoc_key in custom_items)
+ usr << "[assoc_key] has:"
+ var/list/current_items = custom_items[assoc_key]
+ for(var/datum/custom_item/item in current_items)
+ usr << "- name: [item.name] icon: [item.item_icon] path: [item.item_path] desc: [item.item_desc]"
+
/datum/admins/proc/spawn_plant()
set category = "Debug"
set desc = "Spawn a spreading plant effect."
diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm
index 877b29b0b1..c22fc85466 100644
--- a/code/modules/admin/admin_verbs.dm
+++ b/code/modules/admin/admin_verbs.dm
@@ -115,6 +115,8 @@ var/list/admin_verbs_fun = list(
)
var/list/admin_verbs_spawn = list(
/datum/admins/proc/spawn_fruit,
+ /datum/admins/proc/spawn_custom_item,
+ /datum/admins/proc/check_custom_items,
/datum/admins/proc/spawn_plant,
/datum/admins/proc/spawn_atom, /*allows us to spawn instances*/
/client/proc/respawn_character,
diff --git a/code/modules/admin/verbs/striketeam.dm b/code/modules/admin/verbs/striketeam.dm
index c49e09d554..ef217b16f9 100644
--- a/code/modules/admin/verbs/striketeam.dm
+++ b/code/modules/admin/verbs/striketeam.dm
@@ -4,7 +4,7 @@ var/const/commandos_possible = 6 //if more Commandos are needed in the future
/client/proc/strike_team()
set category = "Fun"
set name = "Spawn Strike Team"
- set desc = "Spawns a death squad if you want to run an admin event."
+ set desc = "Spawns a strike team if you want to run an admin event."
if(!src.holder)
src << "Only administrators may use this command."
@@ -20,12 +20,12 @@ var/const/commandos_possible = 6 //if more Commandos are needed in the future
var/datum/antagonist/deathsquad/team
- var/choice = input(usr, "Select type of strike team:") as null|anything in list("Death Squad", "Mercenaries")
+ var/choice = input(usr, "Select type of strike team:") as null|anything in list("Heavy Asset Protection", "Mercenaries")
if(!choice)
return
switch(choice)
- if("Death Squad")
+ if("Heavy Asset Protection")
team = deathsquad
if("Mercenaries")
team = commandos
diff --git a/code/modules/client/preferences_gear.dm b/code/modules/client/preferences_gear.dm
index 03a1104905..b63869bccb 100644
--- a/code/modules/client/preferences_gear.dm
+++ b/code/modules/client/preferences_gear.dm
@@ -279,7 +279,7 @@ var/global/list/gear_datums = list()
/datum/gear/scanning_goggles
display_name = "scanning goggles"
- path = /obj/item/clothing/glasses/fluff/uzenwa_sissra_1
+ path = /obj/item/clothing/glasses/science/scanners
cost = 1
slot = slot_glasses
@@ -893,7 +893,7 @@ var/global/list/gear_datums = list()
/datum/gear/toeless_jackboots
display_name = "toe-less jackboots"
- path = /obj/item/clothing/shoes/jackboots/fluff/kecer_eldraran
+ path = /obj/item/clothing/shoes/jackboots/unathi
cost = 1
slot = slot_shoes
diff --git a/code/modules/clothing/glasses/glasses.dm b/code/modules/clothing/glasses/glasses.dm
index 97eb175277..8233172211 100644
--- a/code/modules/clothing/glasses/glasses.dm
+++ b/code/modules/clothing/glasses/glasses.dm
@@ -62,6 +62,11 @@
..()
overlay = global_hud.science
+/obj/item/clothing/glasses/science/scanners
+ name = "Scanning Goggles"
+ desc = "A very oddly shaped pair of goggles with bits of wire poking out the sides. A soft humming sound emanates from it."
+ icon_state = "uzenwa_sissra_1"
+
/obj/item/clothing/glasses/night
name = "Night Vision Goggles"
desc = "You can totally see in the dark now!"
diff --git a/code/modules/clothing/shoes/miscellaneous.dm b/code/modules/clothing/shoes/miscellaneous.dm
index 616d13e858..9fd713fc74 100644
--- a/code/modules/clothing/shoes/miscellaneous.dm
+++ b/code/modules/clothing/shoes/miscellaneous.dm
@@ -89,6 +89,13 @@
force = 3
siemens_coefficient = 0.7
+/obj/item/clothing/shoes/jackboots/unathi
+ name = "toe-less jackboots"
+ desc = "Modified pair of jackboots, particularly friendly to those species whose toes hold claws."
+ item_state = "digiboots"
+ icon_state = "digiboots"
+ species_restricted = null
+
/obj/item/clothing/shoes/cult
name = "boots"
desc = "A pair of boots worn by the followers of Nar-Sie."
diff --git a/code/modules/clothing/suits/jobs.dm b/code/modules/clothing/suits/jobs.dm
index a589c745d2..e0fa47f64f 100644
--- a/code/modules/clothing/suits/jobs.dm
+++ b/code/modules/clothing/suits/jobs.dm
@@ -185,6 +185,14 @@
/obj/item/device/healthanalyzer, /obj/item/device/flashlight, /obj/item/device/radio, /obj/item/weapon/tank/emergency_oxygen)
body_parts_covered = UPPER_TORSO|ARMS
+/obj/item/clothing/suit/storage/toggle/fr_jacket/ems
+ name = "\improper EMS jacket"
+ desc = "A dark blue, martian-pattern, EMS jacket. It sports high-visibility reflective stripes and a star of life on the back."
+ icon_state = "ems_jacket_closed"
+ item_state = "ems_jacket_closed"
+ icon_open = "ems_jacket_open"
+ icon_closed = "ems_jacket_closed"
+
//Mime
/obj/item/clothing/suit/suspenders
name = "suspenders"
diff --git a/code/modules/clothing/under/accessories/accessory.dm b/code/modules/clothing/under/accessories/accessory.dm
index 8ce02ec8e5..10c8bb70b8 100644
--- a/code/modules/clothing/under/accessories/accessory.dm
+++ b/code/modules/clothing/under/accessories/accessory.dm
@@ -140,78 +140,3 @@
/obj/item/clothing/accessory/medal/gold/heroism
name = "medal of exceptional heroism"
desc = "An extremely rare golden medal awarded only by CentComm. To recieve such a medal is the highest honor and as such, very few exist. This medal is almost never awarded to anybody but commanders."
-
-/*
- Holobadges are worn on the belt or neck, and can be used to show that the holder is an authorized
- Security agent - the user details can be imprinted on the badge with a Security-access ID card,
- or they can be emagged to accept any ID for use in disguises.
-*/
-
-/obj/item/clothing/accessory/holobadge
- name = "holobadge"
- desc = "This glowing blue badge marks the holder as THE LAW."
- icon_state = "holobadge"
- slot_flags = SLOT_BELT | SLOT_TIE
-
- var/emagged = 0 //Emagging removes Sec check.
- var/stored_name = null
-
-/obj/item/clothing/accessory/holobadge/cord
- icon_state = "holobadge-cord"
- slot_flags = SLOT_MASK | SLOT_TIE
-
-/obj/item/clothing/accessory/holobadge/attack_self(mob/user as mob)
- if(!stored_name)
- user << "Waving around a badge before swiping an ID would be pretty pointless."
- return
- if(isliving(user))
- user.visible_message("\red [user] displays their NanoTrasen Internal Security Legal Authorization Badge.\nIt reads: [stored_name], NT Security.","\red You display your NanoTrasen Internal Security Legal Authorization Badge.\nIt reads: [stored_name], NT Security.")
-
-/obj/item/clothing/accessory/holobadge/attackby(var/obj/item/O as obj, var/mob/user as mob)
-
- if (istype(O, /obj/item/weapon/card/emag))
- if (emagged)
- user << "\red [src] is already cracked."
- return
- else
- emagged = 1
- user << "\red You swipe [O] and crack the holobadge security checks."
- return
-
- else if(istype(O, /obj/item/weapon/card/id) || istype(O, /obj/item/device/pda))
-
- var/obj/item/weapon/card/id/id_card = null
-
- if(istype(O, /obj/item/weapon/card/id))
- id_card = O
- else
- var/obj/item/device/pda/pda = O
- id_card = pda.id
-
- if(access_security in id_card.access || emagged)
- user << "You imprint your ID details onto the badge."
- stored_name = id_card.registered_name
- name = "holobadge ([stored_name])"
- desc = "This glowing blue badge marks [stored_name] as THE LAW."
- else
- user << "[src] rejects your insufficient access rights."
- return
- ..()
-
-/obj/item/clothing/accessory/holobadge/attack(mob/living/carbon/human/M, mob/living/user)
- if(isliving(user))
- user.visible_message("\red [user] invades [M]'s personal space, thrusting [src] into their face insistently.","\red You invade [M]'s personal space, thrusting [src] into their face insistently. You are the law.")
-
-/obj/item/weapon/storage/box/holobadge
- name = "holobadge box"
- desc = "A box claiming to contain holobadges."
- New()
- new /obj/item/clothing/accessory/holobadge(src)
- new /obj/item/clothing/accessory/holobadge(src)
- new /obj/item/clothing/accessory/holobadge(src)
- new /obj/item/clothing/accessory/holobadge(src)
- new /obj/item/clothing/accessory/holobadge/cord(src)
- new /obj/item/clothing/accessory/holobadge/cord(src)
- ..()
- return
-
diff --git a/code/modules/clothing/under/accessories/badges.dm b/code/modules/clothing/under/accessories/badges.dm
new file mode 100644
index 0000000000..bb6613582e
--- /dev/null
+++ b/code/modules/clothing/under/accessories/badges.dm
@@ -0,0 +1,98 @@
+/*
+ Badges are worn on the belt or neck, and can be used to show that the holder is an authorized
+ Security agent - the user details can be imprinted on holobadges with a Security-access ID card,
+ or they can be emagged to accept any ID for use in disguises.
+*/
+
+/obj/item/clothing/accessory/badge
+ name = "detective's badge"
+ desc = "NanoTrasen Security Department detective's badge, made from gold."
+ icon_state = "badge"
+ slot_flags = SLOT_BELT | SLOT_TIE
+
+ var/stored_name
+ var/badge_string = "NanoTrasen Security Department"
+
+/obj/item/clothing/accessory/badge/old
+ name = "faded badge"
+ desc = "A faded badge, backed with leather. It bears the emblem of the Forensic division."
+ icon_state = "badge_round"
+
+/obj/item/clothing/accessory/badge/proc/set_name(var/new_name)
+ stored_name = new_name
+ name = "[initial(name)] ([stored_name])"
+
+/obj/item/clothing/accessory/badge/attack_self(mob/user as mob)
+
+ if(!stored_name)
+ user << "You polish your old badge fondly, shining up the surface."
+ set_name(user.real_name)
+ return
+
+ if(isliving(user))
+ if(stored_name)
+ user.visible_message("[user] displays their [src.name].\nIt reads: [stored_name], [badge_string].","You display your [src.name].\nIt reads: [stored_name], [badge_string].")
+ else
+ user.visible_message("[user] displays their [src.name].\nIt reads: [badge_string].","You display your [src.name]. It reads: [badge_string].")
+
+/obj/item/clothing/accessory/badge/attack(mob/living/carbon/human/M, mob/living/user)
+ if(isliving(user))
+ user.visible_message("[user] invades [M]'s personal space, thrusting [src] into their face insistently.","You invade [M]'s personal space, thrusting [src] into their face insistently.")
+
+//.Holobadges.
+/obj/item/clothing/accessory/badge/holo
+ name = "holobadge"
+ desc = "This glowing blue badge marks the holder as THE LAW."
+ var/emagged = 0 //Emagging removes Sec check.
+
+/obj/item/clothing/accessory/badge/holo/cord
+ icon_state = "holobadge-cord"
+ slot_flags = SLOT_MASK | SLOT_TIE
+
+/obj/item/clothing/accessory/badge/holo/attack_self(mob/user as mob)
+ if(!stored_name)
+ user << "Waving around a holobadge before swiping an ID would be pretty pointless."
+ return
+ return ..()
+
+/obj/item/clothing/accessory/badge/holo/attackby(var/obj/item/O as obj, var/mob/user as mob)
+
+ if (istype(O, /obj/item/weapon/card/emag))
+ if (emagged)
+ user << "[src] is already cracked."
+ return
+ else
+ emagged = 1
+ user << "You swipe [O] and crack the holobadge security checks."
+ return
+
+ else if(istype(O, /obj/item/weapon/card/id) || istype(O, /obj/item/device/pda))
+
+ var/obj/item/weapon/card/id/id_card = null
+
+ if(istype(O, /obj/item/weapon/card/id))
+ id_card = O
+ else
+ var/obj/item/device/pda/pda = O
+ id_card = pda.id
+
+ if(access_security in id_card.access || emagged)
+ user << "You imprint your ID details onto the badge."
+ set_name(user.real_name)
+ else
+ user << "[src] rejects your insufficient access rights."
+ return
+ ..()
+
+/obj/item/weapon/storage/box/holobadge
+ name = "holobadge box"
+ desc = "A box claiming to contain holobadges."
+ New()
+ new /obj/item/clothing/accessory/badge/holo(src)
+ new /obj/item/clothing/accessory/badge/holo(src)
+ new /obj/item/clothing/accessory/badge/holo(src)
+ new /obj/item/clothing/accessory/badge/holo(src)
+ new /obj/item/clothing/accessory/badge/holo/cord(src)
+ new /obj/item/clothing/accessory/badge/holo/cord(src)
+ ..()
+ return
diff --git a/code/modules/clothing/under/accessories/lockets.dm b/code/modules/clothing/under/accessories/lockets.dm
new file mode 100644
index 0000000000..d5fa21c0aa
--- /dev/null
+++ b/code/modules/clothing/under/accessories/lockets.dm
@@ -0,0 +1,46 @@
+/obj/item/clothing/accessory/locket
+ name = "silver locket"
+ desc = "This oval shaped, argentium sterling silver locket hangs on an incredibly fine, refractive string, almost thin as hair and microweaved from links to a deceptive strength, of similar material. The edges are engraved very delicately with an elegant curving design, but overall the main is unmarked and smooth to the touch, leaving room for either remaining as a stolid piece or future alterations. There is an obvious internal place for a picture or lock of some sort, but even behind that is a very thin compartment unhinged with the pinch of a thumb and forefinger."
+ icon_state = "locket"
+ item_state = "locket"
+ slot_flags = 0
+ w_class = 2
+ slot_flags = SLOT_MASK | SLOT_TIE
+ var/base_icon
+ var/open
+ var/obj/item/held //Item inside locket.
+
+/obj/item/clothing/accessory/locket/heart
+ name = "heart-shaped locket"
+ desc = " A silver, heart-shaped locket. It flips open to reveal two pictures, one of a young red-headed woman and one of a brunette of similar age. Small writing is etched onto the back, reading 'M+L'. Some may regard it as cheesy."
+ icon_state = "heartlocket"
+
+/obj/item/clothing/accessory/locket/attack_self(mob/user as mob)
+ if(!base_icon)
+ base_icon = icon_state
+ open = !open
+ user << "You flip \the [src] [open?"open":"closed"]."
+ if(open)
+ icon_state = "[base_icon]_open"
+ if(held)
+ user << "\The [held] falls out!"
+ held.loc = get_turf(user)
+ src.held = null
+ else
+ icon_state = "[base_icon]"
+
+/obj/item/clothing/accessory/locket/attackby(var/obj/item/O as obj, mob/user as mob)
+ if(!open)
+ user << "You have to open it first."
+ return
+
+ if(istype(O,/obj/item/weapon/paper) || istype(O, /obj/item/weapon/photo))
+ if(held)
+ usr << "[src] already has something inside it."
+ else
+ usr << "You slip [O] into [src]."
+ user.drop_item()
+ O.loc = src
+ src.held = O
+ return
+ ..()
\ No newline at end of file
diff --git a/code/modules/clothing/under/jobs/medsci.dm b/code/modules/clothing/under/jobs/medsci.dm
index 10e6b05518..3ceab6cee0 100644
--- a/code/modules/clothing/under/jobs/medsci.dm
+++ b/code/modules/clothing/under/jobs/medsci.dm
@@ -113,6 +113,13 @@
permeability_coefficient = 0.50
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0)
+/obj/item/clothing/under/rank/medical/paramedic
+ name = "short sleeve medical jumpsuit"
+ desc = "It's made of a special fiber that provides minor protection against biohazards. This one has a cross on the chest denoting that the wearer is trained medical personnel."
+ icon_state = "medical_short"
+ item_state = "medical_short"
+ body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS
+
/obj/item/clothing/under/rank/medical/blue
name = "medical scrubs"
desc = "It's made of a special fiber that provides minor protection against biohazards. This one is in baby blue."
diff --git a/code/modules/customitems/item_defines.dm b/code/modules/customitems/item_defines.dm
deleted file mode 100644
index f1237cb721..0000000000
--- a/code/modules/customitems/item_defines.dm
+++ /dev/null
@@ -1,1472 +0,0 @@
-// Add custom items you give to people here, and put their icons in custom_items.dmi
-// Remember to change 'icon = 'icons/obj/custom_items.dmi'' for items not using /obj/item/fluff as a base
-// Clothing item_state doesn't use custom_items.dmi. Just add them to the normal clothing files.
-
-/obj/item/fluff // so that they don't spam up the object tree
- icon = 'icons/obj/custom_items.dmi'
- w_class = 1.0
-
-//////////////////////////////////
-////////// Fluff Items ///////////
-//////////////////////////////////
-
-/obj/item/weapon/paper/fluff/sue_donem // aikasan: Sue Donem
- name = "cyborgification waiver"
- desc = "It's some kind of official-looking contract."
-
-/obj/item/weapon/paper/fluff/sue_donem/New()
- ..()
-
- info = "Organic Carrier AIA and Standard Cyborgification Agreement
\n
\nUnder the authority of Nanotrasen Synthetic Intelligence Division, this document hereby authorizes an accredited Roboticist of the NSS Exodus or a deputized authority to perform a regulation lobotomisation upon the person of one 'Sue Donem' (hereafter referred to as the Subject) with intent to enact a live Artificial Intelligence Assimilation (AIA) or live Cyborgification proceedure.
\n
\nNo further station authorization is required, and the Subject waives all rights as a human under Nanotrasen internal and external legal protocol. This document is subject to amendment under Nanotrasen internal protocol \[REDACTED\].
\n
\nSigned: Sue Donem
\n"
-
- stamps = (stamps=="" ? "
" : "
") + "This paper has been stamped with the NanoTrasen Synthetic Intelligence Division rubber stamp."
-
- var/image/stampoverlay = image('icons/obj/bureaucracy.dmi')
- stampoverlay.pixel_x = rand(-2, 2)
- stampoverlay.pixel_y = rand(-3, 2)
- stampoverlay.icon_state = "paper_stamp-rd"
- overlays += stampoverlay
-
- update_icon()
-
-/obj/item/fluff/wes_solari_1 //tzefa: Wes Solari
- name = "family photograph"
- desc = "A family photograph of a couple and a young child, Written on the back it says \"See you soon Dad -Roy\"."
- icon_state = "wes_solari_1"
-
-/obj/item/fluff/sarah_calvera_1 //fniff: Sarah Calvera
- name = "old photo"
- desc = "Looks like it was made on a really old, cheap camera. Low quality. The camera shows a young hispanic looking girl with red hair wearing a white dress is standing in front of\
- an old looking wall. On the back there is a note in black marker that reads \"Sara, Siempre pensé que eras tan linda con ese vestido. Tu hermano, Carlos.\""
- icon_state = "sarah_calvera_1"
-
-/obj/item/fluff/angelo_wilkerson_1 //fniff: Angleo Wilkerson
- name = "fancy watch"
- desc = "An old and expensive pocket watch. Engraved on the bottom is \"Odium est Source De Dolor\". On the back, there is an engraving that does not match the bottom and looks more recent.\
- \"Angelo, If you find this, you shall never see me again. Please, for your sake, go anywhere and do anything but stay. I'm proud of you and I will always love you. Your father, Jacob Wilkerson.\"\
- Jacob Wilkerson... Wasn't he that serial killer?"
- icon_state = "angelo_wilkerson_1"
-
-/obj/item/fluff/sarah_carbrokes_1 //gvazdas: Sarah Carbrokes
- name = "locket"
- desc = "A grey locket with a picture of a black haired man in it. The text above it reads: \"Edwin Carbrokes\"."
- icon_state = "sarah_carbrokes_1"
-
-/obj/item/fluff/ethan_way_1 //whitellama: Ethan Way
- name = "old ID"
- desc = "A scratched and worn identification card; it appears too damaged to inferface with any technology. You can almost make out \"Tom Cabinet\" in the smeared ink."
- icon_state = "ethan_way_1"
-
-/obj/item/fluff/val_mcneil_1 //silentthunder: Val McNeil
- name = "rosary pendant"
- desc = "A cross on a ring of beads, has McNeil etched onto the back."
- icon_state = "val_mcneil_1"
-
-/obj/item/fluff/steve_johnson_1 //thebreadbocks: Steve Johnson
- name = "bottle of hair dye"
- desc = "A bottle of pink hair dye. So that's how he gets his beard so pink..."
- icon_state = "steve_johnson_1"
- item_state = "steve_johnson_1"
-
-/obj/item/fluff/david_fanning_1 //sicktrigger: David Fanning
- name = "golden scalpel"
- desc = "A fine surgical cutting tool covered in thin gold leaf. Does not seem able to cut anything."
- icon_state = "david_fanning_1"
- item_state = "david_fanning_1"
-
-/obj/item/fluff/john_mckeever_1 //kirbyelder: John McKeever
- name = "Suspicious Paper"
- desc = "A piece of paper reading: Smash = 1/3 Leaf Juice, 1/3 Tricker, 1/3 Aajkli Extract"
- icon_state = "paper"
- item_state = "paper"
-
-/obj/item/fluff/maurice_bedford_1
- name = "Monogrammed Handkerchief"
- desc = "A neatly folded handkerchief embroidered with a 'M'."
- icon_state = "maurice_bedford_1"
-
-/obj/item/weapon/book/fluff/johnathan_falcian_1
- name = "sketchbook"
- desc = "A small, well-used sketchbook."
- icon = 'icons/obj/custom_items.dmi'
- icon_state = "johnathan_notebook"
- dat = "In the notebook there are numerous drawings of various crew-mates, locations, and scenes on the ship. They are of fairly good quality."
- author = "Johnathan Falcian"
- title = "Falcian's sketchbook"
-
-//////////////////////////////////
-////////// Usable Items //////////
-//////////////////////////////////
-
-/obj/item/weapon/folder/blue/fluff/matthew_riebhardt //Matthew Riebhardt - ZekeSulastin
- name = "academic journal"
- desc = "An academic journal, seemingly pertaining to medical genetics. This issue is for the second quarter of 2557. Paper flags demarcate some articles the owner finds interesting."
- icon = 'icons/obj/custom_items.dmi'
- icon_state = "matthewriebhardt"
-
-/////////////////////// Serveris: Officer's Notebook ////////////////////
-
-/obj/item/weapon/folder/blue/fluff/officer_notebook
- name = "Officer's Notebook"
- desc = "A simple, spiral bound notebook. A holographic crescent moon is printed on the cover, as well as 'S. Seto' beneath it. Numerous paper flags divide the pages, titled everything from incident reports to personal notes."
- icon = 'icons/obj/custom_items.dmi'
- icon_state = "syrus_notebook"
-
-/////////////////////// Cataguettes - Lucy's Stethoscope - Lucy Kemmerer //////
-
-/obj/item/clothing/accessory/stethoscope/fluff/lucystethos
- name = "Lucy's Stethoscope"
- desc = "A medical apparatus intended to ease in listening to the sounds of the human body. This one looks cleaner and sparklier than the rest. There is a small silver plaque attached to the tubing, with the words 'Lucy Kemmerer' engraved on it."
- icon_state = "lucystethos"
- item_state = "lucystethos"
- icon = 'icons/obj/custom_items.dmi'
-
-/obj/item/weapon/pen/fluff/multi //spaceman96: Trenna Seber
- name = "multicolor pen"
- desc = "It's a cool looking pen. Lots of colors!"
-
-//////////////////////// AIsForAxolotl - Tea Flask - Margaret Stewart //////////
-
-/obj/item/weapon/reagent_containers/food/drinks/flask/vacuumflask/fluff/margaret
- name = "Tea Flask"
- desc = "A plastic vacuum flask with an ugly tartan pattern. 'M.S.' has been written on the bottom with a silver marker."
- icon = 'icons/obj/custom_items.dmi'
- icon_state = "margaret_flask"
-
-/obj/item/weapon/pen/fluff/fancypen //orangebottle: Lillian Levett, Lilliana Reade
- name = "fancy pen"
- desc = "A fancy metal pen. It uses blue ink. An inscription on one side reads,\"L.L. - L.R.\""
- icon = 'icons/obj/custom_items.dmi'
- icon_state = "fancypen"
-
-/obj/item/weapon/pen/fluff/eugene_bissegger_1 //metamorp: eugene bisseger
- name = "Gilded Pen"
- desc = "A golden pen that is gilded with a meager amount of gold material. The word 'NanoTrasen' is etched on the clip of the pen."
- icon = 'icons/obj/custom_items.dmi'
- icon_state = "eugene_pen"
-
-/obj/item/weapon/pen/fluff/fountainpen //paththegreat: Eli Stevens
- name = "Engraved Fountain Pen"
- desc = "An expensive looking pen with the initials E.S. engraved into the side."
- icon = 'icons/obj/custom_items.dmi'
- icon_state = "fountainpen"
-
-/obj/item/fluff/victor_kaminsky_1 //chinsky: Victor Kaminski
- name = "golden detective's badge"
- desc = "NanoTrasen Security Department detective's badge, made from gold. Badge number is 564."
- icon_state = "victor_kaminsky_1"
-
-/obj/item/fluff/victor_kaminsky_1/attack_self(mob/user as mob)
- for(var/mob/O in viewers(user, null))
- O.show_message(text("[] shows you: \icon[] [].", user, src, src.name), 1)
- src.add_fingerprint(user)
-
-/obj/item/fluff/ana_issek_2 //suethecake: Ana Issek
- name = "Faded Badge"
- desc = "A faded badge, backed with leather, that reads 'NT Security Force' across the front. It bears the emblem of the Forensic division."
- icon_state = "ana_badge"
- item_state = "ana_badge"
-
-/obj/item/fluff/ana_issek_2/attack_self(mob/user as mob)
- if(isliving(user))
- user.visible_message("\red [user] flashes their golden security badge.\nIt reads: Ana Issek, NT Security.","\red You display the faded bage.\nIt reads: Ana Issek, NT Security.")
-
-/obj/item/fluff/ana_issek_2/attack(mob/living/carbon/human/M, mob/living/user)
- if(isliving(user))
- user.visible_message("\red [user] invades [M]'s personal space, thrusting [src] into their face insistently.","\red You invade [M]'s personal space, thrusting [src] into their face insistently. You are the law.")
-
-/obj/item/weapon/soap/fluff/azare_siraj_1 //mister fox: Azare Siraj
- name = "S'randarr's Tongue Leaf"
- desc = "A waxy, scentless leaf."
- icon = 'icons/obj/custom_items.dmi'
- icon_state = "siraj_tongueleaf"
- item_state = "siraj_tongueleaf"
-
-/obj/item/weapon/clipboard/fluff/smallnote //lexusjjss: Lexus Langg, Zachary Tomlinson
- name = "small notebook"
- desc = "A generic small spiral notebook that flips upwards."
- icon = 'icons/obj/custom_items.dmi'
- icon_state = "smallnotetext"
- item_state = "smallnotetext"
-
-/obj/item/weapon/storage/fluff/maye_daye_1 //morrinn: Maye Day
- name = "pristine lunchbox"
- desc = "A pristine stainless steel lunch box. The initials M.D. are engraved on the inside of the lid."
- icon = 'icons/obj/custom_items.dmi'
- icon_state = "maye_daye_1"
-
-/obj/item/weapon/reagent_containers/food/drinks/flask/fluff/william_hackett
- name = "handmade flask"
- desc = "A wooden flask with a silver lid and bottom. It has a matte, dark blue paint on it with the initials \"W.H.\" etched in black."
- icon = 'icons/obj/custom_items.dmi'
- icon_state = "williamhackett"
-
-/obj/item/weapon/storage/firstaid/fluff/asus_rose //Kerbal22 - Asus Rose
- name = "rugged medkit"
- desc = "A dinged up medkit, it seems to have seen quite a bit of use."
- icon = 'icons/obj/custom_items.dmi'
- icon_state = "asusrose"
-
-/obj/item/weapon/reagent_containers/food/drinks/flask/fluff/johann_erzatz_1 //leonheart11: Johann Erzatz
- name = "vintage thermos"
- desc = "An older thermos with a faint shine."
- icon = 'icons/obj/custom_items.dmi'
- icon_state = "johann_erzatz_1"
- volume = 50
-
-/obj/item/weapon/flame/lighter/zippo/fluff/li_matsuda_1 //mangled: Li Matsuda
- name = "blue zippo lighter"
- desc = "A zippo lighter made of some blue metal."
- icon = 'icons/obj/custom_items.dmi'
- icon_state = "bluezippo"
- icon_on = "bluezippoon"
- icon_off = "bluezippo"
-
-/obj/item/weapon/flame/lighter/zippo/fluff/michael_guess_1 //Dragor23: Michael Guess
- name = "engraved lighter"
- desc = "A golden lighter, engraved with some ornaments and a G."
- icon = 'icons/obj/custom_items.dmi'
- icon_state = "guessip"
- icon_on = "guessipon"
- icon_off = "guessip"
-
-///////////////////////////// Jarcolr - Uberto Dandolo - Painted secure briefcase /////////////
-
-/obj/item/weapon/storage/secure/briefcase/fluff/uberto_dandolo
- name = "painted secure briefcase"
- desc = "A bulky briefcase with a combination lock. It features the color green, white and red, and a golden eagle in the middle."
- icon = 'icons/obj/custom_items.dmi'
- icon_state = "painted_secure"
- item_state = "painted_secure"
-
-///////////////////////////// Ziepes - Janis Godmanis - Red Zippo //////////////////////
-
-/obj/item/weapon/flame/lighter/zippo/fluff/janis_godmanis
- name = "Red-White-Red Zippo"
- desc = "A badass zippo that looks like the Austrian flag. Upon closer inspection it is revealed that it's a different shade of red than the Austrian flag.."
- icon = 'icons/obj/custom_items.dmi'
- icon_state = "redzippo"
- icon_on = "redzippoon"
- icon_off = "redzippo"
-
-////////////////////////////// Tudoreleuu - Emilia Scotts - Customized pAI /////////////
-
-/obj/item/device/paicard/fluff/emilia_scotts
- name = "Customized pAI unit"
- desc = "It seems to be a pAI Unit, albeit in a different shell. It acts exactly like the normal one. "
- icon = 'icons/obj/custom_items.dmi'
- icon_state = "customized_pai"
-
-////////////////////////////// Vivallion - Isaac Jachym - Butterfly Lighter ////////////
-
-/obj/item/weapon/flame/lighter/zippo/fluff/isaac_jachym
- name = "Butterfly lighter"
- desc = "A custom-made zippo lighter, looks rather expensive. On one of it's sides, a clean inscription has been made, 'Butterfly, what is your wisdom?' And I looked down at it's majestic form, flexing it's wings as if to show it's strength. 'Fuck chechenya.' Had it whispered, before fluttering away, and so we went to war."
- icon = 'icons/obj/custom_items.dmi'
- icon_state = "che_zippo"
- icon_on = "che_zippoon"
- icon_off = "che_zippo"
-
-/obj/item/weapon/flame/lighter/zippo/fluff/riley_rohtin_1 //rawrtaicho: Riley Rohtin
- name = "Riley's black zippo"
- desc = "A black zippo lighter, which holds some form of sentimental value."
- icon = 'icons/obj/custom_items.dmi'
- icon_state = "blackzippo"
- icon_on = "blackzippoon"
- icon_off = "blackzippo"
-
-/obj/item/weapon/flame/lighter/zippo/fluff/fay_sullivan_1 //furohman: Fay Sullivan
- name = "Graduation Lighter"
- desc = "A silver engraved lighter with 41 on one side and Tharsis University on the other. The lid reads Fay Sullivan, Cybernetic Engineering, 2541"
- icon = 'icons/obj/custom_items.dmi'
- icon_state = "gradzippo"
- icon_on = "gradzippoon"
- icon_off = "gradzippo"
-
-/obj/item/weapon/flame/lighter/zippo/fluff/executivekill_1 //executivekill: Hunter Duke
- name = "Gonzo Fist zippo"
- desc = "A Zippo lighter with the iconic Gonzo Fist on a matte black finish."
- icon = 'icons/obj/custom_items.dmi'
- icon_state = "gonzozippo"
- icon_on = "gonzozippoon"
- icon_off = "gonzozippo"
-
-/obj/item/weapon/flame/lighter/zippo/fluff/naples_1 //naples: Russell Vierson
- name = "Engraved zippo"
- desc = "A intricately engraved Zippo lighter."
- icon = 'icons/obj/custom_items.dmi'
- icon_state = "engravedzippo"
- icon_on = "engravedzippoon"
- icon_off = "engravedzippo"
-
-/obj/item/weapon/haircomb/fluff/cado_keppel_1 //sparklysheep: Cado Keppel
- name = "purple comb"
- desc = "A pristine purple comb made from flexible plastic. It has a small K etched into its side."
-
-/obj/item/weapon/fluff/hugo_cinderbacth_1 //thatoneguy: Hugo Cinderbatch
- name = "Old Cane"
- desc = "An old brown cane made from wood. It has a a large, itallicized H on it's handle."
- icon = 'icons/obj/custom_items.dmi'
- icon_state = "special_cane"
-
-/obj/item/device/camera/fluff/orange //chinsky: Summer Springfield
- name = "orange camera"
- icon = 'icons/obj/custom_items.dmi'
- desc = "A modified detective's camera, painted in bright orange. On the back you see \"Have fun\" written in small accurate letters with something black."
- icon_state = "orangecamera"
- icon_on = "orangecamera"
- icon_off = "camera_off"
- pictures_left = 30
-
-/obj/item/device/camera/fluff/oldcamera //magmaram: Maria Crash
- name = "Old Camera"
- icon = 'icons/obj/custom_items.dmi'
- desc = "An old, slightly beat-up digital camera, with a cheap photo printer taped on. It's a nice shade of blue."
- icon_state = "oldcamera"
- icon_on = "oldcamera"
- icon_off = "oldcamera_off"
- pictures_left = 30
-
-/obj/item/weapon/id_wallet/fluff/reese_mackenzie //Reese MacKenzie - ThoseDernSquirrels
-
- name = "ID wallet"
- desc = "A wallet made of black leather, holding an ID and a gold badge that reads 'NT.' The ID has a small picture of a man, with the caption Reese James MacKenzie, with other pieces of information to the right of the picture."
- icon = 'icons/obj/custom_items.dmi'
- icon_state = "reesemackenzie"
-
-/obj/item/weapon/card/id/fluff/lifetime //fastler: Fastler Greay; it seemed like something multiple people would have
- name = "Lifetime ID Card"
- desc = "A modified ID card given only to those people who have devoted their lives to the better interests of NanoTrasen. It sparkles blue."
- icon = 'icons/obj/custom_items.dmi'
- icon_state = "lifetimeid"
-
-/obj/item/weapon/reagent_containers/food/drinks/flask/fluff/shinyflask //lexusjjss: Lexus Langg & Zachary Tomlinson
- name = "shiny flask"
- desc = "A shiny metal flask. It appears to have a Greek symbol inscribed on it."
- icon = 'icons/obj/custom_items.dmi'
- icon_state = "shinyflask"
- volume = 50
-
-/obj/item/weapon/reagent_containers/food/drinks/flask/fluff/lithiumflask //mcgulliver: Wox Derax
- name = "Lithium Flask"
- desc = "A flask with a Lithium Atom symbol on it."
- icon = 'icons/obj/custom_items.dmi'
- icon_state = "lithiumflask"
- volume = 50
-
-/obj/item/weapon/reagent_containers/glass/beaker/large/fluff/nashida_bishara_1 //rukral:Nashida Bisha'ra
- name = "Nashida's Etched Beaker"
- desc = "The message: 'Please do not be removing this beaker from the chemistry lab. If lost, return to Nashida Bisha'ra' can be seen etched into the side of this large beaker."
- icon = 'icons/obj/chemical.dmi'
- icon_state = "beakerlarge"
- matter = list("glass" = 5000)
- volume = 100
-
-/obj/item/weapon/reagent_containers/glass/beaker/fluff/eleanor_stone //Rkf45: Eleanor Stone
- name = "teapot"
- desc = "An elegant teapot. The engraving on the bottom reads 'ENS'"
- icon = 'icons/obj/custom_items.dmi'
- icon_state = "eleanorstone"
- item_state = "eleanorstone"
-
- volume = 150
- amount_per_transfer_from_this = 10
- possible_transfer_amounts = list(5,10,15,25,30,50,150)
-
-/obj/item/weapon/storage/pill_bottle/fluff/listermedbottle //compactninja: Lister Black
- name = "Pill bottle (anti-depressants)"
- desc = "Contains pills used to deal with depression. They appear to be prescribed to Lister Black"
- New()
- ..()
- new /obj/item/weapon/reagent_containers/pill/fluff/listermed( src )
- new /obj/item/weapon/reagent_containers/pill/fluff/listermed( src )
- new /obj/item/weapon/reagent_containers/pill/fluff/listermed( src )
- new /obj/item/weapon/reagent_containers/pill/fluff/listermed( src )
- new /obj/item/weapon/reagent_containers/pill/fluff/listermed( src )
- new /obj/item/weapon/reagent_containers/pill/fluff/listermed( src )
- new /obj/item/weapon/reagent_containers/pill/fluff/listermed( src )
-
-/obj/item/weapon/reagent_containers/pill/fluff/listermed
- name = "anti-depressant pill"
- desc = "Used to deal with depression."
- icon_state = "pill9"
- New()
- ..()
- reagents.add_reagent("stoxin", 5)
- reagents.add_reagent("sugar", 10)
- reagents.add_reagent("ethanol", 5)
-
-/obj/item/clothing/mask/fluff/electriccig //CubeJackal: Barry Sharke
- name = "Electronic cigarette"
- desc = "An electronic cigarette. Most of the relief of a real cigarette with none of the side effects. Often used by smokers who are trying to quit the habit."
- icon = 'icons/obj/custom_items.dmi'
- icon_state = "cigon"
- throw_speed = 0.5
- item_state = "ciglit"
- w_class = 1
- body_parts_covered = null
-
-//Strange penlight, Nerezza: Asher Spock
-
-/obj/item/weapon/reagent_containers/hypospray/fluff/asher_spock_1
- name = "strange penlight"
- desc = "Besides the coloring, this penlight looks rather normal and innocent. However, you get a nagging feeling whenever you see it..."
- icon = 'icons/obj/custom_items.dmi'
- icon_state = "asher_spock_1"
- amount_per_transfer_from_this = 5
- volume = 15
-
-/obj/item/weapon/reagent_containers/hypospray/fluff/asher_spock_1/New()
- ..()
- reagents.remove_reagent("tricordrazine", 30)
- reagents.add_reagent("oxycodone", 15)
- update_icon()
- return
-
-/obj/item/weapon/reagent_containers/hypospray/fluff/asher_spock_1/attack_self(mob/user as mob)
- user << "\blue You click \the [src] but get no reaction. Must be dead."
-
-/obj/item/weapon/reagent_containers/hypospray/fluff/asher_spock_1/attack(mob/M as mob, mob/user as mob)
- if (user.ckey != "nerezza") //Because this can end up in the wrong hands, let's make it useless for them!
- user << "\blue You click \the [src] but get no reaction. Must be dead."
- return
- if(!reagents.total_volume)
- user << "\red \The [src] is empty."
- return
- if (!( istype(M, /mob) ))
- return
- if (reagents.total_volume)
- if (M == user && user.ckey == "nerezza") //Make sure this is being used by the right person, for the right reason (self injection)
- visible_message("\blue [user] presses their \
- penlight against their skin, quickly clicking the button once.", \
- "\blue You press the disguised autoinjector against your skin and click the button. There's a sharp pain at the injection site that rapidly fades.", \
- "You hear a rustle as someone moves nearby, then a sharp click.")
- if (M != user && user.ckey == "nerezza") //Woah now, you better be careful partner
- user << "\blue You don't want to contaminate the autoinjector."
- return
- src.reagents.reaction(M, INGEST)
- if(M.reagents)
- var/trans = reagents.trans_to(M, amount_per_transfer_from_this)
- user << "\blue [trans] units injected. [reagents.total_volume] units remaining in \the [src]."
- return
-
-/obj/item/weapon/reagent_containers/hypospray/fluff/asher_spock_1/examine(mob/user as mob)
- ..()
- if(user.ckey != "nerezza") return //Only the owner knows how to examine the contents.
- if(reagents && reagents.reagent_list.len)
- for(var/datum/reagent/R in reagents.reagent_list)
- usr << "\blue You examine the penlight closely and see that it has [R.volume] units of [R.name] stored."
- else
- usr << "\blue You examine the penlight closely and see that it is currently empty."
-
-//End strange penlight
-
-/obj/item/weapon/card/id/fluff/asher_spock_2 //Nerezza: Asher Spock
- name = "Odysses Specialist ID card"
- desc = "A special identification card with a red cross signifying an emergency physician has specialised in Odysseus operations and maintenance.\nIt grants the owner recharge bay access."
- icon = 'icons/obj/custom_items.dmi'
- icon_state = "odysseus_spec_id"
-
-/obj/item/weapon/clipboard/fluff/mcreary_journal //sirribbot: James McReary
- name = "McReary's journal"
- desc = "A journal with a warning sticker on the front cover. The initials \"J.M.\" are written on the back."
- icon = 'icons/obj/custom_items.dmi'
- icon_state = "mcreary_journal"
- item_state = "mcreary_journal"
-
-/obj/item/device/flashlight/fluff/thejesster14_1 //thejesster14: Rosa Wolff
- name = "old red flashlight"
- desc = "A very old, childlike flashlight."
- icon = 'icons/obj/custom_items.dmi'
- icon_state = "wolfflight"
- item_state = "wolfflight"
-
-/obj/item/weapon/crowbar/fluff/zelda_creedy_1 //daaneesh: Zelda Creedy
- name = "Zelda's Crowbar"
- desc = "A pink crow bar that has an engraving that reads, 'To Zelda. Love always, Dawn'"
- icon = 'icons/obj/custom_items.dmi'
- icon_state = "zeldacrowbar"
- item_state = "crowbar"
-
-////// Ripley customisation kit - Butchery Royce - MayeDay
-
-/obj/item/weapon/paintkit/fluff/butcher_royce_1
- name = "Ripley customisation kit"
- desc = "A kit containing all the needed tools and parts to turn an APLU Ripley into a Titan's Fist worker mech."
- icon = 'icons/obj/custom_items.dmi'
- icon_state = "royce_kit"
-
- new_name = "APLU \"Titan's Fist\""
- new_desc = "This ordinary mining Ripley has been customized to look like a unit of the Titans Fist."
- new_icon = "titan"
- allowed_types = list("ripley","firefighter")
-
-////// Ripley customisation kit - Sven Fjeltson - Mordeth221
-
-/obj/item/weapon/paintkit/fluff/sven_fjeltson_1
- name = "Mercenary APLU kit"
- desc = "A kit containing all the needed tools and parts to turn an APLU Ripley into an old Mercenaries APLU."
- icon = 'icons/obj/custom_items.dmi'
- icon_state = "sven_kit"
-
- new_name = "APLU \"Strike the Earth!\""
- new_desc = "Looks like an over worked, under maintained Ripley with some horrific damage."
- new_icon = "earth"
- allowed_types = list("ripley","firefighter")
-
-// Root hardsuit kit defines.
-// Icons for modified hardsuits need to be in the proper .dmis because suit cyclers may cock them up.
-/obj/item/device/kit/suit/fluff
-
- name = "hardsuit modification kit"
- desc = "A kit for modifying a hardsuit."
- icon = 'icons/obj/custom_items.dmi'
- icon_state = "salvage_kit"
-
- var/new_name // Modifier for new item name - '[new_name] hardsuit'.
- var/new_helmet_desc // Sets helmet desc.
- var/new_suit_desc // Sets suit desc.
- var/helmet_icon // Sets helmet icon_state and item_state.
- var/suit_icon // Sets suit icon_state and item_state.
- var/helmet_color // Sets worn_state.
- var/uses = 2 // Uses before the kit deletes itself.
- var/new_light_overlay
-
-/obj/item/clothing/head/helmet/space/void/attackby(var/obj/item/O as obj, mob/user as mob)
- ..()
-
- if(istype(O,/obj/item/device/kit/suit/fluff))
-
- var/obj/item/device/kit/suit/fluff/kit = O
- name = "[kit.new_name] suit helmet"
- desc = kit.new_helmet_desc
- icon_state = kit.helmet_icon
- item_state = kit.helmet_icon
-
- if(kit.new_light_overlay)
- light_overlay = kit.new_light_overlay
-
- user << "You set about modifying the helmet into [src]."
- playsound(user.loc, 'sound/items/Screwdriver.ogg', 50, 1)
-
- kit.uses--
- if(kit.uses<1)
- user.drop_item()
- qdel(O)
-
-/obj/item/clothing/suit/space/void/attackby(var/obj/item/O as obj, mob/user as mob)
- ..()
-
- if(istype(O,/obj/item/device/kit/suit/fluff))
-
- var/obj/item/device/kit/suit/fluff/kit = O
- name = "[kit.new_name] voidsuit"
- desc = kit.new_suit_desc
- icon_state = kit.suit_icon
- item_state = kit.suit_icon
-
- user << "You set about modifying the suit into [src]."
- playsound(user.loc, 'sound/items/Screwdriver.ogg', 50, 1)
-
- kit.uses--
- if(kit.uses<1)
- user.drop_item()
- qdel(O)
-
-///////// Salvage crew hardsuit - Cybele Petit - solaruin ///////////////
-/obj/item/device/kit/suit/fluff/salvage
- name = "salvage hardsuit modification kit"
- desc = "A kit containing all the needed tools and parts to modify a hardsuit into a salvage hardsuit."
-
- new_name = "salvage"
- new_suit_desc = "An orange hardsuit used by salvage flotillas. Has reinforced plating."
- new_helmet_desc = "An orange hardsuit helmet used by salvage flotillas. Has reinforced plating."
- helmet_icon = "salvage_helmet"
- suit_icon = "salvage_suit"
- helmet_color = "salvage"
-
-///////// Weathered hardsuit - Callum Leamas - roaper ///////////////
-/obj/item/device/kit/suit/fluff/roaper
- name = "Callum's hardsuit modification kit"
- desc = "A kit containing all the needed tools and parts to modify a hardsuit."
-
- new_name = "weathered"
- new_suit_desc = " A jury-rigged and modified engineering hardsuit. It looks slightly damaged and dinged."
- new_helmet_desc = "A jury-rigged and modified engineering hardsuit helmet. It looks slightly damaged and dinged"
- helmet_icon = "rig0-roaper"
- suit_icon = "rig-roaper"
- helmet_color = "roaper"
-
-///////// Hazard Hardsuit - Ronan Harper - Raptor1628 //////////////////
-/obj/item/device/kit/suit/fluff/ronan_harper
- name = "hazard hardsuit modification kit"
- desc = "A kit containing all the needed tools and parts to modify a hardsuit."
-
- new_name = "hazard"
- new_suit_desc = "An older model of armored NT Hardsuit emblazoned in security colors. The crest of the NAS Rhodes, a copper rose, is painted onto the chestplate."
- new_helmet_desc = "An older NT Hardsuit Helmet with built-in atmospheric filters. The name HARPER has been printed on the back."
- helmet_icon = "rig0-hazardhardsuit"
- suit_icon = "rig-hazardhardsuit"
- helmet_color = "hazardhardsuit"
- new_light_overlay = "helmet_light_dual"
-
-//////// Meat Hook - Korom Bhararaya - Matthew951 ////////////////////////
-
-/obj/item/device/kit/weapon/fluff/hook
- name = "hook modification kit"
- desc = "A kit containing all the needed tools and parts to modify a knife or a butcher's knife into a hook."
- icon = 'icons/obj/custom_items.dmi'
- icon_state = "hook_kit"
-
-/obj/item/weapon/kitchenknife/attackby(var/obj/item/O as obj, mob/user as mob)
- ..()
-
- if(istype(O,/obj/item/device/kit/weapon/fluff/hook))
- name = "meat hook"
- desc = "A sharp, metal hook what sticks into things."
- icon = 'icons/obj/custom_items.dmi'
- icon_state = "hook_knife"
- item_state = "hook_knife"
-
-/obj/item/weapon/butch/attackby(var/obj/item/O as obj, mob/user as mob)
- ..()
-
- if(istype(O,/obj/item/device/kit/weapon/fluff/hook))
- name = "meat hook"
- desc = "A sharp, metal hook what sticks into things."
- icon = 'icons/obj/custom_items.dmi'
- icon_state = "hook_knife"
- item_state = "hook_knife"
-
-//////////////////////////////////
-//////////// Clothing ////////////
-//////////////////////////////////
-
-//////////// Gloves ////////////
-
-/obj/item/clothing/gloves/fluff/murad_hassim_1
- name = "Tajaran Surgical Gloves"
- desc = "Reinforced sterile gloves custom tailored to comfortably accommodate Tajaran claws."
- icon_state = "latex"
- item_state = "lgloves"
- siemens_coefficient = 1.00
- permeability_coefficient = 0.01
- species_restricted = list("exclude","Unathi")
-
-/obj/item/clothing/gloves/fluff/walter_brooks_1 //botanistpower: Walter Brooks
- name = "mittens"
- desc = "A pair of well worn, blue mittens."
- icon = 'icons/obj/custom_items.dmi'
- icon_state = "walter_brooks_1"
- item_state = "bluegloves"
-
-/obj/item/clothing/gloves/fluff/chal_appara_1 //furlucis: Chal Appara
- name = "Left Black Glove"
- desc = "The left one of a pair of black gloves. Wonder where the other one went..."
- icon = 'icons/obj/custom_items.dmi'
- icon_state = "chal_appara_1"
-
-//////////// Earpieces ////////////////
-
-////////////////////////// Skrellian Tailwear - Qokkri Xilo - Paradoxon /////////////
-
-/obj/item/clothing/ears/fluff/qokkri
- name = "Skrellian Tailwear"
- desc = "An ensemble of sophisticated jewels and bands, most likely belonging to a scientific Skrell."
- icon_state = "xilobeads"
- icon = 'icons/obj/custom_items.dmi'
- item_state = "xilobeads"
-
-//////////// Eye Wear ////////////
-
-/obj/item/clothing/glasses/meson/fluff/book_berner_1 //asanadas: Book Berner
- name = "bespectacled mesonic surveyors"
- desc = "One of the older meson scanner models retrofitted to perform like its modern counterparts."
- icon = 'icons/obj/custom_items.dmi'
- icon_state = "book_berner_1"
-
-/obj/item/clothing/glasses/fluff/uzenwa_sissra_1 //sparklysheep: Uzenwa Sissra
- name = "Scanning Goggles"
- desc = "A very oddly shaped pair of goggles with bits of wire poking out the sides. A soft humming sound emanates from it."
- icon = 'icons/obj/custom_items.dmi'
- icon_state = "uzenwa_sissra_1"
-
-////// Medical eyepatch - Thysse Ezinwa - Jadepython
-/obj/item/clothing/glasses/eyepatch/fluff/thysse_1
- name = "medical eyepatch"
- desc = "On the strap, EZINWA is written in white block letters."
-
-////// Safety Goggles - Arjun Chopra - MindPhyre - APPROVED
-/obj/item/clothing/glasses/fluff/arjun_chopra_1
- name = "safety goggles"
- desc = "A used pair of leather safety goggles."
- icon = 'icons/obj/custom_items.dmi'
- icon_state = "arjun_chopra"
- item_state = "arjun_chopra"
-
-/////////////////////////////////// GSTQ - Monogrammed Eyepatch - Edmund Flashman Adler /////////////////////////
-
-/obj/item/clothing/glasses/eyepatch/fluff/edmund
- name = "Monogrammed Eyepatch"
- desc = "A black velvet eyepatch monogrammed in dark purple thread with the initials 'E. A.'"
-
-//////////// Hats ////////////
-
-/obj/item/clothing/head/secsoft/fluff/swatcap //deusdactyl: James Girard
- name = "\improper SWAT hat"
- desc = "A black hat. The inside has the words, \"Lieutenant James Girard, LPD SWAT Team Four.\""
- icon = 'icons/obj/custom_items.dmi'
- icon_state = "swatcap"
- body_parts_covered = 0
-
-/obj/item/clothing/head/welding/fluff/alice_mccrea_1 //madmalicemccrea: Alice McCrea
- name = "flame decal welding helmet"
- desc = "A welding helmet adorned with flame decals, and several cryptic slogans of varying degrees of legibility. \"Fly the Friendly Skies\" is clearly visible, written above the visor, for some reason."
- icon = 'icons/obj/custom_items.dmi'
- icon_state = "alice_mccrea_1"
-
-/obj/item/clothing/head/welding/fluff/yuki_matsuda_1 //searif: Yuki Matsuda
- name = "white decal welding helmet"
- desc = "A white welding helmet with a character written across it."
- icon = 'icons/obj/custom_items.dmi'
- icon_state = "yuki_matsuda_1"
-
-/obj/item/clothing/head/welding/fluff/norah_briggs_1 //bountylord13: Norah Briggs
- name = "blue flame decal welding helmet"
- desc = "A welding helmet with blue flame decals on it."
- icon = 'icons/obj/custom_items.dmi'
- icon_state = "norah_briggs_1"
-
-//////////////// Painted Welding Mask - Kuratas Dotaavi - supercotton ////////////////////
-
-/obj/item/clothing/head/welding/fluff/kuratas
- name = "Painted Welding Mask"
- desc = "A blood-red welding mask with an intricate pattern. Smells like burnt rubber."
- icon = 'icons/obj/custom_items.dmi'
- icon_state = "paintedwelding"
-
-/obj/item/clothing/head/orangebandana/fluff/taryn_kifer_1 //themij: Taryn Kifer
- name = "orange bandana"
- desc = "Hey, I think we're missing a hazard vest..."
-
-/obj/item/clothing/head/fluff
- body_parts_covered = 0
-
-/obj/item/clothing/head/fluff/edvin_telephosphor_1 //foolamancer: Edvin Telephosphor
- name = "Edvin's Hat"
- desc = "A hat specially tailored for Skrellian anatomy. It has a yellow badge on the front, with a large red 'T' inscribed on it."
- icon = 'icons/obj/custom_items.dmi'
- icon_state = "edvin_telephosphor_1"
-
-/obj/item/clothing/head/fluff/krinnhat //Shirotyrant: Krinn Seeskale
- name = "saucepan hat"
- desc = "This hat is the shiniest shiny Krinn has ever owned."
- icon = 'icons/obj/custom_items.dmi'
- icon_state = "krinn_hat"
-
-/obj/item/clothing/head/fluff/bruce_hachert //Stup1dg33kz: Bruce Hachert
- name = "worn hat"
- desc = "A worn-looking hat. It is slightly faded in color."
- icon = 'icons/obj/custom_items.dmi'
- icon_state = "brucehachert"
-
-/obj/item/clothing/head/fluff/kaine_kalim_1
- name = "Formal Medical Cap"
- desc = "An unusually sterile and folded cap. It seems to bare the Nanotrasen logo."
- icon = 'icons/obj/custom_items.dmi'
- icon_state = "kainecap"
-
-
-/obj/item/clothing/head/beret/fluff/marine_beret //Von2531: Jack Washington
- name = "colonial marine beret"
- desc = "A well-worn navy blue beret. The insignia of the Martian Colonial Marine Corps is affixed to the front."
- icon_state = "officerberet"
-
-////////////////////////////// Serithi - Adapted Security Helmet //////////////////////////////
-
-/obj/item/clothing/head/helmet/fluff/adapted
- name = "Adapted helmet"
- desc = "Standard Security gear. Protects the head from impacts. This helmet is specially made for horned Unathi."
- item_state = "adapted_h"
- icon_state = "adapted_h"
- icon = 'icons/obj/custom_items.dmi'
-
-////////////////////////////// Jarcolr - Uberto Dandolo - Feathered trilby /////////////////////
-
-/obj/item/clothing/head/feather/fluff/uberto_dandolo
- name = "Feathered trilby"
- desc = "A sharp, stylish hat with a feather."
-
-//////////////////////////////////////////////////////////
-///////////////////// Belts //////////////////////////////
-//////////////////////////////////////////////////////////
-
-/obj/item/weapon/storage/belt/medical/fluff/ems
- name = "EMS utility belt"
- desc = "A sturdy black webbing belt with attached pouches. H. ISHIMARU is scratched on the interior of the buckle."
- icon = 'icons/obj/custom_items.dmi'
- icon_state = "emsbelt"
- item_state = "emsbelt"
-
-/obj/item/weapon/storage/belt/utility/full/fluff/sophie
- name = "Sophie's belt"
- desc = "A tool-belt in Atmos colours."
- icon = 'icons/obj/custom_items.dmi'
- icon_state = "sophie_belt"
- item_state = "sophie_belt"
-
-/obj/item/weapon/storage/belt/medical/fluff/nashi_belt
- name = "rainbow medical belt"
- desc = "A somewhat-worn, modified, rainbow belt."
- icon = 'icons/obj/custom_items.dmi'
- icon_state = "nashi_belt"
- item_state = "fluff_rbelt"
-
- New()
- ..()
- new /obj/item/weapon/reagent_containers/glass/bottle/fluff/nashi_bottle(src, 14, "Bicaridine")
- new /obj/item/weapon/reagent_containers/glass/bottle/fluff/nashi_bottle(src, 15, "Dermaline")
- new /obj/item/weapon/reagent_containers/glass/bottle/fluff/nashi_bottle(src, 16, "Dylovene")
- new /obj/item/weapon/reagent_containers/glass/bottle/fluff/nashi_bottle(src, 17, "Dexalin Plus")
- new /obj/item/weapon/reagent_containers/glass/bottle/fluff/nashi_bottle(src, 18, "Tricordrazine")
- new /obj/item/weapon/reagent_containers/syringe/(src)
- new /obj/item/device/healthanalyzer(src)
-
-/obj/item/weapon/reagent_containers/glass/bottle/fluff/nashi_bottle
- icon = 'icons/obj/chemical.dmi'
- New(loc, var/color, var/labeled)
- ..()
- name = "[labeled] bottle"
- desc = "A small bottle. Contains [labeled]"
- icon_state = "bottle[color]"
-
-//////////// Suits ////////////
-/obj/item/clothing/suit/storage/labcoat
- name = "labcoat"
- desc = "A plain labcoat."
- icon_state = "labcoat"
- body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS|LEGS
-
-/obj/item/clothing/suit/storage/labcoat/fluff/aeneas_rinil //Robotics Labcoat - Aeneas Rinil [APPR]
- name = "Robotics labcoat"
- desc = "A labcoat with a few markings denoting it as the labcoat of roboticist."
- icon = 'icons/obj/custom_items.dmi'
- icon_state = "aeneasrinil"
-
-/obj/item/clothing/suit/storage/labcoat/fluff/pink //spaceman96: Trenna Seber
- name = "pink labcoat"
- desc = "A suit that protects against minor chemical spills. Has a pink stripe down from the shoulders."
- icon = 'icons/obj/custom_items.dmi'
- icon_state = "labcoat_pink_open"
-
-/obj/item/clothing/suit/storage/labcoat/fluff/mit
- name = "MiT Labcoat"
- desc = "A lab coat from the Martian Institute of Technology with the name 'Dr. Lucina Franco' embroidered onto the right breast pocket."
- icon = 'icons/obj/custom_items.dmi'
- icon_state = "mitlabcoat"
- item_state = "mitlabcoat"
-
-/obj/item/clothing/suit/storage/toggle/labcoat/fluff/epsilon //Devildabeast: Looping Song
- name = "e UMi labcoat"
- desc = "A suit that protects against minor chemical spills. Has a black stripe on the shoulder. The abbreviation \"e UMi\" is written on the back in bold text."
- icon = 'icons/obj/custom_items.dmi'
- icon_state = "labcoat_black_open"
- icon_open = "labcoat_black_open"
- icon_closed = "labcoat_black"
- item_state = "labcoat_black"
-
-/obj/item/clothing/suit/storage/det_suit/fluff/leatherjack //atomicdog92: Seth Sealis
- name = "leather jacket"
- desc = "A black leather coat, popular amongst punks, greasers, and other galactic scum."
- icon = 'icons/obj/custom_items.dmi'
- icon_state = "leatherjack"
- item_state = "leatherjack"
-
-/obj/item/clothing/suit/armor/vest/fluff/deus_blueshield //deusdactyl
- name = "blue shield security armor"
- desc = "An armored vest with the badge of a Blue Shield Security lieutenant."
- icon = 'icons/obj/custom_items.dmi'
- icon_state = "deus_blueshield"
- item_state = "deus_blueshield"
-
-/obj/item/clothing/suit/fluff/oldscarf //Writerer2: Javaria Zara
- name = "old scarf"
- desc = "An old looking scarf, it seems to be fairly worn."
- icon = 'icons/obj/clothing/suits.dmi'
- icon_state = "mantle-unathi"
- item_state = "mantle-unathi"
- body_parts_covered = 0
-
-/////////////////////////////// 50_n00b - R.A.N.G.E.'s blue dress //////////////////////////
-
-/obj/item/clothing/suit/fluff/b_dress
- name = "Blue dress"
- desc = "A blue dress, worn with a white blouse. It is small, and looks like it won't fit a full grown human."
- icon = 'icons/obj/custom_items.dmi'
- icon_state = "br_dress"
- item_state = "br_dress"
- body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS
-
-//////////////////////////////// Broseph Stylin - Lombardi's Jacket ///////////////////////////
-
-/obj/item/clothing/suit/storage/fluff/lombardi
- name = "Lombardi's Jacket"
- desc = "A dark blue, martian-pattern, EMS jacket. It sports high-visibility reflective stripes, a star of life on the back, and has a nametag on the right side of the chest that reads 'Lombardi B-'."
- icon = 'icons/obj/custom_items.dmi'
- icon_state = "lombardi_jacket"
- item_state = "lombardi_jacket"
- body_parts_covered = UPPER_TORSO|ARMS
-
- verb/toggle()
- set name = "Toggle Jacket Buttons"
- set category = "Object"
- set src in usr
-
- if(!usr.canmove || usr.stat || usr.restrained())
- return 0
-
- switch(icon_state)
- if("lombardi_jacket")
- src.icon_state = "lombardi_jacket_open"
- usr << "You unbutton the jacket."
- if("lombardi_jacket_open")
- src.icon_state = "lombardi_jacket"
- usr << "You button up the jacket."
- update_clothing_icon()
-
-//////////// Uniforms ////////////
-
-/obj/item/clothing/under/fluff/milo_hachert //Field Dress Uniform - Milo Hachert - Commissar_Drew
- name = "field dress uniform"
- desc = "A uniform jacket, its buttons polished to a shine, coupled with a dark pair of trousers. 'Hachert' is embroidered upon the jacket�s shoulder bar."
- icon = 'icons/obj/custom_items.dmi'
- icon_state = "milohachert"
- item_state = "gy_suit"
- worn_state = "milohachert"
-
-/obj/item/clothing/under/fluff/john_saaland //GA Jumpsuit-John Saaland-Foxeye
- name = "GA jumpsuit"
- desc = "A tan jumpsuit, robustly constructed, with various velcro strips for name and ranking patches distributed over the torso and shoulders. Only one of these strips is in use, holding a patch with 'J. SAALAND' written on it in block lettering over the right breast pocket."
- icon = 'icons/obj/custom_items.dmi'
- icon_state = "saaland"
- item_state = "saaland_suit"
- worn_state = "saaland"
-
-/obj/item/clothing/under/fluff/kaine_kalim_2
- name = "Formal Medical Uniform"
- desc = "An unusually sterile and pressed uniform. It seems to have a string of vials crossing the chest."
- icon = 'icons/obj/custom_items.dmi'
- icon_state = "kaineuniform"
- item_state = "w_suit"
- worn_state = "kaineuniform"
-
-/obj/item/clothing/under/fluff/jumpsuitdown //searif: Yuki Matsuda
- name = "rolled down jumpsuit"
- desc = "A rolled down jumpsuit. Great for mechanics."
- icon = 'icons/obj/custom_items.dmi'
- icon_state = "jumpsuitdown"
- item_state = "gy_suit"
- worn_state = "jumpsuitdown"
-
-/obj/item/clothing/under/fluff/lilith_vinous_1 //slyhidden: Lilith Vinous
- name = "casual security uniform"
- desc = "A less formal version of the traditional dark red Security uniform. It has the top button undone, rolled up sleeves and different belt."
- icon = 'icons/obj/custom_items.dmi'
- icon_state = "lilith_uniform"
- item_state = "r_suit"
- worn_state = "lilith_uniform"
- body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS
-
-/obj/item/clothing/under/fluff/ana_issek_1 //suethecake: Ana Issek
- name = "retired uniform"
- desc = "A silken blouse paired with dark-colored slacks. It has the words 'Chief Investigator' embroidered into the shoulder bar."
- icon = 'icons/obj/custom_items.dmi'
- icon_state = "ana_uniform"
- item_state = "r_suit"
- worn_state = "ana_uniform"
- body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS
-
-/obj/item/clothing/under/fluff/olddressuniform //desiderium: Momiji Inubashiri
- name = "retired dress uniform"
- desc = "A retired Station Head of Staff uniform, phased out twenty years ago for the newer jumpsuit design, but still acceptable dress. Lovingly maintained."
- icon = 'icons/obj/custom_items.dmi'
- icon_state = "olddressuniform"
- item_state = "b_suit"
- worn_state = "olddressuniform"
-
-/obj/item/clothing/under/rank/security/fluff/jeremy_wolf_1 //whitewolf41: Jeremy Wolf
- name = "worn officer's uniform"
- desc = "An old red security jumpsuit. Seems to have some slight modifications."
- icon = 'icons/obj/custom_items.dmi'
- icon_state = "jeremy_wolf_1"
- item_state = "r_suit"
- worn_state = "jeremy_wolf_1"
-
-//////////////////// PRC Uniform - Ronan Harper - Raptor1628 ///////////////////
-
-/obj/item/clothing/under/rank/security/fluff/ronan_harper
- name = "PRC Uniform"
- desc = "A well maintained uniform from one of the many Private Security firms Nanotrasen hires from. The name Harper is printed on the back."
- icon = 'icons/obj/custom_items.dmi'
- icon_state = "harper_uniform"
- item_state = "jensensuit"
- worn_state = "harper_uniform"
- body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS
-
-//////////////////// Corporate Cap - Robert Mason - Masterrbc ////////////////////
-
-/obj/item/clothing/head/soft/sec/corp/fluff/robert_mason
- name = "Corporate Cap"
- desc = "It's baseball hat in corporate colors."
-
-/obj/item/clothing/under/fluff/tian_dress //phaux: Tian Yinhu
- name = "purple dress"
- desc = "A nicely tailored purple dress made for the taller woman."
- icon = 'icons/obj/custom_items.dmi'
- icon_state = "tian_dress"
- item_state = "r_suit"
- worn_state = "tian_dress"
- body_parts_covered = UPPER_TORSO|LOWER_TORSO
-
-/obj/item/clothing/under/rank/bartender/fluff/classy //searif: Ara Al-Jazari
- name = "classy bartender uniform"
- desc = "A prim and proper uniform that looks very similar to a bartender's, the only differences being a red tie, waistcoat and a rag hanging out of the back pocket."
- icon = 'icons/obj/custom_items.dmi'
- icon_state = "ara_bar_uniform"
- item_state = "ba_suit"
- worn_state = "ara_bar_uniform"
-
-/obj/item/clothing/under/fluff/callum_suit //roaper: Callum Leamus
- name = "knockoff suit"
- desc = "A knockoff of a suit commonly worn by the upper class."
- icon = 'icons/obj/custom_items.dmi'
- icon_state = "callum_suit"
- item_state = "ba_suit"
- worn_state = "callum_suit"
-
-/obj/item/clothing/under/fluff/solara_light_1 //bluefishie: Solara Born-In-Light
- name = "Elaborate Purple Dress"
- desc = "An expertly tailored dress, made out of fine fabrics. The interwoven necklace appears to be made out of gold, with three complicated symbols engraved in the front."
- icon = 'icons/obj/custom_items.dmi'
- icon_state = "solara_dress"
- item_state = "p_suit"
- worn_state = "solara_dress"
-
-/obj/item/clothing/under/rank/nursesuit/fluff/sasha
- name = "RN Uniform"
- desc = "A nurse's uniform that is dark blue and gold. It looks like it's been tailored for a short person."
- icon = 'icons/obj/custom_items.dmi'
- icon_state = "sasha"
- item_state = "b_suit"
- worn_state = "sasha"
-
-/////// NT-SID Suit //Zuhayr: Jane Doe
-
-/obj/item/clothing/under/fluff/jane_sidsuit
- name = "NT-SID jumpsuit"
- desc = "A NanoTrasen Synthetic Intelligence Division jumpsuit, issued to 'volunteers'. On other people it looks fine, but right here a scientist has noted: on you it looks stupid."
-
- icon = 'icons/obj/custom_items.dmi'
- icon_state = "jane_sid_suit"
- item_state = "o_suit"
- worn_state = "jane_sid_suit"
- has_sensor = 2
- sensor_mode = 3
-
-//Suit roll-down toggle.
-/obj/item/clothing/under/fluff/jane_sidsuit/verb/toggle_zipper()
- set name = "Toggle Jumpsuit Zipper"
- set category = "Object"
- set src in usr
-
- if(!usr.canmove || usr.stat || usr.restrained())
- return 0
-
- if(src.icon_state == "jane_sid_suit_down")
- src.icon_state = "jane_sid_suit"
- usr << "You zip up the [src]."
- else
- src.icon_state = "jane_sid_suit_down"
- usr << "You unzip and roll down the [src]."
-
- src.item_state_slots[slot_w_uniform_str] = "[src.icon_state]"
- update_clothing_icon()
-
-////// Wyatt's Ex-Commander Jumpsuit - RawrTaicho
-/obj/item/clothing/under/fluff/wyatt_1
-
- name = "ex-commander jumpsuit"
- desc = "A standard Central Command Engineering Commander jumpsuit tailored to fight the wearer tightly. It has a Medal of Service pinned onto the left side of it."
- icon = 'icons/obj/custom_items.dmi'
- icon_state = "wyatt_uniform"
- //item_state = "wyatt_uniform"
- worn_state = "wyatt_uniform"
-
-////// Black Dress - Lillian Amsel - PapaDrow
-/obj/item/clothing/under/fluff/lillian_amsel_1
- name = "Black Dress"
- desc = "A knee-length, dark gray and black dress made of a soft, velvety material."
- icon = 'icons/obj/custom_items.dmi'
- icon_state = "lillian_dress"
- //item_state = "lillian_dress"
- worn_state = "lillian_dress"
- body_parts_covered = UPPER_TORSO|LOWER_TORSO
-
-////// Tailored Security Uniform - Parker Eliza - MrSnapwalk
-
-/obj/item/clothing/under/fluff/parkereliza
- name = "tailored security uniform"
- desc = "A red uniform shirt (tailored for easy access to the shoulder joint) and black cargo pants, paired with a set of somewhat bulky white casings for robotic limbs. The arms have a small label on the inner elbow, which reads \"Bishop Corporation Cybernetic Solutions\"."
- icon = 'icons/obj/custom_items.dmi'
- icon_state = "parker_eliza"
- //item_state = "parker_eliza"
- worn_state = "parker_eliza"
- body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS|HANDS
-
-////// Bishop "GOLEM" V2200 Industrial Limb Augments - Parker Eliza - MrSnapwalk
-
-/obj/item/clothing/suit/fluff/parkereliza
- name = "Bishop \"GOLEM\" V2200 Industrial Limb Augments"
- desc = "A set of top-of-the-line cyberlimbs, only usable to someone with extensive bone structure augmentation. Often used in industrial applications, they are capable of throwing a man clear across a room. The load limitation circuit in this set appears to be modified."
- icon = 'icons/obj/custom_items.dmi'
- icon_state = "parker_eliza_arms"
- item_state = "parker_eliza_arms"
- body_parts_covered = 0 //technicially it's underneath everything, being part of the body
- canremove = 0
-
-////////////// Accessories /////
-
-//////////////////// Blood Red Pendant - Mewth - Mu'taz Radi ////////////////
-
-/obj/item/clothing/accessory/fluff/radi
- name = "Blood Red Pendant"
- desc = "A blue chained necklace with a ruby in the middle, it looks pretty!"
- icon = 'icons/obj/custom_items.dmi'
- icon_state = "radi_pendant"
- item_state = "radi_pendant"
- w_class = 2.0
-
-//////////// Masks ////////////
-
-/*
-/obj/item/clothing/mask/fluff/flagmask //searif: Tsiokeriio Tarbell
- name = "\improper First Nations facemask"
- desc = "A simple cloth rag that bears the flag of the first nations."
- icon = 'icons/obj/custom_items.dmi'
- icon_state = "flagmask"
- item_state = "flagmask"
- flags = MASKCOVERSMOUTH
- w_class = 2
- gas_transfer_coefficient = 0.90
-*/
-
-/obj/item/clothing/mask/mara_kilpatrick_1 //staghorn: Mara Kilpatrick
- name = "shamrock pendant"
- desc = "A silver and emerald shamrock pendant. It has the initials \"M.K.\" engraved on the back."
- icon = 'icons/obj/custom_items.dmi'
- icon_state = "mara_kilpatrick_1"
- w_class = 2
-
-/////////////// Oen'g Issek Medical Mask //////////////////////////
-
-/obj/item/clothing/mask/surgical/fluff/primitive
- name = "primitive mask"
- desc = "A decorated and creepy gas mask with the filters removed."
- icon = 'icons/obj/custom_items.dmi'
- item_state = "head_m"
- icon_state = "head_m"
- body_parts_covered = FACE|EYES
-
-//Painted mask: Dante Cicero - andrewmeythaler
-
-/obj/item/clothing/mask/andrewmeythaler
- name = "painted mask"
- desc = "A ghoulish mask with a stylized painting of a flame over the left eye, and a painted tear stream coming from the right eye."
- icon = 'icons/obj/custom_items.dmi'
- //item_state = "cicero"
- icon_state = "cicero"
- body_parts_covered = FACE|EYES
-
-////// Small locket - Altair An-Nasaqan - Serithi
-
-/obj/item/clothing/accessory/fluff/altair_locket
- name = "small locket"
- desc = "A small golden locket attached to an Ii'rka-reed string. Inside the locket is a holo-picture of a female Tajaran, and an inscription writtin in Siik'mas."
- icon = 'icons/obj/custom_items.dmi'
- icon_state = "altair_locket"
- item_state = "altair_locket"
- slot_flags = 0
- w_class = 2
- slot_flags = SLOT_MASK | SLOT_TIE
-
-////// Silver locket - Konaa Hirano - Konaa_Hirano
-
-/obj/item/clothing/accessory/fluff/konaa_hirano
- name = "silver locket"
- desc = "This oval shaped, argentium sterling silver locket hangs on an incredibly fine, refractive string, almost thin as hair and microweaved from links to a deceptive strength, of similar material. The edges are engraved very delicately with an elegant curving design, but overall the main is unmarked and smooth to the touch, leaving room for either remaining as a stolid piece or future alterations. There is an obvious internal place for a picture or lock of some sort, but even behind that is a very thin compartment unhinged with the pinch of a thumb and forefinger."
- icon = 'icons/obj/custom_items.dmi'
- icon_state = "konaahirano"
- item_state = "konaahirano"
- slot_flags = 0
- w_class = 2
- slot_flags = SLOT_MASK | SLOT_TIE
- var/obj/item/held //Item inside locket.
-
-/obj/item/clothing/accessory/fluff/konaa_hirano/attack_self(mob/user as mob)
- if(held)
- user << "You open [src] and [held] falls out."
- held.loc = get_turf(user)
- src.held = null
-
-/obj/item/clothing/accessory/fluff/konaa_hirano/attackby(var/obj/item/O as obj, mob/user as mob)
- if(istype(O,/obj/item/weapon/paper))
- if(held)
- usr << "[src] already has something inside it."
- else
- usr << "You slip [O] into [src]."
- user.drop_item()
- O.loc = src
- src.held = O
- return
- ..()
-
-////// Medallion - Nasir Khayyam - Jamini
-
-/obj/item/clothing/accessory/fluff/nasir_khayyam_1
- name = "medallion"
- desc = "This silvered medallion bears the symbol of the Hadii Clan of the Tajaran."
- icon = 'icons/obj/custom_items.dmi'
- icon_state = "nasir_khayyam_1"
- w_class = 2
- slot_flags = SLOT_MASK | SLOT_TIE
-
-////// Emerald necklace - Ty Foster - Nega
-
-/obj/item/clothing/mask/mara_kilpatrick_1
- name = "emerald necklace"
- desc = "A brass necklace with a green emerald placed at the end. It has a small inscription on the top of the chain, saying \'Foster\'"
- icon = 'icons/obj/custom_items.dmi'
- icon_state = "ty_foster"
- w_class = 2
-
-////// Apollon Pendant - Michael Guess - Dragor23
-/obj/item/clothing/mask/michael_guess_1
- name = "Apollon Pendant"
- desc = "A pendant with the form of a sacrificial tripod, used in acient greece. It's a symbol of the Olympian Apollon, a god associated with oracles, poetry, the sun and healing."
- icon = 'icons/obj/custom_items.dmi'
- icon_state = "michael_guess_1"
- w_class = 2
- slot_flags = SLOT_MASK
- body_parts_covered = 0
-
-//////////// Shoes ////////////
-
-/obj/item/clothing/shoes/magboots/fluff/susan_harris_1 //sniperyeti: Susan Harris
- name = "Susan's Magboots"
- desc = "A colorful pair of magboots with the name Susan Harris clearly written on the back."
- icon = 'icons/obj/custom_items.dmi'
- icon_state = "atmosmagboots0"
-
-/obj/item/clothing/shoes/jackboots/fluff/hal_ishimaru_1 //YankeeSamurai: Hal Ishimaru
- name = "duty boots"
- desc = "Eight-inch black leather boots with side zips and NT-approved safety toes."
-
-////////////////////////////////////////// Vivallion - Kecer Eldraran - Toe-less Jackboots //////////////
-
-/obj/item/clothing/shoes/jackboots/fluff/kecer_eldraran
- name = "Toe-less Jackboots"
- desc = "Modified pair of jackboots, particularly friendly to those species whose toes hold claws."
- icon = 'icons/obj/custom_items.dmi'
- item_state = "digiboots"
- icon_state = "digiboots"
- species_restricted = null
-
-/obj/item/clothing/shoes/jackboots/fluff/harmony_singh_1 //Bromuzl: Harmony Singh
- name = "Springjacks"
- desc = "A pair of highly modified jackboots in medical white, with some type of spring assembly on the ankle and heels, painted orange."
- icon = 'icons/obj/custom_items.dmi'
- icon_state = "springjacks"
- item_state = "springjacks"
- slowdown = SHOES_SLOWDOWN+1 //Slowing down because of her injured foot, these are for ease of pain so she can get off painkillers.
- siemens_coefficient = 0.7 //copied from Jackboots under code/modules/clothing/shoes/miscellaneous.dm
-
-//////////// Sets ////////////
-
-/*
-/obj/item/clothing/suit/storage/labcoat/fluff/cdc_labcoat
- name = "\improper CDC labcoat"
- desc = "A standard-issue CDC labcoat that protects against minor chemical spills. It has the name \"Wiles\" sewn on to the breast pocket."
- icon = 'icons/obj/custom_items.dmi'
- icon_state = "labcoat_cdc_open"
-*/
-////// Short Sleeve Medical Outfit //erthilo: Farah Lants
-
-/obj/item/clothing/under/rank/medical/fluff/short
- name = "short sleeve medical jumpsuit"
- desc = "Made of a special fiber that gives special protection against biohazards. Has a cross on the chest denoting that the wearer is trained medical personnel and short sleeves."
- icon = 'icons/obj/custom_items.dmi'
- icon_state = "medical_short"
- item_state = "medical_short"
- worn_state = "medical_short"
- body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS
-
-/obj/item/clothing/suit/storage/labcoat/fluff/red
- name = "red labcoat"
- desc = "A suit that protects against minor chemical spills. Has a red stripe on the shoulders and rolled up sleeves."
- icon = 'icons/obj/custom_items.dmi'
- icon_state = "labcoat_red_open"
-
-////// Retired Patrol Outfit //desiderium: Rook Maudlin
-
-/obj/item/clothing/suit/storage/det_suit/fluff/retpolcoat
- name = "retired colony patrolman's coat"
- desc = "A clean, black nylon windbreaker with the words \"OUTER LIGHT POLICE\" embroidered in gold-dyed thread on the back. \"RETIRED\" is tastefully embroidered below in a smaller font."
- icon = 'icons/obj/custom_items.dmi'
- icon_state = "retpolcoat"
- item_state = "retpolcoat"
-
-/obj/item/clothing/head/det_hat/fluff/retpolcap
- name = "retired colony patrolman's cap"
- desc = "A clean and properly creased colony police cap. The badge is shined and polished, the word \"RETIRED\" engraved professionally under the words \"OUTER LIGHT POLICE.\""
- icon = 'icons/obj/custom_items.dmi'
- icon_state = "retpolcap"
-
-/obj/item/clothing/under/det/fluff/retpoluniform
- name = "retired colony patrolman's uniform"
- desc = "A meticulously clean police uniform belonging to Precinct 31, Outer Light Colony. The word \"RETIRED\" is engraved tastefully and professionally in the badge below the number, 501."
- icon = 'icons/obj/custom_items.dmi'
- icon_state = "retpoluniform"
- worn_state = "retpoluniform"
-
-//////////// Weapons ////////////
-
-///// Well-used baton - Oen'g Issek - Donofnyc3
-
-/obj/item/weapon/melee/baton/fluff/oeng_baton
- name = "well-used stun baton"
- desc = "A stun baton used for incapacitating targets; there seems to be a bunch of tally marks set into the handle."
-
-///// Deckard .44 - Callum Leamas - Roaper
-/obj/item/weapon/gun/projectile/revolver/detective/fluff/callum_leamas
- name = "Deckard .44"
- desc = "A custom built revolver, based off the semi-popular Detective Special model."
- icon = 'icons/obj/custom_items.dmi'
- icon_state = "leamas-empty"
- ammo_type = /obj/item/ammo_magazine/c38/rubber
-
-/obj/item/weapon/gun/projectile/revolver/detective/fluff/callum_leamas/update_icon()
- ..()
- if(loaded.len)
- icon_state = "leamas-loaded"
- else
- icon_state = "leamas-empty"
-
-/obj/item/weapon/gun/projectile/revolver/detective/fluff/callum_leamas/load_ammo(var/obj/item/A, mob/user)
- if(istype(A, /obj/item/ammo_magazine))
- flick("leamas-reloading",src)
- ..()
-
-/obj/item/weapon/reagent_containers/food/drinks/flask/fluff/yuri_kornienkovich_flask
- name = "Yuri's Flask"
- desc = "An old gold plated flask. Nothing noteworthy about it besides it being gold and the red star on the worn out leather around it. There is also an engraving on the cap that is rather hard to see but it looks like \"Kornienkovich\" "
- icon = 'icons/obj/custom_items.dmi'
- icon_state = "yuri_kornienkovich_flask"
-
-/obj/item/clothing/under/cheongsam/fluff/mai_yang_dress // Mai Yang's pretty pretty dress.
- name = "White Cheongsam"
- desc = "It is a white cheongsam dress."
-
-/obj/item/clothing/under/fluff/sakura_hokkaido_kimono
- name = "Sakura Kimono"
- desc = "A pale-pink, nearly white, kimono with a red and gold obi. There is a embroidered design of cherry blossom flowers covering the kimono."
- icon = 'icons/obj/custom_items.dmi'
- icon_state = "sakura_hokkaido_kimono"
- item_state = "sakura_hokkaido_kimono"
- worn_state = "sakura_hokkaido_kimono"
-
-///////////////////////////// Astronovus - Harold's Cane ////////////////////////////
-
-/obj/item/weapon/cane/fluff/harold
- name = "Harold's Cane"
- desc = "A cane with a wooden handle and a plastic frame capable of folding itself to make it more storable."
- w_class = 1.0
- icon = 'icons/obj/custom_items.dmi'
- item_state = "foldcane"
- icon_state = "foldcane"
-
-
-//////////////////////////// Footman - Farwa Plush Doll //////////////////////////////////
-
-/obj/item/weapon/fluff/farwadoll
- name = "Farwa plush doll"
- desc = "A Farwa plush doll. It's soft and comforting!"
- w_class = 1.0
- icon = 'icons/obj/custom_items.dmi'
- item_state = "farwaplush"
- icon_state = "farwaplush"
-
-/obj/item/weapon/fluff/farwadoll/attack_self(mob/user as mob)
- user.visible_message("[user] hugs [src]! How cute! ", \
- "You hug [src]. Dawwww... ")
-
-////////////////////////////// Meyar - Cane /////////////////////////////////////////////////
-
-/obj/item/weapon/cane/fluff/ryals
- name = "cane"
- desc = "This cane seems to have 'Ryals' engraved on its handle."
- icon_state = "cane"
- item_state = "stick"
-
-////////////////////////////// Foxler - Erstatz Vryroxes /////////////////////////////////////////////////
-
-//Use this subtype for spawning in the custom item.
-/obj/item/weapon/holder/cat/fluff/bones/custom_item
-
-/obj/item/weapon/holder/cat/fluff/bones/custom_item/New()
- if (!contents.len)
- new/mob/living/simple_animal/cat/fluff/bones (src)
- ..()
-
-/obj/item/weapon/holder/cat/fluff/bones
- name = "Bones"
- desc = "It's Bones! Meow."
- gender = MALE
- icon_state = "cat3"
-
-/mob/living/simple_animal/cat/fluff/bones
- name = "Bones"
- desc = "That's Bones the cat. He's a laid back, black cat. Meow."
- gender = MALE
- icon_state = "cat3"
- icon_living = "cat3"
- icon_dead = "cat3_dead"
- holder_type = /obj/item/weapon/holder/cat/fluff/bones
- var/friend_name = "Erstatz Vryroxes"
-
-/mob/living/simple_animal/cat/fluff/bones/handle_movement_target()
- if (!friend)
- for (var/mob/living/carbon/human/M in player_list)
- if (M.real_name == friend_name)
- friend = M
- break
- ..()
-
-///////////////////////////// Sabess - Maria's Heart-Shaped Locket ///////////////////////////////////
-
-/obj/item/weapon/fluff/mariafontaine
- name = "Heart-Shaped Locket"
- desc = " A silver, heart-shaped locket. It flips open to reveal two pictures, one of a young red-headed woman and one of a brunette of similar age. Small writing is etched onto the back, reading 'M+L'. Some may regard it as cheesy."
- icon = 'icons/obj/custom_items.dmi'
- icon_state = "mariaclosed"
- item_state = "mariaclosed"
-
-obj/item/weapon/fluff/mariafontaine/attack_self(mob/user as mob)
- if(src.icon_state == "mariaclosed")
- src.icon_state = "mariaopen"
- src.item_state = "mariaopen"
- user << "You flip the locket open."
-
- else
- src.icon_state = "mariaclosed"
- src.item_state = "mariaclosed"
- user << "You flip the locket closed."
diff --git a/code/modules/customitems/item_spawning.dm b/code/modules/customitems/item_spawning.dm
index beb8e6b2a7..7904b60b5c 100644
--- a/code/modules/customitems/item_spawning.dm
+++ b/code/modules/customitems/item_spawning.dm
@@ -1,95 +1,190 @@
-//switch this out to use a database at some point
-//list of ckey/ real_name and item paths
-//gives item to specific people when they join if it can
-//for multiple items just add mutliple entries, unless i change it to be a listlistlist
-//yes, it has to be an item, you can't pick up nonitems
+// Switch this out to use a database at some point. Each ckey is
+// associated with a list of custom item datums. When the character
+// spawns, the list is checked and all appropriate datums are spawned.
+// See config/example/custom_items.txt for a more detailed overview
+// of how the config system works.
+
+// CUSTOM ITEM ICONS:
+// Inventory icons must be in CUSTOM_ITEM_OBJ with state name [item_icon].
+// On-mob icons must be in CUSTOM_ITEM_MOB with state name [item_icon].
+// Inhands must be in CUSTOM_ITEM_MOB as [icon_state]_l and [icon_state]_r.
+
+// Kits must have mech icons in CUSTOM_ITEM_OBJ under [kit_icon].
+// Broken must be [kit_icon]-broken and open must be [kit_icon]-open.
+
+// Kits must also have hardsuit icons in CUSTOM_ITEM_MOB as [kit_icon]_suit
+// and [kit_icon]_helmet, and in CUSTOM_ITEM_OBJ as [kit_icon].
/var/list/custom_items = list()
-/hook/startup/proc/loadCustomItems()
- var/custom_items_file = file2text("config/custom_items.txt")
- custom_items = text2list(custom_items_file, "\n")
+/datum/custom_item
+ var/assoc_key
+ var/character_name
+ var/item_icon
+ var/item_desc
+ var/name
+ var/item_path = /obj/item
+ var/req_access = 0
+ var/list/req_titles = list()
+ var/kit_name
+ var/kit_desc
+ var/kit_icon
+ var/additional_data
+
+/datum/custom_item/proc/spawn_item(var/newloc)
+ var/obj/item/citem = new item_path(newloc)
+ apply_to_item(citem)
+ return citem
+
+/datum/custom_item/proc/apply_to_item(var/obj/item/item)
+ if(!item)
+ return
+ if(name)
+ item.name = name
+ if(item_desc)
+ item.desc = item_desc
+ if(item_icon)
+ item.icon = CUSTOM_ITEM_OBJ
+ item.icon_state = item_icon
+ if(istype(item, /obj/item))
+ item.icon_override = CUSTOM_ITEM_MOB
+
+ // Kits are dumb so this is going to have to be hardcoded/snowflake.
+ if(istype(item, /obj/item/device/kit))
+ var/obj/item/device/kit/K = item
+ K.new_name = kit_name
+ K.new_desc = kit_desc
+ K.new_icon = kit_icon
+ K.new_icon_file = CUSTOM_ITEM_OBJ
+ if(istype(item, /obj/item/device/kit/paint))
+ var/obj/item/device/kit/paint/kit = item
+ kit.allowed_types = text2list(additional_data, ", ")
+ else if(istype(item, /obj/item/device/kit/suit))
+ var/obj/item/device/kit/suit/kit = item
+ kit.new_light_overlay = additional_data
+ kit.new_mob_icon_file = CUSTOM_ITEM_MOB
+
+ return item
+
+
+// Parses the config file into the custom_items list.
+/hook/startup/proc/load_custom_items()
+
+ var/datum/custom_item/current_data
+ for(var/line in text2list(file2text("config/custom_items.txt"), "\n"))
+
+ line = trim(line)
+ if(line == "" || !line || findtext(line, "#", 1, 2))
+ continue
+
+ if(findtext(line, "{", 1, 2) || findtext(line, "}", 1, 2)) // New block!
+ if(current_data && current_data.assoc_key)
+ if(!custom_items[current_data.assoc_key])
+ custom_items[current_data.assoc_key] = list()
+ var/list/L = custom_items[current_data.assoc_key]
+ L |= current_data
+ current_data = null
+
+ var/split = findtext(line,":")
+ if(!split)
+ continue
+ var/field = trim(copytext(line,1,split))
+ var/field_data = trim(copytext(line,(split+1)))
+ if(!field || !field_data)
+ continue
+
+ if(!current_data)
+ current_data = new()
+
+ switch(field)
+ if("ckey")
+ current_data.assoc_key = lowertext(field_data)
+ if("character_name")
+ current_data.character_name = lowertext(field_data)
+ if("item_path")
+ current_data.item_path = text2path(field_data)
+ if("item_name")
+ current_data.name = field_data
+ if("item_icon")
+ if(field_data in icon_states(CUSTOM_ITEM_OBJ))
+ current_data.item_icon = field_data
+ if("item_desc")
+ current_data.item_desc = field_data
+ if("req_access")
+ current_data.req_access = text2num(field_data)
+ if("req_titles")
+ current_data.req_titles = text2list(field_data,", ")
+ if("kit_name")
+ current_data.kit_name = field_data
+ if("kit_desc")
+ current_data.kit_desc = field_data
+ if("kit_icon")
+ current_data.kit_icon = field_data
+ if("additional_data")
+ current_data.additional_data = field_data
return 1
-/proc/EquipCustomItems(mob/living/carbon/human/M)
- for(var/line in custom_items)
- // split & clean up
- var/list/Entry = text2list(line, ":")
- for(var/i = 1 to Entry.len)
- Entry[i] = trim(Entry[i])
+//gets the relevant list for the key from the listlist if it exists, check to make sure they are meant to have it and then calls the giving function
+/proc/equip_custom_items(mob/living/carbon/human/M)
+ var/list/key_list = custom_items[M.ckey]
+ if(!key_list || key_list.len < 1)
+ return
- if(Entry.len < 3)
- continue;
+ for(var/datum/custom_item/citem in key_list)
- if(Entry[1] == M.ckey && Entry[2] == M.real_name)
- var/list/Paths = text2list(Entry[3], ",")
- for(var/P in Paths)
- var/ok = 0 // 1 if the item was placed successfully
- P = trim(P)
- var/path = text2path(P)
- if(!path) continue
+ // Check for requisite ckey and character name.
+ if((lowertext(citem.assoc_key) != lowertext(M.ckey)) || (lowertext(citem.character_name) != lowertext(M.real_name)))
+ continue
- var/obj/item/Item = new path()
- if(istype(Item,/obj/item/weapon/card/id))
- //id card needs to replace the original ID
- if(M.ckey == "nerezza" && M.real_name == "Asher Spock" && M.mind.role_alt_title && M.mind.role_alt_title != "Emergency Physician")
- //only spawn ID if asher is joining as an emergency physician
- ok = 1
- qdel(Item)
- goto skip
- var/obj/item/weapon/card/id/I = Item
- for(var/obj/item/weapon/card/id/C in M)
- //default settings
- I.name = "[M.real_name]'s ID Card ([M.mind.role_alt_title ? M.mind.role_alt_title : M.mind.assigned_role])"
- I.registered_name = M.real_name
- I.access = C.access
- I.assignment = C.assignment
- I.blood_type = C.blood_type
- I.dna_hash = C.dna_hash
- I.fingerprint_hash = C.fingerprint_hash
- //I.pin = C.pin
+ // Check for required access.
+ var/obj/item/weapon/card/id/current_id = M.wear_id
+ if(citem.req_access && citem.req_access > 0)
+ if(!(istype(current_id) && (citem.req_access in current_id.access)))
+ continue
- //custom stuff
- if(M.ckey == "fastler" && M.real_name == "Fastler Greay") //This is a Lifetime ID
- I.name = "[M.real_name]'s Lifetime ID Card ([M.mind.role_alt_title ? M.mind.role_alt_title : M.mind.assigned_role])"
- else if(M.ckey == "nerezza" && M.real_name == "Asher Spock") //This is an Odysseus Specialist ID
- I.name = "[M.real_name]'s Odysseus Specialist ID Card ([M.mind.role_alt_title ? M.mind.role_alt_title : M.mind.assigned_role])"
- I.access += list(access_robotics) //Station-based mecha pilots need this to access the recharge bay.
- else if(M.ckey == "roaper" && M.real_name == "Ian Colm") //This is a Technician ID
- I.name = "[M.real_name]'s Technician ID ([M.mind.role_alt_title ? M.mind.role_alt_title : M.mind.assigned_role])"
+ // Check for required job title.
+ if(citem.req_titles && citem.req_titles.len > 0)
+ var/has_title
+ var/current_title = M.mind.role_alt_title ? M.mind.role_alt_title : M.mind.assigned_role
+ for(var/title in citem.req_titles)
+ if(title == current_title)
+ has_title = 1
+ break
+ if(!has_title)
+ continue
- //replace old ID
- qdel(C)
- ok = M.equip_to_slot_if_possible(I, slot_wear_id, 0) //if 1, last argument deletes on fail
- break
- else if(istype(Item,/obj/item/weapon/storage/belt))
- if(M.ckey == "jakksergal" && M.real_name == "Nashi Ra'hal" && M.mind.role_alt_title && M.mind.role_alt_title != "Nurse" && M.mind.role_alt_title != "Chemist")
- ok = 1
- qdel(Item)
- goto skip
- var/obj/item/weapon/storage/belt/medical/fluff/nashi_belt/I = Item
- if(istype(M.belt,/obj/item/weapon/storage/belt))
- for(var/obj/item/weapon/storage/belt/B in M)
- qdel(B)
- M.belt=null
- ok = M.equip_to_slot_if_possible(I, slot_belt, 0)
- break
- if(istype(M.belt,/obj/item/device/pda))
- for(var/obj/item/device/pda/Pda in M)
- M.belt=null
- M.equip_to_slot_if_possible(Pda, slot_l_store, 0)
- ok = M.equip_to_slot_if_possible(I, slot_belt, 0)
- else if(istype(M.back,/obj/item/weapon/storage) && M.back:contents.len < M.back:storage_slots) // Try to place it in something on the mob's back
- Item.loc = M.back
- ok = 1
+ // ID cards and PDAs are applied directly to the existing object rather than spawned fresh.
+ var/obj/item/existing_item
+ if(citem.item_path == /obj/item/weapon/card/id && istype(current_id)) //Set earlier.
+ existing_item = M.wear_id
+ else if(citem.item_path == /obj/item/device/pda)
+ existing_item = locate(/obj/item/device/pda) in M.contents
- else
- for(var/obj/item/weapon/storage/S in M.contents) // Try to place it in any item that can store stuff, on the mob.
- if (S.contents.len < S.storage_slots)
- Item.loc = S
- ok = 1
- break
+ // Spawn and equip the item.
+ if(existing_item)
+ citem.apply_to_item(existing_item)
+ else
+ place_custom_item(M,citem)
- skip:
- if (ok == 0) // Finally, since everything else failed, place it on the ground
- Item.loc = get_turf(M.loc)
+// Places the item on the target mob.
+/proc/place_custom_item(mob/living/carbon/human/M, var/datum/custom_item/citem)
+
+ if(!citem) return
+ var/obj/item/newitem = citem.spawn_item()
+
+ if(M.equip_to_appropriate_slot(newitem))
+ return newitem
+
+ if(istype(M.back,/obj/item/weapon/storage))
+ var/obj/item/weapon/storage/backpack = M.back
+ if(backpack.contents.len < backpack.storage_slots)
+ newitem.loc = M.back
+ return newitem
+
+ // Try to place it in any item that can store stuff, on the mob.
+ for(var/obj/item/weapon/storage/S in M.contents)
+ if (S.contents.len < S.storage_slots)
+ newitem.loc = S
+ return newitem
+ newitem.loc = get_turf(M.loc)
+ return newitem
diff --git a/code/modules/mob/living/carbon/human/inventory.dm b/code/modules/mob/living/carbon/human/inventory.dm
index c19540c800..6b7c3b8eb1 100644
--- a/code/modules/mob/living/carbon/human/inventory.dm
+++ b/code/modules/mob/living/carbon/human/inventory.dm
@@ -116,7 +116,7 @@ This saves us from having to call add_fingerprint() any time something is put in
update_inv_glasses()
else if (W == head)
head = null
-
+
var/update_hair = 0
if((W.flags & BLOCKHAIR) || (W.flags & BLOCKHEADHAIR))
update_hair = 1
@@ -128,7 +128,7 @@ This saves us from having to call add_fingerprint() any time something is put in
update_hair(0) //rebuild hair
update_inv_ears(0)
update_inv_wear_mask(0)
-
+
update_inv_head()
else if (W == l_ear)
l_ear = null
@@ -168,9 +168,9 @@ This saves us from having to call add_fingerprint() any time something is put in
back = null
update_inv_back()
else if (W == handcuffed)
- handcuffed = null
+ handcuffed = null
if(buckled && buckled.buckle_require_restraints)
- buckled.unbuckle_mob()
+ buckled.unbuckle_mob()
update_inv_handcuffed()
else if (W == legcuffed)
legcuffed = null
@@ -183,7 +183,7 @@ This saves us from having to call add_fingerprint() any time something is put in
update_inv_l_hand()
else
return 0
-
+
update_action_buttons()
return 1
@@ -321,7 +321,7 @@ This saves us from having to call add_fingerprint() any time something is put in
/mob/living/carbon/human/slot_is_accessible(var/slot, var/obj/item/I, mob/user=null)
var/obj/item/covering = null
var/check_flags = 0
-
+
switch(slot)
if(slot_wear_mask)
covering = src.head
@@ -331,7 +331,7 @@ This saves us from having to call add_fingerprint() any time something is put in
check_flags = HEADCOVERSEYES
if(slot_gloves, slot_w_uniform)
covering = src.wear_suit
-
+
if(covering)
if((covering.body_parts_covered & I.body_parts_covered) || (covering.flags & check_flags))
user << "\The [covering] is in the way."
@@ -534,7 +534,7 @@ This saves us from having to call add_fingerprint() any time something is put in
var/obj/item/clothing/accessory/A = suit.accessories[1]
target.attack_log += "\[[time_stamp()]\] Has had their accessory ([A]) removed by [source.name] ([source.ckey])"
source.attack_log += "\[[time_stamp()]\] Attempted to remove [target.name]'s ([target.ckey]) accessory ([A])"
- if(istype(A, /obj/item/clothing/accessory/holobadge) || istype(A, /obj/item/clothing/accessory/medal))
+ if(istype(A, /obj/item/clothing/accessory/badge) || istype(A, /obj/item/clothing/accessory/medal))
for(var/mob/M in viewers(target, null))
M.show_message("\red [source] tears off \the [A] from [target]'s [suit]!" , 1)
done()
@@ -799,7 +799,7 @@ It can still be worn/put on as normal.
target.drop_from_inventory(target.r_store) //At this stage l_store is already processed by the code above, we only need to process r_store.
else
source << "You fail to remove \the [strip_item] from [target]!"
- else if(item)
+ else if(item)
if(target.has_organ_for_slot(slot_to_process) && item.mob_can_equip(target, slot_to_process, 0)) //Placing an item on the mob
source.drop_from_inventory(item)
target.equip_to_slot_if_possible(item, slot_to_process, 0, 1, 1)
diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm
index d7776fa18d..e17c0f49f8 100644
--- a/code/modules/mob/living/carbon/human/update_icons.dm
+++ b/code/modules/mob/living/carbon/human/update_icons.dm
@@ -468,7 +468,7 @@ var/global/list/damage_icon_parts = list()
under_icon = w_uniform.item_icons[slot_w_uniform_str]
else
under_icon = INV_W_UNIFORM_DEF_ICON
-
+
//determine state to use
var/under_state
if(w_uniform.item_state_slots && w_uniform.item_state_slots[slot_w_uniform_str])
@@ -480,7 +480,7 @@ var/global/list/damage_icon_parts = list()
//need to append _s to the icon state for legacy compatibility
var/image/standing = image(icon = under_icon, icon_state = "[under_state]_s")
-
+
//apply blood overlay
if(w_uniform.blood_DNA)
var/image/bloodsies = image(icon = species.blood_mask, icon_state = "uniformblood")
@@ -499,7 +499,7 @@ var/global/list/damage_icon_parts = list()
overlays_standing[UNIFORM_LAYER] = null
if(update_icons)
- update_icons()
+ update_icons()
/mob/living/carbon/human/update_inv_wear_id(var/update_icons=1)
if(wear_id)
@@ -754,7 +754,7 @@ var/global/list/damage_icon_parts = list()
/mob/living/carbon/human/update_inv_back(var/update_icons=1)
if(back)
back.screen_loc = ui_back //TODO
-
+
//determine the icon to use
var/icon/overlay_icon
if(back.icon_override)
@@ -769,7 +769,7 @@ var/global/list/damage_icon_parts = list()
overlay_icon = back.item_icons[slot_back_str]
else
overlay_icon = INV_BACK_DEF_ICON
-
+
//determine state to use
var/overlay_state
if(back.item_state_slots && back.item_state_slots[slot_back_str])
@@ -778,13 +778,13 @@ var/global/list/damage_icon_parts = list()
overlay_state = back.item_state
else
overlay_state = back.icon_state
-
+
//create the image
overlays_standing[BACK_LAYER] = image(icon = overlay_icon, icon_state = overlay_state)
else
overlays_standing[BACK_LAYER] = null
- if(update_icons)
+ if(update_icons)
update_icons()
@@ -822,15 +822,6 @@ var/global/list/damage_icon_parts = list()
if(r_hand)
r_hand.screen_loc = ui_rhand //TODO
- //determine icon to use
- var/icon/t_icon
- if(r_hand.icon_override)
- t_icon = r_hand.icon_override
- else if(r_hand.item_icons && (slot_r_hand_str in r_hand.item_icons))
- t_icon = r_hand.item_icons[slot_r_hand_str]
- else
- t_icon = INV_R_HAND_DEF_ICON
-
//determine icon state to use
var/t_state
if(r_hand.item_state_slots && r_hand.item_state_slots[slot_r_hand_str])
@@ -839,7 +830,17 @@ var/global/list/damage_icon_parts = list()
t_state = r_hand.item_state
else
t_state = r_hand.icon_state
-
+
+ //determine icon to use
+ var/icon/t_icon
+ if(r_hand.icon_override)
+ t_state += "_r"
+ t_icon = r_hand.icon_override
+ else if(r_hand.item_icons && (slot_r_hand_str in r_hand.item_icons))
+ t_icon = r_hand.item_icons[slot_r_hand_str]
+ else
+ t_icon = INV_R_HAND_DEF_ICON
+
overlays_standing[R_HAND_LAYER] = image(icon = t_icon, icon_state = t_state)
if (handcuffed) drop_r_hand() //this should be moved out of icon code
@@ -853,15 +854,6 @@ var/global/list/damage_icon_parts = list()
if(l_hand)
l_hand.screen_loc = ui_lhand //TODO
- //determine icon to use
- var/icon/t_icon
- if(l_hand.icon_override)
- t_icon = l_hand.icon_override
- else if(l_hand.item_icons && (slot_l_hand_str in l_hand.item_icons))
- t_icon = l_hand.item_icons[slot_l_hand_str]
- else
- t_icon = INV_L_HAND_DEF_ICON
-
//determine icon state to use
var/t_state
if(l_hand.item_state_slots && l_hand.item_state_slots[slot_l_hand_str])
@@ -870,7 +862,17 @@ var/global/list/damage_icon_parts = list()
t_state = l_hand.item_state
else
t_state = l_hand.icon_state
-
+
+ //determine icon to use
+ var/icon/t_icon
+ if(l_hand.icon_override)
+ t_state += "_l"
+ t_icon = l_hand.icon_override
+ else if(l_hand.item_icons && (slot_l_hand_str in l_hand.item_icons))
+ t_icon = l_hand.item_icons[slot_l_hand_str]
+ else
+ t_icon = INV_L_HAND_DEF_ICON
+
overlays_standing[L_HAND_LAYER] = image(icon = t_icon, icon_state = t_state)
if (handcuffed) drop_l_hand() //This probably should not be here
diff --git a/code/modules/mob/living/simple_animal/friendly/cat.dm b/code/modules/mob/living/simple_animal/friendly/cat.dm
index 4e72bf55c0..3197c6023c 100644
--- a/code/modules/mob/living/simple_animal/friendly/cat.dm
+++ b/code/modules/mob/living/simple_animal/friendly/cat.dm
@@ -228,6 +228,23 @@
icon_dead = "kitten_dead"
gender = NEUTER
+// Leaving this here for now.
+/obj/item/weapon/holder/cat/fluff/bones
+ name = "Bones"
+ desc = "It's Bones! Meow."
+ gender = MALE
+ icon_state = "cat3"
+
+/mob/living/simple_animal/cat/fluff/bones
+ name = "Bones"
+ desc = "That's Bones the cat. He's a laid back, black cat. Meow."
+ gender = MALE
+ icon_state = "cat3"
+ icon_living = "cat3"
+ icon_dead = "cat3_dead"
+ holder_type = /obj/item/weapon/holder/cat/fluff/bones
+ var/friend_name = "Erstatz Vryroxes"
+
/mob/living/simple_animal/cat/kitten/New()
gender = pick(MALE, FEMALE)
..()
diff --git a/code/modules/mob/new_player/new_player.dm b/code/modules/mob/new_player/new_player.dm
index fe1a86648d..1e18882137 100644
--- a/code/modules/mob/new_player/new_player.dm
+++ b/code/modules/mob/new_player/new_player.dm
@@ -314,7 +314,7 @@
var/mob/living/character = create_character() //creates the human and transfers vars and mind
character = job_master.EquipRank(character, rank, 1) //equips the human
UpdateFactionList(character)
- EquipCustomItems(character)
+ equip_custom_items(character)
// AIs don't need a spawnpoint, they must spawn at an empty core
if(character.mind.assigned_role == "AI")
diff --git a/code/modules/projectiles/guns/projectile/revolver.dm b/code/modules/projectiles/guns/projectile/revolver.dm
index f0291de0f8..cb17710773 100644
--- a/code/modules/projectiles/guns/projectile/revolver.dm
+++ b/code/modules/projectiles/guns/projectile/revolver.dm
@@ -41,3 +41,24 @@
name = input
M << "You name the gun [input]. Say hello to your new friend."
return 1
+
+// Blade Runner pistol.
+/obj/item/weapon/gun/projectile/revolver/deckard
+ name = "Deckard .44"
+ desc = "A custom-built revolver, based off the semi-popular Detective Special model."
+ icon_state = "deckard-empty"
+ ammo_type = /obj/item/ammo_magazine/c38/rubber
+
+/obj/item/weapon/gun/projectile/revolver/deckard/update_icon()
+ ..()
+ if(loaded.len)
+ icon_state = "deckard-loaded"
+ else
+ icon_state = "deckard-empty"
+
+/obj/item/weapon/gun/projectile/revolver/deckard/load_ammo(var/obj/item/A, mob/user)
+ if(istype(A, /obj/item/ammo_magazine))
+ flick("deckard-reload",src)
+ ..()
+
+
diff --git a/code/modules/reagents/reagent_containers/food/drinks.dm b/code/modules/reagents/reagent_containers/food/drinks.dm
index 8681503304..405737028c 100644
--- a/code/modules/reagents/reagent_containers/food/drinks.dm
+++ b/code/modules/reagents/reagent_containers/food/drinks.dm
@@ -268,6 +268,15 @@
volume = 120
center_of_mass = list("x"=17, "y"=10)
+/obj/item/weapon/reagent_containers/food/drinks/teapot
+ name = "teapot"
+ desc = "An elegant teapot. It simply oozes class."
+ icon_state = "teapot"
+ item_state = "teapot"
+ amount_per_transfer_from_this = 10
+ volume = 120
+ center_of_mass = list("x"=17, "y"=7)
+
/obj/item/weapon/reagent_containers/food/drinks/flask
name = "Captain's Flask"
desc = "A metal flask belonging to the captain"
@@ -275,6 +284,16 @@
volume = 60
center_of_mass = list("x"=17, "y"=7)
+/obj/item/weapon/reagent_containers/food/drinks/flask/shiny
+ name = "shiny flask"
+ desc = "A shiny metal flask. It appears to have a Greek symbol inscribed on it."
+ icon_state = "shinyflask"
+
+/obj/item/weapon/reagent_containers/food/drinks/flask/lithium
+ name = "lithium flask"
+ desc = "A flask with a Lithium Atom symbol on it."
+ icon_state = "lithiumflask"
+
/obj/item/weapon/reagent_containers/food/drinks/flask/detflask
name = "Detective's Flask"
desc = "A metal flask with a leather band and golden badge belonging to the detective."
diff --git a/code/modules/research/xenoarchaeology/misc.dm b/code/modules/research/xenoarchaeology/misc.dm
index c66e57f3de..b2d8cef42c 100644
--- a/code/modules/research/xenoarchaeology/misc.dm
+++ b/code/modules/research/xenoarchaeology/misc.dm
@@ -73,7 +73,7 @@
..()
sleep(2)
new /obj/item/clothing/under/rank/scientist(src)
- new /obj/item/clothing/suit/storage/labcoat(src)
+ new /obj/item/clothing/suit/storage/toggle/labcoat(src)
new /obj/item/clothing/shoes/white(src)
new /obj/item/clothing/glasses/science(src)
new /obj/item/device/radio/headset/headset_sci(src)
diff --git a/code/setup.dm b/code/setup.dm
index 7ebb286a0d..7cbcf93bdd 100644
--- a/code/setup.dm
+++ b/code/setup.dm
@@ -960,4 +960,13 @@ var/list/be_special_flags = list(
#define CLAMP01(x) max(0, min(1, x))
-#define DEFAULT_WALL_MATERIAL "steel"
\ No newline at end of file
+#define DEFAULT_WALL_MATERIAL "steel"
+
+// Convoluted setup so defines can be supplied by Bay12 main server compile script.
+// Should still work fine for people jamming the icons into their repo.
+#ifndef CUSTOM_ITEM_OBJ
+#define CUSTOM_ITEM_OBJ 'icons/obj/custom_items_obj.dmi'
+#endif
+#ifndef CUSTOM_ITEM_MOB
+#define CUSTOM_ITEM_MOB 'icons/mob/custom_items_mob.dmi'
+#endif
\ No newline at end of file
diff --git a/config/example/custom_items.txt b/config/example/custom_items.txt
index f4bb1a7028..79fb05a4c1 100644
--- a/config/example/custom_items.txt
+++ b/config/example/custom_items.txt
@@ -1 +1,41 @@
-ckey: name: /path/to/obj
+##
+# Custom items go here. They are modifications of existing paths; look at the example for details.
+# Item will spawn if the target has one of the req_titles and if their on-spawn ID has the required access level.
+# req_access is going to be a shit to maintain since the config file can't grab constants and has to use integers, use it minimally.
+# Separate titles with a single comma and a space (', ') or they'll bork.
+#
+# EX:
+# {
+# ckey: zuhayr
+# character_name: Jane Doe
+# item_path: /obj/item/toy/plushie
+# item_name: ugly plush toy
+# item_icon: flagmask
+# item_desc: It's truly hideous.
+# req_titles: Assistant, Security Officer
+# req_access: 1
+# }
+#
+# {
+# ckey: zuhayr
+# character_name: Jane Doe
+# item_path: /obj/item/device/kit/paint
+# item_name: APLU customisation kit
+# item_desc: A customisation kit with all the parts needed to turn an APLU into a "Titan's Fist" model.
+# kit_name: APLU "Titan's Fist"
+# kit_desc: Looks like an overworked, under-maintained Ripley with some horrific damage.
+# kit_icon: titan
+# additional_data: ripley, firefighter
+# }
+#
+# {
+# ckey: zuhayr
+# character_name: Jane Doe
+# item_path: /obj/item/device/kit/suit
+# item_name: salvage suit customisation kit
+# item_desc: A customisation kit with all the parts needed to convert a suit.
+# kit_name: salvage
+# kit_desc: An orange voidsuit. Reinforced!
+# kit_icon: salvage
+# }
+##
diff --git a/icons/mecha/mecha.dmi b/icons/mecha/mecha.dmi
index a81afab57b..25ef7f5151 100644
Binary files a/icons/mecha/mecha.dmi and b/icons/mecha/mecha.dmi differ
diff --git a/icons/mob/belt.dmi b/icons/mob/belt.dmi
index e8a10e349d..456e6a6b01 100644
Binary files a/icons/mob/belt.dmi and b/icons/mob/belt.dmi differ
diff --git a/icons/mob/custom_items_mob.dmi b/icons/mob/custom_items_mob.dmi
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/icons/mob/ears.dmi b/icons/mob/ears.dmi
index 4cab7dd237..cc0869939e 100644
Binary files a/icons/mob/ears.dmi and b/icons/mob/ears.dmi differ
diff --git a/icons/mob/head.dmi b/icons/mob/head.dmi
index 8038dc3d78..42c1b28cbf 100644
Binary files a/icons/mob/head.dmi and b/icons/mob/head.dmi differ
diff --git a/icons/mob/mask.dmi b/icons/mob/mask.dmi
index 70baf0badb..2b2bdfae95 100644
Binary files a/icons/mob/mask.dmi and b/icons/mob/mask.dmi differ
diff --git a/icons/mob/suit.dmi b/icons/mob/suit.dmi
index afb8b52361..c43ee44df5 100644
Binary files a/icons/mob/suit.dmi and b/icons/mob/suit.dmi differ
diff --git a/icons/mob/uniform.dmi b/icons/mob/uniform.dmi
index d03314d623..68e702df03 100644
Binary files a/icons/mob/uniform.dmi and b/icons/mob/uniform.dmi differ
diff --git a/icons/obj/clothing/glasses.dmi b/icons/obj/clothing/glasses.dmi
index 79fc6c98ab..43bea2af31 100644
Binary files a/icons/obj/clothing/glasses.dmi and b/icons/obj/clothing/glasses.dmi differ
diff --git a/icons/obj/clothing/hats.dmi b/icons/obj/clothing/hats.dmi
index ec29f0ce41..999e6b61c6 100644
Binary files a/icons/obj/clothing/hats.dmi and b/icons/obj/clothing/hats.dmi differ
diff --git a/icons/obj/clothing/shoes.dmi b/icons/obj/clothing/shoes.dmi
index 5098143271..f6512b0d44 100644
Binary files a/icons/obj/clothing/shoes.dmi and b/icons/obj/clothing/shoes.dmi differ
diff --git a/icons/obj/clothing/suits.dmi b/icons/obj/clothing/suits.dmi
index b8156cad06..bc3f111fd3 100644
Binary files a/icons/obj/clothing/suits.dmi and b/icons/obj/clothing/suits.dmi differ
diff --git a/icons/obj/clothing/ties.dmi b/icons/obj/clothing/ties.dmi
index ac6a4e0177..357c32e5e5 100644
Binary files a/icons/obj/clothing/ties.dmi and b/icons/obj/clothing/ties.dmi differ
diff --git a/icons/obj/clothing/uniforms.dmi b/icons/obj/clothing/uniforms.dmi
index fa842ae507..19084b2ee2 100644
Binary files a/icons/obj/clothing/uniforms.dmi and b/icons/obj/clothing/uniforms.dmi differ
diff --git a/icons/obj/custom_items.dmi b/icons/obj/custom_items.dmi
deleted file mode 100644
index 76da63a8bc..0000000000
Binary files a/icons/obj/custom_items.dmi and /dev/null differ
diff --git a/icons/obj/custom_items_obj.dmi b/icons/obj/custom_items_obj.dmi
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/icons/obj/drinks.dmi b/icons/obj/drinks.dmi
index 93f244071a..2db7f08f62 100644
Binary files a/icons/obj/drinks.dmi and b/icons/obj/drinks.dmi differ
diff --git a/icons/obj/gun.dmi b/icons/obj/gun.dmi
index 5727df2daf..f0c9ac7b8d 100644
Binary files a/icons/obj/gun.dmi and b/icons/obj/gun.dmi differ
diff --git a/icons/obj/items.dmi b/icons/obj/items.dmi
index 2b986b7de7..24ed256260 100644
Binary files a/icons/obj/items.dmi and b/icons/obj/items.dmi differ
diff --git a/icons/obj/kitchen.dmi b/icons/obj/kitchen.dmi
index 7c1bce89fb..6d39c35541 100644
Binary files a/icons/obj/kitchen.dmi and b/icons/obj/kitchen.dmi differ
diff --git a/icons/obj/toy.dmi b/icons/obj/toy.dmi
index 46c280252e..b07089e785 100644
Binary files a/icons/obj/toy.dmi and b/icons/obj/toy.dmi differ
diff --git a/maps/exodus-1.dmm b/maps/exodus-1.dmm
index c9f0bb127a..76d3736383 100644
--- a/maps/exodus-1.dmm
+++ b/maps/exodus-1.dmm
@@ -548,7 +548,7 @@
"akB" = (/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -29},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor,/area/security/brig)
"akC" = (/obj/machinery/light,/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor,/area/security/brig)
"akD" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor,/area/security/brig)
-"akE" = (/obj/structure/table,/obj/machinery/recharger/wallcharger{pixel_x = 4; pixel_y = -28},/obj/item/clothing/accessory/holobadge,/obj/item/clothing/accessory/holobadge,/obj/item/clothing/accessory/holobadge/cord,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/turf/simulated/floor{dir = 2; icon_state = "redcorner"},/area/security/main)
+"akE" = (/obj/structure/table,/obj/machinery/recharger/wallcharger{pixel_x = 4; pixel_y = -28},/obj/item/clothing/accessory/badge/holo,/obj/item/clothing/accessory/badge/holo,/obj/item/clothing/accessory/badge/holo/cord,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/turf/simulated/floor{dir = 2; icon_state = "redcorner"},/area/security/main)
"akF" = (/obj/machinery/door/firedoor/border_only{dir = 2},/obj/machinery/door/airlock/glass_security{name = "Security Processing"; req_access = list(1)},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor,/area/security/brig)
"akG" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor,/area/security/brig)
"akH" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/obj/machinery/power/apc{dir = 2; name = "south bump"; pixel_y = -24},/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/turf/simulated/floor,/area/security/brig)