From 5fe9ca3df1aadb431c3d20e4fb03775414377de6 Mon Sep 17 00:00:00 2001 From: Hubblenaut Date: Sun, 14 Dec 2014 22:48:14 +0100 Subject: [PATCH] Species use a list for unarmed attack types --- .../carbon/human/alien/alien_species.dm | 3 +- .../living/carbon/human/human_attackhand.dm | 12 ++++--- .../mob/living/carbon/human/species.dm | 35 ++++++++----------- .../mob/living/carbon/human/unarmed_attack.dm | 4 +-- .../mob/living/carbon/monkey/monkey.dm | 12 +++++-- 5 files changed, 36 insertions(+), 30 deletions(-) diff --git a/code/modules/mob/living/carbon/human/alien/alien_species.dm b/code/modules/mob/living/carbon/human/alien/alien_species.dm index 79df1553c48..893e28b41d2 100644 --- a/code/modules/mob/living/carbon/human/alien/alien_species.dm +++ b/code/modules/mob/living/carbon/human/alien/alien_species.dm @@ -5,8 +5,7 @@ default_language = "Xenomorph" language = "Hivemind" - unarmed_type = /datum/unarmed_attack/claws/strong - secondary_unarmed_type = /datum/unarmed_attack/bite/strong + unarmed_type = list(/datum/unarmed_attack/claws/strong, /datum/unarmed_attack/bite/strong) hud_type = /datum/hud_data/alien rarity_value = 3 diff --git a/code/modules/mob/living/carbon/human/human_attackhand.dm b/code/modules/mob/living/carbon/human/human_attackhand.dm index 9ba667faac6..f7bd79268b0 100644 --- a/code/modules/mob/living/carbon/human/human_attackhand.dm +++ b/code/modules/mob/living/carbon/human/human_attackhand.dm @@ -95,10 +95,14 @@ return // See if they can attack, and which attacks to use. - var/datum/unarmed_attack/attack = H.species.unarmed - if(!attack.is_usable(H)) - attack = H.species.secondary_unarmed - if(!attack.is_usable(H)) + var/datum/unarmed_attack/attack = null + for(var/datum/unarmed_attack/u_attack in H.species.unarmed) + if(!u_attack.is_usable(H, src)) + continue + else + attack = u_attack + break + if(!attack) return 0 var/damage = rand(1, 5) diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm index 67eb8f86e09..d9a0822f7bd 100644 --- a/code/modules/mob/living/carbon/human/species.dm +++ b/code/modules/mob/living/carbon/human/species.dm @@ -12,17 +12,16 @@ var/prone_icon // If set, draws this from icobase when mob is prone. var/eyes = "eyes_s" // Icon for eyes. - var/primitive // Lesser form, if any (ie. monkey for humans) - var/tail // Name of tail image in species effects icon file. - var/datum/unarmed_attack/unarmed // For empty hand harm-intent attack - var/datum/unarmed_attack/secondary_unarmed // For empty hand harm-intent attack if the first fails. + var/primitive // Lesser form, if any (ie. monkey for humans) + var/tail // Name of tail image in species effects icon file. + var/datum/unarmed_attack/list/unarmed = null // For empty hand harm-intent attack + var/datum/unarmed_attack/secondary_unarmed // For empty hand harm-intent attack if the first fails. var/datum/hud_data/hud var/hud_type var/slowdown = 0 var/gluttonous // Can eat some mobs. 1 for monkeys, 2 for people. var/rarity_value = 1 // Relative rarity/collector value for this species. Only used by ninja and cultists atm. - var/unarmed_type = /datum/unarmed_attack - var/secondary_unarmed_type = /datum/unarmed_attack/bite + var/unarmed_type = list(/datum/unarmed_attack, /datum/unarmed_attack/bite) var/language // Default racial language, if any. // Default language is used when 'say' is used without modifiers. @@ -98,8 +97,9 @@ else hud = new() - if(unarmed_type) unarmed = new unarmed_type() - if(secondary_unarmed_type) secondary_unarmed = new secondary_unarmed_type() + unarmed = list() + for(var/u_type in unarmed_type) + unarmed += new u_type() /datum/species/proc/create_organs(var/mob/living/carbon/human/H) //Handles creation of mob organs. @@ -207,7 +207,7 @@ name_plural = "Humans" language = "Sol Common" primitive = /mob/living/carbon/monkey - unarmed_type = /datum/unarmed_attack/punch + unarmed_type = list(/datum/unarmed_attack/punch, /datum/unarmed_attack/bite) flags = HAS_SKIN_TONE | HAS_LIPS | HAS_UNDERWEAR | HAS_EYE_COLOR @@ -221,8 +221,7 @@ deform = 'icons/mob/human_races/r_def_lizard.dmi' language = "Sinta'unathi" tail = "sogtail" - unarmed_type = /datum/unarmed_attack/claws - secondary_unarmed_type = /datum/unarmed_attack/bite/sharp + unarmed_type = list(/datum/unarmed_attack/claws, /datum/unarmed_attack/bite/sharp) primitive = /mob/living/carbon/monkey/unathi darksight = 3 gluttonous = 1 @@ -249,8 +248,7 @@ deform = 'icons/mob/human_races/r_def_tajaran.dmi' language = "Siik'tajr" tail = "tajtail" - unarmed_type = /datum/unarmed_attack/claws - secondary_unarmed_type = /datum/unarmed_attack/bite/sharp + unarmed_type = list(/datum/unarmed_attack/claws, /datum/unarmed_attack/bite/sharp) darksight = 8 cold_level_1 = 200 //Default 260 @@ -276,7 +274,7 @@ eyes = "skrell_eyes_s" language = "Skrellian" primitive = /mob/living/carbon/monkey/skrell - unarmed_type = /datum/unarmed_attack/punch + unarmed_type = list(/datum/unarmed_attack/punch) flags = IS_WHITELISTED | HAS_LIPS | HAS_UNDERWEAR | HAS_SKIN_COLOR @@ -292,8 +290,7 @@ deform = 'icons/mob/human_races/r_def_vox.dmi' default_language = "Vox-pidgin" language = "Galactic Common" - unarmed_type = /datum/unarmed_attack/claws/strong - secondary_unarmed_type = /datum/unarmed_attack/bite/strong + unarmed_type = list(/datum/unarmed_attack/claws/strong, /datum/unarmed_attack/bite/strong) rarity_value = 2 speech_sounds = list('sound/voice/shriek1.ogg') @@ -380,8 +377,7 @@ icobase = 'icons/mob/human_races/r_diona.dmi' deform = 'icons/mob/human_races/r_def_plant.dmi' language = "Rootspeak" - unarmed_type = /datum/unarmed_attack/diona - secondary_unarmed_type = null //Does a walking mass of dionaea even have jaws, as we understand them? + unarmed_type = list(/datum/unarmed_attack/diona) primitive = /mob/living/carbon/alien/diona slowdown = 7 rarity_value = 3 @@ -447,8 +443,7 @@ icobase = 'icons/mob/human_races/r_machine.dmi' deform = 'icons/mob/human_races/r_machine.dmi' language = "Tradeband" - unarmed_type = /datum/unarmed_attack/punch - secondary_unarmed_type = null + unarmed_type = list(/datum/unarmed_attack/punch) rarity_value = 2 eyes = "blank_eyes" diff --git a/code/modules/mob/living/carbon/human/unarmed_attack.dm b/code/modules/mob/living/carbon/human/unarmed_attack.dm index f381cfd6a17..45bd0a70d87 100644 --- a/code/modules/mob/living/carbon/human/unarmed_attack.dm +++ b/code/modules/mob/living/carbon/human/unarmed_attack.dm @@ -9,7 +9,7 @@ var/sharp = 0 var/edge = 0 -/datum/unarmed_attack/proc/is_usable(var/mob/living/carbon/human/user) +/datum/unarmed_attack/proc/is_usable(var/mob/living/carbon/human/user, var/mob/living/carbon/human/victim) if(user.restrained()) return 0 @@ -91,7 +91,7 @@ sharp = 1 edge = 1 -/datum/unarmed_attack/bite/is_usable(var/mob/living/carbon/human/user) +/datum/unarmed_attack/bite/is_usable(var/mob/living/carbon/human/user, var/mob/living/carbon/human/victim) if (user.wear_mask && istype(user.wear_mask, /obj/item/clothing/mask/muzzle)) return 0 return 1 diff --git a/code/modules/mob/living/carbon/monkey/monkey.dm b/code/modules/mob/living/carbon/monkey/monkey.dm index fba2447b40a..959643efa7a 100644 --- a/code/modules/mob/living/carbon/monkey/monkey.dm +++ b/code/modules/mob/living/carbon/monkey/monkey.dm @@ -146,7 +146,15 @@ help_shake_act(M) else if (M.a_intent == "hurt") - var/datum/unarmed_attack/attack = M.species.unarmed + var/datum/unarmed_attack/attack = null + for(var/datum/unarmed_attack/u_attack in M.species.unarmed) + if(!u_attack.is_usable(M, src)) + continue + else + attack = u_attack + break + if(!attack) + return 0 if ((prob(75) && health > 0)) visible_message("\red [M] [pick(attack.attack_verb)]ed [src]!") @@ -284,4 +292,4 @@ message = capitalize(trim_left(message)) - ..(message, speaking, verb, alt_name, italics, message_range, used_radios) + ..(message, speaking, verb, alt_name, italics, message_range, used_radios)