From 4065dcb7e266b14e8dbcabfb6778435d265a4e40 Mon Sep 17 00:00:00 2001 From: Hubblenaut Date: Mon, 15 Dec 2014 22:17:18 +0100 Subject: [PATCH] Fixes, fixes, and more fixes --- .../carbon/human/alien/alien_species.dm | 2 +- .../living/carbon/human/human_attackhand.dm | 29 ++++++++-------- .../mob/living/carbon/human/species.dm | 34 +++++++++---------- .../mob/living/carbon/human/unarmed_attack.dm | 25 +++++++------- .../mob/living/carbon/monkey/monkey.dm | 4 +-- 5 files changed, 46 insertions(+), 48 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 893e28b41d..3e6fada92c 100644 --- a/code/modules/mob/living/carbon/human/alien/alien_species.dm +++ b/code/modules/mob/living/carbon/human/alien/alien_species.dm @@ -5,7 +5,7 @@ default_language = "Xenomorph" language = "Hivemind" - unarmed_type = list(/datum/unarmed_attack/claws/strong, /datum/unarmed_attack/bite/strong) + unarmed_types = 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 32751ec824..9e20c29d0e 100644 --- a/code/modules/mob/living/carbon/human/human_attackhand.dm +++ b/code/modules/mob/living/carbon/human/human_attackhand.dm @@ -94,7 +94,7 @@ attack_generic(H,rand(1,3),"punched") return - var/damage = rand(1, 5) + var/rand_damage = rand(1, 5) var/block = 0 var/accurate = 0 var/hit_zone = H.zone_sel.selecting @@ -103,7 +103,7 @@ switch(src.a_intent) if("help") // We didn't see this coming, so we get the full blow - damage = 5 + rand_damage = 5 accurate = 1 if("hurt", "grab") // We're in a fighting stance, there's a chance we block @@ -112,7 +112,7 @@ if (M.grabbed_by.len) // Someone got a good grip on them, they won't be able to do much damage - damage = max(1, damage - 2) + rand_damage = max(1, rand_damage - 2) if(src.grabbed_by.len || src.buckled || !src.canmove || src==H) accurate = 1 // certain circumstances make it impossible for us to evade punches @@ -152,10 +152,8 @@ attack_message = "[H] attempted to strike [src], but missed!" else attack_message = "[H] attempted to strike [src], but \he rolled out of the way!" - src.dir = pick(1, 2, 4, 8) + src.set_dir(pick(cardinal)) miss_type = 1 - else - hit_zone = ran_zone(hit_zone) if(!miss_type && block) attack_message = "[H] went for [src]'s [affecting.display_name] but was blocked!" @@ -163,7 +161,7 @@ // See what attack they use var/datum/unarmed_attack/attack = null - for(var/datum/unarmed_attack/u_attack in H.species.unarmed) + for(var/datum/unarmed_attack/u_attack in H.species.unarmed_attacks) if(!u_attack.is_usable(H, src, hit_zone)) continue else @@ -173,7 +171,7 @@ return 0 if(!attack_message) - attack.show_attack(H, src, hit_zone, damage) + attack.show_attack(H, src, hit_zone, rand_damage) else H.visible_message("[attack_message]") @@ -185,18 +183,21 @@ if(miss_type) return 0 - damage += attack.damage // Adding species attack base damage - damage *= damage_multiplier + var/real_damage = rand_damage + real_damage += attack.damage // Adding species attack base damage + real_damage *= damage_multiplier + rand_damage *= damage_multiplier if(HULK in H.mutations) - damage *= 2 // Hulks do twice the damage - damage = max(1, damage) + real_damage *= 2 // Hulks do twice the damage + rand_damage *= 2 + real_damage = max(1, real_damage) var/armour = run_armor_check(affecting, "melee") // Apply additional unarmed effects. - attack.apply_effects(H,src,armour,damage,hit_zone) + attack.apply_effects(H, src, armour, rand_damage, hit_zone) // Finally, apply damage to target - apply_damage(damage, BRUTE, affecting, armour, sharp=attack.sharp, edge=attack.edge) + apply_damage(real_damage, BRUTE, affecting, armour, sharp=attack.sharp, edge=attack.edge) if("disarm") M.attack_log += text("\[[time_stamp()]\] Disarmed [src.name] ([src.ckey])") diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm index da26c606c3..0409cdfc1b 100644 --- a/code/modules/mob/living/carbon/human/species.dm +++ b/code/modules/mob/living/carbon/human/species.dm @@ -14,14 +14,13 @@ 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/list/unarmed_attacks = null // For empty hand harm-intent attack 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 = list(/datum/unarmed_attack, /datum/unarmed_attack/bite) + var/list/unarmed_types = 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. @@ -97,9 +96,9 @@ else hud = new() - unarmed = list() - for(var/u_type in unarmed_type) - unarmed += new u_type() + unarmed_attacks = list() + for(var/u_type in unarmed_types) + unarmed_attacks += new u_type() /datum/species/proc/create_organs(var/mob/living/carbon/human/H) //Handles creation of mob organs. @@ -207,7 +206,7 @@ name_plural = "Humans" language = "Sol Common" primitive = /mob/living/carbon/monkey - unarmed_type = list(/datum/unarmed_attack/stomp, /datum/unarmed_attack/kick, /datum/unarmed_attack/punch, /datum/unarmed_attack/bite) + unarmed_types = list(/datum/unarmed_attack/stomp, /datum/unarmed_attack/kick, /datum/unarmed_attack/punch, /datum/unarmed_attack/bite) flags = HAS_SKIN_TONE | HAS_LIPS | HAS_UNDERWEAR | HAS_EYE_COLOR @@ -221,7 +220,7 @@ deform = 'icons/mob/human_races/r_def_lizard.dmi' language = "Sinta'unathi" tail = "sogtail" - unarmed_type = list(/datum/unarmed_attack/stomp, /datum/unarmed_attack/kick, /datum/unarmed_attack/claws, /datum/unarmed_attack/bite/sharp) + unarmed_types = list(/datum/unarmed_attack/stomp, /datum/unarmed_attack/kick, /datum/unarmed_attack/claws, /datum/unarmed_attack/bite/sharp) primitive = /mob/living/carbon/monkey/unathi darksight = 3 gluttonous = 1 @@ -248,7 +247,7 @@ deform = 'icons/mob/human_races/r_def_tajaran.dmi' language = "Siik'tajr" tail = "tajtail" - unarmed_type = list(/datum/unarmed_attack/stomp, /datum/unarmed_attack/kick, /datum/unarmed_attack/claws, /datum/unarmed_attack/bite/sharp) + unarmed_types = list(/datum/unarmed_attack/stomp, /datum/unarmed_attack/kick, /datum/unarmed_attack/claws, /datum/unarmed_attack/bite/sharp) darksight = 8 cold_level_1 = 200 //Default 260 @@ -274,7 +273,7 @@ eyes = "skrell_eyes_s" language = "Skrellian" primitive = /mob/living/carbon/monkey/skrell - unarmed_type = list(/datum/unarmed_attack/punch) + unarmed_types = list(/datum/unarmed_attack/punch) flags = IS_WHITELISTED | HAS_LIPS | HAS_UNDERWEAR | HAS_SKIN_COLOR @@ -290,7 +289,7 @@ deform = 'icons/mob/human_races/r_def_vox.dmi' default_language = "Vox-pidgin" language = "Galactic Common" - unarmed_type = list(/datum/unarmed_attack/stomp, /datum/unarmed_attack/kick, /datum/unarmed_attack/claws/strong, /datum/unarmed_attack/bite/strong) + unarmed_types = list(/datum/unarmed_attack/stomp, /datum/unarmed_attack/kick, /datum/unarmed_attack/claws/strong, /datum/unarmed_attack/bite/strong) rarity_value = 2 speech_sounds = list('sound/voice/shriek1.ogg') @@ -377,7 +376,7 @@ icobase = 'icons/mob/human_races/r_diona.dmi' deform = 'icons/mob/human_races/r_def_plant.dmi' language = "Rootspeak" - unarmed_type = list(/datum/unarmed_attack/stomp, /datum/unarmed_attack/kick, /datum/unarmed_attack/diona) + unarmed_types = list(/datum/unarmed_attack/stomp, /datum/unarmed_attack/kick, /datum/unarmed_attack/diona) primitive = /mob/living/carbon/alien/diona slowdown = 7 rarity_value = 3 @@ -443,7 +442,7 @@ icobase = 'icons/mob/human_races/r_machine.dmi' deform = 'icons/mob/human_races/r_machine.dmi' language = "Tradeband" - unarmed_type = list(/datum/unarmed_attack/punch) + unarmed_types = list(/datum/unarmed_attack/punch) rarity_value = 2 eyes = "blank_eyes" @@ -479,11 +478,10 @@ if(H.a_intent != "hurt") return 0 - if(unarmed.is_usable(H)) - if(unarmed.shredding) - return 1 - else if(secondary_unarmed.is_usable(H)) - if(secondary_unarmed.shredding) + for(var/datum/unarmed_attack/attack in unarmed_attacks) + if(!attack.is_usable(H)) + continue + if(attack.shredding) return 1 return 0 diff --git a/code/modules/mob/living/carbon/human/unarmed_attack.dm b/code/modules/mob/living/carbon/human/unarmed_attack.dm index e644afdebb..3986c39a44 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, var/mob/living/carbon/human/target, var/zone) +/datum/unarmed_attack/proc/is_usable(var/mob/living/carbon/human/user) if(user.restrained()) return 0 @@ -28,9 +28,6 @@ var/stun_chance = rand(0, 100) - // Reduce effective damage to normalize stun chance across species. - attack_damage = min(1,attack_damage - damage) - if(attack_damage >= 5 && armour < 2 && !(target == user) && stun_chance <= attack_damage * 5) // 25% standard chance switch(zone) // strong punches can have effects depending on where they hit if("head", "mouth", "eyes") @@ -49,12 +46,14 @@ target.drop_r_hand() if("chest") if(!target.lying) - target.visible_message("[pick("[target] was sent flying backward!", "[target] staggers back from the impact!")]") - var/turf/T = step(src, get_dir(get_turf(user), get_turf(target))) - if(T.density) // This will need to be expanded to check for structures etc. - target.visible_message("[target] slams into [T]!") + var/turf/T = get_step(get_turf(target), get_dir(get_turf(user), get_turf(target))) + if(!T.density) + step(target, get_dir(get_turf(user), get_turf(target))) + target.visible_message("[pick("[target] was sent flying backward!", "[target] staggers back from the impact!")]") else - target.loc = T + target.visible_message("[target] slams into [T]!") + if(prob(50)) + target.set_dir(reverse_dir[target.dir]) target.apply_effect(attack_damage * 0.4, WEAKEN, armour) if("groin") target.visible_message("[target] looks like \he is in pain!", "[(target.gender=="female") ? "Oh god that hurt!" : "Oh no, not your[pick("testicles", "crown jewels", "clockweights", "family jewels", "marbles", "bean bags", "teabags", "sweetmeats", "goolies")]!"]") @@ -63,9 +62,9 @@ if(!target.lying) target.visible_message("[src] gives way slightly.") target.apply_effect(attack_damage*3, AGONY, armour) - else if(attack_damage >= 5 && !(target == user) && (stun_chance + attack_damage) * 5 >= 100 && armour < 2) // Chance to get the usual throwdown as well (25% standard chance) + else if(attack_damage >= 5 && !(target == user) && (stun_chance + attack_damage * 5 >= 100) && armour < 2) // Chance to get the usual throwdown as well (25% standard chance) if(!target.lying) - target.visible_message("[pick("slumps", "falls", "drops")] down to the ground!") + target.visible_message("[target] [pick("slumps", "falls", "drops")] down to the ground!") else target.visible_message("[target] has been weakened!") target.apply_effect(3, WEAKEN, armour) @@ -94,7 +93,7 @@ /datum/unarmed_attack/bite/is_usable(var/mob/living/carbon/human/user, var/mob/living/carbon/human/target, var/zone) if (user.wear_mask && istype(user.wear_mask, /obj/item/clothing/mask/muzzle)) return 0 - if (zone == "head" || zone == "eyes" || zone == "mouth") + if (user == target && (zone == "head" || zone == "eyes" || zone == "mouth")) return 0 return 1 @@ -140,7 +139,7 @@ if (target.legcuffed) return 0 - if(!(zone == "l_leg" || zone == "r_leg" || zone == "l_foot" || zone == "r_foot" || zone == "groin")) + if(!(zone in list("l_leg", "r_leg", "l_foot", "r_foot", "groin"))) return 0 var/datum/organ/external/E = user.organs_by_name["l_foot"] diff --git a/code/modules/mob/living/carbon/monkey/monkey.dm b/code/modules/mob/living/carbon/monkey/monkey.dm index 959643efa7..a45106b7e0 100644 --- a/code/modules/mob/living/carbon/monkey/monkey.dm +++ b/code/modules/mob/living/carbon/monkey/monkey.dm @@ -147,7 +147,7 @@ else if (M.a_intent == "hurt") var/datum/unarmed_attack/attack = null - for(var/datum/unarmed_attack/u_attack in M.species.unarmed) + for(var/datum/unarmed_attack/u_attack in M.species.unarmed_attacks) if(!u_attack.is_usable(M, src)) continue else @@ -156,7 +156,7 @@ if(!attack) return 0 if ((prob(75) && health > 0)) - visible_message("\red [M] [pick(attack.attack_verb)]ed [src]!") + visible_message("\red [M] [pick(attack.attack_verb)] [src]!") playsound(loc, "punch", 25, 1, -1) var/damage = rand(5, 10)