diff --git a/.github/actions/restore_or_install_byond/action.yml b/.github/actions/restore_or_install_byond/action.yml new file mode 100644 index 0000000000..4b07a61255 --- /dev/null +++ b/.github/actions/restore_or_install_byond/action.yml @@ -0,0 +1,51 @@ +# This action attempts to restore BYOND from a cache, or to install it otherwise. +name: Restore or Install BYOND +description: Attempts to restore a specified BYOND version from cache; if it can't, it installs it. + +inputs: + major: + description: "The major BYOND version to install. Defaults to the BYOND_MAJOR specified in `dependencies.sh`." + required: false + type: string + minor: + description: "The minor BYOND version to install. Defaults to the BYOND_MINOR specified in `dependencies.sh`." + required: false + type: string + +runs: + using: composite + steps: + - name: Configure BYOND version from inputs + if: ${{ inputs.major }} + shell: bash + run: | + echo "BYOND_MAJOR=${{ inputs.major }}" >> $GITHUB_ENV + echo "BYOND_MINOR=${{ inputs.minor }}" >> $GITHUB_ENV + - name: Configure BYOND version from dependencies.sh + if: ${{ !inputs.major }} + shell: bash + run: | + source dependencies.sh + echo "BYOND_MAJOR=$BYOND_MAJOR" >> $GITHUB_ENV + echo "BYOND_MINOR=$BYOND_MINOR" >> $GITHUB_ENV + + # The use of `actions/cache/restore` and `actions/cache/save` here is deliberate, as we want to + # save the BYOND install to a cache as early as possible. If we used just `actions/cache`, it + # would only attempt to save the cache at the end of a job. This ensures that if a workflow run + # is cancelled, we already have a cache to restore from. + - name: Restore BYOND cache + id: restore_byond_cache + uses: actions/cache/restore@v4 + with: + path: ~/BYOND + key: ${{ runner.os }}-byond-${{ env.BYOND_MAJOR }}-${{ env.BYOND_MINOR }} + - name: Install BYOND + if: ${{ !steps.restore_byond_cache.outputs.cache-hit }} + shell: bash + run: bash tools/ci/install_byond.sh + - name: Save BYOND cache + if: ${{ !steps.restore_byond_cache.outputs.cache-hit }} + uses: actions/cache/save@v4 + with: + path: ~/BYOND + key: ${{ steps.restore_byond_cache.outputs.cache-primary-key }} diff --git a/.github/actions/setup_node/action.yml b/.github/actions/setup_node/action.yml new file mode 100644 index 0000000000..120dbf4639 --- /dev/null +++ b/.github/actions/setup_node/action.yml @@ -0,0 +1,26 @@ +# This action is a wrapper around `actions/setup-node`, to use the version specified in +# `dependencies.sh`. +name: Setup Node +description: Install Node using the version specified in `dependencies.sh`; additionally, restores the Yarn cache if one exists + +inputs: + restore-yarn-cache: + description: 'If `true`, restores the Yarn cache alongside installing node.' + required: false + type: boolean + default: false + +runs: + using: composite + steps: + - name: Configure Node version + shell: bash + run: | + source dependencies.sh + echo "NODE_VERSION_REQUIRED=$NODE_VERSION_LTS" >> $GITHUB_ENV + - name: Install Node + uses: actions/setup-node@v4 + with: + node-version: ${{ env.NODE_VERSION_REQUIRED }} + cache: ${{ fromJSON(inputs.restore-yarn-cache) && 'yarn' || '' }} + cache-dependency-path: ${{ fromJSON(inputs.restore-yarn-cache) && 'tgui/yarn.lock' || '' }} diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 576f027431..9c409bc57b 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -20,23 +20,10 @@ jobs: with: fetch-depth: 0 # Caches - - name: Ensure +x on CI directory - run: | - chmod -R +x ./tools/ci - - name: Restore Yarn cache - uses: actions/cache@v4 + - name: Setup Node + uses: ./.github/actions/setup_node with: - path: tgui/.yarn/cache - key: ${{ runner.os }}-yarn-${{ hashFiles('tgui/yarn.lock') }} - restore-keys: | - ${{ runner.os }}-yarn- - - name: Restore Node cache - uses: actions/cache@v4 - with: - path: ~/.nvm - key: ${{ runner.os }}-node-${{ hashFiles('dependencies.sh') }} - restore-keys: | - ${{ runner.os }}-node- + restore-yarn-cache: true - name: Restore Bootstrap cache uses: actions/cache@v4 with: @@ -60,7 +47,6 @@ jobs: - name: Install Tools run: | pip3 install setuptools - bash tools/ci/install_build_deps.sh bash tools/ci/install_ripgrep.sh bash tools/ci/install_spaceman_dmm.sh dmm-tools tools/bootstrap/python -c '' @@ -139,24 +125,21 @@ jobs: - name: Ensure +x on CI directory run: | chmod -R +x ./tools/ci - - name: Restore BYOND Cache - uses: actions/cache@v4 + - name: Restore BYOND from Cache + uses: ./.github/actions/restore_or_install_byond with: - path: $HOME/byond - key: ${{ runner.os }}-byond + major: ${{ inputs.major }} + minor: ${{ inputs.minor }} - name: Install RUST_G Dependencies run: | sudo dpkg --add-architecture i386 sudo apt update || true - sudo apt install gcc-multilib sudo apt install zlib1g-dev:i386 ldd librust_g.so ldd libbapi_dmm_reader.so ldd libverdigris.so - name: Unit Tests - run: | - tools/ci/install_byond.sh - tools/ci/compile_and_run.sh + run: tools/ci/compile_and_run.sh env: EXTRA_ARGS: "-DUNIT_TEST -D${{ matrix.map }}" RUN: "1" diff --git a/code/_onclick/hud/alert.dm b/code/_onclick/hud/alert.dm index a5a31f1309..98c476bd1d 100644 --- a/code/_onclick/hud/alert.dm +++ b/code/_onclick/hud/alert.dm @@ -18,7 +18,7 @@ return var/obj/screen/alert/alert - if(alerts[category]) + if(LAZYACCESS(alerts, category)) alert = alerts[category] if(new_master && new_master != alert.master) WARNING("[src] threw alert [category] with new_master [new_master] while already having that alert with master [alert.master]") @@ -47,7 +47,7 @@ alert.icon_state = "[initial(alert.icon_state)][severity]" alert.severity = severity - alerts[category] = alert + LAZYSET(alerts, category, alert) if(client && hud_used) hud_used.reorganize_alerts() alert.transform = matrix(32, 6, MATRIX_TRANSLATE) @@ -59,16 +59,16 @@ return alert /mob/proc/alert_timeout(obj/screen/alert/alert, category) - if(alert.timeout && alerts[category] == alert && world.time >= alert.timeout) + if(alert.timeout && LAZYACCESS(alerts, category) == alert && world.time >= alert.timeout) clear_alert(category) // Proc to clear an existing alert. /mob/proc/clear_alert(category) - var/obj/screen/alert/alert = alerts[category] + var/obj/screen/alert/alert = LAZYACCESS(alerts, category) if(!alert) return 0 - alerts -= category + LAZYREMOVE(alerts, category) if(client && hud_used) hud_used.reorganize_alerts() client.screen -= alert @@ -434,10 +434,10 @@ so as to remain in compliance with the most up-to-date laws." /datum/hud/proc/reorganize_alerts() var/list/alerts = mymob.alerts if(!hud_shown) - for(var/i = 1, i <= alerts.len, i++) - mymob.client.screen -= alerts[alerts[i]] - return 1 - for(var/i = 1, i <= alerts.len, i++) + for(var/i in 1 to length(alerts)) + mymob?.client?.screen -= alerts[alerts[i]] + return TRUE + for(var/i in 1 to length(alerts)) var/obj/screen/alert/alert = alerts[alerts[i]] if(alert.icon_state in cached_icon_states(ui_style)) @@ -467,7 +467,7 @@ so as to remain in compliance with the most up-to-date laws." return 1 /mob - var/list/alerts = list() // contains /obj/screen/alert only // On /mob so clientless mobs will throw alerts properly + var/list/alerts = null // contains /obj/screen/alert only // On /mob so clientless mobs will throw alerts properly /obj/screen/alert/Click(location, control, params) if(!usr || !usr.client) diff --git a/code/_onclick/hud/fullscreen.dm b/code/_onclick/hud/fullscreen.dm index 8841c19aa8..a9aee0bff8 100644 --- a/code/_onclick/hud/fullscreen.dm +++ b/code/_onclick/hud/fullscreen.dm @@ -1,15 +1,16 @@ /mob - var/list/screens = list() + var/list/screens = null /mob/proc/set_fullscreen(condition, screen_name, screen_type, arg) condition ? overlay_fullscreen(screen_name, screen_type, arg) : clear_fullscreen(screen_name) /mob/proc/overlay_fullscreen(category, type, severity) - var/obj/screen/fullscreen/screen = screens[category] + var/obj/screen/fullscreen/screen = LAZYACCESS(screens, category) if (!screen || screen.type != type) // needs to be recreated clear_fullscreen(category, FALSE) - screens[category] = screen = new type() + screen = new type() + LAZYSET(screens, category, screen) else if ((!severity || severity == screen.severity) && (!client || screen.screen_loc != "CENTER-7,CENTER-7" || screen.view == client.view)) // doesn't need to be updated return screen @@ -23,11 +24,11 @@ return screen /mob/proc/clear_fullscreen(category, animated = 10) - var/obj/screen/fullscreen/screen = screens[category] + var/obj/screen/fullscreen/screen = LAZYACCESS(screens, category) if(!screen) return - screens -= category + LAZYREMOVE(screens, category) if(animated) spawn(0) diff --git a/code/game/machinery/camera/camera.dm b/code/game/machinery/camera/camera.dm index 28db32dead..1f8e32d4b4 100644 --- a/code/game/machinery/camera/camera.dm +++ b/code/game/machinery/camera/camera.dm @@ -38,15 +38,13 @@ var/affected_by_emp_until = 0 - var/client_huds = list() - - var/list/camera_computers_using_this = list() + var/client_huds = null /obj/machinery/camera/Initialize(mapload) wires = new(src) assembly = new(src) assembly.state = 4 - client_huds |= GLOB.global_hud.whitense + LAZYOR(client_huds, GLOB.global_hud.whitense) /* // Use this to look for cameras that have the same c_tag. for(var/obj/machinery/camera/C in cameranet.cameras) diff --git a/code/game/machinery/camera/motion.dm b/code/game/machinery/camera/motion.dm index bfa70266af..a4486af8ea 100644 --- a/code/game/machinery/camera/motion.dm +++ b/code/game/machinery/camera/motion.dm @@ -1,5 +1,5 @@ /obj/machinery/camera - var/list/motionTargets = list() + var/list/motionTargets = null var/detectTime = 0 var/area/ai_monitored/area_motion = null var/alarm_delay = 100 // Don't forget, there's another 10 seconds in queueAlarm() @@ -29,13 +29,13 @@ if (detectTime == 0) detectTime = world.time // start the clock if (!(target in motionTargets)) - motionTargets += target + LAZYADD(motionTargets, target) return 1 /obj/machinery/camera/proc/lostTarget(var/mob/target) if (target in motionTargets) - motionTargets -= target - if (motionTargets.len == 0) + LAZYREMOVE(motionTargets, target) + if (LAZYLEN(motionTargets) == 0) cancelAlarm() /obj/machinery/camera/proc/cancelAlarm() diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index 57c170769b..ceb297cb40 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -112,7 +112,7 @@ var/climbing_delay = 1 //If rock_climbing, lower better. var/digestable = TRUE var/item_tf_spawn_allowed = FALSE - var/list/ckeys_allowed_itemspawn = list() + var/list/ckeys_allowed_itemspawn = null /obj/item/Initialize(mapload) . = ..() diff --git a/code/game/objects/items/devices/ai_detector.dm b/code/game/objects/items/devices/ai_detector.dm index 52efa85539..724abb98df 100644 --- a/code/game/objects/items/devices/ai_detector.dm +++ b/code/game/objects/items/devices/ai_detector.dm @@ -49,16 +49,6 @@ if(!T) return PROXIMITY_OFF_CAMERANET - // Security is also a concern, so we need to see if any cameras are in use. - // Note that this will trigger upon the security console being used, regardless if someone is actually watching, - // because there isn't a nice way to test if someone is actually looking. Probably better that way too. - var/list/our_local_area = range(range_alert, T) - for(var/obj/machinery/camera/C in our_local_area) - if(C.camera_computers_using_this.len) // Only check cameras actively being used. - var/list/their_local_area = C.can_see(range_alert) - if(T in their_local_area) - return PROXIMITY_ON_SCREEN - // Now for the somewhat harder AI cameranet checks. // Check if we are even on the cameranet. diff --git a/code/game/objects/items/devices/communicator/communicator.dm b/code/game/objects/items/devices/communicator/communicator.dm index 2a6a3bf9cc..c998bba3ca 100644 --- a/code/game/objects/items/devices/communicator/communicator.dm +++ b/code/game/objects/items/devices/communicator/communicator.dm @@ -451,8 +451,8 @@ var/global/list/obj/item/communicator/all_communicators = list() //Don't change /obj/machinery/camera/communicator/Initialize(mapload) . = ..() - client_huds |= GLOB.global_hud.whitense - client_huds |= GLOB.global_hud.darkMask + LAZYOR(client_huds, GLOB.global_hud.whitense) + LAZYOR(client_huds, GLOB.global_hud.darkMask) //It's the 26th century. We should have smart watches by now. /obj/item/communicator/watch diff --git a/code/game/turfs/flooring/flooring.dm b/code/game/turfs/flooring/flooring.dm index 6e31228469..f65d66b779 100644 --- a/code/game/turfs/flooring/flooring.dm +++ b/code/game/turfs/flooring/flooring.dm @@ -44,10 +44,8 @@ var/list/flooring_types var/flags var/can_paint var/can_engrave = FALSE - var/list/footstep_sounds = list() // key=species name, value = list of sounds, - // For instance, footstep_sounds = list("key" = list(sound.ogg)) var/is_plating = FALSE - var/list/flooring_cache = list() // Cached overlays for our edges and corners and junk + var/list/flooring_cache = null // Cached overlays for our edges and corners and junk //Plating types, can be overridden var/plating_type = null @@ -73,8 +71,8 @@ var/list/flooring_types //How we smooth with other flooring var/floor_smooth = SMOOTH_NONE - var/list/flooring_whitelist = list() //Smooth with nothing except the contents of this list - var/list/flooring_blacklist = list() //Smooth with everything except the contents of this list + var/list/flooring_whitelist = null //Smooth with nothing except the contents of this list + var/list/flooring_blacklist = null //Smooth with everything except the contents of this list //How we smooth with walls var/wall_smooth = SMOOTH_NONE @@ -112,8 +110,8 @@ var/list/flooring_types */ var/smooth_movable_atom = SMOOTH_NONE - var/list/movable_atom_whitelist = list() - var/list/movable_atom_blacklist = list() + var/list/movable_atom_whitelist = null + var/list/movable_atom_blacklist = null var/check_season = FALSE //VOREStation Addition @@ -121,11 +119,11 @@ var/list/flooring_types return plating_type /decl/flooring/proc/get_flooring_overlay(var/cache_key, var/icon_base, var/icon_dir = 0, var/layer = BUILTIN_DECAL_LAYER) - if(!flooring_cache[cache_key]) + if(!LAZYACCESS(flooring_cache, cache_key)) var/image/I = image(icon = icon, icon_state = icon_base, dir = icon_dir) I.layer = layer - flooring_cache[cache_key] = I - return flooring_cache[cache_key] + LAZYSET(flooring_cache, cache_key, I) + return LAZYACCESS(flooring_cache, cache_key) /decl/flooring/grass name = "grass" @@ -136,11 +134,6 @@ var/list/flooring_types damage_temperature = T0C+80 flags = TURF_HAS_EDGES | TURF_HAS_CORNERS | TURF_REMOVE_SHOVEL build_type = /obj/item/stack/tile/grass - footstep_sounds = list("human" = list( - 'sound/effects/footstep/grass1.ogg', - 'sound/effects/footstep/grass2.ogg', - 'sound/effects/footstep/grass3.ogg', - 'sound/effects/footstep/grass4.ogg')) /decl/flooring/grass/sif // Subtype for Sif's grass. name = "growth" @@ -148,16 +141,7 @@ var/list/flooring_types flags = 0 icon = 'icons/turf/outdoors.dmi' icon_base = "grass_sif" - build_type = /obj/item/stack/tile/grass/sif - has_base_range = 1 - -/decl/flooring/grass/sif/forest - name = "thick growth" - desc = "A natural moss that has adapted to the sheer cold climate." - flags = TURF_REMOVE_SHOVEL - icon = 'icons/turf/outdoors.dmi' - icon_base = "grass_sif_dark" - build_type = /obj/item/stack/tile/grass/sif/forest + build_type = null has_base_range = 1 //CHOMPedit: sif/forest decl. If this ends up upstream just accept the upstream version. @@ -176,22 +160,12 @@ var/list/flooring_types desc = "Water is wet, gosh, who knew!" icon = 'icons/turf/outdoors.dmi' icon_base = "seashallow" - footstep_sounds = list("human" = list( - 'sound/effects/footstep/water1.ogg', - 'sound/effects/footstep/water2.ogg', - 'sound/effects/footstep/water3.ogg', - 'sound/effects/footstep/water4.ogg')) /decl/flooring/sand name = "sand" desc = "I don't like sand. It's coarse and rough and irritating and it gets everywhere." icon = 'icons/misc/beach.dmi' icon_base = "sand" - footstep_sounds = list("human" = list( - 'sound/effects/footstep/HeavySand1.ogg', - 'sound/effects/footstep/HeavySand2.ogg', - 'sound/effects/footstep/HeavySand3.ogg', - 'sound/effects/footstep/HeavySand4.ogg')) /decl/flooring/sand/desert // Subtype of sand, desert. name = "desert" @@ -204,22 +178,12 @@ var/list/flooring_types desc = "Wet and fragrant mud, bane of the freshly mopped floor." icon = 'icons/turf/outdoors.dmi' icon_base = "mud_dark" - footstep_sounds = list("human" = list( - 'sound/effects/footstep/mud1.ogg', - 'sound/effects/footstep/mud2.ogg', - 'sound/effects/footstep/mud3.ogg', - 'sound/effects/footstep/mud4.ogg')) /decl/flooring/rock name = "rocks" desc = "Hard as a rock." icon = 'icons/turf/outdoors.dmi' icon_base = "rock" - footstep_sounds = list("human" = list( - 'sound/effects/footstep/LightStone1.ogg', - 'sound/effects/footstep/LightStone2.ogg', - 'sound/effects/footstep/LightStone3.ogg', - 'sound/effects/footstep/LightStone4.ogg')) /decl/flooring/asteroid name = "coarse sand" @@ -228,12 +192,6 @@ var/list/flooring_types icon_base = "asteroid" flags = TURF_REMOVE_SHOVEL | TURF_ACID_IMMUNE build_type = null - footstep_sounds = list("human" = list( - 'sound/effects/footstep/asteroid1.ogg', - 'sound/effects/footstep/asteroid2.ogg', - 'sound/effects/footstep/asteroid3.ogg', - 'sound/effects/footstep/asteroid4.ogg', - 'sound/effects/footstep/asteroid5.ogg')) /decl/flooring/dirt name = "soil" @@ -242,28 +200,12 @@ var/list/flooring_types icon_base = "dirt-dark" flags = TURF_REMOVE_SHOVEL build_type = null - footstep_sounds = list("human" = list( - 'sound/effects/footstep/asteroid1.ogg', - 'sound/effects/footstep/asteroid2.ogg', - 'sound/effects/footstep/asteroid3.ogg', - 'sound/effects/footstep/asteroid4.ogg', - 'sound/effects/footstep/asteroid5.ogg', - 'sound/effects/footstep/MedDirt1.ogg', - 'sound/effects/footstep/MedDirt2.ogg', - 'sound/effects/footstep/MedDirt3.ogg', - 'sound/effects/footstep/MedDirt4.ogg',)) /decl/flooring/snow name = "snow" desc = "A layer of many tiny bits of frozen water. It's hard to tell how deep it is." icon = 'icons/turf/outdoors.dmi' icon_base = "snow" - footstep_sounds = list("human" = list( - 'sound/effects/footstep/snow1.ogg', - 'sound/effects/footstep/snow2.ogg', - 'sound/effects/footstep/snow3.ogg', - 'sound/effects/footstep/snow4.ogg', - 'sound/effects/footstep/snow5.ogg')) /decl/flooring/snow/fake desc = "A coating of fake snow, looks surprisingly realistic, though not as cold as the real thing." @@ -305,12 +247,6 @@ var/list/flooring_types can_paint = TRUE //ChompEDIT, allow painting carpets damage_temperature = T0C+200 flags = TURF_HAS_EDGES | TURF_HAS_CORNERS | TURF_REMOVE_CROWBAR | TURF_CAN_BURN - footstep_sounds = list("human" = list( - 'sound/effects/footstep/carpet1.ogg', - 'sound/effects/footstep/carpet2.ogg', - 'sound/effects/footstep/carpet3.ogg', - 'sound/effects/footstep/carpet4.ogg', - 'sound/effects/footstep/carpet5.ogg')) /decl/flooring/carpet/bcarpet name = "black carpet" @@ -407,12 +343,6 @@ var/list/flooring_types build_type = /obj/item/stack/tile/floor can_paint = 1 can_engrave = TRUE - footstep_sounds = list("human" = list( - 'sound/effects/footstep/floor1.ogg', - 'sound/effects/footstep/floor2.ogg', - 'sound/effects/footstep/floor3.ogg', - 'sound/effects/footstep/floor4.ogg', - 'sound/effects/footstep/floor5.ogg')) /decl/flooring/tiling/tech desc = "Metal floor tiles with a corrugated anti-slip texture." @@ -550,12 +480,6 @@ var/list/flooring_types descriptor = "planks" build_type = /obj/item/stack/tile/wood flags = TURF_CAN_BREAK | TURF_REMOVE_CROWBAR | TURF_REMOVE_SCREWDRIVER - footstep_sounds = list("human" = list( - 'sound/effects/footstep/wood1.ogg', - 'sound/effects/footstep/wood2.ogg', - 'sound/effects/footstep/wood3.ogg', - 'sound/effects/footstep/wood4.ogg', - 'sound/effects/footstep/wood5.ogg')) /decl/flooring/wood/sif desc = "Polished wood planks made from sivian wood." @@ -600,12 +524,6 @@ var/list/flooring_types apply_thermal_conductivity = 0.025 apply_heat_capacity = 325000 can_paint = 1 - footstep_sounds = list("human" = list( - 'sound/effects/footstep/hull1.ogg', - 'sound/effects/footstep/hull2.ogg', - 'sound/effects/footstep/hull3.ogg', - 'sound/effects/footstep/hull4.ogg', - 'sound/effects/footstep/hull5.ogg')) /decl/flooring/reinforced/circuit name = "processing strata" @@ -636,10 +554,6 @@ var/list/flooring_types icon_base = "lava" is_plating = TRUE flags = TURF_ACID_IMMUNE - footstep_sounds = list("human" = list( - 'sound/effects/footstep/lava1.ogg', - 'sound/effects/footstep/lava2.ogg', - 'sound/effects/footstep/lava3.ogg')) /decl/flooring/concrete name = "concrete" diff --git a/code/game/turfs/flooring/flooring_vr.dm b/code/game/turfs/flooring/flooring_vr.dm index 6e6fc78a27..18521b91bd 100644 --- a/code/game/turfs/flooring/flooring_vr.dm +++ b/code/game/turfs/flooring/flooring_vr.dm @@ -17,12 +17,6 @@ desc = "This slick flesh ripples and squishes under your touch" icon = 'icons/turf/stomach_vr.dmi' icon_base = "flesh_floor" - footstep_sounds = list("human" = list( - 'sound/effects/footstep/mud1.ogg', - 'sound/effects/footstep/mud2.ogg', - 'sound/effects/footstep/mud3.ogg', - 'sound/effects/footstep/mud4.ogg' - )) /decl/flooring/grass/outdoors flags = 0 @@ -80,12 +74,6 @@ plating_type = /decl/flooring/eris_plating/under can_paint = 1 can_engrave = TRUE - footstep_sounds = list("human" = list( - 'sound/effects/footstep/floor1.ogg', - 'sound/effects/footstep/floor2.ogg', - 'sound/effects/footstep/floor3.ogg', - 'sound/effects/footstep/floor4.ogg', - 'sound/effects/footstep/floor5.ogg')) /turf/simulated/floor/tiled/milspec name = "milspec floor" diff --git a/code/game/turfs/simulated/floor_icon.dm b/code/game/turfs/simulated/floor_icon.dm index 78e79cde6a..9709bdab76 100644 --- a/code/game/turfs/simulated/floor_icon.dm +++ b/code/game/turfs/simulated/floor_icon.dm @@ -1,5 +1,3 @@ -var/list/flooring_cache = list() - var/image/no_ceiling_image = null /hook/startup/proc/setup_no_ceiling_image() @@ -182,7 +180,7 @@ var/image/no_ceiling_image = null break else if(floor_smooth == SMOOTH_BLACKLIST) is_linked = TRUE //Default to true for the blacklist, then make it false if a match comes up - for (var/v in flooring_whitelist) + for (var/v in flooring_blacklist) if (istype(t.flooring, v)) //Found a match on the list is_linked = FALSE @@ -278,10 +276,3 @@ var/image/no_ceiling_image = null is_linked = FALSE return is_linked - -/turf/simulated/floor/proc/get_flooring_overlay(var/cache_key, var/icon_base, var/icon_dir = 0) - if(!flooring_cache[cache_key]) - var/image/I = image(icon = flooring.icon, icon_state = icon_base, dir = icon_dir) - I.layer = layer - flooring_cache[cache_key] = I - return flooring_cache[cache_key] diff --git a/code/game/turfs/simulated/floor_types_eris.dm b/code/game/turfs/simulated/floor_types_eris.dm index 2f83c53a41..cb633cbf42 100644 --- a/code/game/turfs/simulated/floor_types_eris.dm +++ b/code/game/turfs/simulated/floor_types_eris.dm @@ -1014,7 +1014,6 @@ health = 100 floor_smooth = SMOOTH_BLACKLIST - flooring_blacklist = list(/decl/flooring/reinforced/plating/under,/decl/flooring/reinforced/plating/hull) //Smooth with everything except the contents of this list smooth_movable_atom = SMOOTH_GREYLIST movable_atom_blacklist = list(list(/obj, list("density" = TRUE, "anchored" = TRUE), 1)) movable_atom_whitelist = list(list(/obj/machinery/door/airlock, list(), 2)) diff --git a/code/game/turfs/simulated/outdoors/ironsand_vr.dm b/code/game/turfs/simulated/outdoors/ironsand_vr.dm index 3a3f5be828..abd0a3c357 100644 --- a/code/game/turfs/simulated/outdoors/ironsand_vr.dm +++ b/code/game/turfs/simulated/outdoors/ironsand_vr.dm @@ -11,16 +11,6 @@ desc = "Red and gritty." icon = 'icons/turf/flooring/ironsand_vr.dmi' icon_base = "ironsand1" - footstep_sounds = list("human" = list( - 'sound/effects/footstep/asteroid1.ogg', - 'sound/effects/footstep/asteroid2.ogg', - 'sound/effects/footstep/asteroid3.ogg', - 'sound/effects/footstep/asteroid4.ogg', - 'sound/effects/footstep/asteroid5.ogg', - 'sound/effects/footstep/MedDirt1.ogg', - 'sound/effects/footstep/MedDirt2.ogg', - 'sound/effects/footstep/MedDirt3.ogg', - 'sound/effects/footstep/MedDirt4.ogg')) /turf/simulated/floor/outdoors/ironsand/Initialize(mapload) var/possiblesands = list( diff --git a/code/game/turfs/unsimulated/beach.dm b/code/game/turfs/unsimulated/beach.dm index f78c211811..5c6f635563 100644 --- a/code/game/turfs/unsimulated/beach.dm +++ b/code/game/turfs/unsimulated/beach.dm @@ -66,7 +66,3 @@ desc = "Deep Ocean Water" icon = 'icons/misc/beach.dmi' icon_base = "seadeep" - footstep_sounds = list("human" = list( - 'sound/effects/footstep/bubbles3.ogg', // No I don't get why it's named 3/4/5 either. Whatever. - 'sound/effects/footstep/bubbles4.ogg', - 'sound/effects/footstep/bubbles5.ogg')) diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index a748d67c50..99fbdd3bba 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -1427,7 +1427,8 @@ if(istype(client.eye,/obj/machinery/camera)) var/obj/machinery/camera/cam = client.eye - client.screen |= cam.client_huds + if(LAZYLEN(cam.client_huds)) + client.screen |= cam.client_huds if(stat == DEAD) //Dead if(!druggy) see_invisible = SEE_INVISIBLE_LEVEL_TWO diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/alien animals/stardog.dm b/code/modules/mob/living/simple_mob/subtypes/animal/alien animals/stardog.dm index 78ebd937c1..15f0e05c8b 100644 --- a/code/modules/mob/living/simple_mob/subtypes/animal/alien animals/stardog.dm +++ b/code/modules/mob/living/simple_mob/subtypes/animal/alien animals/stardog.dm @@ -519,13 +519,6 @@ can_paint = TRUE - footstep_sounds = list("human" = list( - 'sound/effects/footstep/carpet1.ogg', - 'sound/effects/footstep/carpet2.ogg', - 'sound/effects/footstep/carpet3.ogg', - 'sound/effects/footstep/carpet4.ogg', - 'sound/effects/footstep/carpet5.ogg')) - /obj/structure/flora/tree/fur name = "tall fur" desc = "Tall stalks of fur block your path! Someone needs a trim!"