From 0c46c151f947b93fe55ea1850dc03a9ce9980297 Mon Sep 17 00:00:00 2001 From: necromanceranne Date: Fri, 3 Apr 2020 19:42:25 +1100 Subject: [PATCH] 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"