Paint gun consolidation and crate/locker painting (#21902)

We don't need a million paint guns. Makes it so a single paint gun can
paint whatever you want. Which now also includes crates and lockers.

changes:
- rscadd: "Paint sprayers can now be used on unpainted crates and
lockers to give them a custom appearance."
  - rscadd: "Adds paint sprayers to Hangar Tech lockers."
- qol: "Moves pipe painter functionality to paint sprayers; pipe
painters now just flavor objects on some offsites."
- qol: "Adds paint sprayers to allowed items list for utility
toolbelts."
- imageadd: "Codersprites pipe painter with recolorable paint storage
component indicating current color (used by paint sprayer)."
  - imagedel: "Removes old paint sprayer sprite."
- bugfix: "Removes old runtime caused by targeting turfs w/ paint
sprayers that don't have flooring singletons assigned."

<img width="496" height="505" alt="Screenshot 2026-02-20 142403"
src="https://github.com/user-attachments/assets/152ea63a-4baf-48e5-864e-400caef9efc6"
/>
<img width="515" height="429" alt="Screenshot 2026-02-20 142424"
src="https://github.com/user-attachments/assets/cb05b674-ac4f-4e2f-8f17-9d8654f099ff"
/>
<img width="450" height="102" alt="image"
src="https://github.com/user-attachments/assets/aa6e51b5-a325-4e8c-baf8-21134843fbf2"
/>
This commit is contained in:
Batrachophreno
2026-02-27 01:12:05 +00:00
committed by GitHub
parent e31b9729aa
commit 8e602afb32
16 changed files with 235 additions and 56 deletions
+1 -1
View File
@@ -56,7 +56,7 @@ Pipelines + Other Objects -> Pipe network
atmos_init()
/obj/machinery/atmospherics/attackby(obj/item/attacking_item, mob/user)
if(istype(attacking_item, /obj/item/pipe_painter))
if(istype(attacking_item, /obj/item/paint_sprayer))
return FALSE
..()
+2 -2
View File
@@ -95,7 +95,7 @@
if (istype(src, /obj/machinery/atmospherics/pipe/tank))
return ..()
if(istype(attacking_item,/obj/item/pipe_painter))
if(istype(attacking_item,/obj/item/paint_sprayer))
return FALSE
if(istype(attacking_item, /obj/item/analyzer) && Adjacent(user))
@@ -1303,7 +1303,7 @@
return null
/obj/machinery/atmospherics/pipe/tank/attackby(obj/item/attacking_item, mob/user)
if(istype(attacking_item, /obj/item/pipe_painter))
if(istype(attacking_item, /obj/item/paint_sprayer))
return FALSE
if(istype(attacking_item, /obj/item/analyzer) && in_range(user, src))
+3 -3
View File
@@ -208,14 +208,14 @@
groupable = FALSE
spawn_amount = 1
/singleton/cargo_item/pipepainter
/singleton/cargo_item/paint_sprayer
category = "atmos"
name = "pipe painter"
name = "paint sprayer"
supplier = "hephaestus"
description = "Its said that green pipes are safe to travel through."
price = 25
items = list(
/obj/item/pipe_painter
/obj/item/paint_sprayer
)
access = ACCESS_ENGINE
container_type = "crate"
+1 -1
View File
@@ -6,7 +6,7 @@
item_state = "hazard"
contained_sprite = TRUE
blood_overlay_type = "armor"
allowed = list (/obj/item/analyzer, /obj/item/flashlight, /obj/item/multitool, /obj/item/pipe_painter, /obj/item/radio, /obj/item/t_scanner, \
allowed = list (/obj/item/analyzer, /obj/item/flashlight, /obj/item/multitool, /obj/item/paint_sprayer, /obj/item/radio, /obj/item/t_scanner, \
/obj/item/crowbar, /obj/item/screwdriver, /obj/item/weldingtool, /obj/item/wirecutters, /obj/item/wrench, /obj/item/tank/emergency_oxygen, \
/obj/item/clothing/mask/gas, /obj/item/taperoll/engineering, /obj/item/storage/bag/inflatable)
body_parts_covered = UPPER_TORSO
@@ -372,7 +372,6 @@ GLOBAL_LIST_INIT(robot_modules, list(
modules += new /obj/item/screwdriver/robotic(src)
modules += new /obj/item/wrench/robotic(src)
modules += new /obj/item/weldingtool/experimental(src)
modules += new /obj/item/pipe_painter(src)
modules += new /obj/item/gripper/no_use/loader(src)
modules += new /obj/item/gripper(src)
modules += new /obj/item/t_scanner(src) // to check underfloor wiring
@@ -443,7 +442,6 @@ GLOBAL_LIST_INIT(robot_modules, list(
modules += new /obj/item/gripper(src)
modules += new /obj/item/gripper/no_use/loader(src)
modules += new /obj/item/lightreplacer(src)
modules += new /obj/item/pipe_painter(src)
modules += new /obj/item/paint_sprayer(src)
modules += new /obj/item/taperoll/engineering(src) // To enable 'borgs to telegraph danger visually.
modules += new /obj/item/inflatable_dispenser(src) // To enable 'borgs to protect Crew from danger in direct hazards.
@@ -984,7 +982,6 @@ GLOBAL_LIST_INIT(robot_modules, list(
modules += new /obj/item/lightreplacer(src)
modules += new /obj/item/soap/drone(src)
modules += new /obj/item/extinguisher(src)
modules += new /obj/item/pipe_painter(src)
modules += new /obj/item/paint_sprayer(src)
modules += new /obj/item/t_scanner(src)
modules += new /obj/item/gripper/multi_purpose(src)