Martial Arts Mastery (#10089)

This commit is contained in:
Geeves
2020-11-17 10:28:04 +01:00
committed by GitHub
parent cbb9e5f2d3
commit 6822e76484
24 changed files with 141 additions and 54 deletions
@@ -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."))