Add constructable floor lights + mapping subtypes (#93537)

## About The Pull Request
Features:
- Floor lights can be constructed using a small light fixture on the
turf you are standing on
- Floor light construction sprites
- `/burned` subtypes for lights
- Convert `/build` subtypes to `/empty` subtypes with `UpdatePaths`
script

## Why It's Good For The Game
Floor lights can now be constructed in game using the same mechanics as
other lights. The `/burned` and `/empty` subtypes might be useful for
mapping.

## Changelog
🆑
add: Add constructable floor lights by using a small light fixture on
the floor. They are constructed the same way as other lights.
qol: Add `/burned` subtype to `/obj/machinery/light` for mapping
shenanigans
image: Add floor light construction sprites
map: Converted the `/built` subtype for `/obj/machinery/light` to be
`/empty` and added an UpdatePaths script.
/🆑

---------

Co-authored-by: SyncIt21 <110812394+SyncIt21@users.noreply.github.com>
This commit is contained in:
Tim
2025-11-10 02:17:51 -06:00
committed by GitHub
parent bf4a53d6dc
commit e30b7d97ef
27 changed files with 209 additions and 139 deletions
@@ -20,3 +20,35 @@
to_chat(user, span_warning("You cannot place [src] in this area!"))
return
return TRUE
/obj/item/wallframe/light_fixture/small/attack_self(mob/user)
var/turf/local_turf = get_turf(user)
var/area/local_area = get_area(user)
if(!isturf(user.loc) || !isfloorturf(local_turf))
balloon_alert(user, "cannot place here!")
return
if(local_area.always_unpowered || !local_area.static_lighting)
balloon_alert(user, "cannot place in this area!")
return
for(var/obj/object in local_turf)
if(object.density && !(object.obj_flags & IGNORE_DENSITY) || object.obj_flags & BLOCKS_CONSTRUCTION)
balloon_alert(user, "something is in the way!")
return
if(local_turf.underfloor_accessibility < UNDERFLOOR_INTERACTABLE)
balloon_alert(user, "remove the floor plating!")
return
if(locate(/obj/structure/light_construct/floor) in local_turf)
balloon_alert(user, "already has a light!")
return
if(locate(/obj/machinery/light/floor) in local_turf)
balloon_alert(user, "already has a light!")
return
playsound(src.loc, 'sound/machines/click.ogg', 75, TRUE)
user.visible_message(span_notice("[user.name] attaches [src] to the floor."),
span_notice("You attach [src] to the floor."),
span_hear("You hear clicking."))
new /obj/structure/light_construct/floor(local_turf)
qdel(src)