Restore many missing inhand sprites for items, add/port others (#21831)

Many, many, many items have inhand sprites in their .dmis but for
whatever reasons do not display them in-game. This PR:

1. Updates many item definitions to point to their already-existing
inhands correctly. This consists largely of held tools, but also gas
tanks and jetpacks mounted in the suit storage slot.

2. Adds a few codersprites made by me for objects with either missing
inhands or poorly matching mishands (IE, the tape recorder, which has a
black case, reused the white inhand sprites of the health analyzer). The
new sprites are modified or recolored variations of other inhand sprites
from our repo, except for circuitboards which are new.
<img width="444" height="400" alt="image"
src="https://github.com/user-attachments/assets/7f107b9a-fe24-4e31-8f16-4d34768ee117"
/>


3. Adds inhand sprites for Inflatables and Inflatable Boxes made by
Tomixcomics.
<img width="424" height="101" alt="image"
src="https://github.com/user-attachments/assets/434107c4-8577-49a2-a58e-d6b014c03933"
/>

4. Ports inhand sprites for the Hydraulic Rescue Tool from tg's Jaws of
Life.
<img width="224" height="94" alt="Screenshot 2026-02-07 172931"
src="https://github.com/user-attachments/assets/070c7956-f6a8-4fb5-870f-10c64afcc8b3"
/>

5. Some additional cleanup while in the area. The 'analyzer' has been
renamed the 'gas analyzer' to be consistent with the other analyzer
objects, standardized icon_state naming conventions where I saw
oddballs, updated code docs to use DMDocs when in the area, etc.

### Asset Licenses
The following assets that **have not** been created by myself are
included in this PR:

| Path | Original Author | License |
| --- | --- | --- |
| icons/obj/item/hydraulic_rescue_tool.dmi | [SomeAngryMiner (bee
station)](https://github.com/BeeStation/BeeStation-Hornet/pull/2487),
[maxymax
(/tg/station)](https://github.com/tgstation/tgstation/pull/58616) |
CC-BY-SA |
| icons/obj/item/inflatables.dmi |
[Tomixcomics](https://github.com/tomixcomics) | CC-BY-SA |
This commit is contained in:
Batrachophreno
2026-02-17 17:51:22 +00:00
committed by GitHub
parent a1e55d0958
commit 8111a8489b
111 changed files with 246 additions and 116 deletions
+2 -2
View File
@@ -127,7 +127,7 @@
if(!underlays.len)
underlays += image(firstaid_item.icon, firstaid_item.icon_state)
var/matrix/M = matrix()
var/image/ha_image = image('icons/obj/item/healthanalyzer.dmi', "health")
var/image/ha_image = image('icons/obj/item/scanner.dmi', "healthanalyzer")
M.Translate(5, 0)
ha_image.transform = M
underlays += ha_image
@@ -376,7 +376,7 @@
to_chat(user, SPAN_NOTICE("You add the health sensor to [src]."))
name = "first-aid/robot arm/health analyzer assembly"
var/matrix/M = matrix()
var/image/ha_image = image('icons/obj/item/healthanalyzer.dmi', "health")
var/image/ha_image = image('icons/obj/item/scanner.dmi', "health")
M.Translate(5, 0)
ha_image.transform = M
underlays += ha_image
@@ -271,9 +271,11 @@ There are several things that need to be remembered:
if(update_icons)
update_icon()
//Overlays for the worn overlay so you can overlay while you overlay
//eg: ammo counters, primed grenade flashing, etc.
//"icon_file" is used automatically for inhands etc. to make sure it gets the correct inhand file
/**
* Overlays for the worn overlay so you can overlay while you overlay
* eg: ammo counters, primed grenade flashing, etc.
* "icon_file" is used automatically for inhands etc. to make sure it gets the correct inhand file
*/
/obj/item/proc/worn_overlays(icon_file)
. = list()
var/mutable_appearance/M = null
@@ -320,7 +322,7 @@ There are several things that need to be remembered:
return WORN_GLOVES
return ""
//BASE MOB SPRITE
/// BASE MOB SPRITE
/mob/living/carbon/human/proc/update_body(var/update_icons=1, var/force_base_icon = FALSE)
if (QDELETED(src))
return
@@ -436,8 +438,10 @@ There are several things that need to be remembered:
if(update_icons)
update_icon()
// This proc generates & returns an icon representing a human's hair, using a cached icon from SSicon_cache if possible.
// If `hair_is_visible` is FALSE, only facial hair will be drawn.
/**
* This proc generates & returns an icon representing a human's hair, using a cached icon from SSicon_cache if possible.
* If `hair_is_visible` is FALSE, only facial hair will be drawn.
*/
/mob/living/carbon/human/proc/generate_hair_icon(hair_is_visible = TRUE)
var/cache_key = "[f_style ? "[f_style][r_facial][g_facial][b_facial]" : "nofacial"]_[(h_style && hair_is_visible) ? "[h_style][r_hair][g_hair][b_hair]" : "nohair"]_[(g_style && g_style != "None" && hair_is_visible) ? "[g_style][r_grad][g_grad][b_grad]" : "nograd"]"
@@ -481,7 +485,7 @@ There are several things that need to be remembered:
return face_standing
//HAIR OVERLAY
/// HAIR OVERLAY
/mob/living/carbon/human/proc/update_hair(var/update_icons=1)
if (QDELETED(src))
return
@@ -560,7 +564,7 @@ There are several things that need to be remembered:
update_icon()
/* --------------------------------------- */
//For legacy support.
/// For legacy support.
/mob/living/carbon/human/regenerate_icons()
..()
@@ -3,9 +3,11 @@
//
/obj/item/robotanalyzer
name = "cyborg analyzer"
icon = 'icons/obj/item/robotanalyzer.dmi'
icon = 'icons/obj/item/scanner.dmi'
icon_state = "robotanalyzer"
item_state = "analyzer"
// Reuses the basic health analyzer inhands.
item_state = "healthanalyzer"
contained_sprite = TRUE
desc = "A hand-held scanner able to diagnose robotic injuries."
obj_flags = OBJ_FLAG_CONDUCTABLE
slot_flags = SLOT_BELT
@@ -135,9 +137,6 @@
/obj/item/robotanalyzer/augment
name = "retractable cyborg analyzer"
desc = "An scanner implanted directly into the hand, popping through the finger. This scanner can diagnose robotic injuries."
icon = 'icons/obj/item/robotanalyzer.dmi'
icon_state = "robotanalyzer"
item_state = "analyzer"
slot_flags = null
w_class = WEIGHT_CLASS_HUGE