Files
Batrachophreno 8111a8489b 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 |
2026-02-17 17:51:22 +00:00

313 lines
12 KiB
Plaintext

/obj/random/tool
name = "random tool"
desc = "This is a random tool"
icon_state = "tool"
spawnlist = list(
/obj/item/screwdriver,
/obj/item/wirecutters,
/obj/item/weldingtool,
/obj/item/crowbar,
/obj/item/wrench,
/obj/item/hammer,
/obj/item/flashlight
)
/obj/random/technology_scanner
name = "random scanner"
desc = "This is a random technology scanner."
icon = 'icons/obj/item/scanner.dmi'
icon_state = "airanalyzer"
problist = list(
/obj/item/t_scanner = 5,
/obj/item/radio = 2,
/obj/item/analyzer = 5
)
/obj/random/powercell
name = "random powercell"
desc = "This is a random powercell."
icon_state = "cell"
problist = list(
/obj/item/cell = 40,
/obj/item/cell/high = 40,
/obj/item/cell/crap = 10,
/obj/item/cell/mecha = 10,
/obj/item/cell/super = 9,
/obj/item/cell/mecha/nuclear = 5,
/obj/item/cell/hyper = 1
)
/obj/random/bomb_supply
name = "bomb supply"
desc = "This is a random bomb supply."
icon = 'icons/obj/assemblies/new_assemblies.dmi'
icon_state = "signaller"
problist = list(
/obj/item/assembly/igniter = 2,
/obj/item/assembly/prox_sensor = 2,
/obj/item/assembly/signaler = 2,
/obj/item/multitool = 1,
/obj/item/transfer_valve = 0.5
)
/obj/random/toolbox
name = "random toolbox"
desc = "This is a random toolbox."
icon_state = "toolbox"
spawnlist = list(
/obj/item/storage/toolbox/mechanical = 3,
/obj/item/storage/toolbox/electrical = 2,
/obj/item/storage/toolbox/emergency = 1
)
/obj/random/tech_supply
name = "random tech supply"
desc = "This is a random piece of technology supplies."
icon_state = "tech_supply"
problist = list(
/obj/random/powercell = 3,
/obj/random/technology_scanner = 2,
/obj/item/stack/packageWrap = 1,
/obj/random/bomb_supply = 2,
/obj/item/extinguisher = 1,
/obj/item/clothing/gloves/yellow/budget = 1,
/obj/item/stack/cable_coil = 3,
/obj/random/toolbox = 2,
/obj/item/storage/belt/utility = 2,
/obj/random/tool = 5,
/obj/item/tape_roll = 2
)
/// Spawns a random AI lawboard with 'evil' law sets
/obj/random/bad_ai
name = "random evil AI module"
desc = "Contains a random evil AI module."
icon = 'icons/obj/module.dmi'
icon_state = "std_mod"
spawnlist = list(
/obj/item/aiModule/antimov = 0.5,
/obj/item/aiModule/asimov = 1,
/obj/item/aiModule/purge = 1,
/obj/item/aiModule/robocop = 0.5,
/obj/item/aiModule/tyrant = 0.5,
/obj/item/aiModule/paladin = 0.5,
/obj/item/aiModule/hadiist = 0.2,
/obj/item/aiModule/freeform = 1,
/obj/item/aiModule/oneHuman = 0.5,
/obj/item/aiModule/oxygen = 1
)
/obj/random/rig_module
name = "random rig module"
desc = "Contains a random rig module worthy of vault protection."
icon = 'icons/obj/rig_modules.dmi'
icon_state = "actuators"
spawnlist = list(
/obj/item/rig_module/actuators/combat = 1,
/obj/item/rig_module/chem_dispenser/combat = 1,
/obj/item/rig_module/chem_dispenser/injector = 1,
/obj/item/rig_module/device/emag_hand = 1,
/obj/item/rig_module/device/rfd_c = 1,
/obj/item/rig_module/electrowarfare_suite = 0.5,
/obj/item/rig_module/emp_shielding = 0.5,
/obj/item/rig_module/fabricator/energy_net = 1,
/obj/item/rig_module/fabricator = 0.5,
/obj/item/rig_module/grenade_launcher = 0.5,
/obj/item/rig_module/maneuvering_jets = 0.5,
/obj/item/rig_module/mounted/egun = 1,
/obj/item/rig_module/mounted/smg = 0.5,
/obj/item/rig_module/vision/multi = 0.5
)
/obj/random/voidsuit/freebooter
name = "random freebooter voidsuit"
suitmap = list(
/obj/item/clothing/suit/space/void/engineering = /obj/item/clothing/head/helmet/space/void/engineering,
/obj/item/clothing/suit/space/void/mining = /obj/item/clothing/head/helmet/space/void/mining,
/obj/item/clothing/suit/space/void/merc = /obj/item/clothing/head/helmet/space/void/merc,
/obj/item/clothing/suit/space/void/freelancer = /obj/item/clothing/head/helmet/space/void/freelancer,
/obj/item/rig/industrial,
/obj/item/rig/eva,
/obj/item/rig/hazard,
/obj/item/clothing/suit/space/syndicate/black/red = /obj/item/clothing/head/helmet/space/syndicate/black/red,
/obj/item/clothing/suit/space/syndicate/black = /obj/item/clothing/head/helmet/space/syndicate/black
)
problist = list(
/obj/item/clothing/suit/space/void/engineering = 3,
/obj/item/clothing/suit/space/void/mining = 3,
/obj/item/clothing/suit/space/void/merc = 1,
/obj/item/clothing/suit/space/void/freelancer = 1,
/obj/item/rig/industrial = 2,
/obj/item/rig/hazard = 1,
/obj/item/rig/eva = 2,
/obj/item/clothing/suit/space/syndicate/black = 1,
/obj/item/clothing/suit/space/syndicate/black/red = 1
)
has_postspawn = TRUE
/obj/random/voidsuit
name = "random voidsuit"
var/damaged = 0
var/list/suitmap = list(
/obj/item/clothing/suit/space/void = /obj/item/clothing/head/helmet/space/void,
/obj/item/clothing/suit/space/void/engineering = /obj/item/clothing/head/helmet/space/void/engineering,
/obj/item/clothing/suit/space/void/mining = /obj/item/clothing/head/helmet/space/void/mining,
/obj/item/clothing/suit/space/void/medical = /obj/item/clothing/head/helmet/space/void/medical,
/obj/item/clothing/suit/space/void/security = /obj/item/clothing/head/helmet/space/void/security,
/obj/item/clothing/suit/space/void/atmos = /obj/item/clothing/head/helmet/space/void/atmos,
/obj/item/clothing/suit/space/void/merc = /obj/item/clothing/head/helmet/space/void/merc,
/obj/item/clothing/suit/space/void/captain = /obj/item/clothing/head/helmet/space/void/captain,
/obj/item/clothing/suit/space/void/cruiser = /obj/item/clothing/head/helmet/space/void/cruiser,
/obj/item/clothing/suit/space/void/coalition = /obj/item/clothing/head/helmet/space/void/coalition,
/obj/item/clothing/suit/space/void/hos = /obj/item/clothing/head/helmet/space/void/hos,
/obj/item/clothing/suit/space/void/lancer = /obj/item/clothing/head/helmet/space/void/lancer,
/obj/item/clothing/suit/space/void/sci = /obj/item/clothing/head/helmet/space/void/sci,
/obj/item/clothing/suit/space/void/sol = /obj/item/clothing/head/helmet/space/void/sol,
/obj/item/clothing/suit/space/void/hephaestus = /obj/item/clothing/head/helmet/space/void/hephaestus,
/obj/item/clothing/suit/space/void/zenghu = /obj/item/clothing/head/helmet/space/void/zenghu,
/obj/item/clothing/suit/space/void/einstein = /obj/item/clothing/head/helmet/space/void/einstein,
/obj/item/clothing/suit/space/void/zavodskoi = /obj/item/clothing/head/helmet/space/void/zavodskoi
)
problist = list(
/obj/item/clothing/suit/space/void = 2,
/obj/item/clothing/suit/space/void/engineering = 2,
/obj/item/clothing/suit/space/void/mining = 2,
/obj/item/clothing/suit/space/void/medical = 2.3,
/obj/item/clothing/suit/space/void/security = 1,
/obj/item/clothing/suit/space/void/atmos = 1.5,
/obj/item/clothing/suit/space/void/merc = 0.5,
/obj/item/clothing/suit/space/void/captain = 0.3,
/obj/item/clothing/suit/space/void/cruiser = 0.5,
/obj/item/clothing/suit/space/void/coalition = 1,
/obj/item/clothing/suit/space/void/hos = 0.3,
/obj/item/clothing/suit/space/void/lancer = 0.3,
/obj/item/clothing/suit/space/void/sci = 2,
/obj/item/clothing/suit/space/void/sol = 0.5,
/obj/item/clothing/suit/space/void/zavodskoi = 0.5,
/obj/item/clothing/suit/space/void/einstein = 0.5,
/obj/item/clothing/suit/space/void/hephaestus = 0.5,
/obj/item/clothing/suit/space/void/zenghu = 0.5
)
has_postspawn = TRUE
/obj/random/voidsuit/no_nanotrasen
suitmap = list(
/obj/item/clothing/suit/space/void = /obj/item/clothing/head/helmet/space/void,
/obj/item/clothing/suit/space/void/merc = /obj/item/clothing/head/helmet/space/void/merc,
/obj/item/clothing/suit/space/void/cruiser = /obj/item/clothing/head/helmet/space/void/cruiser,
/obj/item/clothing/suit/space/void/coalition = /obj/item/clothing/head/helmet/space/void/coalition,
/obj/item/clothing/suit/space/void/lancer = /obj/item/clothing/head/helmet/space/void/lancer,
/obj/item/clothing/suit/space/void/sol = /obj/item/clothing/head/helmet/space/void/sol,
/obj/item/clothing/suit/space/void/hephaestus = /obj/item/clothing/head/helmet/space/void/hephaestus,
/obj/item/clothing/suit/space/void/zenghu = /obj/item/clothing/head/helmet/space/void/zenghu,
/obj/item/clothing/suit/space/void/einstein = /obj/item/clothing/head/helmet/space/void/einstein,
/obj/item/clothing/suit/space/void/zavodskoi = /obj/item/clothing/head/helmet/space/void/zavodskoi
)
problist = list(
/obj/item/clothing/suit/space/void = 2,
/obj/item/clothing/suit/space/void/merc = 0.5,
/obj/item/clothing/suit/space/void/cruiser = 0.5,
/obj/item/clothing/suit/space/void/coalition = 1,
/obj/item/clothing/suit/space/void/lancer = 0.3,
/obj/item/clothing/suit/space/void/sol = 0.5,
/obj/item/clothing/suit/space/void/zavodskoi = 0.5,
/obj/item/clothing/suit/space/void/einstein = 0.5,
/obj/item/clothing/suit/space/void/hephaestus = 0.5,
/obj/item/clothing/suit/space/void/zenghu = 0.5
)
/obj/random/voidsuit/Initialize(mapload, _damaged = 0)
damaged = _damaged
. = ..(mapload)
/obj/random/voidsuit/post_spawn(obj/item/clothing/suit/space/suit)
var/helmet = suitmap[suit.type]
if (helmet)
new helmet(loc)
else
log_debug("random_obj (voidsuit): Type [suit.type] was unable to spawn a matching helmet!")
new /obj/item/clothing/shoes/magboots(loc)
if (damaged && prob(60))
suit.create_breaches(pick(DAMAGE_BRUTE, DAMAGE_BURN), rand(1, 5))
/obj/random/vault_rig
name = "random rigsuit"
desc = "Contains a random rigsuit found in the vault."
icon = 'icons/obj/rig_modules.dmi'
icon_state = "breacher_rig"
spawnlist = list(
/obj/item/rig/ce = 1,
/obj/item/rig/eva= 1,
/obj/item/rig/hazard = 1,
/obj/item/rig/hazmat = 1,
/obj/item/rig/medical = 1,
/obj/item/rig/industrial = 1
)
/obj/random/safe_rig
name = "random rigsuit"
desc = "contains a random highvalue rigsuit found in the vault"
icon = 'icons/obj/rig_modules.dmi'
icon_state = "breacher_rig"
spawnlist = list(
/obj/item/rig/combat/equipped = 0.8,
/obj/item/rig/military = 0.3,
/obj/item/rig/hazard/equipped = 0.8,
/obj/item/rig/retro/equipped = 0.8,
/obj/item/rig/ert/security = 0.3,
/obj/item/rig/unathi = 0.4
)
/obj/random/canister
name = "random canister"
icon_state = "canister"
spawn_nothing_percentage = 20
problist = list(
/obj/random/canister/empty = 0.6,
/obj/random/canister/filled = 0.4,
)
/obj/random/canister/empty
name = "random empty canister"
problist = list(
// common:
/obj/machinery/portable_atmospherics/canister/empty = 1,
/obj/machinery/portable_atmospherics/canister/empty/air = 1,
/obj/machinery/portable_atmospherics/canister/empty/air = 1,
/obj/machinery/portable_atmospherics/canister/empty/carbon_dioxide = 1,
/obj/machinery/portable_atmospherics/canister/empty/carbon_dioxide = 1,
/obj/machinery/portable_atmospherics/canister/empty/hydrogen = 1,
/obj/machinery/portable_atmospherics/canister/empty/nitrogen = 1,
/obj/machinery/portable_atmospherics/canister/empty/oxygen = 1,
/obj/machinery/portable_atmospherics/canister/empty/oxygen = 1,
/obj/machinery/portable_atmospherics/canister/empty/sleeping_agent = 1,
// rare:
/obj/machinery/portable_atmospherics/canister/empty/heliumfuel = 0.1,
/obj/machinery/portable_atmospherics/canister/empty/chlorine = 0.1,
/obj/machinery/portable_atmospherics/canister/empty/helium = 0.1,
/obj/machinery/portable_atmospherics/canister/empty/nitrogen_dioxide = 0.1,
/obj/machinery/portable_atmospherics/canister/empty/phoron = 0.1,
)
/obj/random/canister/filled
name = "random filled canister"
problist = list(
// common:
/obj/machinery/portable_atmospherics/canister/air = 1,
/obj/machinery/portable_atmospherics/canister/air = 1,
/obj/machinery/portable_atmospherics/canister/carbon_dioxide = 1,
/obj/machinery/portable_atmospherics/canister/carbon_dioxide = 1,
/obj/machinery/portable_atmospherics/canister/hydrogen = 1,
/obj/machinery/portable_atmospherics/canister/nitrogen = 1,
/obj/machinery/portable_atmospherics/canister/oxygen = 1,
/obj/machinery/portable_atmospherics/canister/oxygen = 1,
/obj/machinery/portable_atmospherics/canister/sleeping_agent = 1,
// rare:
/obj/machinery/portable_atmospherics/canister/heliumfuel = 0.1,
/obj/machinery/portable_atmospherics/canister/chlorine = 0.1,
/obj/machinery/portable_atmospherics/canister/helium = 0.1,
/obj/machinery/portable_atmospherics/canister/nitrogen_dioxide = 0.1,
/obj/machinery/portable_atmospherics/canister/phoron_scarce = 0.1,
// extra rare:
/obj/machinery/portable_atmospherics/canister/phoron = 0.01,
)