mirror of
https://github.com/Aurorastation/Aurora.3.git
synced 2026-07-20 12:29:23 +01:00
0851144182
**Goals:** 1. Delete area definitions no longer used in any map or file. 2. Update area definitions such that everything used in mapping the Horizon exists in 'maps\sccv_horizon\areas' with the parent 'area\horizon\'. 3. Reorganize/rename/restructure those Horizon area definitions to make future mapping easier and code that hooks into area properties easier. 4. Present area names and blurbs in the status panel. This PR only handles Horizon and Runtime areas, for digestibility/ease of reviewing. Offsite areas for another PR. Naming convention reference: The /area/ 'name' variable no longer contains either 'Horizon' or the Deck# of the area or its approx location on the ship. All Horizon areas now have several new variables as metadata-- area names now need only be strictly descriptive, and the appropriate constants used in the area definition, and a new function generates the display name with consistent formatting for us. Detailed documentation to follow after any adjustments are made to mappers' preferences. This also adds area blurbs to most areas- if not bespoke, then general department-wide blurbs to parents. I know feature creep always sucks, but while some areas having pre-existing blurbs, the overwhelming majority of areas don't, and while testing it was very distracting to see them randomly appearing and disappearing. Most blurbs are pretty basic but I feel are entirely presentable- more clever individual ones can follow in a separate PR.
175 lines
4.9 KiB
Plaintext
175 lines
4.9 KiB
Plaintext
/turf/simulated
|
|
name = "station"
|
|
var/wet_type = 0
|
|
var/wet_amount = 0
|
|
var/image/wet_overlay = null
|
|
|
|
var/thermite = 0
|
|
initial_gas = list("oxygen" = MOLES_O2STANDARD, "nitrogen" = MOLES_N2STANDARD)
|
|
var/dirt = 0
|
|
|
|
var/unwet_timer // Used to keep track of the unwet timer & delete it on turf change so we don't runtime if the new turf is not simulated.
|
|
|
|
roof_type = /turf/simulated/floor/airless/ceiling
|
|
|
|
baseturf = /turf/space
|
|
|
|
/turf/simulated/Initialize(mapload)
|
|
if (mapload)
|
|
if(istype(loc, /area/horizon/service/chapel))
|
|
holy = 1
|
|
|
|
. = ..()
|
|
levelupdate(mapload)
|
|
if (!mapload)
|
|
updateVisibility(src)
|
|
|
|
/turf/simulated/proc/update_dirt()
|
|
dirt = min(dirt+1, 101)
|
|
var/obj/effect/decal/cleanable/dirt/dirtoverlay = locate(/obj/effect/decal/cleanable/dirt, src)
|
|
if (dirt > 50)
|
|
if (!dirtoverlay)
|
|
dirtoverlay = new/obj/effect/decal/cleanable/dirt(src)
|
|
dirtoverlay.alpha = min((dirt - 50) * 5, 255)
|
|
|
|
/turf/simulated/Entered(atom/movable/arrived, atom/old_loc)
|
|
if(movement_disabled && usr.ckey != movement_disabled_exception)
|
|
to_chat(usr, SPAN_WARNING("Movement is admin-disabled.")) //This is to identify lag problems)
|
|
return
|
|
|
|
if(istype(arrived, /mob/living))
|
|
var/mob/living/M = arrived
|
|
//if the turf is wet, the mob is not buckled, and either it's not wet with water or the mob is running, slip it
|
|
if(src.wet_type && src.wet_amount && !M.buckled_to && (src.wet_type != WET_TYPE_WATER || M.m_intent != M_WALK))
|
|
|
|
//Defaults to a water slip
|
|
var/slip_dist = 1
|
|
var/slip_stun = 6
|
|
var/floor_type = "wet"
|
|
|
|
switch(src.wet_type)
|
|
if(WET_TYPE_LUBE) // Lube
|
|
floor_type = "slippery"
|
|
slip_dist = 4
|
|
slip_stun = 10
|
|
if(WET_TYPE_ICE) // Ice
|
|
floor_type = "icy"
|
|
slip_stun = 4
|
|
|
|
if(M.slip("the [floor_type] floor",slip_stun) && slip_dist)
|
|
INVOKE_ASYNC(src, PROC_REF(slip_mob), M, slip_dist)
|
|
|
|
if(M.lying)
|
|
return ..()
|
|
|
|
// Ugly hack :c Should never have multiple plants in the same tile.
|
|
var/obj/effect/plant/plant = locate() in contents
|
|
if(plant)
|
|
plant.trodden_on(M)
|
|
|
|
// Dirt overlays.
|
|
update_dirt()
|
|
|
|
M.inertia_dir = 0
|
|
|
|
..()
|
|
|
|
/**
|
|
* Slips a mob, moving it for N tiles
|
|
*
|
|
* Should be called asyncronously, as this process sleep
|
|
*
|
|
* * mob_to_slip - The mob that should be slipped
|
|
* * slip_distance - How many tiles to slip the mob for
|
|
*/
|
|
/turf/simulated/proc/slip_mob(var/mob/mob_to_slip, var/slip_distance)
|
|
for (var/i in 1 to slip_distance)
|
|
sleep(1)
|
|
step(mob_to_slip, mob_to_slip.dir)
|
|
|
|
//returns TRUE if made bloody, returns FALSE otherwise
|
|
/turf/simulated/add_blood(mob/living/carbon/human/M as mob)
|
|
if (!..())
|
|
return FALSE
|
|
|
|
if(istype(M))
|
|
for(var/obj/effect/decal/cleanable/blood/B in contents)
|
|
if(!B.blood_DNA)
|
|
B.blood_DNA = list()
|
|
if(!B.blood_DNA[M.dna.unique_enzymes])
|
|
B.blood_DNA[M.dna.unique_enzymes] = M.dna.b_type
|
|
return TRUE //we bloodied the floor
|
|
blood_splatter(src,M,TRUE)
|
|
return TRUE //we bloodied the floor
|
|
return FALSE
|
|
|
|
// Only adds blood on the floor -- Skie
|
|
/turf/simulated/proc/add_blood_floor(mob/living/carbon/M as mob)
|
|
if( istype(M, /mob/living/carbon/alien ))
|
|
var/obj/effect/decal/cleanable/blood/xeno/this = new /obj/effect/decal/cleanable/blood/xeno(src)
|
|
this.blood_DNA["UNKNOWN BLOOD"] = "X*"
|
|
else if( istype(M, /mob/living/silicon/robot ))
|
|
new /obj/effect/decal/cleanable/blood/oil(src)
|
|
|
|
/turf/simulated/Destroy()
|
|
if (zone && !zone.invalid)
|
|
// Try to remove it gracefully first.
|
|
if (can_safely_remove_from_zone())
|
|
c_copy_air()
|
|
zone.remove(src)
|
|
else // Can't remove it safely, just rebuild the entire thing.
|
|
zone.rebuild()
|
|
|
|
// Letting this timer continue to exist can cause runtimes, so we delete it.
|
|
if (unwet_timer)
|
|
// deltimer will no-op if the timer is already deleted, so we don't need to check the timer still exists.
|
|
deltimer(unwet_timer)
|
|
|
|
return ..()
|
|
|
|
/turf/simulated/proc/wet_floor(var/apply_type = WET_TYPE_WATER, var/amount = 1)
|
|
|
|
//Wet type:
|
|
//WET_TYPE_WATER = water
|
|
//WET_TYPE_LUBE = lube
|
|
//WET_TYPE_ICE = ice
|
|
|
|
if(!wet_type)
|
|
wet_type = apply_type
|
|
else if(apply_type != wet_type)
|
|
if(apply_type == WET_TYPE_WATER && wet_type == WET_TYPE_LUBE)
|
|
wet_type = WET_TYPE_WATER
|
|
else if(apply_type == WET_TYPE_ICE && (wet_type == WET_TYPE_WATER || wet_type == WET_TYPE_LUBE))
|
|
wet_type = apply_type
|
|
|
|
if(wet_amount <= 0)
|
|
wet_amount = 0 //Just in case
|
|
|
|
if(!wet_overlay)
|
|
wet_overlay = image('icons/effects/water.dmi',src,"wet_floor")
|
|
AddOverlays(wet_overlay, ATOM_ICON_CACHE_PROTECTED)
|
|
|
|
wet_amount += amount
|
|
|
|
unwet_timer = addtimer(CALLBACK(src, PROC_REF(unwet_floor)), 120 SECONDS, TIMER_UNIQUE | TIMER_OVERRIDE | TIMER_STOPPABLE)
|
|
|
|
/turf/simulated/proc/unwet_floor()
|
|
wet_amount = 0
|
|
wet_type = 0
|
|
if(wet_overlay)
|
|
CutOverlays(wet_overlay, ATOM_ICON_CACHE_PROTECTED)
|
|
wet_overlay = null
|
|
|
|
/turf/simulated/clean_blood()
|
|
for(var/obj/effect/decal/cleanable/blood/B in contents)
|
|
B.clean_blood()
|
|
..()
|
|
|
|
/turf/simulated/clean(atom/source, mob/user)
|
|
. = ..()
|
|
dirt = 0
|
|
reset_color()
|
|
|
|
/turf/simulated/proc/reset_color()
|
|
color = null
|