mirror of
https://github.com/Aurorastation/Aurora.3.git
synced 2025-12-22 16:12:19 +00:00
* Openturf icon fixes and improvements * more things * Remove some pointless/bad layering/planing * yeah well I didn't need this anyways * Refactor Z mimickry to be at /turf * more refactoring * Cleanup, use turf/flags instead of z_mimic_flags * Fix turf/Entered() * misc optimizations * fixes * Major icon smoothing optimizations * Speed up boot some more * Fix AO * Remove some redundant code * Tie Z-lights to Z-mimic instead of openturfs * Fix an opacity issue with no_mutate turfs * Fix some issues with Z-mimic AO not properly clearing * Fix some OT->OT changetuf bugs * Add helpers for changing Z-mimic operational state on turfs * Fix some merge issues, change how F_CUT smoothhint works a bit. * indentation * SSopenturf -> SSzcopy
213 lines
6.0 KiB
Plaintext
213 lines
6.0 KiB
Plaintext
/**
|
|
* Open turf class.
|
|
*
|
|
* All atoms are able to pass through this, and also to see under it.
|
|
*/
|
|
/turf/simulated/open
|
|
name = "open space"
|
|
icon = 'icons/turf/space.dmi'
|
|
icon_state = "opendebug"
|
|
plane = PLANE_SPACE_BACKGROUND
|
|
density = 0
|
|
pathweight = 100000 //Seriously, don't try and path over this one numbnuts
|
|
is_hole = TRUE
|
|
flags = MIMIC_BELOW | MIMIC_OVERWRITE | MIMIC_NO_AO
|
|
|
|
roof_type = null
|
|
|
|
// A lazy list to contain a list of mobs who are currently scaling
|
|
// up this turf. Used in human/can_fall.
|
|
|
|
var/tmp/list/climbers
|
|
|
|
// An override of turf/Enter() to make it so that magboots allow you to stop
|
|
// falling off the damned rock.
|
|
/turf/simulated/open/Enter(mob/living/carbon/human/mover, atom/oldloc)
|
|
if (istype(mover) && isturf(oldloc))
|
|
if (mover.Check_Shoegrip(FALSE) && mover.can_fall(below, src))
|
|
to_chat(mover, span("notice",
|
|
"You are stopped from falling off the edge by \the [mover.shoes] you're wearing!"))
|
|
return FALSE
|
|
|
|
return ..()
|
|
|
|
// Add a falling atom by default. Even if it's not an atom that can actually fall.
|
|
// SSfalling will check this on its own and remove if necessary. This is saner, as it
|
|
// centralizes control to SSfalling.
|
|
/turf/simulated/open/Entered(atom/movable/mover)
|
|
..()
|
|
if (is_hole)
|
|
ADD_FALLING_ATOM(mover)
|
|
|
|
// Override to deny a climber exit if they're set to adhere to CLIMBER_NO_EXIT
|
|
/turf/simulated/open/Exit(atom/movable/mover, atom/newloc)
|
|
var/flags = remove_climber(mover)
|
|
|
|
if (flags & CLIMBER_NO_EXIT)
|
|
if (is_hole)
|
|
ADD_FALLING_ATOM(mover)
|
|
return FALSE
|
|
|
|
return ..()
|
|
|
|
// Remove from climbers just in case.
|
|
/turf/simulated/open/Exited(atom/movable/mover, atom/newloc)
|
|
..()
|
|
LAZYREMOVE(climbers, mover)
|
|
|
|
/turf/simulated/open/Destroy()
|
|
LAZYCLEARLIST(climbers)
|
|
UNSETEMPTY(climbers)
|
|
return ..()
|
|
|
|
/**
|
|
* Used to add a climber to the climbers list. Climbers do not fall down this specific tile.
|
|
*
|
|
* @param climber The atom to be added as a climber.
|
|
* @param flags Bitflags to control the status of the climber. Should always be non-0!
|
|
*
|
|
* @return TRUE if a climber was successfully added. FALSE if the climber is already
|
|
* present or an error occured.
|
|
*/
|
|
/turf/simulated/open/proc/add_climber(atom/climber, flags = CLIMBER_DEFAULT)
|
|
if (!flags)
|
|
PROCLOG_WEIRD("Attempted to add climber [climber] without flags.")
|
|
return FALSE
|
|
|
|
if (LAZYACCESS(climbers, climber))
|
|
return FALSE
|
|
|
|
LAZYINITLIST(climbers)
|
|
climbers[climber] = flags
|
|
return TRUE
|
|
|
|
/**
|
|
* Used to remove a climber from the climbers list. Returns the flags the climber
|
|
* was assigned.
|
|
*
|
|
* @param climber The atom to be removed from climbers.
|
|
*
|
|
* @return The flags assigned to the climber if it was present in the list. 0 otherwise.
|
|
*/
|
|
/turf/simulated/open/proc/remove_climber(atom/climber)
|
|
. = 0
|
|
|
|
if (LAZYACCESS(climbers, climber))
|
|
. = climbers[climber]
|
|
LAZYREMOVE(climbers, climber)
|
|
|
|
/turf/simulated/open/airless
|
|
oxygen = 0
|
|
nitrogen = 0
|
|
temperature = TCMB
|
|
icon_state = "opendebug_airless"
|
|
|
|
/turf/simulated/open/chasm
|
|
icon = 'icons/turf/smooth/chasms_seethrough.dmi'
|
|
icon_state = "debug"
|
|
smooth = SMOOTH_TRUE | SMOOTH_BORDER | SMOOTH_NO_CLEAR_ICON
|
|
smoothing_hints = SMOOTHHINT_CUT_F | SMOOTHHINT_ONLY_MATCH_TURF | SMOOTHHINT_TARGETS_NOT_UNIQUE
|
|
flags = MIMIC_BELOW
|
|
name = "hole"
|
|
|
|
/turf/simulated/open/chasm/airless
|
|
oxygen = 0
|
|
nitrogen = 0
|
|
temperature = TCMB
|
|
icon_state = "debug_airless"
|
|
|
|
/turf/simulated/open/chasm/Initialize()
|
|
. = ..()
|
|
icon_state = "Fill"
|
|
|
|
/turf/simulated/open/airless/chasm/get_smooth_underlay_icon(mutable_appearance/underlay_appearance, turf/asking_turf, adjacency_dir)
|
|
underlay_appearance.icon = 'icons/turf/basalt.dmi'
|
|
underlay_appearance.icon_state = "basalt"
|
|
if (prob(20))
|
|
underlay_appearance.icon_state += "[rand(0,12)]"
|
|
return TRUE
|
|
|
|
/turf/simulated/open/post_change()
|
|
..()
|
|
update()
|
|
|
|
/turf/simulated/open/Initialize(mapload)
|
|
. = ..()
|
|
icon_state = "" // Clear out the debug icon.
|
|
SSzcopy.openspace_turfs += src
|
|
shadower = new(src)
|
|
if (!(flags & MIMIC_OVERWRITE) && plane == PLANE_SPACE_BACKGROUND)
|
|
// If the plane is default and we're a no_mutate turf, force it to 0 so the icon works properly.
|
|
plane = 0
|
|
update(mapload)
|
|
|
|
/**
|
|
* Updates the turf with open turf's variables and basically resets it properly.
|
|
*/
|
|
/turf/simulated/open/proc/update(mapload = FALSE)
|
|
below = GetBelow(src)
|
|
|
|
// Edge case for when an open turf is above space on the lowest level.
|
|
if (below)
|
|
below.above = src
|
|
|
|
if (mapload)
|
|
for (var/obj/O in src) // We're not going to try to make mobs fall here for performance reasons - they shouldn't be mapped in on openturfs anyways.
|
|
if (is_hole && O.simulated)
|
|
ADD_FALLING_ATOM(O)
|
|
else
|
|
for (var/thing in src)
|
|
var/obj/O = thing // This might not be an obj.
|
|
if (isobj(O))
|
|
O.hide(0)
|
|
if (is_hole && O.simulated)
|
|
ADD_FALLING_ATOM(O)
|
|
|
|
/turf/simulated/open/update_dirt()
|
|
return 0
|
|
|
|
// override to make sure nothing is hidden
|
|
/turf/simulated/open/levelupdate()
|
|
for(var/obj/O in src)
|
|
O.hide(0)
|
|
|
|
/turf/simulated/open/update_icon(mapload)
|
|
update_mimic(!mapload)
|
|
|
|
/turf/simulated/open/attackby(obj/item/C as obj, mob/user as mob)
|
|
if (istype(C, /obj/item/stack/rods))
|
|
var/obj/structure/lattice/L = locate(/obj/structure/lattice, src)
|
|
if(L)
|
|
return
|
|
var/obj/item/stack/rods/R = C
|
|
if (R.use(1))
|
|
to_chat(user, "<span class='notice'>You lay down the support lattice.</span>")
|
|
playsound(src, 'sound/weapons/Genhit.ogg', 50, 1)
|
|
new /obj/structure/lattice(locate(src.x, src.y, src.z))
|
|
return
|
|
|
|
if (istype(C, /obj/item/stack/tile))
|
|
var/obj/structure/lattice/L = locate(/obj/structure/lattice, src)
|
|
if(L)
|
|
var/obj/item/stack/tile/floor/S = C
|
|
if (S.get_amount() < 1)
|
|
return
|
|
qdel(L)
|
|
playsound(src, 'sound/weapons/Genhit.ogg', 50, 1)
|
|
S.use(1)
|
|
ChangeTurf(/turf/simulated/floor/airless)
|
|
return
|
|
else
|
|
to_chat(user, "<span class='warning'>The plating is going to need some support.</span>")
|
|
|
|
//To lay cable.
|
|
if(iscoil(C))
|
|
var/obj/item/stack/cable_coil/coil = C
|
|
coil.turf_place(src, user)
|
|
return
|
|
return
|
|
|
|
//Most things use is_plating to test if there is a cover tile on top (like regular floors)
|
|
/turf/simulated/open/is_plating()
|
|
return TRUE
|