From b34f810f0c42165a74f86c6393af6cc24d2ac2e6 Mon Sep 17 00:00:00 2001 From: tralezab <40974010+tralezab@users.noreply.github.com> Date: Sun, 10 Apr 2022 14:35:28 -0700 Subject: [PATCH] Festival Sect is back in 2022! (#64731) Adds the "Festival Sect" to chaplains, focusing on healing and religious acts through music. --- .../signals/signals_atom/signals_atom_main.dm | 2 + code/__DEFINES/dcs/signals/signals_music.dm | 10 +- code/__DEFINES/is_helpers.dm | 2 + code/__DEFINES/traits.dm | 3 + code/datums/components/religious_tool.dm | 8 +- code/datums/components/smooth_tunes.dm | 107 +++++++++++++ code/datums/status_effects/buffs.dm | 10 ++ code/datums/wounds/slash.dm | 6 + code/game/objects/effects/effects.dm | 3 + code/game/objects/effects/particle_holder.dm | 66 ++++++++ .../objects/structures/beds_chairs/chair.dm | 12 ++ .../actionspeed/modifiers/status_effects.dm | 3 + code/modules/instruments/piano_synth.dm | 12 +- code/modules/instruments/songs/_song.dm | 52 +++--- code/modules/mob/living/carbon/life.dm | 2 +- .../movespeed/modifiers/status_effects.dm | 4 +- .../religion/festival/instrument_rites.dm | 149 ++++++++++++++++++ .../religion/festival/note_particles.dm | 83 ++++++++++ code/modules/religion/religion_sects.dm | 22 +++ code/modules/religion/religion_structures.dm | 7 +- code/modules/religion/rites.dm | 12 +- icons/effects/particles/notes/note.dmi | Bin 0 -> 397 bytes icons/effects/particles/notes/note_harm.dmi | Bin 0 -> 1763 bytes icons/effects/particles/notes/note_holy.dmi | Bin 0 -> 1478 bytes icons/effects/particles/notes/note_null.dmi | Bin 0 -> 1572 bytes icons/effects/particles/notes/note_sleepy.dmi | Bin 0 -> 1544 bytes icons/obj/hand_of_god_structures.dmi | Bin 31756 -> 32267 bytes tgstation.dme | 4 + 28 files changed, 537 insertions(+), 42 deletions(-) create mode 100644 code/datums/components/smooth_tunes.dm create mode 100644 code/game/objects/effects/particle_holder.dm create mode 100644 code/modules/religion/festival/instrument_rites.dm create mode 100644 code/modules/religion/festival/note_particles.dm create mode 100644 icons/effects/particles/notes/note.dmi create mode 100644 icons/effects/particles/notes/note_harm.dmi create mode 100644 icons/effects/particles/notes/note_holy.dmi create mode 100644 icons/effects/particles/notes/note_null.dmi create mode 100644 icons/effects/particles/notes/note_sleepy.dmi diff --git a/code/__DEFINES/dcs/signals/signals_atom/signals_atom_main.dm b/code/__DEFINES/dcs/signals/signals_atom/signals_atom_main.dm index e81529fd70f..b1f9e2ff159 100644 --- a/code/__DEFINES/dcs/signals/signals_atom/signals_atom_main.dm +++ b/code/__DEFINES/dcs/signals/signals_atom/signals_atom_main.dm @@ -78,6 +78,8 @@ #define COMSIG_ATOM_SET_OPACITY "atom_set_opacity" ///from base of atom/hitby(atom/movable/AM, skipcatch, hitpush, blocked, datum/thrownthing/throwingdatum) #define COMSIG_ATOM_HITBY "atom_hitby" +///when an atom starts playing a song datum (datum/song) +#define COMSIG_ATOM_STARTING_INSTRUMENT "atom_starting_instrument" ///When the transform or an atom is varedited through vv topic. #define COMSIG_ATOM_VV_MODIFY_TRANSFORM "atom_vv_modify_transform" diff --git a/code/__DEFINES/dcs/signals/signals_music.dm b/code/__DEFINES/dcs/signals/signals_music.dm index e41207713e2..69c4fc5b12e 100644 --- a/code/__DEFINES/dcs/signals/signals_music.dm +++ b/code/__DEFINES/dcs/signals/signals_music.dm @@ -1,8 +1,12 @@ // /datum/song signals ///sent to the instrument when a song starts playing -#define COMSIG_SONG_START "song_start" +#define COMSIG_INSTRUMENT_START "instrument_start" ///sent to the instrument when a song stops playing -#define COMSIG_SONG_END "song_end" +#define COMSIG_INSTRUMENT_END "instrument_end" ///sent to the instrument on /should_stop_playing(): (atom/player). Return values can be found in DEFINES/song.dm -#define COMSIG_SONG_SHOULD_STOP_PLAYING "song_should_stop_playing" +#define COMSIG_INSTRUMENT_SHOULD_STOP_PLAYING "instrument_should_stop_playing" +///sent to the instrument (and player if available) when a song repeats (datum/song) +#define COMSIG_INSTRUMENT_REPEAT "instrument_repeat" +///sent to the instrument when tempo changes, skipped on new. (datum/song) +#define COMSIG_INSTRUMENT_TEMPO_CHANGE "instrument_tempo_change" diff --git a/code/__DEFINES/is_helpers.dm b/code/__DEFINES/is_helpers.dm index f0da816ef2b..a4932e54b66 100644 --- a/code/__DEFINES/is_helpers.dm +++ b/code/__DEFINES/is_helpers.dm @@ -211,6 +211,8 @@ GLOBAL_LIST_INIT(turfs_openspace, typecacheof(list( #define isgun(A) (istype(A, /obj/item/gun)) +#define isinstrument(A) (istype(A, /obj/item/instrument) || istype(A, /obj/structure/musician)) + #define is_reagent_container(O) (istype(O, /obj/item/reagent_containers)) //Assemblies diff --git a/code/__DEFINES/traits.dm b/code/__DEFINES/traits.dm index 1baba7cc67d..bbd4320f8c8 100644 --- a/code/__DEFINES/traits.dm +++ b/code/__DEFINES/traits.dm @@ -831,6 +831,9 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai /// This human wants to see the color of their glasses, for some reason #define TRAIT_SEE_GLASS_COLORS "see_glass_colors" +/// this mob is under the effects of the power chord +#define TRAIT_POWER_CHORD "power_chord" + // Radiation defines /// Marks that this object is irradiated diff --git a/code/datums/components/religious_tool.dm b/code/datums/components/religious_tool.dm index dcf64a899e3..d66aee4c782 100644 --- a/code/datums/components/religious_tool.dm +++ b/code/datums/components/religious_tool.dm @@ -48,8 +48,6 @@ after_sect_select_cb.Invoke() return TRUE - - /** * Since all of these involve attackby, we require mega proc. Handles Invocation, Sacrificing, And Selection of Sects. */ @@ -112,6 +110,7 @@ switch(action) if("sect_select") select_sect(usr, params["path"]) + return TRUE //they picked a sect lets update so some weird spammy shit doesn't happen if("perform_rite") perform_rite(usr, params["path"]) @@ -162,7 +161,10 @@ else performing_rite.invoke_effect(user, parent) easy_access_sect.adjust_favor(-performing_rite.favor_cost) - QDEL_NULL(performing_rite) + if(performing_rite.auto_delete) + QDEL_NULL(performing_rite) + else + performing_rite = null /** * Generates a list of available sects to the user. Intended to support custom-availability sects. diff --git a/code/datums/components/smooth_tunes.dm b/code/datums/components/smooth_tunes.dm new file mode 100644 index 00000000000..15248b768db --- /dev/null +++ b/code/datums/components/smooth_tunes.dm @@ -0,0 +1,107 @@ +///how many lines multiplied by tempo should at least be higher than this. +#define LONG_ENOUGH_SONG 220 + +///Smooth tunes component! Applied to musicians to give the songs they play special effects, according to a rite! +///Comes with BARTICLES!!! +/datum/component/smooth_tunes + ///if applied due to a rite, we link it here + var/datum/religion_rites/song_tuner/linked_songtuner_rite + ///linked song + var/datum/song/linked_song + ///if repeats count as continuations instead of a song's end, TRUE + var/allow_repeats = TRUE + ///particles to apply, if applicable + var/particles_path + ///the particle holder of the particle path (created when song starts) ((no i cant think of a better var name because i made the typepath and im perfect)) + var/obj/effect/abstract/particle_holder/particle_holder + ///a funny little glow applied to the instrument while playing + var/glow_color + ///whether to call the rite's finish effect, only true when the song is long enough + var/viable_for_final_effect = FALSE + +/datum/component/smooth_tunes/Initialize(linked_songtuner_rite, allow_repeats, particles_path, glow_color) + if(!isinstrument(parent) && !isliving(parent)) + return COMPONENT_INCOMPATIBLE + src.linked_songtuner_rite = linked_songtuner_rite + src.allow_repeats = allow_repeats + src.particles_path = particles_path + src.glow_color = glow_color + +/datum/component/smooth_tunes/Destroy(force, silent) + if(particle_holder) + QDEL_NULL(particle_holder) + qdel(linked_songtuner_rite) + return ..() + +/datum/component/smooth_tunes/RegisterWithParent() + RegisterSignal(parent, COMSIG_ATOM_STARTING_INSTRUMENT,.proc/start_singing) + +/datum/component/smooth_tunes/UnregisterFromParent() + UnregisterSignal(parent, COMSIG_ATOM_STARTING_INSTRUMENT) + +///Initiates the effect when the song begins playing. +/datum/component/smooth_tunes/proc/start_singing(datum/source, datum/song/starting_song) + SIGNAL_HANDLER + if(!starting_song) + return + if(istype(starting_song.parent, /obj/structure/musician)) + return //TODO: make stationary instruments work with no hiccups + + if(starting_song.lines.len * starting_song.tempo > LONG_ENOUGH_SONG) + viable_for_final_effect = TRUE + else + to_chat(parent, span_warning("This song is too short, so it won't include the song finishing effect.")) + + START_PROCESSING(SSobj, src) //even though WE aren't an object, our parent is! + if(linked_songtuner_rite.song_start_message) + starting_song.parent.visible_message(linked_songtuner_rite.song_start_message) + + ///prevent more songs from being blessed concurrently, mob signal + UnregisterSignal(parent, COMSIG_ATOM_STARTING_INSTRUMENT) + ///and hook into the instrument this time, preventing other weird exploity stuff. + RegisterSignal(starting_song.parent, COMSIG_INSTRUMENT_TEMPO_CHANGE, .proc/tempo_change) + RegisterSignal(starting_song.parent, COMSIG_INSTRUMENT_END, .proc/stop_singing) + if(!allow_repeats) + RegisterSignal(starting_song.parent, COMSIG_INSTRUMENT_REPEAT, .proc/stop_singing) + + linked_song = starting_song + + //barticles + if(particles_path && ismovable(linked_song.parent)) + particle_holder = new(linked_song.parent, particles_path) + //filters + linked_song.parent?.add_filter("smooth_tunes_outline", 9, list("type" = "outline", "color" = glow_color)) + +///Prevents changing tempo during a song to sneak in final effects quicker + +/datum/component/smooth_tunes/proc/tempo_change(datum/source, datum/song/modified_song) + SIGNAL_HANDLER + if(modified_song.playing && viable_for_final_effect) + to_chat(parent, span_warning("Modifying the song mid-performance has removed your ability to perform the song finishing effect.")) + viable_for_final_effect = FALSE + +///Ends the effect when the song is no longer playing. +/datum/component/smooth_tunes/proc/stop_singing(datum/source, finished) + SIGNAL_HANDLER + STOP_PROCESSING(SSobj, src) + if(viable_for_final_effect) + if(!finished) + to_chat(parent, span_warning("The song was interrupted, you cannot activate the finishing ability!")) + else + linked_songtuner_rite.finish_effect(parent, linked_song) + linked_song.parent?.remove_filter("smooth_tunes_outline") + UnregisterSignal(linked_song.parent, list( + COMSIG_INSTRUMENT_TEMPO_CHANGE, + COMSIG_INSTRUMENT_END, + COMSIG_INSTRUMENT_REPEAT, + )) + linked_song = null + qdel(src) + +/datum/component/smooth_tunes/process(delta_time = SSOBJ_DT) + if(linked_songtuner_rite) + linked_songtuner_rite.song_effect(parent, linked_song) + else + stop_singing() + +#undef LONG_ENOUGH_SONG diff --git a/code/datums/status_effects/buffs.dm b/code/datums/status_effects/buffs.dm index 59f1806d957..6dcf460e0af 100644 --- a/code/datums/status_effects/buffs.dm +++ b/code/datums/status_effects/buffs.dm @@ -348,9 +348,19 @@ /datum/status_effect/antimagic id = "antimagic" + status_type = STATUS_EFFECT_REFRESH duration = 10 SECONDS examine_text = "They seem to be covered in a dull, grey aura." +/datum/status_effect/antimagic/on_creation(mob/living/new_owner, duration = 10 SECONDS) + src.duration = duration + return ..() + +/datum/status_effect/antimagic/refresh(effect, duration = 10 SECONDS) + if(duration == -1) + return + duration = world.time + duration + /datum/status_effect/antimagic/on_apply() owner.visible_message(span_notice("[owner] is coated with a dull aura!")) ADD_TRAIT(owner, TRAIT_ANTIMAGIC, MAGIC_TRAIT) diff --git a/code/datums/wounds/slash.dm b/code/datums/wounds/slash.dm index 045f20b123c..14107d85b4f 100644 --- a/code/datums/wounds/slash.dm +++ b/code/datums/wounds/slash.dm @@ -316,3 +316,9 @@ status_effect_type = /datum/status_effect/wound/slash/critical scar_keyword = "slashcritical" wound_flags = (FLESH_WOUND | ACCEPTS_GAUZE | MANGLES_FLESH) + +/datum/wound/slash/moderate/many_cuts + name = "Numerous Small Slashes" + desc = "Patient's skin has numerous small slashes and cuts, generating moderate blood loss." + examine_desc = "has a ton of small cuts" + occur_text = "is cut numerous times, leaving many small slashes." diff --git a/code/game/objects/effects/effects.dm b/code/game/objects/effects/effects.dm index de108310469..92ab7d3f0cb 100644 --- a/code/game/objects/effects/effects.dm +++ b/code/game/objects/effects/effects.dm @@ -43,6 +43,9 @@ /obj/effect/singularity_act() qdel(src) +///The abstract effect ignores even more effects and is often typechecked for atoms that should truly not be fucked with. +/obj/effect/abstract + /obj/effect/abstract/singularity_pull() return diff --git a/code/game/objects/effects/particle_holder.dm b/code/game/objects/effects/particle_holder.dm new file mode 100644 index 00000000000..e6e8918a5e8 --- /dev/null +++ b/code/game/objects/effects/particle_holder.dm @@ -0,0 +1,66 @@ +///objects can only have one particle on them at a time, so we use these abstract effects to hold and display the effects. You know, so multiple particle effects can exist at once. +///also because some objects do not display particles due to how their visuals are built +/obj/effect/abstract/particle_holder + anchored = TRUE + mouse_opacity = MOUSE_OPACITY_TRANSPARENT + layer = ABOVE_ALL_MOB_LAYER + ///typepath of the last location we're in, if it's different when moved then we need to update vis contents + var/last_attached_location_type + ///the main item we're attached to at the moment, particle holders hold particles for something + var/datum/weakref/weak_attached + ///besides the item we're also sometimes attached to other stuff! (items held emitting particles on a mob) + var/datum/weakref/weak_additional + +/obj/effect/abstract/particle_holder/Initialize(mapload, particle_path = /particles/smoke) + . = ..() + if(!loc) + stack_trace("particle holder was created with no loc!") + return INITIALIZE_HINT_QDEL + if(ismovable(loc)) + RegisterSignal(loc, COMSIG_MOVABLE_MOVED, .proc/on_move) + RegisterSignal(loc, COMSIG_PARENT_QDELETING, .proc/on_qdel) + weak_attached = WEAKREF(loc) + particles = new particle_path + update_visual_contents(loc) + +/obj/effect/abstract/particle_holder/Destroy(force) + var/atom/movable/attached = weak_attached.resolve() + var/atom/movable/additional_attached + if(weak_additional) + additional_attached = weak_additional.resolve() + if(attached) + attached.vis_contents -= src + UnregisterSignal(loc, list(COMSIG_MOVABLE_MOVED, COMSIG_PARENT_QDELETING)) + if(additional_attached) + additional_attached.vis_contents -= src + QDEL_NULL(particles) + return ..() + +///signal called when parent is moved +/obj/effect/abstract/particle_holder/proc/on_move(atom/movable/attached, atom/oldloc, direction) + SIGNAL_HANDLER + if(attached.loc.type != last_attached_location_type) + update_visual_contents(attached) + +///signal called when parent is deleted +/obj/effect/abstract/particle_holder/proc/on_qdel(atom/movable/attached, force) + SIGNAL_HANDLER + qdel(src)//our parent is gone and we need to be as well + +///logic proc for particle holders, aka where they move. +///subtypes of particle holders can override this for particles that should always be turf level or do special things when repositioning. +///this base subtype has some logic for items, as the loc of items becomes mobs very often hiding the particles +/obj/effect/abstract/particle_holder/proc/update_visual_contents(atom/movable/attached_to) + //remove old + if(weak_additional) + var/atom/movable/resolved_location = weak_additional.resolve() + if(resolved_location) + resolved_location.vis_contents -= src + //add to new + if(isitem(attached_to) && ismob(attached_to.loc)) //special case we want to also be emitting from the mob + var/mob/particle_mob = attached_to.loc + last_attached_location_type = attached_to.loc + weak_additional = WEAKREF(particle_mob) + particle_mob.vis_contents += src + //readd to ourselves + attached_to.vis_contents |= src diff --git a/code/game/objects/structures/beds_chairs/chair.dm b/code/game/objects/structures/beds_chairs/chair.dm index 99b14326ebe..606e6f64d79 100644 --- a/code/game/objects/structures/beds_chairs/chair.dm +++ b/code/game/objects/structures/beds_chairs/chair.dm @@ -539,3 +539,15 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/chair/stool/bar, 0) custom_materials = list(/datum/material/plastic = 2000) break_chance = 25 origin_type = /obj/structure/chair/plastic + +/obj/structure/chair/musical + name = "musical chair" + desc = "You listen to this. Either by will or by force." + item_chair = /obj/item/chair/musical + particles = new /particles/musical_notes + +/obj/item/chair/musical + name = "musical chair" + desc = "Oh, so this is like the fucked up Monopoly rules where there are no rules and you can pick up and place the musical chairs as you please." + particles = new /particles/musical_notes + origin_type = /obj/structure/chair/musical diff --git a/code/modules/actionspeed/modifiers/status_effects.dm b/code/modules/actionspeed/modifiers/status_effects.dm index a6f812890ef..fa080edb8d0 100644 --- a/code/modules/actionspeed/modifiers/status_effects.dm +++ b/code/modules/actionspeed/modifiers/status_effects.dm @@ -7,5 +7,8 @@ /datum/actionspeed_modifier/nooartrium multiplicative_slowdown = 0.5 +/datum/actionspeed_modifier/power_chord + multiplicative_slowdown = -0.15 + /datum/actionspeed_modifier/status_effect/hazard_area multiplicative_slowdown = 4 diff --git a/code/modules/instruments/piano_synth.dm b/code/modules/instruments/piano_synth.dm index 90748d0f18f..bf5190675c6 100644 --- a/code/modules/instruments/piano_synth.dm +++ b/code/modules/instruments/piano_synth.dm @@ -32,8 +32,8 @@ /obj/item/instrument/piano_synth/headphones/ComponentInitialize() . = ..() AddElement(/datum/element/update_icon_updates_onmob) - RegisterSignal(src, COMSIG_SONG_START, .proc/start_playing) - RegisterSignal(src, COMSIG_SONG_END, .proc/stop_playing) + RegisterSignal(src, COMSIG_INSTRUMENT_START, .proc/start_playing) + RegisterSignal(src, COMSIG_INSTRUMENT_END, .proc/stop_playing) /** * Called by a component signal when our song starts playing. @@ -120,15 +120,15 @@ /obj/item/circuit_component/synth/register_shell(atom/movable/shell) . = ..() synth = shell - RegisterSignal(synth, COMSIG_SONG_START, .proc/on_song_start) - RegisterSignal(synth, COMSIG_SONG_END, .proc/on_song_end) - RegisterSignal(synth, COMSIG_SONG_SHOULD_STOP_PLAYING, .proc/continue_if_autoplaying) + RegisterSignal(synth, COMSIG_INSTRUMENT_START, .proc/on_song_start) + RegisterSignal(synth, COMSIG_INSTRUMENT_END, .proc/on_song_end) + RegisterSignal(synth, COMSIG_INSTRUMENT_SHOULD_STOP_PLAYING, .proc/continue_if_autoplaying) /obj/item/circuit_component/synth/unregister_shell(atom/movable/shell) if(synth.song.music_player == src) synth.song.stop_playing() synth = null - UnregisterSignal(synth, list(COMSIG_SONG_START, COMSIG_SONG_END, COMSIG_SONG_SHOULD_STOP_PLAYING)) + UnregisterSignal(synth, list(COMSIG_INSTRUMENT_START, COMSIG_INSTRUMENT_END, COMSIG_INSTRUMENT_SHOULD_STOP_PLAYING)) return ..() /obj/item/circuit_component/synth/proc/start_playing(datum/port/input/port) diff --git a/code/modules/instruments/songs/_song.dm b/code/modules/instruments/songs/_song.dm index 9ce10835c3e..cfa4af0bde4 100644 --- a/code/modules/instruments/songs/_song.dm +++ b/code/modules/instruments/songs/_song.dm @@ -126,7 +126,7 @@ /datum/song/New(atom/parent, list/instrument_ids, new_range) SSinstruments.on_song_new(src) lines = list() - tempo = sanitize_tempo(tempo) + tempo = sanitize_tempo(tempo, TRUE) src.parent = parent if(instrument_ids) allowed_instrument_ids = islist(instrument_ids)? instrument_ids : list(instrument_ids) @@ -211,7 +211,8 @@ //we can not afford to runtime, since we are going to be doing sound channel reservations and if we runtime it means we have a channel allocation leak. //wrap the rest of the stuff to ensure stop_playing() is called. do_hearcheck() - SEND_SIGNAL(parent, COMSIG_SONG_START) + SEND_SIGNAL(parent, COMSIG_INSTRUMENT_START, src) + SEND_SIGNAL(user, COMSIG_ATOM_STARTING_INSTRUMENT, src) elapsed_delay = 0 delay_by = 0 current_chord = 1 @@ -222,15 +223,18 @@ /** * Stops playing, terminating all sounds if in synthesized mode. Clears hearing_mobs. + * + * Arguments: + * * finished: boolean, whether the song ended via reaching the end. */ -/datum/song/proc/stop_playing() +/datum/song/proc/stop_playing(finished = FALSE) if(!playing) return playing = FALSE if(!debug_mode) compiled_chords = null STOP_PROCESSING(SSinstruments, src) - SEND_SIGNAL(parent, COMSIG_SONG_END) + SEND_SIGNAL(parent, COMSIG_INSTRUMENT_END, finished) terminate_all_sounds(TRUE) hearing_mobs.len = 0 music_player = null @@ -239,23 +243,27 @@ * Processes our song. */ /datum/song/proc/process_song(wait) - if(!length(compiled_chords) || should_stop_playing(music_player) == STOP_PLAYING) - stop_playing() + if(!length(compiled_chords)) + stop_playing(TRUE) + return + if(should_stop_playing(music_player) == STOP_PLAYING) + stop_playing(FALSE) return var/list/chord = compiled_chords[current_chord] - if(++elapsed_delay >= delay_by) - play_chord(chord) - elapsed_delay = 0 - delay_by = tempodiv_to_delay(chord[length(chord)]) - current_chord++ - if(current_chord > length(compiled_chords)) - if(repeat) - repeat-- - current_chord = 1 - return - else - stop_playing() - return + if(++elapsed_delay < delay_by) + return + play_chord(chord) + elapsed_delay = 0 + delay_by = tempodiv_to_delay(chord[length(chord)]) + current_chord++ + if(current_chord <= length(compiled_chords)) + return + if(!repeat) + stop_playing(TRUE) + return + repeat-- + current_chord = 1 + SEND_SIGNAL(parent, COMSIG_INSTRUMENT_REPEAT, TRUE) /** * Converts a tempodiv to ticks to elapse before playing the next chord, taking into account our tempo. @@ -285,7 +293,7 @@ /datum/song/proc/should_stop_playing(atom/player) if(QDELETED(player) || !using_instrument || !playing) return STOP_PLAYING - return SEND_SIGNAL(parent, COMSIG_SONG_SHOULD_STOP_PLAYING, player) + return SEND_SIGNAL(parent, COMSIG_INSTRUMENT_SHOULD_STOP_PLAYING, player) /// Sets and sanitizes the repeats variable. /datum/song/proc/set_repeats(new_repeats_value) @@ -301,8 +309,10 @@ /** * Sanitizes tempo to a value that makes sense and fits the current world.tick_lag. */ -/datum/song/proc/sanitize_tempo(new_tempo) +/datum/song/proc/sanitize_tempo(new_tempo, initializing = FALSE) new_tempo = abs(new_tempo) + if(!initializing) // not only is it not helpful while initializing but it will runtime really hard since nothing is set up + SEND_SIGNAL(parent, COMSIG_INSTRUMENT_TEMPO_CHANGE, src) return clamp(round(new_tempo, world.tick_lag), world.tick_lag, 5 SECONDS) /** diff --git a/code/modules/mob/living/carbon/life.dm b/code/modules/mob/living/carbon/life.dm index 3b013b98a97..74062b0efa5 100644 --- a/code/modules/mob/living/carbon/life.dm +++ b/code/modules/mob/living/carbon/life.dm @@ -458,7 +458,7 @@ All effects don't start immediately, but rather get worse over time; the rate is adjust_drowsyness(-1 * restingpwr * delta_time) blur_eyes(1 * delta_time) if(DT_PROB(2.5, delta_time)) - AdjustSleeping(100) + AdjustSleeping(10 SECONDS) //Jitteriness if(jitteriness) diff --git a/code/modules/movespeed/modifiers/status_effects.dm b/code/modules/movespeed/modifiers/status_effects.dm index 2d3d69117e1..27384d28aeb 100644 --- a/code/modules/movespeed/modifiers/status_effects.dm +++ b/code/modules/movespeed/modifiers/status_effects.dm @@ -16,6 +16,8 @@ variable = TRUE blacklisted_movetypes = (FLYING|FLOATING) +/datum/movespeed_modifier/status_effect/power_chord + multiplicative_slowdown = -0.2 + /datum/movespeed_modifier/status_effect/hazard_area multiplicative_slowdown = 4 - diff --git a/code/modules/religion/festival/instrument_rites.dm b/code/modules/religion/festival/instrument_rites.dm new file mode 100644 index 00000000000..8463d57a3bc --- /dev/null +++ b/code/modules/religion/festival/instrument_rites.dm @@ -0,0 +1,149 @@ +///prototype for rites that tune a song. +/datum/religion_rites/song_tuner + name = "Tune Song" + desc = "this is a prototype." + ritual_length = 10 SECONDS + favor_cost = 10 + ///if repeats count as continuations instead of a song's end, TRUE + var/repeats_okay = TRUE + ///personal message sent to the chaplain as feedback for their chosen song + var/song_invocation_message = "beep borp you forgot to fill in a variable report to git hub" + ///visible message sent to indicate a song will have special properties + var/song_start_message + ///particle effect of playing this tune + var/particles_path = /particles/musical_notes + ///what the instrument will glow when playing + var/glow_color = "#000000" + +/datum/religion_rites/song_tuner/invoke_effect(mob/living/user, obj/structure/altar_of_gods/altar) + . = ..() + to_chat(user, span_notice(song_invocation_message)) + user.AddComponent(/datum/component/smooth_tunes, src, repeats_okay, particles_path, glow_color) + +/** + * Perform the song effect. + * + * Arguments: + * * song_player - parent of the smooth_tunes component. This is limited to the compatible items of said component, which currently includes mobs and objects so we'll have to type appropriately. + * * song_datum - Datum song being played + */ +/datum/religion_rites/song_tuner/proc/song_effect(atom/song_player, datum/song/song_datum) + return + +/** + * When the song is long enough, it will have a special effect when it ends. + * + * If you want something that ALWAYS goes off regardless of song length, affix it to the Destroy proc. The rite is destroyed when smooth tunes is done. + * + * Arguments: + * * song_player - parent of the smooth_tunes component. This is limited to the compatible items of said component, which currently includes mobs and objects so we'll have to type appropriately. + * * song_datum - Datum song being played + */ +/datum/religion_rites/song_tuner/proc/finish_effect(atom/song_player, datum/song/song_datum) + return + +/datum/religion_rites/song_tuner/evangelism + name = "Evangelical Hymn" + desc = "Spreads the word of your god, gaining favor for each non-holy listener. At the end of the song, you'll bless all listeners, improving mood." + particles_path = /particles/musical_notes/holy + song_invocation_message = "You've prepared a holy song!" + song_start_message = span_notice("This music sounds blessed!") + glow_color = "#FEFFE0" + favor_cost = 0 + +/datum/religion_rites/song_tuner/evangelism/song_effect(atom/song_player, datum/song/song_datum) + if(!song_datum || !GLOB.religious_sect) + return + for(var/mob/living/carbon/human/listener in song_datum.hearing_mobs) + if(listener == song_player || listener.can_block_magic(MAGIC_RESISTANCE_HOLY, charge_cost = 0)) + continue + if(listener.mind?.holy_role) + continue + if(!listener.ckey) //good requirement to have for favor, trust me + continue + GLOB.religious_sect.adjust_favor(0.2) + +/datum/religion_rites/song_tuner/evangelism/finish_effect(atom/song_player, datum/song/song_datum) + for(var/mob/living/carbon/human/listener in song_datum.hearing_mobs) + SEND_SIGNAL(listener, COMSIG_ADD_MOOD_EVENT, "blessing", /datum/mood_event/blessing) + +/datum/religion_rites/song_tuner/nullwave + name = "Nullwave Vibrato" + desc = "Sing a dull song, protecting those who listen from magic." + particles_path = /particles/musical_notes/nullwave + song_invocation_message = "You've prepared an antimagic song!" + song_start_message = span_nicegreen("This music makes you feel protected!") + glow_color = "#a9a9b8" + repeats_okay = FALSE + +/datum/religion_rites/song_tuner/nullwave/song_effect(atom/song_player, datum/song/song_datum) + if(!song_datum) + return + for(var/mob/living/listener in song_datum.hearing_mobs) + if(listener.can_block_magic(MAGIC_RESISTANCE_HOLY, charge_cost = 1)) + continue + listener.apply_status_effect(/datum/status_effect/antimagic, 2 MINUTES) + +/datum/religion_rites/song_tuner/pain + name = "Murderous Chord" + desc = "Sing a sharp song, cutting those around you. Works less effectively on fellow priests. At the end of the song, you'll open the wounds of all listeners." + particles_path = /particles/musical_notes/harm + song_invocation_message = "You've prepared a painful song!" + song_start_message = span_danger("This music cuts like a knife!") + glow_color = "#FF4460" + repeats_okay = FALSE + +/datum/religion_rites/song_tuner/pain/song_effect(atom/song_player, datum/song/song_datum) + if(!song_datum) + return + for(var/mob/living/listener in song_datum.hearing_mobs) + if(listener.can_block_magic(MAGIC_RESISTANCE_HOLY, charge_cost = 0)) + continue + var/pain_juice = 1 + if(listener.mind?.holy_role) + pain_juice *= 0.5 + listener.adjustBruteLoss(pain_juice) + +/datum/religion_rites/song_tuner/pain/finish_effect(atom/song_player, datum/song/song_datum) + for(var/mob/living/carbon/human/listener in song_datum.hearing_mobs) + if(listener.can_block_magic(MAGIC_RESISTANCE_HOLY, charge_cost = 1)) + continue + var/obj/item/bodypart/sliced_limb = pick(listener.bodyparts) + sliced_limb.force_wound_upwards(/datum/wound/slash/moderate/many_cuts) + +/datum/religion_rites/song_tuner/lullaby + name = "Spiritual Lullaby" + desc = "Sing a lullaby, tiring those around you, making them slower. At the end of the song, you'll put people who are tired enough to sleep." + particles_path = /particles/musical_notes/sleepy + song_invocation_message = "You've prepared a sleepy song!" + song_start_message = span_warning("This music's making you feel drowsy...") + favor_cost = 40 //actually really strong + glow_color = "#83F6FF" + repeats_okay = FALSE + ///assoc list of weakrefs to who heard the song, for the finishing effect to look at. + var/list/listener_counter = list() + +/datum/religion_rites/song_tuner/lullaby/Destroy() + listener_counter.Cut() + return ..() + +/datum/religion_rites/song_tuner/lullaby/song_effect(atom/song_player, datum/song/song_datum) + if(!song_datum) + return + for(var/mob/living/listener in song_datum.hearing_mobs) + if(listener.can_block_magic(MAGIC_RESISTANCE_HOLY, charge_cost = 0)) + continue + if(listener.mind?.holy_role) + continue + if(prob(20)) + to_chat(listener, span_warning(pick("The music is putting you to sleep...", "The music makes you nod off for a moment.", "You try to focus on staying awake through the song."))) + listener.emote("yawn") + listener.blur_eyes(2) + +/datum/religion_rites/song_tuner/lullaby/finish_effect(atom/song_player, datum/song/song_datum) + for(var/mob/living/carbon/human/listener in song_datum.hearing_mobs) + if(listener.can_block_magic(MAGIC_RESISTANCE_HOLY, charge_cost = 1)) + continue + to_chat(listener, span_danger("Wow, the ending of that song was... pretty...")) + listener.AdjustSleeping(5 SECONDS) + diff --git a/code/modules/religion/festival/note_particles.dm b/code/modules/religion/festival/note_particles.dm new file mode 100644 index 00000000000..cf8072b8854 --- /dev/null +++ b/code/modules/religion/festival/note_particles.dm @@ -0,0 +1,83 @@ +///musical notes! Try to use these sparingly, gents. +/particles/musical_notes + icon = 'icons/effects/particles/notes/note.dmi' + icon_state = list( + "note_1" = 1, + "note_2" = 1, + "note_3" = 1, + "note_4" = 1, + "note_5" = 1, + "note_6" = 1, + "note_7" = 1, + "note_8" = 1, + ) + width = 100 + height = 100 + count = 250 + spawning = 0.6 + lifespan = 0.7 SECONDS + fade = 1 SECONDS + grow = -0.01 + velocity = list(0, 0) + position = generator("circle", 0, 16, NORMAL_RAND) + drift = generator("vector", list(0, -0.2), list(0, 0.2)) + gravity = list(0, 0.95) + +/particles/musical_notes/holy + icon = 'icons/effects/particles/notes/note_holy.dmi' + icon_state = list( + "holy_1" = 1, + "holy_2" = 1, + "holy_3" = 1, + "holy_4" = 1, + "holy_5" = 1, + "holy_6" = 1, + "holy_7" = 1, + "holy_8" = 1, + "holy_9" = 4, //holy theme specific + ) + +/particles/musical_notes/nullwave + icon = 'icons/effects/particles/notes/note_null.dmi' + icon_state = list( + "null_1" = 1, + "null_2" = 1, + "null_3" = 1, + "null_4" = 1, + "null_5" = 1, + "null_6" = 1, + "null_7" = 1, + "null_8" = 1, + "null_9" = 2, //heal theme specific + "null_10" = 2, //heal theme specific + ) + +/particles/musical_notes/harm + icon = 'icons/effects/particles/notes/note_harm.dmi' + icon_state = list( + "harm_1" = 1, + "harm_2" = 1, + "harm_3" = 1, + "harm_4" = 1, + "harm_5" = 1, + "harm_6" = 1, + "harm_7" = 1, + "harm_8" = 1, + "harm_9" = 2, //harm theme specific + "harm_10" = 2, //harm theme specific + ) + +/particles/musical_notes/sleepy + icon = 'icons/effects/particles/notes/note_sleepy.dmi' + icon_state = list( + "sleepy_1" = 1, + "sleepy_2" = 1, + "sleepy_3" = 1, + "sleepy_4" = 1, + "sleepy_5" = 1, + "sleepy_6" = 1, + "sleepy_7" = 1, + "sleepy_8" = 1, + "sleepy_9" = 2, //sleepy theme specific + "sleepy_10" = 2, //sleepy theme specific + ) diff --git a/code/modules/religion/religion_sects.dm b/code/modules/religion/religion_sects.dm index 88f299227a5..037408f04cd 100644 --- a/code/modules/religion/religion_sects.dm +++ b/code/modules/religion/religion_sects.dm @@ -40,6 +40,8 @@ var/altar_icon_state /// Currently Active (non-deleted) rites var/list/active_rites + /// Whether the structure has CANDLE OVERLAYS! + var/candle_overlay = TRUE /datum/religion_sect/New() . = ..() @@ -315,6 +317,7 @@ altar_icon_state = "convertaltar-burden" alignment = ALIGNMENT_NEUT invalidating_qualities = TRAIT_GENELESS + candle_overlay = FALSE /datum/religion_sect/burden/on_conversion(mob/living/carbon/human/new_convert) ..() @@ -405,3 +408,22 @@ /datum/religion_sect/spar/tool_examine(mob/living/holy_creature) return "You have [round(favor)] sparring matches won in [GLOB.deity]'s name to redeem. You have lost [matches_lost] holy matches. You will be excommunicated after losing three matches." + +/datum/religion_sect/music + name = "Festival God" + quote = "Everything follows a rhythm- The heartbeat of the universe!" + desc = "Make wonderful music! Sooth or serrate your friends and foes with the beat." + tgui_icon = "music" + altar_icon_state = "convertaltar-festival" + alignment = ALIGNMENT_GOOD + candle_overlay = FALSE + rites_list = list( + /datum/religion_rites/song_tuner/evangelism, + /datum/religion_rites/song_tuner/nullwave, + /datum/religion_rites/song_tuner/pain, + /datum/religion_rites/song_tuner/lullaby, + ) + +/datum/religion_sect/music/on_conversion(mob/living/chap) + . = ..() + new /obj/item/choice_beacon/music(get_turf(chap)) diff --git a/code/modules/religion/religion_structures.dm b/code/modules/religion/religion_structures.dm index f3df8eb9f6e..d7f97bb81c5 100644 --- a/code/modules/religion/religion_structures.dm +++ b/code/modules/religion/religion_structures.dm @@ -27,8 +27,11 @@ return ..() /obj/structure/altar_of_gods/update_overlays() - . = ..() - . += "convertaltarcandle" + var/list/new_overlays = ..() + if(GLOB.religious_sect) + return new_overlays + new_overlays += "convertaltarcandle" + return new_overlays /obj/structure/altar_of_gods/attack_hand(mob/living/user, list/modifiers) if(!Adjacent(user) || !user.pulling) diff --git a/code/modules/religion/rites.dm b/code/modules/religion/rites.dm index 9a054b4712d..61198d31d3a 100644 --- a/code/modules/religion/rites.dm +++ b/code/modules/religion/rites.dm @@ -1,15 +1,17 @@ /datum/religion_rites -/// name of the religious rite + /// name of the religious rite var/name = "religious rite" -/// Description of the religious rite + /// Description of the religious rite var/desc = "immm gonna rooon" -/// length it takes to complete the ritual + /// length it takes to complete the ritual var/ritual_length = (10 SECONDS) //total length it'll take -/// list of invocations said (strings) throughout the rite + /// list of invocations said (strings) throughout the rite var/list/ritual_invocations //strings that are by default said evenly throughout the rite -/// message when you invoke + /// message when you invoke var/invoke_msg var/favor_cost = 0 + /// does the altar auto-delete the rite + var/auto_delete = TRUE /datum/religion_rites/New() . = ..() diff --git a/icons/effects/particles/notes/note.dmi b/icons/effects/particles/notes/note.dmi new file mode 100644 index 0000000000000000000000000000000000000000..766a29e6a8995f89bc7771b0b6aa816882215493 GIT binary patch literal 397 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeG3?%1&o4*=JaR&H=xE?rg0LTQAK6)FwfGoz6 zAirP+hi5m^fSi`9kcbkO)Z*l#%z~24{5%GRiaEhy1x2ObzXTV2{Q5-8TUYDcne)LL zLJck&KX{~b-beE!Ls3uf4h!QTi_T4o}l!=Zod5`?(kLO_olC(ArEvdgQu&X%Q~loCIH=ooiYFb literal 0 HcmV?d00001 diff --git a/icons/effects/particles/notes/note_harm.dmi b/icons/effects/particles/notes/note_harm.dmi new file mode 100644 index 0000000000000000000000000000000000000000..0fe386e1ed380b9cc3ec034ef99e29103d734c0c GIT binary patch literal 1763 zcmaKtc~sJA7sr2yD7m4DX_UCeFq66Dl4~-GDQ~%gV&jw+;x=xXA}NtsZedANX5)g2 zh>lufYL0qbMkmRo$jUt{$=oe7cR`0aXU^$8?;r0U&vXBH?mg!@-~0XCo8jT+tSE<& z0{}n~=YsW;#3acHfXYbjfrJE{Brp>QzOh*HMN&*?bZlr;BmhwJZ}v3HT{G55ov_;V zrp=tqOhcv`9MavtvQIx?G?15~KeHGgJ*O=i+wQ;%M_@t8NW}<4?vfZ&+(OV_;|0P} zxTuLU)NR_S9t#^Z{B2j^ z>_W4ZkQvz+F-=oRFYE#U$SC2kKN6_6zmueASmM)NAF52gAT# zCZJlVI?+Jg%P?~Q`Fy6Y|V#9(#b zHYQr%icS&?MbRf)%7`WX(Ce)t4+=OvMh6t4v&xExQcXoI3+;o+Y*(5w7b-v~t#sjsU8zrh($<@i>ORFCe!G zVEuY{jh_dx0o zUWf9$!x(Z0Em)<4e;_LYvoJRw+a}@ zB&gGmZ6c<>4E0g9o;vivCNt|0C(YPiS;qSGb;erY*)*Yd1cI`)dVciw!n6mo4(9 z?rOS%XxnSSI{2&5JpYk1^pX0FlsLw&+~y!r<#u6Vvt~nZUCk?*eFeMxK$-#|gE%qK zi;-jwZLDv-npsFNwr+DZ9-;`RYmd=${3*51pB8pvUnvZqQ+Cp%-B)MPnG8fjAsJ)Y3LuVwBu?ALdf47Rpf&93?`}VMOIhj=!ygB*r}0+*ZHN!}})0 z4m|ZL(vd$8rP^D?httWG;ZX8hS+t&AQ)a&C^N3N;f#WF7b0K<88>=k0UEvr#C8hF_ z~o`{o=8%Ic*w|Z zcYLzXXFNHl9LC#nwbyXo&XwtHEB3^ajI zbJYzsK+n#L42a3p1$f*NJ?0Zf@OvvV<@!LTM(xH>ci}tK)gMfE%?P^O)Ns?CWC^tJ zz1)Am{bs-t@$sbjCi1aj!c*}7aQ-?*4bxpdRzg8yV(Cw}ilNsGbq~##dfC9Vt>1mv zr2-y7F*7HNQl)&aV>cHbw8h@i&4zop!QA=W42?f^`9jjpsz&*s9c@1SF7Wch=Vfz= zZmhAxRUT4tA`0`l!d{5Vy=q2{rMpUck48Hl#!D+`!LM`R?u2-b=`~54!0vjUPHcy_ zsz+}l6>V36*=EYC>mEw8etblT2A*Q3c-lUkRHpfeZb^2=gBA6}wrphJsH}3qS-6D7 zCCquKa+VS-ze?w&wQd38UH~iIs$F8$C!ZY@E=_fBmYj>3W9iG=WHm%Wl5F0*Q#>(U z2fvFIPW3Zh^CY~m?`U=T{dJ#TG24x83^xF-n4LP`Cp2tZNUhS6d|=kuvx*t?e$^pN ziTUXbctMM!l~b*{ib>due$(cgn!#sZoXl9%Zc)p3Q@vtKjBK(jzEuaHT}5QiW@-`{ zc{sRVnd1-vd0*Sm+6fNsL(1!Ck8`cPY(Sj0+1cl1YUzl2dFW~H%5-c0g3&!msN%6w hiX%{S=G!P1!LA(79(Sk)he@^;fOB%gK6D63{u={qD{ue+ literal 0 HcmV?d00001 diff --git a/icons/effects/particles/notes/note_holy.dmi b/icons/effects/particles/notes/note_holy.dmi new file mode 100644 index 0000000000000000000000000000000000000000..f817e8253d3997c12dd6359a718a80a1477bf60f GIT binary patch literal 1478 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 Mz!ETz(4@=%0=fa!kpKVy literal 0 HcmV?d00001 diff --git a/icons/effects/particles/notes/note_sleepy.dmi b/icons/effects/particles/notes/note_sleepy.dmi new file mode 100644 index 0000000000000000000000000000000000000000..21030914a9c0ea47941ed662519f4fca4c9d71b0 GIT binary patch literal 1544 zcmZ`(eK^wz9RK}>w4sTO7}{3eqJ|!&OEnob&S=JQQlq>*!XO7p9N>Z2nRBCWCA@aWrcw?k@*0T-bgN(9bV;Kx>tpHoJO;dYs!w&SE%$6#4jb|7Yoh+s`vd^4J{dCJ-7kE-^SUx`kVJb(STNglBAdp7L<$|Zv)lN(1D7Exl^bmC<7 zxy1{MUe`7U?qyi2#*5C?KL)x7>$G)^Kt`x@q}UtMT@?T?4u72&%!*OS$N1MIAFT#$ zdF1#!3?1H>ppduSiP`oR5m3V?=AJcaN}vZw?s#<-fAy;eTLNh>a+QtDUP&}4kC+h{ zLG$6DYCQV#FXj$AvQi|9Ihk)&z}MwMY%5BL{1Npj5&Z>f7yb{<&y9H4PDeU7>j>PR z(%$K>S|2a!he6O_52srvIdoHnc!FhHWQ>OtAa6TTKXmFOUDqJ23P2}ITYYI$u^2qG zmf9&?;?1?-W5L1?lG5+5GDeDk4xU$iExgkG?AW~Nvxd^u%kyu8!w*BoB8) za*&Q(0)sjRaw{r~)HAffod`@7Z|dUl^N5wVFZBWZQ>R>Y-{C=dN>{~i^qTd4 z80q4(f*5S!X-^e4YH9jt{e)CDg|lA09RE_hWEt%2;|WnjqWhP(6^|u-9G*Wpb%@=# z61hgssbC)9ROFjyIpH({xn6NzSrEMtnwR#4cPiD&$&cdG=wMAJ!^yb;5W)4TFI*rg zt5V(bG-n3ZI8t+h{FbgF?Ya)Z=6YIv_tOy!vl!7+v$D5OEaF&Ycy@eV9d~M;i^MR} zHX@~i5%$V11?RlkIbq6UXBnpxRi@1!)54^=v>e)!)86klW@u?l6BPyJS(tkpiIiAw z=;rhDv%V*&x`P^zR~=kXDte>!eqHrYf6=CNBL+w%*7zt#)6sAEWow;#bU8K#)yk?a ze{A_K*%=F_fllS8Dnm>wR!w5-`{t?koTp5)c&HspHNI6P&bCT(+P&^V#qu&F57ybA zWde2o!jhHeH_^uUGgda4ssHfje=9BE;kuT6pw%VA1u8FNIGG52FR?<5R?e67HvM&u%VStbe$y3cPaUAD2Z34^Z7N7@y%3zw|=EMPwm zEeUhCLI^j|_}gLcZte(C>nttA8569@9}A@58vBUQ%77%vkORJ+B`A33rtiC$RGkcG z7Y+%gY{(%vyJ|z$kU(C2)*Z;R``2Uo`|t^{Wnl(C^gs}*e(eCsgG{(}n8yAK#Wm2- literal 0 HcmV?d00001 diff --git a/icons/obj/hand_of_god_structures.dmi b/icons/obj/hand_of_god_structures.dmi index 4c19d560b22d36c3ee0037a51ba84889c79d3fae..fc630457d2ba293187153d118656e9e04e8c4e6f 100644 GIT binary patch literal 32267 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 E?<8St7DYuw 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