From 1be6e5c583868fb5568f3fa02ad504b4baf48879 Mon Sep 17 00:00:00 2001 From: Mek Date: Sun, 23 Oct 2022 03:29:44 -0400 Subject: [PATCH 01/33] mostly just on select and unselect stuff also makes the new file --- code/game/mecha/equipment/mecha_equipment.dm | 10 ++++- .../mecha/equipment/weapons/melee_weapons | 40 +++++++++++++++++++ code/game/mecha/mecha_actions.dm | 6 ++- code/game/mecha/mecha_topic.dm | 4 ++ .../temporary_visuals/miscellaneous.dm | 5 +++ 5 files changed, 63 insertions(+), 2 deletions(-) create mode 100644 code/game/mecha/equipment/weapons/melee_weapons diff --git a/code/game/mecha/equipment/mecha_equipment.dm b/code/game/mecha/equipment/mecha_equipment.dm index b02e87e04e3b..0bd6ccae605d 100644 --- a/code/game/mecha/equipment/mecha_equipment.dm +++ b/code/game/mecha/equipment/mecha_equipment.dm @@ -43,6 +43,8 @@ /obj/item/mecha_parts/mecha_equipment/Destroy() if(chassis) + if(chassis.selected == src) //If it's the active equipment, we lose any passive effects + on_deselect() chassis.equipment -= src if(chassis.selected == src) chassis.selected = null @@ -178,6 +180,12 @@ /obj/item/mecha_parts/mecha_equipment/proc/rearm() return 0 - /obj/item/mecha_parts/mecha_equipment/proc/needs_rearm() return 0 + +//used for equipment, such as melee weapons, that have passive effects +/obj/item/mecha_parts/mecha_equipment/proc/on_select() + return 0 + +/obj/item/mecha_parts/mecha_equipment/proc/on_deselect() + return 0 diff --git a/code/game/mecha/equipment/weapons/melee_weapons b/code/game/mecha/equipment/weapons/melee_weapons new file mode 100644 index 000000000000..194106a702ec --- /dev/null +++ b/code/game/mecha/equipment/weapons/melee_weapons @@ -0,0 +1,40 @@ +/obj/item/mecha_parts/mecha_equipment/melee_weapon + name = "mecha melee weapon" + range = MECHA_MELEE + destroy_sound = 'sound/mecha/weapdestr.ogg' + + mech_flags = EXOSUIT_MODULE_COMBAT + var/restricted = TRUE //for our special hugbox exofabs + //Determine whether the weapon has an AOE attack or is single-target + var/cleave = FALSE + var/attack_effect = /obj/effect/temp_visual/dir_setting/mecha_attack + +/obj/item/mecha_parts/mecha_equipment/melee_weapon/can_attach(obj/mecha/M) + if(!..()) + return FALSE + if(istype(M, /obj/mecha/combat)) + return TRUE + if((locate(/obj/item/mecha_parts/concealed_weapon_bay) in M.contents) && !((locate(/obj/item/mecha_parts/mecha_equipment/melee_weapon) in M.equipment) || (locate(/obj/item/mecha_parts/mecha_equipment/melee_weapon) in M.equipment) )) + return TRUE + return FALSE + +//THIS ISNT EVEN CLOSE TO DONE YET + +/obj/item/mecha_parts/mecha_equipment/weapon/action(atom/target, params) + if(!action_checks(target)) + return 0 + + var/turf/curloc = get_turf(chassis) + var/turf/targloc = get_turf(target) + if (!targloc || !istype(targloc) || !curloc) + return 0 + if (targloc == curloc) + return 0 + + set_ready_state(0) + if(cleave) + new attack_effect(get_turf(src), chassis.dir) + playsound(chassis, fire_sound, 50, 1) + + chassis.log_message("Attacked from [src.name], targeting [target].", LOG_MECHA) + return 1 diff --git a/code/game/mecha/mecha_actions.dm b/code/game/mecha/mecha_actions.dm index cc3b32b359f3..9ed086301a6e 100644 --- a/code/game/mecha/mecha_actions.dm +++ b/code/game/mecha/mecha_actions.dm @@ -86,13 +86,17 @@ var/number = 0 for(var/A in available_equipment) number++ - if(A == chassis.selected) + if(A == chassis.selected) //Swapping to no equipment from something if(available_equipment.len == number) + chasses.selected.on_deselect() chassis.selected = null chassis.occupant_message("You switch to no equipment") button_icon_state = "mech_cycle_equip_off" else + if(chassis.selected) //If we're swapping off of an equipment, remove effects + chassis.selected.on_deselect() chassis.selected = available_equipment[number+1] + chassis.selected.on_select() chassis.occupant_message("You switch to [chassis.selected]") button_icon_state = "mech_cycle_equip_on" send_byjax(chassis.occupant,"exosuit.browser","eq_list",chassis.get_equipment_list()) diff --git a/code/game/mecha/mecha_topic.dm b/code/game/mecha/mecha_topic.dm index b6fdd2d91e2c..acca56424b83 100644 --- a/code/game/mecha/mecha_topic.dm +++ b/code/game/mecha/mecha_topic.dm @@ -296,7 +296,11 @@ if(href_list["select_equip"]) var/obj/item/mecha_parts/mecha_equipment/equip = locate(href_list["select_equip"]) in src if(equip && equip.selectable) + if(selected) + var/obj/item/mecha_parts/mecha_equipment/unequip = selected //What we're lowering + unequip.on_deselect() selected = equip + equip.on_select() occupant_message("You switch to [equip]") visible_message("[src] raises [equip]") send_byjax(usr,"exosuit.browser","eq_list",src.get_equipment_list()) diff --git a/code/game/objects/effects/temporary_visuals/miscellaneous.dm b/code/game/objects/effects/temporary_visuals/miscellaneous.dm index a6bee91e747b..2617c1f8d46f 100644 --- a/code/game/objects/effects/temporary_visuals/miscellaneous.dm +++ b/code/game/objects/effects/temporary_visuals/miscellaneous.dm @@ -82,9 +82,14 @@ duration = 0.3 SECONDS /obj/effect/temp_visual/dir_setting/firing_effect/magic + icon = "icons/effects/96x96.dmi" icon_state = "shieldsparkles" duration = 0.3 SECONDS +/obj/effect/temp_visual/dir_setting/firing_effect/mecha_attack + icon_state = "big_slash" + duration = 0.3 SECONDS + /obj/effect/temp_visual/dir_setting/ninja name = "ninja shadow" icon = 'icons/mob/mob.dmi' From f18e236f2a4dea1e00a7284874a9e2f62263678b Mon Sep 17 00:00:00 2001 From: Mek Date: Sat, 29 Oct 2022 22:41:10 -0400 Subject: [PATCH 02/33] Progress --- code/game/mecha/equipment/mecha_equipment.dm | 3 +- .../mecha/equipment/weapons/melee_weapons | 74 ++++++++++++++++--- 2 files changed, 65 insertions(+), 12 deletions(-) diff --git a/code/game/mecha/equipment/mecha_equipment.dm b/code/game/mecha/equipment/mecha_equipment.dm index 0bd6ccae605d..c6052777c0c3 100644 --- a/code/game/mecha/equipment/mecha_equipment.dm +++ b/code/game/mecha/equipment/mecha_equipment.dm @@ -27,7 +27,8 @@ var/destroy_sound = 'sound/mecha/critdestr.ogg' /// Bitflag. Used by exosuit fabricator to assign sub-categories based on which exosuits can equip this. var/mech_flags = NONE - + //Special melee override for melee weapons + var/melee_override = FALSE /obj/item/mecha_parts/mecha_equipment/proc/update_chassis_page() if(chassis) send_byjax(chassis.occupant,"exosuit.browser","eq_list",chassis.get_equipment_list()) diff --git a/code/game/mecha/equipment/weapons/melee_weapons b/code/game/mecha/equipment/weapons/melee_weapons index 194106a702ec..44c0aee015a0 100644 --- a/code/game/mecha/equipment/weapons/melee_weapons +++ b/code/game/mecha/equipment/weapons/melee_weapons @@ -1,12 +1,33 @@ /obj/item/mecha_parts/mecha_equipment/melee_weapon name = "mecha melee weapon" - range = MECHA_MELEE + range = MECHA_MELEE|MECHA_RANGED //so we can do stuff at range and in melee destroy_sound = 'sound/mecha/weapdestr.ogg' - mech_flags = EXOSUIT_MODULE_COMBAT + melee_override = TRUE var/restricted = TRUE //for our special hugbox exofabs - //Determine whether the weapon has an AOE attack or is single-target + //If we have a longer range weapon, such as a spear or whatever capable of hitting people further away, this is how much extra range it has + var/extended_range = 0 + //Attack speed modifier for a weapon. Big weapons will have a longer delay between attacks, while smaller ones will be faster + var/attack_speed_modifier = 1 + + //Attack types - Note that at least one of these must be true otherwise it's not actually a weapon and will have no effect + //By default we assume we're using a small weapon with only a special single-target attack + //If the weapon has an AOE attack var/cleave = FALSE + //If the weapon has a single-target strike + var/precise_attacks = TRUE + + + //Damage type for the weapon + var/dam_type = BRUTE + //If it's sharp or not + var/attack_sharpness = SHARP_NONE + //Damage the weapon will do. Note this is ADDED to the base mecha attack damage (usually) + var/weapon_damage = 0 + //Bonus deflection chance for using a melee weapon capable of blocking attacks + var/deflect_bonus = 0 + + var/attack_effect = /obj/effect/temp_visual/dir_setting/mecha_attack /obj/item/mecha_parts/mecha_equipment/melee_weapon/can_attach(obj/mecha/M) @@ -18,9 +39,14 @@ return TRUE return FALSE -//THIS ISNT EVEN CLOSE TO DONE YET +/obj/item/mecha_parts/mecha_equipment/melee_weapon/proc/start_cooldown() + set_ready_state(0) + chassis.use_power(energy_drain) + addtimer(CALLBACK(src, .proc/set_ready_state, 1), chassis.melee_cooldown * attack_speed_modifer) //Guns only shoot so fast, but weapons can be used as fast as the chassis can swing it! -/obj/item/mecha_parts/mecha_equipment/weapon/action(atom/target, params) +//THIS ISNT EVEN CLOSE TO DONE YET +//Melee weapon attacks are a little different in that they'll override the standard melee attack +/obj/item/mecha_parts/mecha_equipment/melee_weapon/action(atom/target, params) if(!action_checks(target)) return 0 @@ -30,11 +56,37 @@ return 0 if (targloc == curloc) return 0 - - set_ready_state(0) - if(cleave) - new attack_effect(get_turf(src), chassis.dir) - playsound(chassis, fire_sound, 50, 1) - + + + if(target == targloc && !(chassis.occupant.a_intent == INTENT_HELP)) //If we are targetting a location, not an object or mob, and we're not in a passive stance + if(cleave) + cleave_attack() + else if(precise_attacks && (get_dist(src,target) <= (1 + extended_range))) //If we are targetting not a turf and they're within reach + precise_attack(target) //We stab it if we can + else + cleave_attack() //Or swing for the fences if we can't chassis.log_message("Attacked from [src.name], targeting [target].", LOG_MECHA) return 1 + +/obj/item/mecha_parts/mecha_equipment/melee_weapon/precise_attack(atom/target) //No special attack by default. These will be set in the weapons themselves + return 0 + +/obj/item/mecha_parts/mecha_equipment/melee_weapon/cleave_attack() + return 0 + +/obj/item/mecha_parts/mecha_equipment/melee_weapon/sword + name = "generic mech sword" + desc = "Generic mech sword! It's a bit too big to use yourself." + cleave = TRUE + precise_attack = TRUE + attack_sharpness = SHARP_EDGED + +/obj/item/mecha_parts/mecha_equipment/melee_weapon/sword/shortsword //Our bread-and-butter mech shortsword for both slicing and stabbing baddies + name = "\improper GD6 \"Jaeger\" shortsword" + desc = "An extendable arm-mounted blade with a nasty edge. It is small and fast enough to deflect some incoming attacks." + weapon_damage = 15 + deflect_bonus = 15 + +//hold onto this +// new attack_effect(get_turf(src), chassis.dir) +// playsound(chassis, fire_sound, 50, 1) From 99daa66beb61870995bb29c08b7c0e9bcc04a7b9 Mon Sep 17 00:00:00 2001 From: Mek Date: Sun, 30 Oct 2022 00:21:05 -0400 Subject: [PATCH 03/33] rename --- .../mecha/equipment/weapons/{melee_weapons => melee_weapons.dm} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename code/game/mecha/equipment/weapons/{melee_weapons => melee_weapons.dm} (100%) diff --git a/code/game/mecha/equipment/weapons/melee_weapons b/code/game/mecha/equipment/weapons/melee_weapons.dm similarity index 100% rename from code/game/mecha/equipment/weapons/melee_weapons rename to code/game/mecha/equipment/weapons/melee_weapons.dm From f9d54a79e4b3efe465e62af7759c5451e6ce590d Mon Sep 17 00:00:00 2001 From: Mek Date: Sun, 30 Oct 2022 02:45:03 -0400 Subject: [PATCH 04/33] IT ALMOST COMPILES FIRST TRY BABY --- .../mecha/equipment/weapons/melee_weapons.dm | 97 ++++++++++++++++--- code/game/mecha/mecha_actions.dm | 2 +- .../temporary_visuals/miscellaneous.dm | 2 +- 3 files changed, 87 insertions(+), 14 deletions(-) diff --git a/code/game/mecha/equipment/weapons/melee_weapons.dm b/code/game/mecha/equipment/weapons/melee_weapons.dm index 44c0aee015a0..3a177345b68b 100644 --- a/code/game/mecha/equipment/weapons/melee_weapons.dm +++ b/code/game/mecha/equipment/weapons/melee_weapons.dm @@ -9,7 +9,8 @@ var/extended_range = 0 //Attack speed modifier for a weapon. Big weapons will have a longer delay between attacks, while smaller ones will be faster var/attack_speed_modifier = 1 - + //Attack sound for the weapon + var/attack_sound //Attack types - Note that at least one of these must be true otherwise it's not actually a weapon and will have no effect //By default we assume we're using a small weapon with only a special single-target attack //If the weapon has an AOE attack @@ -17,18 +18,25 @@ //If the weapon has a single-target strike var/precise_attacks = TRUE - //Damage type for the weapon var/dam_type = BRUTE //If it's sharp or not var/attack_sharpness = SHARP_NONE //Damage the weapon will do. Note this is ADDED to the base mecha attack damage (usually) var/weapon_damage = 0 + //If we have both cleave and precise attacks, the precise may have more damage + var/precise_weapon_damage = 0 //Bonus deflection chance for using a melee weapon capable of blocking attacks var/deflect_bonus = 0 + //Base armor piercing value of the weapon + var/base_armor_piercing = 0 + //Fauna bonus damage, if any + var/fauna_damage_bonus = 0 + //Structure damage multiplier, for stuff like big ol' smashy hammers. Base structure damage multiplier for mech melee attacks is 3. + var/structure_damage_mult = 3 - - var/attack_effect = /obj/effect/temp_visual/dir_setting/mecha_attack + var/cleave_effect = /obj/effect/temp_visual/dir_setting/mecha_swipe + var/attack_effect = /obj/effect/ /obj/item/mecha_parts/mecha_equipment/melee_weapon/can_attach(obj/mecha/M) if(!..()) @@ -64,14 +72,14 @@ else if(precise_attacks && (get_dist(src,target) <= (1 + extended_range))) //If we are targetting not a turf and they're within reach precise_attack(target) //We stab it if we can else - cleave_attack() //Or swing for the fences if we can't - chassis.log_message("Attacked from [src.name], targeting [target].", LOG_MECHA) + cleave_attack() //Or swing wildly if we can't + chassis.log_message("Attacked with [src.name], targeting [target].", LOG_MECHA) return 1 -/obj/item/mecha_parts/mecha_equipment/melee_weapon/precise_attack(atom/target) //No special attack by default. These will be set in the weapons themselves +/obj/item/mecha_parts/mecha_equipment/melee_weapon/proc/precise_attack(atom/target) //No special attack by default. These will be set in the weapons themselves return 0 -/obj/item/mecha_parts/mecha_equipment/melee_weapon/cleave_attack() +/obj/item/mecha_parts/mecha_equipment/melee_weapon/proc/cleave_attack() return 0 /obj/item/mecha_parts/mecha_equipment/melee_weapon/sword @@ -80,13 +88,78 @@ cleave = TRUE precise_attack = TRUE attack_sharpness = SHARP_EDGED + attack_sound = 'sound/weapons/bladeslice.ogg' + var/minimum_damage = 0 //Baby mechs with a scret combat module get a little boost /obj/item/mecha_parts/mecha_equipment/melee_weapon/sword/shortsword //Our bread-and-butter mech shortsword for both slicing and stabbing baddies name = "\improper GD6 \"Jaeger\" shortsword" desc = "An extendable arm-mounted blade with a nasty edge. It is small and fast enough to deflect some incoming attacks." - weapon_damage = 15 + weapon_damage = 10 + precise_weapon_damage = 15 + fauna_damage_bonus = 30 //because why not deflect_bonus = 15 + base_armor_piercing = 15 + structure_damage_mult = 2 //Sword is not as smashy + minimum_damage = 25 + +/obj/item/mecha_parts/mecha_equipment/melee_weapon/sword/cleave_attack() + var/turf/M = get_turf(src) + var/list/attack_turfs = list() + for(var/i = 0 to 2) + var/turf/T = get_step(M,turn(chassis.dir + (45(1-i)))) //+45, +0, and -45 will get the three front tiles + for(var/atom/A in T.contents) + if(isliving(A)) + var/mob/living/L = A + + if(iscarbon(L)) //If we're a carbon we can get armor and jazz + var/mob/living/carbon/C = L + var/obj/item/bodypart/body_part = pick(C.bodyparts) //Cleave attack isn't very precise + var/armor_block = C.run_armor_check(body_part, MELEE, armour_penetration = base_armor_piercing) + C.apply_damage(max(chassis.force + weapon_damage, minimum_damage), dam_type, body_part, armor_block, sharpness = attack_sharpness) + + else //Regular mobs just take damage + L.apply_damage(max(chassis.force + weapon_damage, minimum_damage), dam_type) + if(ismegafauna(L) || istype(L, /mob/living/simple_animal/hostile/asteroid)) //If we're hitting fauna, because heck those guys + L.apply_damage(fauna_damage_bonus, dam_type) + + L.visible_message(span_danger("[chassis] strikes [L] with a wide swing of its [src]!"), \ + span_userdanger("[chassis] strikes you with [src]!")) + chassis.log_message("Hit [L] with [src.name] (cleave attack).", LOG_MECHA) + + else if(isstructure(A) || ismachinery(A)) //if it's something we can otherwise still hit + var/obj/structure/S = A + if(!A.density) //Make sure it's not an open door or something + continue + var/structure_damage = max(chassis.force + weapon_damage, minimum_damage) * structure_damage_mult + S.take_damage(structure_damage, dam_type, "melee", 0) -//hold onto this -// new attack_effect(get_turf(src), chassis.dir) -// playsound(chassis, fire_sound, 50, 1) + new attack_effect(get_turf(src), chassis.dir) + playsound(chassis, attack_sound, 50, 1) + +/obj/item/mecha_parts/mecha_equipment/melee_weapon/sword/precise_attack(atom/target) + if(isliving(A)) + var/mob/living/L = A + + if(iscarbon(L)) + var/mob/living/carbon/C = L + var/obj/item/bodypart/body_part = chassis.occupant.selected_zone //Precise attacks can be aimed + var/armor_block = C.run_armor_check(body_part, MELEE, armour_penetration = base_armor_piercing * 2) //and get more AP + C.apply_damage(max(chassis.force + precise_weapon_damage, minimum_damage), dam_type, body_part, armor_block, sharpness = attack_sharpness) + + else + L.apply_damage(max(chassis.force + precise_weapon_damage, minimum_damage), dam_type) + if(ismegafauna(L) || istype(L, /mob/living/simple_animal/hostile/asteroid)) //Stab them harder + L.apply_damage(fauna_damage_bonus, dam_type) + + L.visible_message(span_danger("[chassis] strikes [L] with its [src]!"), \ + span_userdanger("[chassis] strikes you with [src]!")) + chassis.log_message("Hit [L] with [src.name] (precise attack).", LOG_MECHA) + + else if(isstructure(A) || ismachinery(A)) //If the initial target is a structure, hit it regardless of if it's dense or not. + var/obj/structure/S = A + var/structure_damage = max(chassis.force + precise_weapon_damage, minimum_damage) * structure_damage_mult + S.take_damage(structure_damage, dam_type, "melee", 0) + else + return + chassis.do_attack_animation(A, ATTACK_EFFECT_SLASH) + playsound(chassis, attack_sound, 50, 1) diff --git a/code/game/mecha/mecha_actions.dm b/code/game/mecha/mecha_actions.dm index 9ed086301a6e..e3c7e5d0250c 100644 --- a/code/game/mecha/mecha_actions.dm +++ b/code/game/mecha/mecha_actions.dm @@ -88,7 +88,7 @@ number++ if(A == chassis.selected) //Swapping to no equipment from something if(available_equipment.len == number) - chasses.selected.on_deselect() + chassis.selected.on_deselect() chassis.selected = null chassis.occupant_message("You switch to no equipment") button_icon_state = "mech_cycle_equip_off" diff --git a/code/game/objects/effects/temporary_visuals/miscellaneous.dm b/code/game/objects/effects/temporary_visuals/miscellaneous.dm index 2617c1f8d46f..79d8151be0d5 100644 --- a/code/game/objects/effects/temporary_visuals/miscellaneous.dm +++ b/code/game/objects/effects/temporary_visuals/miscellaneous.dm @@ -86,7 +86,7 @@ icon_state = "shieldsparkles" duration = 0.3 SECONDS -/obj/effect/temp_visual/dir_setting/firing_effect/mecha_attack +/obj/effect/temp_visual/dir_setting/firing_effect/mecha_swipe icon_state = "big_slash" duration = 0.3 SECONDS From 4058267096a2bb9ed569947e025a54212dcfabc1 Mon Sep 17 00:00:00 2001 From: Mek Date: Sun, 30 Oct 2022 02:59:06 -0400 Subject: [PATCH 05/33] cleanup bed time --- .../game/mecha/equipment/weapons/melee_weapons.dm | 15 +++++++++++++-- code/game/mecha/equipment/weapons/weapons.dm | 2 +- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/code/game/mecha/equipment/weapons/melee_weapons.dm b/code/game/mecha/equipment/weapons/melee_weapons.dm index 3a177345b68b..1311ea54020b 100644 --- a/code/game/mecha/equipment/weapons/melee_weapons.dm +++ b/code/game/mecha/equipment/weapons/melee_weapons.dm @@ -43,11 +43,11 @@ return FALSE if(istype(M, /obj/mecha/combat)) return TRUE - if((locate(/obj/item/mecha_parts/concealed_weapon_bay) in M.contents) && !((locate(/obj/item/mecha_parts/mecha_equipment/melee_weapon) in M.equipment) || (locate(/obj/item/mecha_parts/mecha_equipment/melee_weapon) in M.equipment) )) + if((locate(/obj/item/mecha_parts/concealed_weapon_bay) in M.contents) && !((locate(/obj/item/mecha_parts/mecha_equipment/melee_weapon) in M.equipment) || (locate(/obj/item/mecha_parts/mecha_equipment/weapon) in M.equipment) )) return TRUE return FALSE -/obj/item/mecha_parts/mecha_equipment/melee_weapon/proc/start_cooldown() +/obj/item/mecha_parts/mecha_equipment/melee_weapon/start_cooldown() set_ready_state(0) chassis.use_power(energy_drain) addtimer(CALLBACK(src, .proc/set_ready_state, 1), chassis.melee_cooldown * attack_speed_modifer) //Guns only shoot so fast, but weapons can be used as fast as the chassis can swing it! @@ -82,6 +82,14 @@ /obj/item/mecha_parts/mecha_equipment/melee_weapon/proc/cleave_attack() return 0 +/obj/item/mecha_parts/mecha_equipment/melee_weapon/on_select() + if(deflect_bonus) + chassis.deflect_chance += deflect_bonus + +/obj/item/mecha_parts/mecha_equipment/melee_weapon/on_deselect() + if(deflect_bonus) + chassis.deflect_chance -= deflect_bonus + /obj/item/mecha_parts/mecha_equipment/melee_weapon/sword name = "generic mech sword" desc = "Generic mech sword! It's a bit too big to use yourself." @@ -94,6 +102,7 @@ /obj/item/mecha_parts/mecha_equipment/melee_weapon/sword/shortsword //Our bread-and-butter mech shortsword for both slicing and stabbing baddies name = "\improper GD6 \"Jaeger\" shortsword" desc = "An extendable arm-mounted blade with a nasty edge. It is small and fast enough to deflect some incoming attacks." + energy_drain = 20 weapon_damage = 10 precise_weapon_damage = 15 fauna_damage_bonus = 30 //because why not @@ -163,3 +172,5 @@ return chassis.do_attack_animation(A, ATTACK_EFFECT_SLASH) playsound(chassis, attack_sound, 50, 1) + + diff --git a/code/game/mecha/equipment/weapons/weapons.dm b/code/game/mecha/equipment/weapons/weapons.dm index 3b757e0461f6..861ba1fae2e2 100644 --- a/code/game/mecha/equipment/weapons/weapons.dm +++ b/code/game/mecha/equipment/weapons/weapons.dm @@ -26,7 +26,7 @@ return FALSE if(istype(M, /obj/mecha/combat)) return TRUE - if((locate(/obj/item/mecha_parts/concealed_weapon_bay) in M.contents) && !(locate(/obj/item/mecha_parts/mecha_equipment/weapon) in M.equipment)) + if((locate(/obj/item/mecha_parts/concealed_weapon_bay) in M.contents) && !((locate(/obj/item/mecha_parts/mecha_equipment/melee_weapon) in M.equipment) || (locate(/obj/item/mecha_parts/mecha_equipment/weapon) in M.equipment) )) return TRUE return FALSE From 5f2178be74ed97569aa69278b192687371aae9d1 Mon Sep 17 00:00:00 2001 From: Mek Date: Sun, 30 Oct 2022 03:01:59 -0400 Subject: [PATCH 06/33] use the name --- code/game/mecha/equipment/weapons/melee_weapons.dm | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/code/game/mecha/equipment/weapons/melee_weapons.dm b/code/game/mecha/equipment/weapons/melee_weapons.dm index 1311ea54020b..5d3003ca960e 100644 --- a/code/game/mecha/equipment/weapons/melee_weapons.dm +++ b/code/game/mecha/equipment/weapons/melee_weapons.dm @@ -131,8 +131,8 @@ if(ismegafauna(L) || istype(L, /mob/living/simple_animal/hostile/asteroid)) //If we're hitting fauna, because heck those guys L.apply_damage(fauna_damage_bonus, dam_type) - L.visible_message(span_danger("[chassis] strikes [L] with a wide swing of its [src]!"), \ - span_userdanger("[chassis] strikes you with [src]!")) + L.visible_message(span_danger("[chassis.name] strikes [L] with a wide swing of its [src]!"), \ + span_userdanger("[chassis.name] strikes you with [src]!")) chassis.log_message("Hit [L] with [src.name] (cleave attack).", LOG_MECHA) else if(isstructure(A) || ismachinery(A)) //if it's something we can otherwise still hit @@ -160,8 +160,8 @@ if(ismegafauna(L) || istype(L, /mob/living/simple_animal/hostile/asteroid)) //Stab them harder L.apply_damage(fauna_damage_bonus, dam_type) - L.visible_message(span_danger("[chassis] strikes [L] with its [src]!"), \ - span_userdanger("[chassis] strikes you with [src]!")) + L.visible_message(span_danger("[chassis.name] strikes [L] with its [src]!"), \ + span_userdanger("[chassis.name] strikes you with [src]!")) chassis.log_message("Hit [L] with [src.name] (precise attack).", LOG_MECHA) else if(isstructure(A) || ismachinery(A)) //If the initial target is a structure, hit it regardless of if it's dense or not. From abae592da74091776002b89177657924478df544 Mon Sep 17 00:00:00 2001 From: Mek Date: Sun, 30 Oct 2022 23:02:57 -0400 Subject: [PATCH 07/33] Now with slashing sprite! --- icons/effects/96x96.dmi | Bin 1642584 -> 1648340 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/icons/effects/96x96.dmi b/icons/effects/96x96.dmi index 9818a648366f8120e83d7f5ee64f9bd636552248..60d1b9678ba53d79a388ac88697307740bdfa872 100644 GIT binary patch delta 28873 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 delta 23090 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 Date: Sun, 30 Oct 2022 23:17:23 -0400 Subject: [PATCH 08/33] fix --- code/game/objects/effects/temporary_visuals/miscellaneous.dm | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/code/game/objects/effects/temporary_visuals/miscellaneous.dm b/code/game/objects/effects/temporary_visuals/miscellaneous.dm index 79d8151be0d5..3271c6070f08 100644 --- a/code/game/objects/effects/temporary_visuals/miscellaneous.dm +++ b/code/game/objects/effects/temporary_visuals/miscellaneous.dm @@ -82,11 +82,12 @@ duration = 0.3 SECONDS /obj/effect/temp_visual/dir_setting/firing_effect/magic - icon = "icons/effects/96x96.dmi" + icon = 'icons/effects/96x96.dmi' icon_state = "shieldsparkles" duration = 0.3 SECONDS /obj/effect/temp_visual/dir_setting/firing_effect/mecha_swipe + icon = 'icons/effects/96x96.dmi' icon_state = "big_slash" duration = 0.3 SECONDS From 3477ac2edfc175e0a9686291dd4f4bf03b74da67 Mon Sep 17 00:00:00 2001 From: Mek Date: Mon, 31 Oct 2022 11:16:27 -0400 Subject: [PATCH 09/33] pretty much done --- .../mecha/equipment/weapons/melee_weapons.dm | 48 +++++++++---------- code/modules/mob/living/living_defense.dm | 4 +- yogstation.dme | 1 + 3 files changed, 27 insertions(+), 26 deletions(-) diff --git a/code/game/mecha/equipment/weapons/melee_weapons.dm b/code/game/mecha/equipment/weapons/melee_weapons.dm index 5d3003ca960e..9c003660d8b5 100644 --- a/code/game/mecha/equipment/weapons/melee_weapons.dm +++ b/code/game/mecha/equipment/weapons/melee_weapons.dm @@ -2,7 +2,7 @@ name = "mecha melee weapon" range = MECHA_MELEE|MECHA_RANGED //so we can do stuff at range and in melee destroy_sound = 'sound/mecha/weapdestr.ogg' - mech_flags = EXOSUIT_MODULE_COMBAT + mech_flags = EXOSUIT_MODULE_COMBAT melee_override = TRUE var/restricted = TRUE //for our special hugbox exofabs //If we have a longer range weapon, such as a spear or whatever capable of hitting people further away, this is how much extra range it has @@ -14,7 +14,7 @@ //Attack types - Note that at least one of these must be true otherwise it's not actually a weapon and will have no effect //By default we assume we're using a small weapon with only a special single-target attack //If the weapon has an AOE attack - var/cleave = FALSE + var/cleave = FALSE //If the weapon has a single-target strike var/precise_attacks = TRUE @@ -35,7 +35,7 @@ //Structure damage multiplier, for stuff like big ol' smashy hammers. Base structure damage multiplier for mech melee attacks is 3. var/structure_damage_mult = 3 - var/cleave_effect = /obj/effect/temp_visual/dir_setting/mecha_swipe + var/cleave_effect = /obj/effect/temp_visual/dir_setting/firing_effect/mecha_swipe var/attack_effect = /obj/effect/ /obj/item/mecha_parts/mecha_equipment/melee_weapon/can_attach(obj/mecha/M) @@ -50,7 +50,7 @@ /obj/item/mecha_parts/mecha_equipment/melee_weapon/start_cooldown() set_ready_state(0) chassis.use_power(energy_drain) - addtimer(CALLBACK(src, .proc/set_ready_state, 1), chassis.melee_cooldown * attack_speed_modifer) //Guns only shoot so fast, but weapons can be used as fast as the chassis can swing it! + addtimer(CALLBACK(src, .proc/set_ready_state, 1), chassis.melee_cooldown * attack_speed_modifier) //Guns only shoot so fast, but weapons can be used as fast as the chassis can swing it! //THIS ISNT EVEN CLOSE TO DONE YET //Melee weapon attacks are a little different in that they'll override the standard melee attack @@ -66,13 +66,12 @@ return 0 - if(target == targloc && !(chassis.occupant.a_intent == INTENT_HELP)) //If we are targetting a location, not an object or mob, and we're not in a passive stance - if(cleave) - cleave_attack() + if(target == targloc && !(chassis.occupant.a_intent == INTENT_HELP) && cleave) //If we are targetting a location, not an object or mob, and we're not in a passive stance + cleave_attack() else if(precise_attacks && (get_dist(src,target) <= (1 + extended_range))) //If we are targetting not a turf and they're within reach precise_attack(target) //We stab it if we can - else - cleave_attack() //Or swing wildly if we can't + else if(cleave) + cleave_attack() //Or swing wildly chassis.log_message("Attacked with [src.name], targeting [target].", LOG_MECHA) return 1 @@ -94,7 +93,7 @@ name = "generic mech sword" desc = "Generic mech sword! It's a bit too big to use yourself." cleave = TRUE - precise_attack = TRUE + precise_attacks = TRUE attack_sharpness = SHARP_EDGED attack_sound = 'sound/weapons/bladeslice.ogg' var/minimum_damage = 0 //Baby mechs with a scret combat module get a little boost @@ -113,9 +112,8 @@ /obj/item/mecha_parts/mecha_equipment/melee_weapon/sword/cleave_attack() var/turf/M = get_turf(src) - var/list/attack_turfs = list() for(var/i = 0 to 2) - var/turf/T = get_step(M,turn(chassis.dir + (45(1-i)))) //+45, +0, and -45 will get the three front tiles + var/turf/T = get_step(M,turn(chassis.dir, (45(1-i)))) //+45, +0, and -45 will get the three front tiles for(var/atom/A in T.contents) if(isliving(A)) var/mob/living/L = A @@ -146,12 +144,12 @@ playsound(chassis, attack_sound, 50, 1) /obj/item/mecha_parts/mecha_equipment/melee_weapon/sword/precise_attack(atom/target) - if(isliving(A)) - var/mob/living/L = A + if(isliving(target)) + var/mob/living/L = target if(iscarbon(L)) var/mob/living/carbon/C = L - var/obj/item/bodypart/body_part = chassis.occupant.selected_zone //Precise attacks can be aimed + var/obj/item/bodypart/body_part = chassis.occupant.zone_selected var/armor_block = C.run_armor_check(body_part, MELEE, armour_penetration = base_armor_piercing * 2) //and get more AP C.apply_damage(max(chassis.force + precise_weapon_damage, minimum_damage), dam_type, body_part, armor_block, sharpness = attack_sharpness) @@ -162,15 +160,15 @@ L.visible_message(span_danger("[chassis.name] strikes [L] with its [src]!"), \ span_userdanger("[chassis.name] strikes you with [src]!")) - chassis.log_message("Hit [L] with [src.name] (precise attack).", LOG_MECHA) - - else if(isstructure(A) || ismachinery(A)) //If the initial target is a structure, hit it regardless of if it's dense or not. - var/obj/structure/S = A - var/structure_damage = max(chassis.force + precise_weapon_damage, minimum_damage) * structure_damage_mult - S.take_damage(structure_damage, dam_type, "melee", 0) - else - return - chassis.do_attack_animation(A, ATTACK_EFFECT_SLASH) - playsound(chassis, attack_sound, 50, 1) + chassis.log_message("Hit [L] with [src.name] (precise attack).", LOG_MECHA) + + else if(isstructure(target) || ismachinery(target)) //If the initial target is a structure, hit it regardless of if it's dense or not. + var/obj/structure/S = target + var/structure_damage = max(chassis.force + precise_weapon_damage, minimum_damage) * structure_damage_mult + S.take_damage(structure_damage, dam_type, "melee", 0) + else + return + chassis.do_attack_animation(target, ATTACK_EFFECT_SLASH) + playsound(chassis, attack_sound, 50, 1) diff --git a/code/modules/mob/living/living_defense.dm b/code/modules/mob/living/living_defense.dm index f07d0075c740..5eb3786fd392 100644 --- a/code/modules/mob/living/living_defense.dm +++ b/code/modules/mob/living/living_defense.dm @@ -100,7 +100,9 @@ /mob/living/mech_melee_attack(obj/mecha/M) - if(M.occupant.a_intent == INTENT_HARM) + if(M.selected?.melee_override) + M.selected.action(src) + else if(M.occupant.a_intent == INTENT_HARM) last_damage = "grand blunt trauma" M.do_attack_animation(src) if(M.damtype == "brute") diff --git a/yogstation.dme b/yogstation.dme index 053399ea2026..c00049b62211 100644 --- a/yogstation.dme +++ b/yogstation.dme @@ -884,6 +884,7 @@ #include "code\game\mecha\equipment\tools\weapon_bay.dm" #include "code\game\mecha\equipment\tools\work_tools.dm" #include "code\game\mecha\equipment\weapons\mecha_ammo.dm" +#include "code\game\mecha\equipment\weapons\melee_weapons.dm" #include "code\game\mecha\equipment\weapons\weapons.dm" #include "code\game\mecha\medical\medical.dm" #include "code\game\mecha\medical\odysseus.dm" From b96ca1115260afc8c0d6d0d73bb5a7c081186fe8 Mon Sep 17 00:00:00 2001 From: Mek Date: Mon, 31 Oct 2022 14:07:34 -0400 Subject: [PATCH 10/33] missing override --- code/modules/mob/living/carbon/human/human_defense.dm | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm index 076ce2f56af0..37b1af6ee314 100644 --- a/code/modules/mob/living/carbon/human/human_defense.dm +++ b/code/modules/mob/living/carbon/human/human_defense.dm @@ -379,7 +379,8 @@ apply_damage(damage, BRUTE, affecting, armor_block, wound_bonus=wound_mod) /mob/living/carbon/human/mech_melee_attack(obj/mecha/M) - + if(M.selected?.melee_override) + M.selected.action(src) if(M.occupant.a_intent == INTENT_HARM) M.do_attack_animation(src) if(M.damtype == BRUTE) From 1ef93665e7b4ca2a5ad56f51d16ca9135b94db66 Mon Sep 17 00:00:00 2001 From: Mek Date: Mon, 31 Oct 2022 14:57:18 -0400 Subject: [PATCH 11/33] plus axe and ifst --- .../mecha/equipment/weapons/melee_weapons.dm | 67 ++++++++++++++++++- 1 file changed, 65 insertions(+), 2 deletions(-) diff --git a/code/game/mecha/equipment/weapons/melee_weapons.dm b/code/game/mecha/equipment/weapons/melee_weapons.dm index 9c003660d8b5..9e68fb0c5249 100644 --- a/code/game/mecha/equipment/weapons/melee_weapons.dm +++ b/code/game/mecha/equipment/weapons/melee_weapons.dm @@ -11,7 +11,7 @@ var/attack_speed_modifier = 1 //Attack sound for the weapon var/attack_sound - //Attack types - Note that at least one of these must be true otherwise it's not actually a weapon and will have no effect + //Attack types - Note that at least one of these must be true otherwise it'll only have passive effects (if any) //By default we assume we're using a small weapon with only a special single-target attack //If the weapon has an AOE attack var/cleave = FALSE @@ -108,7 +108,7 @@ deflect_bonus = 15 base_armor_piercing = 15 structure_damage_mult = 2 //Sword is not as smashy - minimum_damage = 25 + minimum_damage = 20 /obj/item/mecha_parts/mecha_equipment/melee_weapon/sword/cleave_attack() var/turf/M = get_turf(src) @@ -171,4 +171,67 @@ chassis.do_attack_animation(target, ATTACK_EFFECT_SLASH) playsound(chassis, attack_sound, 50, 1) +/obj/item/mecha_parts/mecha_equipment/melee_weapon/sword/energy_axe + name = "\improper SH-NT \"Killerhurtz\" energy axe" + desc = "An oversized, destructive-looking axe with a powered edge. While far too big for use by an individual, an exosuit might be able to wield it." + precise_attacks = FALSE //This is not a weapon of precision, it is a weapon of destruction + energy_drain = 40 + weapon_damage = 20 + fauna_damage_bonus = 30 //If you're fighting fauna with this thing, why? I mean it works, I guess. + base_armor_piercing = 40 + structure_damage_mult = 4 //Think like obi-wan cutting through a bulkhead with his lightsaber but he's a giant mech and it's a terrifying axe + minimum_damage = 30 + attack_speed_modifier = 1.5 //Kinda chunky + +/obj/item/mecha_parts/mecha_equipment/melee_weapon/sword/energy_axe/cleave_attack() + var/turf/M = get_turf(src) + for(var/i = 0 to 2) + var/turf/T = get_step(M,turn(chassis.dir, (45(1-i)))) //+45, +0, and -45 will get the three front tiles + for(var/atom/A in T.contents) + if(isliving(A)) + var/mob/living/L = A + + if(iscarbon(L)) //If we're a carbon we can get armor and jazz + var/mob/living/carbon/C = L + var/obj/item/bodypart/body_part = pick(C.bodyparts) //Cleave attack isn't very precise + var/armor_block = C.run_armor_check(body_part, MELEE, armour_penetration = base_armor_piercing) + C.apply_damage(max(chassis.force + weapon_damage, minimum_damage), dam_type, body_part, armor_block, sharpness = attack_sharpness) + + else //Regular mobs just take damage + L.apply_damage(max(chassis.force + weapon_damage, minimum_damage), dam_type) + if(ismegafauna(L) || istype(L, /mob/living/simple_animal/hostile/asteroid)) //If we're hitting fauna, because heck those guys + L.apply_damage(fauna_damage_bonus, dam_type) + + L.visible_message(span_danger("[chassis.name] strikes [L] with a wide swing of its [src]!"), \ + span_userdanger("[chassis.name] strikes you with [src]!")) + chassis.log_message("Hit [L] with [src.name] (cleave attack).", LOG_MECHA) + + else if(isstructure(A) || ismachinery(A)) //if it's something we can otherwise still hit + var/obj/structure/S = A + if(!A.density) //Make sure it's not an open door or something + continue + var/structure_damage = max(chassis.force + weapon_damage, minimum_damage) * structure_damage_mult + S.take_damage(structure_damage, dam_type, "melee", 0) + + else if(istype(A, /turf/closed/wall)) //IT BREAKS WALLS TOO + var/turf/closed/wall/W = A + W.dismantle_wall() + + new attack_effect(get_turf(src), chassis.dir) + playsound(chassis, attack_sound, 50, 1) +/obj/item/mecha_parts/mecha_equipment/melee_weapon/rocket_fist //Passive upgrade weapon when selected, makes your mech punch harder AND faster + name = "\improper DD-2 \"Atom Smasher\" rocket fist" + desc = "An large metal fist fitted to the arm of an exosuit, it uses repurposed maneuvering thrusters from a Raven battlecruiser to give a little more oomph to every punche. Also helps increase the speed at which the mech is able to return to a ready stance after each swing." + melee_override = FALSE //We'll just buff the regular punch + precise_attacks = FALSE + cleave = FALSE + weapon_damage = 15 + +/obj/item/mecha_parts/mecha_equipment/melee_weapon/rocket_fist/on_select() + chassis.force += weapon_damage //PUNCH HARDER + chassis.melee_cooldown *= 0.8 //PUNCH FASTER + +/obj/item/mecha_parts/mecha_equipment/melee_weapon/rocket_fist/on_deselect() + chassis.force -= weapon_damage //Return to babby fist + chassis.melee_cooldown /= 0.8 From 609a02ca7fd1f62ccf11495550eb8fb977ccc56d Mon Sep 17 00:00:00 2001 From: Mek Date: Mon, 31 Oct 2022 14:58:36 -0400 Subject: [PATCH 12/33] dont doublekill people --- code/modules/mob/living/carbon/human/human_defense.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm index 37b1af6ee314..e0f9ec9c8379 100644 --- a/code/modules/mob/living/carbon/human/human_defense.dm +++ b/code/modules/mob/living/carbon/human/human_defense.dm @@ -381,7 +381,7 @@ /mob/living/carbon/human/mech_melee_attack(obj/mecha/M) if(M.selected?.melee_override) M.selected.action(src) - if(M.occupant.a_intent == INTENT_HARM) + else if(M.occupant.a_intent == INTENT_HARM) M.do_attack_animation(src) if(M.damtype == BRUTE) step_away(src,M,15) From ab3c07389c321d0d2a869b0d14a323ee672e0d28 Mon Sep 17 00:00:00 2001 From: Mek Date: Mon, 31 Oct 2022 15:00:08 -0400 Subject: [PATCH 13/33] an --- code/game/mecha/equipment/weapons/melee_weapons.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/mecha/equipment/weapons/melee_weapons.dm b/code/game/mecha/equipment/weapons/melee_weapons.dm index 9e68fb0c5249..4282de59d2c7 100644 --- a/code/game/mecha/equipment/weapons/melee_weapons.dm +++ b/code/game/mecha/equipment/weapons/melee_weapons.dm @@ -222,7 +222,7 @@ /obj/item/mecha_parts/mecha_equipment/melee_weapon/rocket_fist //Passive upgrade weapon when selected, makes your mech punch harder AND faster name = "\improper DD-2 \"Atom Smasher\" rocket fist" - desc = "An large metal fist fitted to the arm of an exosuit, it uses repurposed maneuvering thrusters from a Raven battlecruiser to give a little more oomph to every punche. Also helps increase the speed at which the mech is able to return to a ready stance after each swing." + desc = "A large metal fist fitted to the arm of an exosuit, it uses repurposed maneuvering thrusters from a Raven battlecruiser to give a little more oomph to every punche. Also helps increase the speed at which the mech is able to return to a ready stance after each swing." melee_override = FALSE //We'll just buff the regular punch precise_attacks = FALSE cleave = FALSE From 22bdf0108079da494e352ac216eed87f9a35f51e Mon Sep 17 00:00:00 2001 From: Mek Date: Mon, 31 Oct 2022 15:07:03 -0400 Subject: [PATCH 14/33] reduce combat mech damage --- code/game/mecha/combat/combat.dm | 2 +- code/game/mecha/combat/marauder.dm | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/code/game/mecha/combat/combat.dm b/code/game/mecha/combat/combat.dm index 55b43891927d..be61ee233321 100644 --- a/code/game/mecha/combat/combat.dm +++ b/code/game/mecha/combat/combat.dm @@ -1,5 +1,5 @@ /obj/mecha/combat - force = 30 + force = 25 internals_req_access = list(ACCESS_MECH_SCIENCE, ACCESS_MECH_SECURITY) internal_damage_threshold = 50 armor = list(MELEE = 30, BULLET = 30, LASER = 15, ENERGY = 20, BOMB = 20, BIO = 0, RAD = 0, FIRE = 100, ACID = 100) diff --git a/code/game/mecha/combat/marauder.dm b/code/game/mecha/combat/marauder.dm index bc659de5417a..2a12c9443e44 100644 --- a/code/game/mecha/combat/marauder.dm +++ b/code/game/mecha/combat/marauder.dm @@ -14,7 +14,7 @@ wreckage = /obj/structure/mecha_wreckage/marauder add_req_access = 0 internal_damage_threshold = 25 - force = 45 + force = 40 max_equip = 4 bumpsmash = 1 @@ -52,7 +52,7 @@ max_integrity = 550 wreckage = /obj/structure/mecha_wreckage/seraph internal_damage_threshold = 20 - force = 55 + force = 50 max_equip = 5 /obj/mecha/combat/marauder/seraph/Initialize() From 919f61c76f711ee678864ea5ce71a6fdeb014ea4 Mon Sep 17 00:00:00 2001 From: Mek Date: Mon, 31 Oct 2022 16:21:01 -0400 Subject: [PATCH 15/33] SOUND --- .../mecha/equipment/weapons/melee_weapons.dm | 2 +- sound/weapons/mechasword.ogg | Bin 0 -> 19105 bytes 2 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 sound/weapons/mechasword.ogg diff --git a/code/game/mecha/equipment/weapons/melee_weapons.dm b/code/game/mecha/equipment/weapons/melee_weapons.dm index 4282de59d2c7..46920eb1179a 100644 --- a/code/game/mecha/equipment/weapons/melee_weapons.dm +++ b/code/game/mecha/equipment/weapons/melee_weapons.dm @@ -95,7 +95,7 @@ cleave = TRUE precise_attacks = TRUE attack_sharpness = SHARP_EDGED - attack_sound = 'sound/weapons/bladeslice.ogg' + attack_sound = 'sound/weapons/mechasword.ogg' var/minimum_damage = 0 //Baby mechs with a scret combat module get a little boost /obj/item/mecha_parts/mecha_equipment/melee_weapon/sword/shortsword //Our bread-and-butter mech shortsword for both slicing and stabbing baddies diff --git a/sound/weapons/mechasword.ogg b/sound/weapons/mechasword.ogg new file mode 100644 index 0000000000000000000000000000000000000000..c552993bfcf27f287797164dea1ef81c77d77695 GIT binary patch literal 19105 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 FiUfsLFMR+2 literal 0 HcmV?d00001 From 8c0021bac7e6236773c9fd252011aa3b521a09b7 Mon Sep 17 00:00:00 2001 From: Mek Date: Mon, 31 Oct 2022 16:27:01 -0400 Subject: [PATCH 16/33] comment credit or whatever --- code/game/mecha/equipment/weapons/melee_weapons.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/mecha/equipment/weapons/melee_weapons.dm b/code/game/mecha/equipment/weapons/melee_weapons.dm index 46920eb1179a..b97e75d88128 100644 --- a/code/game/mecha/equipment/weapons/melee_weapons.dm +++ b/code/game/mecha/equipment/weapons/melee_weapons.dm @@ -95,7 +95,7 @@ cleave = TRUE precise_attacks = TRUE attack_sharpness = SHARP_EDGED - attack_sound = 'sound/weapons/mechasword.ogg' + attack_sound = 'sound/weapons/mechasword.ogg' //Recorded from Respawn/EA's Titanfall 2 (Ronin broadsword swing). Apparently they don't care so we're probably good var/minimum_damage = 0 //Baby mechs with a scret combat module get a little boost /obj/item/mecha_parts/mecha_equipment/melee_weapon/sword/shortsword //Our bread-and-butter mech shortsword for both slicing and stabbing baddies From 8bbeb9e64a290f988cdd77022cd2859443511fb8 Mon Sep 17 00:00:00 2001 From: Mek Date: Mon, 31 Oct 2022 16:58:08 -0400 Subject: [PATCH 17/33] axe buff --- .../mecha/equipment/weapons/melee_weapons.dm | 43 +++++++++++-------- 1 file changed, 26 insertions(+), 17 deletions(-) diff --git a/code/game/mecha/equipment/weapons/melee_weapons.dm b/code/game/mecha/equipment/weapons/melee_weapons.dm index b97e75d88128..3aa284f947be 100644 --- a/code/game/mecha/equipment/weapons/melee_weapons.dm +++ b/code/game/mecha/equipment/weapons/melee_weapons.dm @@ -110,7 +110,7 @@ structure_damage_mult = 2 //Sword is not as smashy minimum_damage = 20 -/obj/item/mecha_parts/mecha_equipment/melee_weapon/sword/cleave_attack() +/obj/item/mecha_parts/mecha_equipment/melee_weapon/sword/cleave_attack() //use this for basic cleaving attacks, tweak as needed var/turf/M = get_turf(src) for(var/i = 0 to 2) var/turf/T = get_step(M,turn(chassis.dir, (45(1-i)))) //+45, +0, and -45 will get the three front tiles @@ -133,12 +133,12 @@ span_userdanger("[chassis.name] strikes you with [src]!")) chassis.log_message("Hit [L] with [src.name] (cleave attack).", LOG_MECHA) - else if(isstructure(A) || ismachinery(A)) //if it's something we can otherwise still hit - var/obj/structure/S = A - if(!A.density) //Make sure it's not an open door or something + else if(isstructure(A) || ismachinery(A) || istype(A, /obj/mecha)) //if it's something we can otherwise still hit + var/obj/O = A + if(!O.density) //Make sure it's not an open door or something continue - var/structure_damage = max(chassis.force + weapon_damage, minimum_damage) * structure_damage_mult - S.take_damage(structure_damage, dam_type, "melee", 0) + var/object_damage = max(chassis.force + weapon_damage, minimum_damage) * structure_damage_mult + O.take_damage(object_damage, dam_type, "melee", 0) new attack_effect(get_turf(src), chassis.dir) playsound(chassis, attack_sound, 50, 1) @@ -162,10 +162,10 @@ span_userdanger("[chassis.name] strikes you with [src]!")) chassis.log_message("Hit [L] with [src.name] (precise attack).", LOG_MECHA) - else if(isstructure(target) || ismachinery(target)) //If the initial target is a structure, hit it regardless of if it's dense or not. - var/obj/structure/S = target - var/structure_damage = max(chassis.force + precise_weapon_damage, minimum_damage) * structure_damage_mult - S.take_damage(structure_damage, dam_type, "melee", 0) + else if(isstructure(target) || ismachinery(target) || istype(target, /obj/mecha)) //If the initial target is a big object, hit it even if it's not dense. + var/obj/O = target + var/object_damage = max(chassis.force + precise_weapon_damage, minimum_damage) * structure_damage_mult + O.take_damage(object_damage, dam_type, "melee", 0) else return chassis.do_attack_animation(target, ATTACK_EFFECT_SLASH) @@ -179,9 +179,10 @@ weapon_damage = 20 fauna_damage_bonus = 30 //If you're fighting fauna with this thing, why? I mean it works, I guess. base_armor_piercing = 40 - structure_damage_mult = 4 //Think like obi-wan cutting through a bulkhead with his lightsaber but he's a giant mech and it's a terrifying axe + structure_damage_mult = 4 //Think obi-wan cutting through a bulkhead with his lightsaber but he's a giant mech and it's a terrifying axe minimum_damage = 30 - attack_speed_modifier = 1.5 //Kinda chunky + attack_speed_modifier = 1.5 //Kinda chunky + light_color = LIGHT_COLOR_RED /obj/item/mecha_parts/mecha_equipment/melee_weapon/sword/energy_axe/cleave_attack() var/turf/M = get_turf(src) @@ -206,12 +207,12 @@ span_userdanger("[chassis.name] strikes you with [src]!")) chassis.log_message("Hit [L] with [src.name] (cleave attack).", LOG_MECHA) - else if(isstructure(A) || ismachinery(A)) //if it's something we can otherwise still hit - var/obj/structure/S = A - if(!A.density) //Make sure it's not an open door or something + else if(isstructure(A) || ismachinery(A) || istype(A, /obj/mecha)) //if it's something we can otherwise still hit + var/obj/O = A + if(!O.density) //Make sure it's not an open door or something continue - var/structure_damage = max(chassis.force + weapon_damage, minimum_damage) * structure_damage_mult - S.take_damage(structure_damage, dam_type, "melee", 0) + var/object_damage = max(chassis.force + weapon_damage, minimum_damage) * structure_damage_mult + O.take_damage(object_damage, dam_type, "melee", 0) else if(istype(A, /turf/closed/wall)) //IT BREAKS WALLS TOO var/turf/closed/wall/W = A @@ -220,6 +221,14 @@ new attack_effect(get_turf(src), chassis.dir) playsound(chassis, attack_sound, 50, 1) +/obj/item/mecha_parts/mecha_equipment/melee_weapon/sword/energy_axe/on_select() + START_PROCESSING(SSobj, src) + set_light(5) + +/obj/item/mecha_parts/mecha_equipment/melee_weapon/sword/energy_axe/on_deselect() + STOP_PROCESSING(SSobj, src) + set_light(0) + /obj/item/mecha_parts/mecha_equipment/melee_weapon/rocket_fist //Passive upgrade weapon when selected, makes your mech punch harder AND faster name = "\improper DD-2 \"Atom Smasher\" rocket fist" desc = "A large metal fist fitted to the arm of an exosuit, it uses repurposed maneuvering thrusters from a Raven battlecruiser to give a little more oomph to every punche. Also helps increase the speed at which the mech is able to return to a ready stance after each swing." From e95baabaa6692a61c50a85cbbd1ef3ad429a2c47 Mon Sep 17 00:00:00 2001 From: Mek Date: Mon, 31 Oct 2022 19:30:00 -0400 Subject: [PATCH 18/33] tehc web --- code/modules/research/designs/mecha_designs.dm | 18 ++++++++++++++++++ code/modules/research/techweb/all_nodes.dm | 16 ++++++++++++++++ code/modules/research/techweb/layout.dm | 8 ++++++++ 3 files changed, 42 insertions(+) diff --git a/code/modules/research/designs/mecha_designs.dm b/code/modules/research/designs/mecha_designs.dm index ae0d0c5bd348..f8c29c4c7f76 100644 --- a/code/modules/research/designs/mecha_designs.dm +++ b/code/modules/research/designs/mecha_designs.dm @@ -488,3 +488,21 @@ construction_time = 250 build_path = /obj/item/mecha_parts/mecha_equipment/medical/mechmedbeam category = list("Exosuit Equipment") + +/datum/design/mech_rocket_fist + name = "Exosuit Weapon (DD-2 \"Atom Smasher\" Rocket Fist)" + id = "mech_rocket_fist" + build_type = MECHFAB + build_path = /obj/item/mecha_parts/mecha_equipment/melee_weapon/rocket_fist + materials = list(/datum/material/iron=20000,/datum/material/plasma=10000) + construction_time = 100 + category = list("Exosuit Equipment") + +/datum/design/mech_shortsword + name = "Exosuit Weapon (GD6 \"Jaeger\" Shortsword)" + id = "mech_shortsword" + build_type = MECHFAB + build_path = /obj/item/mecha_parts/mecha_equipment/melee_weapon/sword/shortsword + materials = list(/datum/material/iron=15000,/datum/material/titanium=10000,/datum/material/plasma=10000) + construction_time = 100 + category = list("Exosuit Equipment") diff --git a/code/modules/research/techweb/all_nodes.dm b/code/modules/research/techweb/all_nodes.dm index d750724857e2..f833ce83c480 100644 --- a/code/modules/research/techweb/all_nodes.dm +++ b/code/modules/research/techweb/all_nodes.dm @@ -925,6 +925,22 @@ design_ids = list("mech_diamond_drill") research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) +/datum/techweb_node/mech_rocket_fist + id = "mech_rocket_fist" + display_name = "Exosuit Weapon (DD-2 \"Atom Smasher\" Rocket Fist)" + description = "An advanced piece of mech weaponry" + prereq_ids = list("adv_mecha","weaponry") + design_ids = list("mech_rocket_fist") + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) + +/datum/techweb_node/mech_shortsword + id = "mech_shortsword" + display_name = "Exosuit Weapon (GD6 \"Jaeger\" Shortsword)" + description = "An advanced piece of mech weaponry" + prereq_ids = list("adv_mecha","adv_weaponry") + design_ids = list("mech_shortsword") + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) + /////////////////////////Nanites///////////////////////// /datum/techweb_node/nanite_base id = "nanite_base" diff --git a/code/modules/research/techweb/layout.dm b/code/modules/research/techweb/layout.dm index 8d8dac950469..cb81314ae831 100644 --- a/code/modules/research/techweb/layout.dm +++ b/code/modules/research/techweb/layout.dm @@ -599,6 +599,14 @@ ui_x = -640 ui_y = -896 +/datum/techweb_node/mech_rocket_fist + ui_x = -576 + ui_y = -96 + +/datum/techweb_node/mech_shortsword + ui_x = -640 + ui_y = -96 + /datum/techweb_node/bshipc ui_x = -224 ui_y = 32 From 9ae3e60956f6eacaa1929519576b286ab1f24d27 Mon Sep 17 00:00:00 2001 From: Mek Date: Mon, 31 Oct 2022 23:06:10 -0400 Subject: [PATCH 19/33] parentheses --- code/game/mecha/equipment/weapons/melee_weapons.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/game/mecha/equipment/weapons/melee_weapons.dm b/code/game/mecha/equipment/weapons/melee_weapons.dm index 3aa284f947be..61ebe4f51fb5 100644 --- a/code/game/mecha/equipment/weapons/melee_weapons.dm +++ b/code/game/mecha/equipment/weapons/melee_weapons.dm @@ -113,7 +113,7 @@ /obj/item/mecha_parts/mecha_equipment/melee_weapon/sword/cleave_attack() //use this for basic cleaving attacks, tweak as needed var/turf/M = get_turf(src) for(var/i = 0 to 2) - var/turf/T = get_step(M,turn(chassis.dir, (45(1-i)))) //+45, +0, and -45 will get the three front tiles + var/turf/T = get_step(M,turn(chassis.dir, 45*(1-i))) //+45, +0, and -45 will get the three front tiles for(var/atom/A in T.contents) if(isliving(A)) var/mob/living/L = A @@ -187,7 +187,7 @@ /obj/item/mecha_parts/mecha_equipment/melee_weapon/sword/energy_axe/cleave_attack() var/turf/M = get_turf(src) for(var/i = 0 to 2) - var/turf/T = get_step(M,turn(chassis.dir, (45(1-i)))) //+45, +0, and -45 will get the three front tiles + var/turf/T = get_step(M,turn(chassis.dir, 45*(1-i))) //+45, +0, and -45 will get the three front tiles for(var/atom/A in T.contents) if(isliving(A)) var/mob/living/L = A From 0976c60526cbf5c02f0b966380d7f7b537fb8574 Mon Sep 17 00:00:00 2001 From: Mek Date: Mon, 31 Oct 2022 23:14:16 -0400 Subject: [PATCH 20/33] im going insane --- code/game/mecha/equipment/weapons/melee_weapons.dm | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/code/game/mecha/equipment/weapons/melee_weapons.dm b/code/game/mecha/equipment/weapons/melee_weapons.dm index 61ebe4f51fb5..f1c9c5c50f4e 100644 --- a/code/game/mecha/equipment/weapons/melee_weapons.dm +++ b/code/game/mecha/equipment/weapons/melee_weapons.dm @@ -111,9 +111,10 @@ minimum_damage = 20 /obj/item/mecha_parts/mecha_equipment/melee_weapon/sword/cleave_attack() //use this for basic cleaving attacks, tweak as needed - var/turf/M = get_turf(src) + var/turf/M = get_turf(chassis) for(var/i = 0 to 2) - var/turf/T = get_step(M,turn(chassis.dir, 45*(1-i))) //+45, +0, and -45 will get the three front tiles + var/it_turn = 45*(1-i) + var/turf/T = get_step(M,turn(chassis.dir, it_turn)) //+45, +0, and -45 will get the three front tiles for(var/atom/A in T.contents) if(isliving(A)) var/mob/living/L = A @@ -187,7 +188,8 @@ /obj/item/mecha_parts/mecha_equipment/melee_weapon/sword/energy_axe/cleave_attack() var/turf/M = get_turf(src) for(var/i = 0 to 2) - var/turf/T = get_step(M,turn(chassis.dir, 45*(1-i))) //+45, +0, and -45 will get the three front tiles + var/it_turn = 45*(1-i) + var/turf/T = get_step(M,turn(chassis.dir, it_turn)) //+45, +0, and -45 will get the three front tiles for(var/atom/A in T.contents) if(isliving(A)) var/mob/living/L = A From 2754c02e01c6ba8747e519a799669728ad0320a8 Mon Sep 17 00:00:00 2001 From: Mek Date: Mon, 31 Oct 2022 23:41:19 -0400 Subject: [PATCH 21/33] the pain never ends --- code/game/objects/effects/temporary_visuals/miscellaneous.dm | 1 - 1 file changed, 1 deletion(-) diff --git a/code/game/objects/effects/temporary_visuals/miscellaneous.dm b/code/game/objects/effects/temporary_visuals/miscellaneous.dm index 3271c6070f08..edd83109c1e6 100644 --- a/code/game/objects/effects/temporary_visuals/miscellaneous.dm +++ b/code/game/objects/effects/temporary_visuals/miscellaneous.dm @@ -82,7 +82,6 @@ duration = 0.3 SECONDS /obj/effect/temp_visual/dir_setting/firing_effect/magic - icon = 'icons/effects/96x96.dmi' icon_state = "shieldsparkles" duration = 0.3 SECONDS From b8ade7b6171597a63daa27dff3ee6110728c893f Mon Sep 17 00:00:00 2001 From: Mek Date: Tue, 1 Nov 2022 00:05:34 -0400 Subject: [PATCH 22/33] sprite n sound fix --- code/game/mecha/equipment/weapons/melee_weapons.dm | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/code/game/mecha/equipment/weapons/melee_weapons.dm b/code/game/mecha/equipment/weapons/melee_weapons.dm index f1c9c5c50f4e..c0a4462e1e05 100644 --- a/code/game/mecha/equipment/weapons/melee_weapons.dm +++ b/code/game/mecha/equipment/weapons/melee_weapons.dm @@ -10,7 +10,7 @@ //Attack speed modifier for a weapon. Big weapons will have a longer delay between attacks, while smaller ones will be faster var/attack_speed_modifier = 1 //Attack sound for the weapon - var/attack_sound + var/attack_sound = sound/weapon/mechasword.ogg //Attack types - Note that at least one of these must be true otherwise it'll only have passive effects (if any) //By default we assume we're using a small weapon with only a special single-target attack //If the weapon has an AOE attack @@ -36,7 +36,6 @@ var/structure_damage_mult = 3 var/cleave_effect = /obj/effect/temp_visual/dir_setting/firing_effect/mecha_swipe - var/attack_effect = /obj/effect/ /obj/item/mecha_parts/mecha_equipment/melee_weapon/can_attach(obj/mecha/M) if(!..()) @@ -141,7 +140,7 @@ var/object_damage = max(chassis.force + weapon_damage, minimum_damage) * structure_damage_mult O.take_damage(object_damage, dam_type, "melee", 0) - new attack_effect(get_turf(src), chassis.dir) + new cleave_effect(get_turf(src), chassis.dir) playsound(chassis, attack_sound, 50, 1) /obj/item/mecha_parts/mecha_equipment/melee_weapon/sword/precise_attack(atom/target) @@ -220,7 +219,7 @@ var/turf/closed/wall/W = A W.dismantle_wall() - new attack_effect(get_turf(src), chassis.dir) + new cleave_effect(get_turf(src), chassis.dir) playsound(chassis, attack_sound, 50, 1) /obj/item/mecha_parts/mecha_equipment/melee_weapon/sword/energy_axe/on_select() From f6bed5d22deeac10a7909c7164f2e1c25e40e77d Mon Sep 17 00:00:00 2001 From: Mek Date: Tue, 1 Nov 2022 00:25:35 -0400 Subject: [PATCH 23/33] oh my god its done probably --- code/game/mecha/equipment/mecha_equipment.dm | 1 + .../mecha/equipment/weapons/melee_weapons.dm | 3 ++- code/game/mecha/mecha_actions.dm | 1 + code/modules/research/techweb/layout.dm | 4 ++-- icons/mecha/mecha_equipment.dmi | Bin 21878 -> 22228 bytes 5 files changed, 6 insertions(+), 3 deletions(-) diff --git a/code/game/mecha/equipment/mecha_equipment.dm b/code/game/mecha/equipment/mecha_equipment.dm index c6052777c0c3..e69749f64f36 100644 --- a/code/game/mecha/equipment/mecha_equipment.dm +++ b/code/game/mecha/equipment/mecha_equipment.dm @@ -143,6 +143,7 @@ return /obj/item/mecha_parts/mecha_equipment/proc/detach(atom/moveto=null) + chassis.selected.on_deselect() moveto = moveto || get_turf(chassis) if(src.Move(moveto)) chassis.equipment -= src diff --git a/code/game/mecha/equipment/weapons/melee_weapons.dm b/code/game/mecha/equipment/weapons/melee_weapons.dm index c0a4462e1e05..4d2aeb00f243 100644 --- a/code/game/mecha/equipment/weapons/melee_weapons.dm +++ b/code/game/mecha/equipment/weapons/melee_weapons.dm @@ -1,5 +1,6 @@ /obj/item/mecha_parts/mecha_equipment/melee_weapon name = "mecha melee weapon" + icon_state = "mecha_generic_melee" range = MECHA_MELEE|MECHA_RANGED //so we can do stuff at range and in melee destroy_sound = 'sound/mecha/weapdestr.ogg' mech_flags = EXOSUIT_MODULE_COMBAT @@ -10,7 +11,7 @@ //Attack speed modifier for a weapon. Big weapons will have a longer delay between attacks, while smaller ones will be faster var/attack_speed_modifier = 1 //Attack sound for the weapon - var/attack_sound = sound/weapon/mechasword.ogg + var/attack_sound = 'sound/weapon/mechasword.ogg' //Attack types - Note that at least one of these must be true otherwise it'll only have passive effects (if any) //By default we assume we're using a small weapon with only a special single-target attack //If the weapon has an AOE attack diff --git a/code/game/mecha/mecha_actions.dm b/code/game/mecha/mecha_actions.dm index e3c7e5d0250c..34f6dacda6fb 100644 --- a/code/game/mecha/mecha_actions.dm +++ b/code/game/mecha/mecha_actions.dm @@ -78,6 +78,7 @@ return if(!chassis.selected) chassis.selected = available_equipment[1] + chassis.selected.on_select() chassis.occupant_message("You select [chassis.selected]") send_byjax(chassis.occupant,"exosuit.browser","eq_list",chassis.get_equipment_list()) button_icon_state = "mech_cycle_equip_on" diff --git a/code/modules/research/techweb/layout.dm b/code/modules/research/techweb/layout.dm index cb81314ae831..39adfe8d6762 100644 --- a/code/modules/research/techweb/layout.dm +++ b/code/modules/research/techweb/layout.dm @@ -601,11 +601,11 @@ /datum/techweb_node/mech_rocket_fist ui_x = -576 - ui_y = -96 + ui_y = 32 /datum/techweb_node/mech_shortsword ui_x = -640 - ui_y = -96 + ui_y = 32 /datum/techweb_node/bshipc ui_x = -224 diff --git a/icons/mecha/mecha_equipment.dmi b/icons/mecha/mecha_equipment.dmi index 7035d8b41e65866c57f4548d54b7f89b909a6879..b78df603b1ec2f4d0664659529318690d5824f84 100644 GIT binary patch literal 22228 zcmb4rWmFtdu;vU9TtW!$5CXxS5Fl9a;4-+oyKAuE4#6e36Wj?J+}&kxcW0aTcK7U_ zeY@u@KVYW2r{{LvlCQq1B1BF`3=Nq883Y2MNr-<_0D-{3OE3r#9{8haUuX=xNpx3I zb^K=JU|?@%>u6?U4Fb8QB`6JAZ!)9uF6xl8&t{n}X?v;V(%75&{LP{&9}aS-r|RqX z_QKH8^^%8M+}c2Htlz$T z<|yBK-{;Y+yE49qFN+fzGN1k1x29tEPWW24faCYSwOW41kK+s6Q89KMwuH|L5OjRT ze2(F|dCtX>9`c#xh!4Mfa~A%A_3e| zj%N=`KF>qWprcB@ORjI=p-+mfL(cP|1uBgpPgHmqlFiUT-^$@C#ue^pqj1%LM$IG$ zL;FI{85PP<<_LCCz<#*SBpiwC=VD~Shw=_DG0D9jVsCW~hcsT*w6A-JZYJNmV?ZRi-Gq_D67E`kA; zS+&3dxdrqcK4sxYe8?Rk*#1VPO!1sF}&%K>Qwd{|0+onMH4C( zE&3A%UWq#_E$wk&@SPuU4P=c=*Or$V887T<0OKtNFWj#0?~UwsP&?Yp9)*RHIyN?T zfxbQ{oa4pEkF(j&9LoiQt*B4i*uuNz|0s;Ita zlLe{P?x96c-V7(RiGft>t+f(vBxdKDWO|-XVdk%*-l&R;3^O6Z5JWgUXU_WFbuex8 zxd98PeYm_IlyPeaRmSNV!kRe0xV6X(Rs-&5JB2uu$-nxopX&blXmGtNIGNw)tI22v zw0_mwK|5P{AFdzPmE?3)WLV!@<4}x<=oIl5X3%f1mgYF0ijz}Cr7nREGV>2cYT!k; z!UKdy!ZM&oX?uOBcHDgORY5^v%b-l7-uUtM>^(NN9dHTkb#($YHMN9D z9u$jquc6Ywk1OIsjlXv<-3uOlG^u7u?rQyT^*u6QNY+%bkr}<}Ama&rL!(p_oQRQ_ zt-diGoKkNb5-F5$Ap;mlrh+HIC%S!2QJ*th{QB8)Xd73{2D-$r#PgNi@JtE)$!E7b zUm{)BPmVAI)V)cl^59!qYm^7VBO=S+b&@7^w@4RwEL%HVNV z9IO@dwptI=uN<}QL6UGw$SnC{;=QEM?04QUHRy{C3#!BZOUV_D^BiF)B0f0!TO>|y zq8!4`U^#y#SnDGohAkf(MGjGt)SZ4{TA=cgd3ow=^7m&CMkm$>WNZN`&2gwMXa7V? zzJDeNB2ssW@lL-V6DJ(X=!Wf19|hYtFdaGviG@?Nf5`NgXlLftkMDOeU0?nANce{R z3Ipz&zivoY7FiG)VQ;>4YJ=n6J2KAwSG5(FkXS$KBb^-rUhj_o4(|7=9Y4hd9xPbw z+aK#?>MbY{7k5(fukPv#YEykl--Png^?hr7kzqB}6C%}o!kP@(< zB<`{0LT757^OLn#y`kxR=W>-PKz6kg!%Vj!1+Al#3Ko2O{ql~^@S|tfY<~gB5Q;Dt zcN)>M%9eu*DsgW6evn@VLNp`#QJ<6uDCx7;7FONitpJa95%`Mow($PKsON5~Xl ziS~5I+I@{NCjMf#J$M5;wbK43Xf`W3I>ULf`GkFqukITn+eTyQbHIIf-xRAsd>4g5 z@U2i~@ch@=H~$44k4+z)pQiLC!HAdg_>-S%uUT{9J|efGxr z_4cTSi*2;=tFAQkYq|0qIiQNn+wS?$d)gs_mXT8?bEGwdVATKJh(DO!;euIaTF24V zKLpvo#AjQoK44OkwgfkLnOJ(0dTdFB;=LP#L2aZDy+?p3OacaNAlu0`omheY=hvXO zbidUj`{)Rfv}#{sXmtqcK1(=V(T3^1Z=(YX5g+m=x6ANdD$=C)FRnt+s#HlP0ewJ- zDS!PDP=td}*Vq2~Z*6bCBPAUT$7ci0H9Ao9xnFk7&O%gHa&jmZP0pk9Xe2{wC^Y1l4XGIK?l}@&NSVx4wg5?9D149Pp@7(rqRro#!afnl z(#fYJb(T_%BE_CnQu(-f@*dqszRBuZj%)PXMwqG4IeE|2fr1FKyU&=Ytr!^Q;x{>J zD*jhKhgNy(Nf=7j0|n%{hq;i1m4q?b+0Fo{t9`7ib&WqfF4@t&5#VXNacnnDJSwT$ z4Ni}8cXDHv&KWu~m3ed$BVgnh?quorm^5WA`lI_0SSXa@lhYhU9$Og+L5g`JYRxK3 zNX^Sz4UHQG(4FyxUZRou75A`_bRGxj0JibaFTqq!tM4O#hwsAR2NY07TpUq27~QD* zC#L7i(@j7?z(2|7r<+ySx45`s?(R)3Z^lvNtQo2tg*6_zwkGylg&)ffT))&QJzi5Y z{*y%9;Ia5OA{IIfcE2JR?r|J<$|Piqs7>X(SgXwTY`Z}?KX3Uo%!8qu;~V*p@BToh zydZxJkSPU^$hg?ePwB>4MG^na=|X>coiD~okGHP#ryzFAx#%Lr0%Yy4Up-HsADr=j zU^BJRgXrCkNk7hdB{pwikJfi;D9oJ{RnATg0Z9P0fEsmS2!!upk${QgS-kmc4b zKaU3cw8Ahc35krW>u2A?Uf4fBf&&7S><_4N-wK4>)hgW9?m}Gxg6~5mqk)||Vj}Eb z)m8}Tu0}8=oKRHxVwKf?i1}~y%MgLWBR)iCAb>w_t z!@wFUm%e-q>9(DKUwc2!=hB`Z0xwS^ZW9O!CEK=~3=4>Ij-)CkUAnbA7qd}NaOrVC z+8R&Ay$jDz2FIIg&%z1MOxglp$EHYW${m}WO_i!N_RzdMdIaN0OK3&J8@=;{_TICf zoozLNMZdaYjE|3_H%naq)2T6FdGIk47c9p?j9#`8utq2>f9xcJ^~+XA6@l?0-4(Z= zz&39A9FSDt)qna^-hS|_fT~-Mt2ES3;_RvQ$!xviww7V+w-`no>&K5DW0R9Vd9T{E zCv5ukr$der-n;=PV9&q1uE8zk`TTDyB`%4{VLj+}(Z}6VU}GNk8~RTQ>I>R* z7=+MF9+4`@3u)X=^6VeU8_gm>K1Ys=9idMhesFMH^`Be-1D>x;4Tk;mDDAKMo|xg+ zAOhlzOcovsoVcuP!5$q`%nh>R;aFt8pfq9>qRIAUU%*!{cSxhp$8}VR9VVsNqc>^b z`_-U^G+C{&a{U`wjagdk*SJZfPThOA6MEsgx!W#X-pZ8qrtcl&1bP)tWMpKyo!T(8 zLgyUKhqNu4DM`>SNftckzS|Z0wquS8qIky*36tiHS}E%hrO_Y}@Rn$^L>=M-y}+Yc z`RMrjc|YCT?M+bSYbC9VWP&Ec0}3I*=p{?gf7KsP|zi<^&BSdQxrkffFM&gjlE>2Gn{R zXOaDoMdX@R-_en(4kb*nm*W~;$Uj0r?Ehwc+cynXjuMzY<*>s2nvf+LE4&mfru11v z;Ngff`G!PEeU+yS;aAv1IYW8-aP0BjtS6&vb*w^>^xmZgUd z7%zOs>Y~n9XN|Ct1b5K)Hklq?v1+5}9dDlI*p+4jEr`jRL+{421&Xgz9^5Lfs??X$! z9n+ea?zX9JYXX822fzmHWN`5C_P3{co}QjSen3nun_>8Lf0YJ6&a|{N+U1ww zR4x=dJG<|xoWtv@YyRmx9Bet=t64>vnWcDewbbh!B%oftx?gl=Il+#*VGJKKaIhUF zA1ahJz*ha!oEN{X#ASc*IBo4#@E9e_agS7lJmLnUu9xI~Xu7|%o7dHq`9^bqen_sr zW^3JSfVwk63{S?R@kpA^Lru`GXf}J=-z;PI`(r{K2qB7y{2*noLnDH$?JoqhI`Wh9 zYN*Kky{>WwSn23Z08B4p5uB-+6-^~o4)xI6mXx15rs83XThA|iNWoAGbJp8F9N}Oz zT<^JNG1yZmE?Z!x%bkB6%hN*8proqeNf*Aj14z_`uy;HxcyG1{Lm+{~mjQ=fl`J4Q z*kPj^Da-)0;H#=8Y$k~uOHs9%$^Sn3o(=o*08XI z7Yq9kX%F!A-W4~Hg}s1SsybGS)l5A!?y=GTF^VOS(#G?+ccQMZAarYk%3NS&h_t&y zwp!GEkUl^W@YtMx8xPHeI$#yLrTSM#hs#|C;Qw)|FMbiO68Kh1`TmLY=1BN z)Iyc3;%4?;Kuh-@%?Dip2SjVeo3B&wq=!p;rzf8s?hSf|ap2UD;)lPbmFg%K6X1>!yDBX)z-kv45q*MVj$hJUiIbhaw5$IR`!~KNZhz{T zEb`G~GlEOC+Bl-;!l~#nb;U>8;Z;e9=7c-__?#3TV7Ca%0i#L)l9Yv@%Tjjkf76Cq z&7w247KSD}DVD>_-c%$YAQ@%rAOux_(1_mC2ZASblvg_Fu$xbgCJ$u4(B!|PW+Y8S zfE#{%kYaRcUQS@(`8t*h-BH%KquL%$?R&htNLQ;duikr_WuMT|>R+nb6CTEV@)76t zsvPM=_n5z3Z%#Qp)C5cu>UCj|cpL|L!zqLEjJDeZYbP&j@&}ux3Zy@)bK>Rh6_Fps z5SmOa4r>d_Z*_#E2Y{~dp@?lwrDw|K7;#2_5e^*F-%=xRECx1+3k)yRWRq87=5m1S zeVfzdAH-yTk<$}h#~*^@Ih%6b!L+pK3ZIyK?e>meU>G7{WEGykLan~_AUjsN*|!d` zhZWnK-=ozVsm!aPIwDY&yy9*$tG5uuXOy2<*Gc5)_%*@TKg*t2u!ChNXxoQld}wKD zoq}tpblZL+d2dscuTU1edB7Y`O6oJovINA$Xga zU}v&?1c-$vHa1tEH7r1n*dNG$;w}W3l_x_)K(2$Pzx~=4KwLdm&-uYArF97f!^zPnPW#8Z4yV~%2 zTt74VT(8>3x{yX;3mMC>;DhQ-PEHQ_67_Bz=opZT0dB@?VLO?rQipG*?TaXlbU#%& zbF9qr{h(Bg1cyg=$GYK-g-umHm*EZ;i|yyvg|$9LZcI0^INMBn0oXrZ$4$g8CQu4R@rcUeW3+ zB&OF3Vt{+9?IqprhsjD0PH!1%Qvt4YD8l!3IYZGi(CY4yi=B}Dv268Guj7KuVs;ow z=;-(FLWH|EPE}a_SM^XM@xcO#l~dT!Qopri|nk~y)>MXdAjyG+geYTPr)TnDe+M2@`l*+_7+P_o`}8=A{F~{ zdUOL!*=UzL4=chUV(c*f>8I9G1Ed&f-nQ0xB1&bEu+jDjgnusj2f0VW3u*p7R`3?` zvE}3h{8B>+Tv{23 z;2iV;veE*!mC_>@u2Dy)rXBKGBa*)tl=H+G#CNfZR zaMTXG`0+s-Y)26#g@nO&NM<2ZgGuDv$p^h@KPKuF`yxx#szqsN>1(7gt@>ZM-Qdc? z&yA2H&Wjp7#i9uwiyelr#hZTT#)2!UAx!~W&vbksD>nY?W1f%A8JQuL|5k=Sj)rYdJWA3pSjnlvl)IQ2*fA+8Vt4aIrIrJ5#D=a89v6>C^4|42KYw z?6pv1)|Drfw8g&S=H|8qg^m}>Q-&@6_yGe_P*nW%=~K2K>|ipfbmzt%4p*4y81=_+*qgFxu;}<6cBB1WCSO9AOiunGrP_Fy0Ia)M#B{qFlu7%Pxi9%_ zv7Q;nTWqiC#lGrK!_R+u5f`Oqze$xgk7yccAMWEM3=d_ykBCU*Q>EfWfKeMrVB`}Y zh;jyik3C|R)pjuX?@Cd#lrpGE6wzA|nQi4SZ_qyg&VT-?qWpX@*5(txhiRC~?d|>8 zK^5H7)l#WCph*-Kl6lKtyBC;M(5KK|7q@@ z6yHJ>^i(g%wDypl^LGAA5V4k@9Lv*95^VdNmW&ilW{kdNCR-+oTpqYGk&d{#m$@Hy zm#a>{^T#)*(!{dIL&P-|B(tG6X!i&{xp8G%yjbN#vNuw zTKYHk975$Iu*gy>)nHj=^ip>%czb&*r>Pm<-p+q_cZXB&;_7knFz>)|Pn>HnM-fEQ z)|>LDurm7e)VAEjWU@?y>)ObflB+_WVQy+l2~at=+x6gsZ_gMW<{y1_?k;emT+GIQ z+;$2z5kN%=>jwn+XCjjcF)ch>xH1A@+h+^^R!Sdmrto?A-~xLTlrvDvugU_t-ZD*! zj-QN9X9@;Q|IK(jBt!ody#P{BC|-q^OYqdVo7eF^dy~(9hAM$%_xQN!f_`*x~l5V9NJT`7!aN zh4O{+36I6$W6#7kuy0qW(m3dnK&Rtkq-Oat>9n8!*hqc-sim-eK3p|Zprc6i3E}6{ z(Kf8D`GoR5?cMf3CO{E)C2~eq=mWl86Q6yFgcdiKw5Kq3k#6NWm zruU3a+|6-i{XL!b-Azx8dRDYo#0Oy~EPUhM$&$b&#^1qev>1YW{){cwd-sjC;xS}G z!1n4h`-$1aN24P=rK3;{q2ebh;mVo=7!b}Q(V%~-%D`+7tciiXnpeH+(88mS!_-~} zEv?dbfmnD?trub0YQ`qX*<_kJ`J!6CXUE1?T%WYiYWMH>O$+`jc#Bd&x-J52$HYpg z!)pa1C1!1s?1&KDvY?@oOEt2Lm!m_Rj;|-GuaHuvnjS!WCSFe z5=H7al2q^O!+uq?S)8yPnu%AS4_q^AShsN~0Z?3jD=^Oh&J1Q^@t}QNTsSUUKR@U9 zXyNer7uab~Vd0d)R5uwd?G@gCzIpwGLXS`n=<727A19nxqf^)S(>%H8WQRzU z&B}hJ>d};!$OpqTVPfW#l5X#`_G!x8wcd?iov$9xyi;r5h@4Rf4anWiE8w8 zkm~y~EOi9EKj>-PK3?WUYl^lBQW8itKk?=B(yTG1EeXITfn*ljAz`YjboFdoF1urX zdu+z1d~yvIxT#5z1`88fw-JPWh-+OKUu|o4r;U$0orFfwZ#EWN@yB$&YCE!amG`J> zk+13_t_^&inr5k_+bXbGq6Pih>3%rsqF{$I+i`ByXG+-?gdTDxhe&+L`1+4a$9moG z;kW6m7mb@4E*_`-hxmkx6Irh0f483Ql`TGB)|+~4v+~J*c4JkGAyKy-`>hY?eH^J< zMf^;mqxKLy@=I{NT#L8akTtzE>@#Fz@Em*bl#nZOkkqr|?qX;DYTg1p7$&j>1xRrQ z25xSjTBXbReorEub$mvM^PCBMlxzi+4-Fshx15&8lCnC48t(iVmfBw; zJGGjL7~8)&t-f)9!m{w#IK{U!ZfT%`4 zWCKdN+)p zo0OX0rOEX<11EblPUJeApt@%yqhWVQQ=?+NpP`PF!QUTmgs^<(>Z}M?JsSi21$tlsWbS#|=3(sCqL8ttkYVA^!0kMi)dDj9(89n83O_pJV%G z7*@p0^aws``k5iH^?fkH?t0*ai&MRPJ!3B7*ZSSPleWhd(i!&=`S~b~P726;oov0d)*zP|Y-N0^*PWC`NXvyx zTq-g$^6o?)N>?AB1i*(qK6Wtz<;mBAnpU$j02&!TP*Xcx)~~8wZ-hA$`W5T1F-}rQ zCmD!p>T#T13KkH6Ap;0i@XKu^=WN-`7>raxw!d5%uhHz9X$CGcmsmBwCl*sn2cm>kdC(Zr(+_yCXHn4nTjSDrBC{_ueGm#C|h}mIt&zdB$7u4>TmkPbb+K5 z_;J5MmM^ye%jjI`)q2Ys=`)>FzATF62zIFx(~cMHI#q%c1DT`$9#L;jn+;2a3E+qt3M)&BHr4fj`tt+~WC7ooHc zh=#*17+^{R*0x{0#cSzLQ54na;0D|5UzykO{MKh#wB4T6_Fgcv%UM!NQ@oG$!ss{A zPI-eFYOmWi$#yZl4As=YnhKh}YsO$G?&Iz$MGeEl#AX}TIUnGHOy9|ZnQIP~bK|u) zuej=>W1P@VCb$CvICFearTAOZ5+4F(bubT61V1Xd_hLEh{4riZ$BOE%UKVJoC;WE{ z5fL8ux@#hgVz8CQvN5*%B~YSeny)oL4g}rk-`ll49P_NNc$}0~VOEMgbDtowOROpx-2DN|J!3idAbmuBX{=%q zQ84$dz&PA!^V{6=qLK~xIZKPymlrQ3bh6Uw=5eIH9@6L_jcj)C##bC@a8RKk#lAyq zt$68OkpA?I|8pWkrVqGdK{~bM@zF#ZjKWB~mPy%s)>&V0p!roy1RCY}KC%rV0P=|b zNp0g=f#MG#%0DCdwzZA63W{#Jg~$M5><=l~-w6UjgG%xHb1zA?P;(ag+DrM;OO5EKYVc_F{fuOgr-cQDx~ywipa)`8DCzf5oZEP2cx2 zod*EQ?`dd@v!updVH?kl?{s=2bpE*+IO~{wSUW%xxt%Ne`6`Bs$WG?>A$DxYjgC)f zvfx^dZF{nQ1?Dkv*h zh@ykGw>}dNzee5|HfchKm2}l_hlF?*>Q%i~Yl|9;!JK26SuqBFp`5-2J0cfRJFB_f z7Q}l=J7dgKO_qIpZzm1JxNx%R>wiBT*KN`DkA73}EIbwckOvtcEuBPqAo}$4NAXJF zzZ+WC8_5^{*pDuM3|d*xqwv+FL$3RiQ01hd5LVCx|N5>?JNOq(l|BDRm;Vi8TJ+6u zOu4c%%7TLTByLvDHthI>1VhdMeDo1%n@}eCZ(sZ7wo0DCq-gCWjtj@m0k@5+A;U8& z2(2>Ex+FBS=kJ<;J8@TDW%x04WqP6hr3+dDF|!|leQfh1n?ap|ZA-}z$-JaGoLTx8{n6?31o2iF zx$!^NMJi8=L-RsA&AsP~qaF>_gGWHLZucCG-BI~BOYdU`e#pRH-YXV`kyK4lyE*Qr zP&q0+75I>w0tsgTfZ^nUF0u8)b$_Sc-q?&hLzI?t-%@V{PA zZXV7W*D+PI_Pc%*`I+Y#ZB{e!{U1KzwxRD-V=)p3nO)YufU^v2sW)9+?F^TAUidzW zFAD2e+DXoqQBf)@cI_bF?HgvL!tM1W-LEAG`$_SAgS6iecZoN-Vh#+1G%I~uLa=~7 zBshSF#9-77o(bKhOUDr?^1|=C^&mtzZ*C^?fH^^ zie3`9SArwgf~@z2nOJ;cFCcOn5hY%g^{bFAbpd``Q)~qRh|2`H<1m0@1nq0-%qv3M zZdq4Fg@90;o5nM6Z$||RhtRaV(>QLgWwq3?S$>O+gA-crY)hT1K8wjc9a9mH79F1~ z-WPX@-Uo+MhQkL^Np%ICs3Yl=gw>vCE%yrmLPY~xlar)!h^cz%VBI<7U4e?TA0=mo zu+U;^@e~OvDjd6pi^}yXAzxK(U}RFn&q?dv>upy`KV_PN*R8)j)Jn z#}sd54!ncGcB=g>s;pFR(m`Tf_eK!NN)%2CrD1KWv&)f7UlSBQAjxwN-v_@YF#ko) z;`AYlFne73WB7y~zWqV`UT`gvl`Qxn~Ee1+ie~)=jVe=qbqe* z8c58mwRuX7*z$eg2E25coswyDlq5ziNmElA=~PZCGBQw^ijmn^!hqq&>ucLnWXEOtr_fHS^`tlig|@lP!C?RoFrccr_0=^ z1B_$l@mv+}ld%9wQOxf(gmBW4^{dOzn;aru!j`y9&QAEQV zyJ7@ewrw#NtY>ea=VvuGHg;aG)t%xN<^B8jV`Meh1q!ld2s5)Hwvc7JK zxftV{hsqR$2|Bh?`nl>-R%%zwCQapQ{#PGStyXi5Ezgp0Xq8tp0&HT7x|h- zK>4npcsP2){Ep+3u+#X#RjRLa?Ug5CgR)J)7v^H?N&=Xv;KyB#PyVq!PX{`kd11H= z86Fzw<%2;d6 z3gRjhX+3X_m(OgJxL>rrwMl@AxT6PU*5qD_dF?_e7#4nQZ!bjjH_Kjx>0Bjwv&+dx zO3F={R_&8VBPY6nb?5A#IhNMr0{cVus+O>YvUlUepSpyjc)KQiyn86)c*gUc2({g= z#6HUGf2+jQ8y)H5NpKmwg+*{j5;6?FUV|VD>s0#i=L94A6>$oo6y~;eOMi_&8_By1vYN+=5 z>)w@C)-}o?`7b>!}AY^8X!2AeVT%yXP|qK)`+eM{raDeF65}6i|Ies z3#=Ko<43_sVny;*{fa*Rj~J}aBFV%pRExehc+<8_N|X!s2D(TR(TukD$!#K*@A z5Tl2)x>Jot0m-bzY;MS(<SDQ!+#dLNGalh~X z_fJ(P_2?~*Z4$gfK~mSYKvwa2TstO`4t|B5h__=uXu8hRcPJe7hrfS+e?NFl(wr8= zpi#?uN3=A=PAMfLgAVu)QQ7S3$pJ+S+b}}CB}5;&f2&o*CpY}W+ls|@;N^7HdY5VjAl?&F*^Gc4f!*RO!e7SJZxS=GufCnqQ1 z?99pUdH$*W=~^S*m8w=Ay@V2cAnfhvF%TW2CfOB465i&61LA)&HP_99Z~HXv&={LC zQ19VGUgMVKsjd8+N(wkjq!#S=@7bH34rXp29u!qo|4o-bB&4OaqUJ;u4ubmUp@r9m zSsGOQO|872z5mdktmwI5-jAVt&}tCxbGDLbvWM~K8jWB!h;+aVACBVR|^+meHz&I3T5qMxvdsmu10CEOaZ$DaW3G9&9&>rRw> zw!h3>V4DcTbJwcDSD$yU!H3YBW2MW?DwRwdqv0`wWMyU92_iz)t^OA$Y!XafKI5MfM9gsp zTFRRVbl1FC=uAlVK0wB;7i{>Bk%s9!)eUM8X+dH10S^ssNJ1LEZqjxgyyLS~nUjxu z+hJr4!G_v}ZAH+Q=ambSKz9Aux+2XzK*vf41cSe4T45Hna*! zSt>#o6*;r@vJcTxz-o54(*m>+u7QT6+=j7=&O$$lp}d3u zgit6}%RI#f6froe=#pw6Xuj!F)#`Zr1yY9-M#oxJxvl1)!z_}SPB{#%jr(7k+xdiu zTR#{-C815(I?WhBOundGNKbv`Ng0}u`q$}uZ1`QH#fMw25YLBx16I^&>-4HrZ7DP$zyB}0ixTODi3T<~kMi1zq z8R;3f7MMnZ$TtQS9t&jQDRF6vK=XIH2&neqOx_4>RgE}-tn+D@lpmgjMUUi&dzml^LZ z95@1=mzVeK{5+?ng~(AG}ucc`fR&PVFO;T>$F-N?ViRuOzfe+#~) zUnCcNTg*#crPsw%jA;vVkR*d`%=9GwM4bK;w_NL{O)`EUQ$zK~U%AlyLwNNvoFWx? z8ag^Qd2gt3EwNHHD>^q;c@J?{`?>Y8x2wYL5Apx2oIo90OBSXB_$;d zK5Pe(k&*cxJ`#eKd|v#&iOIfKqLkxH97-btp*B#8uha(+kbI6r2u<*wX{!v6qn3RK zw2EtL5+NZW@$xYQ#m2rXY)$Yk&Mhqs4-ZG}UEvR{HW|qo|Ml#H2Je4M#mjqodMZ#d zy|KAT`C?>j%(__-$9>aB>gw+PpEF7+`~0-ZD-LJ z2)Up-t7W025v#N7>qHCPqWqil^UldhMOFm>=EMFIU90LNE$~_W`W}0JHt25Z5dTN8 zY}VtW%c@uAVzblV!9l6WyS$W@$w@2>3=Ckaq+7rt5FM|G48Ep$hDDMLpKCSpEIR{x zdk5)Ax+sZm822c6)q(S-o1RhQl^9p z@!=MMnu8^cahwtb}{WzB7{9s;-B#SfHi9@E-n$7;5>B-1YAddEiNMIk{F*U)vyr6*9 zemC88B+Xs?Rzy=OHFfed7CeTyj|@C3ZM#k7Ahv z7kxuX{B?Zz#4EJ4m8$-$2UeDv8Yx?no3VZ@~5g0m2sMv#Pxgp`br?Gs_jzrlt)Hg7I)>}dc5^Aj* zq(xx>RB(gjlSX|!hq)0+3?4{kH;XM*ou8kNPfBvw>_uZIKm$4hU0r`trX-LHxVdoy zKEvLo7nr@8Z}q5`p0_D~5nyvUR{YWKBizzjdtUv)D2d=9ceGD7ZM$6XsegDlVNhOM zdt})KW8>lE#(tDfc+9+&hMvCipgH)zmn`O-wmu~Jw;Cqt6hree5Y2SH6tKhieE2Z- zN0|=G-?f_cG*}ls*QB%hblFB(=VteJ4rZ1?I`;71YhEbbw2O#nEdxMc;K>3PIAN@l zh*c|IkXbESUzdD@8q+_x#_t-f%Zx08IQb?0*ML)xD0B?G| zw*5I_rc8tI1k>WHgdm*YTF@DHB-!+>Bvj@4A*}CPz0N*nbQ4V83i6&i6O&bfef-c~ zyUyva^EZL~=}8F?h1-q}0d@QYjW3K=HqA$z=jRt^XJ>%BDN(O&SAwl2yhH?K`90jP z1n*XuS?rB`V;Q*zXqpU|6boB*INRvy+~^5=18qC6<{MR6flTwoJ_3_Gul>5%gR9>N zcQHD0Ow%ikGs478$C$vI4Z%W6L{6A;^l+)ed5rT}*GvJxoK&e9uu;v?Jny&J0QS6lsV5V|x z&k>lb)4DzF!hmj0?CebzEav^1Xf>$wf?50|ZK6sOP+UeW*InY{kyT&Q90UO%$}G;wu;TYGrms%WAQkV&r^u z{Y?p4=T`8Eyd!K~rCM(@LJ(o|^CPVj>~$-prlt?>L>Uin^z6mBj3g+j>)?n93ctH?8;_h^7SdT-j{=?l} zrO_Y`p#Jb=eJ^B@XdsravaRmJ`MgDhr(0E_b0v(;V6pucwMVGcql?}<%yhmx+Z~So zPzs|Pehv<7CMG5VPD`5ARDkHyp|c7L3p+B0jW!p!AlU68-_ZOCJv*y8;KA`lcahyb zJkdG-dw(^p@|fv;FY&tTce|7aoA(gQrEE1IhIM!(|G{LgxZ_#|(-kEnFauAfxBOQy zr6;xR?JsBC$pYCOV9L$#VtW`EkdRh+jxCbCxEHIy3MgCx(FODU9VjN@EhS{&vPrC{ z{YaX%Ua$&O9t$7;XW82S&gN%m3sA6K2P9+o@nbUHYNq2CK?Tnc#7#R3(T*}Sfr?|T zf1{&G{1&z9aaFgVz`&mFzCJ80EMZN}G>O9!qGyXJ1TrUBcP`Y|_>x~)8Eqj#Ffd3} z->!L#{64^*od6?tL?=sQ))pBh?DTYuY^36y@Q=xYQHMpV^l?*mqR+OzXoO#D?mHjq z?u0J(e^qrxF6XcR*m@(*!S_>A8_52PdXugJU)S^Y@5oz$Vz5T5%g=TvV%fe#20EGE zzCnh`cK}t0&A9B%54zv91pcMN`}NoV3&1B+y7Mh+Ugc&n?cRne`SqGZ4w$G|qz)-j zjHdulx<_axA0XAr<2ABIRKPP`?oEoREC3THfLuv4ju#SU`Q6hCH0~`s1hWmeu> zdhqDY5)Z!laV<`XefC5!fno^VA@*1l3m?MNm>D6S(LL( zWf0h+@XSn%m;2fFt?Z7BjEs+E&%kee9^VLjk9YqO&wQRIU*j1sFME7KLVtvZ!fX!S zMbhSab~Yfm>*J@G7)mkFzuBkLE?HE3Ry@JCec<@Sg;~VC#ch<~bgS+srmKxzexv$K zh4odK4POnYTKF?9uFaK$v6jFL2aV=>d-5TBNSE`3pZ+AkQ>CQ(lJODfEB zgPJJCBF6wp<$C$X2(-+h3VV9C^mAJP>cRHz_WJj%-Z#U%i&!vn10%t~0X2r=FNCCb z|E-9t4r?lG`)451UDBa+hp=0|o=gH27rl*_vD3FzzmM^RVRI;7F*444QL;gyu&<>fKgKi%KTNT-YZcGZ6m z><D5wC$iXl65Ej`~EI!#EA&Su9;o+W%iNQ^u$in*cpFe59%#?tz==-*MWL=%lz`zZ# zbN}wNd|FN#kXZ;~le#*|gjcV$H|QQb=uNkX?21{ml{R3%*HciK;0-jYIvlFsi#PuC zw14MiR}A_3Y$qsaf>7eDEeNW&7=G`51R9@BKGkoXB$NE+Pm44;U+nS*RvzY;PHQAAR(ak)%yYGLL4j%@e;dW~T8iC`n|0!toy z`Pw&WoUx%OID49thDy}*&v=TD0q3np3nReV2L1O&ZBmLqGhk=O3bLY9H^Qwb@-`NN zdP}E2IL5gX9S;!zwJhITm1#{;CCrQS^JWxM;Qg*26M#)pkaaRttL7^-4y)ZXE$(>( zXMmxjqE`e#9(Y4wF@E6U@(~B)8?K+w-yi*Y+iFbwEcpGc*O)N@ zJ%xOIH6Nc9Z8+`T_Fs%sUY4R(9MW0t@@z5wes>2%F;{qWyAFTL?}VuR#fiiSKETh% z%Nw(>5YpD(13S~Y-^8d)HCt;NJM{~#JDkV$8s&-Tubtbx$twR#v(<8(Z)1pBeIdBI z$9JQ)e=K-Yu9;UTN926YeS-?mUrI~!k(+eYC^Lms#0@h_6hZS;b zeDa#}v&r7LpV+IYq%3-O!aOZ?Dy5-)+X{#T6tJ#v^j%fja|tsxY92grIX zB(toxwTJSHb|`CV3M?%>y-{eM$2HsRZCmF^)I`}9m^Xc!La*>Uz(Rcv#9 zYufogaCvL)ZbVMP3Zf+J61iYr>{?f4QIT>Gxk)^^b~U$bZ0HeOyLP;bLiTwPCZa*x zedeK`JU)<0{hb&jQip~fedu|FJu49#@6ZE!^YZqt^@fS-4h(1|E{54?2ZF-a zm7G6wg>k#GiR;C}ne5EVg7~C7{?qgGf4q5Fu%FxYXlc|9*%TJS_O|+O5|C7C8kQ@N z2oX<0moztLfwt(umsg)7mkYotCsj|jnwqn*2NjdA&pbEp(mHNMZ6{1YDHNcLN>-#s z{PjFtHCP{RViR`eKW}dWob~R{b7b7L92|HhB&3)^PJp1HP*6t%8JRAScSuSkP)1wx zmw@75U|?XM0{_U56-THm>AfgySnf}NfA^`z-%E`&6%|j*H;`Wv4xKW!^#tWI z3K3FvHbwow%|gusN9R;sf3p4=tCu|*9PUQ0J{d0m{C3bM+%hB`pv|IUH$@uyAikjx z?coj-_}EYhti<}bQch`-(SUyetOhC#?o;?G!LBfp zUPJq2TbtZ6|JP(Y^(s3p*6hy<*{IVuR#cB~d%3PQ-n>_iLq+r4A}etk@aU6*l-!3E zLu6?NE|-_B$3OQlzBt+(135K>_Z#{$^#bvAF1d&ZTCmO$H$HCEmJ{E<2b zo0Pln=_2ZK{;olU+O?0TQ4y#L{VZX`9nFDVV#SQwn z7A!RLI|jj=6czb3w03^|AL;XKHwSUoe(caS+GudY*h~|df;1f9;p0j3qU)!fJ+w26 z>Esc8skl>H^^wnu)Mf&t0;DzL;^NBu6vV{ds3$TT1?86-GQhI5sp<;2GR^ zhF7c*4!#s{?of7RgwQAATMRDOIf#)0cT0nY-9&IAkAkG&hVT4mvbXl#cWGyaCWuq1 zlk@C%2jo7eFLPhZGgUK(n^CnYB9f^l==~244g}dg`zvvA6(&>&(LVnZ=WT)ZIqR?= ze7iqu`vy{D(?gOMa-az^Jg;J72|s^j`NML=8Y{km zzGt@=*9|TL{old8&OjLcM%s3#i_MvSJZtjEJht)SH2ZBuxQQ_?aX#N+qkD!;FxKUU zN9aN$3zhYFvBugZICSX%cR2dl?T6%BVN-67%=Bx_^_47h;?2k}oQ|}q3I??7Lb3OI#x5ocXJbqc(yyvxC&C~T zyY`*IdIJf=h2iMDHJ_kbu1j4qn81A~WY`aYZN(lamqTp2FyKrVp+!(#w%c$1ba-)W zq?2e)U+CVt--{ykbHOmf;c!$2##+3OG!n1UqV+8Z^at4ycFklr@p*VkehRj;<6UEx z&U)3nKX~KhMY}{97;o6SQ=3wc8dXnC%hdl(s&dwlKDi!*wI>j8MY3zA^cIXU$jVG{DFcmg*rOEye?aQ zicNES8|0A1L_R7ts<3;}hFRGPpV?wm&7VzyzRY*(JM^P8tq~Cu5-Jl(v#$;9NhnZ8 zB>3|F;l7LL<n2P$I1qkzo#k+XSTS~`t_bXi3JS@ z(s%EoqE(<=PEkMMi;L8ZrvVBD>WjZ7Oup28KRL2?*U>RyF=41WLMe~_kiT*Cu63^| z^L%g5kX>Fsdbk@k0s-z}QjUuz=3G#MAw@+95#j|6zXN1z~bG> zwlh&Ng78y5$ll|^27xu=&G~?e$AZ!OM<($y_?ufwlxreU=Awjybt(^Qh8-de%IWZE zy2QOu<`L2|qlaE{{TM}hawd*WV)2!C;bp$R6V-RwcHD<6O*d=iYn=r3%S8NNzQUZS z{*YTR)fE5u`)T$QtDqdrZ1P$uMX*mW$7GI@p9S7XBVhExree0JcVtG9#=y}GF)d|B zes+EyKgCT%cOzli9uJWYS>Ph72I@(2eU?^nNBs|7fm)h}=kVZTR%v!;_~c*9r;#u3@C$M;tDM6~06k1DO-^yYFYwK1OtrijF}3 z^@uhnOU83-e@4ZFva2)HaC9`8fBumNQOL9Qx2wF%l1cX~PK}0j^SDJ$MCjBYG4zRVgm9SF7btk1SEm^wF zJx(et`2NM(A4}qSq3KQL5e^b-CuoDL8T8jd~Ca3CYFSNps$HXPBL|`*NJ? zLM$3K5kZN;;N|KNUeuqhDSe&gzF&EzLT@w0Z0*Qky~EV=EvC4JL?W%fN~#FWMC13! zgL)d1c@++rLi^TzX5D0}TYznXX7Ag_mO$DVV(NODYj@15K+gXY<|9^*y!y~Xf5OSb?;I@T6U_is0jbpuU~09e)GrM_KhAP8JI>-F??WMtbM5T zL$URVh7oR~squj_XVSh4;fK$_FTEU3@n(9pIWo07Um@sd5NDeR8{gsOMXWZLO|uv5 zDNyF>FxIh|EX2!N6h-$tp{q&ryGls0){@NDJDpmV5Ptk^gbOk2%%?mut|)R&CS_qo zyw*kKWjE5X_$C-5*YkZ_HDMZbsXQiT(L=-7*w`Gp@X=^=uiRM*0u)L@%Gpkjf8Hg# zRqm@pAqut($|VM06eJU($|shY`6{OL)~&dQMS6$d+1}!K&MlGB7cfBq{v^JTS{^zA zVd7}v0K3+R{Hif-`xuhj8xUMzIla`~r=6>9tn=HGZZ4A2o#qJ-8Aqb)VO3_ABa8x% z1Aao{TMM6k(r2YC_Yj20GR zv^4GWv6l2gPALA-Aj!VGygcnX6f5}XLRsfPxNBZqJfyesoM2GTY(9?V_V(!t3tyvAHkhb)=HFfYc7pZ9-{Ps(Ed7$xlz*-ZZFE#kF@{2k5t6lWt^xbv$#vTz*AIu_?(R--cMa}-ahKrk1lOR!0|a+>cXx+(n3*4M)_U{S z{9s)EF~$b3<5y_Zy`YNu)vFsV~H8?Af=LAy~ z;XNA3u>6kIJa6z=;6KYA-Lq8hEHH`auHSpxYpgPJG-a)9u|BdA#r=16I{<@_KBwbR zPwM=@uJosjRw7=`dd}tczm3b|H^k%Z#9DYV2C>9ULP%&0L2ToN0?d=af-mWGiTRj~ z#C$N7jRi=2<$ZA7pwCNh9XH!r<=`Iq|Xj+ zp&rwVe~}fO;tJp4e!yF+=oG0`ANsByzyjmOpIL`E(VvPaZGPI87*E!rw}Ua_{p$+d zG{Ss^bCd)`ByeN>g#bB0jaRNa1|!6FG6+Ltp7yO>(TG>x64l;(mo|n;cL7WH zS0HmcAIvwCcgw%y;eXhd_oEkiPmdH-%2*s1PKh=_AYzb|sE~?#=1G=^j>_&+S0@zG zKz=SUeb^pm{;s&*yyFP@@Q^4iR#m<#~> zX38mS;}Cw;g?$@}VeEQ*b=bonL+bg)$XJkhzTdN-$+dhvW}m(9lkMik>e)`{g;O>i z4J{4@1!1@0+JznlM+1iHa_g#U_w)%~MNv~ya`=R+4Qo&$KM&~+k&0AbbKT<614^Eru#7{VQU0z#rs#1AqCY4$MxNJZ=G*RRD!MxZFRcR&9-9{*M}?Hj9M zyfTtxt`y)7HQc<)Vq$&a1F&7#*M6|hFQ45}o424L7Q+aG{=)wtDw}@f-khYN zp>gSzsqMrrSSCVL;nr0AX0&aXi2a!tO{OSIDJWnJvRltwmd^~%1;3w%AZM}3Lu?J`z3WBFZ zd&Dl%CoB+(5JumCi?N-sZ?&ekuWxXu(WoziThl=5k?6>W14K%C?y>-%$>){)eAXH} zGo$jT(dv4NE#S*bPEHPdjR|gRYx{$t+6Uu~vwf)nHVtdwH&DKo$p%l6##MdSvp!?e zcv?{{*i^dQE&vP{>~;H8&h~XIEkY4bheUv$ULJc+N5aCun)#YJEHV<^id5V25ze(E z0ctRRUDaUVS1EgM*$+#7Y8E!OBy>voRGo~UKZWGw3yVc9IH14nT>}>#{J2EDGR~L9>da-3^6p z{54MMv)H(29D}7}a20i6b>_A_WIx5HY@vx;0%6Bs z6V1H6wG}ilAQ=!CI5;@S^w>cupSjWTd`3!18M?7yut@w(_m2vT%@XV0NE#{U@4HxF zVCintXxLK`Z6~x8rr}u)ir9?oA;1Udkoy04sMF5&W7Z}dPk-v`yXRq_uqZnSE9>p< zr;nu(HO<)O^3vZj8}xy|Hewe8DETge-!;*I8Mj#Fjf%2Xl|#&E^ieq`notr;+%X=& zO8TPl*d6IQn8RY9Q?u8FI@%owhclq^C455BIVrQs(5QD-@V1(BiVe~RPBzzSD?w%(2$Ti$6e{-!CCkVT1I=+3u|Py zR=%qC7B|Id%v=t8*)}%cYQ1#{O=2lDXYQ?7x4a-;IqT z4eLK25U(dFx&NGlAQ+%(8yHN4)`WQTdH4=mq^h?iH2Y3+`g6UYBq{vAA#Cf-rJ)ad zp)&cPdog#}lVgE{WniH$R^Q202W4N9?Udyq28K{-XfL%rI@L|=Kx(#r!LD>mkf=-F zFzguU0-@;$KK zy3ekC^f~#-Ky3tUWX7G}R8Mv~^5euT41v1g>vLKiW(!7BFIsWyCpg&|Tp<@@HW=m! z*i%l>DbszEGyYEdMx34)%7_PF7q$86soySpkBm8z^uWCzRul>S{51p_@1H*u+`#xa zB?*Z?4vQJ6#^>49^X??Py1Kfe4RAycPfyIILl}lLB}%>h{nM>(cIDcrUwyj+U;^s1 zm`x*cSt0XSiY=G{`%<{z3H}RaOEkf0PK06j+=>Ez=W+0-=Y!2h{$ed6Vw?9coXOu6 zv~VbVzGfU2yB=Q8R_w9t3QEK(OviTPM!=gR6sIRNu^>Tf2@1(D#8JMFB;Qs*IN11Il9x_vSp5eIWhJR zf6VXoSl{_{DQP%`fyMYA(o&P1oui)e8=u!*Tw0oxg#}elD2h2?zL$$0l%SB1A?dds z6af$_5s`wK*{?R3Nkm0ky4stb&(Pkf3d{E>S1D)Phb!Wj%Q?-&v?O8Y6(mil)a-Bv zt6oT0EMoIMwkND=b_)X{q#@URXM7kK?%(z73A;og2!49q%%AGWC=>xU6?F;!m2;+) z;aFW13EN+8NvYZ4JVO8Y=~LY%#Krx+`O!>iKuRnMkpqtSt91lF&##N^ny+IJeAoQL;S{wW&)d8OSv+9tjL33iNuU3^T;k;5 z=hJP1Fp|Fx-50v6MDM5(Ho1;u0#OJau-i<9=5O&-MnlNc<))PF_Z6K<6&W@^QBi0# zG&E2h9?Ad$Aug`gXk|*AFo=9_UV3vrUw!Q>;TZ#s(3R%I~idv`6uM_oFO-p!BW5aN=z7^>hB)3buG)3PhR{9gHVXgw9~;M4gmAM;M`rq@D*kB_9H zZX&ZVt@jbM60GHa6*+AFd06&yJV1qxL^GaRd=*8GpkR1L&<%i%%xM+?>zb zx}b4Bb4H{K$UsNK=^iR8-NK0<*Ds-1M&yJ-YWwQIl@qd&T(&CkL$_Qd z=zucB-aZ<8KZllXqq5+gz2&Z>YYtzgZGbMU!CqEYHfz|5-tRQt?(uja*t-Eqy444^ zYcKG)To`1WqNBUJuS?B#$@^4~j+ght0~Bl;T*t(C4}wg8Sbpn(g@S@b+L$Vm5tWd* z-i}ozl$DaYB`1J{g3_!p@HZg5=9v=IKqn9Ag397a@P1?l-2LBl(P`A7wmsyDMuXl7 z{s!i@yCJreL)n((onjoMUMvZ;QceN;0T5`6EPHdM#bhi?hJva@Gx|9cg@}|&@+8UA zZM5|-x>I)C@L@2gmz#l|6+37s*_(Wi4tARIHAZ%C zkgAe)t{nc(gIK9&1i{&&?_0f5sfsT$1=jOYzvapp^8Sm3L?_LTne6d`{-o?3ngT~8gbz<_6 zH1W?A9~coeCb-TO6GsKt_=Tu;uk%_hJUy=+3R6|faFY7C9|b}WM)!nw6q#sN)3gRs z9ipj?PYcm3;YJn?Z2Pz^Esv57?QHBmZAl7E-XrVTUTZteSQn&>PDnL#Lr_+@$QBA5 zd0g9NuJ?1!(S=B$QLTqTghM54GTQX;Pob6tce! z+04nZ!wU%s;d48~1HfUfLbGQufl{;8l@7q1#0(78;`e^r|DuJxy?Lj9$vHi6JXk!t zjz(Era#(EcQ_{kA6G*LeB7z-a8TK4Q4oC=I9MPqU#rjq*x{n*w1hpL-=w1&1#}Y@M z#r1UTs!5>|dwu-hd!J#?12%mKuL5fJ2s0j~>~qlOc9W7Tc_>sTh5HAQK0 z7mgvA+{l~`<3G5_o;jqJV6rTJMasUWl#iJ0+~UF*vLZ}xMp!+I4f3in38D$)iFbOe z@RqX}Zp5aMp74xdISvd+S7J3l4LR=+;qk2Rvr$xJ(et}zo7MvZRCY}<>r6oK2mVEh z7Ut4gvTra{U60akD9vt68ly<_K13~+;PGk@dMKvDe?_@#`jAqO5QO-x^4A*+WlrcN zUKxSE=>(r>tK zFgY|qx|dct7NT}3x@LJO@afL?uO>>ue!r5p`u-fqd39ddv}QD0riwYvQFvwdu;DV= z&A{=q*$*rH*^N!|6h+aZSz7PzYh6P8A?i~3(hjkDg3~PxmwI)4MuuG-o7;1eI|yLz z;~+bTHUw4&#TpD)Nk29ZsA{#-j!yMzfy3NXt4v8AG8Fjq$N3bUGuKvHfUy(~Qhh6F zxRL?J9Q$~^&-2@&!K??a+PbhaB)-L_$8*&1)lZV!C%60WXD`jBH$FLATYg|`UUfV& z$=nZ?L*f;~5JCL06VaKOPWvG)`whHsJ8urC0mX;Lkw*KUra<^$ONP}&ViG}Pajt-B z5^L|Irydi{i#%>!tlmK(IyYkaFN#gc5PHmI!x1WPzB7z8s%hE#i3K+jf>oalvWw&71d9@UjvG)t+O zB)xjS2E0RW1-+VviNK!bks4Y1{g};52ph6<+R2HCknS<0V@qW)3dm^*E59GG?DiGC z*)3v%B0x)k{Vb-VV&Xh&JOsY??>wD7wi%aIQc|*1JdygmL|7}F6E%stAcV8^lrwyH zbesGSv$Uk78G;=d95hLa9nKkl@7jwNq#ITIE*Nz=4q8T?4lHNuh=|BAZh}x$QfhfD zNyb+Jbdt+lT+r7fJn(`hBFuGOzZ2|PIXlMUl*^nVG8i};9bnWoCq&oST=~`BvRePX zIjx$Zn-X#5GboH^{kZ3anFW=UaQ+kvZWAuQk?m@pZ*2GN7!aWG4GF%pT&&e9UY$A5~)U9=blhSPCK3ZqYztI-lc(q$8Yj zy~Z>Eti$nnw3?4#jM4sd6iX zs>(Ow%Asx9A9OdDT??VXu34T_)(@|sZ>JsL$!bx}Hg@2tJlG1;4^G_@zg`|7i z)hBUyryq$1TY*$mM&jmnfA`*9?}wkwl&X!tJ}U^!T0kcb%vd)p1-G(ripYjn4~FASHA)?Wg{Xw0ZR=A4>mW?DXCTZ7tQ+X&?drTa-zPn^X}D( zB`lPo7Tvqs79_)MTkwH=*3J)pHi8Uv95aV-yKrFW*p7&U!kK(2_CHX(9=){MIE*bY&?C=M<4ebS=hNuOTYltJjnifNbM zuh$sWd%O)U-))uQ(xKBAR(5vkOGmyPAp%E)0Pxkb1)N?K-}|7>Ly4-BcS`x26i|QP3Gb|5o>>A zB8)CK8Uyb$ydk`z0$OC9KAbshRJ38&0`{L9Y{}cgQ5O+v{h@JwQf{qOZkIAfmm?L! z$$YWfC+4N6x4Af9{c9VM6yv*-MVGf|9gj#!*~V#=3N#UBGK+<0mg3&!4fgJlgBu%kd0@Lo_Y&;6|9>kaB1Xx#?F-++J1v zr2QoAT`ucS-%h9{yu>oC$HXcZM=JK(;jWW&own zOT>6=ZZMADH?Vv0{a5mW=IK+p#`^hOzGu#{gUQV%(8{;&=OGL!5`wfD*uTDCNtNn`k-sJ| zG})iOa|*@4JAla0)+O+EiIQ+ya&Rf@djZkteaj}|8L4TrKb~VZ3$H=jue<-{&{Bu} zPw`~A%`u8ix<%NO>-LyXU~_VY%yllY@8hld5}=kek;~vSL(c8=BS{x#DcLp`HzQy9 z3(~E;tD0o(@K}KosaT%0c=o~|>?xG(z#iiPed2=JEmI?B~7(l?Gt%lpDT4f-J?KpRDPvWhit79ze~zFymFwvO-u`< zlv|<-3+Qe~Iwfw!uLv&J=CJ>)z29X1I&#(P2j&P`nqm?yK?UAdZOOBmg2zSDKkMR> z7VK|w+BFuF|K&Z~@SU#Z2>5l>Sk2NTU`-M}7QiBtk%^9+On3Nr(d+&pE54+sqRP$9 z1^<%E&|1O#`V}HBJ6m2;6GtvxW9-G?_?@xcT752uhq85PZ)L9CGnE3{N!0mpWpVGl zXZGsZ`9M(EfvNA`PNp07_X$m5tCi(O8@$O>_6JR#J*z}MkU=+SA%m76SHyxLzV7pY z6mDJ_!A2fhRMiKMUVScD^k8KK1TRICj{U*`=@>ony)YE-9U*9Vx z8QZoX7CeYirI^cVn}J;Kf8biCI=J%QJwalbmZ>5*smICBzAaLpA?oQ~8BM;9{rq>~RbB+*UNGNjDVV&z3O=mCiP*h|ya!SZMf-mE=(YH#)a;SkbqLO6S0RoW2G65(pY8{@a~R;{m!pw=8)FP5 z)QMH(-d|1M8C(G#HDq3hySzWL4>@B2s@Ro=t7VeC0>MUArq>WF;gy@x3bZOW&a8cG zeLyt*ja?<{MM_wq#=#ggWdK%ku?(6X$TaVx9U5_9$q@VC2L_laFXO!NT{Ho0Z zyS=?FVrfYY0Re%5iK(@6cYC+j^n3s4hDUNYR~CuSJDSZ@%7Fw-PtcE#Gg~+mO#qi zt=C}{6TGz_7xg_ZVSWibej5zGe0kZv|9pDv<~Ph^yOdR3ghVp0t`7j?M0zRzr4%0kjrQ;vXw zL$%kp?ByTcaLxaDc4Q3V%O~*>!QUl+vpWr^{0R`k6>n^1VbU;Uzt4qQmAKggQwVph}wz zy148ovi>EXMZ;NVC&M46tGstLT02*)uZ~X*7xsF(2W5XWrFum3xHpvJ!XKWCSt%zz z@j6%b0oVtlz53)@As2Yf7_i0&Oo2#ALGOv4r8Ic!*)Fa{YVfA5ijb4rtl*(H^_BXL z!|o-aInNAAOY5a8i@CmRWkJ$s_lxF!Li78+%?*(~t({vWh0+xW^(&9-5L70w$CT)z z4Z&}YtQJ;m>7ze954#lcevD(M9P(&u9%od~VD&!{IYrkFc0vh1?I82rZ26xQ29Zqx zymW-Vn;E#b>THswur&rpdGTE84#?X-eI8K~VFPIU^HdoU*r~1ibIsIOz9^qE-~<${ zVu5Nl_BjccYJ@xJAvp2y`ZL_Z`zuD@IV7?^SL6%NLX%l`%{Q#y)}Q<;cg+en!b{S^ z!w_s*_PhpeUf!RWSI&13UE6K~?+V+vlTA`I@x@o`hN4m}0(NsKpM&HX;T1D%KQ?m} zdSRcS92UU(VXP3A|1(`7|IZhS>-8=7x;v6gEi5{2kM<&{9&MS73`NL;_qc5VJ&#u} zBTm(BZh$hBCi2ATx-u^Wz^E#HD?^_o2i2Vpl%BrGygQ;@&$^xZgzzCBHV7>enhlRO zg?wPgsJ5CLA)$2e&DfG1+th?fNqXtQ0n5?vwlTpEq#KRR#uOGIO)CCBKYZYARwEUt z-2AC9B> zdcVh5zx5D9Soy_a8%vF+Y5RH}Vir|Hz}$43hf|eqD{R-_zVo=BKf8e+{E9mS{{i8kS&wB6ed`7k@;mwh*=9`DXu zY>}ISx+19Il;-QSnGe4xLxw|BIhTD&H^RJ4Pl?!#Vf%PoFIM6Qop0$kbWZu7D&4Z7?c}4$WCfarM`+KIAyC``|GSD`@?A0RbRrxJsGc!kP`Sssc zY2Skp>hvNaSK`Og&(M0q`v-r%$a_ztpR2u2HXbT?*QPFU@lb2NC8+(9k}T1}x?8Yo zJzU8H$fz!WcU6xri#{Zd&&Xhd|}i6k=*K;K9!azY|+EI;02jv-3Z>m4xgq{ zx^6RYp6vsH+Pz)BYh0YjxJ0-eeSzYEQXlxpq=7cx7n^?QA}+DNGU@O`cLlHKHRTj( zIR~_XZ(cKq z;s7=dOFtZ*bRh?Bh;Duyl%8!^?M>a$ZljUpwY-wrc@9`Q%`ee@#*IhGPt>VuBn8G# zS6+~1()y3j$nfXZ&ABz0YdttWh6xjV)7iEZ>zC}9Dby=dD1+l1#mPE_hK$x5Y}vC} zB+PFb#H=V_Kz+M7RnJJ}^{CTn=2-WhHZ%M&NN;&0qvUbh8#@+JszXQA+vd)2Q6@qd z`pA6P?)kYFB)ZO$*x~n-Q1K##MPFm~Qkf~=W_HQ-|CM(##SQqT-yjz!jB5Hol6NE8 z!F~7bXNwWd2x4as-KwYpvDL5Lf1F;sDA;(U^Y#j7q9YgHr?}OfcZCm`F{rl^ta<-t zAnZDx@aL;^SwcWE3m5*Us9kGrc}@DCX!pX`<({$^sV^SX^l25EM*m($0l7E)%k^DC~0P}5nBIWDOCPk>-hc>4VQvmG^jtY8S@ zU`nLIqv&GW#n=%8T$$q?u(`tCSoKx^-(~gVRC_=67y0v@>pmmTtIO(ehU%jA5yD4M zJe2t5!RwJ}{aMKwbtJnPL7<_P69I~_ zBpGRG1Yo#@RLacj&jwL#xHN*!BP<|iq+kK&&G$Wpy*!6)&?N20++XZv*jWK^$)MwJ zDf!}h6^joH-u+|4h{GI%wo62m(nc-I=En<7>RK3^l;i+i1_QpmC2BeEA z*1{L3XYR`NTh`meS>Wx*o8eMtFIyWRFl5=gQbF%NV;?4)SCh zWj7)1-D$(Jys=FxuJG@fO3SM;1h!up19VxflV1X=#!5Zh{^)oYUzd_!!~;cf77@%z zxDnm^C31cB%Uv6y_I}6Tuw8}0kb9#&hmQ9*ugz?)v(n#aH4<-J=bu=|R}{@3>mU^0 z&|P~GDG=U+YnjB9t-yA7=Nlc}+dDqw3Lz2mG|2r$Gcv+C{66mHw^o~jElzR>md7w) zs;jzc6>1{YNBH(?0>j%76(d62;a?0L&<3|5(QLkN1-W4`DRu~>-`G(HmJ9trlT8xI-siV@jcUYe%Go39xR<~TQV}tvAO0hM!ytAEWC|4U& ze_^`8R-1RRG$=wrI1u51YW`zD8v~iPDe^vx7M%~Rbho{{>0z1NjCXiHvH<6O=}YZg z`};DD;r+axuU%&uY#)lgXw_}MfOA--HHuOyvPjOY>E@Q3q=?E}R1{MA`YOKH8VtB8 zf5Up4Z>km5Pjlm<%tp9#;1|C9w~b8(HS|q`?VR?jSbogDuwA^PZ~E+@y?1Ev#f7~G zEsp=X-#Y=gtHnu^*^C#6fOws19To-ojM(K3J^kf#LU7G$2i-HNr8kGup@k;X5D3X8 zwEEyjB2b4>ApAd8sUg{J6n@s6xH%Hh+lVRNn+Xw$@rK*STc)bGPW2Z>cv<#W0yWzy z>wL3_XdVfP2)5+SE0S#iy{P*_A8InisY)qCDk|dx-2$L!B_-DU*VhGBNa-IQ#M%;S z?Wt29gSYHD{AB&_4Mh}>d$O6x+Vg~4Jy?COPNp4Ec%5Ra_l!BzFySt1JpBNu6tfYj7nC&xI zNJngUYnA29cR=<2GT~VQs;&v|{q|q_3OyRT737DJ{Q>2Wk8i z?Jf$Sgtf_`_y0EIvUTt1-cA)`NQT*)V7ldW2>V}6pYj=^UC+HNGikRG~{ zB$pHSA0)#>=KqL(^LCJ`)b6nvO!0+#d^&Axr3^iC4&XcdJz9H9 zZ!uO4257+=j5!t!OngqQxN^r6NZ?^0`(qj!c81#vF+wV(Hs zORW>j=N8ec_G9U86R20Si(uOr6KFE12?`?$5?yX>e1w;44x+0wuN(;6j)$GEu(7DE z@IKxdK-I@`1@0;mIO^uVmw)Xh^D_T=kPI!YFUe3KOX*%TDak8A%3O6j;_T7ukb;~) z9~$AKFvLW8-FNmwTY6m#%gG=9X)q}~vU<=V(a%D14kT`WP$p_~q_S@bJvh2QK5!%+n2my>_>Yzjc%Dy143ZdeI zobUm81@WjOi2nm$aUsja%bPxYgC2pkg^LFxd$zyv%qL6lngK+|HbA~ud$#m@u?LXF z+`e13qXepYtN^(w_Q?59Lzi&7p51%88V!wWJ}!tuuz0%NzMsHt#Ov*G-*T~z+!!`2 z((bJNnXJ0)YUl(&Z;24sy4uo78EAmi965RD+@V$3=zcg=6cii`$is+0Qhm~@K}AJH zQBkpLB#ouT`_WOoT`yb zBP9jSzp^lBxRod^;RG0+POP1n7z`GJ-cJ8`Ba`bt=a<)4%c;Uo{QUeCx^G`r1@IxS z9OGzc#zfdaRp$C;W)zy5nm2^L94V|R7gtw*mzOgr_mehkO(ds#VfOx^?&3Na;-Q6;$%h8NhyPiO?|B%rd zUU#F-^22V5{>)lf25PYE z7{b8Md28H)a7BEb&6D%0fFINlo##Q21kFKM-+KCJ`V6rRxwfvsvtg9_S>1pNUv~US zDhB{rOh+fvAQo~aF=u5GiMlFTKZSV)vt6$fVnI=VyvbktR=fnN02j6#NWu-o>ZLGK zJ?;ySmeLc)9BIS z##4Bk=jY>NSv-S7Lw`i7=Xv}zSIZomb*b{HGPGIaxPRkgE`xBt`#MVuU0f85*WD25 zUmxty*W1l!tLs1i3{Uto!Q4zvLPFx*enWJDZ3ImOBav?a_GQjC4@iUFm--`9n#z+^r5 zZE9-DV!Dw|Q*%F4wf<@6V?F47q#fMP_22^p4Gr@a@EppzJxO;IO>Pl~IX$k(E-x>E zQo4lH)B%=hBWhaOKv?|$F%BXQTYO+gkkise5(u2{cEb6Rb8w`jreZJETe2t=PrI~C z4k-ZueC=gt=%l1-Ahv2G=1BH&h?%$Li9GMVKxS}kOuT&7h%qc%aCjp*F)>k5Ls4)z znQk|zRQivYczjBVghpy~Vw-J{UUfBS4_J%uyE{A0g&dF^_}IbEz?8M)&mw`_9|!*z z*3wBP(q$GLORoMF7~j>^Wi>Cw)>)tQa5AlMh>2r)nT-dbekXnalpS+tokjmPA5RbZ zudlDqkt#kZsiBd7ndI9BJ#wKuL+Gf#AlojbA1y)$yWV!h%RxLuncX93QByN0C@3x^ z1+HuN#u>C!Z)1JMRaj&xp4`^P3lwxlWeckpCl#Y@U_upOG)Jm$-8jxPlch2Xw0Oka z0V&BBuY(>Cay-#${0mQZss1CV14cEv)WgHW5q{#Ajkd5>W3K_D0V6iN<>FNSRZsLZ z;)Xo%un548rlh1af4bc6e{b@8e~U2gkI9l%P{=_UnLoaz#B1hNM~3ae160eRii#-X z)_X-26;WGTdN2OhC{l?S)-ZKtqTL$qFEva%5>3TOnv1&+&t8msZW7OH+D|QxO0Ns zm{kA9dnMbyyxd1Q{bIx#R{yHEYbL0RDk@flR`9=q)c3&B|7$tz|1H4H?BvqO_vy}! zs@I~-f>w4|3x&%Ty={3_pzP77;}8zV7QI!h#Iul86q=X5+75_fo@I_o^l_KLDWU*h zuqzNl)NJp!TQq1n()L1s5qQ0s=FO6CT9QIIq(9zkUAb7ZSaF8!nq>fIH2+1ejI*t^ z?I=e+j~AQHz=xVA~B|t7QJfPz`JrE(^wfItYZ`o~@QfJz5qs6N{ z6tcJ*)T-ylOUId0lPEDcBu$iZfE|meRmpBXkt^ix>6t%iA&XSq*(t!|c1A`^d;Hlv zl%#4d@J|SV%Oz-~Xf9Y>=X&XHQkpLw0#=hyvn)y`n(Is-s9CHHk=_qtWOz$jy_sp7 zrswzzpS{|GQVMF9sjWKlu0!NbG)+}eo(Q4(fj>)6jFuPZOywANxL~f02AS}xSrR1^ z({-i+Z=!Nb*8-oZI%0Wp!gHg(riVJgA6G=?cSHmot~5#}j%&$ppcuebFmra*`}-)2 zqLQU3C;5ru2b94}1s<{tsGYFvEh&dA|G!=}1fNRswaTpuB(jR>gk{htV~cd6`}19 z`dV6RqZGQTa$FFcg=hmKD>IPBV5_A~saHn^XR+34VdECdoJ^UX>DCsuTY*k;(dPb6 z!0T@POV!y6!Gqrkpr=kjp0RhCGgdd}R=bv)5#UIK+sMD1if+IR5kL6C!ETEUwIR&0 zVhY8kvnn=&4O}W-DGV0h3u$FVtV_SuDB^cmfU@{u+pL9HzB0mT0>Ul8v+dp0jGJ`_ zj@9r$Ta4H?=i}FwR8G-wpvAa@qUVs+6OEy)=qeo1H^U$-Zfu()hDJk3Nx(-TC{ifMntTBOXCu9_gH0*E+2Ma*@U6jJ?y9W{)>-%!OLc;FCoaK zd3CEpuiEXQPqXbov)h1?7#LADthFw%MQlxo68) zd3)JnMhbCc{W=d|T*(Gzpf@Tw{EGHoL|AxWgbvbRB$Wy1FX$#Dy}0ibU|8{c#|9xp z45LCrpmc*%Qm}S+ck51uhNL~#S5Tp0VdJ&k3Bb?ieqpJp;Q?0AR{im5=+IyxpTJ!o znUYQaZTDP_L-YR=WO&j(EEWgmYhY-|=;Za@@oq$u6?gi*y4wJ?Gbj{}kdP4Yhu+@a zJDn#dKg?b{nD>3(2^16*LU$l{_V=CkHy{d&i&PWnbPE6{@mI<~)6?IXl@pVbAqT`aE-AAO4BmYc6Bp(~9&b)?0zwtyfLOBj z3|{th?in7IiFqtaUjtwz3JS{5@UUDPMEJa(SC$^1*8<%#VYc5H7fFpK%hlDjTnufj z)bnsMLua0~Xwg+@Q@zf6P}2=Lc{#L52QePREP4%5G_ZimlYIa2G0PmF&IMGI_vws| z7Kkb4dfV>QP_^u_?LWCN@y5j^*0#0bNB>KB4V7R1fwb~^8!9X)h|cXA4eDx@`rbOE zan;2_R>ffcGhv7h554{G-6g@0T)4-W^`TP`PebqOXM`>nKRbeWB6 zJj{2l)eO~`>_HnUt{Ws6?&}<{&he%vtrkUw!52J&bDB80nF{?gkVvvcvS^-Wieb**wFdzu9TPu%pp!b*5q^J zU7>D$w%~rbo$qe@7wh4S&avWB~EM`z6iw^(q)HS~w|gi0TXL$Fu> zBi;3JIwNEXAaXn3d)&`Pw>44Nm|u5X$jL;G?S3HL>?LSXIZglSR=Kuxn=zu z^ZFqrGsO!SWP9C!FuFT7`zvdC0N}S#E2E zSI)z;$5t!>#oK~mZoE_i#b88IMurUFU*@azB?=}Lm6ZcRLpk#`aUfOH)RZ+fsqf9A za9BdJc-)o}Uq43Vw9iim4gIivTA7qXPTe}QKaO!S?_tR8{Tclm(?cnRcp0zjTbi8W`Cp;WVdfP4OLnSc24GX9 zt>~c*K9ZC1k&yk3XHqu(`vv2Cv|OjaucL=R8{wzX)z zepf1(UZn%crr(r!>y*zbtEo{mLGV5uh!T2VKmZBvp?Gqcu&5|9px4hl+XEITc$Ss{ zMqFCDnoH4(`ggeS67Y_|)Lq`(6xP)#+oC4ozVY$$n)GZO9)=UcyL)*-#c;@e5Gn|w zz3H8VdaDS1Jw4kx28V|W!*p2aiT^lL*=?2~^RX}%D$+#i@czKo^}TH_wh>vqOf>Bs z+hU>+|8IS3dgoUwj?8g-?*%VgNy!nqK6_9;PdA6r0R3KS@aA?t=*oG2F<)x1HgA)t zcqD^CgZ4lEx6c`%vQ3+$y?D+*h`#DuDj|4;kmyNUc--Dr&o-pQY`($YZ9J5M@$Rgr zrYE%-7!Y7#tzvuFT;F~>r%g@u4d7jHKxMbq?3*&O^KhJm<(izi5t2?HU~l}dqPvYD zClE6Mz=EUm9q)_8LX5;>z)XA|8o%S!_RyERm%KtDT?vf;!rQpz5hA{H40KRc|>xap)|Y!>_B+ z>D%tD^Tg}(l1czZ%jxPE)u#rI9)7u&Nj*?fkF9R!^r7%E#B98TyzX&8VMJToi;b4+ z5oFg*mF}nGwJe~YEJzG#|7Bb|6{w7SsJ9Z+=(W$z5XjSu_Agx6^R{8XYOS&XDKD_e zHKS+Ahw4?E1APELR+@j_9?uudAA69tCz>xkrLIuoe3FqI2Pr)c|Kf+j@haEF;&zJo z==T%u3Vp2ic_&`4g0jhYyLx=sa^&;@f!*FC6%)|nFy0RtFa7Qt*4XPObgXt!mrd zPQ--plcT|>Q+3nbabWPP?>9HVVB3HOuaxuA;o*epq(-3h-L(Nik}cN*`DTmJfxZ`L zVzfOJzy!;?$?cuk>0eGRH8iNb01HzJm~=iOzaKt2@59H9mdPWT#23DeKcGjf-;jL_ zVO*|3dq^vk6zukLMAg9kvfZbZ5-Pz-vuz1vNE_Zxypva{soVFtAeMA(tpZM#NnM6jMNQh)uW02f6?~EfDQ|9 z_Zs+8^z6>vWcl5NnMBAoE%~E9*8Z^Z`3qT|1qg)x^W*;lKpc1&(NTJiHU3$DoAE0j z%mmIcs77;-`T^2o_B^13K3I}@IgwiB1+&40446tvO6KZ!`qoX^0;|mT_32Xf{;cit z5|4L!E;KsAi^%&~s(ie$3Eg$npCld2eb!9!a^>Yy`fhpSC#hl-kkNcI`7WF!t8FC? zL=!tm*{`#31~yR0)@0hMf%j^F^x^UGV%+cTJ0Zf!;i2W!(fQ#abtBY5YAxmEM>M1AGZ19V%uLpjCcqJMn#|Pu0*1?KG1&{sJzkW}*T3N`` zSvhKjf~0zifN@Z}_GqLY%cN&M@*^2}S&UCH0S4iSe{FP-OfAiYu=|0e|25Ms4uoG+ z_SwA9drB382|dKR`oeQij|D7i*x>lCT5sCq-SYMpPl)N=dvVJ?Ba$JYW!5&n)WOJ2 z^J1@JZzA0U>tD{s6lp_iE(%$`a$Vk0bywH<;@AZ6JBpv0j_m3gz4?%0_-QW#?_+X3 z`XO$U8aK8p@^X^heJw>X01OkNE`;vw35zmI2Cs)rBMS-&vU7661_lfgrN}Q0+((Z7dd={ZB_@eNPt38v z`9{cQ{5Y0DFUNJV`YUmJdt0#mOhrWn7}7dcx|>5MXra6e&|9lh?-n~#)kPRz3&ye= zc%Et4b3qiYJ!IqE#UH5rUT6mQ^IA;+UH&U-aVhuC)5l+r&7fJ*O8fuZAMWv8-)Nsl zF=TF=Q$Op;@Xs~$@J3=(2{&tL*@kOkyK*`833ompLY#hUP4z$)uV3l^7=$|99u#@H zb;HZciyj(kO`Ewq^{hRA#NIyAmGZEQ98%8GSEuf6TARx}JvnJkD*{l;(jhs3E6;4= zB{j-^O1@sv#*7HLLr*kjN$Ic32?@mmTm)!qbzR+5I0X!r9w;FAcjK;r)(e5J-@`@h>-yUt6B8v=E$xtHhcyROF<`#;7A?Hp}*h5YZ+v`)Jqp}X% z4YypGphB0wDN4GOlev0lAxeVLh8=a`$H9~>bmSQb#PES{kY(l6@i*_>O1 ztWSr06yKsRcM$(2$B{C&0TXqHCe0s#$EvkYl_mLdv8@PugvG7-Zn`H4UPM@ z6vkp&XDOVpg`hfUqcpo85JR6zeIc(>ELZUZMhJ*~J67+E|7 z!W$VAa|hl?@9yrY(_qlQsX`A0vl@F}>7BoA72S-)k42LpAF|l2{Ul4lwM6e_%1>Lh z?ekK26KewD)pp}k6GC#=>)2}$vtvSsl>*X3)l1+5Ic~7?asbNB;YlxoRpQ%TM#aAa z=BZwt(00rp;oIdcTQ#$pn8AcX8d@(Ix@>0w`8#y*6QN?WDt4Jts9g_{^xLJ6jE!S4m}{UMI8chCM&4v%5xl(A{uioO$ke7o95Xz(>yH5VP_)nURJKuJ zV$(C_;a(>9*VliNoulYNzrVXHekf@;4emWXIO)?1m$ef>9rK18^XnDB^)ALcbXI(*wT-u=O-~i_k8$+&uv*FGM zunzD>KdhQg$fFs@;2Lf??<8Q=zxjM-W?H#ga%8sCjt2Ktm<&)Q$H&KiAs-thmbgXq ziNg-hd4L3(Ocz_?Q=sBvVtHQ3JGThtmwhKP_TSGGcyeUKf%WTeU{GTi($CN^V7(} z6JEE-NfyZ8IG^Tw*P(yCY>fZvSUo4LAjuIQ^IG{0nJEe>{wr;5+f;(!-Q-bfmM>Bc zQG+xEIbIbDBQW`Q>=vK;hidv%jK21LjQW&EJj{bV)_2mXDJIe5MF)E_!IY%Zqkivc z$vf%OI^kkodciq4Uv^n|lJ=+Fw>9L*&Ot<&V@SZrH$FMJb&R;ZwDGQj%Xa&tGtvf> z$Ay<{#hKTp+S_0Kmx!9S3)KTbKn!(qAz&{3v%KcB|IcTH*slKb#mmHqHjQWtmvL;Q zo2AUJ&CPqI7x;(wt*op--TG;}pNlNxd-4dBnyvz^E$`6xk*#** zs0|?hTc$?%+D%hfr|^7wWYO{(w1ZNu*ZCj5-vuUZZggy-Lp~~5VPRp;?JilmT3Y|i zt*^JR%D7luFEeOxAODJ!Jv&~2U{CfsWezoCZGaokd;c^9M=-(`pwc%@qE(ahgBRx6$V;fN=e8 z6JJ54ei6w#NwcA1#yF@i`{qc)e5p2lWa1Im%8enZm%R&50^P^RPTW^~+-NpB$FZ|F zCYpk(cp5Y~KBbeSi8>`f5Je5j2t`AjX3NpDl;<|29(0i6S8pCVEY zLX2r*sB56KzE{@};<*wJqooSN9T*T(ml9Iis{hw%*fF<#TW&OgL62(%>!`-Q+MlAv zRDxxnu^V)kqF!g&=(}dKoGEqUcXDO7<8jT`?R>Lj)1~FSbP@o$=jL9q!dfC4K_rxM z9gmdM_`Ik2%F$Nwd*)iMCh7fON8Z<02g+{-2M2rcHG&7f4kI_Ie=atdubV0d>F{8p zhW-5cv(@Oi9JFNF%&OEn($IGD(}`1*K(7+de3c|^&|8$ zAM8YAdUckk@5uHNd+-gt#F#RR1pm3l>5aze*25-6Z9Q);^QAva>PCKS0=lOIZyWjI z47Zj}ze&@c%0S0f)x9i`suyY1%tf39XzA_d6n$CU=1#=R1tkiDL->n+;%4cX zixzcMB>xz;U+p=c=p@p6Uu^1k`0Cs9>mu4&wlk5)$hGmdU9Pwa_Z_bN;po_r8j=U z3kgZCN7wN4EZbziyox`W=hw(w6@jENz9re^_u;&x&S)RqFE7NXRd@XyO^-ii|8hN2 zx$-&WbYP*a?P0accv$usASPwP8^-JYDE-d zhFB}&17lPKSFI(uokf|E_~q`vy*2$?Gly*bjzE}s=>hQ{@@R6MtSy}{mT|MX{z_g7 zJrQY&0xz7yD!xl76PSI=6EQ`deTUj-u$`*ziH5h*8-z&y5&OdL3YqYexMN?Gh#=}i z#=i%+Z;K9iJQqrFDP<^3nv@ab2GubH#bxmZ1qI0xUG8vjaBxR8rM5RNU>haYsvORa zdSBu(>obEhbTma$FAY&7dD7=)v#NeNBnH(=6+wxOp(55*yWkymbarOPIu`$tqjvd{ z^BB!=p}d6M|CEbz-^#vsj$bL9@p7W!j}ZTBX0Kh>dG6h-caEv5uI`yz=LUML7U!zH z*3^9NnHn7;r=YIoZxH1ek7UZ|ZW|jjQM8gDBDMII6nqa?Hrt+p7Slheo7Kyx51LpR z6{g}I3&@@}ILPFs|MEC0=%AYmxt2Z*4YWLNkkQffma{5Notm-`5lZ{qRcRVBGGbhu z66{7BP-Ti!WxWZ@0euENbp%M7kxxN}eYY8~%bnpOeK$sF*B*N_qTWNHq$SQ_lElPd z5oS}lEL4@RE4-n5#nPg2?SZt6%xyH;+YgFrEu(64LrM@u z_V8iz4=-quaDbe=kx}y3&p*27a|v%?Fv6~jOeaD?KF-5M-rJdHQlY>2smI}dhp8)A z!{AmbFFR%ChcxMv*^l)iS+jN}UB3}*>IsxkQdz5AsGxCUQ#YUcPzs4=f_8wNK8CD< zy)&`g3GS;bBqW6U6ep*n-A&?VcHes`$7XjR@XX-b+i%|<3dFphe^tuq8WY;fkAcnFr`R2DN?SmRSh8<>LAxlMWf7A8k*?>>W?aXkG z;);qw3Ub3w<}1H#m08u72P*onmAT3%H~CG<A;3eGrk|DNve|DM1ufexxl zL58DhWYb#1qwgMXCK8_&G1S2BD}k|drU|i5yGr#qw6>~ zj5*+bQvC#+PX@ Date: Tue, 1 Nov 2022 00:50:06 -0400 Subject: [PATCH 24/33] MARAUDER AND SMALL FIXES --- code/game/mecha/combat/marauder.dm | 4 +++- code/game/mecha/equipment/weapons/melee_weapons.dm | 8 +++++--- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/code/game/mecha/combat/marauder.dm b/code/game/mecha/combat/marauder.dm index 2a12c9443e44..32260ee80cf0 100644 --- a/code/game/mecha/combat/marauder.dm +++ b/code/game/mecha/combat/marauder.dm @@ -76,7 +76,7 @@ operation_req_access = list(ACCESS_SYNDICATE) internals_req_access = list(ACCESS_SYNDICATE) wreckage = /obj/structure/mecha_wreckage/mauler - max_equip = 5 + max_equip = 6 destruction_sleep_duration = 20 /obj/mecha/combat/marauder/mauler/loaded/Initialize() @@ -91,6 +91,8 @@ ME.attach(src) ME = new /obj/item/mecha_parts/mecha_equipment/antiproj_armor_booster(src) ME.attach(src) + ME = new /obj/item/mecha_parts/mecha_equipment/melee_weapon/sword/energy_axe(src) //NOT BECAUSE IT'S USEFUL, BUT BECAUSE IT'S AWESOME + ME.attach(src) max_ammo() diff --git a/code/game/mecha/equipment/weapons/melee_weapons.dm b/code/game/mecha/equipment/weapons/melee_weapons.dm index 4d2aeb00f243..a51bcc0140d7 100644 --- a/code/game/mecha/equipment/weapons/melee_weapons.dm +++ b/code/game/mecha/equipment/weapons/melee_weapons.dm @@ -11,7 +11,7 @@ //Attack speed modifier for a weapon. Big weapons will have a longer delay between attacks, while smaller ones will be faster var/attack_speed_modifier = 1 //Attack sound for the weapon - var/attack_sound = 'sound/weapon/mechasword.ogg' + var/attack_sound = 'sound/weapons/mechasword.ogg' //Attack types - Note that at least one of these must be true otherwise it'll only have passive effects (if any) //By default we assume we're using a small weapon with only a special single-target attack //If the weapon has an AOE attack @@ -111,6 +111,8 @@ minimum_damage = 20 /obj/item/mecha_parts/mecha_equipment/melee_weapon/sword/cleave_attack() //use this for basic cleaving attacks, tweak as needed + playsound(chassis, attack_sound, 50, 1) + sleep(2) //Slight windup, lines up with sound file var/turf/M = get_turf(chassis) for(var/i = 0 to 2) var/it_turn = 45*(1-i) @@ -142,7 +144,6 @@ O.take_damage(object_damage, dam_type, "melee", 0) new cleave_effect(get_turf(src), chassis.dir) - playsound(chassis, attack_sound, 50, 1) /obj/item/mecha_parts/mecha_equipment/melee_weapon/sword/precise_attack(atom/target) if(isliving(target)) @@ -186,6 +187,8 @@ light_color = LIGHT_COLOR_RED /obj/item/mecha_parts/mecha_equipment/melee_weapon/sword/energy_axe/cleave_attack() + playsound(chassis, attack_sound, 50, 1) + sleep(2) var/turf/M = get_turf(src) for(var/i = 0 to 2) var/it_turn = 45*(1-i) @@ -221,7 +224,6 @@ W.dismantle_wall() new cleave_effect(get_turf(src), chassis.dir) - playsound(chassis, attack_sound, 50, 1) /obj/item/mecha_parts/mecha_equipment/melee_weapon/sword/energy_axe/on_select() START_PROCESSING(SSobj, src) From 716fee391cce95a2e1d41f38683d82f83a88ee73 Mon Sep 17 00:00:00 2001 From: Mek Date: Tue, 1 Nov 2022 18:16:23 -0400 Subject: [PATCH 25/33] moar better sprites --- .../mecha/equipment/weapons/melee_weapons.dm | 2 ++ icons/mecha/mecha_equipment.dmi | Bin 22228 -> 24544 bytes 2 files changed, 2 insertions(+) diff --git a/code/game/mecha/equipment/weapons/melee_weapons.dm b/code/game/mecha/equipment/weapons/melee_weapons.dm index a51bcc0140d7..37c02d79332a 100644 --- a/code/game/mecha/equipment/weapons/melee_weapons.dm +++ b/code/game/mecha/equipment/weapons/melee_weapons.dm @@ -176,6 +176,7 @@ /obj/item/mecha_parts/mecha_equipment/melee_weapon/sword/energy_axe name = "\improper SH-NT \"Killerhurtz\" energy axe" desc = "An oversized, destructive-looking axe with a powered edge. While far too big for use by an individual, an exosuit might be able to wield it." + icon_state = "mecha_energy_axe" precise_attacks = FALSE //This is not a weapon of precision, it is a weapon of destruction energy_drain = 40 weapon_damage = 20 @@ -236,6 +237,7 @@ /obj/item/mecha_parts/mecha_equipment/melee_weapon/rocket_fist //Passive upgrade weapon when selected, makes your mech punch harder AND faster name = "\improper DD-2 \"Atom Smasher\" rocket fist" desc = "A large metal fist fitted to the arm of an exosuit, it uses repurposed maneuvering thrusters from a Raven battlecruiser to give a little more oomph to every punche. Also helps increase the speed at which the mech is able to return to a ready stance after each swing." + icon_state = "mecha_rocket_fist" melee_override = FALSE //We'll just buff the regular punch precise_attacks = FALSE cleave = FALSE diff --git a/icons/mecha/mecha_equipment.dmi b/icons/mecha/mecha_equipment.dmi index b78df603b1ec2f4d0664659529318690d5824f84..da630574358c4fd3f0e609e25f130481d2507540 100644 GIT binary patch literal 24544 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

+9_PqvW>W_;8kMuoFBQqW&Q=1lnY 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 Date: Sun, 13 Nov 2022 19:08:56 -0500 Subject: [PATCH 26/33] small fixes + mech suit change --- .../mecha/equipment/weapons/melee_weapons.dm | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/code/game/mecha/equipment/weapons/melee_weapons.dm b/code/game/mecha/equipment/weapons/melee_weapons.dm index 37c02d79332a..8e1c3a3329b5 100644 --- a/code/game/mecha/equipment/weapons/melee_weapons.dm +++ b/code/game/mecha/equipment/weapons/melee_weapons.dm @@ -50,9 +50,8 @@ /obj/item/mecha_parts/mecha_equipment/melee_weapon/start_cooldown() set_ready_state(0) chassis.use_power(energy_drain) - addtimer(CALLBACK(src, .proc/set_ready_state, 1), chassis.melee_cooldown * attack_speed_modifier) //Guns only shoot so fast, but weapons can be used as fast as the chassis can swing it! + addtimer(CALLBACK(src, .proc/set_ready_state, 1), chassis.melee_cooldown * attack_speed_modifier * (check_eva() ? EVA_MODIFIER : 1)) //Guns only shoot so fast, but weapons can be used as fast as the chassis can swing it! -//THIS ISNT EVEN CLOSE TO DONE YET //Melee weapon attacks are a little different in that they'll override the standard melee attack /obj/item/mecha_parts/mecha_equipment/melee_weapon/action(atom/target, params) if(!action_checks(target)) @@ -111,8 +110,7 @@ minimum_damage = 20 /obj/item/mecha_parts/mecha_equipment/melee_weapon/sword/cleave_attack() //use this for basic cleaving attacks, tweak as needed - playsound(chassis, attack_sound, 50, 1) - sleep(2) //Slight windup, lines up with sound file + playsound(chassis, attack_sound, 150, 1) //Slight windup, lines up with sound file var/turf/M = get_turf(chassis) for(var/i = 0 to 2) var/it_turn = 45*(1-i) @@ -143,7 +141,8 @@ var/object_damage = max(chassis.force + weapon_damage, minimum_damage) * structure_damage_mult O.take_damage(object_damage, dam_type, "melee", 0) - new cleave_effect(get_turf(src), chassis.dir) + var/turf/cleave_effect_loc = get_step(get_turf(src), SOUTHWEST) + new cleave_effect(cleave_effect_loc, chassis.dir) /obj/item/mecha_parts/mecha_equipment/melee_weapon/sword/precise_attack(atom/target) if(isliving(target)) @@ -171,7 +170,7 @@ else return chassis.do_attack_animation(target, ATTACK_EFFECT_SLASH) - playsound(chassis, attack_sound, 50, 1) + playsound(chassis, attack_sound, 150, 1) /obj/item/mecha_parts/mecha_equipment/melee_weapon/sword/energy_axe name = "\improper SH-NT \"Killerhurtz\" energy axe" @@ -188,8 +187,7 @@ light_color = LIGHT_COLOR_RED /obj/item/mecha_parts/mecha_equipment/melee_weapon/sword/energy_axe/cleave_attack() - playsound(chassis, attack_sound, 50, 1) - sleep(2) + playsound(chassis, attack_sound, 150, 1) var/turf/M = get_turf(src) for(var/i = 0 to 2) var/it_turn = 45*(1-i) @@ -223,8 +221,8 @@ else if(istype(A, /turf/closed/wall)) //IT BREAKS WALLS TOO var/turf/closed/wall/W = A W.dismantle_wall() - - new cleave_effect(get_turf(src), chassis.dir) + var/turf/cleave_effect_loc = get_step(get_turf(src), SOUTHWEST) //Big sprite needs to be centered properly + new cleave_effect(cleave_effect_loc, chassis.dir) /obj/item/mecha_parts/mecha_equipment/melee_weapon/sword/energy_axe/on_select() START_PROCESSING(SSobj, src) From 0d0ef959756014fa302f571bcb8d01bab05526a8 Mon Sep 17 00:00:00 2001 From: Mek Date: Mon, 14 Nov 2022 12:42:46 -0500 Subject: [PATCH 27/33] Various bugfixes and tweaks --- code/game/mecha/combat/durand.dm | 2 +- code/game/mecha/equipment/mecha_equipment.dm | 3 ++- code/game/mecha/equipment/weapons/melee_weapons.dm | 5 +++-- code/game/mecha/mecha.dm | 2 +- code/game/mecha/mecha_actions.dm | 4 ++-- 5 files changed, 9 insertions(+), 7 deletions(-) diff --git a/code/game/mecha/combat/durand.dm b/code/game/mecha/combat/durand.dm index 67262d563064..cd141160b7bb 100644 --- a/code/game/mecha/combat/durand.dm +++ b/code/game/mecha/combat/durand.dm @@ -9,7 +9,7 @@ armor = list(MELEE = 40, BULLET = 35, LASER = 15, ENERGY = 10, BOMB = 20, BIO = 100, RAD = 50, FIRE = 100, ACID = 100) max_temperature = 30000 infra_luminosity = 8 - force = 40 + force = 35 wreckage = /obj/structure/mecha_wreckage/durand /obj/mecha/combat/durand/GrantActions(mob/living/user, human_occupant = 0) diff --git a/code/game/mecha/equipment/mecha_equipment.dm b/code/game/mecha/equipment/mecha_equipment.dm index 3c81a93ad973..4eb6ab9b55cb 100644 --- a/code/game/mecha/equipment/mecha_equipment.dm +++ b/code/game/mecha/equipment/mecha_equipment.dm @@ -143,7 +143,8 @@ return /obj/item/mecha_parts/mecha_equipment/proc/detach(atom/moveto=null) - chassis.selected.on_deselect() + if(chassis.selected == src) + src.on_deselect() moveto = moveto || get_turf(chassis) if(src.Move(moveto)) chassis.equipment -= src diff --git a/code/game/mecha/equipment/weapons/melee_weapons.dm b/code/game/mecha/equipment/weapons/melee_weapons.dm index 8e1c3a3329b5..7a55a2750833 100644 --- a/code/game/mecha/equipment/weapons/melee_weapons.dm +++ b/code/game/mecha/equipment/weapons/melee_weapons.dm @@ -234,11 +234,12 @@ /obj/item/mecha_parts/mecha_equipment/melee_weapon/rocket_fist //Passive upgrade weapon when selected, makes your mech punch harder AND faster name = "\improper DD-2 \"Atom Smasher\" rocket fist" - desc = "A large metal fist fitted to the arm of an exosuit, it uses repurposed maneuvering thrusters from a Raven battlecruiser to give a little more oomph to every punche. Also helps increase the speed at which the mech is able to return to a ready stance after each swing." + desc = "A large metal fist fitted to the arm of an exosuit, it uses repurposed maneuvering thrusters from a Raven battlecruiser to give a little more oomph to every punch. Also helps increase the speed at which the mech is able to return to a ready stance after each swing." icon_state = "mecha_rocket_fist" melee_override = FALSE //We'll just buff the regular punch precise_attacks = FALSE - cleave = FALSE + cleave = FALSE + range = null //This should just make the mech punch stuff, which is what we want! weapon_damage = 15 /obj/item/mecha_parts/mecha_equipment/melee_weapon/rocket_fist/on_select() diff --git a/code/game/mecha/mecha.dm b/code/game/mecha/mecha.dm index 9207897e7f44..b7e5eeeeeaa1 100644 --- a/code/game/mecha/mecha.dm +++ b/code/game/mecha/mecha.dm @@ -114,7 +114,7 @@ //Action vars var/thrusters_active = FALSE var/defence_mode = FALSE - var/defence_mode_deflect_chance = 35 + var/defence_mode_deflect_chance = 15 var/leg_overload_mode = FALSE var/leg_overload_coeff = 100 var/zoom_mode = FALSE diff --git a/code/game/mecha/mecha_actions.dm b/code/game/mecha/mecha_actions.dm index 34f6dacda6fb..7b02750b506f 100644 --- a/code/game/mecha/mecha_actions.dm +++ b/code/game/mecha/mecha_actions.dm @@ -184,10 +184,10 @@ chassis.defence_mode = !chassis.defence_mode button_icon_state = "mech_defense_mode_[chassis.defence_mode ? "on" : "off"]" if(chassis.defence_mode) - chassis.deflect_chance = chassis.defence_mode_deflect_chance + chassis.deflect_chance += chassis.defence_mode_deflect_chance chassis.occupant_message(span_notice("You enable [chassis] defence mode.")) else - chassis.deflect_chance = initial(chassis.deflect_chance) + chassis.deflect_chance -= chassis.defence_mode_deflect_chance chassis.occupant_message(span_danger("You disable [chassis] defence mode.")) chassis.log_message("Toggled defence mode.", LOG_MECHA) UpdateButtonIcon() From 3c7cefc0b415675688f2f788b0634e4d67a4d951 Mon Sep 17 00:00:00 2001 From: Mek Date: Mon, 14 Nov 2022 18:28:30 -0500 Subject: [PATCH 28/33] More feedback + wall break fix --- .../mecha/equipment/weapons/melee_weapons.dm | 28 +++++++++++++------ 1 file changed, 20 insertions(+), 8 deletions(-) diff --git a/code/game/mecha/equipment/weapons/melee_weapons.dm b/code/game/mecha/equipment/weapons/melee_weapons.dm index 7a55a2750833..bdbb579455b1 100644 --- a/code/game/mecha/equipment/weapons/melee_weapons.dm +++ b/code/game/mecha/equipment/weapons/melee_weapons.dm @@ -124,7 +124,6 @@ var/obj/item/bodypart/body_part = pick(C.bodyparts) //Cleave attack isn't very precise var/armor_block = C.run_armor_check(body_part, MELEE, armour_penetration = base_armor_piercing) C.apply_damage(max(chassis.force + weapon_damage, minimum_damage), dam_type, body_part, armor_block, sharpness = attack_sharpness) - else //Regular mobs just take damage L.apply_damage(max(chassis.force + weapon_damage, minimum_damage), dam_type) if(ismegafauna(L) || istype(L, /mob/living/simple_animal/hostile/asteroid)) //If we're hitting fauna, because heck those guys @@ -133,6 +132,7 @@ L.visible_message(span_danger("[chassis.name] strikes [L] with a wide swing of its [src]!"), \ span_userdanger("[chassis.name] strikes you with [src]!")) chassis.log_message("Hit [L] with [src.name] (cleave attack).", LOG_MECHA) + L.playsound(L, 'sound/weapons/bladeslice.ogg', 50) else if(isstructure(A) || ismachinery(A) || istype(A, /obj/mecha)) //if it's something we can otherwise still hit var/obj/O = A @@ -140,6 +140,12 @@ continue var/object_damage = max(chassis.force + weapon_damage, minimum_damage) * structure_damage_mult O.take_damage(object_damage, dam_type, "melee", 0) + if(istype(O, /obj/structure/window)) + playsound(O,'sound/effects/Glasshit.ogg', 50) //glass bonk noise + else + if(istype(A, /obj/mecha)) + O.visible_message(span_danger("[chassis.name] strikes [O] with a wide swing of its [src]!")) //Don't really need to make a message for EVERY object, just important ones + playsound(O,'sound/weapons/smash.ogg', 50) //metallic bonk noise var/turf/cleave_effect_loc = get_step(get_turf(src), SOUTHWEST) new cleave_effect(cleave_effect_loc, chassis.dir) @@ -153,7 +159,6 @@ var/obj/item/bodypart/body_part = chassis.occupant.zone_selected var/armor_block = C.run_armor_check(body_part, MELEE, armour_penetration = base_armor_piercing * 2) //and get more AP C.apply_damage(max(chassis.force + precise_weapon_damage, minimum_damage), dam_type, body_part, armor_block, sharpness = attack_sharpness) - else L.apply_damage(max(chassis.force + precise_weapon_damage, minimum_damage), dam_type) if(ismegafauna(L) || istype(L, /mob/living/simple_animal/hostile/asteroid)) //Stab them harder @@ -186,8 +191,8 @@ attack_speed_modifier = 1.5 //Kinda chunky light_color = LIGHT_COLOR_RED -/obj/item/mecha_parts/mecha_equipment/melee_weapon/sword/energy_axe/cleave_attack() - playsound(chassis, attack_sound, 150, 1) +/obj/item/mecha_parts/mecha_equipment/melee_weapon/sword/energy_axe/cleave_attack() //Mostly copy-pasted sword cleave code with minor tweaks. + playsound(chassis, attack_sound, 150, 1) //Not hard to change some of this to be based on vars if you REALLY wanted to var/turf/M = get_turf(src) for(var/i = 0 to 2) var/it_turn = 45*(1-i) @@ -201,7 +206,6 @@ var/obj/item/bodypart/body_part = pick(C.bodyparts) //Cleave attack isn't very precise var/armor_block = C.run_armor_check(body_part, MELEE, armour_penetration = base_armor_piercing) C.apply_damage(max(chassis.force + weapon_damage, minimum_damage), dam_type, body_part, armor_block, sharpness = attack_sharpness) - else //Regular mobs just take damage L.apply_damage(max(chassis.force + weapon_damage, minimum_damage), dam_type) if(ismegafauna(L) || istype(L, /mob/living/simple_animal/hostile/asteroid)) //If we're hitting fauna, because heck those guys @@ -210,6 +214,7 @@ L.visible_message(span_danger("[chassis.name] strikes [L] with a wide swing of its [src]!"), \ span_userdanger("[chassis.name] strikes you with [src]!")) chassis.log_message("Hit [L] with [src.name] (cleave attack).", LOG_MECHA) + L.playsound(L, 'sound/weapons/blade1.ogg', 50) else if(isstructure(A) || ismachinery(A) || istype(A, /obj/mecha)) //if it's something we can otherwise still hit var/obj/O = A @@ -217,10 +222,17 @@ continue var/object_damage = max(chassis.force + weapon_damage, minimum_damage) * structure_damage_mult O.take_damage(object_damage, dam_type, "melee", 0) + if(istype(O, /obj/structure/window)) + playsound(O,'sound/effects/Glasshit.ogg', 50) //glass bonk noise + else + if(istype(A, /obj/mecha)) + O.visible_message(span_danger("[chassis.name] strikes [O] with a wide swing of its [src]!")) + playsound(O,'sound/weapons/smash.ogg', 50) //metallic bonk noise + + if(istype(T, /turf/closed/wall)) //IT BREAKS WALLS TOO + var/turf/closed/wall/W = T + W.dismantle_wall() - else if(istype(A, /turf/closed/wall)) //IT BREAKS WALLS TOO - var/turf/closed/wall/W = A - W.dismantle_wall() var/turf/cleave_effect_loc = get_step(get_turf(src), SOUTHWEST) //Big sprite needs to be centered properly new cleave_effect(cleave_effect_loc, chassis.dir) From 74267a2eb032a7659755f4b60c1575d7c8d14bde Mon Sep 17 00:00:00 2001 From: Mek Date: Mon, 14 Nov 2022 23:15:10 -0500 Subject: [PATCH 29/33] bump fix for centcomm --- code/game/mecha/mecha.dm | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/code/game/mecha/mecha.dm b/code/game/mecha/mecha.dm index b7e5eeeeeaa1..b901ca17f3f0 100644 --- a/code/game/mecha/mecha.dm +++ b/code/game/mecha/mecha.dm @@ -656,13 +656,14 @@ /obj/mecha/Bump(var/atom/obstacle) var/turf/newloc = get_step(src,dir) var/area/newarea = newloc.loc - if(newloc.flags_1 & NOJAUNT_1) - to_chat(occupant, span_warning("Some strange aura is blocking the way.")) - return - if(newarea.noteleport || SSmapping.level_trait(newloc.z, ZTRAIT_NOPHASE)) + if(phasing && ((newloc.flags_1 & NOJAUNT_1) || newarea.noteleport || SSmapping.level_trait(newloc.z, ZTRAIT_NOPHASE))) to_chat(occupant, span_warning("Some strange aura is blocking the way.")) - return + return //If we're trying to phase and it's NOT ALLOWED, don't bump + + if(istype(newloc, /turf/closed/indestructible)) + return //If the turf is indestructible don't bother trying + if(phasing && get_charge() >= phasing_energy_drain && !throwing) spawn() if(can_move) From adea6a4802f1b575a3c5d195557d0d613a4cd38f Mon Sep 17 00:00:00 2001 From: Mek Date: Tue, 15 Nov 2022 02:13:28 -0500 Subject: [PATCH 30/33] play sound oops --- code/game/mecha/equipment/weapons/melee_weapons.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/game/mecha/equipment/weapons/melee_weapons.dm b/code/game/mecha/equipment/weapons/melee_weapons.dm index bdbb579455b1..56a2ef551e14 100644 --- a/code/game/mecha/equipment/weapons/melee_weapons.dm +++ b/code/game/mecha/equipment/weapons/melee_weapons.dm @@ -132,7 +132,7 @@ L.visible_message(span_danger("[chassis.name] strikes [L] with a wide swing of its [src]!"), \ span_userdanger("[chassis.name] strikes you with [src]!")) chassis.log_message("Hit [L] with [src.name] (cleave attack).", LOG_MECHA) - L.playsound(L, 'sound/weapons/bladeslice.ogg', 50) + playsound(L, 'sound/weapons/bladeslice.ogg', 50) else if(isstructure(A) || ismachinery(A) || istype(A, /obj/mecha)) //if it's something we can otherwise still hit var/obj/O = A @@ -214,7 +214,7 @@ L.visible_message(span_danger("[chassis.name] strikes [L] with a wide swing of its [src]!"), \ span_userdanger("[chassis.name] strikes you with [src]!")) chassis.log_message("Hit [L] with [src.name] (cleave attack).", LOG_MECHA) - L.playsound(L, 'sound/weapons/blade1.ogg', 50) + playsound(L, 'sound/weapons/blade1.ogg', 50) else if(isstructure(A) || ismachinery(A) || istype(A, /obj/mecha)) //if it's something we can otherwise still hit var/obj/O = A From edce7c4b4387f0e9c73d2e7a255f0b9f593397cc Mon Sep 17 00:00:00 2001 From: Mek Date: Tue, 15 Nov 2022 13:39:21 -0500 Subject: [PATCH 31/33] Sound amp + axe buff + wording --- .../mecha/equipment/weapons/melee_weapons.dm | 22 +++++++++--------- sound/weapons/mechasword.ogg | Bin 19105 -> 20674 bytes 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/code/game/mecha/equipment/weapons/melee_weapons.dm b/code/game/mecha/equipment/weapons/melee_weapons.dm index 56a2ef551e14..de98f6d5c864 100644 --- a/code/game/mecha/equipment/weapons/melee_weapons.dm +++ b/code/game/mecha/equipment/weapons/melee_weapons.dm @@ -110,7 +110,7 @@ minimum_damage = 20 /obj/item/mecha_parts/mecha_equipment/melee_weapon/sword/cleave_attack() //use this for basic cleaving attacks, tweak as needed - playsound(chassis, attack_sound, 150, 1) //Slight windup, lines up with sound file + playsound(chassis, attack_sound, 50, 1) var/turf/M = get_turf(chassis) for(var/i = 0 to 2) var/it_turn = 45*(1-i) @@ -129,7 +129,7 @@ if(ismegafauna(L) || istype(L, /mob/living/simple_animal/hostile/asteroid)) //If we're hitting fauna, because heck those guys L.apply_damage(fauna_damage_bonus, dam_type) - L.visible_message(span_danger("[chassis.name] strikes [L] with a wide swing of its [src]!"), \ + L.visible_message(span_danger("[chassis.name] strikes [L] with a wide swing of [src]!"), \ span_userdanger("[chassis.name] strikes you with [src]!")) chassis.log_message("Hit [L] with [src.name] (cleave attack).", LOG_MECHA) playsound(L, 'sound/weapons/bladeslice.ogg', 50) @@ -144,7 +144,7 @@ playsound(O,'sound/effects/Glasshit.ogg', 50) //glass bonk noise else if(istype(A, /obj/mecha)) - O.visible_message(span_danger("[chassis.name] strikes [O] with a wide swing of its [src]!")) //Don't really need to make a message for EVERY object, just important ones + O.visible_message(span_danger("[chassis.name] strikes [O] with a wide swing of [src]!")) //Don't really need to make a message for EVERY object, just important ones playsound(O,'sound/weapons/smash.ogg', 50) //metallic bonk noise var/turf/cleave_effect_loc = get_step(get_turf(src), SOUTHWEST) @@ -164,7 +164,7 @@ if(ismegafauna(L) || istype(L, /mob/living/simple_animal/hostile/asteroid)) //Stab them harder L.apply_damage(fauna_damage_bonus, dam_type) - L.visible_message(span_danger("[chassis.name] strikes [L] with its [src]!"), \ + L.visible_message(span_danger("[chassis.name] strikes [L] with [src]!"), \ span_userdanger("[chassis.name] strikes you with [src]!")) chassis.log_message("Hit [L] with [src.name] (precise attack).", LOG_MECHA) @@ -175,7 +175,7 @@ else return chassis.do_attack_animation(target, ATTACK_EFFECT_SLASH) - playsound(chassis, attack_sound, 150, 1) + playsound(chassis, attack_sound, 50, 1) /obj/item/mecha_parts/mecha_equipment/melee_weapon/sword/energy_axe name = "\improper SH-NT \"Killerhurtz\" energy axe" @@ -183,16 +183,16 @@ icon_state = "mecha_energy_axe" precise_attacks = FALSE //This is not a weapon of precision, it is a weapon of destruction energy_drain = 40 - weapon_damage = 20 + weapon_damage = 25 fauna_damage_bonus = 30 //If you're fighting fauna with this thing, why? I mean it works, I guess. base_armor_piercing = 40 - structure_damage_mult = 4 //Think obi-wan cutting through a bulkhead with his lightsaber but he's a giant mech and it's a terrifying axe - minimum_damage = 30 + structure_damage_mult = 4 //Think obi-wan cutting through a bulkhead with his lightsaber but he's a giant mech with a huge terrifying axe + minimum_damage = 35 attack_speed_modifier = 1.5 //Kinda chunky light_color = LIGHT_COLOR_RED /obj/item/mecha_parts/mecha_equipment/melee_weapon/sword/energy_axe/cleave_attack() //Mostly copy-pasted sword cleave code with minor tweaks. - playsound(chassis, attack_sound, 150, 1) //Not hard to change some of this to be based on vars if you REALLY wanted to + playsound(chassis, attack_sound, 50, 1) //Not hard to change some of this to be based on vars if you REALLY wanted to var/turf/M = get_turf(src) for(var/i = 0 to 2) var/it_turn = 45*(1-i) @@ -211,7 +211,7 @@ if(ismegafauna(L) || istype(L, /mob/living/simple_animal/hostile/asteroid)) //If we're hitting fauna, because heck those guys L.apply_damage(fauna_damage_bonus, dam_type) - L.visible_message(span_danger("[chassis.name] strikes [L] with a wide swing of its [src]!"), \ + L.visible_message(span_danger("[chassis.name] strikes [L] with a wide swing of [src]!"), \ span_userdanger("[chassis.name] strikes you with [src]!")) chassis.log_message("Hit [L] with [src.name] (cleave attack).", LOG_MECHA) playsound(L, 'sound/weapons/blade1.ogg', 50) @@ -226,7 +226,7 @@ playsound(O,'sound/effects/Glasshit.ogg', 50) //glass bonk noise else if(istype(A, /obj/mecha)) - O.visible_message(span_danger("[chassis.name] strikes [O] with a wide swing of its [src]!")) + O.visible_message(span_danger("[chassis.name] strikes [O] with a wide swing of [src]!")) playsound(O,'sound/weapons/smash.ogg', 50) //metallic bonk noise if(istype(T, /turf/closed/wall)) //IT BREAKS WALLS TOO diff --git a/sound/weapons/mechasword.ogg b/sound/weapons/mechasword.ogg index c552993bfcf27f287797164dea1ef81c77d77695..3acc2389bca8994ec18de8c456717706be8d234e 100644 GIT binary patch delta 16347 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 delta 14748 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 Date: Tue, 15 Nov 2022 15:03:40 -0500 Subject: [PATCH 32/33] more damage --- code/game/mecha/equipment/weapons/melee_weapons.dm | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/code/game/mecha/equipment/weapons/melee_weapons.dm b/code/game/mecha/equipment/weapons/melee_weapons.dm index de98f6d5c864..b34b174cea5c 100644 --- a/code/game/mecha/equipment/weapons/melee_weapons.dm +++ b/code/game/mecha/equipment/weapons/melee_weapons.dm @@ -101,13 +101,13 @@ name = "\improper GD6 \"Jaeger\" shortsword" desc = "An extendable arm-mounted blade with a nasty edge. It is small and fast enough to deflect some incoming attacks." energy_drain = 20 - weapon_damage = 10 - precise_weapon_damage = 15 + weapon_damage = 15 + precise_weapon_damage = 20 fauna_damage_bonus = 30 //because why not deflect_bonus = 15 base_armor_piercing = 15 - structure_damage_mult = 2 //Sword is not as smashy - minimum_damage = 20 + structure_damage_mult = 2.5 //Sword is not as smashy + minimum_damage = 25 /obj/item/mecha_parts/mecha_equipment/melee_weapon/sword/cleave_attack() //use this for basic cleaving attacks, tweak as needed playsound(chassis, attack_sound, 50, 1) @@ -183,11 +183,11 @@ icon_state = "mecha_energy_axe" precise_attacks = FALSE //This is not a weapon of precision, it is a weapon of destruction energy_drain = 40 - weapon_damage = 25 + weapon_damage = 30 fauna_damage_bonus = 30 //If you're fighting fauna with this thing, why? I mean it works, I guess. base_armor_piercing = 40 structure_damage_mult = 4 //Think obi-wan cutting through a bulkhead with his lightsaber but he's a giant mech with a huge terrifying axe - minimum_damage = 35 + minimum_damage = 40 attack_speed_modifier = 1.5 //Kinda chunky light_color = LIGHT_COLOR_RED @@ -252,7 +252,7 @@ precise_attacks = FALSE cleave = FALSE range = null //This should just make the mech punch stuff, which is what we want! - weapon_damage = 15 + weapon_damage = 20 /obj/item/mecha_parts/mecha_equipment/melee_weapon/rocket_fist/on_select() chassis.force += weapon_damage //PUNCH HARDER From 171d49c876d714a3a3ee330b5f886d98eb329ddd Mon Sep 17 00:00:00 2001 From: Mek Date: Thu, 17 Nov 2022 22:05:04 -0500 Subject: [PATCH 33/33] Pacifism fix + comments --- code/game/mecha/equipment/weapons/melee_weapons.dm | 3 ++- code/game/mecha/mecha.dm | 5 +++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/code/game/mecha/equipment/weapons/melee_weapons.dm b/code/game/mecha/equipment/weapons/melee_weapons.dm index b34b174cea5c..b6096d1e55d9 100644 --- a/code/game/mecha/equipment/weapons/melee_weapons.dm +++ b/code/game/mecha/equipment/weapons/melee_weapons.dm @@ -95,7 +95,8 @@ precise_attacks = TRUE attack_sharpness = SHARP_EDGED attack_sound = 'sound/weapons/mechasword.ogg' //Recorded from Respawn/EA's Titanfall 2 (Ronin broadsword swing). Apparently they don't care so we're probably good - var/minimum_damage = 0 //Baby mechs with a scret combat module get a little boost + harmful = TRUE //DO NOT give to children. Or do, I'm not the police. + var/minimum_damage = 0 //Baby mechs with a secret combat module get a little boost /obj/item/mecha_parts/mecha_equipment/melee_weapon/sword/shortsword //Our bread-and-butter mech shortsword for both slicing and stabbing baddies name = "\improper GD6 \"Jaeger\" shortsword" diff --git a/code/game/mecha/mecha.dm b/code/game/mecha/mecha.dm index b901ca17f3f0..60abdb172242 100644 --- a/code/game/mecha/mecha.dm +++ b/code/game/mecha/mecha.dm @@ -519,6 +519,11 @@ if(isliving(target) && selected.harmful && HAS_TRAIT(L, TRAIT_PACIFISM)) to_chat(user, span_warning("You don't want to harm other living beings!")) return + if(istype(selected, /obj/item/mecha_parts/mecha_equipment/melee_weapon)) //Need to make a special check for melee weapons with cleave attacks + var/obj/item/mecha_parts/mecha_equipment/melee_weapon/W = selected + if(HAS_TRAIT(L, TRAIT_PACIFISM) && W.cleave) + to_chat(user, span_warning("You don't want to harm other living beings!")) + return if(selected.action(target,params)) selected.start_cooldown() else