mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-07-19 11:05:03 +01:00
martial arts shit
This commit is contained in:
@@ -0,0 +1,97 @@
|
||||
///Adminfu
|
||||
//Help act:Heal/revie GP //p is for help
|
||||
//Disarm:Stun
|
||||
//Grab:Neck
|
||||
//Harm:Gib
|
||||
#define HEAL_COMBO "GP"
|
||||
|
||||
/datum/martial_art/adminfu
|
||||
name = "Way of the Dancing Admin"
|
||||
help_verb = /mob/living/carbon/human/proc/adminfu_help
|
||||
|
||||
/datum/martial_art/adminfu/proc/check_streak(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D)
|
||||
if(findtext(streak,HEAL_COMBO))
|
||||
streak = ""
|
||||
healPalm(A,D)
|
||||
return 1
|
||||
return 0
|
||||
|
||||
/datum/martial_art/adminfu/harm_act(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D)
|
||||
|
||||
if(!D.stat)//do not kill what is dead...
|
||||
A.do_attack_animation(D)
|
||||
D.visible_message("<span class='warning'>[A] manifests a large glowing toolbox and shoves it in [D]'s chest!</span>", \
|
||||
"<spac class='userdanger'>[A] shoves a mystical toolbox in your chest!</span>")
|
||||
D.death()
|
||||
|
||||
return 1
|
||||
|
||||
|
||||
/datum/martial_art/adminfu/disarm_act(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D)
|
||||
A.do_attack_animation(D)
|
||||
D.Weaken(25)
|
||||
D.Stun(25)
|
||||
return 1
|
||||
|
||||
/datum/martial_art/adminfu/grab_act(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D)
|
||||
add_to_streak("G",D)
|
||||
if(check_streak(A,D))
|
||||
return 1
|
||||
D.grabbedby(A,1)
|
||||
var/obj/item/weapon/grab/G = A.get_active_hand()
|
||||
if(G)
|
||||
G.state = GRAB_NECK
|
||||
|
||||
/datum/martial_art/adminfu/help_act(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D)
|
||||
add_to_streak("P",D)
|
||||
if(check_streak(A,D))
|
||||
return 1
|
||||
|
||||
/datum/martial_art/adminfu/proc/healPalm(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D)
|
||||
A.do_attack_animation(D)
|
||||
D.visible_message("<span class='warning'>[A] smacks [D] in the forehead!</span>")
|
||||
|
||||
//its the staff of healing code..hush
|
||||
if(istype(D,/mob))
|
||||
var/old_stat = D.stat
|
||||
if(isanimal(D) && D.stat == DEAD)
|
||||
var/mob/living/simple_animal/O = D
|
||||
var/mob/living/simple_animal/P = new O.type(O.loc)
|
||||
P.real_name = O.real_name
|
||||
P.name = O.name
|
||||
if(iscorgi(O))
|
||||
var/mob/living/simple_animal/pet/corgi/C = O
|
||||
if(C.inventory_head)
|
||||
C.inventory_head.loc = C.loc
|
||||
if(C.inventory_back)
|
||||
C.inventory_back.loc = C.loc
|
||||
if(O.mind)
|
||||
O.mind.transfer_to(P)
|
||||
else
|
||||
P.key = O.key
|
||||
qdel(O)
|
||||
D = P
|
||||
else
|
||||
D.revive()
|
||||
D.suiciding = 0
|
||||
if(!D.ckey)
|
||||
for(var/mob/dead/observer/ghost in player_list)
|
||||
if(D.real_name == ghost.real_name)
|
||||
ghost.reenter_corpse()
|
||||
break
|
||||
if(old_stat != DEAD)
|
||||
to_chat(D, "<span class='notice'>You feel great!</span>")
|
||||
else
|
||||
to_chat(D, "<span class='notice'>You rise with a start, you're alive!!!</span>")
|
||||
return 1
|
||||
|
||||
/mob/living/carbon/human/proc/adminfu_help()
|
||||
set name = "Recall Teachings"
|
||||
set desc = "Remember the way of the dancing admin."
|
||||
set category = "Adminfu"
|
||||
|
||||
to_chat(usr, "<span class='notice'>Grab</span>: Automatic Neck Grab.")
|
||||
to_chat(usr, "<span class='notice'>Disarm</span>: Stun/weaken")
|
||||
to_chat(usr, "<span class='notice'>Harm</span>: Death.")
|
||||
to_chat(usr, "<span class='notice'>Healing Palm:</span>:Combo:Grab,Help intent. Heals or revives a crature.")
|
||||
|
||||
@@ -0,0 +1,106 @@
|
||||
/datum/martial_art/boxing
|
||||
name = "Boxing"
|
||||
|
||||
/datum/martial_art/boxing/disarm_act(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D)
|
||||
to_chat(A, "<span class='warning'>Can't disarm while boxing!</span>")
|
||||
return 1
|
||||
|
||||
/datum/martial_art/boxing/grab_act(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D)
|
||||
to_chat(A, "<span class='warning'>Can't grab while boxing!</span>")
|
||||
return 1
|
||||
|
||||
/datum/martial_art/boxing/harm_act(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D)
|
||||
|
||||
A.do_attack_animation(D)
|
||||
|
||||
var/atk_verb = pick("left hook","right hook","straight punch")
|
||||
|
||||
var/damage = rand(5, 8) + A.species.punchdamagelow
|
||||
if(!damage)
|
||||
playsound(D.loc, 'sound/weapons/punchmiss.ogg', 25, 1, -1)
|
||||
D.visible_message("<span class='warning'>[A] has attempted to hit [D] with a [atk_verb]!</span>")
|
||||
add_logs(D, A, "attempted to hit", atk_verb)
|
||||
return 0
|
||||
|
||||
|
||||
var/obj/item/organ/external/affecting = D.get_organ(ran_zone(A.zone_sel.selecting))
|
||||
var/armor_block = D.run_armor_check(affecting, "melee")
|
||||
|
||||
playsound(D.loc, 'sound/weapons/punch1.ogg', 25, 1, -1)
|
||||
|
||||
D.visible_message("<span class='danger'>[A] has hit [D] with a [atk_verb]!</span>", \
|
||||
"<span class='userdanger'>[A] has hit [D] with a [atk_verb]!</span>")
|
||||
|
||||
D.apply_damage(damage, STAMINA, affecting, armor_block)
|
||||
add_logs(D, A, "punched")
|
||||
if(D.getStaminaLoss() > 50)
|
||||
var/knockout_prob = D.getStaminaLoss() + rand(-15,15)
|
||||
if((D.stat != DEAD) && prob(knockout_prob))
|
||||
D.visible_message("<span class='danger'>[A] has knocked [D] out with a haymaker!</span>", \
|
||||
"<span class='userdanger'>[A] has knocked [D] out with a haymaker!</span>")
|
||||
D.apply_effect(10,WEAKEN,armor_block)
|
||||
D.SetSleeping(5)
|
||||
D.forcesay(hit_appends)
|
||||
else if(D.lying)
|
||||
D.forcesay(hit_appends)
|
||||
return 1
|
||||
|
||||
/datum/martial_art/drunk_brawling
|
||||
name = "Drunken Brawling"
|
||||
|
||||
/datum/martial_art/drunk_brawling/grab_act(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D)
|
||||
if(prob(70))
|
||||
A.visible_message("<span class='warning'>[A] tries to grab ahold of [D], but fails!</span>", \
|
||||
"<span class='warning'>You fail to grab ahold of [D]!</span>")
|
||||
return 1
|
||||
D.grabbedby(A,1)
|
||||
var/obj/item/weapon/grab/G = A.get_active_hand()
|
||||
if(G)
|
||||
D.visible_message("<span class='danger'>[A] grabs ahold of [D] drunkenly!</span>", \
|
||||
"<span class='userdanger'>[A] grabs ahold of [D] drunkenly!</span>")
|
||||
return 1
|
||||
|
||||
/datum/martial_art/drunk_brawling/harm_act(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D)
|
||||
add_logs(D, A, "punched")
|
||||
A.do_attack_animation(D)
|
||||
|
||||
var/atk_verb = pick("jab","uppercut","overhand punch","drunken right hook","drunken left hook")
|
||||
|
||||
var/damage = rand(0,6)
|
||||
|
||||
if(atk_verb == "uppercut")
|
||||
if(prob(90))
|
||||
damage = 0
|
||||
else //10% chance to do a massive amount of damage
|
||||
damage = 14
|
||||
|
||||
if(prob(50)) //they are drunk, they aren't going to land half of their hits
|
||||
damage = 0
|
||||
|
||||
if(!damage)
|
||||
playsound(D.loc, 'sound/weapons/punchmiss.ogg', 25, 1, -1)
|
||||
D.visible_message("<span class='warning'>[A] has attempted to hit [D] with a [atk_verb]!</span>")
|
||||
return 1 //returns 1 so that they actually miss and don't switch to attackhand damage
|
||||
|
||||
var/obj/item/organ/external/affecting = D.get_organ(ran_zone(A.zone_sel.selecting))
|
||||
var/armor_block = D.run_armor_check(affecting, "melee")
|
||||
|
||||
playsound(D.loc, 'sound/weapons/punch1.ogg', 25, 1, -1)
|
||||
|
||||
|
||||
D.visible_message("<span class='danger'>[A] has hit [D] with a [atk_verb]!</span>", \
|
||||
"<span class='userdanger'>[A] has hit [D] with a [atk_verb]!</span>")
|
||||
|
||||
D.apply_damage(damage, BRUTE, null, armor_block)
|
||||
D.apply_effect(damage, STAMINA, armor_block)
|
||||
if(D.getStaminaLoss() > 50)
|
||||
var/knockout_prob = D.getStaminaLoss() + rand(-15,15)
|
||||
if((D.stat != DEAD) && prob(knockout_prob))
|
||||
D.visible_message("<span class='danger'>[A] has knocked [D] out with a haymaker!</span>", \
|
||||
"<span class='userdanger'>[A] has knocked [D] out with a haymaker!</span>")
|
||||
D.apply_effect(10,WEAKEN,armor_block)
|
||||
D.Paralyse(5)
|
||||
D.forcesay(hit_appends)
|
||||
else if(D.lying)
|
||||
D.forcesay(hit_appends)
|
||||
return 1
|
||||
@@ -0,0 +1,162 @@
|
||||
/datum/martial_art/krav_maga
|
||||
name = "Krav Maga"
|
||||
var/datum/action/neck_chop/neckchop = new/datum/action/neck_chop()
|
||||
var/datum/action/leg_sweep/legsweep = new/datum/action/leg_sweep()
|
||||
var/datum/action/lung_punch/lungpunch = new/datum/action/lung_punch()
|
||||
|
||||
/datum/action/neck_chop
|
||||
name = "Neck Chop - Injures the neck, stopping the victim from speaking for a while."
|
||||
button_icon_state = "neckchop"
|
||||
|
||||
/datum/action/neck_chop/Trigger()
|
||||
owner << "<b><i>Your next attack will be a Neck Chop.</i></b>"
|
||||
owner.visible_message("<span class='danger'>[owner] assumes the Neck Chop stance!</span>")
|
||||
var/mob/living/carbon/human/H = owner
|
||||
H.martial_art.streak = "neck_chop"
|
||||
|
||||
/datum/action/leg_sweep
|
||||
name = "Leg Sweep - Trips the victim, rendering them prone and unable to move for a short time."
|
||||
button_icon_state = "legsweep"
|
||||
|
||||
/datum/action/leg_sweep/Trigger()
|
||||
owner << "<b><i>Your next attack will be a Leg Sweep.</i></b>"
|
||||
owner.visible_message("<span class='danger'>[owner] assumes the Leg Sweep stance!</span>")
|
||||
var/mob/living/carbon/human/H = owner
|
||||
H.martial_art.streak = "leg_sweep"
|
||||
|
||||
/datum/action/lung_punch//referred to internally as 'quick choke'
|
||||
name = "Lung Punch - Delivers a strong punch just above the victim's abdomen, constraining the lungs. The victim will be unable to breathe for a short time."
|
||||
button_icon_state = "lungpunch"
|
||||
|
||||
/datum/action/lung_punch/Trigger()
|
||||
owner << "<b><i>Your next attack will be a Lung Punch.</i></b>"
|
||||
owner.visible_message("<span class='danger'>[owner] assumes the Lung Punch stance!</span>")
|
||||
var/mob/living/carbon/human/H = owner
|
||||
H.martial_art.streak = "quick_choke"//internal name for lung punch
|
||||
|
||||
/datum/martial_art/krav_maga/teach(var/mob/living/carbon/human/H,var/make_temporary=0)
|
||||
..()
|
||||
H << "<span class = 'userdanger'>You know the arts of Krav Maga!</span>"
|
||||
H << "<span class = 'danger'>Place your cursor over a move at the top of the screen to see what it does.</span>"
|
||||
neckchop.Grant(H)
|
||||
legsweep.Grant(H)
|
||||
lungpunch.Grant(H)
|
||||
|
||||
/datum/martial_art/krav_maga/remove(var/mob/living/carbon/human/H)
|
||||
..()
|
||||
H << "<span class = 'userdanger'>You suddenly forget the arts of Krav Maga...</span>"
|
||||
neckchop.Remove(H)
|
||||
legsweep.Remove(H)
|
||||
lungpunch.Remove(H)
|
||||
|
||||
/datum/martial_art/krav_maga/proc/check_streak(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D)
|
||||
switch(streak)
|
||||
if("neck_chop")
|
||||
streak = ""
|
||||
neck_chop(A,D)
|
||||
return 1
|
||||
if("leg_sweep")
|
||||
streak = ""
|
||||
leg_sweep(A,D)
|
||||
return 1
|
||||
if("quick_choke")//is actually lung punch
|
||||
streak = ""
|
||||
quick_choke(A,D)
|
||||
return 1
|
||||
return 0
|
||||
|
||||
/datum/martial_art/krav_maga/proc/leg_sweep(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D)
|
||||
if(D.stat || D.weakened)
|
||||
return 0
|
||||
D.visible_message("<span class='warning'>[A] leg sweeps [D]!</span>", \
|
||||
"<span class='userdanger'>[A] leg sweeps you!</span>")
|
||||
playsound(get_turf(A), 'sound/effects/hit_kick.ogg', 50, 1, -1)
|
||||
D.apply_damage(5, BRUTE)
|
||||
D.Weaken(4)//originally was 6, lowered since you could kill somebody in one stun
|
||||
return 1
|
||||
|
||||
/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("<span class='warning'>[A] pounds [D] on the chest!</span>", \
|
||||
"<span class='userdanger'>[A] slams your chest! You can't breathe!</span>")
|
||||
playsound(get_turf(A), 'sound/effects/hit_punch.ogg', 50, 1, -1)
|
||||
D.losebreath += 5
|
||||
D.adjustOxyLoss(10)
|
||||
return 1
|
||||
|
||||
/datum/martial_art/krav_maga/proc/neck_chop(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D)
|
||||
D.visible_message("<span class='warning'>[A] karate chops [D]'s neck!</span>", \
|
||||
"<span class='userdanger'>[A] karate chops your neck, rendering you unable to speak for a short time!</span>")
|
||||
playsound(get_turf(A), 'sound/effects/hit_punch.ogg', 50, 1, -1)
|
||||
D.apply_damage(5, BRUTE)
|
||||
D.silent += 10
|
||||
return 1
|
||||
|
||||
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
|
||||
..()
|
||||
|
||||
/datum/martial_art/krav_maga/harm_act(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D)
|
||||
if(check_streak(A,D))
|
||||
return 1
|
||||
add_logs(A, D, "punched")
|
||||
A.do_attack_animation(D)
|
||||
var/picked_hit_type = pick("punches", "kicks")
|
||||
var/bonus_damage = 10
|
||||
if(D.weakened || D.resting || D.lying)
|
||||
bonus_damage += 5
|
||||
picked_hit_type = "stomps on"
|
||||
D.apply_damage(bonus_damage, BRUTE)
|
||||
if(picked_hit_type == "kicks" || picked_hit_type == "stomps")
|
||||
playsound(get_turf(D), 'sound/effects/hit_kick.ogg', 50, 1, -1)
|
||||
else
|
||||
playsound(get_turf(D), 'sound/effects/hit_punch.ogg', 50, 1, -1)
|
||||
D.visible_message("<span class='danger'>[A] [picked_hit_type] [D]!</span>", \
|
||||
"<span class='userdanger'>[A] [picked_hit_type] you!</span>")
|
||||
return 1
|
||||
|
||||
/datum/martial_art/krav_maga/disarm_act(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D)
|
||||
if(check_streak(A,D))
|
||||
return 1
|
||||
if(prob(60))
|
||||
if(D.hand)
|
||||
if(istype(D.l_hand, /obj/item))
|
||||
var/obj/item/I = D.l_hand
|
||||
D.drop_item()
|
||||
A.put_in_hands(I)
|
||||
else
|
||||
if(istype(D.r_hand, /obj/item))
|
||||
var/obj/item/I = D.r_hand
|
||||
D.drop_item()
|
||||
A.put_in_hands(I)
|
||||
D.visible_message("<span class='danger'>[A] has disarmed [D]!</span>", \
|
||||
"<span class='userdanger'>[A] has disarmed [D]!</span>")
|
||||
playsound(D, 'sound/weapons/thudswoosh.ogg', 50, 1, -1)
|
||||
else
|
||||
D.visible_message("<span class='danger'>[A] attempted to disarm [D]!</span>", \
|
||||
"<span class='userdanger'>[A] attempted to disarm [D]!</span>")
|
||||
playsound(D, 'sound/weapons/punchmiss.ogg', 25, 1, -1)
|
||||
return 1
|
||||
|
||||
//Krav Maga Gloves
|
||||
|
||||
/obj/item/clothing/gloves/krav_maga
|
||||
desc = "These gloves can teach you to perform Krav Maga using nanochips."
|
||||
name = "black gloves"
|
||||
icon_state = "black"
|
||||
item_state = "bgloves"
|
||||
var/datum/martial_art/krav_maga/style = new
|
||||
|
||||
/obj/item/clothing/gloves/krav_maga/equipped(mob/user, slot)
|
||||
if(!ishuman(user))
|
||||
return
|
||||
if(slot == slot_gloves)
|
||||
var/mob/living/carbon/human/H = user
|
||||
style.teach(H,1)
|
||||
|
||||
/obj/item/clothing/gloves/krav_maga/dropped(mob/user)
|
||||
if(!ishuman(user))
|
||||
return
|
||||
var/mob/living/carbon/human/H = user
|
||||
if(H.get_item_by_slot(slot_gloves) == src)
|
||||
style.remove(H)
|
||||
@@ -0,0 +1,86 @@
|
||||
#define TORNADO_COMBO "HHD"
|
||||
#define THROWBACK_COMBO "DHD"
|
||||
#define PLASMA_COMBO "HDDDH"
|
||||
|
||||
/datum/martial_art/plasma_fist
|
||||
name = "Plasma Fist"
|
||||
help_verb = /mob/living/carbon/human/proc/plasma_fist_help
|
||||
|
||||
|
||||
/datum/martial_art/plasma_fist/proc/check_streak(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D)
|
||||
if(findtext(streak,TORNADO_COMBO))
|
||||
streak = ""
|
||||
Tornado(A,D)
|
||||
return 1
|
||||
if(findtext(streak,THROWBACK_COMBO))
|
||||
streak = ""
|
||||
Throwback(A,D)
|
||||
return 1
|
||||
if(findtext(streak,PLASMA_COMBO))
|
||||
streak = ""
|
||||
Plasma(A,D)
|
||||
return 1
|
||||
return 0
|
||||
|
||||
/datum/martial_art/plasma_fist/proc/Tornado(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D)
|
||||
A.say("TORNADO SWEEP!")
|
||||
spawn(0)
|
||||
for(var/i in list(NORTH,SOUTH,EAST,WEST,EAST,SOUTH,NORTH,SOUTH,EAST,WEST,EAST,SOUTH))
|
||||
A.dir = i
|
||||
playsound(A.loc, 'sound/weapons/punch1.ogg', 15, 1, -1)
|
||||
sleep(1)
|
||||
var/obj/effect/proc_holder/spell/aoe_turf/repulse/R = new(null)
|
||||
var/list/turfs = list()
|
||||
for(var/turf/T in range(1,A))
|
||||
turfs.Add(T)
|
||||
R.cast(turfs)
|
||||
return
|
||||
|
||||
/datum/martial_art/plasma_fist/proc/Throwback(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D)
|
||||
D.visible_message("<span class='danger'>[A] has hit [D] with Plasma Punch!</span>", \
|
||||
"<span class='userdanger'>[A] has hit [D] with Plasma Punch!</span>")
|
||||
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)
|
||||
A.say("HYAH!")
|
||||
return
|
||||
|
||||
/datum/martial_art/plasma_fist/proc/Plasma(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D)
|
||||
A.do_attack_animation(D)
|
||||
playsound(D.loc, 'sound/weapons/punch1.ogg', 50, 1, -1)
|
||||
A.say("PLASMA FIST!")
|
||||
D.visible_message("<span class='danger'>[A] has hit [D] with THE PLASMA FIST TECHNIQUE!</span>", \
|
||||
"<span class='userdanger'>[A] has hit [D] with THE PLASMA FIST TECHNIQUE!</span>")
|
||||
D.gib()
|
||||
return
|
||||
|
||||
/datum/martial_art/plasma_fist/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
|
||||
basic_hit(A,D)
|
||||
return 1
|
||||
|
||||
/datum/martial_art/plasma_fist/disarm_act(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D)
|
||||
add_to_streak("D",D)
|
||||
if(check_streak(A,D))
|
||||
return 1
|
||||
basic_hit(A,D)
|
||||
return 1
|
||||
|
||||
/datum/martial_art/plasma_fist/grab_act(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D)
|
||||
add_to_streak("G",D)
|
||||
if(check_streak(A,D))
|
||||
return 1
|
||||
basic_hit(A,D)
|
||||
return 1
|
||||
|
||||
/mob/living/carbon/human/proc/plasma_fist_help()
|
||||
set name = "Recall Teachings"
|
||||
set desc = "Remember the martial techniques of the Plasma Fist."
|
||||
set category = "Plasma Fist"
|
||||
|
||||
to_chat(usr, "<b><i>You clench your fists and have a flashback of knowledge...</i></b>")
|
||||
to_chat(usr, "<span class='notice'>Tornado Sweep</span>: Harm Harm Disarm. Repulses target and everyone back.")
|
||||
to_chat(usr, "<span class='notice'>Throwback</span>: Disarm Harm Disarm. Throws the target and an item at them.")
|
||||
to_chat(usr, "<span class='notice'>The Plasma Fist</span>: Harm Disarm Disarm Disarm Harm. Knocks the brain out of the opponent and gibs their body.")
|
||||
@@ -0,0 +1,137 @@
|
||||
//Used by the gang of the same name. Uses combos. Basic attacks bypass armor and never miss
|
||||
#define WRIST_WRENCH_COMBO "DD"
|
||||
#define BACK_KICK_COMBO "HG"
|
||||
#define STOMACH_KNEE_COMBO "GH"
|
||||
#define HEAD_KICK_COMBO "DHH"
|
||||
#define ELBOW_DROP_COMBO "HDHDH"
|
||||
/datum/martial_art/the_sleeping_carp
|
||||
name = "The Sleeping Carp"
|
||||
deflection_chance = 100
|
||||
help_verb = /mob/living/carbon/human/proc/sleeping_carp_help
|
||||
|
||||
/datum/martial_art/the_sleeping_carp/proc/check_streak(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D)
|
||||
if(findtext(streak,WRIST_WRENCH_COMBO))
|
||||
streak = ""
|
||||
wristWrench(A,D)
|
||||
return 1
|
||||
if(findtext(streak,BACK_KICK_COMBO))
|
||||
streak = ""
|
||||
backKick(A,D)
|
||||
return 1
|
||||
if(findtext(streak,STOMACH_KNEE_COMBO))
|
||||
streak = ""
|
||||
kneeStomach(A,D)
|
||||
return 1
|
||||
if(findtext(streak,HEAD_KICK_COMBO))
|
||||
streak = ""
|
||||
headKick(A,D)
|
||||
return 1
|
||||
if(findtext(streak,ELBOW_DROP_COMBO))
|
||||
streak = ""
|
||||
elbowDrop(A,D)
|
||||
return 1
|
||||
return 0
|
||||
|
||||
/datum/martial_art/the_sleeping_carp/proc/wristWrench(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D)
|
||||
if(!D.stat && !D.stunned && !D.weakened)
|
||||
A.do_attack_animation(D)
|
||||
D.visible_message("<span class='warning'>[A] grabs [D]'s wrist and wrenches it sideways!</span>", \
|
||||
"<span class='userdanger'>[A] grabs your wrist and violently wrenches it to the side!</span>")
|
||||
playsound(get_turf(A), 'sound/weapons/thudswoosh.ogg', 50, 1, -1)
|
||||
D.emote("scream")
|
||||
D.drop_item()
|
||||
D.apply_damage(5, BRUTE, pick("l_arm", "r_arm"))
|
||||
D.Stun(3)
|
||||
return 1
|
||||
return basic_hit(A,D)
|
||||
|
||||
/datum/martial_art/the_sleeping_carp/proc/backKick(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D)
|
||||
if(A.dir == D.dir && !D.stat && !D.weakened)
|
||||
A.do_attack_animation(D)
|
||||
D.visible_message("<span class='warning'>[A] kicks [D] in the back!</span>", \
|
||||
"<span class='userdanger'>[A] kicks you in the back, making you stumble and fall!</span>")
|
||||
step_to(D,get_step(D,D.dir),1)
|
||||
D.Weaken(4)
|
||||
playsound(get_turf(D), 'sound/weapons/punch1.ogg', 50, 1, -1)
|
||||
return 1
|
||||
return basic_hit(A,D)
|
||||
|
||||
/datum/martial_art/the_sleeping_carp/proc/kneeStomach(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D)
|
||||
if(!D.stat && !D.weakened)
|
||||
A.do_attack_animation(D)
|
||||
D.visible_message("<span class='warning'>[A] knees [D] in the stomach!</span>", \
|
||||
"<span class='userdanger'>[A] winds you with a knee in the stomach!</span>")
|
||||
D.audible_message("<b>[D]</b> gags!")
|
||||
D.losebreath += 3
|
||||
D.Stun(2)
|
||||
playsound(get_turf(D), 'sound/weapons/punch1.ogg', 50, 1, -1)
|
||||
return 1
|
||||
return basic_hit(A,D)
|
||||
|
||||
/datum/martial_art/the_sleeping_carp/proc/headKick(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D)
|
||||
if(!D.stat && !D.weakened)
|
||||
A.do_attack_animation(D)
|
||||
D.visible_message("<span class='warning'>[A] kicks [D] in the head!</span>", \
|
||||
"<span class='userdanger'>[A] kicks you in the jaw!</span>")
|
||||
D.apply_damage(20, BRUTE, "head")
|
||||
D.drop_item()
|
||||
playsound(get_turf(D), 'sound/weapons/punch1.ogg', 50, 1, -1)
|
||||
D.Stun(4)
|
||||
return 1
|
||||
return basic_hit(A,D)
|
||||
|
||||
/datum/martial_art/the_sleeping_carp/proc/elbowDrop(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D)
|
||||
if(D.weakened || D.resting || D.stat)
|
||||
A.do_attack_animation(D)
|
||||
D.visible_message("<span class='warning'>[A] elbow drops [D]!</span>", \
|
||||
"<span class='userdanger'>[A] piledrives you with their elbow!</span>")
|
||||
if(D.stat)
|
||||
D.death() //FINISH HIM!
|
||||
D.apply_damage(50, BRUTE, "chest")
|
||||
playsound(get_turf(D), 'sound/weapons/punch1.ogg', 75, 1, -1)
|
||||
return 1
|
||||
return basic_hit(A,D)
|
||||
|
||||
/datum/martial_art/the_sleeping_carp/grab_act(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D)
|
||||
add_to_streak("G",D)
|
||||
if(check_streak(A,D))
|
||||
return 1
|
||||
D.grabbedby(A,1)
|
||||
var/obj/item/weapon/grab/G = A.get_active_hand()
|
||||
if(G)
|
||||
G.state = GRAB_AGGRESSIVE //Instant aggressive grab
|
||||
|
||||
/datum/martial_art/the_sleeping_carp/harm_act(mob/living/carbon/human/A, mob/living/carbon/human/D)
|
||||
add_to_streak("H",D)
|
||||
if(check_streak(A,D))
|
||||
return 1
|
||||
A.do_attack_animation(D)
|
||||
var/atk_verb = pick("punches", "kicks", "chops", "hits", "slams")
|
||||
D.visible_message("<span class='danger'>[A] [atk_verb] [D]!</span>", \
|
||||
"<span class='userdanger'>[A] [atk_verb] you!</span>")
|
||||
D.apply_damage(rand(10,15), BRUTE)
|
||||
playsound(get_turf(D), 'sound/weapons/punch1.ogg', 25, 1, -1)
|
||||
if(prob(D.getBruteLoss()) && !D.lying)
|
||||
D.visible_message("<span class='warning'>[D] stumbles and falls!</span>", "<span class='userdanger'>The blow sends you to the ground!</span>")
|
||||
D.Weaken(4)
|
||||
return 1
|
||||
|
||||
|
||||
/datum/martial_art/the_sleeping_carp/disarm_act(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D)
|
||||
add_to_streak("D",D)
|
||||
if(check_streak(A,D))
|
||||
return 1
|
||||
return ..()
|
||||
|
||||
/mob/living/carbon/human/proc/sleeping_carp_help()
|
||||
set name = "Recall Teachings"
|
||||
set desc = "Remember the martial techniques of the Sleeping Carp clan."
|
||||
set category = "Sleeping Carp"
|
||||
|
||||
to_chat(usr, "<b><i>You retreat inward and recall the teachings of the Sleeping Carp...</i></b>")
|
||||
|
||||
to_chat(usr, "<span class='notice'>Wrist Wrench</span>: Disarm Disarm. Forces opponent to drop item in hand.")
|
||||
to_chat(usr, "<span class='notice'>Back Kick</span>: Harm Grab. Opponent must be facing away. Knocks down.")
|
||||
to_chat(usr, "<span class='notice'>Stomach Knee</span>: Grab Harm. Knocks the wind out of opponent and stuns.")
|
||||
to_chat(usr, "<span class='notice'>Head Kick</span>: Disarm Harm Harm. Decent damage, forces opponent to drop item in hand.")
|
||||
to_chat(usr, "<span class='notice'>Elbow Drop</span>: Harm Disarm Harm Disarm Harm. Opponent must be on the ground. Deals huge damage, instantly kills anyone in critical condition.")
|
||||
@@ -0,0 +1,67 @@
|
||||
/datum/martial_art/wrestling
|
||||
name = "Wrestling"
|
||||
help_verb = /mob/living/carbon/human/proc/wrestling_help
|
||||
|
||||
// combo refence since wrestling uses a different format to sleeping carp and plasma fist.
|
||||
// Clinch "G"
|
||||
// Suplex "GD"
|
||||
// Advanced grab "G"
|
||||
|
||||
/datum/martial_art/wrestling/harm_act(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D)
|
||||
D.grabbedby(A,1)
|
||||
var/obj/item/weapon/grab/G = A.get_active_hand()
|
||||
if(G && prob(50))
|
||||
G.state = GRAB_AGGRESSIVE
|
||||
D.visible_message("<span class='danger'>[A] has [D] in a clinch!</span>", \
|
||||
"<span class='userdanger'>[A] has [D] in a clinch!</span>")
|
||||
else
|
||||
D.visible_message("<span class='danger'>[A] fails to get [D] in a clinch!</span>", \
|
||||
"<span class='userdanger'>[A] fails to get [D] in a clinch!</span>")
|
||||
return 1
|
||||
|
||||
|
||||
/datum/martial_art/wrestling/proc/Suplex(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D)
|
||||
|
||||
D.visible_message("<span class='danger'>[A] suplexes [D]!</span>", \
|
||||
"<span class='userdanger'>[A] suplexes [D]!</span>")
|
||||
D.forceMove(A.loc)
|
||||
var/armor_block = D.run_armor_check(null, "melee")
|
||||
D.apply_damage(30, BRUTE, null, armor_block)
|
||||
D.apply_effect(6, WEAKEN, armor_block)
|
||||
add_logs(D, A, "suplexed")
|
||||
|
||||
A.SpinAnimation(10,1)
|
||||
|
||||
D.SpinAnimation(10,1)
|
||||
spawn(3)
|
||||
armor_block = A.run_armor_check(null, "melee")
|
||||
A.apply_effect(4, WEAKEN, armor_block)
|
||||
return
|
||||
|
||||
/datum/martial_art/wrestling/disarm_act(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D)
|
||||
if(istype(A.get_inactive_hand(),/obj/item/weapon/grab))
|
||||
var/obj/item/weapon/grab/G = A.get_inactive_hand()
|
||||
if(G.affecting == D)
|
||||
Suplex(A,D)
|
||||
return 1
|
||||
harm_act(A,D)
|
||||
return 1
|
||||
|
||||
/datum/martial_art/wrestling/grab_act(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D)
|
||||
D.grabbedby(A,1)
|
||||
D.visible_message("<span class='danger'>[A] holds [D] down!</span>", \
|
||||
"<span class='userdanger'>[A] holds [D] down!</span>")
|
||||
var/obj/item/organ/external/affecting = D.get_organ(ran_zone(A.zone_sel.selecting))
|
||||
var/armor_block = D.run_armor_check(affecting, "melee")
|
||||
D.apply_damage(10, STAMINA, affecting, armor_block)
|
||||
return 1
|
||||
|
||||
/mob/living/carbon/human/proc/wrestling_help()
|
||||
set name = "Recall Teachings"
|
||||
set desc = "Remember how to wrestle."
|
||||
set category = "Wrestling"
|
||||
|
||||
to_chat(usr, "<b><i>You flex your muscles and have a revelation...</i></b>")
|
||||
to_chat(usr, "<span class='notice'>Clinch</span>: Grab. Passively gives you a chance to immediately aggressively grab someone. Not always successful.")
|
||||
to_chat(usr, "<span class='notice'>Suplex</span>: Disarm someone you are grabbing. Suplexes your target to the floor. Greatly injures them and leaves both you and your target on the floor.")
|
||||
to_chat(usr, "<span class='notice'>Advanced grab</span>: Grab. Passively causes stamina damage when grabbing someone.")
|
||||
@@ -37,6 +37,8 @@
|
||||
prev_gender = gender // Debug for plural genders
|
||||
make_blood()
|
||||
|
||||
martial_art = default_martial_art
|
||||
|
||||
var/mob/M = src
|
||||
faction |= "\ref[M]" //what
|
||||
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
var/global/default_martial_art = new/datum/martial_art
|
||||
/mob/living/carbon/human
|
||||
|
||||
hud_possible = list(HEALTH_HUD,STATUS_HUD,ID_HUD,WANTED_HUD,IMPLOYAL_HUD,IMPCHEM_HUD,IMPTRACK_HUD,SPECIALROLE_HUD,NATIONS_HUD)
|
||||
|
||||
Reference in New Issue
Block a user