From 88063f3d8d92a5427523ab22e08a85216acede2e Mon Sep 17 00:00:00 2001 From: Tk420634 Date: Tue, 16 Jul 2024 22:14:43 -0500 Subject: [PATCH] Sounds forever! --- _maps/map_files/coyote_bayou/foxybar.dmm | 45 +++++++++++------- _maps/map_files/coyote_bayou/foxybarupper.dmm | 2 +- code/__HELPERS/_lists.dm | 2 + code/datums/looping_sounds/ambient_sounds.dm | 12 +++++ code/game/objects/effects/sound_emitter.dm | 42 ++++++++++++++++ code/game/objects/items.dm | 15 ++---- code/modules/fallout/areas/area.dm | 2 - code/modules/food_and_drinks/food.dm | 1 + .../modules/food_and_drinks/food/condiment.dm | 2 + code/modules/power/lighting.dm | 12 +++++ sound/machines/clocktick.ogg | Bin 0 -> 7352 bytes sound/tableplace.ogg | Bin 0 -> 5193 bytes 12 files changed, 104 insertions(+), 31 deletions(-) create mode 100644 sound/machines/clocktick.ogg create mode 100644 sound/tableplace.ogg diff --git a/_maps/map_files/coyote_bayou/foxybar.dmm b/_maps/map_files/coyote_bayou/foxybar.dmm index 4aa3da0c7f..2dce98f587 100644 --- a/_maps/map_files/coyote_bayou/foxybar.dmm +++ b/_maps/map_files/coyote_bayou/foxybar.dmm @@ -549,13 +549,12 @@ /area/f13/fb/bar) "cVe" = ( /obj/effect/overlay/fog/fog2{ - plane = -2 - }, -/obj/machinery/gear_painter, -/turf/open/indestructible/ground/outside/sidewalk{ - icon_state = "horizontalbottomborderbottom3" + plane = -2; + alpha = 175 }, -/area/f13/wasteland/city/newboston/outdoors) +/obj/effect/sound_emitter/foxybar/clock, +/turf/closed/wall/mineral/brick, +/area/f13/fb/bar) "cWl" = ( /obj/machinery/telecomms/server/presets/supply, /turf/open/floor/plasteel/f13{ @@ -860,10 +859,13 @@ }, /area/f13/wasteland/city/newboston/outdoors) "esa" = ( +/obj/machinery/gear_painter{ + pixel_y = 13; + plane = 0 + }, /obj/effect/overlay/fog/fog2{ - plane = -2 + plane = 1 }, -/obj/machinery/gear_painter, /turf/open/indestructible/ground/outside/sidewalk{ icon_state = "horizontalbottomborderbottom0" }, @@ -1007,7 +1009,8 @@ }, /obj/effect/landmark/start/f13/wastelander, /obj/effect/overlay/fog/fog2{ - plane = -2 + plane = -2; + pixel_y = 0 }, /turf/open/indestructible/ground/outside/road{ color = "#999999" @@ -2929,10 +2932,6 @@ light_range = 2; pixel_y = 13 }, -/obj/effect/overlay/fog/fog2{ - plane = -2; - alpha = 175 - }, /obj/effect/turf_decal/siding/wood{ dir = 1; color = "#3B2B1A" @@ -2941,6 +2940,13 @@ dir = 8; color = "#3B2B1A" }, +/obj/structure/decoration/clock/active{ + pixel_y = 25 + }, +/obj/effect/overlay/fog/fog2{ + plane = -2; + alpha = 175 + }, /turf/open/floor/wood_fancy{ color = "#779999" }, @@ -2970,10 +2976,14 @@ }, /area/f13/fb/bar) "qge" = ( +/obj/machinery/recycler{ + pixel_y = 9; + plane = 0; + density = 0 + }, /obj/effect/overlay/fog/fog2{ - plane = -2 + plane = 1 }, -/obj/machinery/recycler, /turf/open/indestructible/ground/outside/sidewalk{ icon_state = "horizontalbottomborderbottom0" }, @@ -3126,7 +3136,6 @@ /obj/effect/overlay/fog/fog2{ plane = -2 }, -/obj/machinery/recycler, /turf/open/indestructible/ground/outside/sidewalk{ icon_state = "horizontalbottomborderbottom2" }, @@ -6097,7 +6106,7 @@ ePQ bPG bPG bPG -bPG +cVe pXS okV bPG @@ -7753,7 +7762,7 @@ lyo kcI hEt nXE -cVe +wTs fdf xfT uWY diff --git a/_maps/map_files/coyote_bayou/foxybarupper.dmm b/_maps/map_files/coyote_bayou/foxybarupper.dmm index a15a972291..0544dd428a 100644 --- a/_maps/map_files/coyote_bayou/foxybarupper.dmm +++ b/_maps/map_files/coyote_bayou/foxybarupper.dmm @@ -6478,7 +6478,7 @@ sx dS dS dS -nZ +il il il il diff --git a/code/__HELPERS/_lists.dm b/code/__HELPERS/_lists.dm index aa0140c125..a7e512b6e1 100644 --- a/code/__HELPERS/_lists.dm +++ b/code/__HELPERS/_lists.dm @@ -231,6 +231,8 @@ //Return either pick(list) or null if list is not of type /list or is empty /proc/safepick(list/L) if(LAZYLEN(L)) + if(!islist(L)) + return L return pick(L) //Checks if the list is empty diff --git a/code/datums/looping_sounds/ambient_sounds.dm b/code/datums/looping_sounds/ambient_sounds.dm index f76fb302f7..79d900d1f7 100644 --- a/code/datums/looping_sounds/ambient_sounds.dm +++ b/code/datums/looping_sounds/ambient_sounds.dm @@ -448,6 +448,18 @@ SOUND_LOOP_ENTRY('sound/f13ambience/ambiflouriscentlight_1.ogg', 5 SECONDS, 1), ) +/datum/looping_sound/ambient/lightbulb/quiet + chance = 100 + vary = FALSE + vary_direction = TRUE + extra_range = SOUND_DISTANCE(2) + volume = SOUND_LOOP_VOL_RANGE(12, 14) + direct = TRUE + loop_delay = 0 SECONDS + mid_sounds = list( + SOUND_LOOP_ENTRY('sound/f13ambience/ambiflouriscentlight_1.ogg', 4.5 SECONDS, 1), + ) + /datum/looping_sound/ambient/torch chance = 100 vary = FALSE diff --git a/code/game/objects/effects/sound_emitter.dm b/code/game/objects/effects/sound_emitter.dm index 1746f673a2..74f03252ea 100644 --- a/code/game/objects/effects/sound_emitter.dm +++ b/code/game/objects/effects/sound_emitter.dm @@ -86,3 +86,45 @@ snd = /datum/looping_sound/soundrock/creek synchronize = TRUE +//Foxybar Soundrocks// + +/obj/effect/sound_emitter/foxybar/ + name = "sound emitter (creek)" + desc = "Sound emitter for some sort of noise." + icon = 'modular_coyote/icons/objects/c13ammo.dmi' + icon_state = "rock" + snd = /datum/looping_sound/soundrock/foxybar + synchronize = TRUE + +/datum/looping_sound/soundrock/foxybar + chance = 100 //% to play per time passing on the sound loop entry, in this case every 1 seconds. If it doesn't get a true then it still uses the last played sounds + vary = TRUE //wink wonk versus wInK wOnK + extra_range = SOUND_DISTANCE(15) //flat out, this is 15 tiles from the sound rock itself + volume = SOUND_LOOP_VOL_RANGE(70, 70) + direct = FALSE + managed = FALSE //true = sound dies when you leave the area, must be direct to use. + loop_delay = 0 + mid_sounds = list( + SOUND_LOOP_ENTRY('sound/machines/glassclink.ogg', 1 SECONDS, 1), //sound, how long it plays, weighted play + ) + +/obj/effect/sound_emitter/foxybar/clock + name = "sound emitter (clock)" + desc = "Sound emitter for some sort of noise." + icon = 'modular_coyote/icons/objects/c13ammo.dmi' + icon_state = "rock" + snd = /datum/looping_sound/soundrock/foxybar/clock + synchronize = TRUE + + +/datum/looping_sound/soundrock/foxybar/clock + chance = 100 //% to play per time passing on the sound loop entry, in this case every 1 seconds. If it doesn't get a true then it still uses the last played sounds time. + vary = TRUE //wink wonk versus wInK wOnK + extra_range = SOUND_DISTANCE(5) //flat out, this is 15 tiles from the sound rock itself + volume = SOUND_LOOP_VOL_RANGE(4, 8) + direct = FALSE + managed = FALSE //true = sound dies when you leave the area, must be direct to use. + loop_delay = 0 + mid_sounds = list( + SOUND_LOOP_ENTRY('sound/machines/clocktick.ogg', 1 SECONDS, 1), //sound, how long it plays, weighted play + ) diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index 5cc542c465..5b409e851e 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -59,7 +59,7 @@ GLOBAL_VAR_INIT(embedpocalypse, FALSE) // if true, all items will be able to emb var/usesound = null var/throwhitsound = null var/equipsound = null - var/tableplacesound = null + var/tableplacesound = 'sound/tableplace.ogg' /// Weight class for how much storage capacity it uses and how big it physically is meaning storages can't hold it if their maximum weight class isn't as high as it. var/w_class = WEIGHT_CLASS_NORMAL @@ -229,11 +229,6 @@ GLOBAL_VAR_INIT(embedpocalypse, FALSE) // if true, all items will be able to emb if(!special_transform && transform != initial(transform)) special_transform = transform - if(!isnull(equipsound)) - listify(equipsound) - if(!isnull(tableplacesound)) - listify(tableplacesound) - /// CB Dual Wielding if(force != 0) if(w_class < DUAL_WIELDING_MAX_WEIGHT_ALLOWED) @@ -1308,11 +1303,11 @@ GLOBAL_VAR_INIT(embedpocalypse, FALSE) // if true, all items will be able to emb return ..() /obj/item/proc/play_equip_sound(volume=50) - if(!LAZYLEN(equipsound)) + if(!equipsound) return - playsound(src, safepick(equipsound), volume, TRUE) + playsound(src, safepick(equipsound), 100, TRUE) /obj/item/proc/after_placed_on_table(obj/structure/table, volume=50) - if(!LAZYLEN(tableplacesound)) + if(!tableplacesound) return - playsound(src, safepick(tableplacesound), volume, TRUE) + playsound(src, safepick(tableplacesound), 100, TRUE) diff --git a/code/modules/fallout/areas/area.dm b/code/modules/fallout/areas/area.dm index 9c8a1b0d9f..d478bad195 100644 --- a/code/modules/fallout/areas/area.dm +++ b/code/modules/fallout/areas/area.dm @@ -71,8 +71,6 @@ name = "Town" icon_state = "green" ambience_area = list( - /datum/looping_sound/ambient/town, - /datum/looping_sound/ambient/swamp/quiet, /datum/looping_sound/ambient/critters/birds, /datum/looping_sound/ambient/critters/birds/crow, diff --git a/code/modules/food_and_drinks/food.dm b/code/modules/food_and_drinks/food.dm index 58a8ab50ac..49a0499abf 100644 --- a/code/modules/food_and_drinks/food.dm +++ b/code/modules/food_and_drinks/food.dm @@ -16,6 +16,7 @@ var/foodtype = NONE var/last_check_time var/food_quality = 50 + tableplacesound = 'sound/tableplace.ogg' /obj/item/reagent_containers/food/Initialize(mapload) . = ..() diff --git a/code/modules/food_and_drinks/food/condiment.dm b/code/modules/food_and_drinks/food/condiment.dm index 7885a4e682..c69f1f4070 100644 --- a/code/modules/food_and_drinks/food/condiment.dm +++ b/code/modules/food_and_drinks/food/condiment.dm @@ -129,6 +129,7 @@ volume = 20 list_reagents = list(/datum/reagent/consumable/sodiumchloride = 20) possible_states = list() + /obj/item/reagent_containers/food/condiment/saltshaker/on_reagent_change(changetype) if(reagents.reagent_list.len == 0) @@ -158,6 +159,7 @@ volume = 20 list_reagents = list(/datum/reagent/consumable/blackpepper = 20) possible_states = list() + /obj/item/reagent_containers/food/condiment/peppermill/on_reagent_change(changetype) if(reagents.reagent_list.len == 0) diff --git a/code/modules/power/lighting.dm b/code/modules/power/lighting.dm index 3153f3c8ca..1af15afce3 100644 --- a/code/modules/power/lighting.dm +++ b/code/modules/power/lighting.dm @@ -226,6 +226,7 @@ var/flicker_chance = 100/90 // the chance to flicker every tick (2 seconds) as a percentage; // 100/90 is once every 90 ticks/three minutes, roughly. + var/datum/looping_sound/ambient/debug3/zzzzhummmmmzzzzzz /obj/machinery/light/broken status = LIGHT_BROKEN @@ -292,6 +293,14 @@ if(flicker_chance) START_PROCESSING(SSmachines, src) RegisterSignal(src, COMSIG_ATOM_LICKED,PROC_REF(lick_light)) + zzzzhummmmmzzzzzz = new(list(src), FALSE) + if(!istype(zzzzhummmmmzzzzzz)) + zzzzhummmmmzzzzzz = new /datum/looping_sound/ambient/debug3(list(src), FALSE) + if(!istype(zzzzhummmmmzzzzzz)) + to_chat(world, span_narsie("FUCK YOU")) + zzzzhummmmmzzzzzz?.start() + + /obj/machinery/light/proc/lick_light(atom/A, mob/living/carbon/licker, obj/item/hand_item/tongue) if(!iscarbon(licker) || !tongue) @@ -360,6 +369,7 @@ // A.update_lights() UnregisterSignal(src, COMSIG_ATOM_LICKED) QDEL_NULL(cell) + QDEL_NULL(zzzzhummmmmzzzzzz) return ..() /obj/machinery/light/update_icon_state() @@ -397,6 +407,7 @@ on = FALSE emergency_mode = FALSE if(on) + zzzzhummmmmzzzzzz?.start() var/BR = brightness var/PO = bulb_power var/CO = bulb_colour @@ -442,6 +453,7 @@ addStaticPower(static_power_used, CHANNEL_STATIC_LIGHT) else removeStaticPower(static_power_used, CHANNEL_STATIC_LIGHT) + zzzzhummmmmzzzzzz?.stop() /obj/machinery/light/update_atom_colour() . = ..() diff --git a/sound/machines/clocktick.ogg b/sound/machines/clocktick.ogg new file mode 100644 index 0000000000000000000000000000000000000000..651ed0066d4577429f8532c755b40fc67c2ce808 GIT binary patch literal 7352 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 literal 0 HcmV?d00001 diff --git a/sound/tableplace.ogg b/sound/tableplace.ogg new file mode 100644 index 0000000000000000000000000000000000000000..4c65d7e57c2b47f0165c7f8facac5ba9c30b9838 GIT binary patch literal 5193 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 a_eT8ESawq=?&W{qR-UHlncjBb4EpcXi0g&` literal 0 HcmV?d00001