mirror of
https://github.com/Aurorastation/Aurora.3.git
synced 2026-08-24 13:30:42 +01:00
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:
@@ -1,4 +1,4 @@
|
||||
// Used to resolve throwing vendors without going directly into wiring.
|
||||
/// Used to resolve throwing vendors without going directly into wiring.
|
||||
/obj/item/debugger
|
||||
name = "debugger"
|
||||
desc = "Used to debug electronic equipment, debuggers come with a retractable data cable that can be plugged into most machines."
|
||||
@@ -15,6 +15,8 @@
|
||||
matter = list(MATERIAL_PLASTIC = 50, DEFAULT_WALL_MATERIAL = 50, MATERIAL_GLASS = 20)
|
||||
origin_tech = list(TECH_MAGNET = 1, TECH_ENGINEERING = 1)
|
||||
|
||||
contained_sprite = TRUE
|
||||
|
||||
/obj/item/debugger/mechanics_hints(mob/user, distance, is_adjacent)
|
||||
. += ..()
|
||||
. += "The debugger can be used on vending machines and APCs to identify and resolve any viral infections."
|
||||
|
||||
@@ -1,9 +1,10 @@
|
||||
/obj/item/geiger
|
||||
name = "geiger counter"
|
||||
desc = "A handheld device used for detecting and measuring radiation in an area."
|
||||
icon = 'icons/obj/geiger_counter.dmi'
|
||||
icon = 'icons/obj/item/scanner.dmi'
|
||||
icon_state = "geiger_off"
|
||||
item_state = "multitool"
|
||||
item_state = "geiger"
|
||||
contained_sprite = TRUE
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
action_button_name = "Toggle geiger counter"
|
||||
matter = list(MATERIAL_PLASTIC = 100, DEFAULT_WALL_MATERIAL = 100, MATERIAL_GLASS = 50)
|
||||
@@ -58,6 +59,7 @@
|
||||
update_sound(0)
|
||||
return 1
|
||||
|
||||
|
||||
if(!sound_token) update_sound(1)
|
||||
|
||||
switch(radiation_count)
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
icon = 'icons/obj/item/multitool.dmi'
|
||||
icon_state = "multitool"
|
||||
item_state = "multitool"
|
||||
item_icons = null
|
||||
contained_sprite = TRUE
|
||||
obj_flags = OBJ_FLAG_CONDUCTABLE
|
||||
force = 11
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
|
||||
@@ -10,9 +10,10 @@ BREATH ANALYZER
|
||||
/obj/item/healthanalyzer
|
||||
name = "health analyzer"
|
||||
desc = "A hand-held body scanner able to distinguish vital signs of the subject."
|
||||
icon = 'icons/obj/item/healthanalyzer.dmi'
|
||||
icon_state = "health"
|
||||
item_state = "analyzer"
|
||||
icon = 'icons/obj/item/scanner.dmi'
|
||||
icon_state = "healthanalyzer"
|
||||
item_state = "healthanalyzer"
|
||||
contained_sprite = TRUE
|
||||
obj_flags = OBJ_FLAG_CONDUCTABLE
|
||||
slot_flags = SLOT_BELT
|
||||
throwforce = 3
|
||||
@@ -373,11 +374,12 @@ BREATH ANALYZER
|
||||
to_chat(usr, "The scanner no longer shows limb damage.")
|
||||
|
||||
/obj/item/analyzer
|
||||
name = "analyzer"
|
||||
name = "gas analyzer"
|
||||
desc = "A hand-held environmental scanner which reports current gas levels."
|
||||
icon = 'icons/obj/item/air_analyzer.dmi'
|
||||
icon_state = "analyzer"
|
||||
item_state = "analyzer"
|
||||
icon = 'icons/obj/item/scanner.dmi'
|
||||
icon_state = "airanalyzer"
|
||||
item_state = "airanalyzer"
|
||||
contained_sprite = TRUE
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
obj_flags = OBJ_FLAG_CONDUCTABLE
|
||||
slot_flags = SLOT_BELT
|
||||
@@ -393,7 +395,7 @@ BREATH ANALYZER
|
||||
if(!user) return
|
||||
var/air = user.return_air()
|
||||
if (!air) return
|
||||
|
||||
flick("[icon_state]-scan", src)
|
||||
return atmosanalyzer_scan(src, air, user)
|
||||
|
||||
/obj/item/analyzer/attack_self(mob/user as mob)
|
||||
@@ -410,9 +412,11 @@ BREATH ANALYZER
|
||||
/obj/item/mass_spectrometer
|
||||
name = "mass spectrometer"
|
||||
desc = "A hand-held mass spectrometer which identifies trace chemicals in a blood sample."
|
||||
icon = 'icons/obj/item/mass_spectrometer.dmi'
|
||||
icon = 'icons/obj/item/scanner.dmi'
|
||||
icon_state = "spectrometer"
|
||||
item_state = "spectrometer"
|
||||
// Reuses the basic health analyzer inhands.
|
||||
item_state = "healthanalyzer"
|
||||
contained_sprite = TRUE
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
atom_flags = ATOM_FLAG_OPEN_CONTAINER
|
||||
obj_flags = OBJ_FLAG_CONDUCTABLE
|
||||
@@ -472,8 +476,7 @@ BREATH ANALYZER
|
||||
|
||||
/obj/item/mass_spectrometer/adv
|
||||
name = "advanced mass spectrometer"
|
||||
icon_state = "adv_spectrometer"
|
||||
item_state = "adv_spectrometer"
|
||||
icon_state = "spectrometer_adv"
|
||||
details = TRUE
|
||||
origin_tech = list(TECH_MAGNET = 4, TECH_BIO = 2)
|
||||
|
||||
@@ -486,9 +489,11 @@ BREATH ANALYZER
|
||||
/obj/item/reagent_scanner
|
||||
name = "reagent scanner"
|
||||
desc = "A hand-held reagent scanner which identifies chemical agents."
|
||||
icon = 'icons/obj/item/reagent_scanner.dmi'
|
||||
icon = 'icons/obj/item/scanner.dmi'
|
||||
icon_state = "reagent_scanner"
|
||||
item_state = "analyzer"
|
||||
// Reuses the basic health analyzer inhands.
|
||||
item_state = "healthanalyzer"
|
||||
contained_sprite = TRUE
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
obj_flags = OBJ_FLAG_CONDUCTABLE
|
||||
slot_flags = SLOT_BELT
|
||||
@@ -521,16 +526,18 @@ BREATH ANALYZER
|
||||
|
||||
/obj/item/reagent_scanner/adv
|
||||
name = "advanced reagent scanner"
|
||||
icon_state = "adv_reagent_scanner"
|
||||
item_state = "analyzer"
|
||||
icon_state = "reagent_scanner_adv"
|
||||
// Reuses the advanced health analyzer inhands.
|
||||
item_state = "healthanalyzer_adv"
|
||||
details = 1
|
||||
origin_tech = list(TECH_MAGNET = 4, TECH_BIO = 2)
|
||||
|
||||
/obj/item/slime_scanner
|
||||
name = "slime scanner"
|
||||
icon = 'icons/obj/item/slime_scanner.dmi'
|
||||
icon = 'icons/obj/item/scanner.dmi'
|
||||
icon_state = "slime_scanner"
|
||||
item_state = "analyzer"
|
||||
item_state = "slime_scanner"
|
||||
contained_sprite = TRUE
|
||||
origin_tech = list(TECH_BIO = 1)
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
obj_flags = OBJ_FLAG_CONDUCTABLE
|
||||
@@ -574,8 +581,10 @@ BREATH ANALYZER
|
||||
/obj/item/price_scanner
|
||||
name = "price scanner"
|
||||
desc = "Using an up-to-date database of various costs and prices, this device estimates the market price of an item up to 0.001% accuracy."
|
||||
icon = 'icons/obj/item/price_scanner.dmi'
|
||||
icon = 'icons/obj/item/scanner.dmi'
|
||||
icon_state = "price_scanner"
|
||||
item_state = "price_scanner"
|
||||
contained_sprite = TRUE
|
||||
item_flags = ITEM_FLAG_NO_BLUDGEON
|
||||
slot_flags = SLOT_BELT
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
@@ -595,9 +604,11 @@ BREATH ANALYZER
|
||||
/obj/item/breath_analyzer
|
||||
name = "breath analyzer"
|
||||
desc = "A hand-held breath analyzer that provides a robust amount of information about the subject's respiratory system."
|
||||
icon = 'icons/obj/item/breath_analyzer.dmi'
|
||||
icon = 'icons/obj/item/scanner.dmi'
|
||||
icon_state = "breath_analyzer"
|
||||
item_state = "analyzer"
|
||||
// Reuses the basic health analyzer inhands.
|
||||
item_state = "healthanalyzer"
|
||||
contained_sprite = TRUE
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
obj_flags = OBJ_FLAG_CONDUCTABLE
|
||||
slot_flags = SLOT_BELT
|
||||
@@ -705,9 +716,10 @@ BREATH ANALYZER
|
||||
/obj/item/advanced_healthanalyzer
|
||||
name = "advanced health analyzer"
|
||||
desc = "An expensive and varied-use health analyzer that prints full-body scans after a short scanning delay."
|
||||
icon = 'icons/obj/item/advanced_healthanalyzer.dmi'
|
||||
icon_state = "health_adv"
|
||||
item_state = "analyzer"
|
||||
icon = 'icons/obj/item/scanner.dmi'
|
||||
icon_state = "healthanalyzer_adv"
|
||||
item_state = "healthanalyzer_adv"
|
||||
contained_sprite = TRUE
|
||||
slot_flags = SLOT_BELT
|
||||
w_class = WEIGHT_CLASS_NORMAL
|
||||
origin_tech = list(TECH_MAGNET = 2, TECH_BIO = 3)
|
||||
|
||||
@@ -65,7 +65,7 @@
|
||||
/obj/item/spy_monitor
|
||||
name = "\improper PDA"
|
||||
desc = "A portable microcomputer by Thinktronic Systems, LTD. Functionality determined by a preprogrammed ROM cartridge."
|
||||
icon = 'icons/obj/pda.dmi'
|
||||
icon = 'icons/obj/modular_computers/pda.dmi'
|
||||
icon_state = "pda"
|
||||
item_state = "electronic"
|
||||
|
||||
|
||||
@@ -3,10 +3,10 @@
|
||||
/obj/item/t_scanner
|
||||
name = "\improper T-ray scanner"
|
||||
desc = "A terahertz-ray emitter and scanner used to detect underfloor objects such as cables and pipes."
|
||||
icon = 'icons/obj/item/t_scanner.dmi'
|
||||
icon = 'icons/obj/item/scanner.dmi'
|
||||
icon_state = "t-ray0"
|
||||
item_state = "t-ray"
|
||||
|
||||
contained_sprite = TRUE
|
||||
slot_flags = SLOT_BELT
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
matter = list(MATERIAL_PLASTIC = 100, MATERIAL_ALUMINIUM = 50)
|
||||
@@ -16,10 +16,12 @@
|
||||
var/scan_range = 3
|
||||
|
||||
var/on = 0
|
||||
var/list/active_scanned = list() //assoc list of objects being scanned, mapped to their overlay
|
||||
var/client/user_client //since making sure overlays are properly added and removed is pretty important, so we track the current user explicitly
|
||||
|
||||
var/global/list/overlay_cache = list() //cache recent overlays
|
||||
/// Assoc list of objects being scanned, mapped to their overlay.
|
||||
var/list/active_scanned = list()
|
||||
/// Since making sure overlays are properly added and removed is pretty important, so we track the current user explicitly.
|
||||
var/client/user_client
|
||||
/// Cache recent overlays.
|
||||
var/global/list/overlay_cache = list()
|
||||
|
||||
/obj/item/t_scanner/Destroy()
|
||||
. = ..()
|
||||
@@ -53,7 +55,7 @@
|
||||
set_user_client(null)
|
||||
update_icon()
|
||||
|
||||
//If reset is set, then assume the client has none of our overlays, otherwise we only send new overlays.
|
||||
/// If reset is set, then assume the client has none of our overlays, otherwise we only send new overlays.
|
||||
/obj/item/t_scanner/process()
|
||||
if(!on)
|
||||
return
|
||||
@@ -87,7 +89,7 @@
|
||||
user_client.images -= active_scanned[O]
|
||||
active_scanned -= O
|
||||
|
||||
//creates a new overlay for a scanned object
|
||||
/// Creates a new overlay for a scanned object
|
||||
/obj/item/t_scanner/proc/get_overlay(obj/scanned)
|
||||
//Use a cache so we don't create a whole bunch of new images just because someone's walking back and forth in a room.
|
||||
//Also means that images are reused if multiple people are using t-rays to look at the same objects.
|
||||
|
||||
@@ -63,6 +63,10 @@
|
||||
desc = "A hydraulic rescue tool that functions like a crowbar by applying strong amounts of hydraulic pressure to force open different things. Also known as jaws of life."
|
||||
icon = 'icons/obj/item/hydraulic_rescue_tool.dmi'
|
||||
icon_state = "jawspry"
|
||||
item_state = "jawspry"
|
||||
contained_sprite = TRUE
|
||||
// Really do not want to deal with reconciling sprite implementations between parent and child for now.
|
||||
item_icons = null
|
||||
force = 15
|
||||
throwforce = 1
|
||||
w_class = WEIGHT_CLASS_NORMAL
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
/obj/item/autopsy_scanner
|
||||
name = "autopsy scanner"
|
||||
desc = "Extracts information on wounds."
|
||||
icon = 'icons/obj/item/autopsy_scanner.dmi'
|
||||
icon = 'icons/obj/item/scanner.dmi'
|
||||
icon_state = "autopsy"
|
||||
item_state = "autopsy"
|
||||
contained_sprite = TRUE
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
icon = 'icons/obj/module.dmi'
|
||||
icon_state = "id_mod"
|
||||
item_state = "electronic"
|
||||
contained_sprite = TRUE
|
||||
origin_tech = list(TECH_DATA = 2)
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
obj_flags = OBJ_FLAG_CONDUCTABLE
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/obj/item/ipc_tag_scanner
|
||||
name = "IPC tag scanner"
|
||||
desc = "A hand-held IPC tag scanner, that, when used to analyze the info of an IPC, will output its tag status and information."
|
||||
icon = 'icons/obj/ipc_utilities.dmi'
|
||||
icon = 'icons/obj/item/scanner.dmi'
|
||||
icon_state = "ipc_tag_scanner"
|
||||
item_state = "ipc_tag_scanner"
|
||||
contained_sprite = TRUE
|
||||
|
||||
@@ -1524,7 +1524,8 @@
|
||||
name = "tau ceti armed forces pamphlet"
|
||||
desc = "A simple pamphlet containing information about the Tau Ceti Armed Forces."
|
||||
icon_state = "tcfl_pamphlet"
|
||||
item_state = "paper"
|
||||
item_state = "tcfl_pamphlet"
|
||||
contained_sprite = TRUE
|
||||
title = "Tau Ceti Armed Forces pamphlet"
|
||||
author = "Tau Ceti Armed Forces recruitment center"
|
||||
pickup_sound = 'sound/items/drop/paper.ogg'
|
||||
|
||||
@@ -273,7 +273,7 @@ Frequency:
|
||||
/obj/item/closet_teleporter
|
||||
name = "closet teleporter"
|
||||
desc = "A device that allows a user to connect two closets into a bluespace network."
|
||||
icon = 'icons/obj/modular_components.dmi'
|
||||
icon = 'icons/obj/modular_computers/modular_components.dmi'
|
||||
icon_state = "cpu_normal_photonic"
|
||||
obj_flags = OBJ_FLAG_CONDUCTABLE
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
|
||||
@@ -15,8 +15,8 @@
|
||||
/obj/random/technology_scanner
|
||||
name = "random scanner"
|
||||
desc = "This is a random technology scanner."
|
||||
icon = 'icons/obj/item/air_analyzer.dmi'
|
||||
icon_state = "analyzer"
|
||||
icon = 'icons/obj/item/scanner.dmi'
|
||||
icon_state = "airanalyzer"
|
||||
problist = list(
|
||||
/obj/item/t_scanner = 5,
|
||||
/obj/item/radio = 2,
|
||||
|
||||
@@ -842,8 +842,9 @@
|
||||
/obj/item/cratescanner
|
||||
name = "crate contents scanner"
|
||||
desc = "A handheld device used to scan and print a manifest of a container's contents. Does not work on locked crates, for privacy reasons."
|
||||
icon = 'icons/obj/item/cratescanner.dmi'
|
||||
icon_state = "cratescanner"
|
||||
icon = 'icons/obj/item/scanner.dmi'
|
||||
icon_state = "crate_scanner"
|
||||
item_state = "crate_scanner"
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 250, MATERIAL_GLASS = 140)
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
obj_flags = OBJ_FLAG_CONDUCTABLE
|
||||
|
||||
@@ -5,6 +5,8 @@
|
||||
name = "inflatable"
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
icon = 'icons/obj/item/inflatables.dmi'
|
||||
item_state = "folded"
|
||||
contained_sprite = TRUE
|
||||
var/deploy_path = null
|
||||
|
||||
/obj/item/inflatable/mechanics_hints(mob/user, distance, is_adjacent)
|
||||
@@ -334,6 +336,8 @@
|
||||
drop_sound = 'sound/items/drop/backpack.ogg'
|
||||
pickup_sound = 'sound/items/pickup/backpack.ogg'
|
||||
|
||||
contained_sprite = TRUE
|
||||
|
||||
/obj/item/storage/bag/inflatable/emergency
|
||||
name = "emergency inflatable barrier box"
|
||||
desc = "Contains inflatable walls and doors. This box has emergency labelling on it and outlines that there's only enough inflatables within to secure a small area."
|
||||
|
||||
Reference in New Issue
Block a user