From 157ef93c0b429ffe3e03b10dc557252b913c0fd8 Mon Sep 17 00:00:00 2001 From: necromanceranne Date: Wed, 1 Apr 2020 15:12:59 +1100 Subject: [PATCH 01/25] I think everyone should be landing punches now. --- code/modules/mob/living/carbon/human/species.dm | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm index f0bf2fc23e..199f9de4a1 100644 --- a/code/modules/mob/living/carbon/human/species.dm +++ b/code/modules/mob/living/carbon/human/species.dm @@ -1477,6 +1477,8 @@ GLOBAL_LIST_EMPTY(roundstart_race_names) user.adjustStaminaLossBuffered(5) //CITADEL CHANGE - makes punching cause staminaloss var/damage = rand(user.dna.species.punchdamagelow, user.dna.species.punchdamagehigh) + var/puncherstam = user.getStaminaLoss() + var/puncherbrute = user.getBruteLoss() //CITADEL CHANGES - makes resting and disabled combat mode reduce punch damage, makes being out of combat mode result in you taking more damage if(!(target.combat_flags & COMBAT_FLAG_COMBAT_ACTIVE) && damage < user.dna.species.punchstunthreshold) @@ -1494,7 +1496,7 @@ GLOBAL_LIST_EMPTY(roundstart_race_names) if(atk_verb == ATTACK_EFFECT_KICK) //kicks never miss (provided your species deals more than 0 damage) miss_chance = 0 else - miss_chance = min((user.dna.species.punchdamagehigh/user.dna.species.punchdamagelow) + user.getStaminaLoss() + (user.getBruteLoss()*0.5), 100) //old base chance for a miss + various damage. capped at 100 to prevent weirdness in prob() + miss_chance = min(puncherstam + (puncherbrute*0.5), 100) //probability of miss based on stamina + half of brute. capped at 100 to prevent weirdness in prob() if(!damage || !affecting || prob(miss_chance))//future-proofing for species that have 0 damage/weird cases where no zone is targeted playsound(target.loc, user.dna.species.miss_sound, 25, TRUE, -1) From 13c474f2af08623e48344481d3d9348f87dbe356 Mon Sep 17 00:00:00 2001 From: necromanceranne Date: Wed, 1 Apr 2020 22:05:22 +1100 Subject: [PATCH 02/25] brawling just got mathematical? --- code/modules/mob/living/carbon/human/species.dm | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm index 199f9de4a1..3f7b7d5914 100644 --- a/code/modules/mob/living/carbon/human/species.dm +++ b/code/modules/mob/living/carbon/human/species.dm @@ -1479,6 +1479,8 @@ GLOBAL_LIST_EMPTY(roundstart_race_names) var/damage = rand(user.dna.species.punchdamagelow, user.dna.species.punchdamagehigh) var/puncherstam = user.getStaminaLoss() var/puncherbrute = user.getBruteLoss() + var/punchedstam = target.getStaminaLoss() + var/punchedbrute = target.getBruteLoss() //CITADEL CHANGES - makes resting and disabled combat mode reduce punch damage, makes being out of combat mode result in you taking more damage if(!(target.combat_flags & COMBAT_FLAG_COMBAT_ACTIVE) && damage < user.dna.species.punchstunthreshold) @@ -1496,7 +1498,7 @@ GLOBAL_LIST_EMPTY(roundstart_race_names) if(atk_verb == ATTACK_EFFECT_KICK) //kicks never miss (provided your species deals more than 0 damage) miss_chance = 0 else - miss_chance = min(puncherstam + (puncherbrute*0.5), 100) //probability of miss based on stamina + half of brute. capped at 100 to prevent weirdness in prob() + miss_chance = min(clamp(((puncherstam + puncherbrute)*0.5) - ((punchedstam + punchedbrute)*0.5), 0, 100)) //probability of miss based on half your stamina and brute total against half their stamina and brute total. Capped at max 100 and min 0 to prevent weirdness in prob() if(!damage || !affecting || prob(miss_chance))//future-proofing for species that have 0 damage/weird cases where no zone is targeted playsound(target.loc, user.dna.species.miss_sound, 25, TRUE, -1) From f26a9b948c2c8c65f128aeb52c6346357a36b8eb Mon Sep 17 00:00:00 2001 From: necromanceranne Date: Fri, 3 Apr 2020 10:50:26 +1100 Subject: [PATCH 03/25] pawnch harder get tired less this is a balance change now I guess --- code/modules/mob/living/carbon/human/species.dm | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm index 3f7b7d5914..b2aeab4a5c 100644 --- a/code/modules/mob/living/carbon/human/species.dm +++ b/code/modules/mob/living/carbon/human/species.dm @@ -1474,7 +1474,7 @@ GLOBAL_LIST_EMPTY(roundstart_race_names) else user.do_attack_animation(target, ATTACK_EFFECT_PUNCH) - user.adjustStaminaLossBuffered(5) //CITADEL CHANGE - makes punching cause staminaloss + user.adjustStaminaLossBuffered(3.5) //CITADEL CHANGE - makes punching cause staminaloss var/damage = rand(user.dna.species.punchdamagelow, user.dna.species.punchdamagehigh) var/puncherstam = user.getStaminaLoss() @@ -1483,8 +1483,8 @@ GLOBAL_LIST_EMPTY(roundstart_race_names) var/punchedbrute = target.getBruteLoss() //CITADEL CHANGES - makes resting and disabled combat mode reduce punch damage, makes being out of combat mode result in you taking more damage - if(!(target.combat_flags & COMBAT_FLAG_COMBAT_ACTIVE) && damage < user.dna.species.punchstunthreshold) - damage = user.dna.species.punchstunthreshold - 1 + if(!(target.combat_flags & COMBAT_FLAG_COMBAT_ACTIVE)) + damage *= 1.5 if(!CHECK_MOBILITY(user, MOBILITY_STAND)) damage *= 0.5 if(!(user.combat_flags & COMBAT_FLAG_COMBAT_ACTIVE)) @@ -1498,7 +1498,7 @@ GLOBAL_LIST_EMPTY(roundstart_race_names) if(atk_verb == ATTACK_EFFECT_KICK) //kicks never miss (provided your species deals more than 0 damage) miss_chance = 0 else - miss_chance = min(clamp(((puncherstam + puncherbrute)*0.5) - ((punchedstam + punchedbrute)*0.5), 0, 100)) //probability of miss based on half your stamina and brute total against half their stamina and brute total. Capped at max 100 and min 0 to prevent weirdness in prob() + miss_chance = min(10 + ((puncherstam + puncherbrute)*0.5), 100) //probability of miss has a base of 10, and modified based on half your stamina and brute total. Capped at max 100 and min 0 to prevent weirdness in prob() if(!damage || !affecting || prob(miss_chance))//future-proofing for species that have 0 damage/weird cases where no zone is targeted playsound(target.loc, user.dna.species.miss_sound, 25, TRUE, -1) @@ -1536,7 +1536,7 @@ GLOBAL_LIST_EMPTY(roundstart_race_names) target.visible_message("[user] knocks [target] down!", \ "You're knocked down by [user]!", "You hear aggressive shuffling followed by a loud thud!", COMBAT_MESSAGE_RANGE, user) to_chat(user, "You knock [target] down!") - var/knockdown_duration = 40 + (target.getStaminaLoss() + (target.getBruteLoss()*0.5))*0.8 - armor_block + var/knockdown_duration = 40 + (punchedstam + (punchedbrute*0.5))*0.8 - armor_block target.DefaultCombatKnockdown(knockdown_duration) target.forcesay(GLOB.hit_appends) log_combat(user, target, "got a stun punch with their previous punch") From c481db2bfd2497a0c7ef0195d3f035cbb313ca13 Mon Sep 17 00:00:00 2001 From: necromanceranne Date: Fri, 3 Apr 2020 11:25:29 +1100 Subject: [PATCH 04/25] nearly added instastun king hits, now stun punches are more rng --- code/modules/mob/living/carbon/human/species.dm | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm index b2aeab4a5c..5245d4786a 100644 --- a/code/modules/mob/living/carbon/human/species.dm +++ b/code/modules/mob/living/carbon/human/species.dm @@ -1533,13 +1533,14 @@ GLOBAL_LIST_EMPTY(roundstart_race_names) log_combat(user, target, "punched") if((target.stat != DEAD) && damage >= user.dna.species.punchstunthreshold) - target.visible_message("[user] knocks [target] down!", \ - "You're knocked down by [user]!", "You hear aggressive shuffling followed by a loud thud!", COMBAT_MESSAGE_RANGE, user) - to_chat(user, "You knock [target] down!") - var/knockdown_duration = 40 + (punchedstam + (punchedbrute*0.5))*0.8 - armor_block - target.DefaultCombatKnockdown(knockdown_duration) - target.forcesay(GLOB.hit_appends) - log_combat(user, target, "got a stun punch with their previous punch") + if((punchedstam > 50) && prob(punchedstam*0.5)) \\If our punch victim has been hit above the threshold, and they have more than 50 stamina damage, roll for stun, probability of 1% per 2 stamina damage + target.visible_message("[user] knocks [target] down!", \ + "You're knocked down by [user]!", "You hear aggressive shuffling followed by a loud thud!", COMBAT_MESSAGE_RANGE, user) + to_chat(user, "You knock [target] down!") + var/knockdown_duration = 40 + (punchedstam + (punchedbrute*0.5))*0.8 - armor_block + target.DefaultCombatKnockdown(knockdown_duration) + target.forcesay(GLOB.hit_appends) + log_combat(user, target, "got a stun punch with their previous punch") else if(!(target.mobility_flags & MOBILITY_STAND)) target.forcesay(GLOB.hit_appends) From e1a013bcb25636163c35700b56452aaad191b4d7 Mon Sep 17 00:00:00 2001 From: necromanceranne Date: Fri, 3 Apr 2020 11:30:00 +1100 Subject: [PATCH 05/25] I'm tired okay --- code/modules/mob/living/carbon/human/species.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm index 5245d4786a..34c65982dc 100644 --- a/code/modules/mob/living/carbon/human/species.dm +++ b/code/modules/mob/living/carbon/human/species.dm @@ -1533,7 +1533,7 @@ GLOBAL_LIST_EMPTY(roundstart_race_names) log_combat(user, target, "punched") if((target.stat != DEAD) && damage >= user.dna.species.punchstunthreshold) - if((punchedstam > 50) && prob(punchedstam*0.5)) \\If our punch victim has been hit above the threshold, and they have more than 50 stamina damage, roll for stun, probability of 1% per 2 stamina damage + if((punchedstam > 50) && prob(punchedstam*0.5)) //If our punch victim has been hit above the threshold, and they have more than 50 stamina damage, roll for stun, probability of 1% per 2 stamina damage target.visible_message("[user] knocks [target] down!", \ "You're knocked down by [user]!", "You hear aggressive shuffling followed by a loud thud!", COMBAT_MESSAGE_RANGE, user) to_chat(user, "You knock [target] down!") From 0c46c151f947b93fe55ea1850dc03a9ce9980297 Mon Sep 17 00:00:00 2001 From: necromanceranne Date: Fri, 3 Apr 2020 19:42:25 +1100 Subject: [PATCH 06/25] Changes the vast majority of punching to be more changable with gear, martial arts now utilize species punch values for damage. --- code/__DEFINES/traits.dm | 5 +- code/controllers/subsystem/traumas.dm | 2 +- code/datums/martial/_martial.dm | 6 +- code/datums/martial/boxing.dm | 9 +- code/datums/martial/cqc.dm | 20 +-- code/datums/martial/krav_maga.dm | 8 +- code/datums/martial/mushpunch.dm | 2 +- code/datums/martial/psychotic_brawl.dm | 8 +- code/datums/martial/rising_bass.dm | 10 +- code/datums/martial/sleeping_carp.dm | 14 +- code/game/machinery/computer/arcade.dm | 2 +- code/modules/cargo/exports/gear.dm | 2 +- code/modules/cargo/exports/weapons.dm | 2 +- code/modules/clothing/gloves/color.dm | 4 +- code/modules/clothing/gloves/miscellaneous.dm | 166 ++++++++++++------ .../mob/living/carbon/human/species.dm | 19 +- .../carbon/human/species_types/golems.dm | 6 +- .../carbon/human/species_types/mushpeople.dm | 6 +- .../carbon/human/species_types/synths.dm | 2 +- .../chemistry/reagents/drug_reagents.dm | 12 +- .../uplink/uplink_items/uplink_dangerous.dm | 11 +- 21 files changed, 204 insertions(+), 112 deletions(-) diff --git a/code/__DEFINES/traits.dm b/code/__DEFINES/traits.dm index a8c0353591..ff59d72929 100644 --- a/code/__DEFINES/traits.dm +++ b/code/__DEFINES/traits.dm @@ -147,6 +147,8 @@ #define TRAIT_NOPULSE "nopulse" // Your heart doesn't beat. #define TRAIT_EXEMPT_HEALTH_EVENTS "exempt-health-events" #define TRAIT_NO_MIDROUND_ANTAG "no-midround-antag" //can't be turned into an antag by random events +#define TRAIT_PUGILIST "pugilist" //This guy punches people for a living +#define TRAIT_KI_VAMPIRE "ki-vampire" //when someone with this trait rolls maximum damage on a punch and stuns the target, they regain some stamina and do clone damage // mobility flag traits // IN THE FUTURE, IT WOULD BE NICE TO DO SOMETHING SIMILAR TO https://github.com/tgstation/tgstation/pull/48923/files (ofcourse not nearly the same because I have my.. thoughts on it) @@ -236,8 +238,8 @@ #define GHOSTROLE_TRAIT "ghostrole" #define APHRO_TRAIT "aphro" #define BLOODSUCKER_TRAIT "bloodsucker" -#define CLOTHING_TRAIT "clothing" //used for quirky carrygloves #define SHOES_TRAIT "shoes" //inherited from your sweet kicks +#define GLOVE_TRAIT "glove" //inherited by your cool gloves // unique trait sources, still defines #define STATUE_MUTE "statue" @@ -271,6 +273,7 @@ #define LOCKED_HELMET_TRAIT "locked-helmet" #define NINJA_SUIT_TRAIT "ninja-suit" #define ANTI_DROP_IMPLANT_TRAIT "anti-drop-implant" +#define MARTIAL_ARTIST_TRAIT "martial_artist" #define SLEEPING_CARP_TRAIT "sleeping_carp" #define RISING_BASS_TRAIT "rising_bass" #define ABDUCTOR_ANTAGONIST "abductor-antagonist" diff --git a/code/controllers/subsystem/traumas.dm b/code/controllers/subsystem/traumas.dm index 0d854371aa..87158f021e 100644 --- a/code/controllers/subsystem/traumas.dm +++ b/code/controllers/subsystem/traumas.dm @@ -172,7 +172,7 @@ SUBSYSTEM_DEF(traumas) /obj/item/ammo_box/magazine/pistolm9mm, /obj/item/ammo_box/a357, /obj/item/ammo_box/magazine/m12g, /obj/item/ammo_box/magazine/mm195x129, /obj/item/antag_spawner/nuke_ops, /obj/mecha/combat/gygax/dark, /obj/mecha/combat/marauder/mauler, /obj/item/soap/syndie, /obj/item/gun/syringe/syndicate, /obj/item/cartridge/virus/syndicate, /obj/item/cartridge/virus/frame, /obj/item/chameleon, /obj/item/storage/box/syndie_kit/cutouts, /obj/item/clothing/suit/space/hardsuit/syndi, /obj/item/card/emag, /obj/item/storage/toolbox/syndicate, /obj/item/storage/book/bible/syndicate, /obj/item/encryptionkey/binary, /obj/item/encryptionkey/syndicate, /obj/item/aiModule/syndicate, /obj/item/clothing/shoes/magboots/syndie, /obj/item/powersink, /obj/item/sbeacondrop, /obj/item/sbeacondrop/bomb, /obj/item/syndicatedetonator, /obj/item/shield/energy, /obj/item/assault_pod, /obj/item/slimepotion/slime/sentience/nuclear, /obj/item/stack/telecrystal, /obj/item/jammer, /obj/item/codespeak_manual/unlimited, - /obj/item/toy/cards/deck/syndicate, /obj/item/storage/secure/briefcase/syndie, /obj/item/storage/fancy/cigarettes/cigpack_syndicate, /obj/item/toy/syndicateballoon, /obj/item/clothing/gloves/rapid, /obj/item/paper/fluff/ruins/thederelict/syndie_mission, /obj/item/organ/cyberimp/eyes/hud/security/syndicate, /obj/item/clothing/head/HoS/syndicate, + /obj/item/toy/cards/deck/syndicate, /obj/item/storage/secure/briefcase/syndie, /obj/item/storage/fancy/cigarettes/cigpack_syndicate, /obj/item/toy/syndicateballoon, /obj/item/clothing/gloves/fingerless/pugilist/rapid, /obj/item/paper/fluff/ruins/thederelict/syndie_mission, /obj/item/organ/cyberimp/eyes/hud/security/syndicate, /obj/item/clothing/head/HoS/syndicate, /obj/machinery/computer/pod/old/syndicate, /obj/machinery/vending/medical/syndicate_access, /obj/item/mmi/syndie, /obj/item/target/syndicate, /obj/machinery/vending/cigarette/syndicate, /obj/item/robot_module/syndicate, /obj/item/clothing/mask/gas/syndicate, /obj/machinery/power/singularity_beacon/syndicate, /obj/item/clothing/head/syndicatefake, /obj/item/radio/headset/syndicate, /obj/item/gun/ballistic/automatic/pistol/antitank/syndicate, /obj/item/pda/syndicate, /obj/item/clothing/suit/armor/vest/capcarapace/syndicate, /obj/item/gun/ballistic/automatic/flechette, /obj/item/ammo_box/magazine/flechette, /obj/item/clothing/suit/toggle/lawyer/black/syndie, /obj/item/melee/transforming/energy/sword/cx/traitor, /obj/structure/sign/poster/contraband/syndicate_pistol, /obj/structure/sign/poster/contraband/syndicate_recruitment, /obj/item/bedsheet/syndie, /obj/item/borg/upgrade/syndicate, /obj/item/tank/jetpack/oxygen/harness, /obj/item/firing_pin/implant/pindicate, /obj/item/reagent_containers/glass/bottle/traitor, /obj/item/storage/belt/military, diff --git a/code/datums/martial/_martial.dm b/code/datums/martial/_martial.dm index 7b7975bedb..dc8418f01c 100644 --- a/code/datums/martial/_martial.dm +++ b/code/datums/martial/_martial.dm @@ -10,6 +10,7 @@ var/help_verb var/pacifism_check = TRUE //are the martial arts combos/attacks unable to be used by pacifist. var/allow_temp_override = TRUE //if this martial art can be overridden by temporary martial arts + var/damage_base //this is set on teach and is a random value between your species punchdamagelow and punchdamagehigh /datum/martial_art/proc/disarm_act(mob/living/carbon/human/A, mob/living/carbon/human/D) return FALSE @@ -50,6 +51,8 @@ if(help_verb) H.verbs += help_verb H.mind.martial_art = src + ADD_TRAIT(H, TRAIT_PUGILIST, MARTIAL_ARTIST_TRAIT) + damage_base = rand(H.dna.species.punchdamagelow, H.dna.species.punchdamagehigh) return TRUE /datum/martial_art/proc/store(datum/martial_art/M,mob/living/carbon/human/H) @@ -68,7 +71,8 @@ else var/datum/martial_art/X = H.mind.default_martial_art X.teach(H) - + REMOVE_TRAIT(H, TRAIT_PUGILIST, MARTIAL_ARTIST_TRAIT) + /datum/martial_art/proc/on_remove(mob/living/carbon/human/H) if(help_verb) H.verbs -= help_verb diff --git a/code/datums/martial/boxing.dm b/code/datums/martial/boxing.dm index 16d61c29f9..6b12d1e0e7 100644 --- a/code/datums/martial/boxing.dm +++ b/code/datums/martial/boxing.dm @@ -17,15 +17,14 @@ var/atk_verb = pick("left hook","right hook","straight punch") - var/damage = rand(10, 13) - var/extra_damage = rand(A.dna.species.punchdamagelow, A.dna.species.punchdamagehigh) - if(extra_damage == A.dna.species.punchdamagelow) + var/extra_damage = rand(10, 13) + if(damage_base == A.dna.species.punchdamagelow) playsound(D.loc, A.dna.species.miss_sound, 25, 1, -1) D.visible_message("[A] has attempted to [atk_verb] [D]!", \ "[A] has attempted to [atk_verb] [D]!", null, COMBAT_MESSAGE_RANGE) log_combat(A, D, "attempted to hit", atk_verb) return TRUE - damage += extra_damage + damage_base += extra_damage var/obj/item/bodypart/affecting = D.get_bodypart(ran_zone(A.zone_selected)) var/armor_block = D.run_armor_check(affecting, "melee") @@ -35,7 +34,7 @@ D.visible_message("[A] has [atk_verb]ed [D]!", \ "[A] has [atk_verb]ed [D]!", null, COMBAT_MESSAGE_RANGE) - D.apply_damage(damage, STAMINA, affecting, armor_block) + D.apply_damage(damage_base, STAMINA, affecting, armor_block) log_combat(A, D, "punched (boxing) ") if(D.getStaminaLoss() > 100 && istype(D.mind?.martial_art, /datum/martial_art/boxing)) var/knockout_prob = (D.getStaminaLoss() + rand(-15,15))*0.75 diff --git a/code/datums/martial/cqc.dm b/code/datums/martial/cqc.dm index 0871cf7eaa..0055482b6c 100644 --- a/code/datums/martial/cqc.dm +++ b/code/datums/martial/cqc.dm @@ -46,7 +46,7 @@ D.visible_message("[A] slams [D] into the ground!", \ "[A] slams you into the ground!") playsound(get_turf(A), 'sound/weapons/slam.ogg', 50, 1, -1) - D.apply_damage(10, BRUTE) + D.apply_damage(damage_base + 5, BRUTE) D.DefaultCombatKnockdown(120) log_combat(A, D, "slammed (CQC)") return TRUE @@ -60,7 +60,7 @@ playsound(get_turf(A), 'sound/weapons/cqchit1.ogg', 50, 1, -1) var/atom/throw_target = get_edge_target_turf(D, A.dir) D.throw_at(throw_target, 1, 14, A) - D.apply_damage(10, BRUTE) + D.apply_damage(damage_base + 5, BRUTE) log_combat(A, D, "kicked (CQC)") if(!CHECK_MOBILITY(D, MOBILITY_STAND) && CHECK_MOBILITY(D, MOBILITY_USE)) log_combat(A, D, "knocked out (Head kick)(CQC)") @@ -68,7 +68,7 @@ "[A] kicks your head, knocking you out!") playsound(get_turf(A), 'sound/weapons/genhit1.ogg', 50, 1, -1) D.SetSleeping(300) - D.adjustOrganLoss(ORGAN_SLOT_BRAIN, 15, 150) + D.adjustOrganLoss(ORGAN_SLOT_BRAIN, damage_base + 10, 150) return TRUE /datum/martial_art/cqc/proc/Pressure(mob/living/carbon/human/A, mob/living/carbon/human/D) @@ -76,7 +76,7 @@ return FALSE log_combat(A, D, "pressured (CQC)") D.visible_message("[A] punches [D]'s neck!") - D.adjustStaminaLoss(60) + D.apply_damage(damage_base + 55, STAMINA) playsound(get_turf(A), 'sound/weapons/cqchit1.ogg', 50, 1, -1) return TRUE @@ -89,7 +89,7 @@ log_combat(A, D, "restrained (CQC)") D.visible_message("[A] locks [D] into a restraining position!", \ "[A] locks you into a restraining position!") - D.adjustStaminaLoss(20) + D.apply_damage(damage_base + 15, STAMINA) D.Stun(100) restraining = TRUE addtimer(VARSET_CALLBACK(src, restraining, FALSE), 50, TIMER_UNIQUE) @@ -106,8 +106,8 @@ var/obj/item/I = D.get_active_held_item() if(I && D.temporarilyRemoveItemFromInventory(I)) A.put_in_hands(I) - D.adjustStaminaLoss(50) - D.apply_damage(25, BRUTE) + D.apply_damage(damage_base + 45, STAMINA) + D.apply_damage(damage_base + 20, BRUTE) return TRUE /datum/martial_art/cqc/grab_act(mob/living/carbon/human/A, mob/living/carbon/human/D) @@ -135,7 +135,7 @@ log_combat(A, D, "attacked (CQC)") A.do_attack_animation(D) var/picked_hit_type = pick("CQC'd", "Big Bossed") - var/bonus_damage = 13 + var/bonus_damage = (damage_base + 7) if(!CHECK_MOBILITY(D, MOBILITY_STAND)) bonus_damage += 5 picked_hit_type = "stomps on" @@ -151,7 +151,7 @@ D.visible_message("[A] leg sweeps [D]!", \ "[A] leg sweeps you!") playsound(get_turf(A), 'sound/effects/hit_kick.ogg', 50, 1, -1) - D.apply_damage(10, BRUTE) + D.apply_damage(bonus_damage, BRUTE) D.DefaultCombatKnockdown(60) log_combat(A, D, "sweeped (CQC)") return TRUE @@ -172,7 +172,7 @@ if(I && D.temporarilyRemoveItemFromInventory(I)) A.put_in_hands(I) D.Jitter(2) - D.apply_damage(5, BRUTE) + D.apply_damage(damage_base*0.5, BRUTE) else D.visible_message("[A] attempted to disarm [D]!", \ "[A] attempted to disarm [D]!") diff --git a/code/datums/martial/krav_maga.dm b/code/datums/martial/krav_maga.dm index 1a244f911e..67a0f539de 100644 --- a/code/datums/martial/krav_maga.dm +++ b/code/datums/martial/krav_maga.dm @@ -101,7 +101,7 @@ D.visible_message("[A] leg sweeps [D]!", \ "[A] leg sweeps you!") playsound(get_turf(A), 'sound/effects/hit_kick.ogg', 50, 1, -1) - D.apply_damage(5, BRUTE) + D.apply_damage(damage_base*0.5, BRUTE) D.DefaultCombatKnockdown(40, override_hardstun = 0.01, override_stamdmg = 25) log_combat(A, D, "leg sweeped") return 1 @@ -112,7 +112,7 @@ playsound(get_turf(A), 'sound/effects/hit_punch.ogg', 50, 1, -1) if(D.losebreath <= 10) D.losebreath = CLAMP(D.losebreath + 5, 0, 10) - D.adjustOxyLoss(10) + D.adjustOxyLoss(damage_base + 5) log_combat(A, D, "quickchoked") return 1 @@ -120,7 +120,7 @@ D.visible_message("[A] karate chops [D]'s neck!", \ "[A] karate chops your neck, rendering you unable to speak!") playsound(get_turf(A), 'sound/effects/hit_punch.ogg', 50, 1, -1) - D.apply_damage(5, BRUTE) + D.apply_damage(damage_base*0.5, BRUTE) if(D.silent <= 10) D.silent = CLAMP(D.silent + 10, 0, 10) log_combat(A, D, "neck chopped") @@ -137,7 +137,7 @@ return 1 log_combat(A, D, "punched") var/picked_hit_type = pick("punches", "kicks") - var/bonus_damage = 10 + var/bonus_damage = (damage_base + 5) if(CHECK_MOBILITY(D, MOBILITY_STAND)) bonus_damage += 5 picked_hit_type = "stomps on" diff --git a/code/datums/martial/mushpunch.dm b/code/datums/martial/mushpunch.dm index fe9f0d77d6..8027d8e974 100644 --- a/code/datums/martial/mushpunch.dm +++ b/code/datums/martial/mushpunch.dm @@ -12,7 +12,7 @@ atk_verb = pick("punches", "smashes", "ruptures", "cracks") D.visible_message("[A] [atk_verb] [D] with inhuman strength, sending [D.p_them()] flying backwards!", \ "[A] [atk_verb] you with inhuman strength, sending you flying backwards!") - D.apply_damage(rand(15,30), BRUTE) + D.apply_damage(damage_base*10, BRUTE) //KAPOW playsound(D, 'sound/effects/meteorimpact.ogg', 25, 1, -1) var/throwtarget = get_edge_target_turf(A, get_dir(A, get_step_away(D, A))) D.throw_at(throwtarget, 4, 2, A)//So stuff gets tossed around at the same time. diff --git a/code/datums/martial/psychotic_brawl.dm b/code/datums/martial/psychotic_brawl.dm index 75053dbbfc..f96fb34397 100644 --- a/code/datums/martial/psychotic_brawl.dm +++ b/code/datums/martial/psychotic_brawl.dm @@ -44,10 +44,10 @@ D.visible_message("[A] [atk_verb] [D]!", \ "[A] [atk_verb] you!") playsound(get_turf(D), 'sound/weapons/punch1.ogg', 40, 1, -1) - D.apply_damage(rand(5,10), BRUTE, BODY_ZONE_HEAD) - A.apply_damage(rand(5,10), BRUTE, BODY_ZONE_HEAD) + D.apply_damage(damage_base*1.5, BRUTE, BODY_ZONE_HEAD) + A.apply_damage(damage_base, BRUTE, BODY_ZONE_HEAD) if(!istype(D.head,/obj/item/clothing/head/helmet/) && !istype(D.head,/obj/item/clothing/head/hardhat)) - D.adjustOrganLoss(ORGAN_SLOT_BRAIN, 5) + D.adjustOrganLoss(ORGAN_SLOT_BRAIN, damage_base) A.Stun(rand(10,45)) D.DefaultCombatKnockdown(rand(5,30))//CIT CHANGE - makes stuns from martial arts always use Knockdown instead of Stun for the sake of consistency if(5,6) @@ -55,7 +55,7 @@ atk_verb = pick("punches", "kicks", "hits", "slams into") D.visible_message("[A] [atk_verb] [D] with inhuman strength, sending [D.p_them()] flying backwards!", \ "[A] [atk_verb] you with inhuman strength, sending you flying backwards!") - D.apply_damage(rand(15,30), BRUTE) + D.apply_damage(damage_base*2, BRUTE) playsound(get_turf(D), 'sound/effects/meteorimpact.ogg', 25, 1, -1) var/throwtarget = get_edge_target_turf(A, get_dir(A, get_step_away(D, A))) D.throw_at(throwtarget, 4, 2, A)//So stuff gets tossed around at the same time. diff --git a/code/datums/martial/rising_bass.dm b/code/datums/martial/rising_bass.dm index 8055bd54e9..6ba5d2c9a3 100644 --- a/code/datums/martial/rising_bass.dm +++ b/code/datums/martial/rising_bass.dm @@ -87,7 +87,7 @@ D.visible_message("[A] kicks [D] in the side, sliding them over!", \ "[A] kicks you in the side, forcing you to step away!") playsound(get_turf(A), 'sound/weapons/thudswoosh.ogg', 50, 1, -1) - D.apply_damage(5, BRUTE, BODY_ZONE_CHEST) + D.apply_damage(damage_base*0.5, BRUTE, BODY_ZONE_CHEST) D.DefaultCombatKnockdown(60) var/L = !checkfordensity(H,D) ? (!checkfordensity(K,D) ? D.loc : K) : H D.forceMove(L) @@ -104,8 +104,8 @@ "[A] flips you over their shoulder, slamming you into the ground!") playsound(get_turf(A), 'sound/weapons/thudswoosh.ogg', 50, 1, -1) D.emote("scream") - D.apply_damage(10, BRUTE, BODY_ZONE_CHEST) - D.apply_damage(30, BRUTE, BODY_ZONE_HEAD) + D.apply_damage(damage_base, BRUTE, BODY_ZONE_CHEST) + D.apply_damage(damage_base + 25, BRUTE, BODY_ZONE_HEAD) D.Sleeping(60) D.DefaultCombatKnockdown(300) D.forceMove(L) @@ -121,7 +121,7 @@ playsound(get_turf(A), 'sound/weapons/punch1.ogg', 50, 1, -1) var/atom/F = get_edge_target_turf(D, get_dir(A, get_step_away(D, A))) D.throw_at(F, 10, 1) - D.apply_damage(10, BRUTE, BODY_ZONE_CHEST) + D.apply_damage(damage_base, BRUTE, BODY_ZONE_CHEST) D.DefaultCombatKnockdown(90) log_combat(A, D, "repulse punched (Rising Bass)") repulsecool = world.time + 3 SECONDS @@ -134,7 +134,7 @@ D.visible_message("[A] smashes their foot down on [D]'s foot!", \ "[A] smashes your foot!") playsound(get_turf(A), 'sound/weapons/punch1.ogg', 50, 1, -1) - D.apply_damage(5, BRUTE, pick(BODY_ZONE_L_LEG, BODY_ZONE_R_LEG)) + D.apply_damage(damage_base*0.5, BRUTE, pick(BODY_ZONE_L_LEG, BODY_ZONE_R_LEG)) D.dropItemToGround(D.get_active_held_item()) log_combat(A, D, "foot smashed (Rising Bass)") return TRUE diff --git a/code/datums/martial/sleeping_carp.dm b/code/datums/martial/sleeping_carp.dm index 2b7d9e0a09..dc0ea1a2b4 100644 --- a/code/datums/martial/sleeping_carp.dm +++ b/code/datums/martial/sleeping_carp.dm @@ -42,7 +42,7 @@ else playsound(get_turf(D), 'sound/weapons/punch1.ogg', 25, TRUE, -1) log_combat(A, D, "strong punched (Sleeping Carp)")//so as to not double up on logging - D.apply_damage(20 + crit_damage, BRUTE, affecting) + D.apply_damage(damage_base*2 + crit_damage, BRUTE, affecting) return ///Crashing Wave Kick: Harm Disarm combo, throws people seven tiles backwards @@ -53,7 +53,7 @@ playsound(get_turf(A), 'sound/effects/hit_kick.ogg', 50, TRUE, -1) var/atom/throw_target = get_edge_target_turf(D, A.dir) D.throw_at(throw_target, 7, 14, A) - D.apply_damage(15, BRUTE, BODY_ZONE_CHEST) + D.apply_damage(damage_base + 15, BRUTE, BODY_ZONE_CHEST) log_combat(A, D, "launchkicked (Sleeping Carp)") return @@ -62,14 +62,14 @@ A.do_attack_animation(D, ATTACK_EFFECT_KICK) playsound(get_turf(A), 'sound/effects/hit_kick.ogg', 50, TRUE, -1) if((D.mobility_flags & MOBILITY_STAND)) - D.apply_damage(10, BRUTE, BODY_ZONE_HEAD) + D.apply_damage(damage_base, BRUTE, BODY_ZONE_HEAD) D.DefaultCombatKnockdown(50) - D.adjustStaminaLoss(40) //A cit specific change form the tg port to really punish anyone who tries to stand up + D.apply_damage(damage_base + 35, STAMINA, BODY_ZONE_HEAD) //A cit specific change form the tg port to really punish anyone who tries to stand up D.visible_message("[A] kicks [D] in the head, sending them face first into the floor!", \ "You are kicked in the head by [A], sending you crashing to the floor!", "You hear a sickening sound of flesh hitting flesh!", COMBAT_MESSAGE_RANGE, A) if(!(D.mobility_flags & MOBILITY_STAND)) - D.apply_damage(5, BRUTE, BODY_ZONE_HEAD) - D.adjustStaminaLoss(40) + D.apply_damage(damage_base*0.5, BRUTE, BODY_ZONE_HEAD) + D.apply_damage(damage_base + 35, STAMINA, BODY_ZONE_HEAD) D.drop_all_held_items() D.visible_message("[A] kicks [D] in the head!", \ "You are kicked in the head by [A]!", "You hear a sickening sound of flesh hitting flesh!", COMBAT_MESSAGE_RANGE, A) @@ -93,7 +93,7 @@ D.visible_message("[A] [atk_verb]s [D]!", \ "[A] [atk_verb]s you!", null, null, A) to_chat(A, "You [atk_verb] [D]!") - D.apply_damage(rand(10,15), BRUTE, affecting) + D.apply_damage(damage_base + 10, BRUTE, affecting) playsound(get_turf(D), 'sound/weapons/punch1.ogg', 25, TRUE, -1) log_combat(A, D, "punched (Sleeping Carp)") return TRUE diff --git a/code/game/machinery/computer/arcade.dm b/code/game/machinery/computer/arcade.dm index b561224668..f78a05244e 100644 --- a/code/game/machinery/computer/arcade.dm +++ b/code/game/machinery/computer/arcade.dm @@ -55,7 +55,7 @@ /obj/item/stack/tile/fakespace/loaded = ARCADE_WEIGHT_TRICK, /obj/item/stack/tile/fakepit/loaded = ARCADE_WEIGHT_TRICK, /obj/item/restraints/handcuffs/fake = ARCADE_WEIGHT_TRICK, - /obj/item/clothing/gloves/rapid/hug = ARCADE_WEIGHT_TRICK, + /obj/item/clothing/gloves/fingerless/pugilist/rapid/hug = ARCADE_WEIGHT_TRICK, /obj/item/grenade/chem_grenade/glitter/pink = ARCADE_WEIGHT_TRICK, /obj/item/grenade/chem_grenade/glitter/blue = ARCADE_WEIGHT_TRICK, diff --git a/code/modules/cargo/exports/gear.dm b/code/modules/cargo/exports/gear.dm index 10b3d4f707..4db7c68efd 100644 --- a/code/modules/cargo/exports/gear.dm +++ b/code/modules/cargo/exports/gear.dm @@ -309,7 +309,7 @@ /datum/export/gear/combatgloves cost = 80 unit_name = "combat gloves" - export_types = list(/obj/item/clothing/gloves/combat, /obj/item/clothing/gloves/rapid, /obj/item/clothing/gloves/krav_maga) + export_types = list(/obj/item/clothing/gloves/combat, /obj/item/clothing/gloves/fingerless/pugilist/rapid, /obj/item/clothing/gloves/krav_maga) include_subtypes = TRUE /datum/export/gear/bonegloves diff --git a/code/modules/cargo/exports/weapons.dm b/code/modules/cargo/exports/weapons.dm index 836dc044b7..2342603bde 100644 --- a/code/modules/cargo/exports/weapons.dm +++ b/code/modules/cargo/exports/weapons.dm @@ -287,7 +287,7 @@ /datum/export/weapon/gloves cost = 90 unit_name = "star struck gloves" - export_types = list(/obj/item/clothing/gloves/rapid) + export_types = list(/obj/item/clothing/gloves/fingerless/pugilist/rapid) /datum/export/weapon/l6 cost = 500 diff --git a/code/modules/clothing/gloves/color.dm b/code/modules/clothing/gloves/color.dm index cf3541fd89..e2af067e8c 100644 --- a/code/modules/clothing/gloves/color.dm +++ b/code/modules/clothing/gloves/color.dm @@ -207,11 +207,11 @@ /obj/item/clothing/gloves/color/latex/equipped(mob/user, slot) ..() if(slot == SLOT_GLOVES) - ADD_TRAIT(user, carrytrait, CLOTHING_TRAIT) + ADD_TRAIT(user, carrytrait, GLOVE_TRAIT) /obj/item/clothing/gloves/color/latex/dropped(mob/user) ..() - REMOVE_TRAIT(user, carrytrait, CLOTHING_TRAIT) + REMOVE_TRAIT(user, carrytrait, GLOVE_TRAIT) /obj/item/clothing/gloves/color/latex/nitrile name = "nitrile gloves" diff --git a/code/modules/clothing/gloves/miscellaneous.dm b/code/modules/clothing/gloves/miscellaneous.dm index 9f4b89f607..989a7c3b07 100644 --- a/code/modules/clothing/gloves/miscellaneous.dm +++ b/code/modules/clothing/gloves/miscellaneous.dm @@ -12,6 +12,122 @@ min_cold_protection_temperature = GLOVES_MIN_TEMP_PROTECT strip_mod = 0.9 +/obj/item/clothing/gloves/fingerless/pugilist + name = "armwraps" + desc = "A series of armwraps. Makes you pretty keen to start punching people." + icon_state = "armwraps" + item_state = "armwraps" + body_parts_covered = ARMS + cold_protection = ARMS + strip_delay = 300 //you can't just yank them off + var/enhancement = 0 //it's a +0 to your punches because it isn't magical + var/inherited_trait = TRAIT_NOGUNS //what are you, dishonoroable? + var/secondary_trait = TRAIT_FEARLESS //what are you, a coward? + +/obj/item/clothing/gloves/fingerless/pugilist/equipped(mob/user, slot) + ..() + if(slot == SLOT_GLOVES) + if(ishuman(user)) + var/mob/living/carbon/human/H = user + ADD_TRAIT(H, TRAIT_PUGILIST, GLOVE_TRAIT) + ADD_TRAIT(H, inherited_trait, GLOVE_TRAIT) + ADD_TRAIT(H, secondary_trait, GLOVE_TRAIT) + H.dna.species.punchdamagehigh += enhancement + H.dna.species.punchdamagelow += enhancement + H.dna.species.punchstunthreshold -= enhancement + +/obj/item/clothing/gloves/fingerless/pugilist/dropped(mob/user) + ..() + REMOVE_TRAIT(user, TRAIT_PUGILIST, GLOVE_TRAIT) + REMOVE_TRAIT(user, inherited_trait, GLOVE_TRAIT) + REMOVE_TRAIT(user, secondary_trait, GLOVE_TRAIT) + if(ishuman(user)) + var/mob/living/carbon/human/H = user + H.dna.species.punchdamagehigh -= enhancement + H.dna.species.punchdamagelow -= enhancement + H.dna.species.punchstunthreshold += enhancement + +/obj/item/clothing/gloves/fingerless/pugilist/holy + name = "armwraps of unyielding resolve" + desc = "A series of armwraps, soaked in holy water. Makes you pretty keen to smite evil magic users." + enhancement = 1 //It is not magic that makes you punch harder, but force of will. Trust me. + secondary_trait = TRAIT_ANTIMAGIC + +/obj/item/clothing/gloves/fingerless/pugilist/magic + name = "armwraps of mighty fists" + desc = "A series of armwraps. Makes you pretty keen to go adventuring and punch dragons." + resistance_flags = FIRE_PROOF | ACID_PROOF //magic items are harder to damage with energy this is a dnd joke okay? + enhancement = 1 //They're +1! + +/obj/item/clothing/gloves/fingerless/pugilist/hungryghost + name = "armwraps of the hungry ghost" + desc = "A series of blackened, bloodstained armwraps scrawled with strange geometric symbols. Makes you pretty keen to commit horrible acts against the living through bloody carnage." + icon_state = "narsiearmwraps" + item_state = "narsiearmwraps" + resistance_flags = FIRE_PROOF | ACID_PROOF + armor = list("melee" = 10, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 35, "rad" = 0, "fire" = 50, "acid" = 50) + enhancement = 3 + secondary_trait = TRAIT_KI_VAMPIRE + +/obj/item/clothing/gloves/fingerless/pugilist/brassmountain + name = "armbands of the brass mountain" + desc = "A series of scolding hot brass armbands. Makes you pretty keen to bring the light to the unenlightened through unmitigated violence." + icon_state = "ratvararmwraps" + item_state = "ratvararmwraps" + resistance_flags = FIRE_PROOF | ACID_PROOF + armor = list("melee" = 10, "bullet" = 0, "laser" = -10, "energy" = 0, "bomb" = 0, "bio" = 35, "rad" = 0, "fire" = 50, "acid" = 50) + enhancement = 4 //The artifice of Ratvar is unmatched except when it is. + secondary_trait = TRAIT_STRONG_GRABBER + +/obj/item/clothing/gloves/fingerless/pugilist/rapid + name = "Bands of the North Star" + desc = "The armbands of a deadly martial artist. Makes you pretty keen to put an end to evil in an extremely violent manner." + icon_state = "rapid" + item_state = "rapid" + enhancement = 7 //omae wa mou shindeiru + var/warcry = "AT" + secondary_trait = TRAIT_NODROP + +/obj/item/clothing/gloves/fingerless/pugilist/rapid/Touch(mob/living/target,proximity = TRUE) + if(!istype(target)) + return + + var/mob/living/M = loc + M.changeNext_move(CLICK_CD_RAPID) + if(warcry) + M.say("[warcry]", ignore_spam = TRUE, forced = "north star warcry") + + .= FALSE + +/obj/item/clothing/gloves/fingerless/pugilist/rapid/attack_self(mob/user) + var/input = stripped_input(user,"What do you want your battlecry to be? Max length of 6 characters.", ,"", 7) + if(input) + warcry = input + +/obj/item/clothing/gloves/fingerless/pugilist/rapid/hug + name = "Hugs of the North Star" + desc = "The armbands of a humble friend. Makes you pretty keen to go let everyone know how much you appreciate them!" + warcry = "owo" //Shouldn't ever come into play + enhancement = 0 + secondary_trait = TRAIT_PACIFISM //You are only here to hug and be friends! + +/obj/item/clothing/gloves/fingerless/pugilist/rapid/hug/Touch(mob/living/target,proximity = TRUE) + if(!istype(target)) + return + + var/mob/living/M = loc + + if(M.a_intent == INTENT_HELP) + if(target.health >= 0 && !HAS_TRAIT(target, TRAIT_FAKEDEATH)) //Can't hug people who are dying/dead + if(target.on_fire || target.lying) //No spamming extinguishing, helping them up, or other non-hugging/patting help interactions + return + else + M.changeNext_move(CLICK_CD_RAPID) + . = FALSE + +/obj/item/clothing/gloves/fingerless/pugilist/rapid/hug/attack_self(mob/user) + return FALSE + /obj/item/clothing/gloves/botanic_leather name = "botanist's leather gloves" desc = "These leather gloves protect against thorns, barbs, prickles, spikes and other harmful objects of floral origin. They're also quite warm." @@ -59,54 +175,6 @@ resistance_flags = NONE armor = list("melee" = 15, "bullet" = 35, "laser" = 35, "energy" = 20, "bomb" = 35, "bio" = 35, "rad" = 35, "fire" = 0, "acid" = 0) -/obj/item/clothing/gloves/rapid - name = "Gloves of the North Star" - desc = "Just looking at these fills you with an urge to beat the shit out of people. Violently." - icon_state = "rapid" - item_state = "rapid" - transfer_prints = TRUE - var/warcry = "AT" - -/obj/item/clothing/gloves/rapid/Touch(mob/living/target,proximity = TRUE) - if(!istype(target)) - return - - var/mob/living/M = loc - M.changeNext_move(CLICK_CD_RAPID) - M.adjustStaminaLoss(-3.5) // used to be -2 with some comment about stamina buffer management but *shrug -hatterhat - if(warcry) - M.say("[warcry]", ignore_spam = TRUE, forced = "north star warcry") - - .= FALSE - - -/obj/item/clothing/gloves/rapid/attack_self(mob/user) - var/input = stripped_input(user,"What do you want your battlecry to be? Max length of 6 characters.", ,"", 7) - if(input) - warcry = input - -/obj/item/clothing/gloves/rapid/hug - name = "Hugs of the North Star" - desc = "Just looking at these fills you with an urge to hug the shit out of people. In a very friendly manner." - warcry = "owo" //Shouldn't ever come into play - -/obj/item/clothing/gloves/rapid/hug/Touch(mob/living/target,proximity = TRUE) - if(!istype(target)) - return - - var/mob/living/M = loc - - if(M.a_intent == INTENT_HELP) - if(target.health >= 0 && !HAS_TRAIT(target, TRAIT_FAKEDEATH)) //Can't hug people who are dying/dead - if(target.on_fire || target.lying) //No spamming extinguishing, helping them up, or other non-hugging/patting help interactions - return - else - M.changeNext_move(CLICK_CD_RAPID) - . = FALSE - -/obj/item/clothing/gloves/rapid/hug/attack_self(mob/user) - return FALSE - /obj/item/clothing/gloves/thief name = "black gloves" desc = "Gloves made with completely frictionless, insulated cloth, easier to steal from people with." @@ -117,4 +185,4 @@ strip_delay = 80 transfer_prints = FALSE strip_mod = 5 - strip_silence = TRUE \ No newline at end of file + strip_silence = TRUE diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm index 34c65982dc..0d6a6e64d7 100644 --- a/code/modules/mob/living/carbon/human/species.dm +++ b/code/modules/mob/living/carbon/human/species.dm @@ -1456,6 +1456,12 @@ GLOBAL_LIST_EMPTY(roundstart_race_names) if(target.check_block()) target.visible_message("[target] blocks [user]'s attack!") return FALSE + + if(HAS_TRAIT(user, TRAIT_PUGILIST))//CITADEL CHANGE - makes punching cause staminaloss but funny martial artist types get a discount + user.adjustStaminaLossBuffered(1.5) + else + user.adjustStaminaLossBuffered(3.5) + if(attacker_style && attacker_style.harm_act(user,target)) return TRUE else @@ -1474,8 +1480,6 @@ GLOBAL_LIST_EMPTY(roundstart_race_names) else user.do_attack_animation(target, ATTACK_EFFECT_PUNCH) - user.adjustStaminaLossBuffered(3.5) //CITADEL CHANGE - makes punching cause staminaloss - var/damage = rand(user.dna.species.punchdamagelow, user.dna.species.punchdamagehigh) var/puncherstam = user.getStaminaLoss() var/puncherbrute = user.getBruteLoss() @@ -1534,13 +1538,24 @@ GLOBAL_LIST_EMPTY(roundstart_race_names) if((target.stat != DEAD) && damage >= user.dna.species.punchstunthreshold) if((punchedstam > 50) && prob(punchedstam*0.5)) //If our punch victim has been hit above the threshold, and they have more than 50 stamina damage, roll for stun, probability of 1% per 2 stamina damage + target.visible_message("[user] knocks [target] down!", \ "You're knocked down by [user]!", "You hear aggressive shuffling followed by a loud thud!", COMBAT_MESSAGE_RANGE, user) to_chat(user, "You knock [target] down!") + var/knockdown_duration = 40 + (punchedstam + (punchedbrute*0.5))*0.8 - armor_block target.DefaultCombatKnockdown(knockdown_duration) target.forcesay(GLOB.hit_appends) log_combat(user, target, "got a stun punch with their previous punch") + + if(HAS_TRAIT(user, TRAIT_KI_VAMPIRE) && !HAS_TRAIT(target, TRAIT_NOBREATH) && (punchedbrute < 100)) //If we're a ki vampire we also sap them of lifeforce, but only if they're not too beat up. Also living organics only. + user.adjustBruteLoss(-5) + user.adjustFireLoss(-5) + user.adjustStaminaLoss(-20) + + target.adjustCloneLoss(10) + target.adjustBruteLoss(10) + else if(!(target.mobility_flags & MOBILITY_STAND)) target.forcesay(GLOB.hit_appends) diff --git a/code/modules/mob/living/carbon/human/species_types/golems.dm b/code/modules/mob/living/carbon/human/species_types/golems.dm index 446e726256..4ee069afe8 100644 --- a/code/modules/mob/living/carbon/human/species_types/golems.dm +++ b/code/modules/mob/living/carbon/human/species_types/golems.dm @@ -11,7 +11,7 @@ siemens_coeff = 0 punchdamagelow = 5 punchdamagehigh = 14 - punchstunthreshold = 11 //about 40% chance to stun + punchstunthreshold = 10 no_equip = list(SLOT_WEAR_MASK, SLOT_WEAR_SUIT, SLOT_GLOVES, SLOT_SHOES, SLOT_W_UNIFORM, SLOT_S_STORE) nojumpsuit = 1 sexes = 1 @@ -168,7 +168,7 @@ name = "Silver Golem" id = "silver golem" fixed_mut_color = "ddd" - punchstunthreshold = 9 //60% chance, from 40% + punchstunthreshold = 9 meat = /obj/item/stack/ore/silver info_text = "As a Silver Golem, your attacks have a higher chance of stunning. Being made of silver, your body is immune to most types of magic." prefix = "Silver" @@ -190,7 +190,7 @@ stunmod = 0.4 punchdamagelow = 12 punchdamagehigh = 21 - punchstunthreshold = 18 //still 40% stun chance + punchstunthreshold = 18 speedmod = 4 //pretty fucking slow meat = /obj/item/stack/ore/iron info_text = "As a Plasteel Golem, you are slower, but harder to stun, and hit very hard when punching." diff --git a/code/modules/mob/living/carbon/human/species_types/mushpeople.dm b/code/modules/mob/living/carbon/human/species_types/mushpeople.dm index 3c17ef9066..cb8fdbf101 100644 --- a/code/modules/mob/living/carbon/human/species_types/mushpeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/mushpeople.dm @@ -12,9 +12,9 @@ inherent_traits = list(TRAIT_NOBREATH) speedmod = 1.5 //faster than golems but not by much - punchdamagelow = 6 - punchdamagehigh = 14 - punchstunthreshold = 14 //about 44% chance to stun + punchdamagelow = 2 + punchdamagehigh = 12 //still better than humans + punchstunthreshold = 10 no_equip = list(SLOT_WEAR_MASK, SLOT_WEAR_SUIT, SLOT_GLOVES, SLOT_SHOES, SLOT_W_UNIFORM) diff --git a/code/modules/mob/living/carbon/human/species_types/synths.dm b/code/modules/mob/living/carbon/human/species_types/synths.dm index 1700927a24..6c42e622fe 100644 --- a/code/modules/mob/living/carbon/human/species_types/synths.dm +++ b/code/modules/mob/living/carbon/human/species_types/synths.dm @@ -23,7 +23,7 @@ armor = 25 punchdamagelow = 10 punchdamagehigh = 19 - punchstunthreshold = 14 //about 50% chance to stun + punchstunthreshold = 14 disguise_fail_health = 50 /datum/species/synth/on_species_gain(mob/living/carbon/human/H, datum/species/old_species) diff --git a/code/modules/reagents/chemistry/reagents/drug_reagents.dm b/code/modules/reagents/chemistry/reagents/drug_reagents.dm index bf090302c8..e7229b5abf 100644 --- a/code/modules/reagents/chemistry/reagents/drug_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/drug_reagents.dm @@ -467,9 +467,9 @@ if(H.physiology) H.physiology.stamina_mod *= 0.5 if(H.dna && H.dna.species) - H.dna.species.punchdamagehigh *= 4 - H.dna.species.punchdamagelow *= 4 - H.dna.species.punchstunthreshold *= 2 + H.dna.species.punchdamagehigh += 4 + H.dna.species.punchdamagelow += 4 + H.dna.species.punchstunthreshold -= 2 /datum/reagent/drug/skooma/on_mob_end_metabolize(mob/living/L) . = ..() @@ -480,9 +480,9 @@ if(H.physiology) H.physiology.stamina_mod *= 2 if(H.dna && H.dna.species) - H.dna.species.punchdamagehigh *= 0.25 - H.dna.species.punchdamagelow *= 0.25 - H.dna.species.punchstunthreshold *= 0.5 + H.dna.species.punchdamagehigh -= 4 + H.dna.species.punchdamagelow -= 4 + H.dna.species.punchstunthreshold += 2 /datum/reagent/drug/skooma/on_mob_life(mob/living/carbon/M) M.adjustOrganLoss(ORGAN_SLOT_BRAIN, 1*REM) diff --git a/code/modules/uplink/uplink_items/uplink_dangerous.dm b/code/modules/uplink/uplink_items/uplink_dangerous.dm index 819ba51623..b0395af7c9 100644 --- a/code/modules/uplink/uplink_items/uplink_dangerous.dm +++ b/code/modules/uplink/uplink_items/uplink_dangerous.dm @@ -174,10 +174,13 @@ include_modes = list(/datum/game_mode/nuclear) /datum/uplink_item/dangerous/rapid - name = "Gloves of the North Star" - desc = "These gloves let the user punch people very fast. Does not improve weapon attack speed or the meaty fists of a hulk." - item = /obj/item/clothing/gloves/rapid - cost = 8 + name = "Bands of the North Star" + desc = "These armbands let the user punch people very fast and with the lethality of a legendary martial artist. \ + Does not improve weapon attack speed or the meaty fists of a hulk, but you will be unmatched in martial power. \ + Combines with all martial arts, but the user will be unable to bring themselves to use guns, nor remove the armbands." + item = /obj/item/clothing/gloves/fingerless/pugilist/rapid + cost = 30 + include_modes = list(/datum/game_mode/nuclear) /datum/uplink_item/dangerous/guardian name = "Holoparasites" From 71e19aead21c536634af29a2a52477a43a877eca Mon Sep 17 00:00:00 2001 From: necromanceranne Date: Sat, 4 Apr 2020 16:29:29 +1100 Subject: [PATCH 07/25] ports over my krav changes from tg and also hooked in pugilist gloves to summon equipment for cultists and gave all that shit a sprite ye --- code/datums/martial/boxing.dm | 7 +-- code/datums/martial/krav_maga.dm | 53 +++++++++++------- code/datums/martial/mushpunch.dm | 2 +- code/modules/antagonists/cult/blood_magic.dm | 1 + code/modules/clothing/gloves/miscellaneous.dm | 3 +- icons/mob/hands.dmi | Bin 9748 -> 10488 bytes icons/obj/clothing/gloves.dmi | Bin 15403 -> 17007 bytes 7 files changed, 40 insertions(+), 26 deletions(-) diff --git a/code/datums/martial/boxing.dm b/code/datums/martial/boxing.dm index 6b12d1e0e7..6dcb9e06ef 100644 --- a/code/datums/martial/boxing.dm +++ b/code/datums/martial/boxing.dm @@ -17,14 +17,13 @@ var/atk_verb = pick("left hook","right hook","straight punch") - var/extra_damage = rand(10, 13) - if(damage_base == A.dna.species.punchdamagelow) + var/extra_damage = base_damage + if(extra_damage == A.dna.species.punchdamagelow) playsound(D.loc, A.dna.species.miss_sound, 25, 1, -1) D.visible_message("[A] has attempted to [atk_verb] [D]!", \ "[A] has attempted to [atk_verb] [D]!", null, COMBAT_MESSAGE_RANGE) log_combat(A, D, "attempted to hit", atk_verb) return TRUE - damage_base += extra_damage var/obj/item/bodypart/affecting = D.get_bodypart(ran_zone(A.zone_selected)) var/armor_block = D.run_armor_check(affecting, "melee") @@ -34,7 +33,7 @@ D.visible_message("[A] has [atk_verb]ed [D]!", \ "[A] has [atk_verb]ed [D]!", null, COMBAT_MESSAGE_RANGE) - D.apply_damage(damage_base, STAMINA, affecting, armor_block) + D.apply_damage(rand(10,13) + extra_damage, STAMINA, affecting, armor_block) log_combat(A, D, "punched (boxing) ") if(D.getStaminaLoss() > 100 && istype(D.mind?.martial_art, /datum/martial_art/boxing)) var/knockout_prob = (D.getStaminaLoss() + rand(-15,15))*0.75 diff --git a/code/datums/martial/krav_maga.dm b/code/datums/martial/krav_maga.dm index 67a0f539de..ed68403b1d 100644 --- a/code/datums/martial/krav_maga.dm +++ b/code/datums/martial/krav_maga.dm @@ -96,13 +96,15 @@ return 0 /datum/martial_art/krav_maga/proc/leg_sweep(mob/living/carbon/human/A, mob/living/carbon/human/D) + var/obj/item/bodypart/affecting = D.get_bodypart(BODY_ZONE_CHEST) + var/armor_block = D.run_armor_check(affecting, "melee") if(!CHECK_MOBILITY(D, MOBILITY_STAND)) return 0 D.visible_message("[A] leg sweeps [D]!", \ "[A] leg sweeps you!") playsound(get_turf(A), 'sound/effects/hit_kick.ogg', 50, 1, -1) - D.apply_damage(damage_base*0.5, BRUTE) - D.DefaultCombatKnockdown(40, override_hardstun = 0.01, override_stamdmg = 25) + D.apply_damage(damage_base + 25, STAMINA, affecting, armor_block) + D.DefaultCombatKnockdown(80, override_hardstun = 1, override_stamdmg = 0) log_combat(A, D, "leg sweeped") return 1 @@ -133,15 +135,17 @@ ..() /datum/martial_art/krav_maga/harm_act(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D) + var/obj/item/bodypart/affecting = D.get_bodypart(ran_zone(A.zone_selected)) + var/armor_block = D.run_armor_check(affecting, "melee") if(check_streak(A,D)) return 1 log_combat(A, D, "punched") var/picked_hit_type = pick("punches", "kicks") - var/bonus_damage = (damage_base + 5) + var/bonus_damage = 0 if(CHECK_MOBILITY(D, MOBILITY_STAND)) - bonus_damage += 5 + bonus_damage += 10 picked_hit_type = "stomps on" - D.apply_damage(bonus_damage, BRUTE) + D.apply_damage(damage_base + bonus_damage, BRUTE, affecting, armor_block) if(picked_hit_type == "kicks" || picked_hit_type == "stomps on") A.do_attack_animation(D, ATTACK_EFFECT_KICK) playsound(get_turf(D), 'sound/effects/hit_kick.ogg', 50, 1, -1) @@ -153,21 +157,30 @@ log_combat(A, D, "[picked_hit_type] with [name]") return 1 -/datum/martial_art/krav_maga/disarm_act(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D) - var/obj/item/I = null - if(prob(60)) - I = D.get_active_held_item() - if(I) - if(D.temporarilyRemoveItemFromInventory(I)) - A.put_in_hands(I) - D.visible_message("[A] has disarmed [D]!", \ - "[A] has disarmed [D]!") - playsound(D, 'sound/weapons/thudswoosh.ogg', 50, 1, -1) - else - D.visible_message("[A] attempted to disarm [D]!", \ - "[A] attempted to disarm [D]!") - playsound(D, 'sound/weapons/punchmiss.ogg', 25, 1, -1) - log_combat(A, D, "disarmed (Krav Maga)", "[I ? " removing \the [I]" : ""]") +/datum/martial_art/krav_maga/disarm_act(mob/living/carbon/human/A, mob/living/carbon/human/D) + if(check_streak(A,D)) + return 1 + var/obj/item/bodypart/affecting = D.get_bodypart(ran_zone(A.zone_selected)) + var/armor_block = D.run_armor_check(affecting, "melee") + if((D.mobility_flags & MOBILITY_STAND)) + D.visible_message("[A] reprimands [D]!", \ + "You're slapped by [A]!", "You hear a sickening sound of flesh hitting flesh!", COMBAT_MESSAGE_RANGE, A) + to_chat(A, "You jab [D]!") + A.do_attack_animation(D, ATTACK_EFFECT_PUNCH) + playsound(D, 'sound/effects/hit_punch.ogg', 50, TRUE, -1) + D.apply_damage(damage_base + 5, STAMINA, affecting, armor_block) + log_combat(A, D, "punched nonlethally") + if(!(D.mobility_flags & MOBILITY_STAND)) + D.visible_message("[A] reprimands [D]!", \ + "You're manhandled by [A]!", "You hear a sickening sound of flesh hitting flesh!", COMBAT_MESSAGE_RANGE, A) + to_chat(A, "You stomp [D]!") + A.do_attack_animation(D, ATTACK_EFFECT_KICK) + playsound(D, 'sound/effects/hit_punch.ogg', 50, TRUE, -1) + D.apply_damage(damage_base + 10, STAMINA, affecting, armor_block) + log_combat(A, D, "stomped nonlethally") + if(prob(D.getStaminaLoss())) + D.visible_message("[D] sputters and recoils in pain!", "You recoil in pain as you are jabbed in a nerve!") + D.drop_all_held_items() return 1 //Krav Maga Gloves diff --git a/code/datums/martial/mushpunch.dm b/code/datums/martial/mushpunch.dm index 8027d8e974..19041a0665 100644 --- a/code/datums/martial/mushpunch.dm +++ b/code/datums/martial/mushpunch.dm @@ -12,7 +12,7 @@ atk_verb = pick("punches", "smashes", "ruptures", "cracks") D.visible_message("[A] [atk_verb] [D] with inhuman strength, sending [D.p_them()] flying backwards!", \ "[A] [atk_verb] you with inhuman strength, sending you flying backwards!") - D.apply_damage(damage_base*10, BRUTE) //KAPOW + D.apply_damage(damage_base*3, BRUTE) //KAPOW playsound(D, 'sound/effects/meteorimpact.ogg', 25, 1, -1) var/throwtarget = get_edge_target_turf(A, get_dir(A, get_step_away(D, A))) D.throw_at(throwtarget, 4, 2, A)//So stuff gets tossed around at the same time. diff --git a/code/modules/antagonists/cult/blood_magic.dm b/code/modules/antagonists/cult/blood_magic.dm index 9a086b75a2..c4a8c1e827 100644 --- a/code/modules/antagonists/cult/blood_magic.dm +++ b/code/modules/antagonists/cult/blood_magic.dm @@ -656,6 +656,7 @@ C.equip_to_slot_or_del(new /obj/item/clothing/suit/cultrobes/alt(user), SLOT_WEAR_SUIT) C.equip_to_slot_or_del(new /obj/item/clothing/shoes/cult/alt(user), SLOT_SHOES) C.equip_to_slot_or_del(new /obj/item/storage/backpack/cultpack(user), SLOT_BACK) + C.equip_to_slot_or_del(new /obj/item/clothing/gloves/fingerless/pugilist/hungryghost(user), SLOT_GLOVES) if(C == user) qdel(src) //Clears the hands C.put_in_hands(new /obj/item/melee/cultblade(user)) diff --git a/code/modules/clothing/gloves/miscellaneous.dm b/code/modules/clothing/gloves/miscellaneous.dm index 989a7c3b07..76ecff108e 100644 --- a/code/modules/clothing/gloves/miscellaneous.dm +++ b/code/modules/clothing/gloves/miscellaneous.dm @@ -50,6 +50,7 @@ /obj/item/clothing/gloves/fingerless/pugilist/holy name = "armwraps of unyielding resolve" desc = "A series of armwraps, soaked in holy water. Makes you pretty keen to smite evil magic users." + resistance_flags = FIRE_PROOF | ACID_PROOF enhancement = 1 //It is not magic that makes you punch harder, but force of will. Trust me. secondary_trait = TRAIT_ANTIMAGIC @@ -61,7 +62,7 @@ /obj/item/clothing/gloves/fingerless/pugilist/hungryghost name = "armwraps of the hungry ghost" - desc = "A series of blackened, bloodstained armwraps scrawled with strange geometric symbols. Makes you pretty keen to commit horrible acts against the living through bloody carnage." + desc = "A series of blackened, bloodstained armwraps stitched with strange geometric symbols. Makes you pretty keen to commit horrible acts against the living through bloody carnage." icon_state = "narsiearmwraps" item_state = "narsiearmwraps" resistance_flags = FIRE_PROOF | ACID_PROOF diff --git a/icons/mob/hands.dmi b/icons/mob/hands.dmi index e7068a18546dc18f0d14485970feb2809847c86e..048df0621a1cee5de3fe9ae034094b30fc246d72 100644 GIT binary patch literal 10488 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 XmM@NdU-;`o7lS*dw<~TweDS{kA{CsL literal 9748 zcmb_?2UJr_+b-x)j|DkLMHECVC`B*|0#f5a5a}YJLl8reE%ZT*d#$}^=AE)>?p*-^!FN0N?|T8tyh^n#P|!g@Yyx#%17MFl9tL{&`3eYxWF!x?`hL7} zXzz~z&avYT&QDuwQ;Qx<3Sb}ix0&GG4nI1gK91gZ(MJ@*KEVh`+N?`m3?AmwH|-R?{6j zqP9GP6?Z)fk1&mK6E{C}^kR{nOR|K_C7 z%CRch+;3Vd*ID`dk+b=^wgouZJs(H@_P)QYf9SWws6 z@jLmTc5f;nto~}-+8b0)@Ia#ETN-gKfDoY4a^E+c_p)(*gqp6F?sPS%-C=E>-NOP& zR%%^z;!swm^ywkB{0z2PR%qJ^Soa!hv?oQu-kUgHCp2?o%a& zhd1_e-%EpeT2#KDe&A@VLerI$D){E}$|PT0rQQZLZdhGAiS>9uLIQ!y(`)xJUHrL3 zBUi#+$jQlhOJuQm(3L6amYEH--`y9;BXjffHE@)>dqI$4Q-ur@JCyYG*XU|gUB$Np zEiDc+NMd4EM6c>=i?Xg-!(aoPqk7$TyCeK78vOQrybQzRuf!^FezLz~Vl= zu!7Bb_g=d7DKObz31DS_IaL15G<0?D>AyqqaN(ovv zlCbVLC3+h%+Vg6q#y zl>~`g?*=`*qru!OWzYwfAWoD&E_?a{w+pewDC~7gdh{(K03chs8%1MJ1_jpD{M4q_ zB})5jKax~KK)&C0v72_E%#{Y4w4nmQ_ zjsDlxNulv4YCT-p^s0 zdh2N;KW)A?F+NqaL@@~C={B71(-UK8+16{(+#F&z6;Di*BKBmwzDfnX^(;UxdJ!6- z+YU1T`7^KYZw`BY6GwiW+p6(S%OuCiuVXRIT9G(DaBVm`i`+DB4NTjF}RWOg+7dmuP8?&vt5T@zZyDiSu z)-F{Ah53Z{6W7CmXZ7jjrA;cHMlk?yOL``lCw5CojnH6Vqm;`^z#RY?{bk-Rtsff+ zL&2UM{jP36HX~eeS!rSu2?h*ZsiU4F{Qp6Ki9L@VEhgl3b&pf$#Z)drPbp=se~v}W z%-YW_Fi2ms%s!_ndv%LgJ7lM%9EZcU=44O@NWO zGmC0#;Sj#E*U$;9QhN#Btw+ql!h+U?YN_z7Y}`t-C2yH#A=LY3?ZISB?OLiY)H!N0 z&(7aG8@jQvZLYTIt&)_%((--jJZ}y7T+$qqX?geVedf=Egd;=}i8)wgF>o%t z8RO~ciR${dcgQI~)=s|HvD75}5TM zD~T89^>6KJizj;xm0krT8w^46*H_(o(v&ePiA)q0v7DI2;eRatLN`*yK7?!l&nr$g zwZn<%N11F(GxT!6FR_TH5Y>vqK2@n#Bha3%Nz@quT86yBscsRiZ)b#Q&3{kZ9N*DgqJ1d948cfa&xjyUR2-^Je^wEIYt0bwg?Rzhz@n1+352=oo)j}^Otj;TC zi+Ag&%*(F_L}v%L2_!gZ2_BqwL#i0!SFawv460-5mg72(L9aVS9%ZY~jhZ?RP)qJf zm1?Bkp8XO#zbR~^_j$H%F* zNr=9AkoX2e;CJHKPD<4}CNrrX=00y({sCR*YV}^fq+1?mMnx%VRm^MBE{4+*!~*>F zAe6|YxL~e^n7Hshk^OsW);A6Lz~@-=&gZFS*(2*k_LZF@ld&ich8KLn)GwYjU)pC^_;;0;$Y@z#)~M2;6(Ne*y0v2_C<(= zw1FXk`u<~lnCHi^zg4=gElt-(Iojn7Hy_Z49X$VBF3mCj{T>mypUen<`bVa(br-&AzG|OTF_bjzHd=)SJcDb!20)M=5;i5(5W@js=e6zvbc0%n-v5c?` z{JmM^v&;ifYY#8z(5mG{o@u?YS5~LV8V9_vx8~=zrc~G5H$5lhjbJ|3%SRbag@vPh zyC=(9>Xd)|MF#?e`A|2qO(?p%UgI@H{v<@+#p8?z#QYxnu;!_siw)&B?!v$PY0bk& zCPB3Zrak9xbk5>2xk15MME2e>;t5&4O$pfbnAx6MO-Si;k?+p!x<>?iK=E#;*w1;> z=6XjyZM%qC>F(5q$Q5oSog8B7<|1&%EkXIimw`zX^b@H^R2c9tkq?Ez3B zT;=+SyASE8FJhu{Cpf+)PhE*s=dKFX2+8>8>r*yf_`R}fxZ~5euqf}BTjw4O_^ZRn zGUPV;Lhs6hcRn|)r1J0C)=JwJRqu!Idpai*UpO0aGOjH`H05it{40^V!SLDnhITiq zEOtBJd{vRLRKj8x|F4k20?Ysjo|>D5uavJ3MI1Q__?mzjQ2OzlzSHTi5NU{2*=NSlIBlDFEN zJJYFMRg?47yIFN$chl5>@_}*1PsR;K22ZB*ZaEqhU3qsy?}?7MTU@cYjWx|+s3FYd z>+b-!c8Tn{>wII*@bH@YUs*P;Z}+i_2E%bBI@S)yA6=^}yuChFV6>8F-v#FsC|KiB z>xn76uD+z%&bGqd!0Y1Tk+*xg-Z#O0AeYi9)A4~{?sjFUUw{W2UHBsD+j}!lRR-+Z z`SY_}SJE-zwV=7ddssAA(0CsVI^yZ3A2^5K3P?A*=NN0i&sAn>;65~o!J3XLO0SCu zAM^Mtpa{M340e=#?Re6_2G}(Si{P<62(|rF1hQ9nS6t2$Q3%lceJzQfaRSBj4T2vpBrbCs!-Q`X``y8 z8anRs7APyQFJ3DszY{HX;KHhUZ4=p8a+u z?GuUcv+<<|^v@x2_KIg4Z$Ey~h`pSao^B%d7NU9FBG?aG=QElDhwj9`Vv&W_B}Px~ zeH;1(n^*({R4=ImI0vDZTLQjjS7%3FRq`0pVN|EOVflDc%wc?a0FAI*u(0v=@6D^& zqYpzLOm{|O6<#yMwX--@NsRZQ&Xy^5{WlEdeh*pxy&P+XU_Q*6>pdv@ z`qh1NBuz)MId6D%)Hjo1ELW6UviU@?h*lc-S6MXQZ z&;2QzoYWcpY<<|(yeD1c)Odi794K*J*x^ch;lfHnODjtcH^hS!F8+nr%F+Q zOKFDg6A7gcZw!sSfr#~sgRW08{vOwyx(rTy0Fje9wph-ZbGH`z< zR932V#^ArYwX_Jl+UeH+c}V=kG@ycYlHqxIlFv-0mh1^ryZ_Pe{IAX*Y8Hu-Vm>~q z>vO`f1a8{NRgN(>)U~uZTPt+dUX^sB+JFuuZ$w)hyh_%hoywKBmwC~BvFV)v1Xwj% zAP$=rVs&&i``xCSbf9i3reCnHRSkcLLX1Ir0oakEO*wI?56eS`eGl$l0F;F=t3fa7 z3LYuu4^HE{zxi9JQBBN(HjEE8EVzt#l5T3v1c0`u=dASGx2F@RCP0*wu?FCFNM2GO zfD@w273Y_6sl?YBC@pO&hu{6MUNBR0(x9OLHOBzkc}l|_2-9XkKJ}Y(jAVn;seZgf z$5DkAgt{9GGw9Dt0gu$OPBNG5%X1|^@ji6Wur({NY{sj9M^2`v!}EOB7X9y(bMSKj z?AS~CSBr{YE&ds=Z=0lEdy{V@*6kACle!uI^hUY3z~f3(+X*%ND^J?$Ozd3&*mi4=CY*Pfv#LkEic62-t-oi7 zG%03n*cI_6D&NuroGvK~dzaN&ZagU?y3IBeWw7(5abZnYtuRg;iFM?(3m?B8)(t15 zV;=c$0Z8xINcFYgHThA|dSHIWi0;6zeN+3p#Hyvi?3lLBbPZ$*Q%LpNM7dO1+}MQP z+e&6QLD#Q^%$)tnNCI0$Bm$8o3AMdOSLCy*1{5W?Rkb`aE0o=O(~dTM-%Kx^@l6Rz zHgI~|1Sm{ebsIFx*QJ=nMIjLz#}2FEj4vE95Ry7Fa1NZ5Imx*$a?{Ku9ww{g5bn{q(fZX4$=XcKEkh&l@wCG{=<1X-cxIz4-K*QJ z!<^NVz#HoM--B#8N3cFsvVTS$EV`Q6S&#nD#b2<{;*M|J#;mqsuL=hH2nyum(uxHs zRY7qq8rN?FOHZi{fLJKsWB&A4eYYcmfeS)$L10iD-DpeS@fXbbL4O1ct{6I&3NcJT z<5&H>`3kkc!l$hq?iPik@A(W}wPionhQ(xTo&C2i@kaaLTQ;j4#w6VxjMT=B64%+h z`2~;HU@Lz7N8UEV^7GiSgH6Rq3;72GsL0zpW&qd;QF0_P$wyx=NK>+`;pr*zucTPR zq++ij%?BeV1A5Z-l}T*ay@-`G8xoq`-(^+qPFq$8mugW}tsnCq47wJ^UN(>bOfF|` zy}7Y*+AXJ-UcgD2Blu`ct-KEcUbHY;cN3ghA80t^{;0;k(F)9c52~fCGn(`4_+!!P zNXupKeMGt_vY`URrIdOLmEQ~to{_;0>ZdrV;FHrvC^4sh(kn||JTp9MoZ z2BtimquLoLIyIB|-6oXO!b=a}P{xv1=5;FE*@6a=+E&$wW{fcBrsYrnJX#M3vI^zGBPWzFvCdrfOFD{l8%DN1J4iU$d6f_R3@bJ-;#! z3Ak43LwUwjyqiyIR)j(WuFZ$8IZ;}^tWpLeaHlzR)9#*q8BnxL8uR}Iq&Mf=d-g3r z(YM+3=-<&OL1&jR5O_YT5XId0AL%}_)Is&fAfH>R$_NK9ev9Y4-$u>v7g%;YGb+fX zR*xUTe;`k|#Za1rs*P&gET8$>YUra~8W;?~9CpfLZmA*T17Vk*(aS*3B}mPFuHO>1 z#|A^0M$R-#bUu2lwB2RVtM@}-GJJP&k=VmPXA{38%9gv2vVH%K7`dQ6`aOSn_J_$W z?J=KRq)fcs4gsKJ+?&a;?a8&^a4SzV3Rf>WD@i@A63%tctMeSMS9}0vEh&awlV)B$ zxoH#dBj?_j(Cij+C_Vqe!E4xT^4jxS=b%WsGNi<#V^<%0?_mNZ8>p&*IhCw6ui3Ss z@!efg7Ht?3bRaIQ%+s#w#y;x8qSQ>HNea&;(G?2L?581*95_xECk>E`+RibeB0l^L z>gSdnO1mVs%Tr#g)JwnO4gzJSgUvF{O#h^dxE+8yo!Hu?EE%o#?jk7u<`&L(b#DM= zPN*E6gXMqcag0SX zS`FKM?S$FFT}nB?^+!EQyn7anDx>uK-0KaA9*%q{GsHGK!&gV6zQsjMTpR{!Ui>%` z>C&?J@u0gnPzLBzGTTi=apUIhagEP_qXS%^vV!dosf`SPf12TkX4+{A*ia%(I$eHX z+=tQObjlK0&-V%m9W3;KMt0_mH~$%I;rDfza*XVRyf zAmVPRzjCpazZiyGJADTk40Q;O@L;QutGSO^8ehEogAX&J$semq3+A3_%dKl`+8VE4sVV~nlzbHW~L0yST$B`duQpAt;=je0IP0W)X z&bBwKul=^dA1Y*l1e^Qi@Y#jOMT41}Pv7O{GB-H~pQ_)_b$6Vi4h@!N?z2F+?c%+4 zu}`$V)dE^F&L>05gUJ;_c?SKT64Io;z~ghBY!60Ig>4Vkw4eIZ|b+n!?a> zuFX6+1KKYj@Y|D}vj7gCl{~z?GZvLSzC?+XdkwQRu$QM!u&PO4Go1by1aE12Y&cK= z*D=mCn?tr>e)4+Y1Z!XiFrIf9HykvVU8#~41Jl-oj*j zZB>~2-GzO1s^o2@X@DYAHvwBJ@&Gp=ix*RK*VHz-S+miU$*tC)Y2 zj*A~k-`R67-uU{-f9Ie=EaTNkjrq~J3p<-!oe*mLzxKkNW)6M;$4R!b_{78^96NI{ zCv|`0B&=sB(M-EYW1->Ga@E3C{rM(V+i}MeMkDH5A8iclDZ}sie#ijT6eh5B8bu;) zq&QnQ6UMo`U5hVhLbt`n{%-dDd=ToV?eS|<`ZCf8-f-#NOjevJ5a3|K)r)&mj#C4w z7~URBVFY>}IOA@xRpNIx#6B@Hgg-nYt4!*c4K6PGe>oEJU&(3llSSK`r7bYk_*RRB zkI7?M1^zx2%dKx0bErji7e6Ga5dUZX=v5-UlgAx`q+gnmd~-3Mj0*#lMc~b3K6yq0 zwfDFG>Mj4Bx*KR7>dJ%DhxCnMu$-c@GUcGQ!J(nFwzgZGd)M!4O9H13l%QM9p&Vm4 zytb&kyw37c*gR0Ym;tsjGm}A=V~u$`rx7%?NYclEGYkShQg77lp4+PvrF%|JL7~>N zqNWD&`nE27clLf&Rq!7vQX-zzf_={*yKR?o>pvq~1fp5S_JP jUx!;n|F4Y7uiqB_0J_Wia8r%B)5t*2RJUB`-qZg9e+4nJ diff --git a/icons/obj/clothing/gloves.dmi b/icons/obj/clothing/gloves.dmi index e937842275bc88367426079b90389858133d04e6..bbdae032c79d0b46b442d3fce482d10906b332ad 100644 GIT binary patch literal 17007 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 EKd|&ZE&u=k literal 15403 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 Date: Sat, 4 Apr 2020 16:42:37 +1100 Subject: [PATCH 08/25] Hooks up the chaplain null rod gloves to the choice of gloves --- code/__DEFINES/misc.dm | 2 +- code/modules/clothing/gloves/miscellaneous.dm | 2 +- icons/mob/hands.dmi | Bin 10488 -> 10513 bytes 3 files changed, 2 insertions(+), 2 deletions(-) diff --git a/code/__DEFINES/misc.dm b/code/__DEFINES/misc.dm index 9efffefce5..3fb149d071 100644 --- a/code/__DEFINES/misc.dm +++ b/code/__DEFINES/misc.dm @@ -465,7 +465,7 @@ GLOBAL_LIST_INIT(pda_reskins, list(PDA_SKIN_CLASSIC = 'icons/obj/pda.dmi', PDA_S #define EGG_LAYING_MESSAGES list("lays an egg.","squats down and croons.","begins making a huge racket.","begins clucking raucously.") // list of all null rod weapons -#define HOLY_WEAPONS /obj/item/nullrod, /obj/item/twohanded/dualsaber/hypereutactic/chaplain, /obj/item/gun/energy/laser/redtag/hitscan/chaplain, /obj/item/multitool/chaplain, /obj/item/melee/baseball_bat/chaplain +#define HOLY_WEAPONS /obj/item/nullrod, /obj/item/twohanded/dualsaber/hypereutactic/chaplain, /obj/item/gun/energy/laser/redtag/hitscan/chaplain, /obj/item/multitool/chaplain, /obj/item/clothing/gloves/fingerless/pugilist/chaplain, /obj/item/melee/baseball_bat/chaplain // Used by PDA and cartridge code to reduce repetitiveness of spritesheets #define PDAIMG(what) {""} diff --git a/code/modules/clothing/gloves/miscellaneous.dm b/code/modules/clothing/gloves/miscellaneous.dm index 76ecff108e..db74fbfdcb 100644 --- a/code/modules/clothing/gloves/miscellaneous.dm +++ b/code/modules/clothing/gloves/miscellaneous.dm @@ -47,7 +47,7 @@ H.dna.species.punchdamagelow -= enhancement H.dna.species.punchstunthreshold += enhancement -/obj/item/clothing/gloves/fingerless/pugilist/holy +/obj/item/clothing/gloves/fingerless/pugilist/chaplain name = "armwraps of unyielding resolve" desc = "A series of armwraps, soaked in holy water. Makes you pretty keen to smite evil magic users." resistance_flags = FIRE_PROOF | ACID_PROOF diff --git a/icons/mob/hands.dmi b/icons/mob/hands.dmi index 048df0621a1cee5de3fe9ae034094b30fc246d72..6cbd958d513189d7e15b3b31cc96dd1cd93f7e15 100644 GIT binary patch delta 9132 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 delta 9110 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 EFTDzX+W-In From c6e82382a3a60d8e55095e9f6117971d1bdae5c0 Mon Sep 17 00:00:00 2001 From: necromanceranne Date: Sat, 4 Apr 2020 16:51:32 +1100 Subject: [PATCH 09/25] I feel like messing with this is basically unnecessary --- code/modules/clothing/gloves/miscellaneous.dm | 2 -- 1 file changed, 2 deletions(-) diff --git a/code/modules/clothing/gloves/miscellaneous.dm b/code/modules/clothing/gloves/miscellaneous.dm index db74fbfdcb..715abfb253 100644 --- a/code/modules/clothing/gloves/miscellaneous.dm +++ b/code/modules/clothing/gloves/miscellaneous.dm @@ -34,7 +34,6 @@ ADD_TRAIT(H, secondary_trait, GLOVE_TRAIT) H.dna.species.punchdamagehigh += enhancement H.dna.species.punchdamagelow += enhancement - H.dna.species.punchstunthreshold -= enhancement /obj/item/clothing/gloves/fingerless/pugilist/dropped(mob/user) ..() @@ -45,7 +44,6 @@ var/mob/living/carbon/human/H = user H.dna.species.punchdamagehigh -= enhancement H.dna.species.punchdamagelow -= enhancement - H.dna.species.punchstunthreshold += enhancement /obj/item/clothing/gloves/fingerless/pugilist/chaplain name = "armwraps of unyielding resolve" From 7935eb8364d64289567b7776706ee7941de4d849 Mon Sep 17 00:00:00 2001 From: necromanceranne Date: Sat, 4 Apr 2020 17:24:44 +1100 Subject: [PATCH 10/25] pretty sure this was brekaing stuff --- code/modules/clothing/gloves/miscellaneous.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/clothing/gloves/miscellaneous.dm b/code/modules/clothing/gloves/miscellaneous.dm index 715abfb253..5bdb499c61 100644 --- a/code/modules/clothing/gloves/miscellaneous.dm +++ b/code/modules/clothing/gloves/miscellaneous.dm @@ -32,8 +32,8 @@ ADD_TRAIT(H, TRAIT_PUGILIST, GLOVE_TRAIT) ADD_TRAIT(H, inherited_trait, GLOVE_TRAIT) ADD_TRAIT(H, secondary_trait, GLOVE_TRAIT) - H.dna.species.punchdamagehigh += enhancement - H.dna.species.punchdamagelow += enhancement + H.dna.species.punchdamagehigh += initial(H.dna.species.punchdamagehigh) + H.dna.species.punchdamagelow += initial(H.dna.species.punchdamagelow) /obj/item/clothing/gloves/fingerless/pugilist/dropped(mob/user) ..() From 856eca772d0d432d2154a3e622284aff6d828672 Mon Sep 17 00:00:00 2001 From: necromanceranne Date: Sat, 4 Apr 2020 18:05:02 +1100 Subject: [PATCH 11/25] this is all still super broken --- code/datums/martial/boxing.dm | 2 +- code/datums/martial/sleeping_carp.dm | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/code/datums/martial/boxing.dm b/code/datums/martial/boxing.dm index 6dcb9e06ef..5e1c8497d6 100644 --- a/code/datums/martial/boxing.dm +++ b/code/datums/martial/boxing.dm @@ -17,7 +17,7 @@ var/atk_verb = pick("left hook","right hook","straight punch") - var/extra_damage = base_damage + var/extra_damage = damage_base if(extra_damage == A.dna.species.punchdamagelow) playsound(D.loc, A.dna.species.miss_sound, 25, 1, -1) D.visible_message("[A] has attempted to [atk_verb] [D]!", \ diff --git a/code/datums/martial/sleeping_carp.dm b/code/datums/martial/sleeping_carp.dm index dc0ea1a2b4..56f6a1969a 100644 --- a/code/datums/martial/sleeping_carp.dm +++ b/code/datums/martial/sleeping_carp.dm @@ -63,11 +63,11 @@ playsound(get_turf(A), 'sound/effects/hit_kick.ogg', 50, TRUE, -1) if((D.mobility_flags & MOBILITY_STAND)) D.apply_damage(damage_base, BRUTE, BODY_ZONE_HEAD) - D.DefaultCombatKnockdown(50) + D.DefaultCombatKnockdown(50, override_hardstun = 0.01, override_stamdmg = 0) D.apply_damage(damage_base + 35, STAMINA, BODY_ZONE_HEAD) //A cit specific change form the tg port to really punish anyone who tries to stand up D.visible_message("[A] kicks [D] in the head, sending them face first into the floor!", \ "You are kicked in the head by [A], sending you crashing to the floor!", "You hear a sickening sound of flesh hitting flesh!", COMBAT_MESSAGE_RANGE, A) - if(!(D.mobility_flags & MOBILITY_STAND)) + else if(!(D.mobility_flags & MOBILITY_STAND)) D.apply_damage(damage_base*0.5, BRUTE, BODY_ZONE_HEAD) D.apply_damage(damage_base + 35, STAMINA, BODY_ZONE_HEAD) D.drop_all_held_items() From fcb816675b4b249c2ee9b0530fa1b13eda2519de Mon Sep 17 00:00:00 2001 From: necromanceranne Date: Sat, 4 Apr 2020 18:20:17 +1100 Subject: [PATCH 12/25] not only am I blind I am also dumb --- code/modules/clothing/gloves/miscellaneous.dm | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/code/modules/clothing/gloves/miscellaneous.dm b/code/modules/clothing/gloves/miscellaneous.dm index 5bdb499c61..e51e4eae3b 100644 --- a/code/modules/clothing/gloves/miscellaneous.dm +++ b/code/modules/clothing/gloves/miscellaneous.dm @@ -32,8 +32,8 @@ ADD_TRAIT(H, TRAIT_PUGILIST, GLOVE_TRAIT) ADD_TRAIT(H, inherited_trait, GLOVE_TRAIT) ADD_TRAIT(H, secondary_trait, GLOVE_TRAIT) - H.dna.species.punchdamagehigh += initial(H.dna.species.punchdamagehigh) - H.dna.species.punchdamagelow += initial(H.dna.species.punchdamagelow) + H.dna.species.punchdamagehigh += enhancement + H.dna.species.punchdamagelow += enhancement /obj/item/clothing/gloves/fingerless/pugilist/dropped(mob/user) ..() @@ -42,8 +42,8 @@ REMOVE_TRAIT(user, secondary_trait, GLOVE_TRAIT) if(ishuman(user)) var/mob/living/carbon/human/H = user - H.dna.species.punchdamagehigh -= enhancement - H.dna.species.punchdamagelow -= enhancement + H.dna.species.punchdamagehigh -= initial(H.dna.species.punchdamagehigh) + H.dna.species.punchdamagelow -= initial(H.dna.species.punchdamagelow) /obj/item/clothing/gloves/fingerless/pugilist/chaplain name = "armwraps of unyielding resolve" From bd5446e9067e9cf0ad2a663fddce3c817f37713d Mon Sep 17 00:00:00 2001 From: necromanceranne Date: Sat, 4 Apr 2020 18:21:18 +1100 Subject: [PATCH 13/25] NYOOPS --- code/modules/clothing/gloves/miscellaneous.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/clothing/gloves/miscellaneous.dm b/code/modules/clothing/gloves/miscellaneous.dm index e51e4eae3b..dac4a0bf6c 100644 --- a/code/modules/clothing/gloves/miscellaneous.dm +++ b/code/modules/clothing/gloves/miscellaneous.dm @@ -42,8 +42,8 @@ REMOVE_TRAIT(user, secondary_trait, GLOVE_TRAIT) if(ishuman(user)) var/mob/living/carbon/human/H = user - H.dna.species.punchdamagehigh -= initial(H.dna.species.punchdamagehigh) - H.dna.species.punchdamagelow -= initial(H.dna.species.punchdamagelow) + H.dna.species.punchdamagehigh = initial(H.dna.species.punchdamagehigh) + H.dna.species.punchdamagelow = initial(H.dna.species.punchdamagelow) /obj/item/clothing/gloves/fingerless/pugilist/chaplain name = "armwraps of unyielding resolve" From 4c051f70e8c61ab3b69307f462cbbb15bda1a234 Mon Sep 17 00:00:00 2001 From: necromanceranne Date: Sat, 4 Apr 2020 19:16:59 +1100 Subject: [PATCH 14/25] fixes this too --- code/modules/clothing/gloves/miscellaneous.dm | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/code/modules/clothing/gloves/miscellaneous.dm b/code/modules/clothing/gloves/miscellaneous.dm index dac4a0bf6c..6f0d25b498 100644 --- a/code/modules/clothing/gloves/miscellaneous.dm +++ b/code/modules/clothing/gloves/miscellaneous.dm @@ -51,6 +51,11 @@ resistance_flags = FIRE_PROOF | ACID_PROOF enhancement = 1 //It is not magic that makes you punch harder, but force of will. Trust me. secondary_trait = TRAIT_ANTIMAGIC + var/chaplain_spawnable = TRUE + +/obj/item/clothing/gloves/fingerless/pugilist/chaplain/Initialize() + . = ..() + AddComponent(/datum/component/anti_magic, TRUE, TRUE, FALSE, null, null, FALSE) /obj/item/clothing/gloves/fingerless/pugilist/magic name = "armwraps of mighty fists" From 333a3f7c0cbe6f641959a44ef647ac2eef8c4a10 Mon Sep 17 00:00:00 2001 From: necromanceranne Date: Sat, 4 Apr 2020 19:49:22 +1100 Subject: [PATCH 15/25] This was also not the right way to do this so these values may be slightly stronger overall but will mean hitting with that second punch is all the more critical. --- code/datums/martial/sleeping_carp.dm | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/code/datums/martial/sleeping_carp.dm b/code/datums/martial/sleeping_carp.dm index 56f6a1969a..4646ac9ee9 100644 --- a/code/datums/martial/sleeping_carp.dm +++ b/code/datums/martial/sleeping_carp.dm @@ -35,14 +35,14 @@ "[A] [atk_verb]s you!", null, null, A) to_chat(A, "You [atk_verb] [D]!") if(prob(10)) - crit_damage += 20 + crit_damage += (damage_base*2 + 15) playsound(get_turf(D), 'sound/weapons/bite.ogg', 50, TRUE, -1) - D.visible_message("[D] sputters blood as the blow strikes them with inhuman force!", "You are struck with incredible precision by [A]!") + D.visible_message("[D] staggers as the blow strikes them with inhuman force!", "You are struck with incredible precision by [A]!") log_combat(A, D, "critcal strong punched (Sleeping Carp)")//log it here because a critical can swing for 40 force and it's important for the sake of how hard they hit else playsound(get_turf(D), 'sound/weapons/punch1.ogg', 25, TRUE, -1) log_combat(A, D, "strong punched (Sleeping Carp)")//so as to not double up on logging - D.apply_damage(damage_base*2 + crit_damage, BRUTE, affecting) + D.apply_damage((damage_base + 15) + crit_damage, BRUTE, affecting) return ///Crashing Wave Kick: Harm Disarm combo, throws people seven tiles backwards @@ -93,7 +93,7 @@ D.visible_message("[A] [atk_verb]s [D]!", \ "[A] [atk_verb]s you!", null, null, A) to_chat(A, "You [atk_verb] [D]!") - D.apply_damage(damage_base + 10, BRUTE, affecting) + D.apply_damage(damage_base + 5, BRUTE, affecting) playsound(get_turf(D), 'sound/weapons/punch1.ogg', 25, TRUE, -1) log_combat(A, D, "punched (Sleeping Carp)") return TRUE From 38586c9d920dd799db0e0382463fe2df274e3997 Mon Sep 17 00:00:00 2001 From: necromanceranne Date: Sat, 4 Apr 2020 20:09:09 +1100 Subject: [PATCH 16/25] I feel like this is more fitting --- code/modules/clothing/gloves/miscellaneous.dm | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/code/modules/clothing/gloves/miscellaneous.dm b/code/modules/clothing/gloves/miscellaneous.dm index 6f0d25b498..a2074354f3 100644 --- a/code/modules/clothing/gloves/miscellaneous.dm +++ b/code/modules/clothing/gloves/miscellaneous.dm @@ -88,9 +88,13 @@ desc = "The armbands of a deadly martial artist. Makes you pretty keen to put an end to evil in an extremely violent manner." icon_state = "rapid" item_state = "rapid" - enhancement = 7 //omae wa mou shindeiru + enhancement = 10 //omae wa mou shindeiru var/warcry = "AT" - secondary_trait = TRAIT_NODROP + secondary_trait = TRAIT_NOHARDCRIT + +/obj/item/clothing/gloves/fingerless/pugilist/rapid/Initialize() + . = ..() + ADD_TRAIT(src, TRAIT_NODROP, GLOVE_TRAIT) /obj/item/clothing/gloves/fingerless/pugilist/rapid/Touch(mob/living/target,proximity = TRUE) if(!istype(target)) From a6bd6d23fec96d0a2c62de04a852dbc6fc4d0ed0 Mon Sep 17 00:00:00 2001 From: necromanceranne Date: Mon, 6 Apr 2020 12:28:14 +1000 Subject: [PATCH 17/25] Some cleanup with help from rohesie, hopefully I figured it out --- code/datums/martial/krav_maga.dm | 30 +++++++------- code/modules/clothing/gloves/miscellaneous.dm | 37 ++++++++++-------- icons/mob/hands.dmi | Bin 10513 -> 10110 bytes icons/obj/clothing/gloves.dmi | Bin 17007 -> 16697 bytes 4 files changed, 36 insertions(+), 31 deletions(-) diff --git a/code/datums/martial/krav_maga.dm b/code/datums/martial/krav_maga.dm index ed68403b1d..bcc561a15b 100644 --- a/code/datums/martial/krav_maga.dm +++ b/code/datums/martial/krav_maga.dm @@ -84,29 +84,29 @@ if("neck_chop") streak = "" neck_chop(A,D) - return 1 + return TRUE if("leg_sweep") streak = "" leg_sweep(A,D) - return 1 + return TRUE if("quick_choke")//is actually lung punch streak = "" quick_choke(A,D) - return 1 - return 0 + return TRUE + return FALSE /datum/martial_art/krav_maga/proc/leg_sweep(mob/living/carbon/human/A, mob/living/carbon/human/D) var/obj/item/bodypart/affecting = D.get_bodypart(BODY_ZONE_CHEST) var/armor_block = D.run_armor_check(affecting, "melee") if(!CHECK_MOBILITY(D, MOBILITY_STAND)) - return 0 + return FALSE D.visible_message("[A] leg sweeps [D]!", \ "[A] leg sweeps you!") playsound(get_turf(A), 'sound/effects/hit_kick.ogg', 50, 1, -1) D.apply_damage(damage_base + 25, STAMINA, affecting, armor_block) D.DefaultCombatKnockdown(80, override_hardstun = 1, override_stamdmg = 0) log_combat(A, D, "leg sweeped") - return 1 + return TRUE /datum/martial_art/krav_maga/proc/quick_choke(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D)//is actually lung punch D.visible_message("[A] pounds [D] on the chest!", \ @@ -116,7 +116,7 @@ D.losebreath = CLAMP(D.losebreath + 5, 0, 10) D.adjustOxyLoss(damage_base + 5) log_combat(A, D, "quickchoked") - return 1 + return TRUE /datum/martial_art/krav_maga/proc/neck_chop(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D) D.visible_message("[A] karate chops [D]'s neck!", \ @@ -126,11 +126,11 @@ if(D.silent <= 10) D.silent = CLAMP(D.silent + 10, 0, 10) log_combat(A, D, "neck chopped") - return 1 + return TRUE /datum/martial_art/krav_maga/grab_act(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D) if(check_streak(A,D)) - return 1 + return TRUE log_combat(A, D, "grabbed (Krav Maga)") ..() @@ -138,7 +138,7 @@ var/obj/item/bodypart/affecting = D.get_bodypart(ran_zone(A.zone_selected)) var/armor_block = D.run_armor_check(affecting, "melee") if(check_streak(A,D)) - return 1 + return TRUE log_combat(A, D, "punched") var/picked_hit_type = pick("punches", "kicks") var/bonus_damage = 0 @@ -155,14 +155,14 @@ D.visible_message("[A] [picked_hit_type] [D]!", \ "[A] [picked_hit_type] you!") log_combat(A, D, "[picked_hit_type] with [name]") - return 1 + return TRUE /datum/martial_art/krav_maga/disarm_act(mob/living/carbon/human/A, mob/living/carbon/human/D) if(check_streak(A,D)) - return 1 + return TRUE var/obj/item/bodypart/affecting = D.get_bodypart(ran_zone(A.zone_selected)) var/armor_block = D.run_armor_check(affecting, "melee") - if((D.mobility_flags & MOBILITY_STAND)) + if(D.mobility_flags & MOBILITY_STAND) D.visible_message("[A] reprimands [D]!", \ "You're slapped by [A]!", "You hear a sickening sound of flesh hitting flesh!", COMBAT_MESSAGE_RANGE, A) to_chat(A, "You jab [D]!") @@ -170,7 +170,7 @@ playsound(D, 'sound/effects/hit_punch.ogg', 50, TRUE, -1) D.apply_damage(damage_base + 5, STAMINA, affecting, armor_block) log_combat(A, D, "punched nonlethally") - if(!(D.mobility_flags & MOBILITY_STAND)) + else D.visible_message("[A] reprimands [D]!", \ "You're manhandled by [A]!", "You hear a sickening sound of flesh hitting flesh!", COMBAT_MESSAGE_RANGE, A) to_chat(A, "You stomp [D]!") @@ -181,7 +181,7 @@ if(prob(D.getStaminaLoss())) D.visible_message("[D] sputters and recoils in pain!", "You recoil in pain as you are jabbed in a nerve!") D.drop_all_held_items() - return 1 + return TRUE //Krav Maga Gloves diff --git a/code/modules/clothing/gloves/miscellaneous.dm b/code/modules/clothing/gloves/miscellaneous.dm index a2074354f3..3a9d842a73 100644 --- a/code/modules/clothing/gloves/miscellaneous.dm +++ b/code/modules/clothing/gloves/miscellaneous.dm @@ -20,12 +20,15 @@ body_parts_covered = ARMS cold_protection = ARMS strip_delay = 300 //you can't just yank them off + ///Extra damage through the punch. var/enhancement = 0 //it's a +0 to your punches because it isn't magical + ///Main trait added by the gloves to the user on wear. var/inherited_trait = TRAIT_NOGUNS //what are you, dishonoroable? + ///Secondary trait added by the gloves to the user on wear. var/secondary_trait = TRAIT_FEARLESS //what are you, a coward? /obj/item/clothing/gloves/fingerless/pugilist/equipped(mob/user, slot) - ..() + . = ..() if(slot == SLOT_GLOVES) if(ishuman(user)) var/mob/living/carbon/human/H = user @@ -36,7 +39,7 @@ H.dna.species.punchdamagelow += enhancement /obj/item/clothing/gloves/fingerless/pugilist/dropped(mob/user) - ..() + REMOVE_TRAIT(user, TRAIT_PUGILIST, GLOVE_TRAIT) REMOVE_TRAIT(user, inherited_trait, GLOVE_TRAIT) REMOVE_TRAIT(user, secondary_trait, GLOVE_TRAIT) @@ -44,6 +47,7 @@ var/mob/living/carbon/human/H = user H.dna.species.punchdamagehigh = initial(H.dna.species.punchdamagehigh) H.dna.species.punchdamagelow = initial(H.dna.species.punchdamagelow) + return ..() /obj/item/clothing/gloves/fingerless/pugilist/chaplain name = "armwraps of unyielding resolve" @@ -52,7 +56,7 @@ enhancement = 1 //It is not magic that makes you punch harder, but force of will. Trust me. secondary_trait = TRAIT_ANTIMAGIC var/chaplain_spawnable = TRUE - + /obj/item/clothing/gloves/fingerless/pugilist/chaplain/Initialize() . = ..() AddComponent(/datum/component/anti_magic, TRUE, TRUE, FALSE, null, null, FALSE) @@ -72,7 +76,7 @@ armor = list("melee" = 10, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 35, "rad" = 0, "fire" = 50, "acid" = 50) enhancement = 3 secondary_trait = TRAIT_KI_VAMPIRE - + /obj/item/clothing/gloves/fingerless/pugilist/brassmountain name = "armbands of the brass mountain" desc = "A series of scolding hot brass armbands. Makes you pretty keen to bring the light to the unenlightened through unmitigated violence." @@ -91,21 +95,21 @@ enhancement = 10 //omae wa mou shindeiru var/warcry = "AT" secondary_trait = TRAIT_NOHARDCRIT - + /obj/item/clothing/gloves/fingerless/pugilist/rapid/Initialize() . = ..() ADD_TRAIT(src, TRAIT_NODROP, GLOVE_TRAIT) -/obj/item/clothing/gloves/fingerless/pugilist/rapid/Touch(mob/living/target,proximity = TRUE) - if(!istype(target)) +/obj/item/clothing/gloves/fingerless/pugilist/rapid/Touch(atom/target, proximity = TRUE) + if(!isliving(target)) return var/mob/living/M = loc M.changeNext_move(CLICK_CD_RAPID) if(warcry) - M.say("[warcry]", ignore_spam = TRUE, forced = "north star warcry") + M.say("[warcry]", ignore_spam = TRUE, forced = TRUE) - .= FALSE + .return FALSE /obj/item/clothing/gloves/fingerless/pugilist/rapid/attack_self(mob/user) var/input = stripped_input(user,"What do you want your battlecry to be? Max length of 6 characters.", ,"", 7) @@ -125,13 +129,14 @@ var/mob/living/M = loc - if(M.a_intent == INTENT_HELP) - if(target.health >= 0 && !HAS_TRAIT(target, TRAIT_FAKEDEATH)) //Can't hug people who are dying/dead - if(target.on_fire || target.lying) //No spamming extinguishing, helping them up, or other non-hugging/patting help interactions - return - else - M.changeNext_move(CLICK_CD_RAPID) - . = FALSE + if(M.a_intent != INTENT_HELP) + return FALSE + if(stat != CONSCIOUS) //Can't hug people who are dying/dead + return FALSE + else + M.changeNext_move(CLICK_CD_RAPID) + + return FALSE /obj/item/clothing/gloves/fingerless/pugilist/rapid/hug/attack_self(mob/user) return FALSE diff --git a/icons/mob/hands.dmi b/icons/mob/hands.dmi index 6cbd958d513189d7e15b3b31cc96dd1cd93f7e15..74aabf6021997fb06b02afbf89f03b8861865232 100644 GIT binary patch delta 8914 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 delta 9338 zcmY*;2UHW=_BUQco|SiPh=5$L6j6~YRch>rlqkJNrFSWz1u~XvqY9B4lBo19(o2Gf zfRum`lF%bUf(e8GNx*~zzTms>Tkk(>WzOug_ng_YOXlp~-n2}$dY`xhfQ7qIWET^9 z^Mx?eO?~t)1d0>#I9DpB;Nq{XW3mtlqP)*(`5ea5Cl39?jut*cvJE z^LowEy_(}J77xo>TZ~*IDegFk*s=3G@bM{kfgG&e6);unOCW7u*BN*b3N4(IF4T8> z_~Vdh!56uTdJG#?w-gx0u9C$^s|yDDo!0BC4QQ>>aPOc^Xdd&zSPrXD1*Bn8#+;AE z084uAi5HMMff@_sss>w_kk8#-vg?>T%)Fk~LhniGAM%qzvDkw~z`XC;xVA>2Ev-An zHrqtu<#?&^$EiE)+3wOr-*m^88@^o46TC;&2Yig9ZYM~qlSWFcnREV(krJoYsOlW4 z6SdIT`gzz80@LM=OSm5$e+0&p^l=px7S4*O3=j=cu{)J@9SmO$!^N#c-Jk&31M8(Kp#7*| zh~bi1m)YQr+M>9An3Cx*dhMZGjLti2+StVV55~ZCk!_L{Dw<>v6};?X)@zJ#+qAPL z{y|+H{%~c60o5BMGGe6Q^bkHP06%ywu1K)x%{)E^7i2B}I5kwO0C<@hBTgQ@iumI< z3E-7#24ROk`O9QPCI?YeIzsyTrYbfpDyh!j;|7kF?omgsOnqr*OXrsz=PYlLOojP* zm6ZdW?%DXGhl}&d%w%ZT~ROp?(p*uw*TW;t+ui=dx~RYZ|~hY@GB7T9KN?c z#R80=3+zn`&8=|x*tFvTF6w29)_`h>_3%BU`;9VfYpaw5fs3g^Q8vg4-2FNhZkx8E zA67eVt1@t>dJ?ZYSC}fV@O<0${2pst@l=`Dqk@Q7xr`BNobd5)=@!}VG?3kc#pQB> zFcW*e&_kb+fELWH$7*6XMYesX0!r$RHBhqcolZYr&5Kqg--B0n^MF%apSvBY8gbmr zgGfk9-^z}Lc6B4!JI+_1Ow6Et{e8ZQJQ0h(82jVZ@%5!TXu#|=RzLQ~*Zf{^mnj&2 zJcZ{KBh*A;`n{-{tzkIXxPIc9wUYaXc9O&l6?_ZQ_y3W-2Z_hw{Eqpc=ZBK+qDu_C)i)V}{1yRurw z>6uP3!~_?TK?GhN_cIS{^o$MC8vx?su#UApsmG5WADN!6EW*HJ`p3)cDl{Y{BuYz5 zhcnciYk_+myU4;s6ZqZo$3qTpd-oKU+>gnwC_G!3SyFyC=Uw#`=WcHpycDfi657Sd z=fO?w42GUS*uVS@vIQTU2gwX<&FOEMB+K2gwM~zYj}MTC*x2NkmY$K<3-!1%m(sN3 z*6_@lxZgN1YS&&Ud=70CKCEzO_J(iXM!5nelCbfKMvyNKl17}KXapYMUQV}$|4?uX zuiJdSIdgq5=1UiQtKAjUlk;nkAt5uDCVr2s+gxY9fRV21ptlTkSbaHcpqm!g5yN(J zch7Tjb`F%E7#}a~>gwu2w0#pi^=jwsO`^De&<15Ud1L7QaYaXS+rIW2ZJafS@O!pn zSM(Zf>%RmBhj~?1Rk|WWh1$S~rM87Q+%y8Nfs*=fLLor^lK5ZSj*R5*m(_7N1sJbt zS1FdcLLk9s&YZEawJlI{uFo9->*HEuaXf*Nw+}&OiV%@}q^9-k+PuiWSf-*hm7YBl8A0G+v^vrw8(oqfNmZt7~5 zI(uqUvoALcY6H{ZmO#Oov??8UQiSGqLXS{HtSFS86El2X_5tBb>M4`$w}_A5quXJW zJ}O9-)BA2F#G16!&H)@li`~xyxp@&sdc>fV{$Fa94Pd=2}q2LtpW+q0xPMfyWy%qJK zU$DQ*;zz8m(UkC~0t}t~>Wn&y*E}w!R8n1i$HKw_2zm}HEGaQfN=m|c1yG2kS6$c6 zzklA`TpMSQD=^DyL~(J(SJ`5iXk zpr7L$i)5{V+N?1G{Xf~06n}TlEoXNffuOVf!o-4l_E%m|%=j`}+Gx=HX8QbmEW)<* zKOv$qi_odJEwjt!^J5@<-s&okwnj9QBjVz?2ia6A+la10;JI<6?%ylO z8@E4Kt|f9MY#3a~#xi=qxPf&xMZ0+uipbbw4V1v&Z#3tWNVQ>E4;AayySPtKYN{#n z^hZw#<`)m&cKhp%Glb#~o4g4@fjX~U*#YHn7q$XG9xVfP#Ot)h;TLOitcZ~YRCC&4 z{O%Yh@?Jns*K0gxHZ32stal+*D%<tc))aFb; z#Lu~O@!e+SfjVI~Xsq%OZqW}BIWEW5W`%7pTUcb){@{_m+a|eOe=8Lvus+1{%S@NG zBcEL`q^pG!5+AWCGWG(<+C*jchAy$Ickh?p{lyE@QZDNUn|+^EuRhU0g>a2XJ}s8t zdiNa4u`T|&X=xId;Xh() zUbSl&H}f0OB#&BZ)=NrNdtH92SEltY83zaC7k`9k>Es-; zxp??%ymc=pGt9km)#O$H-23oTTQnxGY5)^zHTC%d{8q*ak!Nil4No38y$41z;q*FN ztTaiN_ze7Z1bu-#H2MIJi}&}l3Eh-9v&q)3j8WyYBD04_)T;Ph=yFHiUNebLIqo&71g7vuO&&{WVXMEcod=O*nu2l#ne=H4#C=PmL{ zb$_08jNXA_7wnO!%3kWx+kNi5j$evd^bUzzVUi%ZeFn7NJ(NKJ_>lP3Leu<>mVNKu zo6MC*ZiH}NXkYBcfJU6K-bzhhea? z-URl2Kwsg{qX$az0Tr!A-WawR;_T`nidudx*1piBx%SH@Ezkt&_;vv0RL-+b05j;r zgrdgjWoFdf8Lcon-TE0eA`qII4XSgPw^XweNqRdzomaQ9jIRD}f*h%v7k{em5ajPR zW44K;PdAteO{98y>0u}gsOFY%3iSkunZhf@juDlC>9InR?z9bHg1ka4YF;{-J-ioG z^obE>)BN)jA|{^bQoh=9g2NPKQn+tk5?u@z>y|z3k;9$R2RPv~^M-xB*|x>Q4wr=Z zDaHh`@SCS+JZ{RjfrpHv$!JWd_~MU*vOiAPT>fGeJXx$oo|gBq z{I=d*C;7ef+`ft9x>oj(wrM@ml3ze@+fWfIB#?QrlCsuZcERd<^?h*LomxHO&2-M21e@z7&x~sbU!R40T zy_|l_{=DtXC#8<$3)rbMt`Q;ed+29fBdX0=%Pns|JvFmw4lUVp)W$RpYt?x74LQ7K zl@DzXDB&-_cB8X(YzTgMu*u;c-*n8*wtcWih zPD|+ptF1nhbJSh=)9~~o&iZi?$%Se%n=|9#>kH*(3AH4b#(u=tlcb!znJB1ls`>gd z&)nJS9l?9PxO_A%W}{&8p-Rf7mX?B)weYe~r<-wcR*&$6WBMUAKWQ*|eSmb--eoE1 zaSW`0G&@{kjhc$PWd*^6bFykf{4v|`}B`c_G_U_c&uJ<>yqrC|tK`k?)G+Dd#wD;^ z628jVzRBCBWSwvT%ABB{-^z2{lWu8CpSL^B8YvmrC3$tvKvv%4oSGx&mV+!FD^Wju zl3*B3mf_q{jL{3RPwGQg!+$=-qp3;T!-vpkz&qw>_0_m;eIg8Kw6|-#)Sea!{=iRJ zFFEyZ8~=0Vg0qDN$B|(XspTJB9Q86{A`~LiDV#e+j|pt39k#|lMeF@;XYZpoJ5RPh;Db$;@aaa<#evyun5x*5CMGtxgZuO;5UEWun$rTB5~n>=;Vu256m>CO81 zxI7hrZXVWDdX<+v4Uc0BpP)BC=&!W2J&`x+h`D8WfXe{(o-R@BYpQSlVxBa2%gSlN z$ZGq;(pYMR#cx0td+L&Le;@2m>Fw={l$$A33cvUg0%CEv`_cw(y~c;)o^D!@9fITN1!dgun6uhu`k9u zS|rcwQ#4GHZ_3MC-FX|%TYZFoQ2copy~sl*Q@z3b&djA?ljMCIMx=t+!coU2P7rwShF9Gz`eoi$vG1$x7e?js4s1+#Nva3hJsR|E;47RK_#51$|yNL_?ua zT3Ugbg)sg|p{S@OwTcQaa}lvU8JN;T674W~sd`RgXMe25j`o&#gvPD1th3z^owc{ZXC0r+Du;?dk;OIojndY) zfRSE>FHC%LRo4A!hZW!we`FVQDEfE2@u`c8S<}X=DQ6v`2|= zy)YNPnw9@my!rFv?3h~H%F^#XwQnwYS{M4<@GPj9^|rAq4d^|5eeWLS>o{p6p06RT z?CDv7k?{muGyPuXAXbo4V3C}>RVLAfvH?U82eSuE=Y0Qh;ID(JpjX{ym|#H=#I-ow^W)u-F7?!u$iRkJ2Hk$YwRt!6AG)ie zs4vr*wo1*A;k7g-NMi&!3TafA)~Gi{9&MRBhriFQxL^5RJ?ZfU++`sGNpyFWGxX&!B^yK{KsZU#NpR6IqH zYfN&UpP6kGfmuWZMvz;D=uX-FvO5%Ul2Rr@N9JQuhH&$nh8f6x{}dt{Um1Js$=lH! zwOxVi5J7&I+_M_}21|76=53HGCy;793^dzq%X}Und2VALTaN$!5-vWrG?sdq~l@RUKDu*b2w{JyDGm|b{s*@ z_8u_2D*AP-eJ7!<0}r|@UxjOco$Pwi0)a=?8CHL`_s@v-!GFqlzz_434cYiC;TX9& z74-9DkvOit`5MGI%7zvO0*0;a*rp(iEwJkEW@-l$IjB+tl*aw;N5>zev#|KZMTVW_ zmoW`4x05(Q)>U0al;j$_#>ItD7zRYLv^|wWA8!HL=Ief8PGAwx5&_EHT0so(B4Z_^ zu6{e3y_&^Y*6F^7i~h$`K`RBZt!)(Yukf+ljvupMNR23X64rK#N?STM(~`MNfliw>p~d6|DQBD0tw)HdV3x(40tptT`wfvHi4ip0|YT zA6EQn@v|29?qn;{>-Gcw3;RjK7all>Xx#e8-rDKc!1`oU@5uSAvN0mHUVV|MnV{9u z>{7Rv76aF88=6QIFlI)Cmr@Vm@vf=Z2K2=s}9>`lbEU z*qcLep@%c(ar9ajRHv>)8RBFke-nmi6q)5*>49Qp;7z4`yCGd=g3s9;+HBX$CtQ6D zOo()KtBgM5Rpf^?Jnx*?yki=q6i|8oLBkt+>796?^(S9cqWQc^S$6RPlo_tbH|5OR zPK`^1DVZW0bm?jQ;ECpmru@wb5{+rm(N*L=;cQShQ{dW6ukQ||Qo<)@NzXDPd_}W_ z0ZY#n!5$(SRvFAil^U(PsG%Xij4yt^Ugqr43(X9vGe;7R1%gI{{ULU6b;7%C&(?&KI+D)H#T2HbSY#b#++*$&bq};WsV0Kfi_|*qE?{H3dhB0fZ54DD+h6zN;ECJf2(T2 zqBf%4Wl-S>era zOq8vGt6LTC_Dc(kFwUDBW7`S^iWE9a87l|Moy&6saudj}M2XAR2u$AgL~o?dFSSgZ z0P=~3gGOK?rYMEXziuo>yWVFtD5=S3)W?l7dpN+G69JsvOoH-fI|~rVP9X(Dt}VGNTV=B3KOq~${ndl zm@8JMjAae2Qs|3yarYo1ZCm@nLerE7U-Kcr$0tG785R9!BcJxR%~keyd@%l}5&1J{Is~9MIU| zmEcYmVIra^0g_M_%Z$fw9GmAG(;E-f5^AiWsd9mf#~dz=BpgDaP-nx|q>@dCi1Hxr<#EQeI!KDjI0t2#Co{PB)^-s;rDM{hv1nwDn9T z%2Z?^3@*{vQ!Zn_fNddZMJcj`)Ij0g)yAcR+18;?_}!4vtrqC|hc~=hl}Z&iv#l+k zQzCE=*hcqg26G1c^jq-BQpvr@ZkAI2&8o+|E=ZGztYu}?9 zQvQ$ObD<6OAt^<%}0b0ICs%G)bV1YNQdc1<8 zjm0Aqk=1Pis`^ChkM=-Rc#J}sS7|dyFe7DzH}h&Quvfy5u6Et1p^8w{dGRd6-?D=~ z?yj+}i*RFG)hdE5b<@<4(|>7eYfGrN307CaKS1C->g+b{tb?67z4hUUZnlr9oBojM zb+c8MikF!B*6N}D90LfDZtI=gr@ZfO=uLldxxxMPYg1;=N#L~{1>>=XzM++1Y>lhv zh`;vdPzqys8UTKEC$2sqTHI1!pFIp znC%5s@7RZN?!Lo~mG~=F=&g(&udyccvA^rj5IZj-&oh8vEdO;Ki{NECd=>=sALp^@ zgdz+lhm77B17TiQ|9GeGAKYPr_O5U}hSMJ$y5Z7*Xro650Cw$0vB7T7!cKvqp2ij*b>P2Q_ux*<6yZatJhO zK?GURk2ml3LR^<7I)aV3uV?Fy_x<0#D89VU45En`XGQ%;n*l-vm&=6WhJAZS4G? z1{zDxUDQBZj>FNCK)JUgGiHZa*PIbH0RZH$XMxvVS`^t?*+kxov3=Rn_Is6c7=dyS zJiaqH@W*68I&Fv#;5nx-?$qx_*fXX9 za4|7R?oau<6=Nj^H)40t4v11`Zo$|CV*^6s1iy)8&7}oifd|1$LU)LLxu~NeCWa8- zdCBgNy@u|IGR(Fb{Ivz?OBrS^*OYrZJq-CMAOFW%*tV^of9ntZN8xbuT3vn=$6$!0 zD1RuhG8YK8sBN;Wh41hvc^T2rA^(S%*v-Cc8>n&7LZb8n0kd-klxA}577U^r)CJ!j zC_ECjvMYJzcua5=3t%nK5;cojdO@@O^ibG}C6$8Nd}~_X6XmkF$X_o4E;dfP zt)&Aza*VtT46fIVIc()(>c^A zI$zh!gk;!7XuM=o*b`m(AW-OB@jQ?np>a@{8$;UHJx>W8|ESrOrS6oG&S+CX$UeEO zsq!ih(1Rr(kh}QiiKJAr-e8G!QI0R6ke;&+`YI{J#u%Q6#OmnodP3te{OW3JZ>HrS zk=^CCZf-$}sz(!i>6Na&)FOtjqag%>F>+N?Q&ZvEh?t8U`i&3cR4NrvKAJ$EmRets zZnp%_!xl&HoieTHb{YwPfbo+iB{{+-kg^t?Bi6PyatOsE(wR+5MInQ%T_C(Z9-I|2 zehxg?>EItKx(zXq+ueJ@aiWiVf==vK&`ui}8mlDbnS^u6IAbp+be-ZKf9uwf9`#p> zt}(NaeCQ?xwiay)gyyQ7vMYbK&d&qo+R@w<6AS&Y6K7!_%y9C=iu|`P_@EC#@ZIUy zlTSPD9g&t^_}2c!{RG6trToFg^4{rJ#{Uvo*+^t2veJ>GM;Sj?X6w5}7YCB<4bgT| zJu&f}YE!kaloJNCTH3n0Fegfh!?{9a1nZ8u9i{GaS|Be(J(BM$ADcg&ra*io zo>bqR=rvv|lQwq|l6FAu=BBBUt0nm}*sW^)raX#yM)kaG>&IlzaaGONNLkX5`}4pQ zQ!3UQV{aOgt*AEuPF#N?+L2f{FEIHhxtd)bc$SzzL!@EWIgx|*O+QUi3JEYLeU#AK zPf=9`Y($Q^a?%@PedX;dKA+D)rG2VhHPLL-?Ox0ISyE7Noed*6&)Xc7<|hy6Ohg{- z?DVuV@kWZYeoJznE>A(mwk6gn!>5D=rOfUa6~*%$BO}*(*17Z874>p7`h5D~%#ysC zDTMLl+=gel_R7MNx@{ncBzra1KqcT{is}*O8Fh7C%D`^e>W+JBi({3m-h*i7gydln zoYTYN{q`^)!4eqnjeNXa+XAof{oHq)$ diff --git a/icons/obj/clothing/gloves.dmi b/icons/obj/clothing/gloves.dmi index bbdae032c79d0b46b442d3fce482d10906b332ad..d53f53c0292a70b8f8344c1f36a31ff6b4b5baf6 100644 GIT binary patch literal 16697 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 EKd|&ZE&u=k From 1c50192c12123bc63d7aea4f197a8bc34ab3adc7 Mon Sep 17 00:00:00 2001 From: necromanceranne Date: Mon, 6 Apr 2020 13:42:23 +1000 Subject: [PATCH 18/25] further fixing stuff --- code/modules/clothing/gloves/miscellaneous.dm | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/code/modules/clothing/gloves/miscellaneous.dm b/code/modules/clothing/gloves/miscellaneous.dm index 3a9d842a73..48358f58ae 100644 --- a/code/modules/clothing/gloves/miscellaneous.dm +++ b/code/modules/clothing/gloves/miscellaneous.dm @@ -109,7 +109,7 @@ if(warcry) M.say("[warcry]", ignore_spam = TRUE, forced = TRUE) - .return FALSE + return FALSE /obj/item/clothing/gloves/fingerless/pugilist/rapid/attack_self(mob/user) var/input = stripped_input(user,"What do you want your battlecry to be? Max length of 6 characters.", ,"", 7) @@ -123,15 +123,15 @@ enhancement = 0 secondary_trait = TRAIT_PACIFISM //You are only here to hug and be friends! -/obj/item/clothing/gloves/fingerless/pugilist/rapid/hug/Touch(mob/living/target,proximity = TRUE) - if(!istype(target)) +/obj/item/clothing/gloves/fingerless/pugilist/rapid/hug/Touch(mob/target, proximity = TRUE) + if(!isliving(target)) return var/mob/living/M = loc if(M.a_intent != INTENT_HELP) return FALSE - if(stat != CONSCIOUS) //Can't hug people who are dying/dead + if(target.stat != CONSCIOUS) //Can't hug people who are dying/dead return FALSE else M.changeNext_move(CLICK_CD_RAPID) From ff4847b4410cc90b19f70d46ba56e0bad4092e3d Mon Sep 17 00:00:00 2001 From: necromanceranne Date: Mon, 6 Apr 2020 15:01:59 +1000 Subject: [PATCH 19/25] Adds the damage roll into a proc checked on each of the harm, disarm and grab acts and before a combo is complete, and also checks for whether we are in combat mode, lying down or if the target is in combat mode --- code/datums/martial/_martial.dm | 15 ++++++- code/datums/martial/boxing.dm | 2 +- code/datums/martial/cqc.dm | 3 ++ code/datums/martial/krav_maga.dm | 3 ++ code/datums/martial/mushpunch.dm | 1 + code/datums/martial/plasma_fist.dm | 3 ++ code/datums/martial/psychotic_brawl.dm | 3 ++ code/datums/martial/rising_bass.dm | 3 ++ code/datums/martial/sleeping_carp.dm | 3 ++ code/datums/martial/wrestling.dm | 54 +++++++++++++------------- 10 files changed, 61 insertions(+), 29 deletions(-) diff --git a/code/datums/martial/_martial.dm b/code/datums/martial/_martial.dm index dc8418f01c..d55330653f 100644 --- a/code/datums/martial/_martial.dm +++ b/code/datums/martial/_martial.dm @@ -10,7 +10,7 @@ var/help_verb var/pacifism_check = TRUE //are the martial arts combos/attacks unable to be used by pacifist. var/allow_temp_override = TRUE //if this martial art can be overridden by temporary martial arts - var/damage_base //this is set on teach and is a random value between your species punchdamagelow and punchdamagehigh + var/damage_base //this is set by damage_roll proc and is a random value between your species punchdamagelow and punchdamagehigh. /datum/martial_art/proc/disarm_act(mob/living/carbon/human/A, mob/living/carbon/human/D) return FALSE @@ -36,6 +36,18 @@ current_target = new_target streak = "" +/datum/martial_art/proc/damage_roll(mob/living/carbon/human/A, mob/living/carbon/human/D) + //Here we roll for our damage to be added into the damage_base var. This is changed depending on whether we are in combat mode, lying down, or if our target is in combat mode. + var/damage = rand(A.dna.species.punchdamagelow, A.dna.species.punchdamagehigh) + if(!(D.combat_flags & COMBAT_FLAG_COMBAT_ACTIVE)) + damage *= 1.5 + if(!CHECK_MOBILITY(A, MOBILITY_STAND)) + damage *= 0.5 + if(!(A.combat_flags & COMBAT_FLAG_COMBAT_ACTIVE)) + damage *= 0.25 + damage_base = damage + return + /datum/martial_art/proc/teach(mob/living/carbon/human/H, make_temporary = FALSE) if(!istype(H) || !H.mind) return FALSE @@ -52,7 +64,6 @@ H.verbs += help_verb H.mind.martial_art = src ADD_TRAIT(H, TRAIT_PUGILIST, MARTIAL_ARTIST_TRAIT) - damage_base = rand(H.dna.species.punchdamagelow, H.dna.species.punchdamagehigh) return TRUE /datum/martial_art/proc/store(datum/martial_art/M,mob/living/carbon/human/H) diff --git a/code/datums/martial/boxing.dm b/code/datums/martial/boxing.dm index 5e1c8497d6..002da527c6 100644 --- a/code/datums/martial/boxing.dm +++ b/code/datums/martial/boxing.dm @@ -16,7 +16,7 @@ A.do_attack_animation(D, ATTACK_EFFECT_PUNCH) var/atk_verb = pick("left hook","right hook","straight punch") - + damage_roll(A,D) var/extra_damage = damage_base if(extra_damage == A.dna.species.punchdamagelow) playsound(D.loc, A.dna.species.miss_sound, 25, 1, -1) diff --git a/code/datums/martial/cqc.dm b/code/datums/martial/cqc.dm index 0055482b6c..fb1e85486e 100644 --- a/code/datums/martial/cqc.dm +++ b/code/datums/martial/cqc.dm @@ -113,6 +113,7 @@ /datum/martial_art/cqc/grab_act(mob/living/carbon/human/A, mob/living/carbon/human/D) if(A.a_intent == INTENT_GRAB && A!=D && can_use(A)) // A!=D prevents grabbing yourself add_to_streak("G",D) + damage_roll(A,D) if(check_streak(A,D)) //if a combo is made no grab upgrade is done return TRUE old_grab_state = A.grab_state @@ -130,6 +131,7 @@ if(!can_use(A)) return FALSE add_to_streak("H",D) + damage_roll(A,D) if(check_streak(A,D)) return TRUE log_combat(A, D, "attacked (CQC)") @@ -160,6 +162,7 @@ if(!can_use(A)) return FALSE add_to_streak("D",D) + damage_roll(A,D) var/obj/item/I = null if(check_streak(A,D)) return TRUE diff --git a/code/datums/martial/krav_maga.dm b/code/datums/martial/krav_maga.dm index bcc561a15b..314a7a93a5 100644 --- a/code/datums/martial/krav_maga.dm +++ b/code/datums/martial/krav_maga.dm @@ -132,6 +132,7 @@ if(check_streak(A,D)) return TRUE log_combat(A, D, "grabbed (Krav Maga)") + damage_roll(A,D) ..() /datum/martial_art/krav_maga/harm_act(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D) @@ -140,6 +141,7 @@ if(check_streak(A,D)) return TRUE log_combat(A, D, "punched") + damage_roll(A,D) var/picked_hit_type = pick("punches", "kicks") var/bonus_damage = 0 if(CHECK_MOBILITY(D, MOBILITY_STAND)) @@ -162,6 +164,7 @@ return TRUE var/obj/item/bodypart/affecting = D.get_bodypart(ran_zone(A.zone_selected)) var/armor_block = D.run_armor_check(affecting, "melee") + damage_roll(A,D) if(D.mobility_flags & MOBILITY_STAND) D.visible_message("[A] reprimands [D]!", \ "You're slapped by [A]!", "You hear a sickening sound of flesh hitting flesh!", COMBAT_MESSAGE_RANGE, A) diff --git a/code/datums/martial/mushpunch.dm b/code/datums/martial/mushpunch.dm index 19041a0665..67f3b45767 100644 --- a/code/datums/martial/mushpunch.dm +++ b/code/datums/martial/mushpunch.dm @@ -7,6 +7,7 @@ to_chat(A, "You begin to wind up an attack...") if(!do_after(A, 25, target = D)) to_chat(A, "Your attack was interrupted!") + damage_roll(A,D) return TRUE //martial art code was a mistake A.do_attack_animation(D, ATTACK_EFFECT_PUNCH) atk_verb = pick("punches", "smashes", "ruptures", "cracks") diff --git a/code/datums/martial/plasma_fist.dm b/code/datums/martial/plasma_fist.dm index 71fb00c467..cb17e4cd4b 100644 --- a/code/datums/martial/plasma_fist.dm +++ b/code/datums/martial/plasma_fist.dm @@ -65,18 +65,21 @@ /datum/martial_art/plasma_fist/harm_act(mob/living/carbon/human/A, mob/living/carbon/human/D) add_to_streak("H",D) + damage_roll(A,D) if(check_streak(A,D)) return TRUE return FALSE /datum/martial_art/plasma_fist/disarm_act(mob/living/carbon/human/A, mob/living/carbon/human/D) add_to_streak("D",D) + damage_roll(A,D) if(check_streak(A,D)) return TRUE return FALSE /datum/martial_art/plasma_fist/grab_act(mob/living/carbon/human/A, mob/living/carbon/human/D) add_to_streak("G",D) + damage_roll(A,D) if(check_streak(A,D)) return TRUE return FALSE diff --git a/code/datums/martial/psychotic_brawl.dm b/code/datums/martial/psychotic_brawl.dm index f96fb34397..d8cde9b33d 100644 --- a/code/datums/martial/psychotic_brawl.dm +++ b/code/datums/martial/psychotic_brawl.dm @@ -4,12 +4,15 @@ pacifism_check = FALSE //Quite uncontrollable and unpredictable, people will still end up harming others with it. /datum/martial_art/psychotic_brawling/disarm_act(mob/living/carbon/human/A, mob/living/carbon/human/D) + damage_roll(A,D) return psycho_attack(A,D) /datum/martial_art/psychotic_brawling/grab_act(mob/living/carbon/human/A, mob/living/carbon/human/D) + damage_roll(A,D) return psycho_attack(A,D) /datum/martial_art/psychotic_brawling/harm_act(mob/living/carbon/human/A, mob/living/carbon/human/D) + damage_roll(A,D) return psycho_attack(A,D) /datum/martial_art/psychotic_brawling/proc/psycho_attack(mob/living/carbon/human/A, mob/living/carbon/human/D) diff --git a/code/datums/martial/rising_bass.dm b/code/datums/martial/rising_bass.dm index 6ba5d2c9a3..e219fb8e03 100644 --- a/code/datums/martial/rising_bass.dm +++ b/code/datums/martial/rising_bass.dm @@ -156,18 +156,21 @@ /datum/martial_art/the_rising_bass/disarm_act(mob/living/carbon/human/A, mob/living/carbon/human/D) add_to_streak("D",D) + damage_roll(A,D) if(check_streak(A,D)) return TRUE return ..() /datum/martial_art/the_rising_bass/harm_act(mob/living/carbon/human/A, mob/living/carbon/human/D) add_to_streak("H",D) + damage_roll(A,D) if(check_streak(A,D)) return TRUE return ..() /datum/martial_art/the_rising_bass/grab_act(mob/living/carbon/human/A, mob/living/carbon/human/D) add_to_streak("G",D) + damage_roll(A,D) if(check_streak(A,D)) return TRUE return ..() diff --git a/code/datums/martial/sleeping_carp.dm b/code/datums/martial/sleeping_carp.dm index 4646ac9ee9..691b2655d1 100644 --- a/code/datums/martial/sleeping_carp.dm +++ b/code/datums/martial/sleeping_carp.dm @@ -78,6 +78,7 @@ /datum/martial_art/the_sleeping_carp/grab_act(mob/living/carbon/human/A, mob/living/carbon/human/D) add_to_streak("G",D) + damage_roll(A,D) if(check_streak(A,D)) return TRUE log_combat(A, D, "grabbed (Sleeping Carp)") @@ -85,6 +86,7 @@ /datum/martial_art/the_sleeping_carp/harm_act(mob/living/carbon/human/A, mob/living/carbon/human/D) add_to_streak("H",D) + damage_roll(A,D) if(check_streak(A,D)) return TRUE var/obj/item/bodypart/affecting = D.get_bodypart(ran_zone(A.zone_selected)) @@ -101,6 +103,7 @@ /datum/martial_art/the_sleeping_carp/disarm_act(mob/living/carbon/human/A, mob/living/carbon/human/D) add_to_streak("D",D) + damage_roll(A,D) if(check_streak(A,D)) return TRUE log_combat(A, D, "disarmed (Sleeping Carp)") diff --git a/code/datums/martial/wrestling.dm b/code/datums/martial/wrestling.dm index 349efdd342..1d565f447e 100644 --- a/code/datums/martial/wrestling.dm +++ b/code/datums/martial/wrestling.dm @@ -19,29 +19,29 @@ /datum/martial_art/wrestling/proc/check_streak(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D) if(!can_use(A, D)) - return 0 + return FALSE switch(streak) if("drop") streak = "" drop(A,D) - return 1 + return TRUE if("strike") streak = "" strike(A,D) - return 1 + return TRUE if("kick") streak = "" kick(A,D) - return 1 + return TRUE if("throw") streak = "" throw_wrassle(A,D) - return 1 + return TRUE if("slam") streak = "" slam(A,D) - return 1 - return 0 + return TRUE + return FALSE /datum/action/slam name = "Slam (Cinch) - Slam a grappled opponent into the floor." @@ -138,7 +138,7 @@ /datum/martial_art/wrestling/harm_act(mob/living/carbon/human/A, mob/living/carbon/human/D) if(check_streak(A,D)) - return 1 + return TRUE log_combat(A, D, "punched with wrestling") ..() @@ -173,11 +173,11 @@ if (get_dist(A, D) > 1) to_chat(A, "[D] is too far away!") - return 0 + return FALSE if (!isturf(A.loc) || !isturf(D.loc)) to_chat(A, "You can't throw [D] from here!") - return 0 + return FALSE A.setDir(turn(A.dir, 90)) var/turf/T = get_step(A, A.dir) @@ -186,7 +186,7 @@ D.forceMove(T) D.setDir(get_dir(D, A)) else - return 0 + return FALSE sleep(delay) @@ -195,11 +195,11 @@ if (get_dist(A, D) > 1) to_chat(A, "[D] is too far away!") - return 0 + return FALSE if (!isturf(A.loc) || !isturf(D.loc)) to_chat(A, "You can't throw [D] from here!") - return 0 + return FALSE D.forceMove(A.loc) // Maybe this will help with the wallthrowing bug. @@ -211,7 +211,7 @@ D.emote("scream") D.throw_at(T, 10, 4, A, TRUE, TRUE, callback = CALLBACK(D, /mob/living/carbon/human.proc/DefaultCombatKnockdown, 20)) log_combat(A, D, "has thrown with wrestling") - return 0 + return FALSE /datum/martial_art/wrestling/proc/FlipAnimation(mob/living/carbon/human/D) set waitfor = FALSE @@ -258,7 +258,7 @@ A.pixel_y = 0 D.pixel_x = 0 D.pixel_y = 0 - return 0 + return FALSE if (!isturf(A.loc) || !isturf(D.loc)) to_chat(A, "You can't slam [D] here!") @@ -266,7 +266,7 @@ A.pixel_y = 0 D.pixel_x = 0 D.pixel_y = 0 - return 0 + return FALSE else if (A) A.pixel_x = 0 @@ -274,7 +274,7 @@ if (D) D.pixel_x = 0 D.pixel_y = 0 - return 0 + return FALSE sleep(1) @@ -286,11 +286,11 @@ if (get_dist(A, D) > 1) to_chat(A, "[D] is too far away!") - return 0 + return FALSE if (!isturf(A.loc) || !isturf(D.loc)) to_chat(A, "You can't slam [D] here!") - return 0 + return FALSE D.forceMove(A.loc) @@ -327,7 +327,7 @@ log_combat(A, D, "body-slammed") - return 0 + return FALSE /datum/martial_art/wrestling/proc/CheckStrikeTurf(mob/living/carbon/human/A, turf/T) if (A && (T && isturf(T) && get_dist(A, T) <= 1)) @@ -404,12 +404,12 @@ A.adjustBruteLoss(rand(10,20)) A.DefaultCombatKnockdown(60) to_chat(A, "[D] is too far away!") - return 0 + return FALSE if (!isturf(A.loc) || !isturf(D.loc)) A.pixel_y = 0 to_chat(A, "You can't drop onto [D] from here!") - return 0 + return FALSE if(A) animate(A, transform = matrix(90, MATRIX_ROTATE), time = 1, loop = 0) @@ -442,14 +442,16 @@ return /datum/martial_art/wrestling/disarm_act(mob/living/carbon/human/A, mob/living/carbon/human/D) + damage_roll(A,D) if(check_streak(A,D)) - return 1 + return TRUE log_combat(A, D, "wrestling-disarmed") ..() /datum/martial_art/wrestling/grab_act(mob/living/carbon/human/A, mob/living/carbon/human/D) + damage_roll(A,D) if(check_streak(A,D)) - return 1 + return TRUE if(!can_use(A,D)) return ..() if(A.pulling == D || A == D) // don't stun grab yoursel @@ -459,7 +461,7 @@ "[A] gets [D] in a cinch!") D.Stun(rand(60,100)) log_combat(A, D, "cinched") - return 1 + return TRUE /obj/item/storage/belt/champion/wrestling name = "Wrestling Belt" @@ -492,7 +494,7 @@ //Make sure that moves can only be used on people wearing the holodeck belt /datum/martial_art/wrestling/holodeck/can_use(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D) if(!(istype(D.mind?.martial_art, /datum/martial_art/wrestling/holodeck))) - return 0 + return FALSE else return ..() From 60c8aab5208f99fc8c4434418c84072026bc915a Mon Sep 17 00:00:00 2001 From: necromanceranne Date: Mon, 6 Apr 2020 16:51:26 +1000 Subject: [PATCH 20/25] the damage_roll proc needs to always be before check_streak --- code/datums/martial/krav_maga.dm | 6 +++--- code/datums/martial/wrestling.dm | 14 +++++++------- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/code/datums/martial/krav_maga.dm b/code/datums/martial/krav_maga.dm index 314a7a93a5..53b277d099 100644 --- a/code/datums/martial/krav_maga.dm +++ b/code/datums/martial/krav_maga.dm @@ -129,19 +129,19 @@ return TRUE /datum/martial_art/krav_maga/grab_act(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D) + damage_roll(A,D) if(check_streak(A,D)) return TRUE log_combat(A, D, "grabbed (Krav Maga)") - damage_roll(A,D) ..() /datum/martial_art/krav_maga/harm_act(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D) var/obj/item/bodypart/affecting = D.get_bodypart(ran_zone(A.zone_selected)) var/armor_block = D.run_armor_check(affecting, "melee") + damage_roll(A,D) if(check_streak(A,D)) return TRUE log_combat(A, D, "punched") - damage_roll(A,D) var/picked_hit_type = pick("punches", "kicks") var/bonus_damage = 0 if(CHECK_MOBILITY(D, MOBILITY_STAND)) @@ -160,11 +160,11 @@ return TRUE /datum/martial_art/krav_maga/disarm_act(mob/living/carbon/human/A, mob/living/carbon/human/D) + damage_roll(A,D) if(check_streak(A,D)) return TRUE var/obj/item/bodypart/affecting = D.get_bodypart(ran_zone(A.zone_selected)) var/armor_block = D.run_armor_check(affecting, "melee") - damage_roll(A,D) if(D.mobility_flags & MOBILITY_STAND) D.visible_message("[A] reprimands [D]!", \ "You're slapped by [A]!", "You hear a sickening sound of flesh hitting flesh!", COMBAT_MESSAGE_RANGE, A) diff --git a/code/datums/martial/wrestling.dm b/code/datums/martial/wrestling.dm index 1d565f447e..f616bc3a0d 100644 --- a/code/datums/martial/wrestling.dm +++ b/code/datums/martial/wrestling.dm @@ -309,11 +309,11 @@ switch(rand(1,3)) if (2) - D.adjustBruteLoss(rand(20,30)) + D.apply_damage(damage_base + 25, BRUTE) if (3) D.ex_act(EXPLODE_LIGHT) else - D.adjustBruteLoss(rand(10,20)) + D.apply_damage(damage_base + 15, BRUTE) else D.ex_act(EXPLODE_LIGHT) @@ -345,7 +345,7 @@ addtimer(CALLBACK(src, .proc/CheckStrikeTurf, A, T), 4) A.visible_message("[A] headbutts [D]!") - D.adjustBruteLoss(rand(10,20)) + D.apply_damage(damage_base + 15, BRUTE) playsound(A.loc, "swing_hit", 50, 1) D.Unconscious(20) log_combat(A, D, "headbutted") @@ -359,7 +359,7 @@ A.visible_message("[A] roundhouse-kicks [D]!") playsound(A.loc, "swing_hit", 50, 1) - D.adjustBruteLoss(rand(10,20)) + D.apply_damage(damage_base + 15, STAMINA) var/turf/T = get_edge_target_turf(A, get_dir(A, get_step_away(D, A))) if (T && isturf(T)) @@ -401,7 +401,7 @@ A.pixel_y = 0 if (falling == 1) A.visible_message("...and dives head-first into the ground, ouch!") - A.adjustBruteLoss(rand(10,20)) + A.apply_damage(damage_base + 15, BRUTE) A.DefaultCombatKnockdown(60) to_chat(A, "[D] is too far away!") return FALSE @@ -427,9 +427,9 @@ if (prob(33) || D.stat) D.ex_act(EXPLODE_LIGHT) else - D.adjustBruteLoss(rand(20,30)) + D.apply_damage(damage_base + 25, BRUTE) else - D.adjustBruteLoss(rand(20,30)) + D.apply_damage(damage_base + 25, BRUTE) D.DefaultCombatKnockdown(40) From b494aa337062e2f9490da6b7038c64c0e8ffa2dc Mon Sep 17 00:00:00 2001 From: necromanceranne Date: Tue, 7 Apr 2020 17:51:25 +1000 Subject: [PATCH 21/25] Fixed up how the proc is used, made northstar gloves give you no_softcrit instead of no_hardcrit, you altclick to change the warcry since they're no_drop now --- code/datums/martial/_martial.dm | 6 +-- code/datums/martial/boxing.dm | 2 +- code/datums/martial/cqc.dm | 43 +++++++++++-------- code/datums/martial/krav_maga.dm | 21 ++++----- code/datums/martial/mushpunch.dm | 4 +- code/datums/martial/plasma_fist.dm | 5 +-- code/datums/martial/psychotic_brawl.dm | 12 +++--- code/datums/martial/rising_bass.dm | 17 ++++---- code/datums/martial/sleeping_carp.dm | 25 +++++------ code/datums/martial/wrestling.dm | 20 +++++---- code/modules/clothing/gloves/miscellaneous.dm | 6 +-- 11 files changed, 84 insertions(+), 77 deletions(-) diff --git a/code/datums/martial/_martial.dm b/code/datums/martial/_martial.dm index d55330653f..d8a888871e 100644 --- a/code/datums/martial/_martial.dm +++ b/code/datums/martial/_martial.dm @@ -10,7 +10,6 @@ var/help_verb var/pacifism_check = TRUE //are the martial arts combos/attacks unable to be used by pacifist. var/allow_temp_override = TRUE //if this martial art can be overridden by temporary martial arts - var/damage_base //this is set by damage_roll proc and is a random value between your species punchdamagelow and punchdamagehigh. /datum/martial_art/proc/disarm_act(mob/living/carbon/human/A, mob/living/carbon/human/D) return FALSE @@ -37,7 +36,7 @@ streak = "" /datum/martial_art/proc/damage_roll(mob/living/carbon/human/A, mob/living/carbon/human/D) - //Here we roll for our damage to be added into the damage_base var. This is changed depending on whether we are in combat mode, lying down, or if our target is in combat mode. + //Here we roll for our damage to be added into the damage var in the various attack procs. This is changed depending on whether we are in combat mode, lying down, or if our target is in combat mode. var/damage = rand(A.dna.species.punchdamagelow, A.dna.species.punchdamagehigh) if(!(D.combat_flags & COMBAT_FLAG_COMBAT_ACTIVE)) damage *= 1.5 @@ -45,8 +44,7 @@ damage *= 0.5 if(!(A.combat_flags & COMBAT_FLAG_COMBAT_ACTIVE)) damage *= 0.25 - damage_base = damage - return + return damage /datum/martial_art/proc/teach(mob/living/carbon/human/H, make_temporary = FALSE) if(!istype(H) || !H.mind) diff --git a/code/datums/martial/boxing.dm b/code/datums/martial/boxing.dm index 002da527c6..df7e92b1bf 100644 --- a/code/datums/martial/boxing.dm +++ b/code/datums/martial/boxing.dm @@ -17,7 +17,7 @@ var/atk_verb = pick("left hook","right hook","straight punch") damage_roll(A,D) - var/extra_damage = damage_base + var/extra_damage = damage_roll(A,D) if(extra_damage == A.dna.species.punchdamagelow) playsound(D.loc, A.dna.species.miss_sound, 25, 1, -1) D.visible_message("[A] has attempted to [atk_verb] [D]!", \ diff --git a/code/datums/martial/cqc.dm b/code/datums/martial/cqc.dm index fb1e85486e..39fac11129 100644 --- a/code/datums/martial/cqc.dm +++ b/code/datums/martial/cqc.dm @@ -42,11 +42,12 @@ /datum/martial_art/cqc/proc/Slam(mob/living/carbon/human/A, mob/living/carbon/human/D) if(!can_use(A)) return FALSE + var/damage = (damage_roll(A,D) + 5) if(CHECK_MOBILITY(D, MOBILITY_STAND)) D.visible_message("[A] slams [D] into the ground!", \ "[A] slams you into the ground!") playsound(get_turf(A), 'sound/weapons/slam.ogg', 50, 1, -1) - D.apply_damage(damage_base + 5, BRUTE) + D.apply_damage(damage, BRUTE) D.DefaultCombatKnockdown(120) log_combat(A, D, "slammed (CQC)") return TRUE @@ -54,29 +55,33 @@ /datum/martial_art/cqc/proc/Kick(mob/living/carbon/human/A, mob/living/carbon/human/D) if(!can_use(A)) return FALSE - if(CHECK_MOBILITY(D, MOBILITY_STAND)) - D.visible_message("[A] kicks [D] back!", \ - "[A] kicks you back!") - playsound(get_turf(A), 'sound/weapons/cqchit1.ogg', 50, 1, -1) - var/atom/throw_target = get_edge_target_turf(D, A.dir) - D.throw_at(throw_target, 1, 14, A) - D.apply_damage(damage_base + 5, BRUTE) - log_combat(A, D, "kicked (CQC)") + var/damage = damage_roll(A,D) if(!CHECK_MOBILITY(D, MOBILITY_STAND) && CHECK_MOBILITY(D, MOBILITY_USE)) log_combat(A, D, "knocked out (Head kick)(CQC)") D.visible_message("[A] kicks [D]'s head, knocking [D.p_them()] out!", \ "[A] kicks your head, knocking you out!") playsound(get_turf(A), 'sound/weapons/genhit1.ogg', 50, 1, -1) D.SetSleeping(300) - D.adjustOrganLoss(ORGAN_SLOT_BRAIN, damage_base + 10, 150) + D.apply_damage(damage + 5, BRUTE) + var/atom/throw_target = get_edge_target_turf(D, A.dir) + D.throw_at(throw_target, 1, 14, A) + D.adjustOrganLoss(ORGAN_SLOT_BRAIN, damage + 10, 150) + else + D.visible_message("[A] kicks [D]!", \ + "[A] kicks you!") + playsound(get_turf(A), 'sound/weapons/cqchit1.ogg', 50, 1, -1) + D.Dizzy(damage) + D.apply_damage(damage + 15, BRUTE) + log_combat(A, D, "kicked (CQC)") return TRUE /datum/martial_art/cqc/proc/Pressure(mob/living/carbon/human/A, mob/living/carbon/human/D) if(!can_use(A)) return FALSE + var/damage = (damage_roll(A,D) + 55) log_combat(A, D, "pressured (CQC)") D.visible_message("[A] punches [D]'s neck!") - D.apply_damage(damage_base + 55, STAMINA) + D.apply_damage(damage, STAMINA) playsound(get_turf(A), 'sound/weapons/cqchit1.ogg', 50, 1, -1) return TRUE @@ -85,11 +90,12 @@ return if(!can_use(A)) return FALSE + var/damage = (damage_roll(A,D) + 15) if(!D.stat) log_combat(A, D, "restrained (CQC)") D.visible_message("[A] locks [D] into a restraining position!", \ "[A] locks you into a restraining position!") - D.apply_damage(damage_base + 15, STAMINA) + D.apply_damage(damage, STAMINA) D.Stun(100) restraining = TRUE addtimer(VARSET_CALLBACK(src, restraining, FALSE), 50, TIMER_UNIQUE) @@ -98,6 +104,7 @@ /datum/martial_art/cqc/proc/Consecutive(mob/living/carbon/human/A, mob/living/carbon/human/D) if(!can_use(A)) return FALSE + var/damage = damage_roll(A,D) if(!D.stat) log_combat(A, D, "consecutive CQC'd (CQC)") D.visible_message("[A] strikes [D]'s abdomen, neck and back consecutively", \ @@ -106,14 +113,13 @@ var/obj/item/I = D.get_active_held_item() if(I && D.temporarilyRemoveItemFromInventory(I)) A.put_in_hands(I) - D.apply_damage(damage_base + 45, STAMINA) - D.apply_damage(damage_base + 20, BRUTE) + D.apply_damage(damage + 45, STAMINA) + D.apply_damage(damage + 20, BRUTE) return TRUE /datum/martial_art/cqc/grab_act(mob/living/carbon/human/A, mob/living/carbon/human/D) if(A.a_intent == INTENT_GRAB && A!=D && can_use(A)) // A!=D prevents grabbing yourself add_to_streak("G",D) - damage_roll(A,D) if(check_streak(A,D)) //if a combo is made no grab upgrade is done return TRUE old_grab_state = A.grab_state @@ -131,13 +137,12 @@ if(!can_use(A)) return FALSE add_to_streak("H",D) - damage_roll(A,D) if(check_streak(A,D)) return TRUE log_combat(A, D, "attacked (CQC)") A.do_attack_animation(D) var/picked_hit_type = pick("CQC'd", "Big Bossed") - var/bonus_damage = (damage_base + 7) + var/bonus_damage = (damage_roll(A,D) + 7) if(!CHECK_MOBILITY(D, MOBILITY_STAND)) bonus_damage += 5 picked_hit_type = "stomps on" @@ -162,8 +167,8 @@ if(!can_use(A)) return FALSE add_to_streak("D",D) - damage_roll(A,D) var/obj/item/I = null + var/damage = (damage_roll(A,D)*0.5) if(check_streak(A,D)) return TRUE if(prob(65)) @@ -175,7 +180,7 @@ if(I && D.temporarilyRemoveItemFromInventory(I)) A.put_in_hands(I) D.Jitter(2) - D.apply_damage(damage_base*0.5, BRUTE) + D.apply_damage(damage, BRUTE) else D.visible_message("[A] attempted to disarm [D]!", \ "[A] attempted to disarm [D]!") diff --git a/code/datums/martial/krav_maga.dm b/code/datums/martial/krav_maga.dm index 53b277d099..8ea1c2efca 100644 --- a/code/datums/martial/krav_maga.dm +++ b/code/datums/martial/krav_maga.dm @@ -98,38 +98,40 @@ /datum/martial_art/krav_maga/proc/leg_sweep(mob/living/carbon/human/A, mob/living/carbon/human/D) var/obj/item/bodypart/affecting = D.get_bodypart(BODY_ZONE_CHEST) var/armor_block = D.run_armor_check(affecting, "melee") + var/damage = damage_roll(A,D) if(!CHECK_MOBILITY(D, MOBILITY_STAND)) return FALSE D.visible_message("[A] leg sweeps [D]!", \ "[A] leg sweeps you!") playsound(get_turf(A), 'sound/effects/hit_kick.ogg', 50, 1, -1) - D.apply_damage(damage_base + 25, STAMINA, affecting, armor_block) + D.apply_damage(damage + 25, STAMINA, affecting, armor_block) D.DefaultCombatKnockdown(80, override_hardstun = 1, override_stamdmg = 0) log_combat(A, D, "leg sweeped") return TRUE /datum/martial_art/krav_maga/proc/quick_choke(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D)//is actually lung punch + var/damage = damage_roll(A,D) D.visible_message("[A] pounds [D] on the chest!", \ "[A] slams your chest! You can't breathe!") playsound(get_turf(A), 'sound/effects/hit_punch.ogg', 50, 1, -1) if(D.losebreath <= 10) D.losebreath = CLAMP(D.losebreath + 5, 0, 10) - D.adjustOxyLoss(damage_base + 5) + D.adjustOxyLoss(damage + 5) log_combat(A, D, "quickchoked") return TRUE /datum/martial_art/krav_maga/proc/neck_chop(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D) + var/damage = (damage_roll(A,D)*0.5) D.visible_message("[A] karate chops [D]'s neck!", \ "[A] karate chops your neck, rendering you unable to speak!") playsound(get_turf(A), 'sound/effects/hit_punch.ogg', 50, 1, -1) - D.apply_damage(damage_base*0.5, BRUTE) + D.apply_damage(damage, BRUTE) if(D.silent <= 10) D.silent = CLAMP(D.silent + 10, 0, 10) log_combat(A, D, "neck chopped") return TRUE /datum/martial_art/krav_maga/grab_act(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D) - damage_roll(A,D) if(check_streak(A,D)) return TRUE log_combat(A, D, "grabbed (Krav Maga)") @@ -138,16 +140,15 @@ /datum/martial_art/krav_maga/harm_act(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D) var/obj/item/bodypart/affecting = D.get_bodypart(ran_zone(A.zone_selected)) var/armor_block = D.run_armor_check(affecting, "melee") - damage_roll(A,D) if(check_streak(A,D)) return TRUE log_combat(A, D, "punched") var/picked_hit_type = pick("punches", "kicks") - var/bonus_damage = 0 + var/bonus_damage = damage_roll(A,D) if(CHECK_MOBILITY(D, MOBILITY_STAND)) bonus_damage += 10 picked_hit_type = "stomps on" - D.apply_damage(damage_base + bonus_damage, BRUTE, affecting, armor_block) + D.apply_damage(bonus_damage, BRUTE, affecting, armor_block) if(picked_hit_type == "kicks" || picked_hit_type == "stomps on") A.do_attack_animation(D, ATTACK_EFFECT_KICK) playsound(get_turf(D), 'sound/effects/hit_kick.ogg', 50, 1, -1) @@ -160,18 +161,18 @@ return TRUE /datum/martial_art/krav_maga/disarm_act(mob/living/carbon/human/A, mob/living/carbon/human/D) - damage_roll(A,D) if(check_streak(A,D)) return TRUE var/obj/item/bodypart/affecting = D.get_bodypart(ran_zone(A.zone_selected)) var/armor_block = D.run_armor_check(affecting, "melee") + var/damage = damage_roll(A,D) if(D.mobility_flags & MOBILITY_STAND) D.visible_message("[A] reprimands [D]!", \ "You're slapped by [A]!", "You hear a sickening sound of flesh hitting flesh!", COMBAT_MESSAGE_RANGE, A) to_chat(A, "You jab [D]!") A.do_attack_animation(D, ATTACK_EFFECT_PUNCH) playsound(D, 'sound/effects/hit_punch.ogg', 50, TRUE, -1) - D.apply_damage(damage_base + 5, STAMINA, affecting, armor_block) + D.apply_damage(damage + 5, STAMINA, affecting, armor_block) log_combat(A, D, "punched nonlethally") else D.visible_message("[A] reprimands [D]!", \ @@ -179,7 +180,7 @@ to_chat(A, "You stomp [D]!") A.do_attack_animation(D, ATTACK_EFFECT_KICK) playsound(D, 'sound/effects/hit_punch.ogg', 50, TRUE, -1) - D.apply_damage(damage_base + 10, STAMINA, affecting, armor_block) + D.apply_damage(damage + 10, STAMINA, affecting, armor_block) log_combat(A, D, "stomped nonlethally") if(prob(D.getStaminaLoss())) D.visible_message("[D] sputters and recoils in pain!", "You recoil in pain as you are jabbed in a nerve!") diff --git a/code/datums/martial/mushpunch.dm b/code/datums/martial/mushpunch.dm index 67f3b45767..3fd0a637c2 100644 --- a/code/datums/martial/mushpunch.dm +++ b/code/datums/martial/mushpunch.dm @@ -4,16 +4,16 @@ /datum/martial_art/mushpunch/harm_act(mob/living/carbon/human/A, mob/living/carbon/human/D) var/atk_verb + var/damage = (damage_roll(A,D)*3) to_chat(A, "You begin to wind up an attack...") if(!do_after(A, 25, target = D)) to_chat(A, "Your attack was interrupted!") - damage_roll(A,D) return TRUE //martial art code was a mistake A.do_attack_animation(D, ATTACK_EFFECT_PUNCH) atk_verb = pick("punches", "smashes", "ruptures", "cracks") D.visible_message("[A] [atk_verb] [D] with inhuman strength, sending [D.p_them()] flying backwards!", \ "[A] [atk_verb] you with inhuman strength, sending you flying backwards!") - D.apply_damage(damage_base*3, BRUTE) //KAPOW + D.apply_damage(damage, BRUTE) //KAPOW playsound(D, 'sound/effects/meteorimpact.ogg', 25, 1, -1) var/throwtarget = get_edge_target_turf(A, get_dir(A, get_step_away(D, A))) D.throw_at(throwtarget, 4, 2, A)//So stuff gets tossed around at the same time. diff --git a/code/datums/martial/plasma_fist.dm b/code/datums/martial/plasma_fist.dm index cb17e4cd4b..c751d3b146 100644 --- a/code/datums/martial/plasma_fist.dm +++ b/code/datums/martial/plasma_fist.dm @@ -44,11 +44,13 @@ return /datum/martial_art/plasma_fist/proc/Throwback(mob/living/carbon/human/A, mob/living/carbon/human/D) + var/damage = (damage_roll(A,D)*3) D.visible_message("[A] has hit [D] with Plasma Punch!", \ "[A] has hit [D] with Plasma Punch!") playsound(D.loc, 'sound/weapons/punch1.ogg', 50, 1, -1) var/atom/throw_target = get_edge_target_turf(D, get_dir(D, get_step_away(D, A))) D.throw_at(throw_target, 200, 4,A) + D.apply_damage(damage, BRUTE) A.say("HYAH!", forced="plasma fist") log_combat(A, D, "threw back (Plasma Fist)") return @@ -65,21 +67,18 @@ /datum/martial_art/plasma_fist/harm_act(mob/living/carbon/human/A, mob/living/carbon/human/D) add_to_streak("H",D) - damage_roll(A,D) if(check_streak(A,D)) return TRUE return FALSE /datum/martial_art/plasma_fist/disarm_act(mob/living/carbon/human/A, mob/living/carbon/human/D) add_to_streak("D",D) - damage_roll(A,D) if(check_streak(A,D)) return TRUE return FALSE /datum/martial_art/plasma_fist/grab_act(mob/living/carbon/human/A, mob/living/carbon/human/D) add_to_streak("G",D) - damage_roll(A,D) if(check_streak(A,D)) return TRUE return FALSE diff --git a/code/datums/martial/psychotic_brawl.dm b/code/datums/martial/psychotic_brawl.dm index d8cde9b33d..06d07260ed 100644 --- a/code/datums/martial/psychotic_brawl.dm +++ b/code/datums/martial/psychotic_brawl.dm @@ -4,19 +4,17 @@ pacifism_check = FALSE //Quite uncontrollable and unpredictable, people will still end up harming others with it. /datum/martial_art/psychotic_brawling/disarm_act(mob/living/carbon/human/A, mob/living/carbon/human/D) - damage_roll(A,D) return psycho_attack(A,D) /datum/martial_art/psychotic_brawling/grab_act(mob/living/carbon/human/A, mob/living/carbon/human/D) - damage_roll(A,D) return psycho_attack(A,D) /datum/martial_art/psychotic_brawling/harm_act(mob/living/carbon/human/A, mob/living/carbon/human/D) - damage_roll(A,D) return psycho_attack(A,D) /datum/martial_art/psychotic_brawling/proc/psycho_attack(mob/living/carbon/human/A, mob/living/carbon/human/D) var/atk_verb + var/damage = damage_roll(A,D) switch(rand(1,8)) if(1) D.help_shake_act(A) @@ -47,10 +45,10 @@ D.visible_message("[A] [atk_verb] [D]!", \ "[A] [atk_verb] you!") playsound(get_turf(D), 'sound/weapons/punch1.ogg', 40, 1, -1) - D.apply_damage(damage_base*1.5, BRUTE, BODY_ZONE_HEAD) - A.apply_damage(damage_base, BRUTE, BODY_ZONE_HEAD) + D.apply_damage(damage*1.5, BRUTE, BODY_ZONE_HEAD) + A.apply_damage(damage, BRUTE, BODY_ZONE_HEAD) if(!istype(D.head,/obj/item/clothing/head/helmet/) && !istype(D.head,/obj/item/clothing/head/hardhat)) - D.adjustOrganLoss(ORGAN_SLOT_BRAIN, damage_base) + D.adjustOrganLoss(ORGAN_SLOT_BRAIN, damage) A.Stun(rand(10,45)) D.DefaultCombatKnockdown(rand(5,30))//CIT CHANGE - makes stuns from martial arts always use Knockdown instead of Stun for the sake of consistency if(5,6) @@ -58,7 +56,7 @@ atk_verb = pick("punches", "kicks", "hits", "slams into") D.visible_message("[A] [atk_verb] [D] with inhuman strength, sending [D.p_them()] flying backwards!", \ "[A] [atk_verb] you with inhuman strength, sending you flying backwards!") - D.apply_damage(damage_base*2, BRUTE) + D.apply_damage(damage*2, BRUTE) playsound(get_turf(D), 'sound/effects/meteorimpact.ogg', 25, 1, -1) var/throwtarget = get_edge_target_turf(A, get_dir(A, get_step_away(D, A))) D.throw_at(throwtarget, 4, 2, A)//So stuff gets tossed around at the same time. diff --git a/code/datums/martial/rising_bass.dm b/code/datums/martial/rising_bass.dm index e219fb8e03..470126b9b6 100644 --- a/code/datums/martial/rising_bass.dm +++ b/code/datums/martial/rising_bass.dm @@ -78,6 +78,7 @@ return TRUE /datum/martial_art/the_rising_bass/proc/sideKick(mob/living/carbon/human/A, mob/living/carbon/human/D) + var/damage = (damage_roll(A,D)*0.5) if(CHECK_MOBILITY(D, MOBILITY_STAND)) var/dir = A.dir & (NORTH | SOUTH) ? pick(EAST, WEST) : pick(NORTH, SOUTH) var/oppdir = dir == NORTH ? SOUTH : dir == SOUTH ? NORTH : dir == EAST ? WEST : EAST @@ -87,7 +88,7 @@ D.visible_message("[A] kicks [D] in the side, sliding them over!", \ "[A] kicks you in the side, forcing you to step away!") playsound(get_turf(A), 'sound/weapons/thudswoosh.ogg', 50, 1, -1) - D.apply_damage(damage_base*0.5, BRUTE, BODY_ZONE_CHEST) + D.apply_damage(damage, BRUTE, BODY_ZONE_CHEST) D.DefaultCombatKnockdown(60) var/L = !checkfordensity(H,D) ? (!checkfordensity(K,D) ? D.loc : K) : H D.forceMove(L) @@ -96,6 +97,7 @@ return TRUE /datum/martial_art/the_rising_bass/proc/shoulderFlip(mob/living/carbon/human/A, mob/living/carbon/human/D) + var/damage = (damage_roll(A,D) + 25) if(CHECK_MOBILITY(D, MOBILITY_STAND)) var/turf/H = get_step(A, get_dir(D,A)) var/L = checkfordensity(H,D) ? H : A.loc @@ -104,8 +106,8 @@ "[A] flips you over their shoulder, slamming you into the ground!") playsound(get_turf(A), 'sound/weapons/thudswoosh.ogg', 50, 1, -1) D.emote("scream") - D.apply_damage(damage_base, BRUTE, BODY_ZONE_CHEST) - D.apply_damage(damage_base + 25, BRUTE, BODY_ZONE_HEAD) + D.apply_damage(damage, BRUTE, BODY_ZONE_CHEST) + D.apply_damage(damage, BRUTE, BODY_ZONE_HEAD) D.Sleeping(60) D.DefaultCombatKnockdown(300) D.forceMove(L) @@ -114,6 +116,7 @@ return FALSE /datum/martial_art/the_rising_bass/proc/repulsePunch(mob/living/carbon/human/A, mob/living/carbon/human/D) + var/damage = damage_roll(A,D) if(CHECK_MOBILITY(D, MOBILITY_STAND) && repulsecool < world.time) A.do_attack_animation(D, ATTACK_EFFECT_PUNCH) D.visible_message("[A] smashes [D] in the chest, throwing them away!", \ @@ -121,7 +124,7 @@ playsound(get_turf(A), 'sound/weapons/punch1.ogg', 50, 1, -1) var/atom/F = get_edge_target_turf(D, get_dir(A, get_step_away(D, A))) D.throw_at(F, 10, 1) - D.apply_damage(damage_base, BRUTE, BODY_ZONE_CHEST) + D.apply_damage(damage, BRUTE, BODY_ZONE_CHEST) D.DefaultCombatKnockdown(90) log_combat(A, D, "repulse punched (Rising Bass)") repulsecool = world.time + 3 SECONDS @@ -129,12 +132,13 @@ return FALSE /datum/martial_art/the_rising_bass/proc/footSmash(mob/living/carbon/human/A, mob/living/carbon/human/D) + var/damage = (damage_roll(A,D)*0.5) if(CHECK_MOBILITY(D, MOBILITY_STAND)) A.do_attack_animation(D, ATTACK_EFFECT_KICK) D.visible_message("[A] smashes their foot down on [D]'s foot!", \ "[A] smashes your foot!") playsound(get_turf(A), 'sound/weapons/punch1.ogg', 50, 1, -1) - D.apply_damage(damage_base*0.5, BRUTE, pick(BODY_ZONE_L_LEG, BODY_ZONE_R_LEG)) + D.apply_damage(damage, BRUTE, pick(BODY_ZONE_L_LEG, BODY_ZONE_R_LEG)) D.dropItemToGround(D.get_active_held_item()) log_combat(A, D, "foot smashed (Rising Bass)") return TRUE @@ -156,21 +160,18 @@ /datum/martial_art/the_rising_bass/disarm_act(mob/living/carbon/human/A, mob/living/carbon/human/D) add_to_streak("D",D) - damage_roll(A,D) if(check_streak(A,D)) return TRUE return ..() /datum/martial_art/the_rising_bass/harm_act(mob/living/carbon/human/A, mob/living/carbon/human/D) add_to_streak("H",D) - damage_roll(A,D) if(check_streak(A,D)) return TRUE return ..() /datum/martial_art/the_rising_bass/grab_act(mob/living/carbon/human/A, mob/living/carbon/human/D) add_to_streak("G",D) - damage_roll(A,D) if(check_streak(A,D)) return TRUE return ..() diff --git a/code/datums/martial/sleeping_carp.dm b/code/datums/martial/sleeping_carp.dm index 691b2655d1..61e41d89c7 100644 --- a/code/datums/martial/sleeping_carp.dm +++ b/code/datums/martial/sleeping_carp.dm @@ -31,45 +31,48 @@ var/atk_verb = pick("precisely kick", "brutally chop", "cleanly hit", "viciously slam") ///this is the critical hit damage added to the attack if it rolls, it starts at 0 because it'll be changed when rolled var/crit_damage = 0 + var/damage = damage_roll(A,D) D.visible_message("[A] [atk_verb]s [D]!", \ "[A] [atk_verb]s you!", null, null, A) to_chat(A, "You [atk_verb] [D]!") if(prob(10)) - crit_damage += (damage_base*2 + 15) + crit_damage += (damage*2 + 15) playsound(get_turf(D), 'sound/weapons/bite.ogg', 50, TRUE, -1) D.visible_message("[D] staggers as the blow strikes them with inhuman force!", "You are struck with incredible precision by [A]!") log_combat(A, D, "critcal strong punched (Sleeping Carp)")//log it here because a critical can swing for 40 force and it's important for the sake of how hard they hit else playsound(get_turf(D), 'sound/weapons/punch1.ogg', 25, TRUE, -1) log_combat(A, D, "strong punched (Sleeping Carp)")//so as to not double up on logging - D.apply_damage((damage_base + 15) + crit_damage, BRUTE, affecting) + D.apply_damage((damage + 15) + crit_damage, BRUTE, affecting) return ///Crashing Wave Kick: Harm Disarm combo, throws people seven tiles backwards /datum/martial_art/the_sleeping_carp/proc/launchKick(mob/living/carbon/human/A, mob/living/carbon/human/D) + var/damage = (damage_roll(A,D) + 15) A.do_attack_animation(D, ATTACK_EFFECT_KICK) D.visible_message("[A] kicks [D] square in the chest, sending them flying!", \ "You are kicked square in the chest by [A], sending you flying!", "You hear a sickening sound of flesh hitting flesh!", COMBAT_MESSAGE_RANGE, A) playsound(get_turf(A), 'sound/effects/hit_kick.ogg', 50, TRUE, -1) var/atom/throw_target = get_edge_target_turf(D, A.dir) D.throw_at(throw_target, 7, 14, A) - D.apply_damage(damage_base + 15, BRUTE, BODY_ZONE_CHEST) + D.apply_damage(damage, BRUTE, BODY_ZONE_CHEST) log_combat(A, D, "launchkicked (Sleeping Carp)") return ///Keelhaul: Harm Grab combo, knocks people down, deals stamina damage while they're on the floor /datum/martial_art/the_sleeping_carp/proc/dropKick(mob/living/carbon/human/A, mob/living/carbon/human/D) + var/damage = damage_roll(A,D) A.do_attack_animation(D, ATTACK_EFFECT_KICK) playsound(get_turf(A), 'sound/effects/hit_kick.ogg', 50, TRUE, -1) if((D.mobility_flags & MOBILITY_STAND)) - D.apply_damage(damage_base, BRUTE, BODY_ZONE_HEAD) + D.apply_damage(damage, BRUTE, BODY_ZONE_HEAD) D.DefaultCombatKnockdown(50, override_hardstun = 0.01, override_stamdmg = 0) - D.apply_damage(damage_base + 35, STAMINA, BODY_ZONE_HEAD) //A cit specific change form the tg port to really punish anyone who tries to stand up + D.apply_damage(damage + 35, STAMINA, BODY_ZONE_HEAD) //A cit specific change form the tg port to really punish anyone who tries to stand up D.visible_message("[A] kicks [D] in the head, sending them face first into the floor!", \ "You are kicked in the head by [A], sending you crashing to the floor!", "You hear a sickening sound of flesh hitting flesh!", COMBAT_MESSAGE_RANGE, A) - else if(!(D.mobility_flags & MOBILITY_STAND)) - D.apply_damage(damage_base*0.5, BRUTE, BODY_ZONE_HEAD) - D.apply_damage(damage_base + 35, STAMINA, BODY_ZONE_HEAD) + else + D.apply_damage(damage*0.5, BRUTE, BODY_ZONE_HEAD) + D.apply_damage(damage + 35, STAMINA, BODY_ZONE_HEAD) D.drop_all_held_items() D.visible_message("[A] kicks [D] in the head!", \ "You are kicked in the head by [A]!", "You hear a sickening sound of flesh hitting flesh!", COMBAT_MESSAGE_RANGE, A) @@ -78,7 +81,6 @@ /datum/martial_art/the_sleeping_carp/grab_act(mob/living/carbon/human/A, mob/living/carbon/human/D) add_to_streak("G",D) - damage_roll(A,D) if(check_streak(A,D)) return TRUE log_combat(A, D, "grabbed (Sleeping Carp)") @@ -86,7 +88,7 @@ /datum/martial_art/the_sleeping_carp/harm_act(mob/living/carbon/human/A, mob/living/carbon/human/D) add_to_streak("H",D) - damage_roll(A,D) + var/damage = (damage_roll(A,D) + 5) if(check_streak(A,D)) return TRUE var/obj/item/bodypart/affecting = D.get_bodypart(ran_zone(A.zone_selected)) @@ -95,7 +97,7 @@ D.visible_message("[A] [atk_verb]s [D]!", \ "[A] [atk_verb]s you!", null, null, A) to_chat(A, "You [atk_verb] [D]!") - D.apply_damage(damage_base + 5, BRUTE, affecting) + D.apply_damage(damage, BRUTE, affecting) playsound(get_turf(D), 'sound/weapons/punch1.ogg', 25, TRUE, -1) log_combat(A, D, "punched (Sleeping Carp)") return TRUE @@ -103,7 +105,6 @@ /datum/martial_art/the_sleeping_carp/disarm_act(mob/living/carbon/human/A, mob/living/carbon/human/D) add_to_streak("D",D) - damage_roll(A,D) if(check_streak(A,D)) return TRUE log_combat(A, D, "disarmed (Sleeping Carp)") diff --git a/code/datums/martial/wrestling.dm b/code/datums/martial/wrestling.dm index f616bc3a0d..f7923d029f 100644 --- a/code/datums/martial/wrestling.dm +++ b/code/datums/martial/wrestling.dm @@ -227,6 +227,7 @@ if(!A.pulling || A.pulling != D) to_chat(A, "You need to have [D] in a cinch!") return + var/damage = damage_roll(A,D) D.forceMove(A.loc) A.setDir(get_dir(A, D)) D.setDir(get_dir(D, A)) @@ -309,11 +310,11 @@ switch(rand(1,3)) if (2) - D.apply_damage(damage_base + 25, BRUTE) + D.apply_damage(damage + 25, BRUTE) if (3) D.ex_act(EXPLODE_LIGHT) else - D.apply_damage(damage_base + 15, BRUTE) + D.apply_damage(damage + 15, BRUTE) else D.ex_act(EXPLODE_LIGHT) @@ -337,6 +338,7 @@ if(!D) return var/turf/T = get_turf(A) + var/damage = damage_roll(A,D) if (T && isturf(T) && D && isturf(D.loc)) for (var/i = 0, i < 4, i++) A.setDir(turn(A.dir, 90)) @@ -345,7 +347,7 @@ addtimer(CALLBACK(src, .proc/CheckStrikeTurf, A, T), 4) A.visible_message("[A] headbutts [D]!") - D.apply_damage(damage_base + 15, BRUTE) + D.apply_damage(damage + 15, BRUTE) playsound(A.loc, "swing_hit", 50, 1) D.Unconscious(20) log_combat(A, D, "headbutted") @@ -353,13 +355,14 @@ /datum/martial_art/wrestling/proc/kick(mob/living/carbon/human/A, mob/living/carbon/human/D) if(!D) return + var/damage = damage_roll(A,D) A.emote("scream") A.emote("flip") A.setDir(turn(A.dir, 90)) A.visible_message("[A] roundhouse-kicks [D]!") playsound(A.loc, "swing_hit", 50, 1) - D.apply_damage(damage_base + 15, STAMINA) + D.apply_damage(damage + 15, STAMINA) var/turf/T = get_edge_target_turf(A, get_dir(A, get_step_away(D, A))) if (T && isturf(T)) @@ -373,7 +376,8 @@ var/obj/surface = null var/turf/ST = null var/falling = 0 - + var/damage = damage_roll(A,D) + for (var/obj/O in oview(1, A)) if (O.density == 1) if (O == A) @@ -401,7 +405,7 @@ A.pixel_y = 0 if (falling == 1) A.visible_message("...and dives head-first into the ground, ouch!") - A.apply_damage(damage_base + 15, BRUTE) + A.apply_damage(damage + 15, BRUTE) A.DefaultCombatKnockdown(60) to_chat(A, "[D] is too far away!") return FALSE @@ -427,9 +431,9 @@ if (prob(33) || D.stat) D.ex_act(EXPLODE_LIGHT) else - D.apply_damage(damage_base + 25, BRUTE) + D.apply_damage(damage + 25, BRUTE) else - D.apply_damage(damage_base + 25, BRUTE) + D.apply_damage(damage + 25, BRUTE) D.DefaultCombatKnockdown(40) diff --git a/code/modules/clothing/gloves/miscellaneous.dm b/code/modules/clothing/gloves/miscellaneous.dm index 48358f58ae..3d7315b88d 100644 --- a/code/modules/clothing/gloves/miscellaneous.dm +++ b/code/modules/clothing/gloves/miscellaneous.dm @@ -94,7 +94,7 @@ item_state = "rapid" enhancement = 10 //omae wa mou shindeiru var/warcry = "AT" - secondary_trait = TRAIT_NOHARDCRIT + secondary_trait = TRAIT_NOSOFTCRIT //basically extra health /obj/item/clothing/gloves/fingerless/pugilist/rapid/Initialize() . = ..() @@ -111,7 +111,7 @@ return FALSE -/obj/item/clothing/gloves/fingerless/pugilist/rapid/attack_self(mob/user) +/obj/item/clothing/gloves/fingerless/pugilist/rapid/AltClick(mob/user) var/input = stripped_input(user,"What do you want your battlecry to be? Max length of 6 characters.", ,"", 7) if(input) warcry = input @@ -138,7 +138,7 @@ return FALSE -/obj/item/clothing/gloves/fingerless/pugilist/rapid/hug/attack_self(mob/user) +/obj/item/clothing/gloves/fingerless/pugilist/rapid/hug/AltClick(mob/user) return FALSE /obj/item/clothing/gloves/botanic_leather From 353c6f13484bc122808db23598c1340df141bcfa Mon Sep 17 00:00:00 2001 From: necromanceranne Date: Tue, 7 Apr 2020 23:35:10 +1000 Subject: [PATCH 22/25] forgot this bit --- code/datums/martial/boxing.dm | 1 - 1 file changed, 1 deletion(-) diff --git a/code/datums/martial/boxing.dm b/code/datums/martial/boxing.dm index df7e92b1bf..93d70c12cc 100644 --- a/code/datums/martial/boxing.dm +++ b/code/datums/martial/boxing.dm @@ -16,7 +16,6 @@ A.do_attack_animation(D, ATTACK_EFFECT_PUNCH) var/atk_verb = pick("left hook","right hook","straight punch") - damage_roll(A,D) var/extra_damage = damage_roll(A,D) if(extra_damage == A.dna.species.punchdamagelow) playsound(D.loc, A.dna.species.miss_sound, 25, 1, -1) From f0a738ef218f1426c0cc20f16781d345123ed66d Mon Sep 17 00:00:00 2001 From: necromanceranne Date: Wed, 8 Apr 2020 22:53:51 +1000 Subject: [PATCH 23/25] I'm sneaking in a nerf to scarp here shush shush --- code/datums/martial/rising_bass.dm | 2 +- code/datums/martial/sleeping_carp.dm | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/code/datums/martial/rising_bass.dm b/code/datums/martial/rising_bass.dm index 470126b9b6..1b767df52c 100644 --- a/code/datums/martial/rising_bass.dm +++ b/code/datums/martial/rising_bass.dm @@ -185,7 +185,7 @@ . = ..() if(A.incapacitated(FALSE, TRUE)) //NO STUN return BULLET_ACT_HIT - if(!(A.mobility_flags & MOBILITY_USE)) //NO UNABLE TO USE + if(CHECK_ALL_MOBILITY(A, MOBILITY_USE|MOBILITY_STAND)) //NO UNABLE TO USE, NO DODGING ON THE FLOOR return BULLET_ACT_HIT if(A.dna && A.dna.check_mutation(HULK)) //NO HULK return BULLET_ACT_HIT diff --git a/code/datums/martial/sleeping_carp.dm b/code/datums/martial/sleeping_carp.dm index 61e41d89c7..6db90decbc 100644 --- a/code/datums/martial/sleeping_carp.dm +++ b/code/datums/martial/sleeping_carp.dm @@ -114,7 +114,7 @@ . = ..() if(A.incapacitated(FALSE, TRUE)) //NO STUN return BULLET_ACT_HIT - if(!(A.mobility_flags & MOBILITY_USE)) //NO UNABLE TO USE + if(CHECK_ALL_MOBILITY(A, MOBILITY_USE|MOBILITY_STAND)) //NO UNABLE TO USE, NO DEFLECTION ON THE FLOOR return BULLET_ACT_HIT if(A.dna && A.dna.check_mutation(HULK)) //NO HULK return BULLET_ACT_HIT @@ -125,6 +125,8 @@ playsound(get_turf(A), pick('sound/weapons/bulletflyby.ogg', 'sound/weapons/bulletflyby2.ogg', 'sound/weapons/bulletflyby3.ogg'), 75, TRUE) P.firer = A P.setAngle(rand(0, 360))//SHING + A.adjustStaminaLossBuffered (6) //Citadel change to stop infinite bullet sponging as you run away, but it is buffered! + //Also if adjustStaminaLoss ever gets fixed so it isn't being affected by stamina mods like scarps, please adjust by half. return BULLET_ACT_FORCE_PIERCE return BULLET_ACT_HIT From ad09cb6790a6b0cab36286a3cbedbd2ff20d3485 Mon Sep 17 00:00:00 2001 From: necromanceranne Date: Thu, 9 Apr 2020 00:07:54 +1000 Subject: [PATCH 24/25] This needs to go, there is just no way to reasonably have this mod as of the moment while it is basically giving a universal stamina discount. --- code/datums/martial/sleeping_carp.dm | 2 -- 1 file changed, 2 deletions(-) diff --git a/code/datums/martial/sleeping_carp.dm b/code/datums/martial/sleeping_carp.dm index 6db90decbc..3338b170c3 100644 --- a/code/datums/martial/sleeping_carp.dm +++ b/code/datums/martial/sleeping_carp.dm @@ -139,7 +139,6 @@ ADD_TRAIT(H, TRAIT_NODISMEMBER, SLEEPING_CARP_TRAIT) H.physiology.brute_mod *= 0.4 //brute is really not gonna cut it H.physiology.burn_mod *= 0.7 //burn is distinctly more useful against them than brute but they're still resistant - H.physiology.stamina_mod *= 0.5 //stun batons prove to be one of the few ways to fight them. They have stun resistance already, so I think doubling down too hard on this resistance is a bit much. H.physiology.stun_mod *= 0.3 //for those rare stuns H.physiology.pressure_mod *= 0.3 //go hang out with carp H.physiology.cold_mod *= 0.3 //cold mods are different to burn mods, they do stack however @@ -154,7 +153,6 @@ REMOVE_TRAIT(H, TRAIT_NODISMEMBER, SLEEPING_CARP_TRAIT) H.physiology.brute_mod = initial(H.physiology.brute_mod) H.physiology.burn_mod = initial(H.physiology.burn_mod) - H.physiology.stamina_mod = initial(H.physiology.stamina_mod) H.physiology.stun_mod = initial(H.physiology.stun_mod) H.physiology.pressure_mod = initial(H.physiology.pressure_mod) //no more carpies H.physiology.cold_mod = initial(H.physiology.cold_mod) From 2becb6d74f22a324e567abc69f8b183ad3c98251 Mon Sep 17 00:00:00 2001 From: necromanceranne Date: Thu, 9 Apr 2020 00:44:01 +1000 Subject: [PATCH 25/25] not really relevant given I literally decided to axe the mod --- code/datums/martial/sleeping_carp.dm | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/code/datums/martial/sleeping_carp.dm b/code/datums/martial/sleeping_carp.dm index 3338b170c3..661a882b58 100644 --- a/code/datums/martial/sleeping_carp.dm +++ b/code/datums/martial/sleeping_carp.dm @@ -125,8 +125,7 @@ playsound(get_turf(A), pick('sound/weapons/bulletflyby.ogg', 'sound/weapons/bulletflyby2.ogg', 'sound/weapons/bulletflyby3.ogg'), 75, TRUE) P.firer = A P.setAngle(rand(0, 360))//SHING - A.adjustStaminaLossBuffered (6) //Citadel change to stop infinite bullet sponging as you run away, but it is buffered! - //Also if adjustStaminaLoss ever gets fixed so it isn't being affected by stamina mods like scarps, please adjust by half. + A.adjustStaminaLossBuffered (3) //Citadel change to stop infinite bullet sponging as you run away, but it is buffered! return BULLET_ACT_FORCE_PIERCE return BULLET_ACT_HIT