Merge remote-tracking branch 'upstream/master' into just-defibrillator-things

This commit is contained in:
E-MonaRhg
2021-04-14 20:41:45 +02:00
19 changed files with 52 additions and 26 deletions
+4 -1
View File
@@ -6,11 +6,14 @@
#define CHANNEL_HEARTBEAT 1020 //sound channel for heartbeats
#define CHANNEL_BUZZ 1019
#define CHANNEL_AMBIENCE 1018
#define CHANNEL_ENGINE 1017 // Engine ambient sounds
#define USER_VOLUME(M, C) M?.client?.prefs.get_channel_volume(C)
//THIS SHOULD ALWAYS BE THE LOWEST ONE!
//KEEP IT UPDATED
#define CHANNEL_HIGHEST_AVAILABLE 1017
#define CHANNEL_HIGHEST_AVAILABLE 1016
#define MAX_INSTRUMENT_CHANNELS (128 * 6)
+3 -3
View File
@@ -84,13 +84,13 @@
continue
if(!use_name)
error("Loadout - Missing display name: [G]")
stack_trace("Loadout - Missing display name: [G]")
continue
if(!initial(G.cost))
error("Loadout - Missing cost: [G]")
stack_trace("Loadout - Missing cost: [G]")
continue
if(!initial(G.path))
error("Loadout - Missing path definition: [G]")
stack_trace("Loadout - Missing path definition: [G]")
continue
if(!GLOB.loadout_categories[use_category])
+2
View File
@@ -2116,6 +2116,8 @@ GLOBAL_DATUM_INIT(dview_mob, /mob/dview, new)
return "White Noise"
if(CHANNEL_AMBIENCE)
return "Ambience"
if(CHANNEL_ENGINE)
return "Engine Ambience"
/proc/slot_bitfield_to_slot(input_slot_flags) // Kill off this garbage ASAP; slot flags and clothing flags should be IDENTICAL. GOSH DARN IT. Doesn't work with ears or pockets, either.
switch(input_slot_flags)
+7 -3
View File
@@ -31,6 +31,8 @@
var/falloff_exponent
var/muted = TRUE
var/falloff_distance
/// Channel of the audio, random otherwise
var/channel
/datum/looping_sound/New(list/_output_atoms = list(), start_immediately = FALSE, _direct = FALSE)
if(!mid_sounds)
@@ -75,14 +77,16 @@
var/list/atoms_cache = output_atoms
var/sound/S = sound(soundfile)
if(direct)
S.channel = SSsounds.random_available_channel()
S.volume = volume
S.channel = channel || SSsounds.random_available_channel()
for(var/i in 1 to atoms_cache.len)
var/atom/thing = atoms_cache[i]
if(direct)
if(ismob(thing))
var/mob/M = thing
S.volume = volume * (USER_VOLUME(M, channel) || 1)
SEND_SOUND(thing, S)
else
playsound(thing, S, volume, vary, extra_range, falloff_exponent = falloff_exponent, falloff_distance = falloff_distance)
playsound(thing, S, volume, vary, extra_range, falloff_exponent = falloff_exponent, falloff_distance = falloff_distance, channel = channel)
/datum/looping_sound/proc/get_sound(looped, _mid_sounds)
if(!_mid_sounds)
@@ -16,3 +16,4 @@
falloff_exponent = 10
falloff_distance = 5
vary = TRUE
channel = CHANNEL_ENGINE
@@ -250,10 +250,9 @@
var/name_list = list("Aries", "Leo", "Sagittarius", "Taurus", "Virgo", "Capricorn", "Gemini", "Libra", "Aquarius", "Cancer", "Scorpio", "Pisces")
/obj/item/guardiancreator/attack_self(mob/living/user)
for(var/mob/living/simple_animal/hostile/guardian/G in GLOB.alive_mob_list)
if(G.summoner == user)
to_chat(user, "You already have a [mob_name]!")
return
if(has_guardian(user))
to_chat(user, "You already have a [mob_name]!")
return
if(user.mind && (user.mind.changeling || user.mind.vampire))
to_chat(user, "[ling_failure]")
return
@@ -285,6 +284,10 @@
if(candidates.len)
theghost = pick(candidates)
if(has_guardian(user))
to_chat(user, "You already have a [mob_name]!")
used = FALSE
return
spawn_guardian(user, theghost.key, guardian_type)
else
to_chat(user, "[failure_message]")
@@ -295,6 +298,13 @@
if(used)
. += "<span class='notice'>[used_message]</span>"
/obj/item/guardiancreator/proc/has_guardian(mob/living/user)
for(var/mob/living/simple_animal/hostile/guardian/G in GLOB.alive_mob_list)
if(G.summoner == user)
return TRUE
return FALSE
/obj/item/guardiancreator/proc/spawn_guardian(mob/living/user, key, guardian_type)
var/pickedtype = /mob/living/simple_animal/hostile/guardian/punch
switch(guardian_type)
+8 -3
View File
@@ -279,9 +279,14 @@
if(toggle_command_bold)
var/job = tcm.sender_job
if((job in ert_jobs) || (job in heads) || (job in cc_jobs))
for(var/datum/multilingual_say_piece/S in message_pieces)
if(S.message)
S.message = "<b>[capitalize(S.message)]</b>" // This only capitalizes the first word
for(var/I in 1 to length(message_pieces))
var/datum/multilingual_say_piece/S = message_pieces[I]
if(!S.message)
continue
if(I == 1 && !istype(S.speaking, /datum/language/noise)) // Capitalise the first section only, unless it's an emote.
S.message = "[capitalize(S.message)]"
S.message = "<b>[S.message]</b>" // Make everything bolded
// Language Conversion
if(setting_language && valid_languages[setting_language])
+1 -2
View File
@@ -164,10 +164,9 @@
new /obj/item/clothing/shoes/jackboots(src.loc)
qdel(src)
/obj/effect/landmark/costume/nyangirl/New()
/obj/effect/landmark/costume/schoolgirl/New()
. = ..()
new /obj/item/clothing/under/schoolgirl(src.loc)
new /obj/item/clothing/head/kitty(src.loc)
qdel(src)
/obj/effect/landmark/costume/maid/New()
+2 -2
View File
@@ -638,7 +638,7 @@
/obj/item/twohanded/singularityhammer
name = "singularity hammer"
desc = "The pinnacle of close combat technology, the hammer harnesses the power of a miniaturized singularity to deal crushing blows."
icon_state = "mjollnir0"
icon_state = "singulohammer0"
flags = CONDUCT
slot_flags = SLOT_BACK
force = 5
@@ -665,7 +665,7 @@
charged++
/obj/item/twohanded/singularityhammer/update_icon() //Currently only here to fuck with the on-mob icons.
icon_state = "mjollnir[wielded]"
icon_state = "singulohammer[wielded]"
..()
/obj/item/twohanded/singularityhammer/proc/vortex(turf/pull, mob/wielder)
+1 -1
View File
@@ -591,7 +591,7 @@
verbs -= /obj/structure/table/verb/do_flip
typecache_can_hold = typecacheof(typecache_can_hold)
for(var/atom/movable/held in get_turf(src))
if(is_type_in_typecache(held, typecache_can_hold))
if(!held.anchored && held.move_resist != INFINITY && is_type_in_typecache(held, typecache_can_hold))
held_items += held.UID()
/obj/structure/table/tray/Move(NewLoc, direct)
@@ -4,7 +4,7 @@
slot = slot_w_uniform
sort_category = "Uniforms and Casual Dress"
/datum/gear/uniform/suits
/datum/gear/uniform/suit
subtype_path = /datum/gear/uniform/suit
//there's a lot more colors than I thought there were @_@
@@ -192,6 +192,7 @@ GLOBAL_LIST_INIT(special_role_times, list( //minimum age (in days) for accounts
"1020" = 100, // CHANNEL_HEARTBEAT
"1019" = 100, // CHANNEL_BUZZ
"1018" = 100, // CHANNEL_AMBIENCE
"1017" = 100, // CHANNEL_ENGINE
)
/// The volume mixer save timer handle. Used to debounce the DB call to save, to avoid spamming.
var/volume_mixer_saving = null
+1
View File
@@ -37,6 +37,7 @@
plantname = "Red Onion Sprouts"
weed_chance = 1
product = /obj/item/reagent_containers/food/snacks/grown/onion/red
mutatelist = list()
reagents_add = list("vitamin" = 0.04, "plantmatter" = 0.1, "onionjuice" = 0.05)
/obj/item/reagent_containers/food/snacks/grown/onion/red
@@ -377,9 +377,9 @@
if(last_accent_sound < world.time && prob(20))
var/aggression = min(((damage / 800) * (power / 2500)), 1.0) * 100
if(damage >= 300)
playsound(src, "smdelam", max(50, aggression), FALSE, 40, 30, falloff_distance = 10)
playsound(src, "smdelam", max(50, aggression), FALSE, 40, 30, falloff_distance = 10, channel = CHANNEL_ENGINE)
else
playsound(src, "smcalm", max(50, aggression), FALSE, 25, 25, falloff_distance = 10)
playsound(src, "smcalm", max(50, aggression), FALSE, 25, 25, falloff_distance = 10, channel = CHANNEL_ENGINE)
var/next_sound = round((100 - aggression) * 5)
last_accent_sound = world.time + max(SUPERMATTER_ACCENT_SOUND_MIN_COOLDOWN, next_sound)
@@ -568,7 +568,7 @@
zap_count += 1
if(zap_count >= 1)
playsound(src.loc, 'sound/weapons/emitter2.ogg', 100, TRUE, extrarange = 10)
playsound(src.loc, 'sound/weapons/emitter2.ogg', 100, TRUE, extrarange = 10, channel = CHANNEL_ENGINE)
for(var/i in 1 to zap_count)
supermatter_zap(src, range, clamp(power*2, 4000, 20000), flags)
@@ -807,7 +807,7 @@
icon_state = "darkmatter"
/obj/machinery/power/supermatter_crystal/proc/supermatter_pull(turf/center, pull_range = 3)
playsound(center, 'sound/weapons/marauder.ogg', 100, TRUE, extrarange = pull_range - world.view)
playsound(center, 'sound/weapons/marauder.ogg', 100, TRUE, extrarange = pull_range - world.view, channel = CHANNEL_ENGINE)
for(var/atom/movable/P in orange(pull_range,center))
if((P.anchored || P.move_resist >= MOVE_FORCE_EXTREMELY_STRONG)) //move resist memes.
if(istype(P, /obj/structure/closet))
+2 -2
View File
@@ -65,7 +65,7 @@
move_the_basket_ball(4 + length(orbiting_balls) * 1.5)
playsound(loc, 'sound/magic/lightningbolt.ogg', 100, TRUE, extrarange = 30)
playsound(loc, 'sound/magic/lightningbolt.ogg', 100, TRUE, extrarange = 30, channel = CHANNEL_ENGINE)
pixel_x = 0
pixel_y = 0
@@ -112,7 +112,7 @@
energy_to_lower = energy_to_raise - 20
energy_to_raise = energy_to_raise * 1.25
playsound(src.loc, 'sound/magic/lightning_chargeup.ogg', 100, TRUE, extrarange = 30)
playsound(src.loc, 'sound/magic/lightning_chargeup.ogg', 100, TRUE, extrarange = 30, channel = CHANNEL_ENGINE)
addtimer(CALLBACK(src, .proc/new_mini_ball), 100)
else if(energy < energy_to_lower && length(orbiting_balls))
Binary file not shown.

Before

Width:  |  Height:  |  Size: 173 KiB

After

Width:  |  Height:  |  Size: 166 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 170 KiB

After

Width:  |  Height:  |  Size: 166 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 89 KiB

After

Width:  |  Height:  |  Size: 88 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 146 KiB

After

Width:  |  Height:  |  Size: 156 KiB