diff --git a/code/modules/mob/living/carbon/human/human_attackhand.dm b/code/modules/mob/living/carbon/human/human_attackhand.dm
index 1e2e0491a9f..f0a34c0eaf1 100644
--- a/code/modules/mob/living/carbon/human/human_attackhand.dm
+++ b/code/modules/mob/living/carbon/human/human_attackhand.dm
@@ -1,3 +1,6 @@
+/mob/living/carbon/human
+ var/datum/unarmed_attack/default_attack
+
/mob/living/carbon/human/proc/get_unarmed_attack(var/mob/living/carbon/human/target, var/hit_zone)
// VOREStation Edit - Begin
if(nif && nif.flag_check(NIF_C_HARDCLAWS,NIF_FLAGS_COMBAT)){return unarmed_hardclaws}
@@ -16,6 +19,12 @@
if(soft_type)
return soft_type
return G.special_attack
+ if(src.default_attack && src.default_attack.is_usable(src, target, hit_zone))
+ if(pulling_punches)
+ var/datum/unarmed_attack/soft_type = src.default_attack.get_sparring_variant()
+ if(soft_type)
+ return soft_type
+ return src.default_attack
for(var/datum/unarmed_attack/u_attack in species.unarmed_attacks)
if(u_attack.is_usable(src, target, hit_zone))
if(pulling_punches)
@@ -434,3 +443,37 @@
user.visible_message("\The [user] stops applying pressure to [src]'s [organ.name]!", "You stop applying pressure to [src]'s [organ.name]!")
return TRUE
+
+/mob/living/carbon/human/verb/check_attacks()
+ set name = "Check Attacks"
+ set category = "IC"
+ set src = usr
+
+ var/dat = "Known Attacks
"
+
+ if(default_attack)
+ dat += "Current default attack: [default_attack.attack_name] - reset
"
+
+ for(var/datum/unarmed_attack/u_attack in species.unarmed_attacks)
+ if(u_attack == default_attack)
+ dat += "Primarily [u_attack.attack_name] - default - reset
"
+ else
+ dat += "Primarily [u_attack.attack_name] - set default
"
+
+ src << browse(dat, "window=checkattack")
+
+/mob/living/carbon/human/Topic(href, href_list)
+ if(href_list["default_attk"])
+ if(href_list["default_attk"] == "reset_attk")
+ set_default_attack(null)
+ else
+ var/datum/unarmed_attack/u_attack = locate(href_list["default_attk"])
+ if(u_attack && (u_attack in species.unarmed_attacks))
+ set_default_attack(u_attack)
+ check_attacks()
+ return 1
+ else
+ return ..()
+
+/mob/living/carbon/human/proc/set_default_attack(var/datum/unarmed_attack/u_attack)
+ default_attack = u_attack
diff --git a/code/modules/mob/living/carbon/human/species/species_attack.dm b/code/modules/mob/living/carbon/human/species/species_attack.dm
index 3a5c3587206..27552552522 100644
--- a/code/modules/mob/living/carbon/human/species/species_attack.dm
+++ b/code/modules/mob/living/carbon/human/species/species_attack.dm
@@ -1,4 +1,5 @@
/datum/unarmed_attack/bite/sharp //eye teeth
+ attack_name = "sharp bite"
attack_verb = list("bit", "chomped on")
attack_sound = 'sound/weapons/bite.ogg'
shredding = 0
@@ -6,12 +7,14 @@
edge = 1
/datum/unarmed_attack/diona
+ attack_name = "tendrils"
attack_verb = list("lashed", "bludgeoned")
attack_noun = list("tendril")
eye_attack_text = "a tendril"
eye_attack_text_victim = "a tendril"
/datum/unarmed_attack/claws
+ attack_name = "claws"
attack_verb = list("scratched", "clawed", "slashed")
attack_noun = list("claws")
eye_attack_text = "claws"
@@ -54,6 +57,7 @@
if(5) user.visible_message("[user] tears [T.his] [pick(attack_noun)] [pick("deep into", "into", "across")] [target]'s [affecting.name]!")
/datum/unarmed_attack/claws/strong
+ attack_name = "strong claws"
attack_verb = list("slashed")
damage = 5
shredding = 1
@@ -67,6 +71,7 @@
damage = 15
/datum/unarmed_attack/bite/strong
+ attack_name = "strong bite"
attack_verb = list("mauled")
damage = 8
shredding = 1
@@ -75,6 +80,7 @@
damage = 10
/datum/unarmed_attack/slime_glomp
+ attack_name = "glomp"
attack_verb = list("glomped")
attack_noun = list("body")
damage = 2
@@ -84,6 +90,7 @@
user.apply_stored_shock_to(target)
/datum/unarmed_attack/stomp/weak
+ attack_name = "weak stomp"
attack_verb = list("jumped on")
/datum/unarmed_attack/stomp/weak/get_unarmed_damage()
diff --git a/code/modules/mob/living/carbon/human/species/station/seromi.dm b/code/modules/mob/living/carbon/human/species/station/seromi.dm
index 4e72aee57d4..c39357a3d6a 100644
--- a/code/modules/mob/living/carbon/human/species/station/seromi.dm
+++ b/code/modules/mob/living/carbon/human/species/station/seromi.dm
@@ -126,8 +126,8 @@
)
unarmed_types = list(
- /datum/unarmed_attack/bite/sharp,
/datum/unarmed_attack/claws,
+ /datum/unarmed_attack/bite/sharp,
/datum/unarmed_attack/stomp/weak
)
diff --git a/code/modules/mob/living/carbon/human/unarmed_attack.dm b/code/modules/mob/living/carbon/human/unarmed_attack.dm
index 2f15a4ba492..4e3facb09c7 100644
--- a/code/modules/mob/living/carbon/human/unarmed_attack.dm
+++ b/code/modules/mob/living/carbon/human/unarmed_attack.dm
@@ -2,6 +2,7 @@ var/global/list/sparring_attack_cache = list()
//Species unarmed attacks
/datum/unarmed_attack
+ var/attack_name = "fist"
var/attack_verb = list("attack") // Empty hand hurt intent verb.
var/attack_noun = list("fist")
var/damage = 0 // Extra empty hand attack damage.
@@ -109,6 +110,7 @@ var/global/list/sparring_attack_cache = list()
return FALSE //return true if the unarmed override prevents further attacks
/datum/unarmed_attack/bite
+ attack_name = "bite"
attack_verb = list("bit")
attack_sound = 'sound/weapons/bite.ogg'
shredding = 0
@@ -127,6 +129,7 @@ var/global/list/sparring_attack_cache = list()
return TRUE
/datum/unarmed_attack/punch
+ attack_name = "punch"
attack_verb = list("punched")
attack_noun = list("fist")
eye_attack_text = "fingers"
@@ -181,6 +184,7 @@ var/global/list/sparring_attack_cache = list()
user.visible_message("[user] [pick("punched", "threw a punch against", "struck", "slammed [TU.his] [pick(attack_noun)] into")] [target]'s [organ]!") //why do we have a separate set of verbs for lying targets?
/datum/unarmed_attack/kick
+ attack_name = "kick"
attack_verb = list("kicked", "kicked", "kicked", "kneed")
attack_noun = list("kick", "kick", "kick", "knee strike")
attack_sound = "swing_hit"
@@ -224,6 +228,7 @@ var/global/list/sparring_attack_cache = list()
if(5) user.visible_message("[user] landed a strong [pick(attack_noun)] against [target]'s [organ]!")
/datum/unarmed_attack/stomp
+ attack_name = "stomp"
attack_verb = null
attack_noun = list("stomp")
attack_sound = "swing_hit"
@@ -269,6 +274,7 @@ var/global/list/sparring_attack_cache = list()
if(5) user.visible_message("[pick("[user] landed a powerful stomp on", "[user] stomped down hard on", "[user] slammed [TU.his] [shoes ? copytext(shoes.name, 1, -1) : "foot"] down hard onto")] [target]'s [organ]!") //Devastated lol. No. We want to say that the stomp was powerful or forceful, not that it /wrought devastation/
/datum/unarmed_attack/light_strike
+ attack_name = "light hit"
attack_noun = list("tap","light strike")
attack_verb = list("tapped", "lightly struck")
damage = 3