diff --git a/code/datums/martial/sleeping_carp.dm b/code/datums/martial/sleeping_carp.dm index 00c6131b37b..4661057c883 100644 --- a/code/datums/martial/sleeping_carp.dm +++ b/code/datums/martial/sleeping_carp.dm @@ -24,21 +24,22 @@ return FALSE /datum/martial_art/the_sleeping_carp/proc/strongPunch(mob/living/carbon/human/A, mob/living/carbon/human/D) - var/obj/item/bodypart/affecting = D.get_bodypart(ran_zone(A.zone_selected)) + var/obj/item/bodypart/affecting = D.get_bodypart(ran_zone(A.zone_selected))//this var is so that the strong punch is always aiming for the body part the user is targeting and not trying to apply to the chest before deviating A.do_attack_animation(D, ATTACK_EFFECT_PUNCH) var/atk_verb = pick("kick", "chop", "hit", "slam") - var/crit_damage = 0 + var/crit_damage = 0//this is the critical hit damage added to the attack if it rolls, it starts at 0 because it'll be changed when rolled 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 += 20 + crit_damage += 20//here is where the critical damage is adjusted 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]!") + 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(20 + crit_damage, A.dna.species.attack_type, affecting) - log_combat(A, D, "strong punched (Sleeping Carp)") return /datum/martial_art/the_sleeping_carp/proc/launchKick(mob/living/carbon/human/A, mob/living/carbon/human/D) @@ -49,7 +50,7 @@ var/atom/throw_target = get_edge_target_turf(D, A.dir) D.throw_at(throw_target, 7, 14, A) D.apply_damage(15, A.dna.species.attack_type, BODY_ZONE_CHEST) - log_combat(A, D, "launch kicked (Sleeping Carp)") + log_combat(A, D, "launchkicked (Sleeping Carp)") return /datum/martial_art/the_sleeping_carp/proc/dropKick(mob/living/carbon/human/A, mob/living/carbon/human/D) @@ -66,12 +67,14 @@ 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) + log_combat(A, D, "dropkicked (Sleeping Carp)") return /datum/martial_art/the_sleeping_carp/grab_act(mob/living/carbon/human/A, mob/living/carbon/human/D) add_to_streak("G",D) if(check_streak(A,D)) return TRUE + log_combat(A, D, "grabbed (Sleeping Carp)") return ..() /datum/martial_art/the_sleeping_carp/harm_act(mob/living/carbon/human/A, mob/living/carbon/human/D) @@ -80,38 +83,39 @@ return TRUE var/obj/item/bodypart/affecting = D.get_bodypart(ran_zone(A.zone_selected)) A.do_attack_animation(D, ATTACK_EFFECT_PUNCH) - var/atk_verb = pick("kick", "chop", "hit", "slam") - D.visible_message("[A] [atk_verb]s [D]!", \ + var/atk_verb = pick("kicks", "chops", "hits", "slams")//picks one of the verbs, mostly for flavour, cool karate moves and stuff + D.visible_message("[A] [atk_verb] [D]!", \ "[A] [atk_verb]s you!", null, null, A) to_chat(A, "You [atk_verb] [D]!") D.apply_damage(rand(10,15), BRUTE, affecting) playsound(get_turf(D), 'sound/weapons/punch1.ogg', 25, TRUE, -1) - log_combat(A, D, "[atk_verb] (Sleeping Carp)") + log_combat(A, D, "punched (Sleeping Carp)") return TRUE /datum/martial_art/the_sleeping_carp/disarm_act(mob/living/carbon/human/A, mob/living/carbon/human/D) add_to_streak("D",D) if(check_streak(A,D)) return TRUE + log_combat(A, D, "disarmed (Sleeping Carp)") return ..() -/datum/martial_art/the_sleeping_carp/on_projectile_hit(mob/living/carbon/human/A, obj/projectile/P, def_zone) - . = ..() - if(A.incapacitated(FALSE, TRUE)) //NO STUN - return BULLET_ACT_HIT - if(!(A.mobility_flags & MOBILITY_USE)) //NO UNABLE TO USE - return BULLET_ACT_HIT - if(A.dna && A.dna.check_mutation(HULK)) //NO HULK - return BULLET_ACT_HIT - if(!isturf(A.loc)) //NO MOTHERFLIPPIN MECHS! - return BULLET_ACT_HIT - if(A.in_throw_mode) - A.visible_message("[A] effortlessly swats the projectile aside! They can block bullets with their bare hands!", "You deflect the projectile!") - 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 - return BULLET_ACT_FORCE_PIERCE - return BULLET_ACT_HIT +//datum/martial_art/the_sleeping_carp/on_projectile_hit(mob/living/carbon/human/A, obj/projectile/P, def_zone) + //. = ..() + //if(A.incapacitated(FALSE, TRUE)) //NO STUN + //return BULLET_ACT_HIT + //if(!(A.mobility_flags & MOBILITY_USE)) //NO UNABLE TO USE + //return BULLET_ACT_HIT + //if(A.dna && A.dna.check_mutation(HULK)) //NO HULK + //return BULLET_ACT_HIT + //if(!isturf(A.loc)) //NO MOTHERFLIPPIN MECHS! + //return BULLET_ACT_HIT + //if(A.in_throw_mode) + //A.visible_message("[A] effortlessly swats the projectile aside! They can block bullets with their bare hands!", "You deflect the projectile!") + //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 + //return BULLET_ACT_FORCE_PIERCE + //return BULLET_ACT_HIT /datum/martial_art/the_sleeping_carp/teach(mob/living/carbon/human/H, make_temporary = FALSE) . = ..() @@ -121,12 +125,13 @@ ADD_TRAIT(H, TRAIT_PIERCEIMMUNE, SLEEPING_CARP_TRAIT) ADD_TRAIT(H, TRAIT_STUNRESISTANCE, SLEEPING_CARP_TRAIT) ADD_TRAIT(H, TRAIT_NODISMEMBER, SLEEPING_CARP_TRAIT) - H.physiology.brute_mod *= 0.3 - H.physiology.burn_mod *= 0.3 - H.physiology.stamina_mod *= 0.3 - H.physiology.stun_mod *= 0.3 + H.physiology.brute_mod *= 0.2 //brute is borderline useless + 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 //seriously go say hi + H.physiology.cold_mod *= 0.3 //cold mods are different to burn mods, they don't interact even though they both do burn damage + H.physiology.heat_mod *= 1.5 //this is mostly so sleeping carp has a viable weakness. Cooking them alive. Setting them on fire and heating them will be their biggest weakness. The reason for this is....filet jokes. H.faction |= "carp" //:D @@ -142,6 +147,7 @@ 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) + H.physiology.heat_mod = initial(H.physiology.heat_mod) H.faction -= "carp" //:( diff --git a/code/modules/uplink/uplink_items.dm b/code/modules/uplink/uplink_items.dm index b372e58b0ad..08540313051 100644 --- a/code/modules/uplink/uplink_items.dm +++ b/code/modules/uplink/uplink_items.dm @@ -571,7 +571,7 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item)) desc = "This scroll contains the secrets of an ancient martial arts technique. You will master unarmed combat, \ gain skin as hard as steel and swat bullets from the air, but you also refuse to use dishonorable ranged weaponry." item = /obj/item/book/granter/martial/carp - cost = 15 + cost = 17 surplus = 0 exclude_modes = list(/datum/game_mode/nuclear, /datum/game_mode/nuclear/clown_ops)