diff --git a/code/datums/trading/ai.dm b/code/datums/trading/ai.dm
index 5b5bdc57f99..fbbaaa9c5ee 100644
--- a/code/datums/trading/ai.dm
+++ b/code/datums/trading/ai.dm
@@ -179,6 +179,5 @@
/obj/item/reagent_containers/glass/bottle/stoxin = TRADER_THIS_TYPE,
/obj/item/reagent_containers/glass/bottle/polysomnine = TRADER_THIS_TYPE,
/obj/item/reagent_containers/glass/bottle/antitoxin = TRADER_THIS_TYPE,
- /obj/item/device/handheld_medical = TRADER_THIS_TYPE,
- /obj/item/stack/medical/advanced/bruise_pack/spaceklot = TRADER_THIS_TYPE
- )
\ No newline at end of file
+ /obj/item/device/handheld_medical = TRADER_THIS_TYPE
+ )
diff --git a/code/game/objects/items/devices/scanners.dm b/code/game/objects/items/devices/scanners.dm
index ecd1c6cf0f3..edcb3b0b33b 100644
--- a/code/game/objects/items/devices/scanners.dm
+++ b/code/game/objects/items/devices/scanners.dm
@@ -248,14 +248,14 @@ BREATH ANALYZER
var/is_bandaged = org.is_bandaged()
var/is_salved = org.is_salved()
if(is_bandaged && is_salved)
- var/icon/B = icon('icons/obj/stacks/medical.dmi', "bandaged")
- var/icon/S = icon('icons/obj/stacks/medical.dmi', "salved")
+ var/icon/B = icon('icons/obj/item/stacks/medical.dmi', "bandaged")
+ var/icon/S = icon('icons/obj/item/stacks/medical.dmi', "salved")
limb_result = "[limb_result] \[[icon2html(B, user)] | [icon2html(S, user)]\]"
else if(is_bandaged)
- var/icon/B = icon('icons/obj/stacks/medical.dmi', "bandaged")
+ var/icon/B = icon('icons/obj/item/stacks/medical.dmi', "bandaged")
limb_result = "[limb_result] \[[icon2html(B, user)]\]"
else if(is_salved)
- var/icon/S = icon('icons/obj/stacks/medical.dmi', "salved")
+ var/icon/S = icon('icons/obj/item/stacks/medical.dmi', "salved")
limb_result = "[limb_result] \[[icon2html(S, user)]\]"
dat += limb_result
else
diff --git a/code/game/objects/items/stacks/medical.dm b/code/game/objects/items/stacks/medical.dm
index 3da36be519f..8ae22ed1647 100644
--- a/code/game/objects/items/stacks/medical.dm
+++ b/code/game/objects/items/stacks/medical.dm
@@ -4,13 +4,11 @@ Contains:
- Ointment
- Advanced Trauma Kit
- Advanced Burn Kit
-- Space Klot
-
*/
/obj/item/stack/medical
name = "medical pack"
singular_name = "medical pack"
- icon = 'icons/obj/stacks/medical.dmi'
+ icon = 'icons/obj/item/stacks/medical.dmi'
item_icons = list(
slot_l_hand_str = 'icons/mob/items/stacks/lefthand_medical.dmi',
slot_r_hand_str = 'icons/mob/items/stacks/righthand_medical.dmi',
@@ -24,16 +22,20 @@ Contains:
throw_range = 20
var/heal_brute = 0
var/heal_burn = 0
+ var/automatic_charge_overlays = FALSE //Do we handle overlays with base update_icon()? | Stolen from TG egun code
+ var/charge_sections = 5 // How many indicator blips are there?
+ var/charge_x_offset = 2 //The spacing between each charge indicator. Should be 2 to leave a 1px gap between each blip.
var/apply_sounds
+ var/applied_sounds
/obj/item/stack/medical/attack(mob/living/M as mob, mob/user as mob)
if (!istype(M) || istype(M, /mob/living/silicon) || istype(M, /mob/living/simple_animal/spiderbot))
- to_chat(user, "\The [src] cannot be applied to [M]!")
+ to_chat(user, SPAN_WARNING("\The [src] cannot be applied to [M]!"))
return 1
if ( ! (istype(user, /mob/living/carbon/human) || \
istype(user, /mob/living/silicon)) )
- to_chat(user, "You don't have the dexterity to do this!")
+ to_chat(user, SPAN_WARNING("You don't have the dexterity to do this!"))
return 1
if (istype(M, /mob/living/carbon/human))
@@ -42,55 +44,77 @@ Contains:
if(affecting.name == BP_HEAD)
if(H.head && istype(H.head,/obj/item/clothing/head/helmet/space))
- to_chat(user, "You can't apply [src] through [H.head]!")
+ to_chat(user, SPAN_WARNING("You can't apply [src] through [H.head]!"))
return 1
else
if(H.wear_suit && istype(H.wear_suit,/obj/item/clothing/suit/space))
- to_chat(user, "You can't apply [src] through [H.wear_suit]!")
+ to_chat(user, SPAN_WARNING("You can't apply [src] through [H.wear_suit]!"))
return 1
if(affecting.status & ORGAN_LIFELIKE)
if(!(affecting.brute_dam || affecting.burn_dam))
- to_chat(user, " [M] seems healthy, there are no wounds to treat! ")
+ to_chat(user, SPAN_NOTICE("[M] seems healthy, there are no wounds to treat! "))
return 1
user.visible_message( \
- " [user] starts applying \the [src] to [M].", \
- " You start applying \the [src] to [M]." \
+ SPAN_NOTICE("[user] starts applying \the [src] to [M]."), \
+ SPAN_NOTICE("You start applying \the [src] to [M].")\
)
if (do_mob(user, M, 30))
user.visible_message( \
- " [M] has been applied with [src] by [user].", \
- " You apply \the [src] to [M]." \
+ SPAN_NOTICE("[M] has been applied with [src] by [user]."), \
+ SPAN_NOTICE("You apply \the [src] to [M].")\
)
use(1)
return 1
if(affecting.status & ORGAN_ASSISTED)
- to_chat(user, "This isn't useful at all on a robotic limb.")
+ to_chat(user, SPAN_WARNING("This isn't useful at all on a robotic limb."))
return 1
H.UpdateDamageIcon()
else
if (!M.getBruteLoss() && !M.getFireLoss())
- to_chat(user, " [M] seems healthy, there are no wounds to treat! ")
+ to_chat(user, SPAN_NOTICE("[M] seems healthy, there are no wounds to treat! "))
return 1
user.visible_message( \
- " [user] starts applying \the [src] to [M].", \
- " You start applying \the [src] to [M]." \
+ SPAN_NOTICE("[user] starts applying \the [src] to [M]."), \
+ SPAN_NOTICE("You start applying \the [src] to [M].")\
)
if (do_mob(user, M, 30))
M.heal_organ_damage((src.heal_brute/2), (src.heal_burn/2))
user.visible_message( \
- " [M] has been applied with [src] by [user].", \
- " You apply \the [src] to [M]." \
+ SPAN_NOTICE("[M] has been applied with [src] by [user]."), \
+ SPAN_NOTICE("You apply \the [src] to [M].")\
)
use(1)
M.updatehealth()
+/obj/item/stack/medical/use()
+ . = ..()
+ if(applied_sounds)
+ playsound(src, applied_sounds, 25)
+
+/obj/item/stack/medical/update_icon()
+ if(QDELETED(src)) //Checks if the item has been deleted
+ return //If it has, do nothing
+ ..()
+ if(!automatic_charge_overlays) //Checks if the item has this feature enabled
+ return //If it does not, do nothing
+ var/ratio = CEILING(clamp(amount / max_amount, 0, 1) * charge_sections, 1)
+ cut_overlays()
+ var/iconState = "[icon_state]_charge"
+ if(!amount) //Checks if there are still charges left in the item
+ return //If it does not, do nothing, as the overlays have been cut before this already.
+ else
+ var/mutable_appearance/charge_overlay = mutable_appearance(icon, iconState)
+ for(var/i = ratio, i >= 1, i--)
+ charge_overlay.pixel_x = charge_x_offset * (i - 1)
+ add_overlay(charge_overlay)
+
// Bruise Pack.
/obj/item/stack/medical/bruise_pack
name = "roll of gauze"
@@ -100,7 +124,7 @@ Contains:
origin_tech = list(TECH_BIO = 1)
heal_brute = 4
icon_has_variants = TRUE
- apply_sounds = list('sound/items/rip1.ogg','sound/items/rip2.ogg')
+ apply_sounds = /singleton/sound_category/rip_sound
drop_sound = 'sound/items/drop/gloves.ogg'
pickup_sound = 'sound/items/pickup/gloves.ogg'
@@ -122,12 +146,12 @@ Contains:
if(affecting.open == 0)
if(affecting.is_bandaged())
- to_chat(user, "The wounds on [M]'s [affecting.name] have already been bandaged.")
+ to_chat(user, SPAN_WARNING("The wounds on [M]'s [affecting.name] have already been bandaged."))
return 1
else
user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN)
- user.visible_message("\The [user] starts treating [M]'s [affecting.name].", \
- "You start treating [M]'s [affecting.name]." )
+ user.visible_message(SPAN_NOTICE("\The [user] starts treating [M]'s [affecting.name]."), \
+ SPAN_NOTICE("You start treating [M]'s [affecting.name]."))
var/used = 0
for (var/datum/wound/W in affecting.wounds)
if(W.bandaged)
@@ -135,27 +159,27 @@ Contains:
if(used == amount)
break
if(!do_mob(user, M, W.damage/5))
- to_chat(user, "You must stand still to bandage wounds.")
+ to_chat(user, SPAN_NOTICE("You must stand still to bandage wounds."))
break
if (W.current_stage <= W.max_bleeding_stage)
- user.visible_message("\The [user] bandages \a [W.desc] on [M]'s [affecting.name].", \
- "You bandage \a [W.desc] on [M]'s [affecting.name]." )
+ user.visible_message(SPAN_NOTICE("\The [user] bandages \a [W.desc] on [M]'s [affecting.name]."), \
+ SPAN_NOTICE("You bandage \a [W.desc] on [M]'s [affecting.name]."))
//H.add_side_effect("Itch")
else if (W.damage_type == BRUISE)
- user.visible_message("\The [user] places a bruise patch over \a [W.desc] on [M]'s [affecting.name].", \
- "You place a bruise patch over \a [W.desc] on [M]'s [affecting.name]." )
+ user.visible_message(SPAN_NOTICE("\The [user] places a bruise patch over \a [W.desc] on [M]'s [affecting.name]."), \
+ SPAN_NOTICE("You place a bruise patch over \a [W.desc] on [M]'s [affecting.name]."))
else
- user.visible_message("\The [user] places a bandaid over \a [W.desc] on [M]'s [affecting.name].", \
- "You place a bandaid over \a [W.desc] on [M]'s [affecting.name]." )
+ user.visible_message(SPAN_NOTICE("\The [user] places a bandaid over \a [W.desc] on [M]'s [affecting.name]."), \
+ SPAN_NOTICE("You place a bandaid over \a [W.desc] on [M]'s [affecting.name]."))
W.bandage()
- playsound(src, pick(apply_sounds), 25)
+ playsound(src, apply_sounds, 25)
used++
affecting.update_damages()
if(used == amount)
if(affecting.is_bandaged())
- to_chat(user, "\The [src] is used up.")
+ to_chat(user, SPAN_WARNING("\The [src] is used up."))
else
- to_chat(user, "\The [src] is used up, but there are more wounds to treat on \the [affecting.name].")
+ to_chat(user, SPAN_WARNING("\The [src] is used up, but there are more wounds to treat on \the [affecting.name]."))
use(used)
H.update_bandages(TRUE)
else
@@ -163,7 +187,7 @@ Contains:
if (do_surgery(H,user,src))
return
else
- to_chat(user, "The [affecting.name] is cut open, you'll need more than a bandage!")
+ to_chat(user, SPAN_NOTICE("The [affecting.name] is cut open, you'll need more than a bandage!"))
// Ointment.
/obj/item/stack/medical/ointment
@@ -175,7 +199,7 @@ Contains:
heal_burn = 4
origin_tech = list(TECH_BIO = 1)
icon_has_variants = TRUE
- apply_sounds = list('sound/items/ointment.ogg')
+ apply_sounds = /singleton/sound_category/ointment_sound
drop_sound = 'sound/items/drop/herb.ogg'
pickup_sound = 'sound/items/pickup/herb.ogg'
@@ -197,18 +221,18 @@ Contains:
if(affecting.open == 0)
if(affecting.is_salved())
- to_chat(user, "The wounds on [M]'s [affecting.name] have already been salved.")
+ to_chat(user, SPAN_WARNING("The wounds on [M]'s [affecting.name] have already been salved."))
return 1
else
user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN)
- user.visible_message("\The [user] starts salving wounds on [M]'s [affecting.name].", \
- "You start salving the wounds on [M]'s [affecting.name]." )
+ user.visible_message(SPAN_NOTICE("\The [user] starts salving wounds on [M]'s [affecting.name]."), \
+ SPAN_NOTICE("You start salving the wounds on [M]'s [affecting.name]."))
playsound(src, pick(apply_sounds), 25)
if(!do_mob(user, M, 10))
- to_chat(user, "You must stand still to salve wounds.")
+ to_chat(user, SPAN_NOTICE("You must stand still to salve wounds."))
return 1
- user.visible_message("[user] salved wounds on [M]'s [affecting.name].", \
- "You salved wounds on [M]'s [affecting.name]." )
+ user.visible_message(SPAN_NOTICE("[user] salved wounds on [M]'s [affecting.name]."), \
+ SPAN_NOTICE("You salved wounds on [M]'s [affecting.name]."))
use(1)
affecting.salve()
else
@@ -216,7 +240,7 @@ Contains:
if (do_surgery(H,user,src))
return
else
- to_chat(user, "The [affecting.name] is cut open, you'll need more than a bandage!")
+ to_chat(user, SPAN_NOTICE("The [affecting.name] is cut open, you'll need more than a bandage!"))
// Advanced Trauma Kit.
/obj/item/stack/medical/advanced/bruise_pack
@@ -226,7 +250,9 @@ Contains:
icon_state = "traumakit"
heal_brute = 8
origin_tech = list(TECH_BIO = 1)
- apply_sounds = list('sound/items/rip1.ogg','sound/items/rip2.ogg','sound/items/tape.ogg')
+ apply_sounds = /singleton/sound_category/rip_sound
+ applied_sounds = 'sound/items/advkit.ogg'
+ automatic_charge_overlays = TRUE
/obj/item/stack/medical/advanced/bruise_pack/full/Initialize()
. = ..()
@@ -246,12 +272,12 @@ Contains:
if(affecting.open == 0)
if(affecting.is_bandaged() && affecting.is_disinfected())
- to_chat(user, "The wounds on [M]'s [affecting.name] have already been treated.")
+ to_chat(user, SPAN_WARNING("The wounds on [M]'s [affecting.name] have already been treated."))
return 1
else
user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN)
- user.visible_message("\The [user] starts treating [M]'s [affecting.name].", \
- "You start treating [M]'s [affecting.name]." )
+ user.visible_message(SPAN_NOTICE("\The [user] starts treating [M]'s [affecting.name]."), \
+ SPAN_NOTICE("You start treating [M]'s [affecting.name]."))
var/used = 0
for (var/datum/wound/W in affecting.wounds)
if (W.bandaged && W.disinfected)
@@ -259,18 +285,18 @@ Contains:
if(used == amount)
break
if(!do_mob(user, M, W.damage/5))
- to_chat(user, "You must stand still to bandage wounds.")
+ to_chat(user, SPAN_NOTICE("You must stand still to bandage wounds."))
break
if (W.current_stage <= W.max_bleeding_stage)
- user.visible_message("\The [user] cleans \a [W.desc] on [M]'s [affecting.name] and seals the edges with bioglue.", \
- "You clean and seal \a [W.desc] on [M]'s [affecting.name]." )
+ user.visible_message(SPAN_NOTICE("\The [user] cleans \a [W.desc] on [M]'s [affecting.name] and seals the edges with bioglue."), \
+ SPAN_NOTICE("You clean and seal \a [W.desc] on [M]'s [affecting.name]."))
//H.add_side_effect("Itch")
else if (W.damage_type == BRUISE)
- user.visible_message("\The [user] places a medical patch over \a [W.desc] on [M]'s [affecting.name].", \
- "You place a medical patch over \a [W.desc] on [M]'s [affecting.name]." )
+ user.visible_message(SPAN_NOTICE("\The [user] places a medical patch over \a [W.desc] on [M]'s [affecting.name]."), \
+ SPAN_NOTICE("You place a medical patch over \a [W.desc] on [M]'s [affecting.name]."))
else
- user.visible_message("\The [user] smears some bioglue over \a [W.desc] on [M]'s [affecting.name].", \
- "You smear some bioglue over \a [W.desc] on [M]'s [affecting.name]." )
+ user.visible_message(SPAN_NOTICE("\The [user] smears some bioglue over \a [W.desc] on [M]'s [affecting.name]."), \
+ SPAN_NOTICE("You smear some bioglue over \a [W.desc] on [M]'s [affecting.name]."))
playsound(src, pick(apply_sounds), 25)
W.bandage()
W.disinfect()
@@ -279,9 +305,9 @@ Contains:
affecting.update_damages()
if(used == amount)
if(affecting.is_bandaged())
- to_chat(user, "\The [src] is used up.")
+ to_chat(user, SPAN_WARNING("\The [src] is used up."))
else
- to_chat(user, "\The [src] is used up, but there are more wounds to treat on \the [affecting.name].")
+ to_chat(user, SPAN_WARNING("\The [src] is used up, but there are more wounds to treat on \the [affecting.name]."))
use(used)
H.update_bandages(TRUE)
else
@@ -289,7 +315,7 @@ Contains:
if (do_surgery(H,user,src))
return
else
- to_chat(user, "The [affecting.name] is cut open, you'll need more than a bandage!")
+ to_chat(user, SPAN_NOTICE("The [affecting.name] is cut open, you'll need more than a bandage!"))
// Advanced Burn Kit.
/obj/item/stack/medical/advanced/ointment
@@ -299,7 +325,9 @@ Contains:
icon_state = "burnkit"
heal_burn = 8
origin_tech = list(TECH_BIO = 1)
- apply_sounds = list('sound/items/ointment.ogg')
+ apply_sounds = /singleton/sound_category/ointment_sound
+ applied_sounds = 'sound/items/advkit.ogg'
+ automatic_charge_overlays = TRUE
/obj/item/stack/medical/advanced/ointment/full/Initialize()
. = ..()
@@ -316,18 +344,18 @@ Contains:
if(affecting.open == 0)
if(affecting.is_salved())
- to_chat(user, "The wounds on [M]'s [affecting.name] have already been salved.")
+ to_chat(user, SPAN_WARNING("The wounds on [M]'s [affecting.name] have already been salved."))
return 1
else
user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN)
- user.visible_message("\The [user] starts salving wounds on [M]'s [affecting.name].", \
- "You start salving the wounds on [M]'s [affecting.name]." )
+ user.visible_message(SPAN_NOTICE("\The [user] starts salving wounds on [M]'s [affecting.name]."), \
+ SPAN_NOTICE("You start salving the wounds on [M]'s [affecting.name]."))
playsound(src, pick(apply_sounds), 25)
if(!do_mob(user, M, 10))
- to_chat(user, "You must stand still to salve wounds.")
+ to_chat(user, SPAN_NOTICE("You must stand still to salve wounds."))
return 1
- user.visible_message( "[user] covers wounds on [M]'s [affecting.name] with regenerative membrane.", \
- "You cover wounds on [M]'s [affecting.name] with regenerative membrane." )
+ user.visible_message(SPAN_NOTICE("[user] covers wounds on [M]'s [affecting.name] with regenerative membrane."), \
+ SPAN_NOTICE("You cover wounds on [M]'s [affecting.name] with regenerative membrane."))
affecting.heal_damage(0,heal_burn)
use(1)
affecting.salve()
@@ -336,60 +364,7 @@ Contains:
if (do_surgery(H,user,src))
return
else
- to_chat(user, "The [affecting.name] is cut open, you'll need more than a bandage!")
-
-// Space Klot. This stops bleeding and has a small chance to stop some internal bleeding, but it will be locked behind a tech tree + does not disinfect like a normal bruise pack.
-/obj/item/stack/medical/advanced/bruise_pack/spaceklot
- name = "space klot"
- singular_name = "space klot"
- desc = "A powder that, when poured on an open wound, quickly stops the bleeding. Combine with bandages for the best effect."
- icon_state = "powderbag"
- heal_brute = 15
- origin_tech = list(TECH_BIO = 4)
- var/open = 0
- var/used = 0
-
-/obj/item/stack/medical/advanced/bruise_pack/spaceklot/full/Initialize()
- . = ..()
- amount = max_amount
- update_icon()
-
-/obj/item/stack/medical/advanced/bruise_pack/spaceklot/attack(mob/living/carbon/M as mob, mob/user as mob)
- if(..())
- return 1
- if(used)
- return
- if(ishuman(M))
- var/mob/living/carbon/human/H = M
- var/obj/item/organ/external/affecting = H.get_organ(user.zone_sel.selecting)
-
- if(affecting.open == 0)
- if(affecting.is_bandaged())
- to_chat(user, "The wounds on [M]'s [affecting.name] have already been treated.")
- return 1
- else
- user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN)
- user.visible_message("\The [user] starts treating [M]'s [affecting.name].", \
- "You start treating [M]'s [affecting.name]." )
- if(!do_after(user, 100, act_target = M))
- return
- for (var/datum/wound/W in affecting.wounds)
- if (W.bandaged)
- continue
- if(used == amount)
- break
- if(!do_mob(user, M, W.damage/5))
- to_chat(user, "You must stand still to bandage wounds.")
- break
- if (W.current_stage <= W.max_bleeding_stage)
- user.visible_message("\The [user] pours the powder \a [W.desc] on [M]'s [affecting.name].", \
- "You pour the powder \a [W.desc] on [M]'s [affecting.name]." )
-
- W.bandage()
- W.heal_damage(heal_brute, 0)
- used = 1
- affecting.update_damages()
-
+ to_chat(user, SPAN_NOTICE("The [affecting.name] is cut open, you'll need more than a bandage!"))
/obj/item/stack/medical/splint
name = "medical splints"
@@ -419,32 +394,31 @@ Contains:
var/obj/item/organ/external/affecting = H.get_organ(user.zone_sel.selecting)
var/limb = affecting.name
if(!(affecting.limb_name in splintable_organs))
- to_chat(user, "You can't apply a splint there!")
+ to_chat(user, SPAN_DANGER("You can't apply a splint there!"))
return
if(affecting.status & ORGAN_SPLINTED)
- to_chat(user, "[M]'s [limb] is already splinted!")
+ to_chat(user, SPAN_DANGER("[M]'s [limb] is already splinted!"))
return
if (M != user)
- user.visible_message("[user] starts to apply \the [src] to [M]'s [limb].", "You start to apply \the [src] to [M]'s [limb].", "You hear something being wrapped.")
+ user.visible_message(SPAN_DANGER("[user] starts to apply \the [src] to [M]'s [limb]."), SPAN_DANGER("You start to apply \the [src] to [M]'s [limb]."), SPAN_DANGER("You hear something being wrapped."))
else
if((!user.hand && affecting.limb_name == BP_R_ARM) || (user.hand && affecting.limb_name == BP_L_ARM))
- to_chat(user, "You can't apply a splint to the arm you're using!")
+ to_chat(user, SPAN_DANGER("You can't apply a splint to the arm you're using!"))
return
- user.visible_message("[user] starts to apply \the [src] to their [limb].", "You start to apply \the [src] to your [limb].", "You hear something being wrapped.")
+ user.visible_message(SPAN_DANGER("[user] starts to apply \the [src] to their [limb]."), SPAN_DANGER("You start to apply \the [src] to your [limb]."), SPAN_DANGER("You hear something being wrapped."))
if(do_after(user, 50))
if (M != user)
- user.visible_message("[user] finishes applying \the [src] to [M]'s [limb].", "You finish applying \the [src] to [M]'s [limb].", "You hear something being wrapped.")
+ user.visible_message(SPAN_DANGER("[user] finishes applying \the [src] to [M]'s [limb]."), SPAN_DANGER("You finish applying \the [src] to [M]'s [limb]."), SPAN_DANGER("You hear something being wrapped."))
else
if(prob(25))
- user.visible_message("[user] successfully applies \the [src] to their [limb].", "You successfully apply \the [src] to your [limb].", "You hear something being wrapped.")
+ user.visible_message(SPAN_DANGER("[user] successfully applies \the [src] to their [limb]."), SPAN_DANGER("You successfully apply \the [src] to your [limb]."), SPAN_DANGER("You hear something being wrapped."))
else
- user.visible_message("[user] fumbles \the [src].", "You fumble \the [src].", "You hear something being wrapped.")
+ user.visible_message(SPAN_DANGER("[user] fumbles \the [src]."), SPAN_DANGER("You fumble \the [src]."), SPAN_DANGER("You hear something being wrapped."))
return
affecting.status |= ORGAN_SPLINTED
use(1)
return
-
/obj/item/stack/medical/splint/makeshift
name = "makeshift splints"
singular_name = "makeshift splint"
diff --git a/code/game/objects/items/stacks/nanopaste.dm b/code/game/objects/items/stacks/nanopaste.dm
index 9398d299f2a..72f31e1d38d 100644
--- a/code/game/objects/items/stacks/nanopaste.dm
+++ b/code/game/objects/items/stacks/nanopaste.dm
@@ -2,7 +2,7 @@
name = "nanopaste"
singular_name = "nanite swarm"
desc = "A tube of paste containing swarms of repair nanites. Very effective in repairing robotic machinery."
- icon = 'icons/obj/stacks/nanopaste.dmi'
+ icon = 'icons/obj/item/stacks/nanopaste.dmi'
item_icons = list(
slot_l_hand_str = 'icons/mob/items/stacks/lefthand_nanopaste.dmi',
slot_r_hand_str = 'icons/mob/items/stacks/righthand_nanopaste.dmi',
@@ -38,10 +38,10 @@
R.adjustFireLoss(-15)
R.updatehealth()
use(1)
- user.visible_message("\The [user] applied some [src] at [R]'s damaged areas.",\
- "You apply some [src] at [R]'s damaged areas.")
+ user.visible_message(SPAN_NOTICE("\The [user] applied some [src] at [R]'s damaged areas."),\
+ SPAN_NOTICE("You apply some [src] at [R]'s damaged areas."))
else
- to_chat(user, "All [R]'s systems are nominal.")
+ to_chat(user, SPAN_NOTICE("All [R]'s systems are nominal."))
else if(ishuman(M)) //Repairing robolimbs
var/mob/living/carbon/human/H = M
@@ -53,27 +53,27 @@
if(S.limb_name == BP_HEAD)
if(H.head && istype(H.head,/obj/item/clothing/head/helmet/space))
- to_chat(user, "You can't apply [src] through [H.head]!")
+ to_chat(user, SPAN_WARNING("You can't apply [src] through [H.head]!"))
return
else
if(H.wear_suit && istype(H.wear_suit,/obj/item/clothing/suit/space))
- to_chat(user, "You can't apply [src] through [H.wear_suit]!")
+ to_chat(user, SPAN_WARNING("You can't apply [src] through [H.wear_suit]!"))
return
if(do_mob(user, M, 7))
S.heal_damage(15, 15, robo_repair = 1)
H.updatehealth()
use(1)
- user.visible_message("\The [user] applies some nanite paste at[user != M ? " \the [M]'s" : " \the [user]"] [S.name] with \the [src].",\
- "You apply some nanite paste at [user == M ? "your" : "[M]'s"] [S.name].")
+ user.visible_message(SPAN_NOTICE("\The [user] applies some nanite paste at[user != M ? " \the [M]'s" : " \the [user]"] [S.name] with \the [src]."),\
+ SPAN_NOTICE("You apply some nanite paste at [user == M ? "your" : "[M]'s"] [S.name]."))
else
- to_chat(user, "Nothing to fix here.")
+ to_chat(user, SPAN_NOTICE("Nothing to fix here."))
else
if (can_operate(H))
if (do_surgery(H,user,src))
return
else
- to_chat(user, "Nothing to fix in here.")
+ to_chat(user, SPAN_NOTICE("Nothing to fix in here."))
/obj/item/stack/nanopaste/surge
@@ -91,15 +91,15 @@
return 0
if(used)
- to_chat(user, "[src] has depleted it's nanites.")
+ to_chat(user, SPAN_WARNING("[src] has depleted it's nanites."))
return 0
if (isipc(M))
var/obj/item/organ/internal/surge/s = M.internal_organs_by_name["surge"]
if(isnull(s))
user.visible_message(
- "[user] is trying to apply [src] to [(M == user) ? ("itself") : (M)]!",
- "You start applying [src] to [(M == user) ? ("yourself") : (M)]!"
+ SPAN_NOTICE("[user] is trying to apply [src] to [(M == user) ? ("itself") : (M)]!"),
+ SPAN_NOTICE("You start applying [src] to [(M == user) ? ("yourself") : (M)]!")
)
if (!do_mob(user, M, 2))
@@ -109,18 +109,18 @@
M.internal_organs += s
M.internal_organs_by_name["surge"] = s
user.visible_message(
- "[user] applies some nanite paste to [(M == user) ? ("itself") : (M)]!",
- "You apply [src] to [(M == user) ? ("youself") : (M)]."
+ SPAN_NOTICE("[user] applies some nanite paste to [(M == user) ? ("itself") : (M)]!"),
+ SPAN_NOTICE("You apply [src] to [(M == user) ? ("youself") : (M)].")
)
- to_chat(M, "You can feel nanites inside you creating something new. An internal OS voice states \"Warning: surge prevention module has been installed, it has [s.surge_left] preventions left!\"")
+ to_chat(M, SPAN_NOTICE("You can feel nanites inside you creating something new. An internal OS voice states \"Warning: surge prevention module has been installed, it has [s.surge_left] preventions left!\""))
amount = 0
used = TRUE
return 1
else
if(!s.surge_left)
user.visible_message(
- "[user] is trying to apply [src] to [(M == user) ? ("itself") : (M)]!",
- "You start applying [src] to [(M == user) ? ("yourself") : (M)]!"
+ SPAN_NOTICE("[user] is trying to apply [src] to [(M == user) ? ("itself") : (M)]!"),
+ SPAN_NOTICE("You start applying [src] to [(M == user) ? ("yourself") : (M)]!")
)
if (!do_mob(user, M, 2))
@@ -131,16 +131,16 @@
s.icon_state = "surge_ipc"
user.visible_message(
- "[user] applies some nanite paste to [(M == user) ? ("itself") : (M)]!",
- "You apply [src] to [(M == user) ? ("yourself") : (M)]."
+ SPAN_NOTICE("[user] applies some nanite paste to [(M == user) ? ("itself") : (M)]!"),
+ SPAN_NOTICE("You apply [src] to [(M == user) ? ("yourself") : (M)].")
)
- to_chat(M, "You can feel nanites inside you regenerating your surge prevention module. An internal OS voice states \"Warning: surge prevention module repaired, it has [s.surge_left] preventions left!\"")
+ to_chat(M, SPAN_NOTICE("You can feel nanites inside you regenerating your surge prevention module. An internal OS voice states \"Warning: surge prevention module repaired, it has [s.surge_left] preventions left!\""))
amount = 0
used = TRUE
return 1
- to_chat(user, "[(M == user) ? ("You already have") : ("[M] already has")] fully functional surge prevention module installed.")
+ to_chat(user, SPAN_WARNING("[(M == user) ? ("You already have") : ("[M] already has")] fully functional surge prevention module installed."))
return 0
else
- to_chat(user, "[src]'s nanites refuse to work on [(M == user) ? ("you") : (M)].")
- return 0
\ No newline at end of file
+ to_chat(user, SPAN_WARNING("[src]'s nanites refuse to work on [(M == user) ? ("you") : (M)]."))
+ return 0
diff --git a/code/game/objects/items/stacks/rods.dm b/code/game/objects/items/stacks/rods.dm
index 8b5d31d1a58..90ee927cb1b 100644
--- a/code/game/objects/items/stacks/rods.dm
+++ b/code/game/objects/items/stacks/rods.dm
@@ -35,6 +35,7 @@ var/global/list/datum/stack_recipe/rod_recipes = list(
attack_verb = list("hit", "bludgeoned", "whacked")
lock_picking_level = 3
stacktype = /obj/item/stack/rods
+ icon_has_variants = TRUE
/obj/item/stack/rods/full/Initialize()
. = ..()
@@ -52,17 +53,7 @@ var/global/list/datum/stack_recipe/rod_recipes = list(
/obj/item/stack/rods/New(var/loc, var/amount=null)
..()
-
recipes = rod_recipes
- update_icon()
-
-/obj/item/stack/rods/update_icon()
- var/amount = get_amount()
- if((amount <= 5) && (amount > 0))
- icon_state = "rods-[amount]"
- else
- icon_state = "rods"
- check_maptext(SMALL_FONTS(7, amount))
/obj/item/stack/rods/attackby(obj/item/W as obj, mob/user as mob)
..()
@@ -161,4 +152,4 @@ var/global/list/datum/stack_recipe/rod_recipes = list(
SPAN_NOTICE("You assemble a liquidbag barricade."))
SB.set_dir(user.dir)
SB.add_fingerprint(user)
- use(build_stack)
\ No newline at end of file
+ use(build_stack)
diff --git a/code/game/objects/items/stacks/sheets/glass.dm b/code/game/objects/items/stacks/sheets/glass.dm
index 6eaf0e5daf3..c0e4af3ccd1 100644
--- a/code/game/objects/items/stacks/sheets/glass.dm
+++ b/code/game/objects/items/stacks/sheets/glass.dm
@@ -118,7 +118,7 @@
name = "wired glass tile"
singular_name = "wired glass floor tile"
desc = "A glass tile, which is wired, somehow."
- icon = 'icons/obj/stacks/tiles.dmi'
+ icon = 'icons/obj/item/stacks/tiles.dmi'
icon_state = "glass_wire"
created_window = null
default_type = "wired glass"
diff --git a/code/game/objects/items/stacks/stack.dm b/code/game/objects/items/stacks/stack.dm
index d859a7a9bf4..e01a3331f6e 100644
--- a/code/game/objects/items/stacks/stack.dm
+++ b/code/game/objects/items/stacks/stack.dm
@@ -23,7 +23,7 @@
var/list/charge_costs = null
var/list/datum/matter_synth/synths = null
var/icon_has_variants = FALSE
- icon = 'icons/obj/stacks/materials.dmi'
+ icon = 'icons/obj/item/stacks/materials.dmi'
item_icons = list(
slot_l_hand_str = 'icons/mob/items/stacks/lefthand_materials.dmi',
slot_r_hand_str = 'icons/mob/items/stacks/righthand_materials.dmi',
diff --git a/code/game/objects/items/stacks/tiles/tile_types.dm b/code/game/objects/items/stacks/tiles/tile_types.dm
index a85a6e66954..18913d6812b 100644
--- a/code/game/objects/items/stacks/tiles/tile_types.dm
+++ b/code/game/objects/items/stacks/tiles/tile_types.dm
@@ -15,7 +15,7 @@
w_class = ITEMSIZE_NORMAL
max_amount = 60
recyclable = TRUE
- icon = 'icons/obj/stacks/tiles.dmi'
+ icon = 'icons/obj/item/stacks/tiles.dmi'
item_icons = list(
slot_l_hand_str = 'icons/mob/items/stacks/lefthand_tiles.dmi',
slot_r_hand_str = 'icons/mob/items/stacks/righthand_tiles.dmi',
@@ -80,7 +80,7 @@
/obj/item/stack/tile/wood/coloured/birch
name = "birch wood floor tile"
- color = WOOD_COLOR_BIRCH
+ color = WOOD_COLOR_BIRCH
build_type = /obj/item/stack/tile/wood/coloured/birch
/obj/item/stack/tile/wood/coloured/mahogany
diff --git a/code/game/objects/items/stacks/wrap.dm b/code/game/objects/items/stacks/wrap.dm
index 8963f521320..17ad87e9be0 100644
--- a/code/game/objects/items/stacks/wrap.dm
+++ b/code/game/objects/items/stacks/wrap.dm
@@ -2,7 +2,7 @@
name = "wrapping paper"
desc = "You can use this to wrap items in."
desc_info = "To wrap something into a gift, click on the wrapping paper that's not in your hands with the object you wish to wrap."
- icon = 'icons/obj/stacks/wrap.dmi'
+ icon = 'icons/obj/item/stacks/wrap.dmi'
item_icons = list(
slot_l_hand_str = 'icons/mob/items/stacks/lefthand_wrap.dmi',
slot_r_hand_str = 'icons/mob/items/stacks/righthand_wrap.dmi',
@@ -92,7 +92,7 @@
/obj/item/stack/packageWrap
name = "package wrapper"
- icon = 'icons/obj/stacks/wrap.dmi'
+ icon = 'icons/obj/item/stacks/wrap.dmi'
item_icons = list(
slot_l_hand_str = 'icons/mob/items/stacks/lefthand_wrap.dmi',
slot_r_hand_str = 'icons/mob/items/stacks/righthand_wrap.dmi',
@@ -206,7 +206,7 @@
/obj/item/c_tube
name = "cardboard tube"
desc = "A tube of cardboard."
- icon = 'icons/obj/stacks/wrap.dmi'
+ icon = 'icons/obj/item/stacks/wrap.dmi'
item_icons = list(
slot_l_hand_str = 'icons/mob/items/stacks/lefthand_wrap.dmi',
slot_r_hand_str = 'icons/mob/items/stacks/righthand_wrap.dmi',
diff --git a/code/game/objects/items/weapons/storage/mre.dm b/code/game/objects/items/weapons/storage/mre.dm
index 11576b888ea..a43ec7f5b12 100644
--- a/code/game/objects/items/weapons/storage/mre.dm
+++ b/code/game/objects/items/weapons/storage/mre.dm
@@ -14,7 +14,7 @@ MRE Stuff
drop_sound = 'sound/items/drop/gloves.ogg'
pickup_sound = 'sound/items/pickup/gloves.ogg'
use_sound = 'sound/items/storage/wrapper.ogg'
- open_sound = 'sound/items/rip1.ogg'
+ open_sound = /singleton/sound_category/rip_sound
open_message = "You tear open the bag, breaking the vacuum seal."
var/main_meal = /obj/item/storage/box/fancy/mrebag
var/meal_desc = "This one is menu 1, meat pizza."
@@ -223,7 +223,7 @@ MRE Stuff
name = "dessert"
desc = "A vacuum-sealed bag containing a MRE's dessert."
icon_state = "pouch_small"
- open_sound = 'sound/items/rip1.ogg'
+ open_sound = /singleton/sound_category/rip_sound
open_message = "You tear open the bag, breaking the vacuum seal."
starts_with = list(/obj/random/mre/dessert = 1)
diff --git a/code/game/objects/items/weapons/tape.dm b/code/game/objects/items/weapons/tape.dm
index 8b81729f852..89ee1affa5c 100644
--- a/code/game/objects/items/weapons/tape.dm
+++ b/code/game/objects/items/weapons/tape.dm
@@ -32,7 +32,7 @@
if(!H || !src || !H.organs_by_name[BP_HEAD] || !H.has_eyes() || H.glasses || (H.head && (H.head.body_parts_covered & FACE)))
return
- playsound(src, 'sound/items/tape.ogg',25)
+ playsound(src, /singleton/sound_category/rip_sound, 25)
user.visible_message("\The [user] has taped up \the [H]'s eyes!")
H.equip_to_slot_or_del(new /obj/item/clothing/glasses/sunglasses/blindfold/tape(H), slot_glasses)
H.update_inv_glasses()
@@ -51,7 +51,7 @@
to_chat(user, "Remove their [H.head] first.")
return
- playsound(src, 'sound/items/tape.ogg',25)
+ playsound(src, /singleton/sound_category/rip_sound, 25)
user.visible_message("\The [user] begins taping up \the [H]'s mouth!")
if(!do_after(user, 30))
@@ -61,13 +61,13 @@
if(!H || !src || !H.organs_by_name[BP_HEAD] || !H.check_has_mouth() || H.wear_mask || (H.head && (H.head.body_parts_covered & FACE)))
return
- playsound(src, 'sound/items/tape.ogg',25)
+ playsound(src, /singleton/sound_category/rip_sound,25)
user.visible_message("\The [user] has taped up \the [H]'s mouth!")
H.equip_to_slot_or_del(new /obj/item/clothing/mask/muzzle/tape(H), slot_wear_mask)
H.update_inv_wear_mask()
else if(target_zone == BP_R_HAND || target_zone == BP_L_HAND)
- playsound(src, 'sound/items/tape.ogg',25)
+ playsound(src, /singleton/sound_category/rip_sound,25)
var/obj/item/handcuffs/cable/tape/T = new(user)
if(!T.place_handcuffs(H, user))
user.unEquip(T)
@@ -140,7 +140,7 @@
return // reduce papers around corners issue.
user.drop_from_inventory(src,source_turf)
- playsound(src, 'sound/items/tape.ogg',25)
+ playsound(src, /singleton/sound_category/rip_sound,25)
if(params)
var/list/mouse_control = mouse_safe_xy(params)
diff --git a/code/game/objects/random/random.dm b/code/game/objects/random/random.dm
index 2e1f09326c9..0bc3bc4a683 100644
--- a/code/game/objects/random/random.dm
+++ b/code/game/objects/random/random.dm
@@ -140,7 +140,7 @@
/obj/random/medical
name = "Random Medicine"
desc = "This is a random medical item."
- icon = 'icons/obj/stacks/medical.dmi'
+ icon = 'icons/obj/item/stacks/medical.dmi'
icon_state = "brutepack"
spawn_nothing_percentage = 25
problist = list(
diff --git a/code/game/sound.dm b/code/game/sound.dm
index ac631ae3462..9693452f89b 100644
--- a/code/game/sound.dm
+++ b/code/game/sound.dm
@@ -924,3 +924,18 @@
'sound/machines/sm/accent/delam/32.ogg',
'sound/machines/sm/accent/delam/33.ogg'
)
+
+/singleton/sound_category/rip_sound
+ sounds = list(
+ 'sound/items/rip1.ogg',
+ 'sound/items/rip2.ogg',
+ 'sound/items/rip3.ogg',
+ 'sound/items/rip4.ogg'
+ )
+
+/singleton/sound_category/ointment_sound
+ sounds = list(
+ 'sound/items/ointment1.ogg',
+ 'sound/items/ointment2.ogg',
+ 'sound/items/ointment3.ogg'
+ )
diff --git a/code/modules/materials/material_sheets.dm b/code/modules/materials/material_sheets.dm
index c2f2c1b69cc..107933d5306 100644
--- a/code/modules/materials/material_sheets.dm
+++ b/code/modules/materials/material_sheets.dm
@@ -135,6 +135,7 @@
name = "diamond"
icon_state = "sheet-diamond"
default_type = MATERIAL_DIAMOND
+ icon_has_variants = TRUE
/obj/item/stack/material/diamond/full/Initialize()
. = ..()
@@ -145,6 +146,7 @@
name = "uranium"
icon_state = "sheet-uranium"
default_type = MATERIAL_URANIUM
+ icon_has_variants = TRUE
/obj/item/stack/material/uranium/full/Initialize()
. = ..()
@@ -221,7 +223,7 @@
//Extremely valuable to Research.
/obj/item/stack/material/mhydrogen
name = "metallic hydrogen"
- icon_state = "sheet-mythril"
+ icon_state = "sheet-metalhydrogen"
default_type = MATERIAL_HYDROGEN_METALLIC
/obj/item/stack/material/mhydrogen/full/Initialize()
@@ -306,6 +308,7 @@
name = "wooden plank"
icon_state = "sheet-wood"
default_type = MATERIAL_WOOD
+ icon_has_variants = TRUE
/obj/item/stack/material/wood/full/Initialize()
. = ..()
@@ -340,7 +343,7 @@
update_icon()
/obj/item/stack/material/wood/coloured/bamboo
- color = WOOD_COLOR_PALE2
+ icon_state = "sheet-bamboo"
/obj/item/stack/material/wood/coloured/bamboo/Initialize()
. = ..()
@@ -419,6 +422,7 @@
name = "cardboard"
icon_state = "sheet-card"
default_type = MATERIAL_CARDBOARD
+ icon_has_variants = TRUE
/obj/item/stack/material/cardboard/full/Initialize()
. = ..()
@@ -455,7 +459,7 @@
/obj/item/stack/material/glass/wired
name = "wired glass"
- icon = 'icons/obj/stacks/tiles.dmi'
+ icon = 'icons/obj/item/stacks/tiles.dmi'
icon_state = "glass_wire"
default_type = MATERIAL_GLASS_WIRED
@@ -479,7 +483,7 @@
name = "borosilicate glass"
desc = "This sheet is special platinum-glass alloy designed to withstand large temperatures"
singular_name = "borosilicate glass sheet"
- icon_state = "sheet-phoronglass"
+ icon_state = "sheet-pglass"
item_state = "sheet-pglass"
default_type = MATERIAL_GLASS_PHORON
@@ -492,7 +496,7 @@
name = "reinforced borosilicate glass"
desc = "This sheet is special platinum-glass alloy designed to withstand large temperatures. It is reinforced with few rods."
singular_name = "reinforced borosilicate glass sheet"
- icon_state = "sheet-phoronrglass"
+ icon_state = "sheet-prglass"
item_state = "sheet-prglass"
default_type = MATERIAL_GLASS_REINFORCED_PHORON
@@ -532,4 +536,4 @@
/obj/item/stack/material/graphite/full/Initialize()
. = ..()
amount = max_amount
- update_icon()
\ No newline at end of file
+ update_icon()
diff --git a/code/modules/mining/ore.dm b/code/modules/mining/ore.dm
index d1988611aad..a480d0a810e 100644
--- a/code/modules/mining/ore.dm
+++ b/code/modules/mining/ore.dm
@@ -1,7 +1,7 @@
/obj/item/ore
name = "rock"
- icon = 'icons/obj/mining.dmi'
- icon_state = "ore1"
+ icon = 'icons/obj/item/ore.dmi'
+ icon_state = "ore"
randpixel = 8
w_class = ITEMSIZE_SMALL
throwforce = 10
@@ -32,7 +32,7 @@
/obj/item/ore/coal
name = "raw carbon"
- icon_state = "ore_coal"
+ icon_state = "slag"
origin_tech = list(TECH_MATERIAL = 1)
material = ORE_COAL
@@ -95,11 +95,6 @@
icon_state = "slag"
material = null
-/obj/item/ore/Initialize()
- . = ..()
- if((randpixel_xy()) && icon_state == "ore1")
- icon_state = "ore[pick(1,2,3)]"
-
/obj/item/ore/attackby(obj/item/W, mob/user)
if(istype(W,/obj/item/device/core_sampler))
var/obj/item/device/core_sampler/C = W
diff --git a/html/changelogs/wezzy_newmats.yml b/html/changelogs/wezzy_newmats.yml
new file mode 100644
index 00000000000..ded1da52ebb
--- /dev/null
+++ b/html/changelogs/wezzy_newmats.yml
@@ -0,0 +1,42 @@
+################################
+# Example Changelog File
+#
+# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb.
+#
+# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.)
+# When it is, any changes listed below will disappear.
+#
+# Valid Prefixes:
+# bugfix
+# wip (For works in progress)
+# tweak
+# soundadd
+# sounddel
+# rscadd (general adding of nice things)
+# rscdel (general deleting of nice things)
+# imageadd
+# imagedel
+# maptweak
+# spellcheck (typo fixes)
+# experiment
+# balance
+# admin
+# backend
+# security
+# refactor
+#################################
+
+# Your name.
+author: Wowzewow(Wezzy)
+
+# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again.
+delete-after: True
+
+# Any changes you've made. See valid prefix list above.
+# INDENT WITH TWO SPACES. NOT TABS. SPACES.
+# SCREW THIS UP AND IT WON'T WORK.
+# Also, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries.
+# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog.
+changes:
+ - imageadd: "Adds new material and medical stack sprites."
+ - soundadd: "Adjusts application sounds for medical stacks."
diff --git a/icons/obj/item/ore.dmi b/icons/obj/item/ore.dmi
new file mode 100644
index 00000000000..3e45d4c1335
Binary files /dev/null and b/icons/obj/item/ore.dmi differ
diff --git a/icons/obj/item/stacks/materials.dmi b/icons/obj/item/stacks/materials.dmi
new file mode 100644
index 00000000000..657dbd752db
Binary files /dev/null and b/icons/obj/item/stacks/materials.dmi differ
diff --git a/icons/obj/item/stacks/medical.dmi b/icons/obj/item/stacks/medical.dmi
new file mode 100644
index 00000000000..c4059dd6e2f
Binary files /dev/null and b/icons/obj/item/stacks/medical.dmi differ
diff --git a/icons/obj/item/stacks/nanopaste.dmi b/icons/obj/item/stacks/nanopaste.dmi
new file mode 100644
index 00000000000..1ed5a8c6a9f
Binary files /dev/null and b/icons/obj/item/stacks/nanopaste.dmi differ
diff --git a/icons/obj/stacks/tiles.dmi b/icons/obj/item/stacks/tiles.dmi
similarity index 100%
rename from icons/obj/stacks/tiles.dmi
rename to icons/obj/item/stacks/tiles.dmi
diff --git a/icons/obj/stacks/wrap.dmi b/icons/obj/item/stacks/wrap.dmi
similarity index 100%
rename from icons/obj/stacks/wrap.dmi
rename to icons/obj/item/stacks/wrap.dmi
diff --git a/icons/obj/mining.dmi b/icons/obj/mining.dmi
index 2b4976a44b3..5a39b4ce7bd 100644
Binary files a/icons/obj/mining.dmi and b/icons/obj/mining.dmi differ
diff --git a/icons/obj/stacks/materials.dmi b/icons/obj/stacks/materials.dmi
deleted file mode 100644
index e0483c435f7..00000000000
Binary files a/icons/obj/stacks/materials.dmi and /dev/null differ
diff --git a/icons/obj/stacks/medical.dmi b/icons/obj/stacks/medical.dmi
deleted file mode 100644
index fcfc7c7d6ef..00000000000
Binary files a/icons/obj/stacks/medical.dmi and /dev/null differ
diff --git a/icons/obj/stacks/nanopaste.dmi b/icons/obj/stacks/nanopaste.dmi
deleted file mode 100644
index f41264e3a2b..00000000000
Binary files a/icons/obj/stacks/nanopaste.dmi and /dev/null differ
diff --git a/sound/items/advkit.ogg b/sound/items/advkit.ogg
new file mode 100644
index 00000000000..80e204dcbf9
Binary files /dev/null and b/sound/items/advkit.ogg differ
diff --git a/sound/items/ointment1.ogg b/sound/items/ointment1.ogg
new file mode 100644
index 00000000000..0d8f049de1f
Binary files /dev/null and b/sound/items/ointment1.ogg differ
diff --git a/sound/items/ointment2.ogg b/sound/items/ointment2.ogg
new file mode 100644
index 00000000000..66517f4dcc4
Binary files /dev/null and b/sound/items/ointment2.ogg differ
diff --git a/sound/items/ointment3.ogg b/sound/items/ointment3.ogg
new file mode 100644
index 00000000000..c5d9e90cc07
Binary files /dev/null and b/sound/items/ointment3.ogg differ
diff --git a/sound/items/rip3.ogg b/sound/items/rip3.ogg
new file mode 100644
index 00000000000..82d93582923
Binary files /dev/null and b/sound/items/rip3.ogg differ
diff --git a/sound/items/rip4.ogg b/sound/items/rip4.ogg
new file mode 100644
index 00000000000..32c594b688d
Binary files /dev/null and b/sound/items/rip4.ogg differ
diff --git a/sound/items/tape.ogg b/sound/items/tape.ogg
deleted file mode 100644
index 7a7047e3246..00000000000
Binary files a/sound/items/tape.ogg and /dev/null differ