mirror of
https://github.com/Aurorastation/Aurora.3.git
synced 2026-08-31 00:49:06 +01:00
Martial Arts Mastery (#10089)
This commit is contained in:
@@ -100,7 +100,7 @@
|
||||
|
||||
return
|
||||
|
||||
var/datum/martial_art/attacker_style = H.martial_art
|
||||
var/datum/martial_art/attacker_style = H.primary_martial_art
|
||||
|
||||
switch(M.a_intent)
|
||||
if(I_HELP)
|
||||
|
||||
@@ -9,18 +9,17 @@ emp_act
|
||||
*/
|
||||
|
||||
/mob/living/carbon/human/bullet_act(var/obj/item/projectile/P, var/def_zone)
|
||||
|
||||
var/species_check = src.species.bullet_act(P, def_zone, src)
|
||||
|
||||
if(species_check)
|
||||
return species_check
|
||||
|
||||
if(!is_physically_disabled())
|
||||
if(martial_art && martial_art.deflection_chance)
|
||||
if(prob(martial_art.deflection_chance))
|
||||
src.visible_message("<span class='danger'>\The [src] deflects \the [P]!</span>")
|
||||
playsound(src, /decl/sound_category/bulletflyby_sound, 75, 1)
|
||||
return 0
|
||||
var/deflection_chance = check_martial_deflection_chance()
|
||||
if(prob(deflection_chance))
|
||||
visible_message(SPAN_WARNING("\The [src] deftly dodges \the [P]!"), SPAN_NOTICE("You deftly dodge \the [P]!"))
|
||||
playsound(src, /decl/sound_category/bulletflyby_sound, 75, TRUE)
|
||||
return PROJECTILE_DODGED
|
||||
|
||||
def_zone = check_zone(def_zone)
|
||||
if(!has_organ(def_zone))
|
||||
|
||||
@@ -114,4 +114,5 @@
|
||||
|
||||
var/datum/unarmed_attack/default_attack //default unarmed attack
|
||||
|
||||
var/datum/martial_art/martial_art = null
|
||||
var/datum/martial_art/primary_martial_art = null
|
||||
var/list/datum/martial_art/known_martial_arts = null
|
||||
@@ -216,3 +216,37 @@
|
||||
. = 80 * (1 - bodytemperature / species.cold_level_3)
|
||||
. = max(20, .)
|
||||
return round(.)
|
||||
|
||||
// Martial Art Helpers
|
||||
/mob/living/carbon/human/proc/check_martial_deflection_chance()
|
||||
var/deflection_chance = 0
|
||||
if(!length(known_martial_arts))
|
||||
return deflection_chance
|
||||
for(var/art in known_martial_arts)
|
||||
var/datum/martial_art/M = art
|
||||
deflection_chance = max(deflection_chance, M.deflection_chance)
|
||||
return deflection_chance
|
||||
|
||||
/mob/living/carbon/human/proc/check_weapon_affinity(var/obj/O, var/parry_chance)
|
||||
if(!length(known_martial_arts))
|
||||
return FALSE
|
||||
var/parry_bonus = 0
|
||||
for(var/art in known_martial_arts)
|
||||
var/datum/martial_art/M = art
|
||||
if(istype(O, M.weapon_affinity))
|
||||
if(parry_chance)
|
||||
parry_bonus = max(parry_bonus, M.parry_multiplier)
|
||||
continue
|
||||
return TRUE
|
||||
if(parry_chance)
|
||||
return parry_bonus
|
||||
return FALSE
|
||||
|
||||
/mob/living/carbon/human/proc/check_no_guns()
|
||||
if(!length(known_martial_arts))
|
||||
return FALSE
|
||||
for(var/art in known_martial_arts)
|
||||
var/datum/martial_art/M = art
|
||||
if(M.no_guns)
|
||||
return M.no_guns_message
|
||||
return FALSE
|
||||
@@ -1183,3 +1183,19 @@ mob/living/carbon/human/proc/change_monitor()
|
||||
for(var/line in airInfo)
|
||||
to_chat(src, SPAN_NOTICE("[line]"))
|
||||
return
|
||||
|
||||
/mob/living/carbon/human/proc/select_primary_martial_art()
|
||||
set name = "Select Martial Art"
|
||||
set desc = "Set the martial art you want to use when fighting barehanded."
|
||||
set category = "Abilities"
|
||||
|
||||
if(!length(known_martial_arts))
|
||||
to_chat(src, SPAN_WARNING("You don't know any martial arts!"))
|
||||
return
|
||||
|
||||
var/datum/martial_art/selected_martial_art = input(src, "Select a primary martial art to use when fighting barehanded.", "Martial Art Selection") as null|anything in known_martial_arts
|
||||
if(!selected_martial_art)
|
||||
return
|
||||
|
||||
primary_martial_art = selected_martial_art
|
||||
to_chat(src, SPAN_NOTICE("You will now use [primary_martial_art.name] when fighting barehanded."))
|
||||
Reference in New Issue
Block a user