From 3a4b5d415eb6c31a14710c3bb99f9d09ea3a6fba Mon Sep 17 00:00:00 2001 From: forest2001 Date: Sat, 29 Jul 2023 20:11:05 +0100 Subject: [PATCH 01/17] scythe bleed --- code/modules/cm_preds/yaut_weapons.dm | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/code/modules/cm_preds/yaut_weapons.dm b/code/modules/cm_preds/yaut_weapons.dm index fbbe6c183aaa..ab8d142e9dfa 100644 --- a/code/modules/cm_preds/yaut_weapons.dm +++ b/code/modules/cm_preds/yaut_weapons.dm @@ -216,11 +216,20 @@ xenomorph.interference = 15 if(prob(15)) - user.visible_message(SPAN_DANGER("An opening in combat presents itself!"),SPAN_DANGER("You manage to strike at your foe once more!")) - user.spin(5, 1) - ..() //Do it again! CRIT! This will be replaced by a bleed effect. + if(isxeno(target)) + user.visible_message(SPAN_DANGER("An opening in combat presents itself!"),SPAN_DANGER("You manage to strike at your foe once more!")) + user.spin(5, 1) + ..() + return - return + if(ishuman(target)) + user.visible_message(SPAN_DANGER("An opening in combat presents itself!"),SPAN_DANGER("You manage to carve a deep cut on your opponent!")) + user.spin(5, 1) + var/mob/living/carbon/human/human_target = target + var/obj/limb/target_limb = human_target.get_limb(check_zone(user.zone_selected)) + var/datum/wound/new_wound = target_limb.createwound(CUT, (force / 2)) + target_limb.add_bleeding(new_wound, FALSE, 10) + return /obj/item/weapon/yautja/scythe/alt name = "double war scythe" From 374968a0870164711442ae24251a805221335b3f Mon Sep 17 00:00:00 2001 From: forest2001 Date: Wed, 2 Aug 2023 00:58:39 +0100 Subject: [PATCH 02/17] unique_action suuuuuucks --- code/_onclick/hud/screen_objects.dm | 2 +- code/datums/keybinding/human_combat.dm | 2 +- code/game/objects/items/weapons/weapon.dm | 6 ++ code/modules/cm_preds/yaut_weapons.dm | 69 +++++++++++++++-------- code/modules/projectiles/gun.dm | 1 + code/modules/projectiles/gun_helpers.dm | 22 ++++---- 6 files changed, 65 insertions(+), 37 deletions(-) diff --git a/code/_onclick/hud/screen_objects.dm b/code/_onclick/hud/screen_objects.dm index 9643d0f652ae..982ef68b128a 100644 --- a/code/_onclick/hud/screen_objects.dm +++ b/code/_onclick/hud/screen_objects.dm @@ -283,7 +283,7 @@ return 1 if("Use unique action") - var/obj/item/weapon/gun/held_item = user.get_held_item() + var/obj/item/weapon/held_item = user.get_held_item() if(istype(held_item)) held_item.use_unique_action() return 1 diff --git a/code/datums/keybinding/human_combat.dm b/code/datums/keybinding/human_combat.dm index 003fba3b00bd..f8f639cdaf60 100644 --- a/code/datums/keybinding/human_combat.dm +++ b/code/datums/keybinding/human_combat.dm @@ -102,7 +102,7 @@ if(.) return var/mob/living/carbon/human/human = user.mob - var/obj/item/weapon/gun/held_item = human.get_held_item() + var/obj/item/weapon/held_item = human.get_held_item() held_item.use_unique_action() return TRUE diff --git a/code/game/objects/items/weapons/weapon.dm b/code/game/objects/items/weapons/weapon.dm index 3d53dfb86b73..34d04b9cff65 100644 --- a/code/game/objects/items/weapons/weapon.dm +++ b/code/game/objects/items/weapons/weapon.dm @@ -3,6 +3,12 @@ name = "weapon" icon = 'icons/obj/items/weapons/weapons.dmi' hitsound = "swing_hit" + var/has_unique_action = FALSE + +/obj/item/weapon/Initialize(mapload, ...) + . = ..() + if(!has_unique_action) + verbs -= /obj/item/weapon/verb/use_unique_action /obj/item/get_examine_text(mob/user) . = ..() diff --git a/code/modules/cm_preds/yaut_weapons.dm b/code/modules/cm_preds/yaut_weapons.dm index ab8d142e9dfa..25cb0087fede 100644 --- a/code/modules/cm_preds/yaut_weapons.dm +++ b/code/modules/cm_preds/yaut_weapons.dm @@ -2,6 +2,20 @@ #define FLAY_STAGE_STRIP 2 #define FLAY_STAGE_SKIN 3 +#define ABILITY_COST_DEFAULT 1 +#define ABILITY_COST_CHAIN 0 +#define ABILITY_COST_SCYTHE 5 +#define ABILITY_COST_SWORD 0 +#define ABILITY_COST_GLAIVE 0 + +#define ABILITY_CHARGE_SMALL 0.5 +#define ABILITY_CHARGE_NORMAL 1 +#define ABILITY_CHARGE_LARGE 2 + +#define ABILITY_MAX_SMALL 1 +#define ABILITY_MAX_DEFAULT 2 +#define ABILITY_MAX_LARGE 5 + /*######################################### ########### Weapon Reused Procs ########### #########################################*/ @@ -141,6 +155,12 @@ ) var/human_adapted = FALSE + ///The amount of charges towards use of special abilities. + var/ability_charge = 0 + var/ability_charge_max = ABILITY_MAX_DEFAULT + var/ability_charge_rate = ABILITY_CHARGE_NORMAL + var/ability_cost = ABILITY_COST_DEFAULT + /obj/item/weapon/yautja/chain name = "chainwhip" desc = "A segmented, lightweight whip made of durable, acid-resistant metal. Not very common among Yautja Hunters, but still a dangerous weapon capable of shredding prey." @@ -209,6 +229,10 @@ attack_verb = list("slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") unacidable = TRUE + ability_cost = ABILITY_COST_SCYTHE + ability_charge_max = ABILITY_COST_SCYTHE + ability_charge_rate = ABILITY_CHARGE_NORMAL + /obj/item/weapon/yautja/scythe/attack(mob/living/target as mob, mob/living/carbon/human/user as mob) ..() if((human_adapted || isyautja(user)) && isxeno(target)) @@ -242,6 +266,7 @@ name = "combi-stick" desc = "A compact yet deadly personal weapon. Can be concealed when folded. Functions well as a throwing weapon or defensive tool. A common sight in Yautja packs due to its versatility." icon_state = "combistick" + has_unique_action = TRUE flags_atom = FPRINT|CONDUCT flags_equip_slot = SLOT_BACK flags_item = TWOHANDED|ITEM_PREDATOR @@ -257,33 +282,29 @@ hitsound = 'sound/weapons/bladeslice.ogg' attack_verb = list("speared", "stabbed", "impaled") - var/on = 1 - var/charged + var/on = TRUE var/force_wielded = MELEE_FORCE_TIER_6 var/force_unwielded = MELEE_FORCE_TIER_2 var/force_storage = MELEE_FORCE_TIER_1 + ability_cost = ABILITY_COST_DEFAULT + ability_charge_max = ABILITY_MAX_DEFAULT + ability_charge_rate = ABILITY_CHARGE_SMALL + /obj/item/weapon/yautja/combistick/try_to_throw(mob/living/user) - if(!charged) + if(ability_charge < ability_cost) to_chat(user, SPAN_WARNING("Your combistick refuses to leave your hand. You must charge it with blood from prey before throwing it.")) return FALSE - charged = FALSE - remove_filter("combistick_charge") + ability_charge -= ability_cost + if(ability_charge < ability_cost) + remove_filter("combistick_charge") unwield(user) //Otherwise stays wielded even when thrown return TRUE - /obj/item/weapon/yautja/combistick/IsShield() return on -/obj/item/weapon/yautja/combistick/verb/use_unique_action() - set category = "Weapons" - set name = "Unique Action" - set desc = "Activate or deactivate the combistick." - set src in usr - unique_action(usr) - /obj/item/weapon/yautja/combistick/attack_self(mob/user) ..() if(on) @@ -376,13 +397,15 @@ if(isanimal(target)) return - if(!charged) - to_chat(user, SPAN_DANGER("Your combistick's reservoir fills up with your opponent's blood! You may now throw it!")) - charged = TRUE - var/color = target.get_blood_color() - var/alpha = 70 - color += num2text(alpha, 2, 16) - add_filter("combistick_charge", 1, list("type" = "outline", "color" = color, "size" = 2)) + if((ability_charge < ability_charge_max)) + to_chat(user, SPAN_DANGER("Your combistick's reservoir fills up with your opponent's blood!")) + ability_charge += ability_charge_rate + if(ability_charge > ability_cost) + to_chat(user, SPAN_DANGER("You may now throw your combistick!")) + var/color = target.get_blood_color() + var/alpha = 70 + color += num2text(alpha, 2, 16) + add_filter("combistick_charge", 1, list("type" = "outline", "color" = color, "size" = 2)) /obj/item/weapon/yautja/combistick/attack_hand(mob/user) //Prevents marines from instantly picking it up via pickup macros. if(!human_adapted && !HAS_TRAIT(user, TRAIT_SUPER_STRONG)) @@ -747,6 +770,7 @@ var/last_regen flags_gun_features = GUN_UNUSUAL_DESIGN flags_item = ITEM_PREDATOR|TWOHANDED + has_unique_action = FALSE /obj/item/weapon/gun/launcher/spike/process() if(spikes < max_spikes && world.time > last_regen + 100 && prob(70)) @@ -762,7 +786,6 @@ verbs -= /obj/item/weapon/gun/verb/field_strip verbs -= /obj/item/weapon/gun/verb/use_toggle_burst verbs -= /obj/item/weapon/gun/verb/empty_mag - verbs -= /obj/item/weapon/gun/verb/use_unique_action /obj/item/weapon/gun/launcher/spike/set_gun_config_values() ..() @@ -846,6 +869,7 @@ var/last_regen = 0 flags_gun_features = GUN_UNUSUAL_DESIGN flags_item = ITEM_PREDATOR + has_unique_action = FALSE /obj/item/weapon/gun/energy/yautja/plasmarifle/Initialize(mapload, spawn_empty) . = ..() @@ -856,7 +880,6 @@ verbs -= /obj/item/weapon/gun/verb/field_strip verbs -= /obj/item/weapon/gun/verb/use_toggle_burst verbs -= /obj/item/weapon/gun/verb/empty_mag - verbs -= /obj/item/weapon/gun/verb/use_unique_action /obj/item/weapon/gun/energy/yautja/plasmarifle/process() if(charge_time < 100) @@ -954,7 +977,6 @@ verbs -= /obj/item/weapon/gun/verb/empty_mag - /obj/item/weapon/gun/energy/yautja/plasmapistol/Destroy() . = ..() STOP_PROCESSING(SSobj, src) @@ -967,7 +989,6 @@ if(ismob(loc)) to_chat(loc, SPAN_NOTICE("[src] hums as it achieves maximum charge.")) - /obj/item/weapon/gun/energy/yautja/plasmapistol/set_gun_config_values() ..() set_fire_delay(FIRE_DELAY_TIER_7) diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm index 54e066e05544..c45f8f620243 100644 --- a/code/modules/projectiles/gun.dm +++ b/code/modules/projectiles/gun.dm @@ -7,6 +7,7 @@ icon = 'icons/obj/items/weapons/guns/guns_by_faction/uscm.dmi' icon_state = "" item_state = "gun" + has_unique_action = TRUE pickup_sound = "gunequip" drop_sound = "gunrustle" pickupvol = 7 diff --git a/code/modules/projectiles/gun_helpers.dm b/code/modules/projectiles/gun_helpers.dm index a60773c88be7..53c641718f6f 100644 --- a/code/modules/projectiles/gun_helpers.dm +++ b/code/modules/projectiles/gun_helpers.dm @@ -768,19 +768,19 @@ DEFINES in setup.dm, referenced here. unload(user, FALSE, drop_to_ground) //We want to drop the mag on the ground. -/obj/item/weapon/gun/verb/use_unique_action() +/obj/item/weapon/verb/use_unique_action() set category = "Weapons" set name = "Unique Action" - set desc = "Use anything unique your firearm is capable of. Includes pumping a shotgun or spinning a revolver. If you have an active attachment, this will activate on the attachment instead." - set src = usr.contents - - var/obj/item/weapon/gun/active_firearm = get_active_firearm(usr) - if(!active_firearm) - return - if(active_firearm.active_attachable) - src = active_firearm.active_attachable - else - src = active_firearm + set desc = "Use anything unique your weapon is capable of. Includes pumping a shotgun or spinning a revolver. If you have an active gun attachment, this will activate on the attachment instead." + set src in usr + + var/obj/item/weapon/gun/active_firearm = src + if(istype(active_firearm)) + active_firearm.get_active_firearm(usr) + if(active_firearm.active_attachable) + src = active_firearm.active_attachable + else + src = active_firearm unique_action(usr) From c19b842a698aa8b28aa6931014465bf105debbda Mon Sep 17 00:00:00 2001 From: forest2001 Date: Wed, 2 Aug 2023 16:10:24 +0100 Subject: [PATCH 03/17] scythe ability --- code/modules/cm_preds/yaut_weapons.dm | 127 +++++++++++------- code/modules/projectiles/gun_helpers.dm | 12 +- .../humans/onmob/hunter/items_lefthand.dmi | Bin 7540 -> 7695 bytes .../humans/onmob/hunter/items_righthand.dmi | Bin 7432 -> 7573 bytes 4 files changed, 87 insertions(+), 52 deletions(-) diff --git a/code/modules/cm_preds/yaut_weapons.dm b/code/modules/cm_preds/yaut_weapons.dm index 25cb0087fede..9b25752a048d 100644 --- a/code/modules/cm_preds/yaut_weapons.dm +++ b/code/modules/cm_preds/yaut_weapons.dm @@ -154,12 +154,44 @@ WEAR_R_HAND = 'icons/mob/humans/onmob/hunter/items_righthand.dmi' ) var/human_adapted = FALSE + ///The amount this weapon interrupts hivemind link on Xenomorphs. + var/xeno_interfere_amount = 30 ///The amount of charges towards use of special abilities. var/ability_charge = 0 var/ability_charge_max = ABILITY_MAX_DEFAULT var/ability_charge_rate = ABILITY_CHARGE_NORMAL var/ability_cost = ABILITY_COST_DEFAULT + ///Whether the ability is ready to trigger + var/ability_primed = FALSE + + +/obj/item/weapon/yautja/dropped() + if(ability_primed) + ability_primed = FALSE + ..() + +/obj/item/weapon/yautja/attack(mob/living/target, mob/living/carbon/human/user) + . = ..() + if(!.) + return + if((human_adapted || isspeciesyautja(user)) && isxeno(target)) + var/mob/living/carbon/xenomorph/xenomorph = target + xenomorph.interference = xeno_interfere_amount + + if(target == user || target.stat == DEAD || isanimal(target)) + to_chat(user, SPAN_DANGER("You think you're smart?")) //very funny + return + + if(ability_charge < ability_charge_max) + ability_charge += ability_charge_rate + +/obj/item/weapon/yautja/unique_action(mob/user) + if(user.get_active_hand() != src) + return FALSE + if(ability_charge < ability_cost) + to_chat(user, SPAN_WARNING("The blood reservoir is not full enough to do this!")) + return FALSE /obj/item/weapon/yautja/chain name = "chainwhip" @@ -183,9 +215,6 @@ /obj/item/weapon/yautja/chain/attack(mob/target, mob/living/user) . = ..() - if((human_adapted || isyautja(user)) && isxeno(target)) - var/mob/living/carbon/xenomorph/xenomorph = target - xenomorph.interference = 30 /obj/item/weapon/yautja/sword name = "clan sword" @@ -205,12 +234,6 @@ attack_speed = 1 SECONDS unacidable = TRUE -/obj/item/weapon/yautja/sword/attack(mob/target, mob/living/user) - . = ..() - if((human_adapted || isyautja(user)) && isxeno(target)) - var/mob/living/carbon/xenomorph/xenomorph = target - xenomorph.interference = 30 - /obj/item/weapon/yautja/scythe name = "dual war scythe" desc = "A huge, incredibly sharp dual blade used for hunting dangerous prey. This weapon is commonly carried by Yautja who wish to disable and slice apart their foes." @@ -228,6 +251,7 @@ hitsound = 'sound/weapons/bladeslice.ogg' attack_verb = list("slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") unacidable = TRUE + has_unique_action = TRUE ability_cost = ABILITY_COST_SCYTHE ability_charge_max = ABILITY_COST_SCYTHE @@ -235,25 +259,53 @@ /obj/item/weapon/yautja/scythe/attack(mob/living/target as mob, mob/living/carbon/human/user as mob) ..() - if((human_adapted || isyautja(user)) && isxeno(target)) - var/mob/living/carbon/xenomorph/xenomorph = target - xenomorph.interference = 15 + if(ability_charge >= ability_cost) + var/color = BLOOD_COLOR_HUMAN + var/alpha = 70 + color += num2text(alpha, 2, 16) + add_filter("scythe_ready", 1, list("type" = "outline", "color" = color, "size" = 2)) - if(prob(15)) - if(isxeno(target)) - user.visible_message(SPAN_DANGER("An opening in combat presents itself!"),SPAN_DANGER("You manage to strike at your foe once more!")) - user.spin(5, 1) - ..() - return +/obj/item/weapon/yautja/scythe/attack_self(mob/user) + ..() + ability_primed = !ability_primed + var/message = "You tighten your grip on [src], preparing to whirl it in a spin." + if(!ability_primed) + message = "You relax your grip on [src]." + to_chat(user, SPAN_WARNING(message)) - if(ishuman(target)) - user.visible_message(SPAN_DANGER("An opening in combat presents itself!"),SPAN_DANGER("You manage to carve a deep cut on your opponent!")) - user.spin(5, 1) - var/mob/living/carbon/human/human_target = target - var/obj/limb/target_limb = human_target.get_limb(check_zone(user.zone_selected)) - var/datum/wound/new_wound = target_limb.createwound(CUT, (force / 2)) - target_limb.add_bleeding(new_wound, FALSE, 10) - return +/obj/item/weapon/yautja/scythe/unique_action(mob/user) + . = ..() + if(!.) + return + + if(!ability_primed) + to_chat(user, SPAN_WARNING("You need a stronger grip for this!")) + return FALSE + user.spin_circle(2) + for(var/mob/living/carbon/target in orange(1, user)) + if(!isxeno_human(target) || isyautja(target)) + continue + + if(target.stat == DEAD) + continue + + if(!check_clear_path_to_target(user, target)) + continue + + user.visible_message(SPAN_HIGHDANGER("[user] slices open the guts of [target]!"), SPAN_HIGHDANGER("You slice open the guts of [target]!")) + target.spawn_gibs() + playsound(get_turf(target), 'sound/effects/gibbed.ogg', 30, 1) + target.apply_effect(get_xeno_stun_duration(target, 1), WEAKEN) + target.apply_armoured_damage(get_xeno_damage_slash(target, (force * 1.5)), ARMOR_MELEE, BRUTE, "chest", 40) + + user.attack_log += text("\[[time_stamp()]\] [key_name(user)] sliced [key_name(target)] with their whirling scythe.") + target.attack_log += text("\[[time_stamp()]\] [key_name(target)] was sliced by [key_name(user)] whirling their scythe.") + log_attack("[key_name(target)] was sliced by [key_name(user)] whirling their scythe.") + + ability_charge -= ability_cost + ability_primed = FALSE + remove_filter("scythe_ready") + return TRUE /obj/item/weapon/yautja/scythe/alt name = "double war scythe" @@ -387,20 +439,11 @@ . = ..() if(!.) return - if((human_adapted || isspeciesyautja(user)) && isxeno(target)) - var/mob/living/carbon/xenomorph/xenomorph = target - xenomorph.interference = 30 - - if(target == user || target.stat == DEAD) - to_chat(user, SPAN_DANGER("You think you're smart?")) //very funny - return - if(isanimal(target)) - return if((ability_charge < ability_charge_max)) to_chat(user, SPAN_DANGER("Your combistick's reservoir fills up with your opponent's blood!")) ability_charge += ability_charge_rate - if(ability_charge > ability_cost) + if(ability_charge >= ability_cost) to_chat(user, SPAN_DANGER("You may now throw your combistick!")) var/color = target.get_blood_color() var/alpha = 70 @@ -716,14 +759,6 @@ attack_verb = list("sliced", "slashed", "carved", "diced", "gored") attack_speed = 14 //Default is 7. -/obj/item/weapon/twohanded/yautja/glaive/attack(mob/living/target, mob/living/carbon/human/user) - . = ..() - if(!.) - return - if((human_adapted || isyautja(user)) && isxeno(target)) - var/mob/living/carbon/xenomorph/xenomorph = target - xenomorph.interference = 30 - /obj/item/weapon/twohanded/yautja/glaive/alt icon_state = "glaive_alt" item_state = "glaive_alt" @@ -1042,7 +1077,7 @@ log_debug("Plasma Pistol refunded shot.") return TRUE -/obj/item/weapon/gun/energy/yautja/plasmapistol/use_unique_action() +/obj/item/weapon/gun/energy/yautja/plasmapistol/unique_action() switch(mode) if(FIRE_MODE_STANDARD) mode = FIRE_MODE_INCENDIARY @@ -1165,7 +1200,7 @@ to_chat(user, SPAN_NOTICE("[src] will now fire [strength].")) ammo = GLOB.ammo_list[/datum/ammo/energy/yautja/caster/bolt] -/obj/item/weapon/gun/energy/yautja/plasma_caster/use_unique_action() +/obj/item/weapon/gun/energy/yautja/plasma_caster/unique_action() switch(mode) if("stun") mode = "lethal" diff --git a/code/modules/projectiles/gun_helpers.dm b/code/modules/projectiles/gun_helpers.dm index 53c641718f6f..aa86b5b446fb 100644 --- a/code/modules/projectiles/gun_helpers.dm +++ b/code/modules/projectiles/gun_helpers.dm @@ -774,13 +774,13 @@ DEFINES in setup.dm, referenced here. set desc = "Use anything unique your weapon is capable of. Includes pumping a shotgun or spinning a revolver. If you have an active gun attachment, this will activate on the attachment instead." set src in usr - var/obj/item/weapon/gun/active_firearm = src - if(istype(active_firearm)) - active_firearm.get_active_firearm(usr) - if(active_firearm.active_attachable) - src = active_firearm.active_attachable + var/obj/item/weapon/current_weapon = src + if(isgun(current_weapon)) + var/obj/item/weapon/gun/firearm = current_weapon + if(firearm.active_attachable) + src = firearm.active_attachable else - src = active_firearm + src = firearm unique_action(usr) diff --git a/icons/mob/humans/onmob/hunter/items_lefthand.dmi b/icons/mob/humans/onmob/hunter/items_lefthand.dmi index f3379c469113fe940620032a822c0f09b630d57e..44d00a9634cf47e8da2b03fdfcc212b9a203f700 100644 GIT binary patch delta 7529 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 diff --git a/icons/mob/humans/onmob/hunter/items_righthand.dmi b/icons/mob/humans/onmob/hunter/items_righthand.dmi index fbca4cfed5bb0fe4046d3da4699ec00338161e1a..c26da80d04967ac0c4bdb3c7fa5472dbc43b1f61 100644 GIT binary patch delta 7413 zcmZ8`1yI~S@GtHZIjof8a1<|c6e#ZQ6pB-zNO35|?t4I?#i6)+afed$a4Xv4#ogWI z?$O_W{`20vog|ZFH?zC*+3aj4Uquo`V<_?3anMmvP|)rarD7SV$a;Glzvt7CldE&E zddR+Nu{HSH-ya*z0L;z)mR8mh5>sqzYfCYc21G zgC8`%qM(#Gsa6bcwL#D2D2~v>aFAOk4&R2rL;PjkUE8YmP>M@w5>UESW^es_1LCLpl-)sd1$SXx@v+S z(^3$^%gg(#sUk5kacF4BS6Sw*un09ZwUvP+6BAEyxY^Xy6c?95cU^iS^sR-31s*zz zvYe=}AeXT|piDtQWo&GWk59nC!C`7@s;H=lY*kc(a7;IRQBzan;^Oht=2ubCjB}Jy z;(rRJAtodwG=*7eHQcX=uMot|>O5wu9{2T}OovGe4 zY6`P=F0n7!3(~_mIR(VY=-X7KA^hC9xVVhZpR>}_5rG-#z>M@+h7xNq6D?krxI@%u zCfwZI1Ox=k%*+CGqI7h0oM6V6oGg!6zJ2>vLPCO_o!vn8H4P1oBtNU1C@(83E7uDq zUUp_|Y-~a-Oc@y&W;(jxo(3u}PWY8J$wgiX2y0roIiv!%kiF1bw3eI96;%Gh^D!z5GIL|-LKic&W8vKaKp33R>1Ary@LHK(=4fJey ze-fBk3i$Rh;fG7c{+F~p4Ht7Jq3F+ioqJrLpL8e3Gb<{bmcI5lSny0xP+RohaH#gc zwdIL$GH6olbg&kF^u{=u`D8n)t+qWc!M0D`g`v1-u)%eLW6dF`ViWg+1 zic)p8-kMEdpLT?Nssiv~Bv9(@RSm$k(e-`6WDh#?j`b1;Q1KLJnDlN8$H*}g3d&PC zC0QxmPw594p+I_%cb{2aSNwOc@DJ}W7_qbq2wA_eH+RH3e$cYwZVnaN{cbW)lLw3K zNZy9LdApR{B|lT+Nk$Ts*MyZ6{~4o5C79EF#@w>M1Nl4UY5_R&-%9baS@gPENPwCF z`I93jug^xDGrixx@o7oKd<6S{C}z0D``B#ISWBOFhkVErc{}vW(CuuHgZfxiBHTdsb+OlN3%vin+$XJ=MZH-bAyljhLr$$=6u{@2u59d8U%2|ze&l2Tn zkgGVL9-huocOQTDv}e_9PD``G3(1dI_`K=~-OxaskIqlqz*m^|k0!QF+Wk)MsN`0& z4i(f|egOQadcnxEQ~0%tSIR@;UIJqut8?!Ncu|S-3G$m$KCCIk!{it6(42DhW|0q} zLgWhMnSCKX+MxUb;B|QuMVcda%tWalq_vxMCJ?Cq8;B?<$JoxI1C33vR@Im`BjbAd zuREA}2**Hg-fl789r_B$c;F$Kv0=vjk6@`yFR4lC8rHM5+)j?|r^)Ahm2JK4J%aJ- zme!uSlfRseegd}DAqO-SCbGLpCbjMJK@8!o=y4{SlUPzRS0o&zBpXdPj+4_*M~+ta zN{UnGam(7;s_^izSsRB+xgLmHLP%pY^~DD3&;Hsw@#?socur4i3O0fa+-0Q5$%x7} zeP*q9L+BSWHT8x66KeC3xgZU?F=@%a?S1wcuL%r{O$0Hl229Soo-#C=*rqykEoeWRv4@WYhih*pmJC3(y2qGx;mN=V^{(XcAW8l&h z6%zy`pJo>=tEo6yE>*T3Ho;AG^&AZA!zujLj-}Uah68R)ZC)`@c|70VY6vDQ<}Cf@ zv6gBm#Iu4daRg18A=4Zvx!1qU2IFTaBvrErIaCPKN#l0#E@fy9IrB5FgOmhyhM{$? zgZ6FeG_HR#Fvjx*D*R{*(aOHKVQEbXz}2#PRM;LmTR5I>D@6Vxyzt@uWR5u_ z)ivmR)+cNe#;yzIm55n8mF_lQey0i}Cw>b}lbBF?J#o!1xfLAqvwWO~rRL?4SrKp# zdD>LT93Jh^Mp6a$#-Lz>6Dr=w!*DoNq0jzr%%PZ9xT#E_C!b;HnD3M$KIXWZHhS8{ zEULhj^sM3&e2YqnR_P3u2$<<-MO6&xhyuty;EZ`CO7_MmFTt7W2egO#WY+lHF`w;5 zG>_0SvtM82ukrMKkNyJmZhXgsOgyw&j2dE=2c;Xe$sJ{>6pWe(EZTfG@2Zi{gVshB zEb$4mElSg>w+s%732+-(lhxUejZQE@hqK!(|_6~gyTdz!Wc$6P~n!|%&hQsd!{+_obPtgis8V|sOp9WYKOd*(ZvLzhq&+~HP zH)sVFE0M*0>FM zqIHQ<5HIMPqs|uvQ$J*jm#+?A^dk$#k2OroWk|=A7vAgd62ADM<+V}~8J_SK>3>_6 z;(R!T1gKPPXO>%$B!MxS2eT$ot)>QzZUu`mmaY$xV1R;>qaIPwPiAaP^^l6WMQMWi zMw=l~e23&hddd%IP4xOgMdCohZh%9LF!VqWs7Z>V3Cg$(o3P%xE;v&rR)PoLV-q47 z*%NRWWgA)}{zk4w*S5*EoM~^=Ci7yBTRDaoLsef$vz7Q=k`}-=Z~rAS_w>)!_4N){ z_Rh6{ug@l2 zv}Q?Pr+pG~2jimX&1ZBcd;f|+_KtE6(nRN0>lcZla{gm%>(=+I;X0!JZD3wKfdoKh zy$8oB*r*^MOhLDW$(LOE(wx~pUvJ=`0U=K?;&twCc>FBuiC!K^5bwz*6w*9ouVa*P z_+TFNkLkG_;uw(P?H=VAO|g8wCE2i3*i*J5a_ldf`dKzZEd*2q+IcrIgt`EHfJ$a(;?t}IvL z3mynNEp-DAf~A^xBI5)vDc3P-ADLyRkA1aWXs%OR!PJT&RP2wFoD+~bJw~2y8Ab&g zg4!Cf^=U}*T=8p1Ur8LdqhEr6%VfLQhuYG(b}S(aV070x?$4YxJz?V;LC0gQv9vQQ zj2E1C@DfPob=2WZcf zKt=~gI|w78+CZ*h;S3WjntalmjmqM!2E)YAnf!+msuLk%ZPJ(3n!3WkK~YAm&j*ce z&?V^77D>8vbBdR>%Uso=HnUWF3wE1p0J}aTXMVDYEfts+G>)RGgSPOHezU#Le9$8z zT1$=R%{#vGb%+jR;&(dRpqqpCmv)_1L{xOvYXOnl-O)m?=;F>cfzo}<6oI$;PBpib zqhs5RcE68X0ajsUp>G6KujGe%?oA0}89(Sy&@`LMh6Z^{#V_0F6rmDhkn=9~vWn0~ z|J50#{X6%G!ahP`F1ST6>5u-0SA7^lF@Kk;+oKF!b6}m1sw8h-%%F4^?JBS(Z`;?( zsdQzzqVn~Wkt1umQP*Ft>^K`OJ2Qq7d<9|SD|e&gu$d2KZq5M&hG@*;h8zfMlARSN zkmDiZ2PSO*Bl>E0N29C@szYf_@$iS70lcX}@fBr^vf-D@yJj2d(GJ0Afw1m*9{Lot zD3p4=6udhs75wCP(i0LoPda<=uq5@$3+E}S^v6GE1Ny=^&yHk48zrno2x_eVr;zxU z-hqFEX6I`%d$2|DL{AqhVnDqUuQ>dG6%i>?taYTBbRV(N)MSM!mZ)%^@mksh_EUOy zl>vmD_(uFj(d6}qRS5^BSMEkfy(U@SncSdu4*fC%=-*TFozeb^+N_G~yVoBM#^7j{ zYDd|OlB<@@p@1do!GA}sRwY{1f!*u-nm%i_;fvvCkO?6nE)_h@B%`duL11v=eZCje z$!QhI)p^=mCOh2QyTOqtcp69IIV<+%>o+i6|6Ad^!4eIu8NNG>H6a1PSutbpAL>$ZaRn)+42wAcTaC<|nkIu+ zjz7^N!=5h8_xOny_{8te#Vn?$r#ejVbUlPM3j^CU%aoy*7$PFGox#{CAtT!aixAcN z#Hd~xw4&)DO@A+A`xU=vTRkV0Dq2Lr*7ad%~UFStHi|iZ+*( zwV|_5ZUUd}-1nG)jibQW?RVTJRDB4&w_6V5XYN8C5FwTqd5Dbqnc z?2t=Z+Hz3q!+b(A$4#K_>a(Zt3sXJkajqY;csuS+;u>g)D-Y|y`)wo<=D zhhxlCs%a0rP5ZW=#`%Fu;1=h<4TaI*_doo|!u;?f#nA+kVh&GVx}g4NZ!F107N-2e z8%HgqiNo?uv0jXwcRh`3xgs*N<8|bh)|eqhYU_i`F%AV&6}jV~>Fw;w}kx3#UJe2Cdjo4hKGm z-Lr`^tbb=g*_mb_(=@O+#8$M6#3trd$K5XHy+Y5g``Fz~ zfVm$AB4I1}Z{2IOCZ9vHXD%j(7RC|rfFk_Ca`+N}KtD5Jkm*s~p^Df2_}CMP5#beT z_LP|XI~2wv@B3_t?Sg&i9tDWFgbajB<}&uHsMB}ZIibN~Vi%k3IB)7wZH{5) zmI<&pVa=89BRahkFsZ9)AEy{2bxN2g_W!DN7IZI;PWhHWQRqT2ZyEc>|Mte8BFoTo zv+gYCkLYc(|D;dw%X*=Q=Hsw^%L%YS}B7!1r3r&kaGp|Inqv=8SB+LAEWe#YdRlahvo zn;G?3)HF>jCe2@0ZRD(I^;md2OR$a%(a9~u37GaufVSnR8l3rQ^#q)S=V>4r+mX>~ zs-{Sbtd?vCtO>-u``+b5;R9@ZGk5vDLlTI5Nyj!oT=4pxtT}Vln74G}iH_(INN#U= z*05{Vf$J9kz&vPNGvT)PHr5I zh8>RDO{gPdg?Zoo`mUCi+Q54qml#E1gyDNS3-VekpG9-pSV#xp1WVn79-baQ@4P%b z90%+sTFB8temy+h&)%`MTS4})r6CfZXyD96&Wrt#nETy$+t*|qS;GYz3-$D@dsWh7 z$@TmeY4~9bK~HsgUzkP3wtPr8*AK(1o_AMK^@unTloUh1QQ%$B{Lk8d1Dlo~QXNRr zj(yquKn?6`vGdtfng#hQ%k}PG71PDw2(<6S)|>B(EXO)bqb9@(?R-X%Fpimy&>G_Rwgu5PUOv~of}1gpK}W<5@x#HOZ?^>J=NA_j=NJ8$em2wm zhq()xq^Ty@ivAyuL|m3pjOg4@v-}SYy~a&7aGi%U3zhsY54{f?3;zLsec!gVAa^Im zB5?QQ+wK06*YUE{5Ak)hCu69PmOtYQ(m7!G!c0z zQbr+UFPc{CN{UU;FTV|XU8KldW>Rl2 z>x@M2t8(*v1QGE3c|}7ML1{CcxMgU(&kY!CAiN`K^K$!wC^Dige|*Wu^?oL~%F;G{ zG+xZ25epm=V(OhxM_CO(TEWoMnkHZA;_)OdeRbg&u9)m;WM}`(jMA^$VteEO@{^s1 zY+X7SZ02umYr7in5(7di&4$lOq?zt*Xz3m0YZs=30wAzy9?jS#ni=wXdu9&|9x0-} z-dSHCsIHEs{G0%iDMb7-`FKsZHyQe78#iJG=>S&e)l%p1X;3UskB-O`f9cmG!aHl2uIoir@A0qI%p_YBHvWb$1d8?ebI*?}{erD>5?gMwp56`K_LB ze~p3xpS24$;KFXU*W07PPi*f3Dv>kS-55rVd2mgE<`e{+(sTC;z;d;h7cpGxp;oJ`Nve*mSYHPp� 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 From 5b304676fb04e6b0aab7549113f0b802b5194b36 Mon Sep 17 00:00:00 2001 From: forest2001 Date: Wed, 2 Aug 2023 16:17:17 +0100 Subject: [PATCH 04/17] combi block probability --- code/modules/mob/living/carbon/human/human_defense.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm index a8734afd7301..9b329e334214 100644 --- a/code/modules/mob/living/carbon/human/human_defense.dm +++ b/code/modules/mob/living/carbon/human/human_defense.dm @@ -95,7 +95,7 @@ Contains most of the procs that are called when a mob is attacked by something /mob/living/carbon/human/proc/check_shields(damage = 0, attack_text = "the attack", combistick=0) if(l_hand && istype(l_hand, /obj/item/weapon))//Current base is the prob(50-d/3) - if(combistick && istype(l_hand,/obj/item/weapon/yautja/combistick) && prob(66)) + if(combistick && istype(l_hand,/obj/item/weapon/yautja/combistick) && prob(33)) var/obj/item/weapon/yautja/combistick/C = l_hand if(C.on) return TRUE @@ -120,7 +120,7 @@ Contains most of the procs that are called when a mob is attacked by something return TRUE if(r_hand && istype(r_hand, /obj/item/weapon)) - if(combistick && istype(r_hand,/obj/item/weapon/yautja/combistick) && prob(66)) + if(combistick && istype(r_hand,/obj/item/weapon/yautja/combistick) && prob(33)) var/obj/item/weapon/yautja/combistick/C = r_hand if(C.on) return TRUE From ea2022cf440de87305098fc53b44ec2257feb071 Mon Sep 17 00:00:00 2001 From: forest2001 Date: Wed, 2 Aug 2023 19:59:27 +0100 Subject: [PATCH 05/17] icon removal --- .../humans/onmob/hunter/items_lefthand.dmi | Bin 7695 -> 7540 bytes .../humans/onmob/hunter/items_righthand.dmi | Bin 7573 -> 7432 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/icons/mob/humans/onmob/hunter/items_lefthand.dmi b/icons/mob/humans/onmob/hunter/items_lefthand.dmi index 44d00a9634cf47e8da2b03fdfcc212b9a203f700..f3379c469113fe940620032a822c0f09b630d57e 100644 GIT binary patch delta 7354 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 delta 7529 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 delta 7413 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� zN(mLxi#3w}%Y2DJ9I+6i24ca?y z4%g)oHF!@teJ*QjiTHTrv+d1z$@dVD?Y&pbx1}WWe@FOfCND zO1j601OfD~^83wsHlO?QpYBNvpeYx$3IbnO)Y2YIP!|h zyztSL1)ai0JsOmr-Uj5ClS}!$5k5m>F7QCWU<8|q$&1aa*>oSTi`m-JCGy^iG^85f z-huJjcS^P0YbiyS!sVMiyU=Nrwnw5VGz%SH0_c4~j@kgf0wS({_&PwG{L-q&W!t@2 z!3kb)C1t!u5;>xR#HFOw_()|H*5%n+Y1GEg&mzy)vl$&i`ebHP!TvW8P$5j|5w947O^nKhX-`(a_rl? zGYF}>I_jiaXcHKij z<{6#eaff%Lpq2OB?u<*lVcwyBPSVf$p)c%WTjJ@6ZNKQZYp4}VL-8t4C=zrY{}8?@ z9v-oBT@LwqAntFX0UI*%^pz=NM{J)FHQ=?N|6yQQ+XUKeYZu53)>imiY4A*c3C9j(KAEK%PpDgTe zyWH6!#%ii$6Mr-Y`g%s8{x_h5fSGgS)KqQqDtI*R^$jJEwWZpLGJVwP{M|Y>oyFYD zDgIo81-$fpige!h6LR8i>pQnvhOb#qNONdgVAE~!_4R%OWh7>LYUUHtfZ`gJ8pRRP zDp9Yjy(}elgenT^`|pK3{!lxgw>=?+1NHE`)|&StM}We%Y{Fl0zX+)JNzDm`&taFl z)M3Ct(fummZpi!|Ke>6-P7V6a1(Opm{^Bge4tcl5jUgOt!>CC*@D$ZojO6;nncLqr z^m$T{zU1PTf|DtS03Q#oYsX*-{m1p z-&4J#03Dso>6g@yCh}2b%#ApnNoOGUhtyJNwMGuW|EJ~=5GB0rly>MP-e*UE|1gdP zcY4$vPw&Tg`I%3x?xee2h$hhXW zs|-YnzAOtpTQ1+;dpQ52;j8yP(Q#_=$1Wty6@7A2rdcM_qHo6O!br!t(ieTQ0kt#O zv65uhi#4}Ak&u`Vow|^%q&$l7@m7*~@p@&uO$@nDOEToRO^7$%?~P`g<4SH6`Mce$ zI!ka|+rl7LQPdpBn)Y|7SYvje8^t0N3#MOM&7V%(P!-S!j(>T-sQHYy+zG^Wv%Vc# oXWAkli?LJ@{`Z;rNMv9n(QLQJwyhiG%D=UeoVsj Date: Wed, 2 Aug 2023 20:28:52 +0100 Subject: [PATCH 06/17] fixed --- code/modules/cm_preds/yaut_weapons.dm | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/code/modules/cm_preds/yaut_weapons.dm b/code/modules/cm_preds/yaut_weapons.dm index 9b25752a048d..ac2be5bfd600 100644 --- a/code/modules/cm_preds/yaut_weapons.dm +++ b/code/modules/cm_preds/yaut_weapons.dm @@ -274,10 +274,7 @@ to_chat(user, SPAN_WARNING(message)) /obj/item/weapon/yautja/scythe/unique_action(mob/user) - . = ..() - if(!.) - return - + ..() if(!ability_primed) to_chat(user, SPAN_WARNING("You need a stronger grip for this!")) return FALSE From 68003deca8d8d91e5ee6b7698ef92d476f15c050 Mon Sep 17 00:00:00 2001 From: forest2001 Date: Wed, 2 Aug 2023 22:21:59 +0100 Subject: [PATCH 07/17] check fix --- code/modules/cm_preds/yaut_weapons.dm | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/code/modules/cm_preds/yaut_weapons.dm b/code/modules/cm_preds/yaut_weapons.dm index ac2be5bfd600..d5f009912b6a 100644 --- a/code/modules/cm_preds/yaut_weapons.dm +++ b/code/modules/cm_preds/yaut_weapons.dm @@ -192,6 +192,7 @@ if(ability_charge < ability_cost) to_chat(user, SPAN_WARNING("The blood reservoir is not full enough to do this!")) return FALSE + return TRUE /obj/item/weapon/yautja/chain name = "chainwhip" @@ -274,7 +275,9 @@ to_chat(user, SPAN_WARNING(message)) /obj/item/weapon/yautja/scythe/unique_action(mob/user) - ..() + . = ..() + if(!.) + return if(!ability_primed) to_chat(user, SPAN_WARNING("You need a stronger grip for this!")) return FALSE @@ -300,7 +303,6 @@ log_attack("[key_name(target)] was sliced by [key_name(user)] whirling their scythe.") ability_charge -= ability_cost - ability_primed = FALSE remove_filter("scythe_ready") return TRUE From 6cb0eb85e90f88fcedd6925c220e34516e1d13ef Mon Sep 17 00:00:00 2001 From: John Doe Date: Wed, 2 Aug 2023 14:48:58 -0700 Subject: [PATCH 08/17] mirroring fix --- code/datums/keybinding/human_combat.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/datums/keybinding/human_combat.dm b/code/datums/keybinding/human_combat.dm index f8f639cdaf60..70d78437ae03 100644 --- a/code/datums/keybinding/human_combat.dm +++ b/code/datums/keybinding/human_combat.dm @@ -7,7 +7,7 @@ if(!.) return var/mob/user_mob = user.mob - return isgun(user_mob.get_held_item()) + return isweapon(user_mob.get_held_item()) /datum/keybinding/human/combat/field_strip_weapon hotkey_keys = list("Unbound") From 824ab485580f7a78809bd102f27442df15ba0480 Mon Sep 17 00:00:00 2001 From: forest2001 Date: Thu, 10 Aug 2023 16:34:43 +0100 Subject: [PATCH 09/17] fixes unique action popup --- code/modules/projectiles/gun_helpers.dm | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/code/modules/projectiles/gun_helpers.dm b/code/modules/projectiles/gun_helpers.dm index aa86b5b446fb..45b0be408ced 100644 --- a/code/modules/projectiles/gun_helpers.dm +++ b/code/modules/projectiles/gun_helpers.dm @@ -772,9 +772,11 @@ DEFINES in setup.dm, referenced here. set category = "Weapons" set name = "Unique Action" set desc = "Use anything unique your weapon is capable of. Includes pumping a shotgun or spinning a revolver. If you have an active gun attachment, this will activate on the attachment instead." - set src in usr - var/obj/item/weapon/current_weapon = src + var/obj/item/weapon/current_weapon = usr.get_held_item() + if(!current_weapon) + to_chat(usr, SPAN_WARNING("Your weapon must be in your hand to do that.")) + return if(isgun(current_weapon)) var/obj/item/weapon/gun/firearm = current_weapon if(firearm.active_attachable) From 051a21c7c53852579c60b0956af8c523a8a53405 Mon Sep 17 00:00:00 2001 From: forest2001 Date: Thu, 10 Aug 2023 19:13:00 +0100 Subject: [PATCH 10/17] fixes mask chance going over intended max --- code/modules/mob/living/carbon/xenomorph/attack_alien.dm | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/code/modules/mob/living/carbon/xenomorph/attack_alien.dm b/code/modules/mob/living/carbon/xenomorph/attack_alien.dm index 8e64afa3f733..ad428915b200 100644 --- a/code/modules/mob/living/carbon/xenomorph/attack_alien.dm +++ b/code/modules/mob/living/carbon/xenomorph/attack_alien.dm @@ -107,7 +107,8 @@ knock_chance += 2 * M.frenzy_aura if(M.caste && M.caste.is_intelligent) knock_chance += 2 - knock_chance += min(round(damage * 0.25), 10) //Maximum of 15% chance. + knock_chance += min(round(damage * 0.25), 10) + knock_chance = min(knock_chance, 15)//Maximum of 15% chance. if(prob(knock_chance)) playsound(loc, "alien_claw_metal", 25, 1) M.visible_message(SPAN_DANGER("The [M] smashes off [src]'s [wear_mask.name]!"), \ From d3d813cd831ae42fb0f596681daf5a883e47276a Mon Sep 17 00:00:00 2001 From: forest2001 Date: Tue, 12 Sep 2023 00:35:46 +0100 Subject: [PATCH 11/17] changes --- code/modules/cm_preds/yaut_weapons.dm | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/code/modules/cm_preds/yaut_weapons.dm b/code/modules/cm_preds/yaut_weapons.dm index f57e04fcc074..9c2ad8bd6ae8 100644 --- a/code/modules/cm_preds/yaut_weapons.dm +++ b/code/modules/cm_preds/yaut_weapons.dm @@ -333,6 +333,10 @@ hitsound = 'sound/weapons/bladeslice.ogg' attack_verb = list("speared", "stabbed", "impaled") + ability_cost = ABILITY_COST_DEFAULT + ability_charge_max = ABILITY_MAX_DEFAULT + ability_charge_rate = ABILITY_CHARGE_SMALL + var/on = TRUE var/force_wielded = MELEE_FORCE_TIER_6 @@ -341,10 +345,6 @@ /// Ref to the tether effect when thrown var/datum/effects/tethering/chain - ability_cost = ABILITY_COST_DEFAULT - ability_charge_max = ABILITY_MAX_DEFAULT - ability_charge_rate = ABILITY_CHARGE_SMALL - /obj/item/weapon/yautja/combistick/Destroy() cleanup_chain() return ..() From cf061b2ce81dbf3bb2bc505249049c30f5acbe78 Mon Sep 17 00:00:00 2001 From: forest2001 Date: Wed, 13 Sep 2023 19:53:59 +0100 Subject: [PATCH 12/17] EXPERIMENTAL: DAMAGE CHANGES --- code/modules/cm_preds/smartdisc.dm | 4 ++-- code/modules/cm_preds/yaut_weapons.dm | 17 ++++++++--------- 2 files changed, 10 insertions(+), 11 deletions(-) diff --git a/code/modules/cm_preds/smartdisc.dm b/code/modules/cm_preds/smartdisc.dm index f0262f5f140a..7925e7193269 100644 --- a/code/modules/cm_preds/smartdisc.dm +++ b/code/modules/cm_preds/smartdisc.dm @@ -17,8 +17,8 @@ unacidable = TRUE embeddable = FALSE - force = 15 - throwforce = 25 + force = MELEE_FORCE_WEAK + throwforce = MELEE_FORCE_NORMAL /obj/item/explosive/grenade/spawnergrenade/smartdisc/launch_towards(datum/launch_metadata/LM) ..() diff --git a/code/modules/cm_preds/yaut_weapons.dm b/code/modules/cm_preds/yaut_weapons.dm index 9c2ad8bd6ae8..56e165ac4931 100644 --- a/code/modules/cm_preds/yaut_weapons.dm +++ b/code/modules/cm_preds/yaut_weapons.dm @@ -141,7 +141,8 @@ item_state = "scim" attack_speed = 5 attack_verb = list("sliced", "slashed", "jabbed", "torn", "gored") - force = MELEE_FORCE_TIER_5 + force = MELEE_FORCE_TIER_6 + has_speed_bonus = FALSE /*######################################### ########### One Handed Weapons ############ @@ -205,8 +206,8 @@ embeddable = FALSE w_class = SIZE_MEDIUM unacidable = TRUE - force = MELEE_FORCE_TIER_6 - throwforce = MELEE_FORCE_TIER_5 + force = MELEE_FORCE_TIER_7 + throwforce = MELEE_FORCE_TIER_4 sharp = IS_SHARP_ITEM_SIMPLE edge = TRUE attack_verb = list("whipped", "slashed","sliced","diced","shredded") @@ -243,7 +244,7 @@ flags_atom = FPRINT|CONDUCT flags_item = ITEM_PREDATOR flags_equip_slot = SLOT_WAIST - force = MELEE_FORCE_TIER_6 + force = MELEE_FORCE_TIER_7 throwforce = MELEE_FORCE_TIER_5 sharp = IS_SHARP_ITEM_SIMPLE edge = TRUE @@ -327,7 +328,7 @@ throw_range = 4 unacidable = TRUE force = MELEE_FORCE_TIER_6 - throwforce = MELEE_FORCE_TIER_6 + throwforce = MELEE_FORCE_TIER_7 sharp = IS_SHARP_ITEM_SIMPLE edge = TRUE hitsound = 'sound/weapons/bladeslice.ogg' @@ -472,7 +473,6 @@ flags_item |= TWOHANDED w_class = SIZE_LARGE force = force_unwielded - throwforce = MELEE_FORCE_TIER_6 attack_verb = list("speared", "stabbed", "impaled") if(blood_overlay && blood_color) @@ -489,7 +489,6 @@ flags_item &= ~TWOHANDED w_class = SIZE_TINY force = force_storage - throwforce = MELEE_FORCE_TIER_6 attack_verb = list("thwacked", "smacked") overlays.Cut() on = FALSE @@ -765,7 +764,7 @@ icon_state = "spearhunter" item_state = "spearhunter" flags_item = NOSHIELD|TWOHANDED - force = MELEE_FORCE_TIER_3 + force = MELEE_FORCE_TIER_4 force_wielded = MELEE_FORCE_TIER_7 sharp = IS_SHARP_ITEM_SIMPLE attack_verb = list("attacked", "stabbed", "jabbed", "torn", "gored") @@ -820,7 +819,7 @@ icon_state = "glaive" item_state = "glaive" force = MELEE_FORCE_TIER_3 - force_wielded = MELEE_FORCE_TIER_9 + force_wielded = MELEE_FORCE_TIER_10 throwforce = MELEE_FORCE_TIER_3 embeddable = FALSE //so predators don't lose their glaive when thrown. sharp = IS_SHARP_ITEM_BIG From 7f045423c88c8f414918c721886bc5f063a301ae Mon Sep 17 00:00:00 2001 From: forest2001 Date: Mon, 12 Feb 2024 20:27:46 +0000 Subject: [PATCH 13/17] filter check --- code/modules/cm_preds/yaut_weapons.dm | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/code/modules/cm_preds/yaut_weapons.dm b/code/modules/cm_preds/yaut_weapons.dm index 818153e10192..caeac5c4f24d 100644 --- a/code/modules/cm_preds/yaut_weapons.dm +++ b/code/modules/cm_preds/yaut_weapons.dm @@ -304,7 +304,8 @@ log_attack("[key_name(target)] was sliced by [key_name(user)] whirling their scythe.") ability_charge -= ability_cost - remove_filter("scythe_ready") + if(ability_charge < ability_cost) + remove_filter("scythe_ready") return TRUE /obj/item/weapon/yautja/scythe/alt From a104f394fa960ad44fe49abbffb6b3b2f39168b0 Mon Sep 17 00:00:00 2001 From: forest2001 Date: Wed, 14 Feb 2024 21:23:16 +0000 Subject: [PATCH 14/17] Scythe tweak --- code/modules/cm_preds/yaut_weapons.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/cm_preds/yaut_weapons.dm b/code/modules/cm_preds/yaut_weapons.dm index caeac5c4f24d..4b8663d42419 100644 --- a/code/modules/cm_preds/yaut_weapons.dm +++ b/code/modules/cm_preds/yaut_weapons.dm @@ -296,8 +296,8 @@ user.visible_message(SPAN_HIGHDANGER("[user] slices open the guts of [target]!"), SPAN_HIGHDANGER("You slice open the guts of [target]!")) target.spawn_gibs() playsound(get_turf(target), 'sound/effects/gibbed.ogg', 30, 1) - target.apply_effect(get_xeno_stun_duration(target, 1), WEAKEN) - target.apply_armoured_damage(get_xeno_damage_slash(target, (force * 1.5)), ARMOR_MELEE, BRUTE, "chest", 40) + target.apply_effect(get_xeno_stun_duration(target, 3), SLOW) + target.apply_armoured_damage(get_xeno_damage_slash(target, (force * 1.3)), ARMOR_MELEE, BRUTE, "chest", 25) user.attack_log += text("\[[time_stamp()]\] [key_name(user)] sliced [key_name(target)] with their whirling scythe.") target.attack_log += text("\[[time_stamp()]\] [key_name(target)] was sliced by [key_name(user)] whirling their scythe.") From 719c1eb221644f337056bf2daeae479188941495 Mon Sep 17 00:00:00 2001 From: forest2001 Date: Wed, 14 Feb 2024 21:23:24 +0000 Subject: [PATCH 15/17] var tidy up --- code/modules/cm_preds/yaut_weapons.dm | 89 +++++++++++---------------- 1 file changed, 36 insertions(+), 53 deletions(-) diff --git a/code/modules/cm_preds/yaut_weapons.dm b/code/modules/cm_preds/yaut_weapons.dm index 4b8663d42419..968362f52a12 100644 --- a/code/modules/cm_preds/yaut_weapons.dm +++ b/code/modules/cm_preds/yaut_weapons.dm @@ -16,6 +16,8 @@ #define ABILITY_MAX_DEFAULT 2 #define ABILITY_MAX_LARGE 5 +#define ABILITY_FILTER_NAME "ability_charge" + /*######################################### ########### Weapon Reused Procs ########### #########################################*/ @@ -48,7 +50,7 @@ attack_verb = list("jabbed","stabbed","ripped", "skewered") throw_range = 4 unacidable = TRUE - edge = 1 + edge = TRUE hitsound = 'sound/weapons/bladeslice.ogg' sharp = IS_SHARP_ITEM_BIG @@ -154,6 +156,14 @@ WEAR_L_HAND = 'icons/mob/humans/onmob/hunter/items_lefthand.dmi', WEAR_R_HAND = 'icons/mob/humans/onmob/hunter/items_righthand.dmi' ) + + flags_atom = FPRINT|CONDUCT + flags_item = ITEM_PREDATOR + unacidable = TRUE + edge = TRUE + w_class = SIZE_LARGE + embeddable = FALSE + var/human_adapted = FALSE ///The amount this weapon interrupts hivemind link on Xenomorphs. var/xeno_interfere_amount = 30 @@ -166,7 +176,6 @@ ///Whether the ability is ready to trigger var/ability_primed = FALSE - /obj/item/weapon/yautja/dropped() if(ability_primed) ability_primed = FALSE @@ -185,7 +194,11 @@ return if(ability_charge < ability_charge_max) - ability_charge += ability_charge_rate + ability_charge = min(ability_charge_max, ability_charge + ability_charge_rate) + to_chat(user, SPAN_DANGER("[src]'s reservoir fills up with your opponent's blood!")) + + if(ability_charge >= ability_cost) + ready_ability(target, user) /obj/item/weapon/yautja/unique_action(mob/user) if(user.get_active_hand() != src) @@ -195,21 +208,31 @@ return FALSE return TRUE +/obj/item/weapon/yautja/get_examine_text(mob/user) + . = ..() + if(isyautja(user) && ability_cost) + . += SPAN_WARNING("It currently has [ability_charge]/[ability_charge_max] blood charge(s).") + . += SPAN_ORANGE("It requires [ability_cost] blood charge(s) to use its ability.") + +/obj/item/weapon/yautja/proc/ready_ability(mob/living/target as mob, mob/living/carbon/human/user as mob) + if(ability_charge >= ability_cost) + var/color = target.get_blood_color() + var/alpha = 70 + color += num2text(alpha, 2, 16) + add_filter(ABILITY_FILTER_NAME, 1, list("type" = "outline", "color" = color, "size" = 2)) + return TRUE + return FALSE + /obj/item/weapon/yautja/chain name = "chainwhip" desc = "A segmented, lightweight whip made of durable, acid-resistant metal. Not very common among Yautja Hunters, but still a dangerous weapon capable of shredding prey." icon_state = "whip" item_state = "whip" - flags_atom = FPRINT|CONDUCT - flags_item = ITEM_PREDATOR flags_equip_slot = SLOT_WAIST - embeddable = FALSE w_class = SIZE_MEDIUM - unacidable = TRUE force = MELEE_FORCE_TIER_7 throwforce = MELEE_FORCE_TIER_4 sharp = IS_SHARP_ITEM_SIMPLE - edge = TRUE attack_verb = list("whipped", "slashed","sliced","diced","shredded") attack_speed = 0.8 SECONDS hitsound = 'sound/weapons/chain_whip.ogg' @@ -222,51 +245,31 @@ name = "clan sword" desc = "An expertly crafted Yautja blade carried by hunters who wish to fight up close. Razor sharp and capable of cutting flesh into ribbons. Commonly carried by aggressive and lethal hunters." icon_state = "clansword" - flags_atom = FPRINT|CONDUCT - flags_item = ITEM_PREDATOR flags_equip_slot = SLOT_BACK force = MELEE_FORCE_TIER_7 throwforce = MELEE_FORCE_TIER_5 sharp = IS_SHARP_ITEM_ACCURATE - edge = TRUE - embeddable = FALSE - w_class = SIZE_LARGE - hitsound = "clan_sword_hit" attack_verb = list("slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") attack_speed = 1 SECONDS - unacidable = TRUE + hitsound = "clan_sword_hit" /obj/item/weapon/yautja/scythe name = "dual war scythe" desc = "A huge, incredibly sharp dual blade used for hunting dangerous prey. This weapon is commonly carried by Yautja who wish to disable and slice apart their foes." icon_state = "predscythe" item_state = "scythe_dual" - flags_atom = FPRINT|CONDUCT - flags_item = ITEM_PREDATOR flags_equip_slot = SLOT_WAIST force = MELEE_FORCE_TIER_7 throwforce = MELEE_FORCE_TIER_5 sharp = IS_SHARP_ITEM_SIMPLE - edge = TRUE - embeddable = FALSE - w_class = SIZE_LARGE - hitsound = 'sound/weapons/bladeslice.ogg' attack_verb = list("slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") - unacidable = TRUE + hitsound = 'sound/weapons/bladeslice.ogg' has_unique_action = TRUE ability_cost = ABILITY_COST_SCYTHE ability_charge_max = ABILITY_COST_SCYTHE ability_charge_rate = ABILITY_CHARGE_NORMAL -/obj/item/weapon/yautja/scythe/attack(mob/living/target as mob, mob/living/carbon/human/user as mob) - ..() - if(ability_charge >= ability_cost) - var/color = BLOOD_COLOR_HUMAN - var/alpha = 70 - color += num2text(alpha, 2, 16) - add_filter("scythe_ready", 1, list("type" = "outline", "color" = color, "size" = 2)) - /obj/item/weapon/yautja/scythe/attack_self(mob/user) ..() ability_primed = !ability_primed @@ -305,7 +308,7 @@ ability_charge -= ability_cost if(ability_charge < ability_cost) - remove_filter("scythe_ready") + remove_filter(ABILITY_FILTER_NAME) return TRUE /obj/item/weapon/yautja/scythe/alt @@ -320,20 +323,16 @@ desc = "A compact yet deadly personal weapon. Can be concealed when folded. Functions well as a throwing weapon or defensive tool. A common sight in Yautja packs due to its versatility." icon_state = "combistick" has_unique_action = TRUE - flags_atom = FPRINT|CONDUCT flags_equip_slot = SLOT_BACK flags_item = TWOHANDED|ITEM_PREDATOR - w_class = SIZE_LARGE embeddable = FALSE //It shouldn't embed so that the Yautja can actually use the yank combi verb, and so that it's not useless upon throwing it at someone. throw_speed = SPEED_VERY_FAST throw_range = 4 - unacidable = TRUE force = MELEE_FORCE_TIER_6 throwforce = MELEE_FORCE_TIER_7 sharp = IS_SHARP_ITEM_SIMPLE - edge = TRUE - hitsound = 'sound/weapons/bladeslice.ogg' attack_verb = list("speared", "stabbed", "impaled") + hitsound = 'sound/weapons/bladeslice.ogg' ability_cost = ABILITY_COST_DEFAULT ability_charge_max = ABILITY_MAX_DEFAULT @@ -364,7 +363,7 @@ return FALSE ability_charge -= ability_cost if(ability_charge < ability_cost) - remove_filter("combistick_charge") + remove_filter(ABILITY_FILTER_NAME) unwield(user) //Otherwise stays wielded even when thrown return TRUE @@ -520,21 +519,6 @@ return -/obj/item/weapon/yautja/combistick/attack(mob/living/target, mob/living/carbon/human/user) - . = ..() - if(!.) - return - - if((ability_charge < ability_charge_max)) - to_chat(user, SPAN_DANGER("Your combistick's reservoir fills up with your opponent's blood!")) - ability_charge += ability_charge_rate - if(ability_charge >= ability_cost) - to_chat(user, SPAN_DANGER("You may now throw your combistick!")) - var/color = target.get_blood_color() - var/alpha = 70 - color += num2text(alpha, 2, 16) - add_filter("combistick_charge", 1, list("type" = "outline", "color" = color, "size" = 2)) - /obj/item/weapon/yautja/combistick/attack_hand(mob/user) //Prevents marines from instantly picking it up via pickup macros. if(!human_adapted && !HAS_TRAIT(user, TRAIT_SUPER_STRONG)) user.visible_message(SPAN_DANGER("[user] starts to untangle the chain on \the [src]..."), SPAN_NOTICE("You start to untangle the chain on \the [src]...")) @@ -838,7 +822,6 @@ force = MELEE_FORCE_TIER_3 force_wielded = MELEE_FORCE_TIER_10 throwforce = MELEE_FORCE_TIER_3 - embeddable = FALSE //so predators don't lose their glaive when thrown. sharp = IS_SHARP_ITEM_BIG flags_atom = FPRINT|CONDUCT attack_verb = list("sliced", "slashed", "carved", "diced", "gored") From b54290dad5836a944dd958037b466fd6618e2ad8 Mon Sep 17 00:00:00 2001 From: forest2001 Date: Thu, 15 Feb 2024 19:13:22 +0000 Subject: [PATCH 16/17] overlay fix --- code/modules/cm_preds/yaut_weapons.dm | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/code/modules/cm_preds/yaut_weapons.dm b/code/modules/cm_preds/yaut_weapons.dm index 968362f52a12..318e596d50ec 100644 --- a/code/modules/cm_preds/yaut_weapons.dm +++ b/code/modules/cm_preds/yaut_weapons.dm @@ -168,6 +168,7 @@ ///The amount this weapon interrupts hivemind link on Xenomorphs. var/xeno_interfere_amount = 30 + var/has_ability = FALSE ///The amount of charges towards use of special abilities. var/ability_charge = 0 var/ability_charge_max = ABILITY_MAX_DEFAULT @@ -189,6 +190,9 @@ var/mob/living/carbon/xenomorph/xenomorph = target xenomorph.interference = xeno_interfere_amount + if(!has_ability) + return + if(target == user || target.stat == DEAD || isanimal(target)) to_chat(user, SPAN_DANGER("You think you're smart?")) //very funny return @@ -269,6 +273,7 @@ ability_cost = ABILITY_COST_SCYTHE ability_charge_max = ABILITY_COST_SCYTHE ability_charge_rate = ABILITY_CHARGE_NORMAL + has_ability = TRUE /obj/item/weapon/yautja/scythe/attack_self(mob/user) ..() @@ -337,6 +342,7 @@ ability_cost = ABILITY_COST_DEFAULT ability_charge_max = ABILITY_MAX_DEFAULT ability_charge_rate = ABILITY_CHARGE_SMALL + has_ability = TRUE var/on = TRUE @@ -540,7 +546,6 @@ desc = "A viciously sharp dagger inscribed with ancient Yautja markings. Smells thickly of blood. Carried by some hunters." icon_state = "predknife" item_state = "knife" - flags_atom = FPRINT|CONDUCT flags_item = ITEM_PREDATOR|CAN_DIG_SHRAPNEL flags_equip_slot = SLOT_STORE sharp = IS_SHARP_ITEM_ACCURATE @@ -552,7 +557,6 @@ hitsound = 'sound/weapons/slash.ogg' attack_verb = list("slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") actions_types = list(/datum/action/item_action) - unacidable = TRUE /obj/item/weapon/yautja/knife/attack(mob/living/target, mob/living/carbon/human/user) if(target.stat != DEAD) From f164a729d34fcb6696addd4b1c1fc5fba0d185e3 Mon Sep 17 00:00:00 2001 From: forest2001 Date: Thu, 15 Feb 2024 19:16:50 +0000 Subject: [PATCH 17/17] better fix --- code/modules/cm_preds/yaut_weapons.dm | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/code/modules/cm_preds/yaut_weapons.dm b/code/modules/cm_preds/yaut_weapons.dm index 318e596d50ec..425691507e15 100644 --- a/code/modules/cm_preds/yaut_weapons.dm +++ b/code/modules/cm_preds/yaut_weapons.dm @@ -168,7 +168,6 @@ ///The amount this weapon interrupts hivemind link on Xenomorphs. var/xeno_interfere_amount = 30 - var/has_ability = FALSE ///The amount of charges towards use of special abilities. var/ability_charge = 0 var/ability_charge_max = ABILITY_MAX_DEFAULT @@ -190,7 +189,7 @@ var/mob/living/carbon/xenomorph/xenomorph = target xenomorph.interference = xeno_interfere_amount - if(!has_ability) + if(!ability_cost) return if(target == user || target.stat == DEAD || isanimal(target)) @@ -240,6 +239,7 @@ attack_verb = list("whipped", "slashed","sliced","diced","shredded") attack_speed = 0.8 SECONDS hitsound = 'sound/weapons/chain_whip.ogg' + ability_cost = ABILITY_COST_CHAIN /obj/item/weapon/yautja/chain/attack(mob/target, mob/living/user) @@ -256,6 +256,7 @@ attack_verb = list("slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") attack_speed = 1 SECONDS hitsound = "clan_sword_hit" + ability_cost = ABILITY_COST_SWORD /obj/item/weapon/yautja/scythe name = "dual war scythe" @@ -273,7 +274,6 @@ ability_cost = ABILITY_COST_SCYTHE ability_charge_max = ABILITY_COST_SCYTHE ability_charge_rate = ABILITY_CHARGE_NORMAL - has_ability = TRUE /obj/item/weapon/yautja/scythe/attack_self(mob/user) ..() @@ -342,7 +342,6 @@ ability_cost = ABILITY_COST_DEFAULT ability_charge_max = ABILITY_MAX_DEFAULT ability_charge_rate = ABILITY_CHARGE_SMALL - has_ability = TRUE var/on = TRUE