mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-31 20:43:38 +00:00
This should have little/no gameplay effect right now, just paving the way for directional lights. Replaced handle_rotation() on buckly things with this. Signed-off-by: Mloc-Argent <colmohici@gmail.com>
210 lines
6.6 KiB
Plaintext
210 lines
6.6 KiB
Plaintext
/obj/item/device/floor_painter
|
|
name = "floor painter"
|
|
icon = 'icons/obj/bureaucracy.dmi'
|
|
icon_state = "labeler1"
|
|
item_state = "flight"
|
|
|
|
var/mode_nice = "standard"
|
|
var/mode = "floor"
|
|
var/tile_dir_mode = 0
|
|
|
|
// 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)
|
|
if(!proximity)
|
|
return
|
|
|
|
if(istype(A, /turf/simulated/floor))
|
|
var/turf/simulated/floor/F = A
|
|
|
|
if(F.is_plasteel_floor()) // only tiled floors
|
|
if(tile_dir_mode)
|
|
var/D = get_dir(usr, F)
|
|
if(usr.loc == F)
|
|
D = usr.dir
|
|
|
|
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 << "You can't paint that!"
|
|
|
|
/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 == "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-grey", "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"
|
|
tile_dir_mode = 1
|
|
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")
|
|
mode_nice = design
|
|
mode = 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"
|
|
|
|
/obj/item/device/floor_painter/examine(mob/user)
|
|
..(user)
|
|
user << "It is in [mode_nice] mode."
|