mirror of
https://github.com/Aurorastation/Aurora.3.git
synced 2026-07-19 03:49:10 +01:00
7d058fc613
V2 of [previous music playing PR](https://github.com/Aurorastation/Aurora.3/pull/21466). TLDR no longer uses the connect_range component for implementation because it turned out a bit too inflexible for overlapping music players. Removes a NanoUI template for the [TGUI update](https://github.com/Aurorastation/Aurora.3/pull/21046). New changelog: - refactor: "Ported Jukebox's NanoUI interface to TGUI." - refactor: "Ported Jukebox audio playing functionality to a component." - refactor: "Sound keys refactored from singletons to datums, along with larger breakout of sound.dm to allow for easier SFX updates in future." - code_imp: "Expanded track datums to include track lengths." - code_imp: "Reorganized music file folders for more intuitive access." - rscadd: "Earphone status feedback text now includes track length." - rscadd: "Added autoplay functionality to earphones." - bugfix: "Fixed earphones' 'Previous Song' verb not sending you to the end of the playlist when used while the first track is selected." - bugfix: "Fixed gain adjustment for 'Konyang-1' (-23 dB -> standard -9.8 dB)." - bugfix: "Fixed y-offset of audioconsole-running overlay animation to line up with the actual screen." --------- Co-authored-by: VMSolidus <evilexecutive@gmail.com>
93 lines
3.5 KiB
Plaintext
93 lines
3.5 KiB
Plaintext
#define PAINFUL_PALM "DDH"
|
|
#define SKRELL_LEG_SWEEP "DHD"
|
|
#define DISLOCATING_STRIKE "HDDD"
|
|
|
|
/datum/martial_art/karak_virul
|
|
name = "Karak Virul"
|
|
help_verb = /datum/martial_art/karak_virul/proc/karak_virul_help
|
|
|
|
/datum/martial_art/karak_virul/proc/check_streak(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D)
|
|
if(findtext(streak, PAINFUL_PALM))
|
|
streak = ""
|
|
painful_palm(A,D)
|
|
return 1
|
|
if(findtext(streak, SKRELL_LEG_SWEEP))
|
|
streak = ""
|
|
leg_sweep(A,D)
|
|
return 1
|
|
if(findtext(streak, DISLOCATING_STRIKE))
|
|
streak = ""
|
|
dislocating_strike(A,D)
|
|
return 1
|
|
return 0
|
|
|
|
/datum/martial_art/karak_virul/proc/leg_sweep(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D)
|
|
A.do_attack_animation(D)
|
|
if(D.stat || D.weakened)
|
|
return 0
|
|
D.visible_message(SPAN_WARNING("[A] leg sweeps [D]!"))
|
|
playsound(get_turf(A), SFX_SWING_HIT, 50, 1, -1)
|
|
D.apply_damage(5, DAMAGE_BRUTE)
|
|
D.Weaken(2)
|
|
return 1
|
|
|
|
/datum/martial_art/karak_virul/proc/painful_palm(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D)//is actually lung punch
|
|
A.do_attack_animation(D)
|
|
A.visible_message(SPAN_WARNING("[A] strikes [D] with their open palm!"))
|
|
playsound(get_turf(A), SFX_PUNCH, 50, 1, -1)
|
|
var/obj/item/organ/external/affecting = D.get_organ(ran_zone(A.zone_sel.selecting))
|
|
D.apply_damage(25, DAMAGE_PAIN, affecting)
|
|
return 1
|
|
|
|
/datum/martial_art/karak_virul/proc/dislocating_strike(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D)
|
|
A.do_attack_animation(D)
|
|
var/obj/item/organ/external/organ = D.get_organ(A.zone_sel.selecting)
|
|
if(!organ || ORGAN_IS_DISLOCATED(organ) || organ.dislocated == -1)
|
|
return 0
|
|
organ.dislocate(1)
|
|
A.visible_message(SPAN_WARNING("[A] strikes [D]'s [organ.name] with their closed fist!"))
|
|
D.visible_message(SPAN_DANGER("[D]'s [organ.joint] [pick("gives way","caves in","crumbles","collapses")]!"))
|
|
admin_attack_log(A, D, "dislocated [organ.joint].", "had his [organ.joint] dislocated.", "dislocated [organ.joint] of")
|
|
playsound(get_turf(A), SFX_PUNCH, 50, 1, -1)
|
|
return 1
|
|
|
|
/datum/martial_art/karak_virul/grab_act(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D)
|
|
if(check_streak(A,D))
|
|
return 1
|
|
..()
|
|
|
|
/datum/martial_art/karak_virul/harm_act(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D)
|
|
add_to_streak("H",D)
|
|
if(check_streak(A,D))
|
|
return 1
|
|
basic_hit(A,D)
|
|
return 1
|
|
|
|
|
|
/datum/martial_art/karak_virul/disarm_act(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D)
|
|
add_to_streak("D",D)
|
|
if(check_streak(A,D))
|
|
return 1
|
|
basic_hit(A,D)
|
|
return 1
|
|
|
|
/datum/martial_art/karak_virul/proc/karak_virul_help()
|
|
set name = "Recall Karak Virul"
|
|
set desc = "Remember the martial techniques of the Karak Virul."
|
|
set category = "Abilities"
|
|
|
|
to_chat(usr, "<b><i>You warble deeply and recall the teachings...</i></b>")
|
|
to_chat(usr, "<span class='notice'>Painful Palm</span>: Disarm Harm Harm. Strikes your target with a painful hit, causing some pain.")
|
|
to_chat(usr, "<span class='notice'>Leg Sweep</span>: Disarm Harm Disarm.. Trips the victim, rendering them prone and unable to move for a short time.")
|
|
to_chat(usr, "<span class='notice'>Dislocating Strike</span>: Harm Disarm Disarm Disarm. Delivers a strong punch that can dislocate your target's limb.")
|
|
|
|
/obj/item/martial_manual/skrell
|
|
name = "karak virul manual"
|
|
desc = "A manual designated to teach the user about the skrellian martial art of Karak Virul."
|
|
martial_art = /datum/martial_art/karak_virul
|
|
species_restriction = list(SPECIES_SKRELL, SPECIES_SKRELL_AXIORI)
|
|
|
|
#undef PAINFUL_PALM
|
|
#undef SKRELL_LEG_SWEEP
|
|
#undef DISLOCATING_STRIKE
|