#define NECK_CHOP "HHD" #define LEG_SWEEP "DHD" #define QUICK_CHOKE "HDH" /datum/martial_art/sol_combat name = "Solarian Combat" help_verb = /datum/martial_art/sol_combat/proc/sol_combat_help /datum/martial_art/sol_combat/proc/check_streak(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D) if(findtext(streak,NECK_CHOP)) streak = "" neck_chop(A,D) return 1 if(findtext(streak,LEG_SWEEP)) streak = "" leg_sweep(A,D) return 1 if(findtext(streak,QUICK_CHOKE)) streak = "" quick_choke(A,D) return 1 return 0 /datum/martial_art/sol_combat/proc/leg_sweep(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D) var/list/sweepedatoms = list() var/atom/sweeptarget var/distfromcaster for(var/turf/T in range(1,A)) for(var/atom/movable/AM in T) sweepedatoms += AM for(var/am in sweepedatoms - A) var/atom/movable/AM = am if(AM.anchored) continue sweeptarget = get_edge_target_turf(A, get_dir(A, get_step_away(AM, A))) distfromcaster = get_dist(A, AM) if(isliving(AM)) var/mob/living/M = AM if(M.stat || M.incapacitated() || distfromcaster == 0) D.apply_damage(25, DAMAGE_BRUTE) A.visible_message(SPAN_DANGER("[A] hits [M] with a powerful kick!")) else A.spin(10,1) M.Weaken(3) A.visible_message(M, SPAN_DANGER("[A] swiftly leg sweeps [M]!")) AM.throw_at(sweeptarget, ((clamp((1 - (clamp(distfromcaster - 2, 0, distfromcaster))), 1, 1))), 1) /datum/martial_art/sol_combat/proc/quick_choke(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D)//is actually lung punch A.do_attack_animation(D) A.visible_message(SPAN_WARNING("[A] pounds [D] on the chest!")) playsound(get_turf(A), "punch", 50, 1, -1) if(!(D.species.flags & NO_BREATHE)) D.losebreath += 5 D.adjustOxyLoss(10) return 1 /datum/martial_art/sol_combat/proc/neck_chop(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D) A.do_attack_animation(D) A.visible_message(SPAN_WARNING("[A] karate chops [D]'s neck!")) playsound(get_turf(A), SFX_PUNCH, 50, 1, -1) D.apply_damage(5, DAMAGE_BRUTE) D.silent += 30 return 1 /datum/martial_art/sol_combat/grab_act(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D) if(check_streak(A,D)) return 1 ..() /datum/martial_art/sol_combat/harm_act(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D) add_to_streak("H",D) if(check_streak(A,D)) return 1 add_logs(A, D, "punched") A.do_attack_animation(D) var/picked_hit_type = pick("punched", "kicked") var/bonus_damage = 10 if(D.weakened || D.resting || D.lying) bonus_damage += 5 picked_hit_type = "stomped on" D.apply_damage(bonus_damage, DAMAGE_BRUTE) if(picked_hit_type == "kicked" || picked_hit_type == "stomped") playsound(get_turf(D), SFX_SWING_HIT, 50, 1, -1) else playsound(get_turf(D), SFX_PUNCH, 50, 1, -1) A.visible_message(SPAN_DANGER("[A] [picked_hit_type] [D]!")) A.attack_log += "\[[time_stamp()]\] ["[picked_hit_type]"] [D.name] ([D.ckey])" D.attack_log += "\[[time_stamp()]\] ["Has Been [picked_hit_type]"] by [A.name] ([A.ckey])" msg_admin_attack("[key_name(A)] ["has [picked_hit_type]"] [key_name(D)] (JMP)",ckey=key_name(A),ckey_target=key_name(D)) return 1 /datum/martial_art/sol_combat/disarm_act(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D) add_to_streak("D",D) A.do_attack_animation(D) if(check_streak(A,D)) return 1 A.attack_log += "\[[time_stamp()]\] Disarmed [D.name] ([D.ckey])" D.attack_log += "\[[time_stamp()]\] Has been disarmed by [A.name] ([A.ckey])" msg_admin_attack("[key_name(A)] disarmed [D.name] ([D.ckey]) (JMP)",ckey=key_name(D),ckey_target=key_name(A)) if(prob(60)) var/obj/item/I = D.get_active_hand() if(I) A.visible_message(SPAN_DANGER("[A] has disarmed [D]!")) playsound(D, 'sound/weapons/thudswoosh.ogg', 50, 1, -1) D.drop_from_inventory(I) A.put_in_hands(I) else A.visible_message(SPAN_DANGER("[A] attempted to disarm [D]!")) playsound(D, SFX_PUNCH_MISS, 25, 1, -1) return 1 /datum/martial_art/sol_combat/proc/sol_combat_help() set name = "Recall Solarian Combat" set desc = "Remember the martial techniques of the Solarian Combat." set category = "Abilities" to_chat(usr, "You clench your fists and have a flashback of knowledge...") to_chat(usr, "Neck Chop: Harm Harm Disarm. Injures the neck, stopping the victim from speaking for a while.") to_chat(usr, "Leg Sweep: Disarm Harm Disarm. Trips the victim and everyone else around you, rendering them prone and unable to move for a short time.") to_chat(usr, "Lung Punch: Harm Disarm Harm. Delivers a strong punch just above the victim's abdomen, constraining the lungs. The victim will be unable to breathe for a short time.") #undef NECK_CHOP #undef LEG_SWEEP #undef QUICK_CHOKE