mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-09 16:12:17 +00:00
Rewrites the floor painter.
This commit is contained in:
@@ -4,215 +4,100 @@
|
||||
icon_state = "labeler1"
|
||||
item_state = "flight"
|
||||
|
||||
var/mode_nice = "standard"
|
||||
var/mode = "floor"
|
||||
var/tile_dir_mode = 0
|
||||
var/list/decals = list(
|
||||
"white square" = /obj/effect/floor_decal/corner,
|
||||
"blue square" = /obj/effect/floor_decal/corner/blue,
|
||||
"pale blue square" = /obj/effect/floor_decal/corner/paleblue,
|
||||
"green square" = /obj/effect/floor_decal/corner/green,
|
||||
"lime square" = /obj/effect/floor_decal/corner/lime,
|
||||
"yellow square" = /obj/effect/floor_decal/corner/yellow,
|
||||
"beige square" = /obj/effect/floor_decal/corner/beige,
|
||||
"red square" = /obj/effect/floor_decal/corner/red,
|
||||
"pink square" = /obj/effect/floor_decal/corner/pink,
|
||||
"purple square" = /obj/effect/floor_decal/corner/purple,
|
||||
"mauve square" = /obj/effect/floor_decal/corner/mauve,
|
||||
"orange square" = /obj/effect/floor_decal/corner/orange,
|
||||
"brown square" = /obj/effect/floor_decal/corner/brown,
|
||||
"grey square" = /obj/effect/floor_decal/corner/grey,
|
||||
"hazard stripes" = /obj/effect/floor_decal/industrial/warning,
|
||||
"corner, hazard" = /obj/effect/floor_decal/industrial/warning/corner,
|
||||
"hatched marking" = /obj/effect/floor_decal/industrial/hatch,
|
||||
"white outline" = /obj/effect/floor_decal/industrial/outline,
|
||||
"blue outline" = /obj/effect/floor_decal/industrial/outline/blue,
|
||||
"yellow outline" = /obj/effect/floor_decal/industrial/outline/yellow,
|
||||
"grey outline" = /obj/effect/floor_decal/industrial/outline/grey,
|
||||
"loading sign" = /obj/effect/floor_decal/industrial/loading,
|
||||
"1" = /obj/effect/floor_decal/sign,
|
||||
"2" = /obj/effect/floor_decal/sign/two,
|
||||
"A" = /obj/effect/floor_decal/sign/a,
|
||||
"B" = /obj/effect/floor_decal/sign/b,
|
||||
"C" = /obj/effect/floor_decal/sign/c,
|
||||
"D" = /obj/effect/floor_decal/sign/d,
|
||||
"Ex" = /obj/effect/floor_decal/sign/ex,
|
||||
"M" = /obj/effect/floor_decal/sign/m,
|
||||
"CMO" = /obj/effect/floor_decal/sign/cmo,
|
||||
"V" = /obj/effect/floor_decal/sign/v,
|
||||
"Psy" = /obj/effect/floor_decal/sign/p,
|
||||
"remove all decals" = /obj/effect/floor_decal/reset
|
||||
)
|
||||
var/decal = "remove all decals"
|
||||
|
||||
// mode 0 ignore direction; sets dir=0
|
||||
// mode 1 all-direction
|
||||
// mode 2 corner selecting the side CW from the selected corner
|
||||
// mode 3 cardinal
|
||||
// mode 4 warningcorner and warnwhitecorner direction fix
|
||||
// mode 5 Opposite corner tiles where the second icon_state is "[mode]_inv"
|
||||
/obj/item/device/floor_painter/afterattack(atom/A, mob/user as mob, proximity)
|
||||
var/list/paint_dirs = list(
|
||||
"north" = NORTH,
|
||||
"northwest" = NORTHWEST,
|
||||
"west" = WEST,
|
||||
"southwest" = SOUTHWEST,
|
||||
"south" = SOUTH,
|
||||
"southeast" = SOUTHEAST,
|
||||
"east" = EAST,
|
||||
"northeast" = NORTHEAST,
|
||||
"user-facing" = 0
|
||||
)
|
||||
var/paint_dir = "user-facing"
|
||||
|
||||
/obj/item/device/floor_painter/afterattack(var/atom/A, var/mob/user, proximity)
|
||||
if(!proximity)
|
||||
return
|
||||
|
||||
if(istype(A, /turf/simulated/floor))
|
||||
var/turf/simulated/floor/F = A
|
||||
var/turf/simulated/floor/F = A
|
||||
if(!istype(F))
|
||||
user << "<span class='warning'>\The [src] can only be used on station flooring.</span>"
|
||||
return
|
||||
|
||||
if(F.flooring && F.flooring.name == "floor") // only tiled floors
|
||||
if(F.broken || F.burnt)
|
||||
usr << "<span class='warning'>\The [F] is too damaged to repaint.</span>"
|
||||
return
|
||||
if(tile_dir_mode)
|
||||
var/D = get_dir(usr, F)
|
||||
if(usr.loc == F)
|
||||
D = usr.dir
|
||||
if(!F.flooring || !F.flooring.can_paint || F.broken || F.burnt)
|
||||
user << "<span class='warning'>\The [src] cannot paint broken or missing tiles.</span>"
|
||||
return
|
||||
|
||||
switch(tile_dir_mode)
|
||||
if(1) // All directions accepted
|
||||
F.set_dir(D)
|
||||
F.icon_state = mode
|
||||
if(2) // Corner mode - diagonal directions converted CW around.
|
||||
switch(D)
|
||||
if(NORTHEAST)
|
||||
D = EAST
|
||||
if(SOUTHEAST)
|
||||
D = SOUTH
|
||||
if(SOUTHWEST)
|
||||
D = WEST
|
||||
if(NORTHWEST)
|
||||
D = NORTH
|
||||
F.set_dir(D)
|
||||
F.icon_state = mode
|
||||
if(3) // cardinal directions only. I've adjusted diagonals the same way the facing code does.
|
||||
switch(D)
|
||||
if(NORTHEAST)
|
||||
D = EAST
|
||||
if(SOUTHEAST)
|
||||
D = EAST
|
||||
if(SOUTHWEST)
|
||||
D = WEST
|
||||
if(NORTHWEST)
|
||||
D = WEST
|
||||
F.set_dir(D)
|
||||
F.icon_state = mode
|
||||
if(4) // floors.dmi icon_states "warningcorner" and "warnwhitecorner" are incorrect, this fixes it
|
||||
var/D2
|
||||
switch(D)
|
||||
if(NORTHEAST)
|
||||
D2 = WEST
|
||||
if(SOUTHEAST)
|
||||
D2 = SOUTH
|
||||
if(SOUTHWEST)
|
||||
D2 = NORTH
|
||||
if(NORTHWEST)
|
||||
D2 = EAST
|
||||
F.set_dir(D2)
|
||||
F.icon_state = mode
|
||||
if(5)
|
||||
F.set_dir(0)
|
||||
if(D == NORTH || D == SOUTH || D == NORTHEAST || D == SOUTHWEST)
|
||||
F.icon_state = mode
|
||||
else
|
||||
F.icon_state = "[mode]_inv"
|
||||
else
|
||||
F.set_dir(0)
|
||||
F.icon_state = mode
|
||||
else
|
||||
usr << "<span class='warning'>You can't paint that!</span>"
|
||||
if(F.decals && F.decals.len > 5)
|
||||
user << "<span class='warning'>\The [F] has been painted too much; you need to clear it off.</span>"
|
||||
return
|
||||
|
||||
var/painting_decal = decals[decal]
|
||||
if(!ispath(painting_decal))
|
||||
user << "<span class='warning'>\The [src] flashes an error light. You might need to reconfigure it.</span>"
|
||||
return
|
||||
|
||||
var/painting_dir = 0
|
||||
if(paint_dir == "user-facing")
|
||||
painting_dir = user.dir
|
||||
else if(paint_dirs[paint_dir])
|
||||
painting_dir = paint_dirs[paint_dir]
|
||||
new painting_decal(F, painting_dir)
|
||||
|
||||
/obj/item/device/floor_painter/attack_self(mob/user as mob)
|
||||
var/type = input("What type of floor?", "Floor painter", "solid") in list("solid", "corner", "opposite corners", "side/three corners", "special", "letters")
|
||||
|
||||
tile_dir_mode = 0
|
||||
|
||||
switch(type)
|
||||
if("solid")
|
||||
tile_dir_mode = 0
|
||||
var/design = input("Which color?", "Floor painter") in list("standard", "dark", "red", "blue", "green", "yellow", "purple", "neutral", "white", "white-red", "white-blue", "white-green", "white-yellow", "white-purple", "freezer", "hydro", "showroom")
|
||||
if(design == "standard")
|
||||
mode = "floor"
|
||||
mode_nice = "standard"
|
||||
return
|
||||
if(design == "white")
|
||||
mode = "white"
|
||||
mode_nice = "white"
|
||||
return
|
||||
if(design == "dark")
|
||||
mode = "dark"
|
||||
mode_nice = "dark"
|
||||
return
|
||||
if(design == "showroom" || design == "hydro" || design == "freezer")
|
||||
mode = "[design]floor"
|
||||
mode_nice = design
|
||||
return
|
||||
mode_nice = design
|
||||
mode = "[replacetext(design, "-", "")]full"
|
||||
if("corner")
|
||||
var/design = input("Which design?", "Floor painter") in list("black", "red", "blue", "green", "yellow", "purple", "neutral", "white", "white-red", "white-blue", "white-green", "white-yellow", "white-purple")
|
||||
mode_nice = "[design] corner"
|
||||
mode = "[replacetext(design, "-", "")]corner"
|
||||
tile_dir_mode = 2
|
||||
if("opposite corners")
|
||||
var/design = input("Which design?", "Floor painter") in list("bar", "cmo", "yellowpatch", "cafeteria", "red-yellow", "red-blue", "red-green", "green-yellow", "green-blue", "blue-yellow")
|
||||
mode_nice = design
|
||||
if(design == "bar" || design == "cmo" || design == "yellowpatch" || design == "cafeteria")
|
||||
mode = design
|
||||
else
|
||||
mode = "[replacetext(design, "-", "")]full"
|
||||
if(design == "yellowpatch")
|
||||
tile_dir_mode = 5
|
||||
else
|
||||
tile_dir_mode = 0
|
||||
if("side/three corners")
|
||||
var/design = input("Which design?", "Floor painter") in list("black", "red", "blue", "green", "yellow", "purple", "neutral", "white", "white-red", "white-blue", "white-green", "white-yellow", "white-purple", "red-yellow", "red-blue", "blue-red", "red-green", "green-yellow", "green-blue", "blue-yellow")
|
||||
if(design == "white")
|
||||
mode = "whitehall"
|
||||
mode_nice = "white side"
|
||||
else if(design == "black") // because SOMEONE made the black/grey side/corner sprite have the same name as the 'empty space' sprite :(
|
||||
mode = "blackfloor"
|
||||
mode_nice = design
|
||||
else
|
||||
mode_nice = design
|
||||
mode = replacetext(design, "-", "")
|
||||
tile_dir_mode = 1
|
||||
if("special")
|
||||
var/design = input("Which design?", "Floor painter") in list("arrival", "escape", "caution", "warning", "white-warning", "white-blue-green", "loadingarea", "delivery", "bot", "white-delivery", "white-bot")
|
||||
if(design == "white-blue-green")
|
||||
mode_nice = design
|
||||
mode = "whitebluegreencorners"
|
||||
tile_dir_mode = 2
|
||||
else if(design == "delivery" || design == "bot" || design == "white-delivery" || design == "white-bot")
|
||||
mode_nice = design
|
||||
mode = replacetext(design, "-", "")
|
||||
tile_dir_mode = 0
|
||||
else if(design == "loadingarea")
|
||||
mode_nice = design
|
||||
mode = design
|
||||
tile_dir_mode = 3
|
||||
else
|
||||
if(design == "white-warning")
|
||||
mode_nice = design
|
||||
design = "warnwhite"
|
||||
var/s_corner = alert("Do you want to paint a single corner of the tile?", "Floor painter","Yes","No") == "Yes"
|
||||
if(s_corner)
|
||||
mode_nice = "[design] corner"
|
||||
mode = "[design]corner"
|
||||
if(design == "warning" || design == "white-warning") // sprites for these are weird, need to fix dirs (icons/turf/floors.dmi, "warningcorner" and "warnwhitecorner")
|
||||
tile_dir_mode = 4
|
||||
else
|
||||
tile_dir_mode = 2
|
||||
else
|
||||
mode_nice = design
|
||||
mode = design
|
||||
tile_dir_mode = 1
|
||||
if("letters")
|
||||
var/which = input("Which letters/design?", "Floor painter") in list("A1", "A2", "DI", "SA", "SA (red)", "SB", "SB (red)", "SC", "SC (red)", "W (red)", "V (green)", "Psy", "Ex", "Ex (blue)", "CMO", "O (OP)", "P (OP)")
|
||||
mode_nice = which
|
||||
switch(which)
|
||||
if("A1")
|
||||
mode = "white_1"
|
||||
if("A2")
|
||||
mode = "white_2"
|
||||
if("DI")
|
||||
mode = "white_d"
|
||||
if("SA")
|
||||
mode = "white_a"
|
||||
if("SA (red)")
|
||||
mode = "whitered_a"
|
||||
tile_dir_mode = 3
|
||||
if("SB")
|
||||
mode = "white_b"
|
||||
if("SB (red)")
|
||||
mode = "whitered_b"
|
||||
tile_dir_mode = 3
|
||||
if("SC")
|
||||
mode = "white_c"
|
||||
if("SC (red)")
|
||||
mode = "whitered_c"
|
||||
tile_dir_mode = 3
|
||||
if("W (red)")
|
||||
mode = "whitered_w"
|
||||
tile_dir_mode = 3
|
||||
if("V (green)")
|
||||
mode = "whitegreen_v"
|
||||
tile_dir_mode = 3
|
||||
if("Psy")
|
||||
mode = "white_p"
|
||||
if("Ex")
|
||||
mode = "white_ex"
|
||||
if("Ex (blue)")
|
||||
mode = "whiteblue_ex"
|
||||
tile_dir_mode = 3
|
||||
if("CMO") // yes this is also in "opposite corners" choices, but it's a different icon_state (!!)
|
||||
mode = "white_cmo"
|
||||
if("O (OP)")
|
||||
mode = "white_halfo"
|
||||
if("P (OP)")
|
||||
mode = "white_halfp"
|
||||
var/choice = input("Do you wish to change the decal type or the paint direction?") as null|anything in list("Decal","Direction")
|
||||
if(choice == "Decal")
|
||||
var/new_decal = input("Select a decal.") as null|anything in decals
|
||||
if(new_decal && !isnull(decals[new_decal]))
|
||||
decal = new_decal
|
||||
user << "<span class='notice'>You set \the [src] decal to '[decal]'.</span>"
|
||||
else if(choice == "Direction")
|
||||
var/new_dir = input("Select a direction.") as null|anything in paint_dirs
|
||||
if(new_dir && !isnull(paint_dirs[new_dir]))
|
||||
paint_dir = new_dir
|
||||
user << "<span class='notice'>You set \the [src] direction to '[paint_dir]'.</span>"
|
||||
|
||||
/obj/item/device/floor_painter/examine(mob/user)
|
||||
..(user)
|
||||
user << "It is in [mode_nice] mode."
|
||||
user << "It is configured to paint the '[decal]' decal with a direction of '[paint_dir]'."
|
||||
|
||||
@@ -36,6 +36,7 @@ var/list/flooring_types
|
||||
|
||||
var/descriptor = "tiles"
|
||||
var/flags
|
||||
var/can_paint
|
||||
|
||||
/decl/flooring/grass
|
||||
name = "grass"
|
||||
@@ -79,12 +80,14 @@ var/list/flooring_types
|
||||
damage_temperature = T0C+1400
|
||||
flags = TURF_REMOVE_CROWBAR | TURF_CAN_BREAK | TURF_CAN_BURN
|
||||
build_type = /obj/item/stack/tile/floor
|
||||
can_paint = 1
|
||||
|
||||
/decl/flooring/linoleum
|
||||
name = "linoleum"
|
||||
desc = "It's like the 2390's all over again."
|
||||
icon = 'icons/turf/flooring/linoleum.dmi'
|
||||
icon_base = "lino"
|
||||
can_paint = 1
|
||||
|
||||
/decl/flooring/tiling/red
|
||||
name = "floor"
|
||||
@@ -153,6 +156,7 @@ var/list/flooring_types
|
||||
build_time = 30
|
||||
apply_thermal_conductivity = 0.025
|
||||
apply_heat_capacity = 325000
|
||||
can_paint = 1
|
||||
|
||||
/decl/flooring/reinforced/circuit
|
||||
name = "processing strata"
|
||||
@@ -160,6 +164,7 @@ var/list/flooring_types
|
||||
icon_base = "bcircuit"
|
||||
build_type = null
|
||||
flags = TURF_ACID_IMMUNE | TURF_CAN_BREAK
|
||||
can_paint = 1
|
||||
|
||||
/decl/flooring/reinforced/circuit/green
|
||||
name = "processing strata"
|
||||
@@ -172,4 +177,5 @@ var/list/flooring_types
|
||||
icon_base = "cult"
|
||||
build_type = null
|
||||
has_damage_range = 6
|
||||
flags = TURF_ACID_IMMUNE | TURF_CAN_BREAK
|
||||
flags = TURF_ACID_IMMUNE | TURF_CAN_BREAK
|
||||
can_paint = null
|
||||
@@ -7,8 +7,14 @@ var/list/floor_decals = list()
|
||||
name = "floor decal"
|
||||
icon = 'icons/turf/flooring/decals.dmi'
|
||||
layer = TURF_LAYER + 0.01
|
||||
var/supplied_dir
|
||||
|
||||
/obj/effect/floor_decal/New(var/newloc, var/newdir)
|
||||
supplied_dir = newdir
|
||||
..(newloc)
|
||||
|
||||
/obj/effect/floor_decal/initialize()
|
||||
if(supplied_dir) set_dir(supplied_dir)
|
||||
var/turf/T = get_turf(src)
|
||||
if(istype(T, /turf/simulated/floor) || istype(T, /turf/unsimulated/floor))
|
||||
var/cache_key = "[alpha]-[color]-[dir]-[icon_state]-[layer]"
|
||||
@@ -24,6 +30,16 @@ var/list/floor_decals = list()
|
||||
qdel(src)
|
||||
return
|
||||
|
||||
/obj/effect/floor_decal/reset
|
||||
name = "reset marker"
|
||||
|
||||
/obj/effect/floor_decal/reset/initialize()
|
||||
var/turf/T = get_turf(src)
|
||||
if(T.decals && T.decals.len)
|
||||
T.decals.Cut()
|
||||
T.update_icon()
|
||||
return
|
||||
|
||||
/obj/effect/floor_decal/corner
|
||||
icon_state = "corner_white"
|
||||
|
||||
@@ -292,3 +308,37 @@ var/list/floor_decals = list()
|
||||
/obj/effect/floor_decal/ss13/l16
|
||||
name = "L16"
|
||||
icon_state = "L16"
|
||||
|
||||
/obj/effect/floor_decal/sign
|
||||
name = "floor sign"
|
||||
icon_state = "white_1"
|
||||
|
||||
/obj/effect/floor_decal/sign/two
|
||||
icon_state = "white_2"
|
||||
|
||||
/obj/effect/floor_decal/sign/a
|
||||
icon_state = "white_a"
|
||||
|
||||
/obj/effect/floor_decal/sign/b
|
||||
icon_state = "white_b"
|
||||
|
||||
/obj/effect/floor_decal/sign/c
|
||||
icon_state = "white_c"
|
||||
|
||||
/obj/effect/floor_decal/sign/d
|
||||
icon_state = "white_d"
|
||||
|
||||
/obj/effect/floor_decal/sign/ex
|
||||
icon_state = "white_ex"
|
||||
|
||||
/obj/effect/floor_decal/sign/m
|
||||
icon_state = "white_m"
|
||||
|
||||
/obj/effect/floor_decal/sign/cmo
|
||||
icon_state = "white_cmo"
|
||||
|
||||
/obj/effect/floor_decal/sign/v
|
||||
icon_state = "white_v"
|
||||
|
||||
/obj/effect/floor_decal/sign/p
|
||||
icon_state = "white_p"
|
||||
@@ -1,6 +1,6 @@
|
||||
var/list/flooring_cache = list()
|
||||
|
||||
/turf/simulated/floor/proc/update_icon(var/update_neighbors)
|
||||
/turf/simulated/floor/update_icon(var/update_neighbors)
|
||||
|
||||
if(lava)
|
||||
return
|
||||
|
||||
@@ -35,7 +35,7 @@
|
||||
reinf_material = newrmaterial
|
||||
update_material()
|
||||
|
||||
/turf/simulated/wall/proc/update_icon()
|
||||
/turf/simulated/wall/update_icon()
|
||||
if(!material)
|
||||
return
|
||||
|
||||
|
||||
@@ -33,6 +33,9 @@
|
||||
return
|
||||
turfs |= src
|
||||
|
||||
/turf/proc/update_icon()
|
||||
return
|
||||
|
||||
/turf/Destroy()
|
||||
turfs -= src
|
||||
..()
|
||||
|
||||
@@ -3,4 +3,5 @@ delete-after: True
|
||||
changes:
|
||||
- tweak: "Rewrote tiling. White floors, dark floors and freezer floors now have associated tiles."
|
||||
- tweak: "Changed how decals work in the mapper. floor_decal is now used instead of an icon in floors.dmi."
|
||||
- tweak: "The floor painter has been rewritten to use decals. Click it in-hand to set direction and decal."
|
||||
- tweak: "Floor lights are now built from the autholathe, secured with a screwdriver, activated by clicking them with an empty hand, and repaired with a welding torch."
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 50 KiB After Width: | Height: | Size: 57 KiB |
Reference in New Issue
Block a user