The Great Device Resprite and Contained Sprite-ening (#20344)

Don't let the large file size scare you, it's just mostly splitting
stuff into contained sprites and putting them in the correct place.

Anyway, resprites most non-resprited devices in devices.dmi, and puts
them in contained sprites.
Also puts any related /obj/item/device into contained sprites too.
That's basically the long and short of it.
This commit is contained in:
Wowzewow (Wezzy)
2025-01-24 12:16:30 +00:00
committed by GitHub
parent e9fd65e0af
commit e7232d04fc
188 changed files with 319 additions and 355 deletions
+1 -1
View File
@@ -1,7 +1,7 @@
/obj/item/blueprints
name = "blueprints"
desc = "Blueprints of the station. There is a \"Classified\" stamp and several coffee stains on it."
icon = 'icons/obj/item/tools/blueprints.dmi'
icon = 'icons/obj/item/blueprints.dmi'
icon_state = "blueprints"
attack_verb = list("attacked", "bapped", "hit")
w_class = WEIGHT_CLASS_SMALL
@@ -6,7 +6,6 @@
icon = 'icons/obj/guns/decloner.dmi'
icon_state = "decloner"
item_state = "decloner"
contained_sprite = TRUE
var/obj/item/organ/augment_type
var/new_augment
@@ -2,8 +2,10 @@
name = "binoculars"
desc = "A pair of binoculars."
icon = 'icons/obj/item/device/binoculars.dmi'
icon_state = "binoculars"
item_state = "binoculars"
action_button_name = "Toggle Binoculars"
obj_flags = OBJ_FLAG_CONDUCTABLE
force = 11
w_class = WEIGHT_CLASS_SMALL
@@ -2,10 +2,11 @@
name = "chameleon projector"
desc = "A strange device."
desc_antag = "This device can let you disguise as common objects. Click on an object with this in your active hand to scan it, then activate it to use it in your hand."
icon = 'icons/obj/item/device/chameleon.dmi'
icon_state = "shield0"
item_state = "electronic"
obj_flags = OBJ_FLAG_CONDUCTABLE
slot_flags = SLOT_BELT
item_state = "electronic"
throwforce = 5
throw_speed = 1
throw_range = 5
@@ -6,10 +6,9 @@
name = "clothes dyer"
desc = "This is a device designed to rapidly dye clothes to new colors. Naysayers say it isn't great for the fabric, but what do they know?"
desc_info = "Select the desired color by using the item on yourself, and alternate between the primary and secondary colour of the item by alt-clicking the item. This only works on clothing items that are recolorable."
icon = 'icons/obj/item/tools/paint_sprayer.dmi'
icon_state = "floor_painter"
item_state = "floor_painter"
contained_sprite = TRUE
icon = 'icons/obj/item/device/paint_sprayer.dmi'
icon_state = "paint_sprayer"
item_state = "paint_sprayer"
/// Controls whether the dyer changes the primary or accent color of the clothes item.
var/selected_mode = BASE_COLOR
/// Contains the colors the dyer is set to for each possible mode.
@@ -1,7 +1,7 @@
/obj/item/device/cosmetic_surgery_kit
name = "cosmetic surgery auto-kit"
icon = 'icons/obj/device.dmi'
icon_state = "depthscanner"
icon = 'icons/obj/item/autoimplanter.dmi'
icon_state = "autoimplanter"
item_state = "electronic"
slot_flags = SLOT_BELT
throwforce = 5
+2 -4
View File
@@ -3,11 +3,9 @@
desc = "A complex single use recharging injector that spreads a complex neurological serum that makes animals docile and friendly. Somewhat."
w_class = WEIGHT_CLASS_NORMAL
origin_tech = list(TECH_BIO = 5, TECH_MATERIAL = 2)
// To-do track down where the hell this sprite went?
icon = 'icons/obj/guns/decloner.dmi'
icon_state = "decloner"
item_state = "decloner"
contained_sprite = TRUE
force = 0
var/loaded = 1
var/mode = "completely"
@@ -59,11 +57,11 @@
L.name = name
loaded = 0
icon_state = "animal_tagger0"
icon_state = "decloner0"
addtimer(CALLBACK(src, PROC_REF(do_recharge)), 5 MINUTES)
/obj/item/device/dociler/proc/do_recharge()
loaded = 1
icon_state = "animal_tagger1"
icon_state = "decloner"
src.visible_message("\The [src] beeps, refilling itself.")
@@ -1,8 +1,8 @@
/obj/item/device/orbital_dropper
name = "laser targeting dropper"
desc = "A device used to paint a target, which will then promptly orbitally drop the requested items."
icon = 'icons/obj/device.dmi'
icon_state = "drillpointer"
icon = 'icons/obj/item/device/binoculars.dmi'
icon_state = "binoculars"
item_state = "binoculars"
slot_flags = SLOT_BELT
w_class = WEIGHT_CLASS_SMALL
@@ -59,7 +59,7 @@
add_fingerprint(user)
//laser pointer image
icon_state = "drillpointer_on"
icon_state = "binoculars_high"
var/list/showto = list()
for(var/mob/M in viewers(targloc))
if(M.client)
@@ -91,7 +91,7 @@
addtimer(CALLBACK(src, PROC_REF(orbital_drop), targloc, user), 105)
flick_overlay(I, showto, 20) //2 seconds of the red dot appearing
icon_state = "drillpointer"
icon_state = "binoculars"
/obj/item/device/orbital_dropper/proc/orbital_drop(var/turf/target, var/user)
if(!map)
+1
View File
@@ -2,6 +2,7 @@
name = "flash"
desc = "A security device capable of producing a blinding, incapacitating flash at close ranges. Repeated use may result in a burnt-out bulb and/or excessive force investigations."
desc_info = "Click on someone adjacent to you to attempt to blind them. Use it in your hand with HARM intent, or on yourself, to blind everyone in a small radius (including yourself!)"
icon = 'icons/obj/item/device/flash.dmi'
icon_state = "flash"
item_state = "flash"
throwforce = 5
@@ -1,10 +1,9 @@
/obj/item/device/hearing_aid
name = "hearing aid"
desc = "A device that allows the naturally deaf to hear, to an extent."
icon = 'icons/obj/hearing_aid.dmi'
icon = 'icons/obj/item/device/hearing_aid.dmi'
icon_state = "hearing_aid"
item_state = "hearing_aid"
contained_sprite = TRUE
slot_flags = SLOT_EARS
w_class = WEIGHT_CLASS_SMALL
@@ -3,7 +3,7 @@
/obj/item/device/laser_pointer
name = "laser pointer"
desc = "Don't shine it in your eyes!"
icon = 'icons/obj/device.dmi'
icon = 'icons/obj/item/device/laser_pointer.dmi'
icon_state = "pointer"
item_state = "pen"
var/pointer_icon_state
@@ -12,9 +12,6 @@
var/turf/pointer_loc
var/obj/item/stock_parts/micro_laser/diode //cant use the laser without it
/obj/item/device/laser_pointer/red
pointer_icon_state = "red_laser"
/obj/item/device/laser_pointer/green
@@ -3,9 +3,9 @@
/obj/item/device/light_meter
name = "light meter"
desc = "A simple device that measures ambient light levels."
icon = 'icons/obj/device.dmi'
icon_state = "locator"
icon = 'icons/obj/item/device/gps.dmi'
icon_state = "gps"
item_state = "radio"
// Copied from debugger.dm
obj_flags = OBJ_FLAG_CONDUCTABLE
force = 11
+1 -2
View File
@@ -3,10 +3,9 @@
desc = "Pretend to be a director for a brief moment before someone tackles you to make you shut up."
desc_extended = "Annoy your colleagues! Scare interns! Impress no one!"
desc_info = "A device used to project your voice. Loudly."
icon = 'icons/obj/item/tools/megaphone.dmi'
icon = 'icons/obj/item/device/megaphone.dmi'
icon_state = "megaphone"
item_state = "megaphone"
contained_sprite = TRUE
w_class = WEIGHT_CLASS_SMALL
obj_flags = OBJ_FLAG_CONDUCTABLE
@@ -6,7 +6,6 @@
icon = 'icons/obj/memorywiper.dmi'
icon_state = "portable_memorywiper"
item_state = "portable_memorywiper"
contained_sprite = TRUE
anchored = FALSE
drop_sound = 'sound/items/drop/backpack.ogg'
pickup_sound = 'sound/items/pickup/backpack.ogg'
+8 -2
View File
@@ -6,7 +6,9 @@
/obj/item/device/modkit
name = "voidsuit modification kit"
desc = "A kit containing all the needed tools and parts to modify a voidsuit for another user."
icon = 'icons/obj/item/device/modkit.dmi'
icon_state = "modkit"
item_state = "restock_unit"
var/parts = MODKIT_FULL
var/target_species = BODYTYPE_HUMAN
var/is_multi_species = FALSE //can this modkit change things for multiple species?
@@ -105,8 +107,10 @@
/obj/item/voidsuit_modkit
name = "voidsuit kit"
icon = 'icons/obj/device.dmi'
icon = 'icons/obj/item/device/modkit.dmi'
icon_state = "modkit"
item_state = "restock_unit"
contained_sprite = TRUE
desc = "A simple cardboard box containing the requisition forms, permits, and decal kits for a Himean voidsuit."
desc_info = "In order to convert a voidsuit simply click on voidsuit or helmet with this item\
The same process can be used to convert the voidsuit back into a regular voidsuit. Make sure not to have a helmet or tank in the suit\
@@ -235,8 +239,10 @@
/obj/item/voidsuit_modkit_multi //for converting between a large range of options instead of having 5000 subtypes
name = "voidsuit kit"
icon = 'icons/obj/device.dmi'
icon = 'icons/obj/item/device/modkit.dmi'
icon_state = "modkit"
item_state = "restock_unit"
contained_sprite = TRUE
desc = "A simple cardboard box designed to modify a voidsuit to a selection of alternate options."
desc_info = "In order to convert a voidsuit simply click on voidsuit or helmet with this item\
The same process can be used to convert the voidsuit back into a regular voidsuit. Make sure not to have a helmet or tank in the suit\
+1 -2
View File
@@ -7,11 +7,10 @@
name = "multitool"
desc = "This small, handheld device is made of durable, insulated plastic. It has a electrode jack, perfect for interfacing with numerous machines, as well as an in-built NT-SmartTrack! system."
desc_info = "You can use this on airlocks or APCs to try to hack them without cutting wires. You can also use it to wire circuits, and track APCs by using it in-hand."
icon = 'icons/obj/item/tools/multitool.dmi'
icon = 'icons/obj/item/device/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
+1 -1
View File
@@ -1,7 +1,7 @@
/obj/item/device/oxycandle
name = "oxygen candle"
desc = "A steel tube with the words 'OXYGEN - PULL CORD TO IGNITE' stamped on the side. A small label warns against using the device underwater."
icon = 'icons/obj/device.dmi'
icon = 'icons/obj/item/device/oxycandle.dmi'
icon_state = "oxycandle"
item_state = "oxycandle"
w_class = WEIGHT_CLASS_SMALL // Should fit into internal's box or maybe pocket
@@ -7,10 +7,9 @@
name = "paint gun"
desc = "A Hephaestus-made paint gun that uses microbes to replenish its paint storage. Very high-tech and fancy too!"
desc_info = "Use control-click on a coloured decal on a turf to copy its colour. You can also use shift-click on a turf with the paint gun in hand to clear all decals on it."
icon = 'icons/obj/item/tools/paint_sprayer.dmi'
icon_state = "floor_painter"
item_state = "floor_painter"
contained_sprite = TRUE
icon = 'icons/obj/item/device/paint_sprayer.dmi'
icon_state = "paint_sprayer"
item_state = "mister"
var/decal = "remove all decals"
var/paint_dir = "precise"
var/paint_colour = COLOR_WHITE
@@ -81,6 +80,10 @@
"bulkhead black" = COLOR_WALL_GUNMETAL
)
/obj/item/device/paint_sprayer/update_icon()
ClearOverlays()
AddOverlays(overlay_image(icon, "paint_sprayer_color", paint_colour))
/obj/item/device/paint_sprayer/afterattack(var/atom/A, var/mob/user, proximity, params)
if(!proximity)
return
@@ -324,6 +327,7 @@
var/new_colour = input(usr, "Choose a colour.", "paintgun", paint_colour) as null|anything in preset_colors
if(new_colour && new_colour != paint_colour)
paint_colour = preset_colors[new_colour]
update_icon()
to_chat(usr, SPAN_NOTICE("You set \the [src] to paint with <font color='[paint_colour]'>a new colour</font>."))
/obj/item/device/paint_sprayer/verb/choose_decal()
@@ -4,7 +4,6 @@
icon = 'icons/obj/personal_shield.dmi'
icon_state = "personal_shield"
item_state = "personal_shield"
contained_sprite = TRUE
slot_flags = SLOT_BELT
w_class = WEIGHT_CLASS_NORMAL
action_button_name = "Toggle Shield"
@@ -1,9 +1,9 @@
/obj/item/device/pin_extractor
name = "firing pin extractor"
desc = "A device that is capable of removing firing pin without damaging it."
icon = 'icons/obj/device.dmi'
icon = 'icons/obj/item/device/pin_extractor.dmi'
icon_state = "pin_extractor"
item_state = "pin_extractor"
item_state = "analyzer"
w_class = WEIGHT_CLASS_SMALL
obj_flags = OBJ_FLAG_CONDUCTABLE
action_button_name = "Toggle extractor"
@@ -1,9 +1,8 @@
/obj/item/device/pipe_painter
name = "pipe painter"
icon = 'icons/obj/item/tools/pipe_painter.dmi'
icon = 'icons/obj/item/device/pipe_painter.dmi'
icon_state = "pipe_painter"
item_state = "pipe_painter"
contained_sprite = TRUE
var/list/modes
var/mode
@@ -3,6 +3,7 @@
/obj/item/device/powersink
name = "power sink"
desc = "A nulling power sink which drains energy from electrical systems."
icon = 'icons/obj/item/device/powersink.dmi'
icon_state = "powersink0"
item_state = "powersink0"
w_class = WEIGHT_CLASS_BULKY
@@ -1,7 +1,7 @@
/obj/item/device/encryptionkey
name = "standard encryption key"
desc = "An encryption key for a radio headset. Contains cypherkeys."
icon = 'icons/obj/radio.dmi'
icon = 'icons/obj/item/device/encryptionkey.dmi'
icon_state = "cypherkey"
item_state = ""
w_class = WEIGHT_CLASS_TINY
@@ -101,7 +101,7 @@
/obj/item/device/encryptionkey/bluespace
name = "bluespace encryption key"
desc = "A nonsensical mimicry of a standard encryption key, in the form of an elongated bluespace crystal. It seems to function."
icon_state = "bs_cyperkey"
icon_state = "bs_cypherkey"
additional_channels = list(CHANNEL_BLUESPACE = TRUE)
origin_tech = list(TECH_BLUESPACE = 3)
syndie = TRUE
@@ -266,7 +266,7 @@
/obj/item/storage/box/fancy/keypouch
name = "encryption key pouch"
desc = "A pouch designed to store three encryption keys."
icon = 'icons/obj/radio.dmi'
icon = 'icons/obj/item/device/encryptionkey.dmi'
icon_state = "keypouch0"
icon_type = "key"
storage_type = "pouch"
@@ -1,6 +1,7 @@
/obj/item/device/radio/headset
name = "radio headset"
desc = "An updated, modular intercom that fits over the head. Takes encryption keys."
icon = 'icons/obj/item/device/radio/headset.dmi'
icon_state = "headset"
item_state = "headset"
matter = list(MATERIAL_ALUMINIUM = 75)
@@ -193,6 +194,7 @@
/obj/item/device/radio/headset/alt
name = "bowman headset"
icon = 'icons/obj/item/device/radio/headset_alt.dmi'
icon_state = "headset_alt"
item_state = "headset_alt"
@@ -200,6 +202,7 @@
name = "soundproof headset"
desc = "A sound isolating version of the common radio headset."
desc_info = "This radio doubles as a pair of earmuffs by providing sound protection."
icon = 'icons/obj/item/device/radio/headset_alt_double.dmi'
icon_state = "earset"
item_state = "earset"
item_flags = ITEM_FLAG_SOUND_PROTECTION
@@ -209,6 +212,7 @@
name = "wristbound radio"
desc = "A radio designed to fit on the wrist. Often known for broadcasting loudly enough that those closeby might overhear it."
desc_info = "This radio can be heard by people standing next to the one wearing it."
icon = 'icons/obj/item/device/radio/headset_wrist.dmi'
icon_state = "wristset"
item_state = "wristset"
slot_flags = SLOT_WRISTS
@@ -240,11 +244,10 @@
name = "clip-on radio"
desc = "A radio designed to clip onto your clothes. Often known for broadcasting loudly enough that those closeby might overhear it."
desc_info = "This radio can be heard by people standing next to the one wearing it."
icon = 'icons/obj/item/tools/radio/clip.dmi'
icon = 'icons/obj/item/device/radio/headset_clip.dmi'
icon_state = "clip"
item_state = "clip"
slot_flags = SLOT_WRISTS | SLOT_EARS
contained_sprite = TRUE
/obj/item/device/radio/headset/wrist/clip/verb/flip_radio()
set category = "Object"
@@ -283,11 +286,13 @@
name = "service radio headset"
desc = "Headset used by the service staff, tasked with keeping the station full, happy and clean."
icon_state = "srv_headset"
item_state = "srv_headset"
ks2type = /obj/item/device/encryptionkey/headset_service
/obj/item/device/radio/headset/headset_service/alt
name = "service radio bowman headset"
icon_state = "headset_alt"
icon_state = "srv_headset_alt"
item_state = "srv_headset_alt"
/obj/item/device/radio/headset/alt/double/service
name = "soundproof service headset"
@@ -444,8 +449,8 @@
/obj/item/device/radio/headset/alt/double/mining
name = "soundproof mining headset"
icon_state = "earset_Mine"
item_state = "earset_Mine"
icon_state = "earset_mine"
item_state = "earset_mine"
ks2type = /obj/item/device/encryptionkey/headset_cargo
/obj/item/device/radio/headset/wrist/cargo/mining
@@ -689,8 +694,8 @@
/obj/item/device/radio/headset/alt/double/sec
name = "soundproof security headset"
icon_state = "earset_Sec"
item_state = "earset_Sec"
icon_state = "earset_sec"
item_state = "earset_sec"
ks2type = /obj/item/device/encryptionkey/headset_sec
/obj/item/device/radio/headset/wrist/sec
@@ -20,8 +20,9 @@ var/list/active_radio_jammers = list()
name = "radio jammer"
desc = "A small, inconspicious looking item with an 'ON/OFF' toggle."
desc_info = "Use in-hand to activate or deactivate, alt-click while adjacent or in-hand to toggle whether it blocks all wireless signals, or just stationbound wireless interfacing."
icon = 'icons/obj/device.dmi'
icon = 'icons/obj/item/device/chameleon.dmi'
icon_state = "shield0"
item_state = "electronic"
w_class = WEIGHT_CLASS_SMALL
var/active = JAMMER_OFF
var/radius = 7
+17 -9
View File
@@ -10,8 +10,9 @@ BREATH ANALYZER
/obj/item/device/healthanalyzer
name = "health analyzer"
desc = "A hand-held body scanner able to distinguish vital signs of the subject."
icon = 'icons/obj/item/device/healthanalyzer.dmi'
icon_state = "health"
item_state = "healthanalyzer"
item_state = "analyzer"
obj_flags = OBJ_FLAG_CONDUCTABLE
slot_flags = SLOT_BELT
throwforce = 3
@@ -373,10 +374,9 @@ BREATH ANALYZER
/obj/item/device/analyzer
name = "analyzer"
desc = "A hand-held environmental scanner which reports current gas levels."
icon = 'icons/obj/item/tools/air_analyzer.dmi'
icon = 'icons/obj/item/device/air_analyzer.dmi'
icon_state = "analyzer"
item_state = "analyzer"
contained_sprite = TRUE
w_class = WEIGHT_CLASS_SMALL
obj_flags = OBJ_FLAG_CONDUCTABLE
slot_flags = SLOT_BELT
@@ -409,8 +409,9 @@ BREATH ANALYZER
/obj/item/device/mass_spectrometer
name = "mass spectrometer"
desc = "A hand-held mass spectrometer which identifies trace chemicals in a blood sample."
icon = 'icons/obj/item/device/mass_spectrometer.dmi'
icon_state = "spectrometer"
item_state = "analyzer"
item_state = "spectrometer"
w_class = WEIGHT_CLASS_SMALL
atom_flags = ATOM_FLAG_OPEN_CONTAINER
obj_flags = OBJ_FLAG_CONDUCTABLE
@@ -471,6 +472,7 @@ BREATH ANALYZER
/obj/item/device/mass_spectrometer/adv
name = "advanced mass spectrometer"
icon_state = "adv_spectrometer"
item_state = "adv_spectrometer"
details = TRUE
origin_tech = list(TECH_MAGNET = 4, TECH_BIO = 2)
@@ -483,6 +485,7 @@ BREATH ANALYZER
/obj/item/device/reagent_scanner
name = "reagent scanner"
desc = "A hand-held reagent scanner which identifies chemical agents."
icon = 'icons/obj/item/device/reagent_scanner.dmi'
icon_state = "reagent_scanner"
item_state = "analyzer"
w_class = WEIGHT_CLASS_SMALL
@@ -518,12 +521,14 @@ BREATH ANALYZER
/obj/item/device/reagent_scanner/adv
name = "advanced reagent scanner"
icon_state = "adv_reagent_scanner"
item_state = "analyzer"
details = 1
origin_tech = list(TECH_MAGNET = 4, TECH_BIO = 2)
/obj/item/device/slime_scanner
name = "slime scanner"
icon_state = "adv_spectrometer"
icon = 'icons/obj/item/device/slime_scanner.dmi'
icon_state = "slime_scanner"
item_state = "analyzer"
origin_tech = list(TECH_BIO = 1)
w_class = WEIGHT_CLASS_SMALL
@@ -568,8 +573,8 @@ BREATH ANALYZER
/obj/item/device/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/device/price_scanner.dmi'
icon_state = "price_scanner"
item_state = "price_scanner"
item_flags = ITEM_FLAG_NO_BLUDGEON
slot_flags = SLOT_BELT
w_class = WEIGHT_CLASS_SMALL
@@ -589,6 +594,7 @@ BREATH ANALYZER
/obj/item/device/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/device/breath_analyzer.dmi'
icon_state = "breath_analyzer"
item_state = "analyzer"
w_class = WEIGHT_CLASS_SMALL
@@ -698,9 +704,10 @@ BREATH ANALYZER
/obj/item/device/advanced_healthanalyzer
name = "advanced health analyzer"
desc = "An expensive and varied-use health analyzer of Zeng-Hu design that prints full-body scans after a short scanning delay."
icon_state = "adv-analyzer"
item_state = "adv-analyzer"
desc = "An expensive and varied-use health analyzer that prints full-body scans after a short scanning delay."
icon = 'icons/obj/item/device/advanced_healthanalyzer.dmi'
icon_state = "health_adv"
item_state = "analyzer"
slot_flags = SLOT_BELT
w_class = WEIGHT_CLASS_NORMAL
origin_tech = list(TECH_MAGNET = 2, TECH_BIO = 3)
@@ -725,6 +732,7 @@ BREATH ANALYZER
user.setClickCooldown(DEFAULT_QUICK_COOLDOWN)
user.do_attack_animation(src)
user.visible_message("<b>[user]</b> starts scanning \the [target_mob] with \the [src].", SPAN_NOTICE("You start scanning \the [target_mob] with \the [src]."))
flick("[icon_state]-scan", src)
if(do_after(user, 7 SECONDS, target_mob, DO_UNIQUE))
print_scan(target_mob, user)
add_fingerprint(user)
@@ -2,11 +2,10 @@
name = "portable suit cooling unit"
desc = "A portable heat sink and liquid cooled radiator that can be hooked up to a space suit's existing temperature controls to provide industrial levels of cooling."
w_class = WEIGHT_CLASS_BULKY
icon = 'icons/obj/item/tools/suitcooler.dmi'
icon = 'icons/obj/item/device/suitcooler.dmi'
icon_state = "suitcooler0"
item_state = "coolingpack"
action_button_name = "Toggle Cooling Unit"
contained_sprite = TRUE
slot_flags = SLOT_BACK //you can carry it on your back if you want, but it won't do anything unless attached to suit storage
//copied from tank.dm
+2 -2
View File
@@ -3,10 +3,10 @@
/obj/item/device/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/tools/t_scanner.dmi'
icon = 'icons/obj/item/device/t_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)
-42
View File
@@ -1,42 +0,0 @@
/obj/item/device/animaltagger
name = "animal tagger"
desc = "Used for tagging animals to be identified by a ear tag."
icon_state = "animal_tagger0"
force = 11
w_class = WEIGHT_CLASS_SMALL
throwforce = 5.0
throw_range = 15
throw_speed = 3
var/animaltag = null
matter = list(DEFAULT_WALL_MATERIAL = 50, MATERIAL_GLASS = 20)
origin_tech = list(TECH_MAGNET = 2, TECH_ENGINEERING = 1)
/obj/item/device/animaltagger/Destroy()
return ..()
/obj/item/device/animaltagger/attack(mob/living/target_mob, mob/living/user, target_zone)
return
/obj/item/device/animaltagger/afterattack(atom/A as mob|obj, mob/user as mob)
if(isanimal(A))
A.name = animaltag
to_chat(user,SPAN_NOTICE("You tag the animal as [animaltag]."))
else
to_chat(user, SPAN_NOTICE("You can't tag non animals."))
return
/obj/item/device/animaltagger/attack_self(mob/user as mob)
var/inputtag = sanitizeSafe(input(user,"Label text?","Set label",""), MAX_NAME_LEN)
if(!inputtag || !length(inputtag))
to_chat(user, SPAN_NOTICE("Invalid tag line."))
return
animaltag = inputtag
+13 -12
View File
@@ -1,7 +1,8 @@
/obj/item/device/taperecorder
name = "universal recorder"
desc = "A device that can record up to an hour of dialogue and play it back. It automatically translates the content in playback."
icon_state = "taperecorderidle"
icon = 'icons/obj/item/device/taperecorder.dmi'
icon_state = "taperecorder_idle"
item_state = "analyzer"
w_class = WEIGHT_CLASS_SMALL
@@ -73,7 +74,7 @@
emagged = TRUE
recording = FALSE
to_chat(user, SPAN_NOTICE("PZZTTPFFFT"))
icon_state = "taperecorderidle"
icon_state = "taperecorder_idle"
return TRUE
/obj/item/device/taperecorder/proc/explode()
@@ -96,7 +97,7 @@
if(emagged)
src.audible_message(SPAN_WARNING("\The [src] makes a scratchy noise."), hearing_distance = 3)
return
icon_state = "taperecorderrecording"
icon_state = "taperecorder_recording"
if(time_recorded < 3600 && !playing)
to_chat(usr, SPAN_NOTICE("Recording started."))
recording = TRUE
@@ -108,7 +109,7 @@
time_recorded++
sleep(10)
recording = FALSE
icon_state = "taperecorderidle"
icon_state = "taperecorder_idle"
return
else
to_chat(usr, SPAN_NOTICE("Either your tape recorder's memory is full, or it is currently playing back its memory."))
@@ -129,12 +130,12 @@
timestamp += time_recorded
stored_info += "\[[time2text(time_recorded*10,"mm:ss")]\] Recording stopped."
to_chat(usr, SPAN_NOTICE("Recording stopped."))
icon_state = "taperecorderidle"
icon_state = "taperecorder_idle"
return
else if(playing)
playing = FALSE
audible_message("<font color=Maroon><B>Tape Recorder</B>: Playback stopped.</font>", hearing_distance = 3)
icon_state = "taperecorderidle"
icon_state = "taperecorder_idle"
return
/obj/item/device/taperecorder/verb/clear_memory()
@@ -174,7 +175,7 @@
to_chat(usr, SPAN_WARNING("You're already playing!"))
return
playing = TRUE
icon_state = "taperecorderplaying"
icon_state = "taperecorder_playing"
to_chat(usr, SPAN_NOTICE("Playing started."))
for(var/i = 1, time_recorded < 3600, sleep(10 * play_sleep_seconds))
if(!playing)
@@ -196,7 +197,7 @@
audible_message("<font color=Maroon><B>Tape Recorder</B>: Skipping [play_sleep_seconds] seconds of silence.</font>", hearing_distance = 3)
play_sleep_seconds = 1
i++
icon_state = "taperecorderidle"
icon_state = "taperecorder_idle"
playing = FALSE
if(emagged)
audible_message("<font color=Maroon><B>Tape Recorder</B>: This tape recorder will self-destruct in... Five.</font>", hearing_distance = 3)
@@ -283,7 +284,7 @@
if(emagged)
src.audible_message(SPAN_WARNING("\The [src] makes a scratchy noise."), hearing_distance = 3)
return
icon_state = "taperecorderrecording"
icon_state = "taperecorder_recording"
if(time_recorded < 3600 && !playing)
to_chat(usr, SPAN_NOTICE("Recording started."))
recording = TRUE
@@ -295,7 +296,7 @@
time_recorded++
sleep(10)
recording = FALSE
icon_state = "taperecorderidle"
icon_state = "taperecorder_idle"
return
else
to_chat(usr, SPAN_WARNING("Either \the [src]'s memory is full, or it is currently playing back its memory."))
@@ -308,7 +309,7 @@
timestamp += time_recorded
stored_info += "\[[time2text(time_recorded*10,"mm:ss")]\] Recording stopped."
to_chat(usr, SPAN_NOTICE("Recording stopped."))
icon_state = "taperecorderidle"
icon_state = "taperecorder_idle"
return
else if(emagged)
to_chat(usr, SPAN_WARNING("\The [src]'s buttons doesn't react!"))
@@ -316,7 +317,7 @@
else if(playing)
playing = FALSE
audible_message("<font color=Maroon><B>Tape Recorder</B>: Playback stopped.</font>", hearing_distance = 3)
icon_state = "taperecorderidle"
icon_state = "taperecorder_idle"
return
/obj/item/device/taperecorder/attackby(obj/item/attacking_item, mob/user)
@@ -17,13 +17,14 @@ effective or pretty fucking useless.
/obj/item/device/batterer
name = "mind batterer"
desc = "A strange device with twin antennas."
icon = 'icons/obj/item/device/batterer.dmi'
icon_state = "batterer"
item_state = "electronic"
throwforce = 5
w_class = WEIGHT_CLASS_TINY
throw_speed = 4
throw_range = 10
obj_flags = OBJ_FLAG_CONDUCTABLE
item_state = "electronic"
origin_tech = list(TECH_MAGNET = 3, TECH_COMBAT = 3, TECH_ILLEGAL = 3)
var/times_used = 0 //Number of times it's been used.
@@ -55,7 +56,9 @@ effective or pretty fucking useless.
/obj/item/device/liidrafier //adminspawn/event injector, designed to easily make someone a lii'dra zombie/actual lii'dra
name = "Lii'drafication Injector"
desc = "Use this single-use injector on a Vaurca to grant them access to the Lii'dra Hivenet. Use it on an organic non-Vaurca to infect them with black k'ois. This is an OOC item, do not let anyone see it!"
icon_state = "animal_tagger1"
icon = 'icons/obj/guns/decloner.dmi'
icon_state = "decloner"
item_state = "decloner"
/obj/item/device/liidrafier/attack(mob/living/target_mob, mob/living/user, target_zone)
return
@@ -1,6 +1,7 @@
/obj/item/device/tvcamera
name = "press camera drone"
desc = "An Ingi Usang Entertainment Co. livestreaming press camera drone. Weapon of choice for war correspondents and reality show cameramen. It does not appear to have any internal memory storage."
icon = 'icons/obj/item/device/tvcamera.dmi'
icon_state = "camcorder"
item_state = "camcorder"
w_class = WEIGHT_CLASS_BULKY
+3 -2
View File
@@ -391,8 +391,9 @@ Then check if it's true, if true return. This will stop the normal menu appearin
//for revs to create their own central command reports
/obj/item/device/announcer
name = "relay positioning device"
icon = 'icons/obj/device.dmi'
icon_state = "locator"
icon = 'icons/obj/item/device/gps.dmi'
icon_state = "gps"
item_state = "radio"
desc_antag = "This device allows you to create a single central command report. It has only one use."
w_class = WEIGHT_CLASS_SMALL
@@ -1,6 +1,7 @@
/obj/item/device/hailer
name = "hailer"
desc = "Used by obese officers to save their breath for running."
icon = 'icons/obj/item/device/hailer.dmi'
icon_state = "voice0"
item_state = "flashbang" //looks exactly like a flash (and nothing like a flashbang)
w_class = WEIGHT_CLASS_TINY
+2 -2
View File
@@ -1,7 +1,7 @@
/obj/item/knittingneedles
name = "knitting needles"
desc = "Silver knitting needles used for stitching yarn."
icon = 'icons/obj/item/tools/knitting.dmi'
icon = 'icons/obj/item/knitting.dmi'
icon_state = "knittingneedles"
item_state = "knittingneedles"
w_class = WEIGHT_CLASS_SMALL
@@ -119,7 +119,7 @@
/obj/item/yarn
name = "ball of yarn"
desc = "A ball of yarn, this one is white."
icon = 'icons/obj/item/tools/knitting.dmi'
icon = 'icons/obj/item/knitting.dmi'
icon_state = "white_ball"
w_class = WEIGHT_CLASS_TINY
+2 -1
View File
@@ -1,6 +1,7 @@
/obj/item/device/kit
icon = 'icons/obj/item/device/modkit.dmi'
icon_state = "modkit"
icon = 'icons/obj/device.dmi'
item_state = "restock_unit"
var/new_name = "exosuit" //What is the variant called?
var/new_desc = "An exosuit." //How is the new exosuit described?
var/new_icon = "ripley" //What base icon will the new exosuit use?
+1
View File
@@ -281,6 +281,7 @@
icon = 'icons/obj/radio.dmi'
icon_state = "beacon"
item_state = "signaler"
contained_sprite = TRUE
/*
* Fake singularity
+1 -1
View File
@@ -1,7 +1,7 @@
/obj/item/vitals_monitor
name = "vitals monitor"
desc = "A vitals monitor, used to track a patient's vitality. It needs to be attached to a rollerbed to function."
icon = 'icons/obj/item/tools/vitals_monitor.dmi'
icon = 'icons/obj/item/vitals_monitor.dmi'
icon_state = "vitals_monitor"
item_state = "vitals_monitor"
contained_sprite = TRUE
+4 -1
View File
@@ -5,8 +5,10 @@
/obj/item/autopsy_scanner
name = "autopsy scanner"
desc = "Extracts information on wounds."
icon = 'icons/obj/device.dmi'
icon = 'icons/obj/item/autopsy_scanner.dmi'
icon_state = "autopsy"
item_state = "autopsy"
contained_sprite = TRUE
obj_flags = OBJ_FLAG_CONDUCTABLE
w_class = WEIGHT_CLASS_SMALL
origin_tech = list(TECH_MATERIAL = 1, TECH_BIO = 1)
@@ -178,6 +180,7 @@
for(var/mob/O in viewers(M))
O.show_message(SPAN_NOTICE("\The [user] scans the wounds on [M.name]'s [S.name] with \the [src]"), 1)
flick("autopsy-scan", src)
src.add_data(S)
return 1
@@ -5,9 +5,10 @@
</br>This will not make you inaudible, your footsteps can still be heard, and it will make a very distinctive sound when uncloaking.\
</br>Any items you're holding in your hands can still be seen."
desc_antag = "Being cloaked makes you impossible to click on, which offers a major advantage in combat. People can only hit you by blind-firing in your direction."
icon = 'icons/obj/device.dmi'
icon = 'icons/obj/item/device/chameleon.dmi'
icon_state = "shield0"
item_state = "electronic"
contained_sprite = TRUE
var/active = 0.0
obj_flags = OBJ_FLAG_CONDUCTABLE
item_state = "electronic"
@@ -2,7 +2,7 @@
name = "bluespace neutralizer"
desc = "A strange device, supposedly capable of pre-emptively shutting down bluespace portals."
desc_info = "Click on it, or use it in-hand to activate it. Click on any portal-like structure to instantly close it. Stand near a bluespace rift while it's active to start the closing process."
icon = 'icons/obj/item/tools/neutralizer.dmi'
icon = 'icons/obj/item/neutralizer.dmi'
icon_state = "neutralizer"
contained_sprite = TRUE
@@ -4,6 +4,7 @@
icon = 'icons/obj/machinery/cell_charger.dmi'
icon_state = "cell"
item_state = "cell"
contained_sprite = TRUE
origin_tech = list(TECH_POWER = 1)
force = 11
throwforce = 5.0
@@ -2,7 +2,7 @@
name = "research slip"
desc = "A small slip of plastic with an embedded chip. It is commonly used to store small amounts of research data."
desc_info = "This item is to be used in the destructive analyzer to gain research points."
icon = 'icons/obj/item/tools/research_slip.dmi'
icon = 'icons/obj/item/research_slip.dmi'
icon_state = "slip_nt"
contained_sprite = TRUE
@@ -26,8 +26,8 @@
/obj/item/locator
name = "locator"
desc = "A device that can be used to track those with locator implants."
icon = 'icons/obj/device.dmi'
icon_state = "locator"
icon = 'icons/obj/item/pinpointer.dmi'
icon_state = "pinoff"
var/temp = null
var/frequency = 1451
var/broadcasting = null
@@ -142,7 +142,7 @@ Frequency:
name = "hand tele"
desc = "A hand-held bluespace teleporter that can rip open portals to a random nearby location, or lock onto a teleporter with a selected teleportation beacon."
desc_info = "Ctrl-click to choose which teleportation pad to link to. Use in-hand or alt-click to deploy a portal. When not linked to a pad, or the pad isn't pointing at a beacon, it will choose a completely random teleportation destination."
icon = 'icons/obj/device.dmi'
icon = 'icons/obj/item/hand_tele.dmi'
icon_state = "hand_tele"
item_state = "electronic"
throwforce = 5
@@ -259,6 +259,9 @@ Frequency:
LAZYREMOVE(active_teleporters, P)
if(LAZYLEN(active_teleporters) < max_portals)
check_maptext(SMALL_FONTS(7, "Ready"))
icon_state = "hand_tele"
else
icon_state = "hand_tele_recharging"
/obj/item/closet_teleporter
name = "closet teleporter"
+12 -3
View File
@@ -4,8 +4,10 @@ var/list/global/all_tethers = list()
name = "tethering device"
desc = "A device used by explorers to keep track of partners by way of electro-tether."
desc_info = "Use in-hand to activate, must be on the same level and within fifteen tiles of another device to latch. Tethers are colour coded by distance."
icon = 'icons/obj/device.dmi'
icon_state = "locator"
icon = 'icons/obj/item/device/gps.dmi'
icon_state = "gps"
item_state = "radio"
contained_sprite = TRUE
w_class = WEIGHT_CLASS_SMALL
slot_flags = SLOT_BELT
force = 1
@@ -18,6 +20,11 @@ var/list/global/all_tethers = list()
. = ..()
all_tethers += src
/obj/item/tethering_device/update_icon()
ClearOverlays()
if(active)
AddOverlays("gps_on")
/obj/item/tethering_device/Destroy()
STOP_PROCESSING(SSprocessing, src)
deactivate()
@@ -26,6 +33,7 @@ var/list/global/all_tethers = list()
/obj/item/tethering_device/attack_self(mob/user)
active = !active
update_icon()
var/msg = "You [active ? "activate" : "deactivate"] \the [src]."
to_chat(user, SPAN_NOTICE(msg))
if(active)
@@ -33,6 +41,7 @@ var/list/global/all_tethers = list()
else
deactivate()
/obj/item/tethering_device/process()
var/turf/our_turf = get_turf(src)
for(var/tether in all_tethers - src)
@@ -54,7 +63,7 @@ var/list/global/all_tethers = list()
/obj/item/tethering_device/emp_act(severity)
. = ..()
AddOverlays("gps_emp")
deactivate()
/obj/item/tethering_device/proc/activate()
+5 -5
View File
@@ -219,7 +219,7 @@
/obj/item/weldingtool
name = "welding tool"
desc = "A welding tool with a built-in fuel tank, designed for welding and cutting metal."
icon = 'icons/obj/item/tools/welding_tools.dmi'
icon = 'icons/obj/item/welding_tools.dmi'
icon_state = "welder"
item_state = "welder"
var/welding_state = "welding_sparks"
@@ -662,7 +662,7 @@
name = "experimental eyeshield"
desc = "An advanced eyeshield capable of dampening the welding glare produced when working on modern super-materials, removing the need for user-worn welding gear."
desc_info = "This can be attached to an experimental welder to give it welding protection, removing the need for welding goggles or masks."
icon = 'icons/obj/item/tools/welding_tools.dmi'
icon = 'icons/obj/item/welding_tools.dmi'
icon_state = "eyeshield"
item_state = "eyeshield"
contained_sprite = TRUE
@@ -671,7 +671,7 @@
name = "experimental overcapacitor"
desc = "An advanced capacitor that injects a current into the welding stream, doubling the speed of welding tasks without sacrificing quality. Excess current burns up welding fuel, reducing fuel efficiency, however."
desc_info = "This can be attached to an experimental welder to double the speed it works at, at the cost of tripling the fuel cost of using it."
icon = 'icons/obj/item/tools/welding_tools.dmi'
icon = 'icons/obj/item/welding_tools.dmi'
icon_state = "overcap"
item_state = "overcap"
contained_sprite = TRUE
@@ -750,7 +750,7 @@
/obj/item/crowbar/hydraulic_rescue_tool
name = "Hydraulic rescue tool"
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/tools/hydraulic_rescue_tool.dmi'
icon = 'icons/obj/item/hydraulic_rescue_tool.dmi'
icon_state = "jawspry"
force = 15
throwforce = 1
@@ -870,7 +870,7 @@
/obj/item/powerdrill
name = "impact wrench"
desc = "The screwdriver's big brother."
icon = 'icons/obj/item/tools/impact_wrench.dmi'
icon = 'icons/obj/item/impact_wrench.dmi'
icon_state = "impact_wrench-screw"
item_state = "impact_wrench"
contained_sprite = TRUE