From a3c9cfb2edf128b256e8632f6905324281a9781d Mon Sep 17 00:00:00 2001 From: deathride58 Date: Mon, 4 Dec 2017 18:02:08 -0500 Subject: [PATCH] optimization, removes blood/oil turning dirt red/black to improve performance, moves footstep proc to /living/move instead of /floor/entered --- modular_citadel/cit_turfs.dm | 71 +++++++++++++++--------------------- 1 file changed, 29 insertions(+), 42 deletions(-) diff --git a/modular_citadel/cit_turfs.dm b/modular_citadel/cit_turfs.dm index b172bb2893..05f5d26198 100644 --- a/modular_citadel/cit_turfs.dm +++ b/modular_citadel/cit_turfs.dm @@ -22,8 +22,11 @@ GLOBAL_LIST_INIT(turf_footstep_sounds, list( "asteroid" = list('modular_citadel/sound/footstep/asteroid1.ogg','modular_citadel/sound/footstep/asteroid2.ogg','modular_citadel/sound/footstep/asteroid3.ogg','modular_citadel/sound/footstep/asteroid4.ogg','modular_citadel/sound/footstep/asteroid5.ogg') )) +/turf/open + var/footstepsounds + /turf/open/floor - var/footstepsounds = "floor" + footstepsounds = "floor" /turf/open/floor/plating footstepsounds = "plating" @@ -34,6 +37,9 @@ GLOBAL_LIST_INIT(turf_footstep_sounds, list( /turf/open/floor/plating/asteroid footstepsounds = "asteroid" +/turf/open/floor/plating/dirt + footstepsounds = "asteroid" + /turf/open/floor/grass footstepsounds = "asteroid" @@ -64,9 +70,13 @@ GLOBAL_LIST_INIT(turf_footstep_sounds, list( /turf/open/floor/Entered(atom/obj, atom/oldloc) . = ..() CitDirtify(obj, oldloc) - CitFootstep(obj) -//Baystation-styled tile dirtification. Except 31 lines more complex than it probably has to be. +/mob/living/Move(atom/newloc, direct) + . = ..() + if(makesfootstepsounds) + CitFootstep(newloc) + +//Baystation-styled tile dirtification. /turf/open/floor/proc/CitDirtify(atom/obj, atom/oldloc) if(prob(50)) if(has_gravity(src) && !isobserver(obj)) @@ -81,47 +91,24 @@ GLOBAL_LIST_INIT(turf_footstep_sounds, list( var/obj/effect/decal/cleanable/dirt/spreadindirt = locate(/obj/effect/decal/cleanable/dirt, oldloc) if(spreadindirt && spreadindirt.alpha) dirtamount += round(spreadindirt.alpha * 0.05) - dirtamount = min(dirtamount,255) - var/mob/living/carbon/human/H = obj - if(H && istype(H, /mob/living/carbon/human)) - var/obj/item/clothing/shoes/S = H.shoes - if(S && !(S.blood_state == BLOOD_STATE_NOT_BLOODY)) - if(!dirt.atom_colours || !dirt.atom_colours.len) - dirt.add_atom_colour(color_matrix_identity(), FIXED_COLOUR_PRIORITY) - var/list/origdirtcolor = dirt.atom_colours[FIXED_COLOUR_PRIORITY] - var/list/colordirt = color_matrix_identity() - switch(S.blood_state) - if(BLOOD_STATE_HUMAN) - dirt.remove_atom_colour(FIXED_COLOUR_PRIORITY) - colordirt = list(0,0,0,0, 0,-0.15,0,0, 0,0,-0.15,0, 0,0,0,0, 0,0,0,0) - dirt.add_atom_colour(color_matrix_add(origdirtcolor, colordirt), FIXED_COLOUR_PRIORITY) - dirt.alpha = dirtamount - if(BLOOD_STATE_XENO) - dirt.remove_atom_colour(FIXED_COLOUR_PRIORITY) - colordirt = list(-0.15,0,0,0, 0,0,0,0, 0,0,-0.15,0, 0,0,0,0, 0,0,0,0) - dirt.add_atom_colour(color_matrix_add(origdirtcolor, colordirt), FIXED_COLOUR_PRIORITY) - if(BLOOD_STATE_OIL) - dirt.remove_atom_colour(FIXED_COLOUR_PRIORITY) - colordirt = list(-0.15,0,0,0, 0,-0.15,0,0, 0,0,-0.15,0, 0,0,0,0, 0,0,0,0) - dirt.add_atom_colour(color_matrix_add(origdirtcolor, colordirt), FIXED_COLOUR_PRIORITY) - dirt.alpha = dirtamount + dirt.alpha = min(dirtamount,255) return TRUE //The proc that handles footsteps! It's pure, unfiltered spaghetti code. -/turf/open/floor/proc/CitFootstep(atom/obj) - if(obj && has_gravity(src) && footstepsounds && istype(obj, /mob/living)) - var/mob/living/steppingman = obj - steppingman.footstepcount++ - if(steppingman && steppingman.makesfootstepsounds && steppingman.m_intent == MOVE_INTENT_RUN && steppingman.canmove && steppingman.footstepcount >= 3) - steppingman.footstepcount = 0 +/mob/living/proc/CitFootstep(turf/open/floor) + if(floor && istype(floor,/turf/open) && floor.footstepsounds) + if(has_gravity(floor) || prob(25)) + footstepcount++ + if(canmove && !lying && !buckled && makesfootstepsounds && m_intent == MOVE_INTENT_RUN && footstepcount >= 3) + footstepcount = 0 var/overriddenfootstepsound - if(obj.footstepsoundoverride) - if(isfile(obj.footstepsoundoverride)) - overriddenfootstepsound = list(obj.footstepsoundoverride) + if(footstepsoundoverride) + if(isfile(footstepsoundoverride)) + overriddenfootstepsound = list(footstepsoundoverride) else - overriddenfootstepsound = obj.footstepsoundoverride - if(!overriddenfootstepsound && istype(obj, /mob/living/carbon/human)) - var/mob/living/carbon/human/H = obj + overriddenfootstepsound = footstepsoundoverride + if(!overriddenfootstepsound && istype(src, /mob/living/carbon/human)) + var/mob/living/carbon/human/H = src if(H && H.shoes) var/obj/item/clothing/shoes/S = H.shoes if(S && S.footstepsoundoverride) @@ -129,9 +116,9 @@ GLOBAL_LIST_INIT(turf_footstep_sounds, list( overriddenfootstepsound = list(S.footstepsoundoverride) else overriddenfootstepsound = S.footstepsoundoverride - if(!overriddenfootstepsound) + if(!overriddenfootstepsound && floor.contents) var/objschecked - for(var/atom/childobj in contents) + for(var/atom/childobj in floor.contents) if(childobj.footstepsoundoverride && childobj.invisibility < INVISIBILITY_MAXIMUM) if(isfile(childobj.footstepsoundoverride)) overriddenfootstepsound = list(childobj.footstepsoundoverride) @@ -141,4 +128,4 @@ GLOBAL_LIST_INIT(turf_footstep_sounds, list( objschecked++ if(objschecked >= 25) break //walking on 50k foam darts didn't crash the server during my testing, but its better to be safe than sorry - playsound(src,(overriddenfootstepsound ? (islist(overriddenfootstepsound) ? pick(overriddenfootstepsound) : pick(GLOB.turf_footstep_sounds[overriddenfootstepsound])) : (islist(footstepsounds) ? pick(footstepsounds) : pick(GLOB.turf_footstep_sounds[footstepsounds]))),50, 1) + playsound(src,(overriddenfootstepsound ? (islist(overriddenfootstepsound) ? pick(overriddenfootstepsound) : pick(GLOB.turf_footstep_sounds[overriddenfootstepsound])) : (islist(floor.footstepsounds) ? pick(floor.footstepsounds) : pick(GLOB.turf_footstep_sounds[floor.footstepsounds]))),50, 1)