From 5f835bfc268ba85cdb2fba50d165a092952531ba Mon Sep 17 00:00:00 2001 From: phil235 Date: Mon, 10 Oct 2016 00:14:59 +0200 Subject: [PATCH] Obj damaging system, acid damage, and fire damage refactor (WIP) (#20793) Please refer to #20867 and #20870 for a easier view of the changes. Those two PRs show all meaningful changes (hopefully) and doesn't show the files changed with just 3 lines changed. This PR does three things: It makes all children of /obj/ use the same damage system. Previously to make your new machine/structure be destroyable you needed to give it a var/health, and its own version of many damage related proc such as bullet_act(), take_damage(), attacked_by(), attack_animal(), attack_hulk(), ex_act(), etc... But now, all /obj/ use the same version of those procs at the /obj/ level in code/game/obj_defense.dm. All these obj share the same necessary vars: obj_integrity (health), max_integrity, integrity_failure (optional, below that health level failure happens), and the armor list var which was previously only for items, as well as the resistance_flags bitfield. When you want your new object to be destroyable, you only have to give it a value for those vars and maybe override one proc if you want a special behavior but that's it. This reorganization removes a lot of copypasta (most bullet_act() version for each obj were nearly identical). Two new elements are added to the armor list var: fire and acid armor values. How much damage an obj take depends on the armor value for each damage category. But some objects are INDESTRUCTIBLE and simply never take any damage no matter the type. The armor categories are: -melee(punches, item attacks, xeno/animal/hulk attacks, blob attacks, thrown weapons) -bullet -laser -energy (used by projectiles like ionrifle, taser, and also by EMPs) -bio (unused for this, only here because clothes use them when worn) -rad (same) -bomb (self-explanatory) -fire (for fire damage, not for heat damage though) -acid For machines and structures, when their health reaches zero the object is not just deleted but gets somewhat forcedeconstructed (the proc used is shared with the actual deconstruction system) which can drops things. To not frustrates players most of these objects drop most of the elements necessary to rebuild them (think window dropping shards). Machines drop a machine frame and all components for example (but the frame can then be itself smashed to pieces). For clothes, when they are damaged, they get a "damaged" overlay, which can also be seen when worn, similar to the "bloody" overlay. It refactors acid. See #20537. Some objects are ACID_PROOF and take no damage from acid, while others take varying amounts of damage depending on their acid armor value. Some objects are even UNACIDABLE, no acid effect can even land on them. Acid on objects can be washed off using water. It changes some aspect of damage from fires. All /obj/ can now take fire damage and be flammable, instead of just items. And instead of having just FLAMMABLE objs that become ON_FIRE as soon as some fire touch them (paper), we now have objects that are non flammable but do take damage from fire and become ashes if their health reaches zero (only for items). The damage taken varies depending on the obj's fire armor value and total health. There's also still obj and items that are FIRE_PROOF (although some might still be melted by lava if they're not LAVA_PROOF). When a mob is on fire, its clothes now take fire damage and can turn to ashes. Similarly, when a mob takes melee damages, its clothes gets damaged a bit and can turn to shreds. You can repair clothes with cloth that is produceable by botany's biogenerator. It also does many minor things: Clicking a structure/machine with an item on help intent never results in an attack (so you don't destroy a structure while trying to figure out which tool to use). I moved a lot of objects away from /obj/effect, it should only be used for visual effects, decals and stuff, not for things you can hit and destroy. I tweaked a bit how clothes shredding from bombs work. I made a machine or structure un/anchorable with the wrench, I don't remember which object... Since I changed the meaning of the FIRE_PROOF bitflag to actually mean fire immune, I'm buffing the slime extract that you apply on items to make them fire proof. well now they're really 100% fire proof! animals with environment_smash = 1 no longer one-hit destroy tables and stuff, we give them a decent obj_damage value so they can destroy most obj relatively fast depending on the animal. Probably a million things I forgot. If you want to know how the damage system works all you need is the three obj vars "obj_integrity", "max_integrity", "integrity_failure", as well as the armor list var and the resistance_flags bitfield, and read the file obj_defense.dm --- .../lavaland_surface_ash_walker1.dmm | 2 +- .../LavaRuins/lavaland_surface_envy.dmm | 14 +- .../LavaRuins/lavaland_surface_pizzaparty.dmm | 2 +- .../LavaRuins/lavaland_surface_xeno_nest.dmm | 10 +- _maps/RandomRuins/SpaceRuins/crashedship.dmm | 2 +- .../RandomRuins/SpaceRuins/mechtransport.dmm | 2 +- .../RandomRuins/SpaceRuins/oldteleporter.dmm | 4 +- _maps/RandomZLevels/Academy.dmm | 10 +- _maps/RandomZLevels/caves.dmm | 6 +- _maps/RandomZLevels/centcomAway.dmm | 4 +- _maps/RandomZLevels/moonoutpost19.dmm | 38 +-- _maps/RandomZLevels/research.dmm | 12 +- _maps/RandomZLevels/undergroundoutpost45.dmm | 2 +- _maps/map_files/BirdStation/BirdStation.dmm | 1 - .../map_files/DreamStation/dreamstation04.dmm | 14 +- .../EfficiencyStation/EfficiencyStation.dmm | 34 +- _maps/map_files/MetaStation/MetaStation.dmm | 104 +++--- _maps/map_files/TgStation/tgstation.2.1.3.dmm | 50 ++- _maps/map_files/generic/z2.dmm | 6 +- _maps/shuttles/emergency_narnar.dmm | 3 - _maps/shuttles/ferry_lighthouse.dmm | 2 +- _maps/shuttles/whiteship_meta.dmm | 6 +- code/__DEFINES/misc.dm | 13 +- code/__HELPERS/type2type.dm | 17 +- code/__HELPERS/unsorted.dm | 6 +- code/_onclick/hud/screen_objects.dm | 5 +- code/_onclick/item_attack.dm | 3 + code/controllers/subsystem/acid.dm | 42 +++ code/controllers/subsystem/fire_burning.dm | 42 +++ .../subsystem/processing/objects.dm | 11 +- code/datums/martial/krav_maga.dm | 2 +- code/datums/wires/airlock.dm | 15 +- code/game/atoms.dm | 19 +- code/game/data_huds.dm | 8 +- code/game/gamemodes/blob/blob_report.dm | 15 +- code/game/gamemodes/blob/blobs/blob_mobs.dm | 15 +- code/game/gamemodes/blob/blobs/core.dm | 22 +- code/game/gamemodes/blob/blobs/factory.dm | 4 +- code/game/gamemodes/blob/blobs/node.dm | 9 +- code/game/gamemodes/blob/blobs/resource.dm | 4 +- code/game/gamemodes/blob/blobs/shield.dm | 11 +- code/game/gamemodes/blob/overmind.dm | 6 +- code/game/gamemodes/blob/powers.dm | 7 +- code/game/gamemodes/blob/theblob.dm | 118 +++---- .../gamemodes/changeling/powers/mutations.dm | 2 +- .../gamemodes/changeling/powers/shriek.dm | 4 +- code/game/gamemodes/clock_cult/clock_items.dm | 6 +- .../gamemodes/clock_cult/clock_machines.dm | 16 +- code/game/gamemodes/clock_cult/clock_mobs.dm | 2 +- .../clock_cult/clock_proselytizer.dm | 16 +- .../game/gamemodes/clock_cult/clock_ratvar.dm | 38 +-- .../gamemodes/clock_cult/clock_scripture.dm | 2 +- .../gamemodes/clock_cult/clock_structures.dm | 54 +-- code/game/gamemodes/cult/cult_structures.dm | 33 +- code/game/gamemodes/cult/ritual.dm | 10 +- code/game/gamemodes/cult/runes.dm | 13 +- code/game/gamemodes/devil/imp/imp.dm | 1 + code/game/gamemodes/gang/dominator.dm | 100 ++---- .../gamemodes/malfunction/Malf_Modules.dm | 2 +- .../miniantags/abduction/abduction_gear.dm | 3 +- .../gamemodes/miniantags/abduction/gland.dm | 10 +- .../miniantags/abduction/machinery/camera.dm | 1 + .../miniantags/abduction/machinery/console.dm | 1 + .../gamemodes/miniantags/bot_swarm/swarmer.dm | 57 +--- code/game/gamemodes/miniantags/morph/morph.dm | 2 +- .../miniantags/slaughter/slaughter.dm | 1 + code/game/gamemodes/nuclear/nuclearbomb.dm | 9 +- code/game/gamemodes/wizard/artefact.dm | 7 +- code/game/machinery/PDApainter.dm | 24 +- code/game/machinery/Sleeper.dm | 10 +- code/game/machinery/ai_slipper.dm | 4 + code/game/machinery/airlock_control.dm | 1 + code/game/machinery/announcement_system.dm | 16 +- code/game/machinery/buttons.dm | 3 +- code/game/machinery/camera/camera.dm | 75 ++-- code/game/machinery/camera/camera_assembly.dm | 39 +-- code/game/machinery/cell_charger.dm | 2 +- code/game/machinery/cloning.dm | 10 +- .../game/machinery/computer/buildandrepair.dm | 25 +- code/game/machinery/computer/computer.dm | 131 +++---- .../machinery/computer/telecrystalconsoles.dm | 1 + code/game/machinery/constructable_frame.dm | 41 ++- code/game/machinery/deployable.dm | 80 +---- code/game/machinery/doors/airlock.dm | 74 ++-- code/game/machinery/doors/airlock_types.dm | 20 ++ code/game/machinery/doors/door.dm | 77 ++--- code/game/machinery/doors/firedoor.dm | 27 +- code/game/machinery/doors/poddoor.dm | 32 +- code/game/machinery/doors/windowdoor.dm | 69 +--- code/game/machinery/droneDispenser.dm | 51 ++- .../embedded_controller/access_controller.dm | 1 + code/game/machinery/firealarm.dm | 64 ++-- code/game/machinery/flasher.dm | 61 +++- code/game/machinery/hologram.dm | 3 + code/game/machinery/igniter.dm | 12 +- code/game/machinery/iv_drip.dm | 4 + code/game/machinery/lightswitch.dm | 8 +- code/game/machinery/limbgrower.dm | 1 + code/game/machinery/machinery.dm | 103 +++--- code/game/machinery/navbeacon.dm | 3 + code/game/machinery/newscaster.dm | 69 ++-- .../machinery/porta_turret/portable_turret.dm | 86 ++--- .../porta_turret/portable_turret_cover.dm | 18 + code/game/machinery/recharger.dm | 23 +- code/game/machinery/rechargestation.dm | 13 +- code/game/machinery/requests_console.dm | 3 + code/game/machinery/shieldgen.dm | 322 ++++++++---------- code/game/machinery/spaceheater.dm | 3 + code/game/machinery/suit_storage_unit.dm | 37 +- code/game/machinery/syndicatebomb.dm | 2 +- code/game/machinery/vending.dm | 91 +++-- code/game/machinery/washing_machine.dm | 3 + code/game/mecha/combat/combat.dm | 6 +- code/game/mecha/combat/durand.dm | 6 +- code/game/mecha/combat/gygax.dm | 10 +- code/game/mecha/combat/honker.dm | 7 +- code/game/mecha/combat/marauder.dm | 10 +- code/game/mecha/combat/phazon.dm | 6 +- code/game/mecha/combat/reticence.dm | 6 +- .../game/mecha/equipment/tools/other_tools.dm | 4 +- code/game/mecha/mech_bay.dm | 2 +- code/game/mecha/mecha.dm | 21 +- code/game/mecha/mecha_control_console.dm | 2 +- code/game/mecha/mecha_defense.dm | 226 +++++------- code/game/mecha/mecha_topic.dm | 2 +- code/game/mecha/medical/odysseus.dm | 3 +- code/game/mecha/working/ripley.dm | 15 +- code/game/objects/effects/alien_acid.dm | 125 ++++--- code/game/objects/effects/contraband.dm | 2 +- .../objects/effects/decals/Cleanable/misc.dm | 25 +- code/game/objects/effects/decals/cleanable.dm | 4 +- code/game/objects/effects/decals/decal.dm | 7 +- .../effects/effect_system/effects_foam.dm | 84 +---- .../effects/effect_system/effects_smoke.dm | 2 + code/game/objects/effects/effects.dm | 36 +- code/game/objects/effects/glowshroom.dm | 38 +-- code/game/objects/effects/overlays.dm | 1 - code/game/objects/effects/spiders.dm | 51 +-- code/game/objects/items.dm | 92 ++--- code/game/objects/items/candle.dm | 3 +- code/game/objects/items/cardboard_cutouts.dm | 2 +- code/game/objects/items/devices/PDA/PDA.dm | 3 + .../game/objects/items/devices/instruments.dm | 5 +- .../objects/items/devices/taperecorder.dm | 7 +- code/game/objects/items/religion.dm | 8 +- code/game/objects/items/stacks/cash.dm | 2 +- code/game/objects/items/stacks/medical.dm | 5 +- .../game/objects/items/stacks/sheets/glass.dm | 8 + .../objects/items/stacks/sheets/mineral.dm | 7 +- .../items/stacks/sheets/sheet_types.dm | 10 +- .../objects/items/stacks/tiles/tile_types.dm | 10 +- code/game/objects/items/stacks/wrap.dm | 4 +- code/game/objects/items/toys.dm | 18 +- code/game/objects/items/trash.dm | 8 +- code/game/objects/items/weapons/RCD.dm | 2 + code/game/objects/items/weapons/RPD.dm | 2 + code/game/objects/items/weapons/RSF.dm | 1 + code/game/objects/items/weapons/cards_ids.dm | 2 + .../objects/items/weapons/cigs_lighters.dm | 5 +- code/game/objects/items/weapons/courtroom.dm | 4 +- code/game/objects/items/weapons/defib.dm | 1 + .../objects/items/weapons/extinguisher.dm | 1 + .../objects/items/weapons/flamethrower.dm | 1 + code/game/objects/items/weapons/gift.dm | 2 +- .../objects/items/weapons/grenades/grenade.dm | 13 +- .../items/weapons/grenades/smokebomb.dm | 3 +- code/game/objects/items/weapons/handcuffs.dm | 1 + .../objects/items/weapons/holosign_creator.dm | 159 +-------- code/game/objects/items/weapons/kitchen.dm | 3 + .../objects/items/weapons/melee/energy.dm | 4 + code/game/objects/items/weapons/mop.dm | 2 +- code/game/objects/items/weapons/paint.dm | 5 +- .../objects/items/weapons/pneumaticCannon.dm | 1 + code/game/objects/items/weapons/powerfist.dm | 2 + code/game/objects/items/weapons/scrolls.dm | 2 +- code/game/objects/items/weapons/shields.dm | 3 +- code/game/objects/items/weapons/signs.dm | 2 +- .../items/weapons/singularityhammer.dm | 2 + .../objects/items/weapons/storage/backpack.dm | 27 +- .../objects/items/weapons/storage/bags.dm | 8 +- .../objects/items/weapons/storage/book.dm | 2 +- .../objects/items/weapons/storage/boxes.dm | 4 +- .../items/weapons/storage/briefcase.dm | 10 +- .../objects/items/weapons/storage/fancy.dm | 2 +- .../objects/items/weapons/storage/storage.dm | 9 +- .../objects/items/weapons/storage/wallets.dm | 2 +- code/game/objects/items/weapons/stunbaton.dm | 2 + .../game/objects/items/weapons/tanks/tanks.dm | 10 + .../objects/items/weapons/tanks/watertank.dm | 4 + .../objects/items/weapons/teleportation.dm | 2 + code/game/objects/items/weapons/tools.dm | 7 +- code/game/objects/items/weapons/twohanded.dm | 22 +- .../objects/items/weapons/vending_items.dm | 2 +- code/game/objects/items/weapons/weaponry.dm | 18 +- code/game/objects/obj_defense.dm | 236 +++++++++++++ code/game/objects/objs.dm | 68 +--- code/game/objects/structures.dm | 37 +- code/game/objects/structures/ai_core.dm | 28 +- code/game/objects/structures/aliens.dm | 115 ++----- code/game/objects/structures/artstuff.dm | 7 +- code/game/objects/structures/barsigns.dm | 21 +- .../structures/beds_chairs/alien_nest.dm | 21 +- .../objects/structures/beds_chairs/bed.dm | 35 +- .../objects/structures/beds_chairs/chair.dm | 35 +- code/game/objects/structures/bedsheet_bin.dm | 20 +- .../structures/crates_lockers/closets.dm | 42 +-- .../crates_lockers/closets/cardboardbox.dm | 10 +- .../crates_lockers/closets/gimmick.dm | 5 +- .../crates_lockers/closets/job_closets.dm | 5 +- .../crates_lockers/closets/secure/bar.dm | 5 +- .../crates_lockers/closets/secure/personal.dm | 5 +- .../closets/secure/secure_closets.dm | 9 +- .../crates_lockers/closets/secure/security.dm | 5 +- .../crates_lockers/closets/statue.dm | 38 +-- .../crates_lockers/crates/secure.dm | 9 +- .../structures/destructible_structures.dm | 88 +---- code/game/objects/structures/displaycase.dm | 112 +++--- code/game/objects/structures/door_assembly.dm | 39 ++- code/game/objects/structures/extinguisher.dm | 101 +++--- code/game/objects/structures/false_walls.dm | 31 +- code/game/objects/structures/fireaxe.dm | 135 ++++---- code/game/objects/structures/flora.dm | 5 +- code/game/objects/structures/girders.dm | 67 +--- code/game/objects/structures/grille.dm | 171 +++------- code/game/objects/structures/holosign.dm | 101 ++++++ code/game/objects/structures/kitchen_spike.dm | 18 +- code/game/objects/structures/lattice.dm | 36 +- code/game/objects/structures/mineral_doors.dm | 71 ++-- code/game/objects/structures/mirror.dm | 75 ++-- code/game/objects/structures/morgue.dm | 19 +- code/game/objects/structures/noticeboard.dm | 8 +- code/game/objects/structures/signs.dm | 21 +- code/game/objects/structures/statues.dm | 95 ++---- code/game/objects/structures/table_frames.dm | 12 +- code/game/objects/structures/tables_racks.dm | 241 +++---------- .../game/objects/structures/tank_dispenser.dm | 14 + code/game/objects/structures/watercloset.dm | 24 +- code/game/objects/structures/window.dm | 158 +++------ code/game/shuttle_engines.dm | 1 + code/game/turfs/closed.dm | 3 + code/game/turfs/simulated/floor.dm | 4 + code/game/turfs/simulated/floor/plating.dm | 15 +- code/game/turfs/simulated/walls.dm | 7 +- code/game/turfs/space/space.dm | 6 +- code/game/turfs/turf.dm | 25 +- code/modules/admin/secrets.dm | 2 +- code/modules/assembly/mousetrap.dm | 2 +- .../atmospherics/environmental/LINDA_fire.dm | 10 +- .../atmospherics/machinery/airalarm.dm | 23 +- .../atmospherics/machinery/atmosmachinery.dm | 32 +- .../components/unary_devices/cryo.dm | 16 +- .../components/unary_devices/tank.dm | 4 +- .../components/unary_devices/thermomachine.dm | 3 + .../atmospherics/machinery/other/meter.dm | 4 + .../machinery/pipes/heat_exchange/he_pipes.dm | 2 +- .../atmospherics/machinery/pipes/pipes.dm | 7 +- .../machinery/portable/canister.dm | 113 +++--- .../portable/portable_atmospherics.dm | 14 +- code/modules/awaymissions/gateway.dm | 2 +- .../awaymissions/mission_code/Academy.dm | 31 +- .../awaymissions/mission_code/Cabin.dm | 2 +- .../awaymissions/mission_code/challenge.dm | 1 + code/modules/clothing/chameleon.dm | 28 +- code/modules/clothing/clothing.dm | 133 +++++++- code/modules/clothing/glasses/glasses.dm | 3 +- code/modules/clothing/gloves/color.dm | 11 +- code/modules/clothing/gloves/miscellaneous.dm | 10 +- code/modules/clothing/head/collectable.dm | 6 +- code/modules/clothing/head/hardhat.dm | 2 +- code/modules/clothing/head/helmet.dm | 20 +- code/modules/clothing/head/jobs.dm | 14 +- code/modules/clothing/head/misc.dm | 7 +- code/modules/clothing/head/misc_special.dm | 2 +- code/modules/clothing/head/soft_caps.dm | 2 +- code/modules/clothing/masks/breath.dm | 2 +- code/modules/clothing/masks/gasmask.dm | 19 +- code/modules/clothing/masks/miscellaneous.dm | 2 +- code/modules/clothing/shoes/miscellaneous.dm | 12 +- .../modules/clothing/spacesuits/chronosuit.dm | 6 +- code/modules/clothing/spacesuits/hardsuit.dm | 33 +- .../clothing/spacesuits/miscellaneous.dm | 6 +- code/modules/clothing/spacesuits/plasmamen.dm | 5 +- code/modules/clothing/suits/armor.dm | 24 +- code/modules/clothing/suits/bio.dm | 4 +- code/modules/clothing/suits/cloaks.dm | 4 +- code/modules/clothing/suits/jobs.dm | 2 +- code/modules/clothing/suits/miscellaneous.dm | 8 +- code/modules/clothing/suits/utility.dm | 12 +- code/modules/clothing/suits/wiz_robe.dm | 8 +- code/modules/clothing/under/color.dm | 2 +- .../clothing/under/jobs/engineering.dm | 12 +- code/modules/clothing/under/miscellaneous.dm | 6 +- code/modules/clothing/under/syndicate.dm | 2 +- code/modules/countdown/countdown.dm | 2 +- code/modules/events/holiday/vday.dm | 2 +- code/modules/events/spacevine.dm | 73 ++-- code/modules/events/vent_clog.dm | 2 +- code/modules/events/wizard/rpgloot.dm | 1 + code/modules/flufftext/Hallucination.dm | 6 +- code/modules/food_and_drinks/drinks/drinks.dm | 3 +- .../drinks/drinks/drinkingglass.dm | 17 +- code/modules/food_and_drinks/food.dm | 2 +- .../food_and_drinks/food/snacks/meat.dm | 6 - .../kitchen_machinery/food_cart.dm | 11 + .../kitchen_machinery/icecream_vat.dm | 8 + .../kitchen_machinery/smartfridge.dm | 82 +++-- code/modules/games/cards.dm | 2 +- code/modules/holodeck/area_copy.dm | 2 +- code/modules/hydroponics/grown.dm | 2 +- code/modules/hydroponics/grown/kudzu.dm | 2 +- code/modules/hydroponics/grown/misc.dm | 12 +- code/modules/hydroponics/grown/mushrooms.dm | 3 +- code/modules/hydroponics/grown/nettle.dm | 2 +- code/modules/hydroponics/grown/towercap.dm | 6 +- code/modules/hydroponics/growninedible.dm | 2 +- code/modules/hydroponics/hydroponics.dm | 26 +- code/modules/hydroponics/plant_genes.dm | 4 +- code/modules/hydroponics/seeds.dm | 2 +- code/modules/library/lib_items.dm | 24 +- code/modules/mining/abandoned_crates.dm | 6 +- code/modules/mining/lavaland/ash_flora.dm | 10 +- .../mining/lavaland/necropolis_chests.dm | 1 - code/modules/mining/mine_items.dm | 7 +- code/modules/mining/mine_turfs.dm | 4 + code/modules/mining/minebot.dm | 1 + code/modules/mining/money_bag.dm | 5 +- code/modules/mob/inventory.dm | 1 + code/modules/mob/living/bloodcrawl.dm | 2 +- code/modules/mob/living/brain/MMI.dm | 45 ++- .../mob/living/carbon/alien/alien_defense.dm | 6 +- .../carbon/alien/humanoid/alien_powers.dm | 36 +- .../carbon/alien/humanoid/humanoid_defense.dm | 2 +- .../carbon/alien/larva/larva_defense.dm | 2 +- code/modules/mob/living/carbon/carbon.dm | 11 +- .../mob/living/carbon/carbon_defense.dm | 12 + .../modules/mob/living/carbon/damage_procs.dm | 8 +- .../mob/living/carbon/human/examine.dm | 8 +- code/modules/mob/living/carbon/human/human.dm | 19 +- .../mob/living/carbon/human/human_defense.dm | 282 +++++++-------- .../mob/living/carbon/human/inventory.dm | 94 ----- code/modules/mob/living/carbon/human/life.dm | 70 +++- .../mob/living/carbon/human/species.dm | 5 +- code/modules/mob/living/carbon/monkey/life.dm | 28 +- .../living/carbon/monkey/monkey_defense.dm | 51 ++- code/modules/mob/living/living_defense.dm | 11 +- code/modules/mob/living/living_defines.dm | 2 +- .../mob/living/silicon/robot/robot_defense.dm | 9 +- .../mob/living/silicon/silicon_defense.dm | 2 +- .../living/simple_animal/animal_defense.dm | 9 + .../mob/living/simple_animal/bot/cleanbot.dm | 2 +- .../mob/living/simple_animal/bot/ed209bot.dm | 2 +- .../mob/living/simple_animal/constructs.dm | 2 + .../simple_animal/friendly/farm_animals.dm | 8 +- .../living/simple_animal/friendly/lizard.dm | 1 + .../living/simple_animal/friendly/mouse.dm | 4 +- .../living/simple_animal/guardian/guardian.dm | 1 + .../simple_animal/guardian/types/assassin.dm | 2 + .../simple_animal/guardian/types/ranged.dm | 2 + .../simple_animal/guardian/types/standard.dm | 1 + .../mob/living/simple_animal/hostile/alien.dm | 2 + .../mob/living/simple_animal/hostile/bear.dm | 1 + .../mob/living/simple_animal/hostile/bees.dm | 1 + .../hostile/bosses/paperwizard.dm | 1 + .../mob/living/simple_animal/hostile/carp.dm | 2 + .../living/simple_animal/hostile/creature.dm | 1 + .../living/simple_animal/hostile/eyeballs.dm | 1 + .../living/simple_animal/hostile/faithless.dm | 1 + .../simple_animal/hostile/giant_spider.dm | 1 + .../living/simple_animal/hostile/headcrab.dm | 1 + .../living/simple_animal/hostile/hostile.dm | 1 + .../living/simple_animal/hostile/illusion.dm | 1 + .../simple_animal/hostile/mecha_pilot.dm | 6 +- .../hostile/megafauna/colossus.dm | 3 +- .../simple_animal/hostile/megafauna/dragon.dm | 1 + .../hostile/megafauna/hierophant.dm | 2 +- .../hostile/megafauna/megafauna.dm | 2 +- .../mob/living/simple_animal/hostile/mimic.dm | 1 + .../simple_animal/hostile/mining_mobs.dm | 18 +- .../living/simple_animal/hostile/mushroom.dm | 1 + .../living/simple_animal/hostile/pirate.dm | 1 + .../simple_animal/hostile/retaliate/bat.dm | 1 + .../simple_animal/hostile/retaliate/clown.dm | 1 + .../hostile/retaliate/spaceman.dm | 1 + .../living/simple_animal/hostile/skeleton.dm | 2 +- .../living/simple_animal/hostile/statue.dm | 3 +- .../living/simple_animal/hostile/stickman.dm | 1 + .../living/simple_animal/hostile/syndicate.dm | 3 + .../simple_animal/hostile/venus_human_trap.dm | 1 + .../mob/living/simple_animal/slime/slime.dm | 5 +- .../computers/item/computer.dm | 25 +- .../computers/item/computer_damage.dm | 62 ++-- .../computers/item/processor.dm | 4 +- .../computers/machinery/modular_computer.dm | 5 +- .../computers/machinery/modular_console.dm | 5 +- .../programs/antagonist/revelation.dm | 2 +- .../modular_computers/hardware/_hardware.dm | 10 +- .../suit/n_suit_verbs/energy_net_nets.dm | 72 +--- code/modules/ninja/suit/shoes.dm | 2 +- code/modules/ninja/suit/suit.dm | 4 +- code/modules/paperwork/clipboard.dm | 2 +- code/modules/paperwork/filingcabinet.dm | 29 +- code/modules/paperwork/folders.dm | 2 +- code/modules/paperwork/paper.dm | 9 +- code/modules/paperwork/paper_cutter.dm | 5 +- code/modules/paperwork/paperbin.dm | 12 +- code/modules/paperwork/paperplane.dm | 6 +- code/modules/paperwork/photocopier.dm | 32 +- code/modules/paperwork/photography.dm | 9 +- code/modules/power/antimatter/control.dm | 1 + code/modules/power/antimatter/shielding.dm | 8 +- code/modules/power/apc.dm | 67 ++-- code/modules/power/cable.dm | 35 +- code/modules/power/gravitygenerator.dm | 2 +- code/modules/power/lighting.dm | 184 +++++----- code/modules/power/rtg.dm | 2 +- code/modules/power/singularity/collector.dm | 13 +- .../power/singularity/containment_field.dm | 16 +- .../power/singularity/field_generator.dm | 6 +- .../particle_accelerator.dm | 14 +- code/modules/power/singularity/singularity.dm | 15 +- code/modules/power/solar.dm | 137 +++----- code/modules/power/supermatter/supermatter.dm | 10 +- code/modules/power/tracker.dm | 28 +- code/modules/power/turbine.dm | 2 + code/modules/projectiles/gun.dm | 5 - code/modules/projectiles/guns/energy.dm | 7 +- code/modules/projectiles/projectile.dm | 2 +- .../chemistry/machinery/chem_dispenser.dm | 1 + .../chemistry/machinery/chem_heater.dm | 1 + .../chemistry/machinery/chem_master.dm | 1 + .../reagents/chemistry/machinery/pandemic.dm | 1 + .../chemistry/machinery/reagentgrinder.dm | 1 + .../chemistry/reagents/blob_reagents.dm | 66 ++-- .../chemistry/reagents/other_reagents.dm | 8 +- .../chemistry/reagents/toxin_reagents.dm | 5 +- .../chemistry/recipes/slime_extracts.dm | 4 +- code/modules/reagents/reagent_containers.dm | 2 +- .../reagents/reagent_containers/bottle.dm | 2 +- .../reagents/reagent_containers/glass.dm | 6 +- code/modules/reagents/reagent_dispenser.dm | 64 ++-- .../recycling/disposal-construction.dm | 2 + code/modules/recycling/disposal-structures.dm | 157 +++------ code/modules/recycling/disposal-unit.dm | 32 +- code/modules/research/rdmachines.dm | 2 +- code/modules/research/server.dm | 18 +- .../research/xenobiology/xenobiology.dm | 14 +- .../ruins/objects_and_mobs/necropolis_gate.dm | 2 +- .../security_levels/keycard_authentication.dm | 1 + code/modules/shuttle/ferry.dm | 1 + code/modules/shuttle/shuttle.dm | 6 +- code/modules/shuttle/special.dm | 6 +- code/modules/shuttle/syndicate.dm | 1 + .../spells/spell_types/ethereal_jaunt.dm | 2 +- code/modules/surgery/bodyparts/bodyparts.dm | 7 +- .../surgery/bodyparts/dismemberment.dm | 2 +- code/modules/surgery/bodyparts/head.dm | 4 - code/modules/surgery/organs/augments_arms.dm | 13 +- code/modules/vehicles/pimpin_ride.dm | 5 + code/modules/vehicles/vehicle.dm | 28 ++ icons/effects/blood.dmi | Bin 115525 -> 112432 bytes icons/effects/effects.dmi | Bin 527742 -> 526879 bytes icons/effects/item_damage.dmi | Bin 0 -> 7373 bytes icons/obj/chemical.dmi | Bin 37478 -> 37081 bytes tgstation.dme | 4 + 464 files changed, 4730 insertions(+), 4970 deletions(-) create mode 100644 code/controllers/subsystem/acid.dm create mode 100644 code/controllers/subsystem/fire_burning.dm create mode 100644 code/game/objects/obj_defense.dm create mode 100644 code/game/objects/structures/holosign.dm create mode 100644 icons/effects/item_damage.dmi diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_ash_walker1.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_ash_walker1.dmm index e1f874254d4..dccf2a0dd23 100644 --- a/_maps/RandomRuins/LavaRuins/lavaland_surface_ash_walker1.dmm +++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_ash_walker1.dmm @@ -187,7 +187,7 @@ /area/ruin/unpowered) "z" = ( /obj/item/weapon/shovel, -/obj/effect/decal/cleanable/cobweb2, +/obj/effect/decal/cleanable/cobweb/cobweb2, /turf/open/floor/engine/cult{ baseturf = /turf/open/floor/plating/lava/smooth }, diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_envy.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_envy.dmm index faf5d439792..ce611c6df76 100644 --- a/_maps/RandomRuins/LavaRuins/lavaland_surface_envy.dmm +++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_envy.dmm @@ -18,7 +18,7 @@ desc = "This mirror has been shattered. It looks like the bad luck energies spilling from it are taking immediate effect on your surroundings!"; icon_state = "mirror_broke"; pixel_x = -28; - shattered = 1 + broken = 1 }, /obj/item/clothing/suit/hooded/bloated_human, /obj/effect/decal/cleanable/blood, @@ -31,7 +31,7 @@ desc = "Oh no, seven years of bad luck!"; icon_state = "mirror_broke"; pixel_x = 28; - shattered = 1 + broken = 1 }, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/lava/smooth; @@ -44,7 +44,7 @@ desc = "This mirror has been shattered. It looks like the bad luck energies spilling from it are taking immediate effect on your surroundings!"; icon_state = "mirror_broke"; pixel_x = -28; - shattered = 1 + broken = 1 }, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/lava/smooth @@ -71,7 +71,7 @@ /obj/structure/mirror{ icon_state = "mirror_broke"; pixel_y = 28; - shattered = 1 + broken = 1 }, /obj/item/weapon/kitchen/knife/envy, /turf/open/floor/plating{ @@ -83,7 +83,7 @@ desc = "Oh no, seven years of bad luck!"; icon_state = "mirror_broke"; pixel_x = 28; - shattered = 1 + broken = 1 }, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/lava/smooth @@ -94,7 +94,7 @@ desc = "This mirror has been shattered. It looks like the bad luck energies spilling from it are taking immediate effect on your surroundings!"; icon_state = "mirror_broke"; pixel_x = -28; - shattered = 1 + broken = 1 }, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/lava/smooth @@ -112,7 +112,7 @@ desc = "This mirror has been shattered. It looks like the bad luck energies spilling from it are taking immediate effect on your surroundings!"; icon_state = "mirror_broke"; pixel_x = -28; - shattered = 1 + broken = 1 }, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/lava/smooth; diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_pizzaparty.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_pizzaparty.dmm index 103d828b8fa..d531cf28f0a 100644 --- a/_maps/RandomRuins/LavaRuins/lavaland_surface_pizzaparty.dmm +++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_pizzaparty.dmm @@ -88,7 +88,7 @@ name = "pizza spawner" }, /obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/cobweb2, +/obj/effect/decal/cleanable/cobweb/cobweb2, /turf/open/floor/wood{ baseturf = /turf/open/floor/plating/asteroid/basalt/lava_land_surface; initial_gas_mix = "o2=14;n2=23;TEMP=300" diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_xeno_nest.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_xeno_nest.dmm index 04afc8e1fb7..54d740040f1 100644 --- a/_maps/RandomRuins/LavaRuins/lavaland_surface_xeno_nest.dmm +++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_xeno_nest.dmm @@ -53,7 +53,7 @@ }, /obj/structure/alien/weeds{ desc = "A large mottled egg."; - health = 100; + obj_integrity = 100; icon_state = "egg_hatched"; name = "egg" }, @@ -141,7 +141,7 @@ }, /obj/structure/alien/weeds{ desc = "A large mottled egg."; - health = 100; + obj_integrity = 100; icon_state = "egg_hatched"; name = "egg" }, @@ -336,7 +336,7 @@ /obj/structure/alien/weeds, /obj/structure/alien/weeds{ desc = "A large mottled egg."; - health = 100; + obj_integrity = 100; icon_state = "egg_hatched"; name = "egg" }, @@ -407,7 +407,7 @@ }, /obj/structure/alien/weeds{ desc = "A large mottled egg."; - health = 100; + obj_integrity = 100; icon_state = "egg_hatched"; name = "egg" }, @@ -426,7 +426,7 @@ /obj/structure/alien/weeds, /obj/structure/alien/weeds{ desc = "A large mottled egg."; - health = 100; + obj_integrity = 100; icon_state = "egg_hatched"; name = "egg" }, diff --git a/_maps/RandomRuins/SpaceRuins/crashedship.dmm b/_maps/RandomRuins/SpaceRuins/crashedship.dmm index cbcc6691acd..0ba85b500c0 100644 --- a/_maps/RandomRuins/SpaceRuins/crashedship.dmm +++ b/_maps/RandomRuins/SpaceRuins/crashedship.dmm @@ -116,7 +116,7 @@ "cl" = (/obj/structure/table,/obj/item/weapon/reagent_containers/food/drinks/beer,/turf/open/floor/plasteel/bar,/area/awaymission/BMPship/Midship) "cm" = (/obj/structure/table,/obj/item/weapon/kitchen/knife,/turf/open/floor/plasteel/bar,/area/awaymission/BMPship/Midship) "cn" = (/obj/structure/table,/obj/machinery/light/small{dir = 1},/turf/open/floor/plasteel/bar,/area/awaymission/BMPship/Midship) -"co" = (/obj/structure/table,/obj/effect/decal/cleanable/cobweb2,/turf/open/floor/plasteel/bar,/area/awaymission/BMPship/Midship) +"co" = (/obj/structure/table,/obj/effect/decal/cleanable/cobweb/cobweb2,/turf/open/floor/plasteel/bar,/area/awaymission/BMPship/Midship) "cp" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/poddoor/shutters{id = "packerCargo"},/turf/open/floor/plating,/area/awaymission/BMPship/Aft) "cq" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/open/floor/carpet,/area/awaymission/BMPship/Fore) "cr" = (/obj/item/weapon/reagent_containers/food/snacks/hugemushroomslice,/turf/open/floor/plasteel/bar,/area/awaymission/BMPship/Midship) diff --git a/_maps/RandomRuins/SpaceRuins/mechtransport.dmm b/_maps/RandomRuins/SpaceRuins/mechtransport.dmm index 893af75cac3..5007f108b1a 100644 --- a/_maps/RandomRuins/SpaceRuins/mechtransport.dmm +++ b/_maps/RandomRuins/SpaceRuins/mechtransport.dmm @@ -95,7 +95,7 @@ /turf/open/floor/mineral/titanium, /area/ruin/powered) "u" = ( -/obj/effect/decal/cleanable/cobweb2, +/obj/effect/decal/cleanable/cobweb/cobweb2, /turf/open/floor/mineral/titanium, /area/ruin/powered) "v" = ( diff --git a/_maps/RandomRuins/SpaceRuins/oldteleporter.dmm b/_maps/RandomRuins/SpaceRuins/oldteleporter.dmm index 4de656779ce..0e72d6cb29d 100644 --- a/_maps/RandomRuins/SpaceRuins/oldteleporter.dmm +++ b/_maps/RandomRuins/SpaceRuins/oldteleporter.dmm @@ -4,11 +4,11 @@ "d" = (/turf/closed/wall/r_wall,/area/ruin/unpowered/no_grav) "e" = (/turf/open/floor/plasteel/airless,/area/ruin/unpowered/no_grav) "f" = (/turf/open/floor/plasteel/airless{icon_state = "damaged2"},/area/ruin/unpowered/no_grav) -"g" = (/obj/machinery/light_construct/small{dir = 1},/turf/open/floor/plasteel/airless{icon_state = "damaged3"},/area/ruin/unpowered/no_grav) +"g" = (/obj/structure/light_construct/small{dir = 1},/turf/open/floor/plasteel/airless{icon_state = "damaged3"},/area/ruin/unpowered/no_grav) "h" = (/obj/machinery/computer/teleporter,/turf/open/floor/plasteel/airless,/area/ruin/unpowered/no_grav) "i" = (/obj/machinery/teleport/station,/turf/open/floor/plasteel/airless,/area/ruin/unpowered/no_grav) "j" = (/obj/machinery/teleport/hub,/turf/open/floor/plasteel/airless,/area/ruin/unpowered/no_grav) -"k" = (/obj/machinery/light_construct/small{dir = 4},/turf/open/floor/plating/airless,/area/ruin/unpowered/no_grav) +"k" = (/obj/structure/light_construct/small{dir = 4},/turf/open/floor/plating/airless,/area/ruin/unpowered/no_grav) "l" = (/obj/structure/table,/obj/item/weapon/stock_parts/cell{charge = 100;maxcharge = 15000},/turf/open/floor/plasteel/airless,/area/ruin/unpowered/no_grav) "m" = (/turf/open/floor/plasteel/airless{icon_state = "damaged4"},/area/ruin/unpowered/no_grav) "n" = (/obj/machinery/power/apc{dir = 0;name = "Worn-out APC";pixel_y = -24},/turf/open/floor/plasteel/airless,/area/ruin/unpowered/no_grav) diff --git a/_maps/RandomZLevels/Academy.dmm b/_maps/RandomZLevels/Academy.dmm index 3c27dabfd81..30555aca640 100644 --- a/_maps/RandomZLevels/Academy.dmm +++ b/_maps/RandomZLevels/Academy.dmm @@ -573,7 +573,7 @@ /turf/open/floor/plasteel/black, /area/awaymission/academy/headmaster) "bQ" = ( -/obj/effect/decal/cleanable/cobweb2, +/obj/effect/decal/cleanable/cobweb/cobweb2, /obj/structure/cable{ d1 = 4; d2 = 8; @@ -2920,7 +2920,7 @@ }, /area/awaymission/academy/academyaft) "in" = ( -/obj/effect/decal/cleanable/cobweb2, +/obj/effect/decal/cleanable/cobweb/cobweb2, /turf/open/floor/plasteel/cafeteria{ dir = 2 }, @@ -3113,7 +3113,7 @@ /turf/open/floor/wood, /area/awaymission/academy/academyaft) "iP" = ( -/obj/effect/decal/cleanable/cobweb2, +/obj/effect/decal/cleanable/cobweb/cobweb2, /turf/open/floor/engine, /area/awaymission/academy/academyaft) "iQ" = ( @@ -3940,7 +3940,7 @@ /turf/open/floor/engine/cult, /area/awaymission/academy/academycellar) "kZ" = ( -/obj/effect/decal/cleanable/cobweb2, +/obj/effect/decal/cleanable/cobweb/cobweb2, /obj/effect/decal/cleanable/blood/old, /obj/effect/decal/remains/human, /turf/open/floor/engine/cult, @@ -3965,7 +3965,7 @@ /turf/open/floor/engine/cult, /area/awaymission/academy/academycellar) "lf" = ( -/obj/effect/decal/cleanable/cobweb2, +/obj/effect/decal/cleanable/cobweb/cobweb2, /turf/open/floor/engine/cult, /area/awaymission/academy/academycellar) "lg" = ( diff --git a/_maps/RandomZLevels/caves.dmm b/_maps/RandomZLevels/caves.dmm index 801d47134b8..a375cabe157 100644 --- a/_maps/RandomZLevels/caves.dmm +++ b/_maps/RandomZLevels/caves.dmm @@ -1685,7 +1685,7 @@ /area/awaymission/northblock) "dD" = ( /obj/structure/table/wood, -/obj/effect/decal/cleanable/cobweb2, +/obj/effect/decal/cleanable/cobweb/cobweb2, /turf/open/floor/wood{ baseturf = /turf/open/floor/plating/asteroid/basalt }, @@ -1832,7 +1832,7 @@ "dY" = ( /obj/structure/bed, /obj/item/weapon/bedsheet, -/obj/effect/decal/cleanable/cobweb2, +/obj/effect/decal/cleanable/cobweb/cobweb2, /obj/effect/landmark{ name = "awaystart" }, @@ -2122,7 +2122,7 @@ /obj/structure/table, /obj/item/weapon/gun/energy/kinetic_accelerator, /obj/item/weapon/gun/energy/kinetic_accelerator, -/obj/effect/decal/cleanable/cobweb2, +/obj/effect/decal/cleanable/cobweb/cobweb2, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/basalt }, diff --git a/_maps/RandomZLevels/centcomAway.dmm b/_maps/RandomZLevels/centcomAway.dmm index 070b4850138..c4fd8ca737f 100644 --- a/_maps/RandomZLevels/centcomAway.dmm +++ b/_maps/RandomZLevels/centcomAway.dmm @@ -2612,7 +2612,7 @@ /area/awaymission/centcomAway/general) "is" = ( /obj/structure/bookcase, -/obj/effect/decal/cleanable/cobweb2, +/obj/effect/decal/cleanable/cobweb/cobweb2, /turf/open/floor/plasteel/grimy, /area/awaymission/centcomAway/general) "it" = ( @@ -2899,7 +2899,7 @@ }, /area/awaymission/centcomAway/general) "jk" = ( -/obj/effect/decal/cleanable/cobweb2, +/obj/effect/decal/cleanable/cobweb/cobweb2, /turf/open/floor/plasteel/grimy, /area/awaymission/centcomAway/general) "jl" = ( diff --git a/_maps/RandomZLevels/moonoutpost19.dmm b/_maps/RandomZLevels/moonoutpost19.dmm index 9142670609e..05e42b79b15 100644 --- a/_maps/RandomZLevels/moonoutpost19.dmm +++ b/_maps/RandomZLevels/moonoutpost19.dmm @@ -82,7 +82,7 @@ /obj/structure/alien/weeds, /obj/structure/alien/weeds{ desc = "A large mottled egg."; - health = 100; + obj_integrity = 100; icon_state = "egg_hatched"; name = "egg" }, @@ -105,7 +105,7 @@ }, /obj/structure/alien/weeds{ desc = "A large mottled egg."; - health = 100; + obj_integrity = 100; icon_state = "egg_hatched"; name = "egg" }, @@ -177,7 +177,7 @@ }, /obj/structure/alien/weeds{ desc = "A large mottled egg."; - health = 100; + obj_integrity = 100; icon_state = "egg_hatched"; name = "egg" }, @@ -536,7 +536,7 @@ }, /obj/structure/alien/weeds{ desc = "A large mottled egg."; - health = 100; + obj_integrity = 100; icon_state = "egg_hatched"; name = "egg" }, @@ -558,7 +558,7 @@ /obj/structure/alien/weeds, /obj/structure/alien/weeds{ desc = "A large mottled egg."; - health = 100; + obj_integrity = 100; icon_state = "egg_hatched"; name = "egg" }, @@ -1970,7 +1970,7 @@ "cG" = ( /obj/structure/grille{ density = 0; - destroyed = 1; + broken = 1; icon_state = "brokengrille" }, /obj/item/stack/rods, @@ -3285,7 +3285,7 @@ /obj/structure/alien/weeds, /obj/structure/alien/weeds{ desc = "A large mottled egg."; - health = 100; + obj_integrity = 100; icon_state = "egg_hatched"; name = "egg" }, @@ -3516,7 +3516,7 @@ /obj/structure/alien/weeds, /obj/structure/alien/weeds{ desc = "A large mottled egg."; - health = 100; + obj_integrity = 100; icon_state = "egg_hatched"; name = "egg" }, @@ -3625,7 +3625,7 @@ }, /obj/structure/alien/weeds{ desc = "A large mottled egg."; - health = 100; + obj_integrity = 100; icon_state = "egg_hatched"; name = "egg" }, @@ -4034,7 +4034,7 @@ }, /obj/structure/alien/weeds{ desc = "A large mottled egg."; - health = 100; + obj_integrity = 100; icon_state = "egg_hatched"; name = "egg" }, @@ -5043,7 +5043,7 @@ "gE" = ( /obj/structure/grille{ density = 0; - destroyed = 1; + broken = 1; icon_state = "brokengrille" }, /obj/item/stack/rods, @@ -5744,7 +5744,7 @@ "hx" = ( /obj/structure/grille{ density = 0; - destroyed = 1; + broken = 1; icon_state = "brokengrille" }, /obj/item/stack/rods, @@ -6294,7 +6294,7 @@ desc = "Oh no, seven years of bad luck!"; icon_state = "mirror_broke"; pixel_x = 28; - shattered = 1 + broken = 1 }, /turf/open/floor/plasteel/freezer{ heat_capacity = 1e+006 @@ -8056,7 +8056,7 @@ /obj/item/stack/rods, /obj/structure/grille{ density = 0; - destroyed = 1; + broken = 1; icon_state = "brokengrille" }, /obj/item/stack/rods, @@ -8074,7 +8074,7 @@ "kQ" = ( /obj/structure/grille{ density = 0; - destroyed = 1; + broken = 1; icon_state = "brokengrille" }, /obj/item/stack/rods, @@ -9643,7 +9643,7 @@ "ns" = ( /obj/structure/grille{ density = 0; - destroyed = 1; + broken = 1; icon_state = "brokengrille" }, /obj/item/stack/rods, @@ -9801,7 +9801,7 @@ "nD" = ( /obj/structure/grille{ density = 0; - destroyed = 1; + broken = 1; icon_state = "brokengrille" }, /obj/item/stack/rods, @@ -9908,7 +9908,7 @@ name = "MO19 Arrivals" }) "nJ" = ( -/obj/effect/decal/cleanable/cobweb2, +/obj/effect/decal/cleanable/cobweb/cobweb2, /turf/open/floor/plating{ broken = 1; heat_capacity = 1e+006; @@ -10270,7 +10270,7 @@ "oj" = ( /obj/structure/grille{ density = 0; - destroyed = 1; + broken = 1; icon_state = "brokengrille" }, /turf/open/floor/mineral/titanium, diff --git a/_maps/RandomZLevels/research.dmm b/_maps/RandomZLevels/research.dmm index 3f56227c366..243ef869fe4 100644 --- a/_maps/RandomZLevels/research.dmm +++ b/_maps/RandomZLevels/research.dmm @@ -3531,10 +3531,10 @@ "jp" = ( /obj/structure/barricade/wooden{ desc = "A wooden table hastely flipped over for cover."; - health = 55; + obj_integrity = 55; icon = 'icons/obj/smooth_structures/wood_table.dmi'; icon_state = "wood_table"; - maxhealth = 55; + max_integrity = 55; name = "flipped table" }, /turf/open/floor/plasteel/yellowsiding{ @@ -3648,10 +3648,10 @@ "jG" = ( /obj/structure/barricade/wooden{ desc = "A wooden table hastely flipped over for cover."; - health = 55; + obj_integrity = 55; icon = 'icons/obj/smooth_structures/wood_table.dmi'; icon_state = "wood_table"; - maxhealth = 55; + max_integrity = 55; name = "flipped table" }, /turf/open/floor/plasteel, @@ -3779,10 +3779,10 @@ "kb" = ( /obj/structure/barricade/wooden{ desc = "A wooden table hastely flipped over for cover."; - health = 55; + obj_integrity = 55; icon = 'icons/obj/smooth_structures/wood_table.dmi'; icon_state = "wood_table"; - maxhealth = 55; + max_integrity = 55; name = "flipped table" }, /turf/open/floor/plasteel/yellowsiding, diff --git a/_maps/RandomZLevels/undergroundoutpost45.dmm b/_maps/RandomZLevels/undergroundoutpost45.dmm index 1ded5e1d37f..4cbac2f8645 100644 --- a/_maps/RandomZLevels/undergroundoutpost45.dmm +++ b/_maps/RandomZLevels/undergroundoutpost45.dmm @@ -18069,7 +18069,7 @@ "yN" = ( /obj/structure/grille{ density = 0; - destroyed = 1; + broken = 1; icon_state = "brokengrille" }, /turf/open/floor/plasteel/shuttle{ diff --git a/_maps/map_files/BirdStation/BirdStation.dmm b/_maps/map_files/BirdStation/BirdStation.dmm index 9a7f95d8ccc..0625de04704 100644 --- a/_maps/map_files/BirdStation/BirdStation.dmm +++ b/_maps/map_files/BirdStation/BirdStation.dmm @@ -226,7 +226,6 @@ /area/shuttle/syndicate) "aaG" = ( /obj/machinery/door/poddoor{ - auto_close = 300; id = "smindicate"; name = "outer blast door" }, diff --git a/_maps/map_files/DreamStation/dreamstation04.dmm b/_maps/map_files/DreamStation/dreamstation04.dmm index 721fc91755e..43d61387abf 100644 --- a/_maps/map_files/DreamStation/dreamstation04.dmm +++ b/_maps/map_files/DreamStation/dreamstation04.dmm @@ -2241,7 +2241,6 @@ /area/shuttle/syndicate) "aeh" = ( /obj/machinery/door/poddoor{ - auto_close = 300; id = "smindicate"; name = "outer blast door" }, @@ -5399,7 +5398,6 @@ icon_state = "4-8" }, /obj/machinery/newscaster{ - hitstaken = 0; pixel_x = 0; pixel_y = -32; tag = "s" @@ -17038,7 +17036,7 @@ "aJP" = ( /obj/structure/cable/green, /obj/machinery/computer/monitor, -/obj/machinery/light_construct, +/obj/structure/light_construct, /turf/open/floor/plating, /area/maintenance/fore) "aJQ" = ( @@ -24360,7 +24358,6 @@ pixel_y = 0 }, /obj/machinery/newscaster{ - hitstaken = 0; pixel_x = 0; pixel_y = -32; tag = "s" @@ -25579,7 +25576,7 @@ dir = 4 }, /obj/structure/closet/wardrobe/chemistry_white, -/obj/effect/decal/cleanable/cobweb2, +/obj/effect/decal/cleanable/cobweb/cobweb2, /turf/open/floor/plating, /area/maintenance/asmaint) "bbl" = ( @@ -30813,7 +30810,6 @@ dir = 4 }, /obj/machinery/newscaster{ - hitstaken = 0; pixel_x = 0; pixel_y = -32; tag = "s" @@ -35123,7 +35119,6 @@ "btJ" = ( /obj/structure/closet/secure_closet/detective, /obj/machinery/newscaster{ - hitstaken = 0; pixel_x = 0; pixel_y = -32; tag = "s" @@ -35478,7 +35473,6 @@ /area/hallway/secondary/exit) "bup" = ( /obj/machinery/newscaster{ - hitstaken = 0; pixel_x = -32; pixel_y = 0; tag = "w" @@ -38138,7 +38132,6 @@ /obj/item/weapon/folder/blue, /obj/item/weapon/stamp/hop, /obj/machinery/newscaster{ - hitstaken = 0; pixel_x = 0; pixel_y = -32; tag = "s" @@ -44999,7 +44992,6 @@ /area/crew_quarters/captain) "bLr" = ( /obj/machinery/newscaster{ - hitstaken = 0; pixel_x = -32; pixel_y = 0; tag = "w" @@ -70879,7 +70871,7 @@ pixel_y = 24; req_access_txt = "0" }, -/obj/effect/decal/cleanable/cobweb2, +/obj/effect/decal/cleanable/cobweb/cobweb2, /turf/open/floor/plating, /area/maintenance/asmaint2) "cKy" = ( diff --git a/_maps/map_files/EfficiencyStation/EfficiencyStation.dmm b/_maps/map_files/EfficiencyStation/EfficiencyStation.dmm index 3b3e3b58934..e7fc86306b0 100644 --- a/_maps/map_files/EfficiencyStation/EfficiencyStation.dmm +++ b/_maps/map_files/EfficiencyStation/EfficiencyStation.dmm @@ -321,7 +321,7 @@ /obj/machinery/vending/cigarette{ use_power = 0 }, -/obj/effect/decal/cleanable/cobweb2, +/obj/effect/decal/cleanable/cobweb/cobweb2, /turf/open/floor/mineral/titanium, /area/shuttle/abandoned) "aaZ" = ( @@ -331,7 +331,6 @@ /area/shuttle/abandoned) "aba" = ( /obj/machinery/door/poddoor{ - auto_close = 300; id = "smindicate"; name = "outer blast door" }, @@ -1406,7 +1405,7 @@ desc = "A thin layer of dust coating the floor."; name = "dust" }, -/obj/effect/decal/cleanable/cobweb2, +/obj/effect/decal/cleanable/cobweb/cobweb2, /turf/open/floor/mineral/titanium, /area/shuttle/abandoned) "acX" = ( @@ -3191,7 +3190,7 @@ desc = "A thin layer of dust coating the floor."; name = "dust" }, -/obj/effect/decal/cleanable/cobweb2, +/obj/effect/decal/cleanable/cobweb/cobweb2, /turf/open/floor/plasteel/bot, /area/shuttle/abandoned) "agd" = ( @@ -3809,7 +3808,7 @@ desc = "A thin layer of dust coating the floor."; name = "dust" }, -/obj/effect/decal/cleanable/cobweb2, +/obj/effect/decal/cleanable/cobweb/cobweb2, /turf/open/floor/mineral/titanium, /area/shuttle/abandoned) "aho" = ( @@ -7956,7 +7955,7 @@ dir = 8; on = 1 }, -/obj/effect/decal/cleanable/cobweb2, +/obj/effect/decal/cleanable/cobweb/cobweb2, /obj/item/device/radio/intercom{ dir = 1; name = "Station Intercom (General)"; @@ -10340,7 +10339,7 @@ d2 = 8; icon_state = "2-8" }, -/obj/effect/decal/cleanable/cobweb2, +/obj/effect/decal/cleanable/cobweb/cobweb2, /turf/open/floor/plating, /area/maintenance/fore) "atv" = ( @@ -22858,7 +22857,7 @@ }, /area/maintenance/fore) "aSa" = ( -/obj/effect/decal/cleanable/cobweb2, +/obj/effect/decal/cleanable/cobweb/cobweb2, /obj/structure/chair/stool{ pixel_y = 8 }, @@ -28205,7 +28204,7 @@ icon_state = "2-8" }, /obj/structure/reagent_dispensers/watertank, -/obj/effect/decal/cleanable/cobweb2, +/obj/effect/decal/cleanable/cobweb/cobweb2, /obj/structure/disposalpipe/segment, /turf/open/floor/plating, /area/maintenance/fpmaint{ @@ -33350,7 +33349,7 @@ /obj/structure/toilet{ dir = 8 }, -/obj/machinery/light_construct/small{ +/obj/structure/light_construct/small{ dir = 1 }, /turf/open/floor/plasteel{ @@ -33909,7 +33908,7 @@ }, /obj/effect/decal/cleanable/oil, /obj/item/weapon/cigbutt, -/obj/machinery/light_construct/small{ +/obj/structure/light_construct/small{ dir = 4 }, /turf/open/floor/plasteel{ @@ -34753,7 +34752,7 @@ desc = "This mirror has been shattered. It looks like the bad luck energies spilling from it are taking immediate effect on your surroundings!"; icon_state = "mirror_broke"; pixel_x = -28; - shattered = 1 + broken = 1 }, /obj/effect/decal/cleanable/vomit/old, /obj/effect/decal/cleanable/cobweb, @@ -34803,7 +34802,7 @@ /obj/structure/toilet{ dir = 8 }, -/obj/machinery/light_construct/small{ +/obj/structure/light_construct/small{ dir = 1 }, /turf/open/floor/plasteel{ @@ -36081,7 +36080,7 @@ desc = "This mirror has been shattered. It looks like the bad luck energies spilling from it are taking immediate effect on your surroundings!"; icon_state = "mirror_broke"; pixel_x = -28; - shattered = 1 + broken = 1 }, /obj/item/weapon/cigbutt, /turf/open/floor/plasteel{ @@ -41684,7 +41683,6 @@ pixel_y = -30 }, /obj/machinery/newscaster{ - hitstaken = 1; pixel_x = 30 }, /turf/open/floor/plasteel/red/side{ @@ -42257,7 +42255,7 @@ d2 = 8; icon_state = "2-8" }, -/obj/effect/decal/cleanable/cobweb2, +/obj/effect/decal/cleanable/cobweb/cobweb2, /turf/open/floor/plating{ broken = 1; icon_state = "platingdmg3" @@ -44232,7 +44230,7 @@ /obj/structure/chair/stool{ pixel_y = 8 }, -/obj/machinery/light_construct/small{ +/obj/structure/light_construct/small{ dir = 8 }, /turf/open/floor/plating{ @@ -44860,7 +44858,7 @@ /area/maintenance/starboard) "bLc" = ( /obj/effect/decal/cleanable/dirt, -/obj/machinery/light_construct/small{ +/obj/structure/light_construct/small{ dir = 8 }, /obj/effect/spawner/lootdrop/grille_or_trash, diff --git a/_maps/map_files/MetaStation/MetaStation.dmm b/_maps/map_files/MetaStation/MetaStation.dmm index a4545d7ad81..09fd391cb4f 100644 --- a/_maps/map_files/MetaStation/MetaStation.dmm +++ b/_maps/map_files/MetaStation/MetaStation.dmm @@ -4485,7 +4485,7 @@ /area/ai_monitored/security/armory) "ahW" = ( /obj/item/clothing/head/festive, -/obj/effect/decal/cleanable/cobweb2, +/obj/effect/decal/cleanable/cobweb/cobweb2, /turf/open/floor/plating, /area/maintenance/fore) "ahX" = ( @@ -4504,7 +4504,7 @@ /turf/open/floor/plating, /area/maintenance/fore) "aia" = ( -/obj/effect/decal/cleanable/cobweb2, +/obj/effect/decal/cleanable/cobweb/cobweb2, /obj/structure/table, /obj/item/weapon/stock_parts/manipulator, /obj/effect/spawner/lootdrop/maintenance, @@ -5211,7 +5211,7 @@ }) "ajq" = ( /obj/item/stack/sheet/cardboard, -/obj/machinery/light_construct/small{ +/obj/structure/light_construct/small{ dir = 1 }, /obj/structure/closet/crate, @@ -6662,7 +6662,7 @@ name = "Port Maintenance" }) "alP" = ( -/obj/machinery/light_construct/small{ +/obj/structure/light_construct/small{ dir = 4 }, /obj/structure/rack{ @@ -7402,7 +7402,7 @@ }) "anb" = ( /obj/structure/table/reinforced, -/obj/machinery/light_construct/small{ +/obj/structure/light_construct/small{ dir = 8 }, /obj/item/weapon/paper_bin{ @@ -8659,7 +8659,7 @@ /area/maintenance/starboard) "apo" = ( /obj/structure/closet, -/obj/effect/decal/cleanable/cobweb2, +/obj/effect/decal/cleanable/cobweb/cobweb2, /obj/item/weapon/reagent_containers/food/drinks/beer{ desc = "Takes you to a whole new level of thinking."; name = "Meta-Cider" @@ -8759,7 +8759,7 @@ pixel_x = 32; pixel_y = 0 }, -/obj/effect/decal/cleanable/cobweb2, +/obj/effect/decal/cleanable/cobweb/cobweb2, /turf/open/floor/plating, /area/maintenance/auxsolarstarboard) "apy" = ( @@ -8858,7 +8858,7 @@ /turf/open/floor/plasteel/black, /area/storage/tech) "apG" = ( -/obj/machinery/light_construct/small{ +/obj/structure/light_construct/small{ dir = 4 }, /obj/structure/chair{ @@ -9538,7 +9538,7 @@ }) "aqT" = ( /obj/structure/rack, -/obj/effect/decal/cleanable/cobweb2, +/obj/effect/decal/cleanable/cobweb/cobweb2, /obj/item/weapon/storage/toolbox/emergency, /obj/effect/spawner/lootdrop/maintenance, /turf/open/floor/plating, @@ -9574,7 +9574,7 @@ name = "Port Maintenance" }) "aqX" = ( -/obj/machinery/light_construct/small, +/obj/structure/light_construct/small, /obj/item/weapon/toolbox_tiles_sensor, /turf/open/floor/plating, /area/maintenance/fpmaint2{ @@ -10959,7 +10959,7 @@ req_access_txt = "0"; specialfunctions = 4 }, -/obj/effect/decal/cleanable/cobweb2, +/obj/effect/decal/cleanable/cobweb/cobweb2, /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 4; on = 1 @@ -11839,7 +11839,7 @@ "auK" = ( /obj/item/stack/sheet/cardboard, /obj/item/device/flashlight, -/obj/effect/decal/cleanable/cobweb2, +/obj/effect/decal/cleanable/cobweb/cobweb2, /obj/effect/spawner/lootdrop/maintenance, /turf/open/floor/plating, /area/maintenance/starboard) @@ -14578,7 +14578,7 @@ /obj/item/weapon/twohanded/required/kirbyplants{ icon_state = "plant-22" }, -/obj/effect/decal/cleanable/cobweb2, +/obj/effect/decal/cleanable/cobweb/cobweb2, /turf/open/floor/wood, /area/library) "azw" = ( @@ -17088,7 +17088,7 @@ scrub_N2O = 0; scrub_Toxins = 0 }, -/obj/machinery/light_construct/small{ +/obj/structure/light_construct/small{ dir = 4 }, /turf/open/floor/plasteel/floorgrime, @@ -17837,7 +17837,7 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 10 }, -/obj/effect/decal/cleanable/cobweb2, +/obj/effect/decal/cleanable/cobweb/cobweb2, /turf/open/floor/plating, /area/maintenance/fpmaint2{ name = "Port Maintenance" @@ -18623,7 +18623,7 @@ }, /obj/item/weapon/folder, /obj/item/weapon/folder, -/obj/effect/decal/cleanable/cobweb2, +/obj/effect/decal/cleanable/cobweb/cobweb2, /turf/open/floor/plasteel/cult{ dir = 2 }, @@ -19591,7 +19591,7 @@ /turf/open/floor/plasteel, /area/construction) "aHE" = ( -/obj/machinery/light_construct{ +/obj/structure/light_construct{ dir = 1 }, /obj/structure/closet/emcloset, @@ -19631,7 +19631,7 @@ /area/construction) "aHJ" = ( /obj/structure/closet/toolcloset, -/obj/machinery/light_construct{ +/obj/structure/light_construct{ dir = 1 }, /turf/open/floor/plasteel, @@ -21751,7 +21751,7 @@ }, /area/space) "aLA" = ( -/obj/machinery/light_construct{ +/obj/structure/light_construct{ dir = 8 }, /turf/open/floor/plating, @@ -21766,7 +21766,7 @@ }, /area/construction) "aLD" = ( -/obj/machinery/light_construct{ +/obj/structure/light_construct{ dir = 4 }, /obj/machinery/light_switch{ @@ -29013,7 +29013,6 @@ "aYM" = ( /obj/item/weapon/book/manual/wiki/security_space_law, /obj/machinery/newscaster{ - hitstaken = 1; pixel_x = 0; pixel_y = -32 }, @@ -30642,7 +30641,7 @@ /area/hallway/primary/central) "bbo" = ( /obj/machinery/space_heater, -/obj/effect/decal/cleanable/cobweb2, +/obj/effect/decal/cleanable/cobweb/cobweb2, /turf/open/floor/plating{ icon_state = "platingdmg3" }, @@ -30679,7 +30678,7 @@ /obj/machinery/door/window{ base_state = "rightsecure"; dir = 4; - health = 300; + obj_integrity = 300; icon_state = "rightsecure"; layer = 4.1; name = "Secondary AI Core Access"; @@ -30730,7 +30729,7 @@ /obj/machinery/door/window{ base_state = "rightsecure"; dir = 4; - health = 300; + obj_integrity = 300; icon_state = "rightsecure"; name = "Primary AI Core Access"; req_access_txt = "16" @@ -30801,7 +30800,7 @@ /obj/machinery/door/window{ base_state = "leftsecure"; dir = 8; - health = 300; + obj_integrity = 300; icon_state = "leftsecure"; layer = 4.1; name = "Tertiary AI Core Access"; @@ -40681,7 +40680,7 @@ /obj/machinery/door/window{ base_state = "leftsecure"; dir = 8; - health = 300; + obj_integrity = 300; icon_state = "leftsecure"; name = "Primary AI Core Access"; req_access_txt = "16" @@ -44215,7 +44214,7 @@ }) "byc" = ( /obj/structure/closet, -/obj/effect/decal/cleanable/cobweb2, +/obj/effect/decal/cleanable/cobweb/cobweb2, /obj/item/weapon/poster/contraband, /obj/effect/spawner/lootdrop/maintenance, /turf/open/floor/plating, @@ -47115,7 +47114,7 @@ name = "Arrivals" }) "bDi" = ( -/obj/effect/decal/cleanable/cobweb2, +/obj/effect/decal/cleanable/cobweb/cobweb2, /obj/structure/reagent_dispensers/fueltank, /turf/open/floor/plating, /area/maintenance/fpmaint2{ @@ -47269,7 +47268,7 @@ /turf/open/floor/wood, /area/library) "bDB" = ( -/obj/effect/decal/cleanable/cobweb2, +/obj/effect/decal/cleanable/cobweb/cobweb2, /turf/open/floor/wood, /area/library) "bDC" = ( @@ -48897,7 +48896,7 @@ name = "Port Maintenance" }) "bGw" = ( -/obj/machinery/light_construct{ +/obj/structure/light_construct{ dir = 8 }, /turf/open/floor/wood, @@ -52847,7 +52846,7 @@ /turf/open/floor/wood, /area/security/vacantoffice) "bNk" = ( -/obj/machinery/light_construct{ +/obj/structure/light_construct{ dir = 4 }, /turf/open/floor/wood, @@ -52903,7 +52902,7 @@ name = "Port Maintenance" }) "bNq" = ( -/obj/effect/decal/cleanable/cobweb2, +/obj/effect/decal/cleanable/cobweb/cobweb2, /obj/structure/rack{ dir = 8; layer = 2.9 @@ -54202,7 +54201,7 @@ icon_state = "1-2" }, /obj/structure/window/reinforced, -/obj/effect/decal/cleanable/cobweb2, +/obj/effect/decal/cleanable/cobweb/cobweb2, /obj/structure/showcase{ desc = "A flimsy model of a standard NanoTrasen automated loyalty implant machine. With secure positioning harnesses and a robotic surgical injector, brain damage and other serious medical anomalies are now up to 60% less likely!"; icon = 'icons/obj/machines/implantchair.dmi'; @@ -55585,7 +55584,7 @@ name = "Port Maintenance" }) "bRZ" = ( -/obj/effect/decal/cleanable/cobweb2, +/obj/effect/decal/cleanable/cobweb/cobweb2, /obj/structure/closet/emcloset, /turf/open/floor/plating, /area/maintenance/fpmaint2{ @@ -55644,7 +55643,7 @@ /obj/structure/table/wood, /obj/item/weapon/dice/d20, /obj/item/weapon/dice, -/obj/effect/decal/cleanable/cobweb2, +/obj/effect/decal/cleanable/cobweb/cobweb2, /turf/open/floor/wood, /area/library) "bSh" = ( @@ -60743,7 +60742,7 @@ name = "Aft Maintenance" }) "caT" = ( -/obj/machinery/light_construct, +/obj/structure/light_construct, /turf/open/floor/plating{ icon_state = "panelscorched" }, @@ -62476,7 +62475,7 @@ d2 = 4; icon_state = "2-4" }, -/obj/machinery/light_construct{ +/obj/structure/light_construct{ dir = 8 }, /turf/open/floor/plating, @@ -62519,7 +62518,7 @@ /obj/structure/rack, /obj/item/stack/sheet/cardboard, /obj/item/device/radio/off, -/obj/machinery/light_construct{ +/obj/structure/light_construct{ dir = 1 }, /obj/effect/spawner/lootdrop/maintenance, @@ -67171,7 +67170,7 @@ pixel_y = 2 }, /obj/structure/table/wood, -/obj/machinery/light_construct/small{ +/obj/structure/light_construct/small{ dir = 1 }, /obj/machinery/newscaster{ @@ -67858,7 +67857,7 @@ pixel_y = 2 }, /obj/structure/table, -/obj/effect/decal/cleanable/cobweb2, +/obj/effect/decal/cleanable/cobweb/cobweb2, /obj/machinery/reagentgrinder{ pixel_y = 4 }, @@ -68772,7 +68771,7 @@ name = "Aft Maintenance" }) "cou" = ( -/obj/machinery/light_construct/small{ +/obj/structure/light_construct/small{ dir = 4 }, /obj/machinery/computer/security/telescreen/entertainment{ @@ -81331,7 +81330,7 @@ pixel_x = 3; pixel_y = 2 }, -/obj/effect/decal/cleanable/cobweb2, +/obj/effect/decal/cleanable/cobweb/cobweb2, /turf/open/floor/plasteel/floorgrime, /area/maintenance/aft{ name = "Aft Maintenance" @@ -82126,7 +82125,7 @@ dir = 2; on = 1 }, -/obj/effect/decal/cleanable/cobweb2, +/obj/effect/decal/cleanable/cobweb/cobweb2, /turf/open/floor/plasteel/black, /area/toxins/server{ name = "\improper Research Division Server Room" @@ -83334,7 +83333,7 @@ name = "Aft Maintenance" }) "cMp" = ( -/obj/machinery/light_construct/small, +/obj/structure/light_construct/small, /obj/structure/table/wood/poker, /obj/item/toy/cards/deck, /obj/structure/sign/poster{ @@ -85018,7 +85017,7 @@ pixel_x = 0; pixel_y = 25 }, -/obj/effect/decal/cleanable/cobweb2, +/obj/effect/decal/cleanable/cobweb/cobweb2, /obj/structure/table/wood, /turf/open/floor/plasteel/vault, /area/chapel/main) @@ -85592,7 +85591,7 @@ /obj/structure/flora/ausbushes/palebush, /obj/structure/window/reinforced{ dir = 5; - health = 1e+007 + obj_integrity = 10000 }, /turf/open/floor/grass, /area/hallway/secondary/exit{ @@ -86277,7 +86276,7 @@ /obj/structure/flora/ausbushes/sunnybush, /obj/structure/window/reinforced{ dir = 5; - health = 1e+007 + obj_integrity = 10000 }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 @@ -86684,7 +86683,7 @@ pixel_x = -2; pixel_y = 8 }, -/obj/effect/decal/cleanable/cobweb2, +/obj/effect/decal/cleanable/cobweb/cobweb2, /obj/structure/table/wood, /turf/open/floor/plasteel/black, /area/chapel/main) @@ -86724,7 +86723,7 @@ }, /area/chapel/main) "cSd" = ( -/obj/effect/decal/cleanable/cobweb2, +/obj/effect/decal/cleanable/cobweb/cobweb2, /obj/structure/chair/comfy/black{ dir = 8 }, @@ -89481,7 +89480,6 @@ /area/toxins/xenobiology) "cWS" = ( /obj/machinery/door/poddoor{ - auto_close = 300; id = "smindicate"; name = "outer blast door" }, @@ -90912,7 +90910,7 @@ /obj/effect/spawner/lootdrop/maintenance, /obj/item/weapon/extinguisher, /obj/item/weapon/extinguisher, -/obj/effect/decal/cleanable/cobweb2, +/obj/effect/decal/cleanable/cobweb/cobweb2, /obj/effect/decal/cleanable/dirt{ desc = "A thin layer of dust coating the floor."; name = "dust" @@ -91341,7 +91339,7 @@ desc = "A thin layer of dust coating the floor."; name = "dust" }, -/obj/effect/decal/cleanable/cobweb2, +/obj/effect/decal/cleanable/cobweb/cobweb2, /turf/open/floor/mineral/titanium/blue, /area/shuttle/abandoned) "daN" = ( @@ -91914,7 +91912,7 @@ desc = "A thin layer of dust coating the floor."; name = "dust" }, -/obj/effect/decal/cleanable/cobweb2, +/obj/effect/decal/cleanable/cobweb/cobweb2, /turf/open/floor/mineral/titanium, /area/shuttle/abandoned) "dbR" = ( diff --git a/_maps/map_files/TgStation/tgstation.2.1.3.dmm b/_maps/map_files/TgStation/tgstation.2.1.3.dmm index b9bf7fc16cf..e1990337384 100644 --- a/_maps/map_files/TgStation/tgstation.2.1.3.dmm +++ b/_maps/map_files/TgStation/tgstation.2.1.3.dmm @@ -7424,7 +7424,7 @@ "apP" = ( /obj/structure/grille, /obj/structure/window/fulltile{ - health = 35 + obj_integrity = 35 }, /turf/open/floor/plating, /area/maintenance/fpmaint2) @@ -7499,7 +7499,7 @@ layer = 2.9 }, /obj/item/weapon/storage/briefcase, -/obj/effect/decal/cleanable/cobweb2, +/obj/effect/decal/cleanable/cobweb/cobweb2, /turf/open/floor/wood, /area/lawoffice) "aqc" = ( @@ -7764,7 +7764,7 @@ /turf/open/floor/plating, /area/maintenance/fsmaint2) "aqB" = ( -/obj/effect/decal/cleanable/cobweb2, +/obj/effect/decal/cleanable/cobweb/cobweb2, /turf/open/floor/plating, /area/maintenance/fsmaint2) "aqC" = ( @@ -7995,7 +7995,7 @@ pixel_y = 23 }, /obj/structure/closet/secure_closet/personal/cabinet, -/obj/effect/decal/cleanable/cobweb2, +/obj/effect/decal/cleanable/cobweb/cobweb2, /turf/open/floor/wood, /area/crew_quarters/sleep) "arj" = ( @@ -9541,7 +9541,7 @@ /obj/structure/mirror{ icon_state = "mirror_broke"; pixel_y = 28; - shattered = 1 + broken = 1 }, /obj/machinery/iv_drip, /turf/open/floor/plating, @@ -9550,7 +9550,7 @@ /obj/structure/mirror{ icon_state = "mirror_broke"; pixel_y = 28; - shattered = 1 + broken = 1 }, /obj/item/weapon/shard{ icon_state = "medium" @@ -9563,7 +9563,7 @@ /turf/open/floor/plating, /area/maintenance/fpmaint2) "ava" = ( -/obj/effect/decal/cleanable/cobweb2, +/obj/effect/decal/cleanable/cobweb/cobweb2, /obj/structure/chair, /obj/item/weapon/reagent_containers/blood/random, /turf/open/floor/plating, @@ -10294,7 +10294,7 @@ /turf/open/floor/plating, /area/maintenance/fsmaint2) "awE" = ( -/obj/effect/decal/cleanable/cobweb2, +/obj/effect/decal/cleanable/cobweb/cobweb2, /obj/structure/closet/crate, /obj/effect/spawner/lootdrop/maintenance, /turf/open/floor/plating, @@ -13644,7 +13644,7 @@ /turf/open/floor/plating, /area/maintenance/fsmaint2) "aDX" = ( -/obj/effect/decal/cleanable/cobweb2, +/obj/effect/decal/cleanable/cobweb/cobweb2, /obj/structure/reagent_dispensers/fueltank, /turf/open/floor/plating, /area/maintenance/fsmaint2) @@ -15356,7 +15356,7 @@ "aHx" = ( /obj/structure/grille, /obj/structure/window/fulltile{ - health = 25 + obj_integrity = 25 }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plating, @@ -33845,13 +33845,12 @@ }) "bxg" = ( /obj/structure/reagent_dispensers/watertank, -/obj/effect/decal/cleanable/cobweb2, +/obj/effect/decal/cleanable/cobweb/cobweb2, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plating, /area/maintenance/asmaint) "bxh" = ( /obj/machinery/door/poddoor{ - auto_close = 300; id = "smindicate"; name = "outer blast door" }, @@ -34891,7 +34890,7 @@ dir = 2; on = 1 }, -/obj/effect/decal/cleanable/cobweb2, +/obj/effect/decal/cleanable/cobweb/cobweb2, /turf/open/floor/plasteel/black, /area/toxins/server) "bzy" = ( @@ -35689,7 +35688,6 @@ pixel_y = 0 }, /obj/machinery/newscaster{ - hitstaken = 1; pixel_x = 0; pixel_y = -32 }, @@ -37692,7 +37690,7 @@ }, /obj/structure/grille, /obj/structure/window/fulltile{ - health = 25 + obj_integrity = 25 }, /turf/open/floor/plating, /area/maintenance/asmaint) @@ -38950,14 +38948,14 @@ /obj/structure/disposalpipe/segment, /obj/structure/grille, /obj/structure/window/fulltile{ - health = 35 + obj_integrity = 35 }, /turf/open/floor/plating, /area/maintenance/asmaint) "bHX" = ( /obj/structure/grille, /obj/structure/window/fulltile{ - health = 25 + obj_integrity = 25 }, /turf/open/floor/plating, /area/maintenance/asmaint) @@ -39773,7 +39771,7 @@ /turf/open/floor/plating, /area/maintenance/asmaint) "bJu" = ( -/obj/machinery/light_construct{ +/obj/structure/light_construct{ dir = 4 }, /turf/open/floor/plasteel, @@ -40432,7 +40430,7 @@ /turf/open/floor/plating, /area/maintenance/asmaint) "bKK" = ( -/obj/effect/decal/cleanable/cobweb2, +/obj/effect/decal/cleanable/cobweb/cobweb2, /obj/structure/cable{ d2 = 8; icon_state = "0-8" @@ -41296,7 +41294,7 @@ /turf/open/floor/plating, /area/maintenance/asmaint2) "bMC" = ( -/obj/effect/decal/cleanable/cobweb2, +/obj/effect/decal/cleanable/cobweb/cobweb2, /obj/effect/spawner/lootdrop/maintenance, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plating, @@ -43282,7 +43280,7 @@ }, /area/security/checkpoint/engineering) "bRl" = ( -/obj/machinery/light_construct{ +/obj/structure/light_construct{ dir = 8 }, /turf/open/floor/plating, @@ -45351,7 +45349,7 @@ /turf/open/floor/plating, /area/maintenance/aft) "bVE" = ( -/obj/effect/decal/cleanable/cobweb2, +/obj/effect/decal/cleanable/cobweb/cobweb2, /obj/machinery/atmospherics/components/unary/portables_connector/visible, /obj/machinery/portable_atmospherics/canister/oxygen, /turf/open/floor/plating, @@ -47218,7 +47216,7 @@ /turf/open/floor/plating, /area/maintenance/asmaint) "bZO" = ( -/obj/effect/decal/cleanable/cobweb2, +/obj/effect/decal/cleanable/cobweb/cobweb2, /obj/effect/spawner/lootdrop/maintenance, /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 8 @@ -50413,7 +50411,7 @@ /obj/structure/rack{ dir = 1 }, -/obj/effect/decal/cleanable/cobweb2, +/obj/effect/decal/cleanable/cobweb/cobweb2, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plating, /area/maintenance/asmaint2) @@ -51921,7 +51919,7 @@ /area/maintenance/starboardsolar) "cjE" = ( /obj/structure/rack, -/obj/effect/decal/cleanable/cobweb2, +/obj/effect/decal/cleanable/cobweb/cobweb2, /obj/effect/spawner/lootdrop/maintenance, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plating, @@ -55188,7 +55186,7 @@ /turf/open/floor/plating, /area/maintenance/asmaint2) "cqv" = ( -/obj/effect/decal/cleanable/cobweb2, +/obj/effect/decal/cleanable/cobweb/cobweb2, /turf/open/floor/plating, /area/maintenance/aft) "cqw" = ( diff --git a/_maps/map_files/generic/z2.dmm b/_maps/map_files/generic/z2.dmm index 8f8ba1c6da8..8b0b9796ac3 100644 --- a/_maps/map_files/generic/z2.dmm +++ b/_maps/map_files/generic/z2.dmm @@ -3961,7 +3961,7 @@ "ms" = ( /obj/effect/decal/cleanable/blood/splatter, /obj/structure/rack{ - health = 9999 + obj_integrity = 9999 }, /obj/item/clothing/suit/space/hardsuit/wizard, /turf/open/floor/engine/cult, @@ -5105,8 +5105,8 @@ /area/ctf) "qd" = ( /obj/structure/window/reinforced/fulltile{ - health = 1e+007; - maxhealth = 1e+007; + obj_integrity = 5000; + max_integrity = 5000; name = "hardened window" }, /turf/open/floor/plating, diff --git a/_maps/shuttles/emergency_narnar.dmm b/_maps/shuttles/emergency_narnar.dmm index 3295aee638a..a6da04a5188 100644 --- a/_maps/shuttles/emergency_narnar.dmm +++ b/_maps/shuttles/emergency_narnar.dmm @@ -164,9 +164,6 @@ /area/shuttle/escape) "G" = ( /obj/structure/extinguisher_cabinet{ - has_extinguisher = null; - icon_state = "extinguisher_empty"; - opened = 1; pixel_x = 27; pixel_y = 0 }, diff --git a/_maps/shuttles/ferry_lighthouse.dmm b/_maps/shuttles/ferry_lighthouse.dmm index 4c7a8f32df9..839c368a103 100644 --- a/_maps/shuttles/ferry_lighthouse.dmm +++ b/_maps/shuttles/ferry_lighthouse.dmm @@ -82,7 +82,7 @@ /turf/open/floor/wood, /area/shuttle/transport) "as" = ( -/obj/machinery/shield, +/obj/structure/emergency_shield, /turf/open/space, /area/shuttle/transport) "at" = ( diff --git a/_maps/shuttles/whiteship_meta.dmm b/_maps/shuttles/whiteship_meta.dmm index 6a59a3ca020..2a63bb714cf 100644 --- a/_maps/shuttles/whiteship_meta.dmm +++ b/_maps/shuttles/whiteship_meta.dmm @@ -296,7 +296,7 @@ /obj/effect/spawner/lootdrop/maintenance, /obj/item/weapon/extinguisher, /obj/item/weapon/extinguisher, -/obj/effect/decal/cleanable/cobweb2, +/obj/effect/decal/cleanable/cobweb/cobweb2, /obj/effect/decal/cleanable/dirt{ desc = "A thin layer of dust coating the floor."; name = "dust" @@ -716,7 +716,7 @@ desc = "A thin layer of dust coating the floor."; name = "dust" }, -/obj/effect/decal/cleanable/cobweb2, +/obj/effect/decal/cleanable/cobweb/cobweb2, /turf/open/floor/mineral/titanium/blue, /area/shuttle/abandoned) "br" = ( @@ -1319,7 +1319,7 @@ desc = "A thin layer of dust coating the floor."; name = "dust" }, -/obj/effect/decal/cleanable/cobweb2, +/obj/effect/decal/cleanable/cobweb/cobweb2, /turf/open/floor/mineral/titanium, /area/shuttle/abandoned) "cw" = ( diff --git a/code/__DEFINES/misc.dm b/code/__DEFINES/misc.dm index a9821785a81..d96f8eca685 100644 --- a/code/__DEFINES/misc.dm +++ b/code/__DEFINES/misc.dm @@ -343,13 +343,12 @@ var/list/bloody_footprints_cache = list() //Fire and Acid stuff, for resistance_flags #define LAVA_PROOF 1 -#define FIRE_PROOF 2 //not flammable (but may or may not take damage from fire) -#define ON_FIRE 4 -#define UNACIDABLE 8 //acid can't even appear on it, let alone melt it. -#define ACID_PROOF 16 //acid stuck on it doesn't melt it. -#define INDESTRUCTIBLE 32 //doesn't take damage -#define EMP_PROOF 64 //immune to emp - +#define FIRE_PROOF 2 //100% immune to fire damage (but not necessarily to lava or heat) +#define FLAMMABLE 4 +#define ON_FIRE 8 +#define UNACIDABLE 16 //acid can't even appear on it, let alone melt it. +#define ACID_PROOF 32 //acid stuck on it doesn't melt it. +#define INDESTRUCTIBLE 64 //doesn't take damage //Ghost orbit types: #define GHOST_ORBIT_CIRCLE "circle" diff --git a/code/__HELPERS/type2type.dm b/code/__HELPERS/type2type.dm index cdd827a3895..2d1535cd464 100644 --- a/code/__HELPERS/type2type.dm +++ b/code/__HELPERS/type2type.dm @@ -396,7 +396,22 @@ for(var/t in test_times) return - +//for each body zone, gives the corresponding body_parts_covered bitfield +/proc/body_zone2body_parts_covered(b_zone) + b_zone = check_zone(b_zone) + switch(b_zone) + if("chest") + return CHEST + if("head") + return HEAD + if("r_arm") + return ARM_RIGHT + if("l_arm") + return ARM_LEFT + if("r_leg") + return LEG_RIGHT + if("l_leg") + return LEG_LEFT //Turns a Body_parts_covered bitfield into a list of organ/limb names. //(I challenge you to find a use for this) diff --git a/code/__HELPERS/unsorted.dm b/code/__HELPERS/unsorted.dm index d38f50c01a3..0a555c4e756 100644 --- a/code/__HELPERS/unsorted.dm +++ b/code/__HELPERS/unsorted.dm @@ -823,11 +823,11 @@ var/list/WALLITEMS = list( ) var/list/WALLITEMS_EXTERNAL = list( - /obj/machinery/camera, /obj/machinery/camera_assembly, - /obj/machinery/light_construct, /obj/machinery/light) + /obj/machinery/camera, /obj/structure/camera_assembly, + /obj/structure/light_construct, /obj/machinery/light) var/list/WALLITEMS_INVERSE = list( - /obj/machinery/light_construct, /obj/machinery/light) + /obj/structure/light_construct, /obj/machinery/light) /proc/gotwallitem(loc, dir, var/check_external = 0) diff --git a/code/_onclick/hud/screen_objects.dm b/code/_onclick/hud/screen_objects.dm index adfe508f6c8..dc40fa92d96 100644 --- a/code/_onclick/hud/screen_objects.dm +++ b/code/_onclick/hud/screen_objects.dm @@ -10,11 +10,14 @@ name = "" icon = 'icons/mob/screen_gen.dmi' layer = ABOVE_HUD_LAYER - resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE + resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF appearance_flags = APPEARANCE_UI var/obj/master = null //A reference to the object in the slot. Grabs or items, generally. var/datum/hud/hud = null // A reference to the owner HUD, if any. +/obj/screen/take_damage() + return + /obj/screen/Destroy() master = null return ..() diff --git a/code/_onclick/item_attack.dm b/code/_onclick/item_attack.dm index ced66536d87..2b20a5ed50f 100644 --- a/code/_onclick/item_attack.dm +++ b/code/_onclick/item_attack.dm @@ -46,6 +46,8 @@ /obj/item/proc/attack_obj(obj/O, mob/living/user) if(flags & NOBLUDGEON) return + if(user.a_intent == "help") //so you don't hit a machine with a tool while trying to disassemble it. + return user.changeNext_move(CLICK_CD_MELEE) user.do_attack_animation(O) O.attacked_by(src, user) @@ -58,6 +60,7 @@ /obj/attacked_by(obj/item/I, mob/living/user) if(I.force) user.visible_message("[user] has hit [src] with [I]!", "You hit [src] with [I]!") + take_damage(I.force, I.damtype, "melee", 1) /mob/living/attacked_by(obj/item/I, mob/living/user) send_item_attack_message(I, user) diff --git a/code/controllers/subsystem/acid.dm b/code/controllers/subsystem/acid.dm new file mode 100644 index 00000000000..23b671bf710 --- /dev/null +++ b/code/controllers/subsystem/acid.dm @@ -0,0 +1,42 @@ +var/datum/subsystem/acid/SSacid + +/datum/subsystem/acid + name = "Acid" + priority = 40 + flags = SS_NO_INIT|SS_BACKGROUND + + var/list/currentrun = list() + var/list/processing = list() + +/datum/subsystem/acid/New() + NEW_SS_GLOBAL(SSacid) + + +/datum/subsystem/acid/stat_entry() + ..("P:[processing.len]") + + +/datum/subsystem/acid/fire(resumed = 0) + if (!resumed) + src.currentrun = processing.Copy() + + //cache for sanic speed (lists are references anyways) + var/list/currentrun = src.currentrun + + while (currentrun.len) + var/obj/O = currentrun[currentrun.len] + currentrun.len-- + if (!O || qdeleted(O)) + processing -= O + if (MC_TICK_CHECK) + return + continue + + if(O.acid_level && O.acid_processing()) + else + O.overlays -= acid_overlay + O.priority_overlays -= acid_overlay + processing -= O + + if (MC_TICK_CHECK) + return diff --git a/code/controllers/subsystem/fire_burning.dm b/code/controllers/subsystem/fire_burning.dm new file mode 100644 index 00000000000..2ace744430e --- /dev/null +++ b/code/controllers/subsystem/fire_burning.dm @@ -0,0 +1,42 @@ +var/datum/subsystem/fire_burning/SSfire_burning + +/datum/subsystem/fire_burning + name = "Fire Burning" + priority = 40 + flags = SS_NO_INIT|SS_BACKGROUND + + var/list/currentrun = list() + var/list/processing = list() + +/datum/subsystem/fire_burning/New() + NEW_SS_GLOBAL(SSfire_burning) + + +/datum/subsystem/fire_burning/stat_entry() + ..("P:[processing.len]") + + +/datum/subsystem/fire_burning/fire(resumed = 0) + if (!resumed) + src.currentrun = processing.Copy() + + //cache for sanic speed (lists are references anyways) + var/list/currentrun = src.currentrun + + while(currentrun.len) + var/obj/O = currentrun[currentrun.len] + currentrun.len-- + if (!O || qdeleted(O)) + processing -= O + if (MC_TICK_CHECK) + return + continue + + if(O.resistance_flags & ON_FIRE) + O.take_damage(20, BURN, "fire", 0) + else + processing -= O + + if (MC_TICK_CHECK) + return + diff --git a/code/controllers/subsystem/processing/objects.dm b/code/controllers/subsystem/processing/objects.dm index fbb716ba326..7c4852ea3a2 100644 --- a/code/controllers/subsystem/processing/objects.dm +++ b/code/controllers/subsystem/processing/objects.dm @@ -14,14 +14,13 @@ var/datum/subsystem/objects/SSobj var/list/atom_spawners = list() var/list/processing = list() var/list/currentrun = list() - var/list/burning = list() /datum/subsystem/objects/New() NEW_SS_GLOBAL(SSobj) /datum/subsystem/objects/Initialize(timeofdayl) trigger_atom_spawners() - setupGenetics() + setupGenetics() //to set the mutations' place in structural enzymes, so monkey.initialize() knows where to put the monkey mutation. for(var/thing in world) var/atom/A = thing A.initialize() @@ -55,12 +54,6 @@ var/datum/subsystem/objects/SSobj if (MC_TICK_CHECK) return - for(var/obj/burningobj in SSobj.burning) - if(burningobj && (burningobj.resistance_flags & ON_FIRE)) - if(burningobj.burn_world_time < world.time) - burningobj.burn() - else - SSobj.burning.Remove(burningobj) /datum/subsystem/objects/proc/setup_template_objects(list/objects) trigger_atom_spawners(0, ignore_z=TRUE) @@ -73,5 +66,3 @@ var/datum/subsystem/objects/SSobj atom_spawners = SSobj.atom_spawners if (istype(SSobj.processing)) processing = SSobj.processing - if (istype(SSobj.burning)) - burning = SSobj.burning \ No newline at end of file diff --git a/code/datums/martial/krav_maga.dm b/code/datums/martial/krav_maga.dm index 1370278bf6d..ccd36422e68 100644 --- a/code/datums/martial/krav_maga.dm +++ b/code/datums/martial/krav_maga.dm @@ -172,4 +172,4 @@ datum/martial_art/krav_maga/grab_act(var/mob/living/carbon/human/A, var/mob/livi min_cold_protection_temperature = GLOVES_MIN_TEMP_PROTECT heat_protection = HANDS max_heat_protection_temperature = GLOVES_MAX_TEMP_PROTECT - resistance_flags = FIRE_PROOF \ No newline at end of file + resistance_flags = 0 \ No newline at end of file diff --git a/code/datums/wires/airlock.dm b/code/datums/wires/airlock.dm index c0fdda870dd..ab9a9539c64 100644 --- a/code/datums/wires/airlock.dm +++ b/code/datums/wires/airlock.dm @@ -104,17 +104,21 @@ if(WIRE_POWER1, WIRE_POWER2) // Cut to loose power, repair all to gain power. if(mend && !is_cut(WIRE_POWER1) && !is_cut(WIRE_POWER2)) A.regainMainPower() - A.shock(usr, 50) + if(usr) + A.shock(usr, 50) else A.loseMainPower() - A.shock(usr, 50) + if(usr) + A.shock(usr, 50) if(WIRE_BACKUP1, WIRE_BACKUP2) // Cut to loose backup power, repair all to gain backup power. if(mend && !is_cut(WIRE_BACKUP1) && !is_cut(WIRE_BACKUP2)) A.regainBackupPower() - A.shock(usr, 50) + if(usr) + A.shock(usr, 50) else A.loseBackupPower() - A.shock(usr, 50) + if(usr) + A.shock(usr, 50) if(WIRE_BOLTS) // Cut to drop bolts, mend does nothing. if(!mend) A.bolt() @@ -136,7 +140,8 @@ else if(A.secondsElectrified != -1) A.secondsElectrified = -1 - A.shockedby += text("\[[time_stamp()]\][usr](ckey:[usr.ckey])") + if(usr) + A.shockedby += text("\[[time_stamp()]\][usr](ckey:[usr.ckey])") add_logs(usr, A, "electrified") if(WIRE_SAFETY) // Cut to disable safeties, mend to re-enable. A.safe = mend diff --git a/code/game/atoms.dm b/code/game/atoms.dm index ac83c557ddb..56e2f30c386 100644 --- a/code/game/atoms.dm +++ b/code/game/atoms.dm @@ -62,11 +62,11 @@ return 0 -/atom/proc/attack_hulk(mob/living/carbon/human/hulk, do_attack_animation = 0) - if(do_attack_animation) - hulk.changeNext_move(CLICK_CD_MELEE) - add_logs(hulk, src, "punched", "hulk powers") - hulk.do_attack_animation(src) +/atom/proc/attack_hulk(mob/living/carbon/human/user, does_attack_animation = 0) + if(does_attack_animation) + user.changeNext_move(CLICK_CD_MELEE) + add_logs(user, src, "punched", "hulk powers") + user.do_attack_animation(src) /atom/proc/CheckParts(list/parts_list) for(var/A in parts_list) @@ -211,7 +211,7 @@ /atom/proc/blob_act(obj/structure/blob/B) return -/atom/proc/fire_act() +/atom/proc/fire_act(exposed_temperature, exposed_volume) return /atom/proc/hitby(atom/movable/AM, skipcatch, hitpush, blocked) @@ -371,7 +371,7 @@ var/list/blood_splatter_icons = list() /atom/proc/singularity_pull() return -/atom/proc/acid_act(acidpwr, toxpwr, acid_volume) +/atom/proc/acid_act(acidpwr, acid_volume) return /atom/proc/emag_act() @@ -438,4 +438,7 @@ var/list/blood_splatter_icons = list() /atom/on_varedit(modified_var) if(!Debug2) - admin_spawned = TRUE \ No newline at end of file + admin_spawned = TRUE + +/atom/proc/mech_melee_attack(obj/mecha/M) + return \ No newline at end of file diff --git a/code/game/data_huds.dm b/code/game/data_huds.dm index 8cd3b7d2f89..abdbfb5206b 100644 --- a/code/game/data_huds.dm +++ b/code/game/data_huds.dm @@ -76,10 +76,10 @@ /proc/RoundHealth(mob/living/M) if(M.stat == DEAD || (M.status_flags & FAKEDEATH)) return "health-100" //what's our health? it doesn't matter, we're dead, or faking - var/maxhealth = M.maxHealth + var/maxi_health = M.maxHealth if(iscarbon(M) && M.health < 0) - maxhealth = 100 //so crit shows up right for aliens and other high-health carbon mobs; noncarbons don't have crit. - var/resulthealth = (M.health / maxhealth) * 100 + maxi_health = 100 //so crit shows up right for aliens and other high-health carbon mobs; noncarbons don't have crit. + var/resulthealth = (M.health / maxi_health) * 100 switch(resulthealth) if(100 to INFINITY) return "health100" @@ -302,7 +302,7 @@ var/image/holder = hud_list[DIAG_MECH_HUD] var/icon/I = icon(icon, icon_state, dir) holder.pixel_y = I.Height() - world.icon_size - holder.icon_state = "huddiag[RoundDiagBar(health/initial(health))]" + holder.icon_state = "huddiag[RoundDiagBar(obj_integrity/max_integrity)]" /obj/mecha/proc/diag_hud_set_mechcell() diff --git a/code/game/gamemodes/blob/blob_report.dm b/code/game/gamemodes/blob/blob_report.dm index 95fb000a2c8..750e18a087c 100644 --- a/code/game/gamemodes/blob/blob_report.dm +++ b/code/game/gamemodes/blob/blob_report.dm @@ -58,19 +58,22 @@ for(var/turf/T in block(locate(1,1,1), locate(world.maxx,world.maxy,1))) if(isfloorturf(T)) - if(!(T:burnt)) + var/turf/open/floor/TF = T + if(!(TF.burnt)) src.floor += 12 else src.floor += 1 if(iswallturf(T)) - if(T:intact) + var/turf/closed/wall/TW = T + if(TW.intact) src.wall += 2 else src.wall += 1 if(istype(T, /turf/closed/wall/r_wall)) - if(T:intact) + var/turf/closed/wall/r_wall/TRW = T + if(TRW.intact) src.r_wall += 2 else src.r_wall += 1 @@ -79,8 +82,10 @@ for(var/obj/O in T.contents) if(istype(O, /obj/structure/window)) src.window += 1 - else if(istype(O, /obj/structure/grille) && (!O:destroyed)) - src.grille += 1 + else if(istype(O, /obj/structure/grille)) + var/obj/structure/grille/GR = O + if(!GR.broken) + src.grille += 1 else if(istype(O, /obj/machinery/door)) src.door += 1 else if(istype(O, /obj/machinery)) diff --git a/code/game/gamemodes/blob/blobs/blob_mobs.dm b/code/game/gamemodes/blob/blobs/blob_mobs.dm index 0a751d1bc8d..66a303d6f16 100644 --- a/code/game/gamemodes/blob/blobs/blob_mobs.dm +++ b/code/game/gamemodes/blob/blobs/blob_mobs.dm @@ -39,9 +39,12 @@ H.color = "#000000" adjustHealth(-maxHealth*0.0125) -/mob/living/simple_animal/hostile/blob/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume) +/mob/living/simple_animal/hostile/blob/fire_act(exposed_temperature, exposed_volume) ..() - adjustFireLoss(Clamp(0.01 * exposed_temperature, 1, 5)) + if(exposed_temperature) + adjustFireLoss(Clamp(0.01 * exposed_temperature, 1, 5)) + else + adjustFireLoss(5) /mob/living/simple_animal/hostile/blob/CanPass(atom/movable/mover, turf/target, height = 0) if(istype(mover, /obj/structure/blob)) @@ -87,6 +90,8 @@ verb_yell = "psychically screams" melee_damage_lower = 2 melee_damage_upper = 4 + obj_damage = 20 + environment_smash = 0 attacktext = "hits" attack_sound = 'sound/weapons/genhit1.ogg' flying = 1 @@ -204,7 +209,7 @@ damage_coeff = list(BRUTE = 0.5, BURN = 1, TOX = 1, CLONE = 1, STAMINA = 0, OXY = 1) melee_damage_lower = 20 melee_damage_upper = 20 - obj_damage = 20 + obj_damage = 60 attacktext = "slams" attack_sound = 'sound/effects/blobattack.ogg' verb_say = "gurgles" @@ -234,7 +239,7 @@ damagesources++ if(damagesources) for(var/i in 1 to damagesources) - adjustHealth(maxHealth*0.025) //take 2.5% maxhealth as damage when not near the blob or if the naut has no factory, 5% if both + adjustHealth(maxHealth*0.025) //take 2.5% of max health as damage when not near the blob or if the naut has no factory, 5% if both var/list/viewing = list() for(var/mob/M in viewers(src)) if(M.client) @@ -277,7 +282,7 @@ ..(gibbed) if(factory) factory.naut = null //remove this naut from its factory - factory.maxhealth = initial(factory.maxhealth) + factory.max_integrity = initial(factory.max_integrity) flick("blobbernaut_death", src) /mob/living/simple_animal/hostile/blob/blobbernaut/independent diff --git a/code/game/gamemodes/blob/blobs/core.dm b/code/game/gamemodes/blob/blobs/core.dm index 082f36b64d5..2bc1f1bb12f 100644 --- a/code/game/gamemodes/blob/blobs/core.dm +++ b/code/game/gamemodes/blob/blobs/core.dm @@ -3,8 +3,9 @@ icon = 'icons/mob/blob.dmi' icon_state = "blank_blob" desc = "A huge, pulsating yellow mass." - health = 400 - maxhealth = 400 + obj_integrity = 400 + max_integrity = 400 + armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 75, acid = 90) explosion_block = 6 point_return = -1 health_regen = 0 //we regen in Life() instead of when pulsed @@ -48,18 +49,15 @@ poi_list -= src return ..() -/obj/structure/blob/core/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume) - exposed_temperature *= 0.5 - ..() - /obj/structure/blob/core/ex_act(severity, target) var/damage = 50 - 10 * severity //remember, the core takes half brute damage, so this is 20/15/10 damage based on severity - take_damage(damage, BRUTE) + take_damage(damage, BRUTE, "bomb", 0) -/obj/structure/blob/core/check_health() - ..() - if(overmind) //we should have an overmind, but... - overmind.update_health_hud() +/obj/structure/blob/core/take_damage(damage_amount, damage_type = BRUTE, damage_flag = 0, sound_effect = 1, attack_dir, overmind_reagent_trigger = 1) + . = ..() + if(obj_integrity > 0) + if(overmind) //we should have an overmind, but... + overmind.update_health_hud() /obj/structure/blob/core/Life() if(qdeleted(src)) @@ -70,7 +68,7 @@ if(resource_delay <= world.time) resource_delay = world.time + 10 // 1 second overmind.add_points(point_rate) - health = min(maxhealth, health+core_regen) + obj_integrity = min(max_integrity, obj_integrity+core_regen) if(overmind) overmind.update_health_hud() Pulse_Area(overmind, 12, 4, 3) diff --git a/code/game/gamemodes/blob/blobs/factory.dm b/code/game/gamemodes/blob/blobs/factory.dm index 99d31d97b7e..cc0749d0c68 100644 --- a/code/game/gamemodes/blob/blobs/factory.dm +++ b/code/game/gamemodes/blob/blobs/factory.dm @@ -3,8 +3,8 @@ icon = 'icons/mob/blob.dmi' icon_state = "blob_factory" desc = "A thick spire of tendrils." - health = 200 - maxhealth = 200 + obj_integrity = 200 + max_integrity = 200 health_regen = 1 point_return = 25 var/list/spores = list() diff --git a/code/game/gamemodes/blob/blobs/node.dm b/code/game/gamemodes/blob/blobs/node.dm index 60b517b0f6d..9fa7664e8f2 100644 --- a/code/game/gamemodes/blob/blobs/node.dm +++ b/code/game/gamemodes/blob/blobs/node.dm @@ -3,8 +3,9 @@ icon = 'icons/mob/blob.dmi' icon_state = "blank_blob" desc = "A large, pulsating yellow mass." - health = 200 - maxhealth = 200 + obj_integrity = 200 + max_integrity = 200 + armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 65, acid = 90) health_regen = 3 point_return = 25 @@ -32,10 +33,6 @@ STOP_PROCESSING(SSobj, src) return ..() -/obj/structure/blob/node/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume) - exposed_temperature *= 0.75 - ..() - /obj/structure/blob/node/Life() Pulse_Area(overmind, 10, 3, 2) color = null diff --git a/code/game/gamemodes/blob/blobs/resource.dm b/code/game/gamemodes/blob/blobs/resource.dm index ff6bd736eaf..bcb6d8a8fd7 100644 --- a/code/game/gamemodes/blob/blobs/resource.dm +++ b/code/game/gamemodes/blob/blobs/resource.dm @@ -3,8 +3,8 @@ icon = 'icons/mob/blob.dmi' icon_state = "blob_resource" desc = "A thin spire of slightly swaying tendrils." - health = 60 - maxhealth = 60 + obj_integrity = 60 + max_integrity = 60 point_return = 15 var/resource_delay = 0 diff --git a/code/game/gamemodes/blob/blobs/shield.dm b/code/game/gamemodes/blob/blobs/shield.dm index b7c8d8192ae..45d40dd019e 100644 --- a/code/game/gamemodes/blob/blobs/shield.dm +++ b/code/game/gamemodes/blob/blobs/shield.dm @@ -3,12 +3,14 @@ icon = 'icons/mob/blob.dmi' icon_state = "blob_shield" desc = "A solid wall of slightly twitching tendrils." - health = 150 - maxhealth = 150 + obj_integrity = 150 + max_integrity = 150 brute_resist = 0.25 explosion_block = 3 point_return = 4 atmosblock = 1 + armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 90, acid = 90) + /obj/structure/blob/shield/scannerreport() @@ -16,15 +18,12 @@ return "Will prevent the spread of atmospheric changes." return "N/A" -/obj/structure/blob/shield/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume) - return - /obj/structure/blob/shield/core point_return = 0 /obj/structure/blob/shield/update_icon() ..() - if(health <= 75) + if(obj_integrity <= 75) icon_state = "blob_shield_damaged" name = "weakened strong blob" desc = "A wall of twitching tendrils." diff --git a/code/game/gamemodes/blob/overmind.dm b/code/game/gamemodes/blob/overmind.dm index e9ab0a757e8..5fb0187ccda 100644 --- a/code/game/gamemodes/blob/overmind.dm +++ b/code/game/gamemodes/blob/overmind.dm @@ -104,10 +104,10 @@ /mob/camera/blob/update_health_hud() if(blob_core) - hud_used.healths.maptext = "
[round(blob_core.health)]
" + hud_used.healths.maptext = "
[round(blob_core.obj_integrity)]
" for(var/mob/living/simple_animal/hostile/blob/blobbernaut/B in blob_mobs) if(B.hud_used && B.hud_used.blobpwrdisplay) - B.hud_used.blobpwrdisplay.maptext = "
[round(blob_core.health)]
" + B.hud_used.blobpwrdisplay.maptext = "
[round(blob_core.obj_integrity)]
" /mob/camera/blob/proc/add_points(points) blob_points = Clamp(blob_points + points, 0, max_blob_points) @@ -157,7 +157,7 @@ ..() if(statpanel("Status")) if(blob_core) - stat(null, "Core Health: [blob_core.health]") + stat(null, "Core Health: [blob_core.obj_integrity]") stat(null, "Power Stored: [blob_points]/[max_blob_points]") if(ticker && istype(ticker.mode, /datum/game_mode/blob)) var/datum/game_mode/blob/B = ticker.mode diff --git a/code/game/gamemodes/blob/powers.dm b/code/game/gamemodes/blob/powers.dm index fa7d3a14987..8cdca0ae62d 100644 --- a/code/game/gamemodes/blob/powers.dm +++ b/code/game/gamemodes/blob/powers.dm @@ -148,13 +148,14 @@ if(B.naut) //if it already made a blobbernaut, it can't do it again src << "This factory blob is already sustaining a blobbernaut." return - if(B.health < B.maxhealth * 0.5) + if(B.obj_integrity < B.max_integrity * 0.5) src << "This factory blob is too damaged to sustain a blobbernaut." return if(!can_buy(40)) return - B.maxhealth = initial(B.maxhealth) * 0.25 //factories that produced a blobbernaut have much lower health - B.check_health() + B.max_integrity = initial(B.max_integrity) * 0.25 //factories that produced a blobbernaut have much lower health + B.obj_integrity = min(B.obj_integrity, B.max_integrity) + B.update_icon() B.visible_message("The blobbernaut [pick("rips", "tears", "shreds")] its way out of the factory blob!") playsound(B.loc, 'sound/effects/splat.ogg', 50, 1) var/mob/living/simple_animal/hostile/blob/blobbernaut/blobber = new /mob/living/simple_animal/hostile/blob/blobbernaut(get_turf(B)) diff --git a/code/game/gamemodes/blob/theblob.dm b/code/game/gamemodes/blob/theblob.dm index 7f2e732eade..fc5ed905fb8 100644 --- a/code/game/gamemodes/blob/theblob.dm +++ b/code/game/gamemodes/blob/theblob.dm @@ -9,8 +9,9 @@ anchored = 1 layer = BELOW_MOB_LAYER var/point_return = 0 //How many points the blob gets back when it removes a blob of that type. If less than 0, blob cannot be removed. - var/health = 30 - var/maxhealth = 30 + obj_integrity = 30 + max_integrity = 30 + armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 80, acid = 70) var/health_regen = 2 //how much health this blob regens when pulsed var/pulse_timestamp = 0 //we got pulsed when? var/heal_timestamp = 0 //we got healed when? @@ -27,11 +28,10 @@ blobs += src //Keep track of the blob in the normal list either way setDir(pick(cardinal)) update_icon() - ..(loc) + ..() ConsumeTile() if(atmosblock) air_update_turf(1) - return /obj/structure/blob/proc/creation_action() //When it's created by the overmind, do this. return @@ -45,6 +45,8 @@ playsound(src.loc, 'sound/effects/splat.ogg', 50, 1) //Expand() is no longer broken, no check necessary. return ..() +/obj/structure/blob/blob_act() + return /obj/structure/blob/Adjacent(var/atom/neighbour) . = ..() @@ -79,13 +81,6 @@ var/atom/movable/mover = caller . = . || mover.checkpass(PASSBLOB) -/obj/structure/blob/proc/check_health(cause) - health = Clamp(health, 0, maxhealth) - if(health <= 0) - if(overmind) - overmind.blob_reagent_datum.death_reaction(src, cause) - qdel(src) //we dead now - /obj/structure/blob/update_icon() //Updates color based on overmind color if we have an overmind. if(overmind) color = overmind.blob_reagent_datum.color @@ -133,7 +128,7 @@ if(pulse_timestamp <= world.time) ConsumeTile() if(heal_timestamp <= world.time) - health = min(maxhealth, health+health_regen) + obj_integrity = min(max_integrity, obj_integrity+health_regen) heal_timestamp = world.time + 20 update_icon() pulse_timestamp = world.time + 10 @@ -210,17 +205,6 @@ blob_attack_animation(T, controller) //if we can't, animate that we attacked return null - -/obj/structure/blob/ex_act(severity, target) - ..() - var/damage = 150 - 20 * severity - take_damage(damage, BRUTE) - -/obj/structure/blob/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume) - ..() - var/damage = Clamp(0.01 * exposed_temperature, 0, 4) - take_damage(damage, BURN) - /obj/structure/blob/emp_act(severity) if(severity > 0) if(overmind) @@ -232,20 +216,15 @@ ..() if(overmind) if(overmind.blob_reagent_datum.tesla_reaction(src, power)) - take_damage(power/400, BURN) + take_damage(power/400, BURN, "energy") else - take_damage(power/400, BURN) + take_damage(power/400, BURN, "energy") /obj/structure/blob/extinguish() ..() if(overmind) overmind.blob_reagent_datum.extinguish_reaction(src) -/obj/structure/blob/bullet_act(var/obj/item/projectile/Proj) - ..() - take_damage(Proj.damage, Proj.damage_type, Proj) - return 0 - /obj/structure/blob/attackby(obj/item/I, mob/user, params) if(istype(I, /obj/item/device/analyzer)) user.changeNext_move(CLICK_CD_MELEE) @@ -266,53 +245,50 @@ /obj/structure/blob/proc/typereport(mob/user) user << "Blob Type: [uppertext(initial(name))]" - user << "Health: [health]/[maxhealth]" + user << "Health: [obj_integrity]/[max_integrity]" user << "Effects: [scannerreport()]" -/obj/structure/blob/attacked_by(obj/item/I, mob/living/user) - user.changeNext_move(CLICK_CD_MELEE) - user.do_attack_animation(src) - playsound(src.loc, 'sound/effects/attackblob.ogg', 50, 1) - visible_message("[user] has attacked the [src.name] with \the [I]!") - if(I.damtype == BURN) - playsound(src.loc, 'sound/items/Welder.ogg', 100, 1) - take_damage(I.force, I.damtype, user) - /obj/structure/blob/attack_animal(mob/living/simple_animal/M) if("blob" in M.faction) //sorry, but you can't kill the blob as a blobbernaut return - M.changeNext_move(CLICK_CD_MELEE) - M.do_attack_animation(src) - playsound(src.loc, 'sound/effects/attackblob.ogg', 50, 1) - visible_message("\The [M] has attacked the [src.name]!") - var/damage = rand(M.melee_damage_lower, M.melee_damage_upper) - take_damage(damage, M.melee_damage_type, M) - return + ..() -/obj/structure/blob/attack_alien(mob/living/carbon/alien/humanoid/M) - M.changeNext_move(CLICK_CD_MELEE) - M.do_attack_animation(src) - playsound(src.loc, 'sound/effects/attackblob.ogg', 50, 1) - visible_message("[M] has slashed the [src.name]!") - var/damage = rand(15, 30) - take_damage(damage, BRUTE, M) - return - -/obj/structure/blob/proc/take_damage(damage, damage_type, cause = null, overmind_reagent_trigger = 1) - switch(damage_type) //blobs only take brute and burn damage +/obj/structure/blob/play_attack_sound(damage_amount, damage_type = BRUTE, damage_flag = 0) + switch(damage_type) if(BRUTE) - damage = max(damage * brute_resist, 0) + if(damage_amount) + playsound(src.loc, 'sound/effects/attackblob.ogg', 50, 1) + else + playsound(src, 'sound/weapons/tap.ogg', 50, 1) if(BURN) - damage = max(damage * fire_resist, 0) - if(CLONE) //this is basically a marker for 'don't modify the damage' + playsound(src.loc, 'sound/items/Welder.ogg', 100, 1) +/obj/structure/blob/run_obj_armor(damage_amount, damage_type, damage_flag = 0, attack_dir) + switch(damage_type) + if(BRUTE) + damage_amount *= brute_resist + if(BURN) + damage_amount *= fire_resist + if(CLONE) else - damage = 0 - if(overmind && overmind_reagent_trigger) - damage = overmind.blob_reagent_datum.damage_reaction(src, health, damage, damage_type, cause) //pass the blob, its health before damage, the damage being done, the type of damage being done, and the cause. - health -= damage - update_icon() - check_health(cause) + return 0 + var/armor_protection = 0 + if(damage_flag) + armor_protection = armor[damage_flag] + damage_amount = round(damage_amount * (100 - armor_protection)*0.01, 0.1) + if(overmind && damage_flag) + damage_amount = overmind.blob_reagent_datum.damage_reaction(src, damage_amount, damage_type, damage_flag) + return damage_amount + +/obj/structure/blob/take_damage(damage_amount, damage_type = BRUTE, damage_flag = 0, sound_effect = 1, attack_dir) + . = ..() + if(. && obj_integrity > 0) + update_icon() + +/obj/structure/blob/obj_destruction(damage_flag) + if(overmind) + overmind.blob_reagent_datum.death_reaction(src, damage_flag) + ..() /obj/structure/blob/proc/change_to(type, controller) if(!ispath(type)) @@ -349,19 +325,19 @@ name = "normal blob" icon_state = "blob" luminosity = 0 - health = 21 - maxhealth = 25 + obj_integrity = 21 + max_integrity = 25 health_regen = 1 brute_resist = 0.25 /obj/structure/blob/normal/scannerreport() - if(health <= 15) + if(obj_integrity <= 15) return "Currently weak to brute damage." return "N/A" /obj/structure/blob/normal/update_icon() ..() - if(health <= 15) + if(obj_integrity <= 15) icon_state = "blob_damaged" name = "fragile blob" desc = "A thin lattice of slightly twitching tendrils." diff --git a/code/game/gamemodes/changeling/powers/mutations.dm b/code/game/gamemodes/changeling/powers/mutations.dm index d0ed5163056..6849bf58545 100644 --- a/code/game/gamemodes/changeling/powers/mutations.dm +++ b/code/game/gamemodes/changeling/powers/mutations.dm @@ -165,7 +165,7 @@ return if(istype(target, /obj/structure/table)) var/obj/structure/table/T = target - T.table_destroy() + T.deconstruct(FALSE) else if(istype(target, /obj/machinery/computer)) var/obj/machinery/computer/C = target diff --git a/code/game/gamemodes/changeling/powers/shriek.dm b/code/game/gamemodes/changeling/powers/shriek.dm index e9e28c37a4d..3d3bbc634ee 100644 --- a/code/game/gamemodes/changeling/powers/shriek.dm +++ b/code/game/gamemodes/changeling/powers/shriek.dm @@ -23,7 +23,7 @@ for(var/obj/machinery/light/L in range(4, user)) L.on = 1 - L.broken() + L.break_light_tube() feedback_add_details("changeling_powers","RS") return 1 @@ -38,7 +38,7 @@ /obj/effect/proc_holder/changeling/dissonant_shriek/sting_action(mob/user) for(var/obj/machinery/light/L in range(5, usr)) L.on = 1 - L.broken() + L.break_light_tube() empulse(get_turf(user), 2, 5, 1) return 1 diff --git a/code/game/gamemodes/clock_cult/clock_items.dm b/code/game/gamemodes/clock_cult/clock_items.dm index b1bea18a140..1e50517e920 100644 --- a/code/game/gamemodes/clock_cult/clock_items.dm +++ b/code/game/gamemodes/clock_cult/clock_items.dm @@ -636,10 +636,10 @@ strip_delay = 50 put_on_delay = 30 body_parts_covered = ARMS - resistance_flags = FIRE_PROOF + resistance_flags = 0 siemens_coefficient = 0 permeability_coefficient = 0.05 - armor = list(melee = 80, bullet = 50, laser = -15, energy = 0, bomb = 35, bio = 0, rad = 0, fire = 20, acid = 20) + armor = list(melee = 80, bullet = 50, laser = -15, energy = 0, bomb = 35, bio = 0, rad = 0, fire = 70, acid = 20) /obj/item/clothing/gloves/clockwork/mob_can_equip(mob/M, mob/equipper, slot, disable_warning = 0) if(equipper && !is_servant_of_ratvar(equipper)) @@ -671,7 +671,7 @@ w_class = 3 strip_delay = 50 put_on_delay = 30 - resistance_flags = FIRE_PROOF + resistance_flags = 0 /obj/item/clothing/shoes/clockwork/mob_can_equip(mob/M, mob/equipper, slot, disable_warning = 0) if(equipper && !is_servant_of_ratvar(equipper)) diff --git a/code/game/gamemodes/clock_cult/clock_machines.dm b/code/game/gamemodes/clock_cult/clock_machines.dm index 4509cf916c8..1082d9e8bb9 100644 --- a/code/game/gamemodes/clock_cult/clock_machines.dm +++ b/code/game/gamemodes/clock_cult/clock_machines.dm @@ -138,8 +138,8 @@ active_icon = "mending_motor" inactive_icon = "mending_motor_inactive" construction_value = 20 - max_health = 125 - health = 125 + max_integrity = 125 + obj_integrity = 125 break_message = "The prism collapses with a heavy thud!" debris = list(/obj/item/clockwork/alloy_shards/small = 5, \ /obj/item/clockwork/alloy_shards/medium = 1, \ @@ -196,11 +196,11 @@ W.adjustHealth(-15) else if(istype(M, /obj/structure/destructible/clockwork)) var/obj/structure/destructible/clockwork/C = M - if(C.health == C.max_health) + if(C.obj_integrity == C.max_integrity) continue if(!try_use_power(structure_cost)) break - C.health = min(C.health + 15, C.max_health) + C.obj_integrity = min(C.obj_integrity + 15, C.max_integrity) else if(issilicon(M)) var/mob/living/silicon/S = M if(S.health == S.maxHealth || S.stat == DEAD || !is_servant_of_ratvar(S)) @@ -243,8 +243,8 @@ active_icon = "mania_motor" inactive_icon = "mania_motor_inactive" construction_value = 20 - max_health = 80 - health = 80 + max_integrity = 80 + obj_integrity = 80 break_message = "The antenna break off, leaving a pile of shards!" debris = list(/obj/item/clockwork/alloy_shards/large = 1, \ /obj/item/clockwork/alloy_shards/small = 3, \ @@ -505,8 +505,8 @@ active_icon = "obelisk" inactive_icon = "obelisk_inactive" construction_value = 20 - max_health = 150 - health = 150 + max_integrity = 150 + obj_integrity = 150 break_message = "The obelisk falls to the ground, undamaged!" debris = list(/obj/item/clockwork/alloy_shards/small = 3, \ /obj/item/clockwork/component/hierophant_ansible/obelisk = 1) diff --git a/code/game/gamemodes/clock_cult/clock_mobs.dm b/code/game/gamemodes/clock_cult/clock_mobs.dm index 025c1a14765..3a79edc3139 100644 --- a/code/game/gamemodes/clock_cult/clock_mobs.dm +++ b/code/game/gamemodes/clock_cult/clock_mobs.dm @@ -115,11 +115,11 @@ health = 300 //Health is very high, and under most cases it will take enough fatigue to be forced to recall first maxHealth = 300 speed = 1 + obj_damage = 40 melee_damage_lower = 10 melee_damage_upper = 10 attacktext = "slashes" attack_sound = 'sound/weapons/bladeslice.ogg' - environment_smash = 1 weather_immunities = list("lava") flying = 1 loot = list(/obj/item/clockwork/component/replicant_alloy/fallen_armor) diff --git a/code/game/gamemodes/clock_cult/clock_proselytizer.dm b/code/game/gamemodes/clock_cult/clock_proselytizer.dm index 404452d064d..9b3756e5a63 100644 --- a/code/game/gamemodes/clock_cult/clock_proselytizer.dm +++ b/code/game/gamemodes/clock_cult/clock_proselytizer.dm @@ -257,7 +257,7 @@ /obj/structure/grille/proselytize_vals(mob/living/user, obj/item/clockwork/clockwork_proselytizer/proselytizer) var/grilletype = /obj/structure/grille/ratvar var/prosel_time = 15 - if(destroyed) + if(broken) grilletype = /obj/structure/grille/ratvar/broken prosel_time = 5 return list("operation_time" = prosel_time, "new_obj_type" = grilletype, "alloy_cost" = 0, "spawn_dir" = dir) @@ -273,10 +273,10 @@ if(!can_be_repaired) user << "[src] cannot be repaired with a proselytizer!" return - if(health == max_health) + if(obj_integrity == max_integrity) user << "[src] is at maximum integrity!" return - var/amount_to_heal = max_health - health + var/amount_to_heal = max_integrity - obj_integrity var/healing_for_cycle = min(amount_to_heal, repair_amount) if(!proselytizer.can_use_alloy(0)) healing_for_cycle = min(healing_for_cycle, proselytizer.stored_alloy) @@ -288,8 +288,8 @@ "You start repairing [src]...") //hugeass while because we need to re-check after the do_after proselytizer.repairing = src - while(proselytizer && user && src && health != max_health) - amount_to_heal = max_health - health + while(proselytizer && user && src && obj_integrity != max_integrity) + amount_to_heal = max_integrity - obj_integrity if(!amount_to_heal) break healing_for_cycle = min(amount_to_heal, repair_amount) @@ -298,7 +298,7 @@ proselytizer_cost = healing_for_cycle*2 if(!proselytizer.can_use_alloy(proselytizer_cost) || !do_after(user, proselytizer_cost, target = src) || !proselytizer || !proselytizer.can_use_alloy(proselytizer_cost)) break - amount_to_heal = max_health - health + amount_to_heal = max_integrity - obj_integrity if(!amount_to_heal) break healing_for_cycle = min(amount_to_heal, repair_amount) @@ -307,7 +307,7 @@ proselytizer_cost = healing_for_cycle*2 if(!proselytizer.can_use_alloy(proselytizer_cost)) break - health += healing_for_cycle + obj_integrity += healing_for_cycle proselytizer.modify_stored_alloy(-proselytizer_cost) playsound(src, 'sound/machines/click.ogg', 50, 1) @@ -315,7 +315,7 @@ proselytizer.repairing = null if(user) user.visible_message("[user]'s [proselytizer.name] stops covering [src] with black liquid metal.", \ - "You finish repairing [src]. It is now at [health]/[max_health] integrity.") + "You finish repairing [src]. It is now at [obj_integrity]/[max_integrity] integrity.") return /obj/structure/destructible/clockwork/cache/proselytize_vals(mob/living/user, obj/item/clockwork/clockwork_proselytizer/proselytizer) diff --git a/code/game/gamemodes/clock_cult/clock_ratvar.dm b/code/game/gamemodes/clock_cult/clock_ratvar.dm index ec558de31a1..5bab32a7822 100644 --- a/code/game/gamemodes/clock_cult/clock_ratvar.dm +++ b/code/game/gamemodes/clock_cult/clock_ratvar.dm @@ -4,7 +4,6 @@ layer = MASSIVE_OBJ_LAYER density = FALSE resistance_flags = LAVA_PROOF | FIRE_PROOF | ACID_PROOF - /obj/structure/destructible/clockwork/massive/New() ..() poi_list += src @@ -20,8 +19,8 @@ name = "Gateway to the Celestial Derelict" desc = "A massive, thrumming rip in spacetime." clockwork_desc = "A portal to the Celestial Derelict. Massive and intimidating, it is the only thing that can both transport Ratvar and withstand the massive amount of energy he emits." - health = 500 - max_health = 500 + obj_integrity = 500 + max_integrity = 500 mouse_opacity = 2 icon = 'icons/effects/clockwork_effects.dmi' icon_state = "nothing" @@ -59,17 +58,18 @@ countdown = null . = ..() -/obj/structure/destructible/clockwork/massive/celestial_gateway/destroyed() - countdown.stop() - visible_message("The [src] begins to pulse uncontrollably... you might want to run!") - world << sound('sound/effects/clockcult_gateway_disrupted.ogg', 0, channel = 8, volume = 50) - make_glow() - glow.icon_state = "clockwork_gateway_disrupted" - takes_damage = FALSE - sleep(27) - explosion(src, 1, 3, 8, 8) +/obj/structure/destructible/clockwork/massive/celestial_gateway/deconstruct(disassembled = TRUE) + if(!(flags & NODECONSTRUCT)) + if(!disassembled) + countdown.stop() + visible_message("The [src] begins to pulse uncontrollably... you might want to run!") + world << sound('sound/effects/clockcult_gateway_disrupted.ogg', 0, channel = 8, volume = 50) + make_glow() + glow.icon_state = "clockwork_gateway_disrupted" + resistance_flags |= INDESTRUCTIBLE + sleep(27) + explosion(src, 1, 3, 8, 8) qdel(src) - return 1 /obj/structure/destructible/clockwork/massive/celestial_gateway/proc/make_glow() if(!glow) @@ -77,12 +77,12 @@ glow.linked = src /obj/structure/destructible/clockwork/massive/celestial_gateway/ex_act(severity) - var/damage = max((health * 0.70) / severity, 100) //requires multiple bombs to take down - take_damage(damage, BRUTE) + var/damage = max((obj_integrity * 0.70) / severity, 100) //requires multiple bombs to take down + take_damage(damage, BRUTE, "bomb", 0) /obj/structure/destructible/clockwork/massive/celestial_gateway/proc/get_arrival_text(s_on_time) . = "IMMINENT" - if(!health) + if(!obj_integrity) . = "DETONATING" else if(GATEWAY_RATVAR_ARRIVAL - progress_in_seconds > 0) . = "[round(max((GATEWAY_RATVAR_ARRIVAL - progress_in_seconds) / (GATEWAY_SUMMON_RATE * 0.5), 0), 1)][s_on_time ? "S":""]" @@ -91,7 +91,7 @@ if(!progress_in_seconds || prob(7)) for(var/M in mob_list) M << "You hear otherworldly sounds from the [dir2text(get_dir(get_turf(M), get_turf(src)))]..." - if(!health) + if(!obj_integrity) return 0 progress_in_seconds += GATEWAY_SUMMON_RATE switch(progress_in_seconds) @@ -116,7 +116,7 @@ if(GATEWAY_RATVAR_ARRIVAL to INFINITY) if(!purpose_fulfilled) countdown.stop() - takes_damage = FALSE + resistance_flags |= INDESTRUCTIBLE purpose_fulfilled = TRUE make_glow() animate(glow, transform = matrix() * 1.5, alpha = 255, time = 125) @@ -191,7 +191,7 @@ icon_state = "ratvar" pixel_x = -235 pixel_y = -248 - takes_damage = FALSE + resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF appearance_flags = 0 var/atom/prey //Whatever Ratvar is chasing var/clashing = FALSE //If Ratvar is FUCKING FIGHTING WITH NAR-SIE diff --git a/code/game/gamemodes/clock_cult/clock_scripture.dm b/code/game/gamemodes/clock_cult/clock_scripture.dm index 5097607dfbe..c4a9ac43093 100644 --- a/code/game/gamemodes/clock_cult/clock_scripture.dm +++ b/code/game/gamemodes/clock_cult/clock_scripture.dm @@ -535,7 +535,7 @@ Judgement: 10 servants, 100 CV, and any existing AIs are converted or destroyed if(BP.heal_damage(power_damage, power_damage, 1, 0)) //heals one point of burn and brute for every ~100W drained on augumented limbs H.update_damage_overlays() else - if(BP.take_damage(0, power_damage)) + if(BP.receive_damage(0, power_damage)) H.update_damage_overlays() else if(isanimal(invoker)) var/mob/living/simple_animal/A = invoker diff --git a/code/game/gamemodes/clock_cult/clock_structures.dm b/code/game/gamemodes/clock_cult/clock_structures.dm index 69aead38fc3..85b8d284827 100644 --- a/code/game/gamemodes/clock_cult/clock_structures.dm +++ b/code/game/gamemodes/clock_cult/clock_structures.dm @@ -41,24 +41,16 @@ desc = clockwork_desc ..() desc = initial(desc) - if(takes_damage) + if(!(resistance_flags & INDESTRUCTIBLE)) var/t_It = they_pronoun(TRUE) var/t_is = get_is() - var/servant_message = "[t_It] [t_is] at [health]/[max_health] integrity" - var/other_message = "[t_It] seems pristine and undamaged" + var/servant_message = "[t_It] [t_is] at [obj_integrity]/[max_integrity] integrity" var/heavily_damaged = FALSE - var/healthpercent = (health/max_health) * 100 - if(healthpercent >= 100) - other_message = "[t_It] seems pristine and undamaged" - else if(healthpercent >= 50) - other_message = "[t_It] looks slightly dented" - else if(healthpercent >= 25) - other_message = "[t_It] appears heavily damaged" + var/healthpercent = (obj_integrity/max_integrity) * 100 + if(healthpercent < 50) heavily_damaged = TRUE - else if(healthpercent >= 0) - other_message = "[t_It] [t_is] falling apart" - heavily_damaged = TRUE - user << "[can_see_clockwork ? "[servant_message]":"[other_message]"][heavily_damaged ? "!":"."]" + if(can_see_clockwork) + user << "[servant_message][heavily_damaged ? "!":"."]" /obj/structure/destructible/clockwork/cache //Tinkerer's cache: Stores components for later use. name = "tinkerer's cache" @@ -68,8 +60,8 @@ icon_state = "tinkerers_cache" construction_value = 10 break_message = "The cache's fire winks out before it falls in on itself!" - max_health = 80 - health = 80 + max_integrity = 80 + obj_integrity = 80 var/wall_generation_cooldown var/turf/closed/wall/clockwork/linkedwall //if we've got a linked wall and are producing @@ -91,8 +83,8 @@ cache_check(i) return ..() -/obj/structure/destructible/clockwork/cache/destroyed() - if(takes_damage) +/obj/structure/destructible/clockwork/cache/deconstruct(disassembled = TRUE) + if(!(flags & NODECONSTRUCT)) for(var/I in src) var/atom/movable/A = I A.forceMove(get_turf(src)) //drop any daemons we have @@ -178,8 +170,8 @@ desc = "A large brass eye with tendrils trailing below it and a wide red iris." clockwork_desc = "A fragile turret that will deal sustained damage to any non-faithful it sees." icon_state = "ocular_warden" - health = 25 - max_health = 25 + obj_integrity = 25 + max_integrity = 25 construction_value = 15 layer = HIGH_OBJ_LAYER break_message = "The warden's eye gives a glare of utter hate before falling dark!" @@ -189,7 +181,6 @@ var/sight_range = 3 var/atom/movable/target var/list/idle_messages = list(" sulkily glares around.", " lazily drifts from side to side.", " looks around for something to burn.", " slowly turns in circles.") - var/mech_damage_cycle = 0 //so that people in mechs don't get murderspammed with messages /obj/structure/destructible/clockwork/ocular_warden/New() ..() @@ -220,14 +211,9 @@ L.adjust_fire_stacks(damage_per_tick) L.IgniteMob() else if(istype(target,/obj/mecha)) - var/sending_message = FALSE - if(mech_damage_cycle > 1) - mech_damage_cycle = 0 - sending_message = TRUE - else - mech_damage_cycle++ var/obj/mecha/M = target - M.take_directional_damage(damage_per_tick, "fire", get_dir(src, M), 0, 1, sending_message) + M.take_damage(damage_per_tick, BURN, "melee", 1, get_dir(src, M)) //does about half of standard damage to mechs * whatever their fire armor is + setDir(get_dir(get_turf(src), get_turf(target))) if(!target) if(validtargets.len) @@ -265,7 +251,6 @@ /obj/structure/destructible/clockwork/ocular_warden/proc/lose_target() if(!target) return 0 - mech_damage_cycle = 0 target = null visible_message("[src] settles and seems almost disappointed.") return 1 @@ -275,8 +260,7 @@ construction_value = 0 anchored = 0 density = 0 - takes_damage = FALSE - resistance_flags = LAVA_PROOF | FIRE_PROOF | ACID_PROOF + resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ACID_PROOF var/mobtype = /mob/living/simple_animal/hostile/clockwork var/spawn_message = " is an error and you should yell at whoever spawned this shell." @@ -324,8 +308,8 @@ name = "massive gear" icon_state = "wall_gear" climbable = TRUE - max_health = 50 - health = 50 + max_integrity = 50 + obj_integrity = 50 desc = "A massive brass gear. You could probably secure or unsecure it with a wrench, or just climb over it." clockwork_desc = "A massive brass gear. You could probably secure or unsecure it with a wrench, just climb over it, or proselytize it into replicant alloy." break_message = "The gear breaks apart into shards of alloy!" @@ -389,7 +373,7 @@ anchored = 1 density = 0 opacity = 0 - resistance_flags = LAVA_PROOF | FIRE_PROOF | UNACIDABLE + resistance_flags = LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF /obj/effect/clockwork/New() ..() @@ -697,8 +681,6 @@ icon_state = "sigil" layer = LOW_OBJ_LAYER alpha = 50 - resistance_flags = FIRE_PROOF - burntime = 1 var/affects_servants = FALSE var/stat_affected = CONSCIOUS var/resist_string = "glows blinding white" //string for when a null rod blocks its effects, "glows [resist_string]" diff --git a/code/game/gamemodes/cult/cult_structures.dm b/code/game/gamemodes/cult/cult_structures.dm index c01036257ff..a17ccbb04eb 100644 --- a/code/game/gamemodes/cult/cult_structures.dm +++ b/code/game/gamemodes/cult/cult_structures.dm @@ -7,37 +7,24 @@ debris = list(/obj/item/stack/sheet/runed_metal = 1) /obj/structure/destructible/cult/examine(mob/user) - var/can_see_cult = iscultist(user) || isobserver(user) ..() - if(takes_damage) - var/t_It = they_pronoun(TRUE) - var/t_is = get_is() - var/cultist_message = "[t_It] [t_is] at [health]/[max_health] stability" - var/other_message = "[t_It] seems extremely stable" - var/heavily_damaged = FALSE - var/healthpercent = (health/max_health) * 100 - if(healthpercent >= 100) - other_message = "[t_It] seems extremely stable" - else if(healthpercent >= 50) - other_message = "[t_It] looks slightly unstable" - else if(healthpercent >= 25) - other_message = "[t_It] appears very unstable" - heavily_damaged = TRUE - else if(healthpercent >= 0) - other_message = "[t_It] [t_is] glowing faintly and is extremely unstable" - heavily_damaged = TRUE - user << "[heavily_damaged ? "":""][can_see_cult ? "[cultist_message]":"[other_message]"][heavily_damaged ? "!":"."]" + var/can_see_cult = iscultist(user) || isobserver(user) + var/t_It = they_pronoun(TRUE) + var/t_is = get_is() + if(!(resistance_flags & INDESTRUCTIBLE)) + if(can_see_cult) + user << "[t_It] [t_is] at [round(obj_integrity * 100 / max_integrity)]% stability" user << "\The [src] is [anchored ? "":"not "]secured to the floor." if(can_see_cult && cooldowntime > world.time) - user << "The magic in [src] is too weak, [they_pronoun()] will be ready to use again in [getETA()]." + user << "The magic in [src] is too weak, [t_It] will be ready to use again in [getETA()]." /obj/structure/destructible/cult/attack_animal(mob/living/simple_animal/M) if(istype(M, /mob/living/simple_animal/hostile/construct/builder)) - if(health < max_health) - health = min(max_health, health + 5) + if(obj_integrity < max_integrity) + obj_integrity = min(max_integrity, obj_integrity + 5) Beam(M, icon_state="sendbeam", time=4) M.visible_message("[M] repairs \the [src].", \ - "You repair [src], leaving [they_pronoun()] at [health]/[max_health] stability.") + "You repair [src], leaving [they_pronoun()] at [round(obj_integrity * 100 / max_integrity)]% stability.") else M << "You cannot repair [src], as [they_pronoun()] [get_is()] undamaged!" else diff --git a/code/game/gamemodes/cult/ritual.dm b/code/game/gamemodes/cult/ritual.dm index 9b14d82cd9e..f32896c536b 100644 --- a/code/game/gamemodes/cult/ritual.dm +++ b/code/game/gamemodes/cult/ritual.dm @@ -234,11 +234,7 @@ This file contains the arcane tome files. priority_announce("Figments from an eldritch god are being summoned by [user] into [locname] from an unknown dimension. Disrupt the ritual at all costs!","Central Command Higher Dimensionsal Affairs", 'sound/AI/spanomalies.ogg') for(var/B in spiral_range_turfs(1, user, 1)) var/turf/T = B - var/obj/machinery/shield/N = new(T) - N.name = "sanguine barrier" - N.desc = "A potent shield summoned by cultists to defend their rites." - N.icon_state = "shield-red" - N.health = 60 + var/obj/structure/emergency_shield/sanguine/N = new(T) shields |= N else user << "Nar-Sie does not wish to be summoned!" @@ -248,7 +244,7 @@ This file contains the arcane tome files. user.apply_damage(initial(rune_to_scribe.scribe_damage), BRUTE, pick("l_arm", "r_arm")) if(!do_after(user, initial(rune_to_scribe.scribe_delay), target = get_turf(user))) for(var/V in shields) - var/obj/machinery/shield/S = V + var/obj/structure/emergency_shield/sanguine/S = V if(S && !qdeleted(S)) qdel(S) return @@ -258,7 +254,7 @@ This file contains the arcane tome files. user.visible_message("[user] creates a strange circle in their own blood.", \ "You finish drawing the arcane markings of the Geometer.") for(var/V in shields) - var/obj/machinery/shield/S = V + var/obj/structure/emergency_shield/S = V if(S && !qdeleted(S)) qdel(S) var/obj/effect/rune/R = new rune_to_scribe(Turf, chosen_keyword) diff --git a/code/game/gamemodes/cult/runes.dm b/code/game/gamemodes/cult/runes.dm index 3920e4258cb..bc5301373bc 100644 --- a/code/game/gamemodes/cult/runes.dm +++ b/code/game/gamemodes/cult/runes.dm @@ -21,7 +21,7 @@ To draw a rune, use an arcane tome. anchored = 1 icon = 'icons/obj/rune.dmi' icon_state = "1" - resistance_flags = LAVA_PROOF | FIRE_PROOF | UNACIDABLE + resistance_flags = FIRE_PROOF | UNACIDABLE | ACID_PROOF layer = ABOVE_NORMAL_TURF_LAYER color = "#FF0000" @@ -990,17 +990,14 @@ var/list/wall_runes = list() ..() visible_message("A cloud of red mist forms above [src], and from within steps... a man.") user << "Your blood begins flowing into [src]. You must remain in place and conscious to maintain the forms of those summoned. This will hurt you slowly but surely..." - var/obj/machinery/shield/N = new(get_turf(src)) - N.name = "Invoker's Shield" - N.desc = "A weak shield summoned by cultists to protect them while they carry out delicate rituals" - N.color = "red" - N.health = 20 - N.mouse_opacity = 0 + var/turf/T = get_turf(src) + var/obj/structure/emergency_shield/invoker/N = new(T) + new_human.key = ghost_to_spawn.key ticker.mode.add_cultist(new_human.mind, 0) new_human << "You are a servant of the Geometer. You have been made semi-corporeal by the cult of Nar-Sie, and you are to serve them at all costs." - while(user in get_turf(src)) + while(user in T) if(user.stat) break user.apply_damage(0.1, BRUTE) diff --git a/code/game/gamemodes/devil/imp/imp.dm b/code/game/gamemodes/devil/imp/imp.dm index 76696ced406..c5f662f5186 100644 --- a/code/game/gamemodes/devil/imp/imp.dm +++ b/code/game/gamemodes/devil/imp/imp.dm @@ -26,6 +26,7 @@ health = 200 healable = 0 environment_smash = 1 + obj_damage = 40 melee_damage_lower = 10 melee_damage_upper = 15 see_in_dark = 8 diff --git a/code/game/gamemodes/gang/dominator.dm b/code/game/gamemodes/gang/dominator.dm index 32c81ff0cad..a636a1d4d98 100644 --- a/code/game/gamemodes/gang/dominator.dm +++ b/code/game/gamemodes/gang/dominator.dm @@ -6,9 +6,10 @@ density = 1 anchored = 1 layer = HIGH_OBJ_LAYER - var/maxhealth = 200 - var/health = 200 - armor = list(melee = 20, bullet = 50, laser = 50, energy = 0, bomb = 10, bio = 100, rad = 100, fire = 10, acid = 0) + max_integrity = 300 + obj_integrity = 300 + integrity_failure = 100 + armor = list(melee = 20, bullet = 50, laser = 50, energy = 50, bomb = 10, bio = 100, rad = 100, fire = 10, acid = 70) var/datum/gang/gang var/operating = 0 //0=standby or broken, 1=takeover var/warned = 0 //if this device has set off the warning at <3 minutes yet @@ -29,7 +30,6 @@ /obj/machinery/dominator/examine(mob/user) ..() if(stat & BROKEN) - user << "It looks completely busted." return var/time @@ -41,7 +41,7 @@ user << "Hostile Takeover of [station_name()] successful. Have a great day." else user << "System on standby." - user << "System Integrity: [round((health/maxhealth)*100,1)]%" + user << "System Integrity: [round((obj_integrity/max_integrity)*100,1)]%" /obj/machinery/dominator/process() ..() @@ -61,35 +61,41 @@ if(!.) STOP_PROCESSING(SSmachine, src) -/obj/machinery/dominator/take_damage(damage, damage_type = BRUTE, sound_effect = 1) +/obj/machinery/dominator/play_attack_sound(damage_amount, damage_type = BRUTE, damage_flag = 0) switch(damage_type) - if(BURN) - if(sound_effect) - playsound(src.loc, 'sound/items/Welder.ogg', 100, 1) if(BRUTE) - if(sound_effect) - if(damage) - playsound(src, 'sound/effects/bang.ogg', 50, 1) - else - playsound(loc, 'sound/weapons/tap.ogg', 50, 1) - else - return - health -= damage + if(damage_amount) + playsound(src, 'sound/effects/bang.ogg', 50, 1) + else + playsound(loc, 'sound/weapons/tap.ogg', 50, 1) + if(BURN) + playsound(src.loc, 'sound/items/Welder.ogg', 100, 1) - if(health > (maxhealth/2)) - if(prob(damage*2)) +/obj/machinery/dominator/take_damage(damage_amount, damage_type = BRUTE, damage_flag = 0, sound_effect = 1) + . = ..() + if(.) + if(obj_integrity/max_integrity > 0.66) + if(prob(damage_amount*2)) + spark_system.start() + else if(!(stat & BROKEN)) spark_system.start() - else if(!(stat & BROKEN)) - spark_system.start() - add_overlay("damage") + cut_overlays() + add_overlay("damage") - if(!(stat & BROKEN)) - if(health <= 0) +/obj/machinery/dominator/obj_break(damage_flag) + if(!(stat & BROKEN) && !(flags & NODECONSTRUCT)) + set_broken() + +/obj/machinery/dominator/deconstruct(disassembled = TRUE) + if(!(flags & NODECONSTRUCT)) + if(!(stat & BROKEN)) set_broken() - - if(health <= -100) new /obj/item/stack/sheet/plasteel(src.loc) - qdel(src) + qdel(src) + +/obj/machinery/dominator/attacked_by(obj/item/I, mob/living/user) + add_fingerprint(user) + ..() /obj/machinery/dominator/proc/set_broken() if(gang) @@ -130,35 +136,9 @@ return ..() /obj/machinery/dominator/emp_act(severity) - take_damage(100, BURN, 0) + take_damage(100, BURN, "energy", 0) ..() -/obj/machinery/dominator/ex_act(severity, target) - if(target == src) - qdel(src) - return - switch(severity) - if(1) - qdel(src) - if(2) - take_damage(120, BRUTE, 0) - if(3) - take_damage(30, BRUTE, 0) - return - -/obj/machinery/dominator/bullet_act(obj/item/projectile/P) - . = ..() - if(P.damage) - var/damage_amount = P.damage - if(P.forcedodge) - damage_amount *= 0.5 - visible_message("[src] was hit by [P].") - take_damage(damage_amount, P.damage_type, 0) - - -/obj/machinery/dominator/blob_act(obj/structure/blob/B) - take_damage(110, BRUTE, 0) - /obj/machinery/dominator/attack_hand(mob/user) if(operating || (stat & BROKEN)) examine(user) @@ -208,16 +188,6 @@ if(G != gang) G.message_gangtools("Enemy takeover attempt detected in [locname]: Estimated [time] minutes until our defeat.",1,1) -/obj/machinery/dominator/attack_hulk(mob/user) - ..(user, 1) - user.visible_message("[user] smashes [src].",\ - "You punch [src].",\ - "You hear metal being slammed.") - take_damage(5) - return 1 - -/obj/machinery/dominator/attacked_by(obj/item/I, mob/living/user) - add_fingerprint(user) - ..() + diff --git a/code/game/gamemodes/malfunction/Malf_Modules.dm b/code/game/gamemodes/malfunction/Malf_Modules.dm index 940a715f86c..521fd901b81 100644 --- a/code/game/gamemodes/malfunction/Malf_Modules.dm +++ b/code/game/gamemodes/malfunction/Malf_Modules.dm @@ -133,7 +133,7 @@ src.verbs -= /mob/living/silicon/ai/proc/upgrade_turrets //Upgrade AI turrets around the world for(var/obj/machinery/porta_turret/ai/turret in machines) - turret.health += 30 + turret.obj_integrity += 30 turret.eprojectile = /obj/item/projectile/beam/laser/heavylaser //Once you see it, you will know what it means to FEAR. turret.eshot_sound = 'sound/weapons/lasercannonfire.ogg' src << "Turrets upgraded." diff --git a/code/game/gamemodes/miniantags/abduction/abduction_gear.dm b/code/game/gamemodes/miniantags/abduction/abduction_gear.dm index 7c79ebe648c..7b128975915 100644 --- a/code/game/gamemodes/miniantags/abduction/abduction_gear.dm +++ b/code/game/gamemodes/miniantags/abduction/abduction_gear.dm @@ -581,9 +581,8 @@ Congratulations! You are now trained for xenobiology research!"} can_buckle = 1 buckle_lying = 1 flags = NODECONSTRUCT + resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ACID_PROOF -/obj/structure/table/optable/abductor/table_destroy() - return //can't destroy the abductor's only optable. /obj/structure/bed/abductor name = "resting contraption" diff --git a/code/game/gamemodes/miniantags/abduction/gland.dm b/code/game/gamemodes/miniantags/abduction/gland.dm index eb208bea4a9..5f95588ac4d 100644 --- a/code/game/gamemodes/miniantags/abduction/gland.dm +++ b/code/game/gamemodes/miniantags/abduction/gland.dm @@ -199,13 +199,13 @@ owner << "You feel something moving around inside you..." //spawn cocoon with clone greytide snpc inside if(ishuman(owner)) - var/obj/effect/cocoon/abductor/C = new (get_turf(owner)) + var/obj/structure/spider/cocoon/abductor/C = new (get_turf(owner)) C.Copy(owner) C.Start() owner.gib() return -/obj/effect/cocoon/abductor +/obj/structure/spider/cocoon/abductor name = "slimy cocoon" desc = "Something is moving inside." icon = 'icons/effects/effects.dmi' @@ -214,7 +214,7 @@ density = 1 var/hatch_time = 0 -/obj/effect/cocoon/abductor/proc/Copy(mob/living/carbon/human/H) +/obj/structure/spider/cocoon/abductor/proc/Copy(mob/living/carbon/human/H) var/mob/living/carbon/human/interactive/greytide/clone = new(src) clone.hardset_dna(H.dna.uni_identity,H.dna.struc_enzymes,H.real_name, H.dna.blood_type, H.dna.species.type, H.dna.features) @@ -228,11 +228,11 @@ if(I) clone.equip_to_slot_if_possible(I,slot) -/obj/effect/cocoon/abductor/proc/Start() +/obj/structure/spider/cocoon/abductor/proc/Start() hatch_time = world.time + 600 START_PROCESSING(SSobj, src) -/obj/effect/cocoon/abductor/process() +/obj/structure/spider/cocoon/abductor/process() if(world.time > hatch_time) STOP_PROCESSING(SSobj, src) for(var/mob/M in contents) diff --git a/code/game/gamemodes/miniantags/abduction/machinery/camera.dm b/code/game/gamemodes/miniantags/abduction/machinery/camera.dm index 9c06517bd95..f893ad1bb84 100644 --- a/code/game/gamemodes/miniantags/abduction/machinery/camera.dm +++ b/code/game/gamemodes/miniantags/abduction/machinery/camera.dm @@ -13,6 +13,7 @@ icon = 'icons/obj/abductor.dmi' icon_state = "camera" + resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ACID_PROOF /obj/machinery/computer/camera_advanced/abductor/CreateEye() ..() diff --git a/code/game/gamemodes/miniantags/abduction/machinery/console.dm b/code/game/gamemodes/miniantags/abduction/machinery/console.dm index 58de10d57e7..5539f6a878e 100644 --- a/code/game/gamemodes/miniantags/abduction/machinery/console.dm +++ b/code/game/gamemodes/miniantags/abduction/machinery/console.dm @@ -1,6 +1,7 @@ //Common /obj/machinery/abductor + resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ACID_PROOF var/team = 0 /obj/machinery/abductor/proc/IsAgent(mob/living/carbon/human/H) diff --git a/code/game/gamemodes/miniantags/bot_swarm/swarmer.dm b/code/game/gamemodes/miniantags/bot_swarm/swarmer.dm index db7a20a766f..06be9a116a0 100644 --- a/code/game/gamemodes/miniantags/bot_swarm/swarmer.dm +++ b/code/game/gamemodes/miniantags/bot_swarm/swarmer.dm @@ -83,6 +83,7 @@ hud_possible = list(ANTAG_HUD, DIAG_STAT_HUD, DIAG_HUD) languages_spoken = SWARMER languages_understood = SWARMER + obj_damage = 0 environment_smash = 0 attacktext = "shocks" attack_sound = 'sound/effects/EMPulse.ogg' @@ -412,7 +413,6 @@ icon_state = "integrate" duration = 5 - /obj/structure/swarmer //Default swarmer effect object visual feedback name = "swarmer ui" desc = null @@ -420,61 +420,29 @@ icon = 'icons/mob/swarmer.dmi' icon_state = "ui_light" layer = MOB_LAYER - + resistance_flags = FIRE_PROOF | UNACIDABLE | ACID_PROOF luminosity = 1 + obj_integrity = 30 + max_integrity = 30 anchored = 1 - var/health = 30 -/obj/structure/swarmer/proc/take_damage(damage, damage_type = BRUTE, sound_effect = 1) +/obj/structure/swarmer/play_attack_sound(damage_amount, damage_type = BRUTE, damage_flag = 0) switch(damage_type) if(BRUTE) - if(sound_effect) - playsound(loc, 'sound/weapons/Egloves.ogg', 80, 1) + playsound(loc, 'sound/weapons/Egloves.ogg', 80, 1) if(BURN) - if(sound_effect) - playsound(src.loc, 'sound/items/Welder.ogg', 100, 1) - else - return - health -= damage - if(health <= 0) - qdel(src) - -/obj/structure/swarmer/bullet_act(obj/item/projectile/P) - . = ..() - take_damage(P.damage, P.damage_type) - -/obj/structure/swarmer/attacked_by(obj/item/I, mob/living/user) - ..() - take_damage(I.force, I.damtype) - -/obj/structure/swarmer/ex_act() - qdel(src) - -/obj/structure/swarmer/blob_act(obj/structure/blob/B) - qdel(src) + playsound(src.loc, 'sound/items/Welder.ogg', 100, 1) /obj/structure/swarmer/emp_act() qdel(src) -/obj/structure/swarmer/attack_alien(mob/living/user) - user.do_attack_animation(src) - user.changeNext_move(CLICK_CD_MELEE) - take_damage(rand(20,30)) - -/obj/structure/swarmer/attack_animal(mob/living/simple_animal/S) - S.do_attack_animation(src) - S.changeNext_move(CLICK_CD_MELEE) - if(S.obj_damage) - take_damage(S.obj_damage, S.melee_damage_type, 1) - else if(S.melee_damage_upper) - take_damage(rand(S.melee_damage_lower, S.melee_damage_upper), S.melee_damage_type) - /obj/structure/swarmer/trap name = "swarmer trap" desc = "A quickly assembled trap that electrifies living beings and overwhelms machine sensors. Will not retain its form if damaged enough." icon_state = "trap" - luminosity = 1 - health = 10 + obj_integrity = 10 + max_integrity = 10 + density = 0 /obj/structure/swarmer/trap/Crossed(var/atom/movable/AM) if(isliving(AM)) @@ -516,9 +484,8 @@ desc = "A quickly assembled energy blockade. Will not retain its form if damaged enough, but disabler beams and swarmers pass right through." icon_state = "barricade" luminosity = 1 - health = 50 - density = 1 - anchored = 1 + obj_integrity = 50 + max_integrity = 50 /obj/structure/swarmer/blockade/CanPass(atom/movable/O) if(isswarmer(O)) diff --git a/code/game/gamemodes/miniantags/morph/morph.dm b/code/game/gamemodes/miniantags/morph/morph.dm index f1b34bdebf9..38624c9dc54 100644 --- a/code/game/gamemodes/miniantags/morph/morph.dm +++ b/code/game/gamemodes/miniantags/morph/morph.dm @@ -21,7 +21,7 @@ maxHealth = 150 health = 150 healable = 0 - environment_smash = 1 + obj_damage = 50 melee_damage_lower = 20 melee_damage_upper = 20 see_in_dark = 8 diff --git a/code/game/gamemodes/miniantags/slaughter/slaughter.dm b/code/game/gamemodes/miniantags/slaughter/slaughter.dm index 2ac221435fc..e424b85fefc 100644 --- a/code/game/gamemodes/miniantags/slaughter/slaughter.dm +++ b/code/game/gamemodes/miniantags/slaughter/slaughter.dm @@ -28,6 +28,7 @@ health = 200 healable = 0 environment_smash = 1 + obj_damage = 50 melee_damage_lower = 30 melee_damage_upper = 30 see_in_dark = 8 diff --git a/code/game/gamemodes/nuclear/nuclearbomb.dm b/code/game/gamemodes/nuclear/nuclearbomb.dm index ae966ae1738..6b59f02057f 100644 --- a/code/game/gamemodes/nuclear/nuclearbomb.dm +++ b/code/game/gamemodes/nuclear/nuclearbomb.dm @@ -18,6 +18,7 @@ var/bomb_set icon = 'icons/obj/machines/nuke.dmi' icon_state = "nuclearbomb_base" density = 1 + resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF var/timer_set = 60 var/default_timer_set = 60 @@ -393,13 +394,10 @@ var/bomb_set else . = timer_set -/obj/machinery/nuclearbomb/ex_act(severity, target) - return - /obj/machinery/nuclearbomb/blob_act(obj/structure/blob/B) if(exploding) return - . = ..() + qdel(src) /obj/machinery/nuclearbomb/tesla_act(var/power) ..() @@ -490,6 +488,9 @@ This is here to make the tiles around the station mininuke change when it's arme desc = "Better keep this safe." icon_state = "nucleardisk" persistence_replacement = /obj/item/weapon/disk/fakenucleardisk + obj_integrity = 250 + max_integrity = 250 + armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 30, bio = 0, rad = 0, fire = 90, acid = 70) /obj/item/weapon/disk/nuclear/New() ..() diff --git a/code/game/gamemodes/wizard/artefact.dm b/code/game/gamemodes/wizard/artefact.dm index 14e475144e0..88611b5eb6b 100644 --- a/code/game/gamemodes/wizard/artefact.dm +++ b/code/game/gamemodes/wizard/artefact.dm @@ -481,8 +481,9 @@ var/global/list/multiverse = list() var/obj/item/link = null var/cooldown_time = 30 //3s var/cooldown = 0 - burntime = 0 - resistance_flags = 0 + obj_integrity = 10 + max_integrity = 10 + resistance_flags = FLAMMABLE /obj/item/voodoo/attackby(obj/item/I, mob/user, params) if(target && cooldown < world.time) @@ -579,7 +580,7 @@ var/global/list/multiverse = list() var/area/A = get_area(src) victim << "You feel a dark presence from [A.name]" -/obj/item/voodoo/fire_act() +/obj/item/voodoo/fire_act(exposed_temperature, exposed_volume) if(target) target.adjust_fire_stacks(20) target.IgniteMob() diff --git a/code/game/machinery/PDApainter.dm b/code/game/machinery/PDApainter.dm index fd21d4a3826..19e8ce9fb6c 100644 --- a/code/game/machinery/PDApainter.dm +++ b/code/game/machinery/PDApainter.dm @@ -7,7 +7,8 @@ anchored = 1 var/obj/item/device/pda/storedpda = null var/list/colorlist = list() - var/health = 100 + obj_integrity = 200 + max_integrity = 200 /obj/machinery/pdapainter/update_icon() @@ -74,29 +75,16 @@ user << "You repair [src]." playsound(loc, 'sound/items/Welder2.ogg', 50, 1) stat &= ~BROKEN - health = initial(health) + obj_integrity = max_integrity update_icon() else user << "[src] does not need repairs." else return ..() -/obj/machinery/pdapainter/take_damage(damage, damage_type = BRUTE, sound_effect = 1) - switch(damage_type) - if(BRUTE) - if(sound_effect) - if(damage) - playsound(loc, 'sound/weapons/smash.ogg', 50, 1) - else - playsound(loc, 'sound/weapons/tap.ogg', 50, 1) - if(BURN) - if(sound_effect) - playsound(src.loc, 'sound/items/Welder.ogg', 100, 1) - else - return - if(!(stat & BROKEN)) - health -= damage - if(health <= 0) +/obj/machinery/pdapainter/deconstruct(disassembled = TRUE) + if(!(flags & NODECONSTRUCT)) + if(!(stat & BROKEN)) stat |= BROKEN update_icon() diff --git a/code/game/machinery/Sleeper.dm b/code/game/machinery/Sleeper.dm index db81c9efeef..f0d948b3948 100644 --- a/code/game/machinery/Sleeper.dm +++ b/code/game/machinery/Sleeper.dm @@ -78,12 +78,6 @@ if(occupant && occupant.stat != DEAD) occupant << "You feel cool air surround you. You go numb as your senses turn inward." -/obj/machinery/sleeper/attack_animal(mob/living/simple_animal/M) - if(M.environment_smash) - M.do_attack_animation(src) - visible_message("[M.name] smashes [src] apart!") - qdel(src) - /obj/machinery/sleeper/emp_act(severity) if(is_operational() && occupant) open_machine() @@ -176,8 +170,8 @@ if(!occupant) return var/amount = occupant.reagents.get_reagent_amount(chem) + 10 <= 20 * efficiency - var/health = occupant.health > min_health || chem == "epinephrine" - return amount && health + var/occ_health = occupant.health > min_health || chem == "epinephrine" + return amount && occ_health /obj/machinery/sleeper/syndie diff --git a/code/game/machinery/ai_slipper.dm b/code/game/machinery/ai_slipper.dm index 0d6b45e76ad..16bc9f135e4 100644 --- a/code/game/machinery/ai_slipper.dm +++ b/code/game/machinery/ai_slipper.dm @@ -4,6 +4,10 @@ icon_state = "motion3" layer = PROJECTILE_HIT_THRESHHOLD_LAYER anchored = 1 + obj_integrity = 200 + max_integrity = 200 + armor = list(melee = 50, bullet = 20, laser = 20, energy = 20, bomb = 0, bio = 0, rad = 0, fire = 50, acid = 30) + var/uses = 20 var/disabled = 1 var/lethal = 0 diff --git a/code/game/machinery/airlock_control.dm b/code/game/machinery/airlock_control.dm index 7c5abe61c07..56240c6d9b2 100644 --- a/code/game/machinery/airlock_control.dm +++ b/code/game/machinery/airlock_control.dm @@ -100,6 +100,7 @@ icon = 'icons/obj/airlock_machines.dmi' icon_state = "airlock_sensor_off" name = "airlock sensor" + resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF anchored = 1 power_channel = ENVIRON diff --git a/code/game/machinery/announcement_system.dm b/code/game/machinery/announcement_system.dm index f7b172a4454..f957f81704a 100644 --- a/code/game/machinery/announcement_system.dm +++ b/code/game/machinery/announcement_system.dm @@ -13,8 +13,6 @@ var/list/announcement_systems = list() verb_ask = "queries" verb_exclaim = "alarms" - var/broken = 0 - idle_power_usage = 20 active_power_usage = 50 @@ -63,7 +61,7 @@ var/list/announcement_systems = list() else overlays -= pinklight - if(broken) + if(stat & BROKEN) add_overlay(errorlight) else overlays -= errorlight @@ -84,9 +82,9 @@ var/list/announcement_systems = list() update_icon() else if(default_deconstruction_crowbar(P)) return - else if(istype(P, /obj/item/device/multitool) && panel_open && broken) + else if(istype(P, /obj/item/device/multitool) && panel_open && (stat & BROKEN)) user << "You reset [src]'s firmware." - broken = 0 + stat &= ~BROKEN update_icon() else return ..() @@ -117,7 +115,7 @@ var/list/announcement_systems = list() //config stuff /obj/machinery/announcement_system/interact(mob/user) - if(broken) + if(stat & BROKEN) visible_message("[src] buzzes.", "You hear a faint buzz.") playsound(src.loc, 'sound/machines/buzz-two.ogg', 50, 1) return @@ -131,7 +129,7 @@ var/list/announcement_systems = list() popup.open() /obj/machinery/announcement_system/Topic(href, href_list) - if(broken) + if(stat & BROKEN) visible_message("[src] buzzes.", "You hear a faint buzz.") playsound(src.loc, 'sound/machines/buzz-two.ogg', 50, 1) return @@ -162,13 +160,13 @@ var/list/announcement_systems = list() /obj/machinery/announcement_system/attack_ai(mob/living/silicon/ai/user) if(!isAI(user)) return - if(broken) + if(stat & BROKEN) user << "[src]'s firmware appears to be malfunctioning!" return interact(user) /obj/machinery/announcement_system/proc/act_up() //does funny breakage stuff - broken = 1 + stat |= BROKEN update_icon() arrival = pick("#!@%ERR-34%2 CANNOT LOCAT@# JO# F*LE!", "CRITICAL ERROR 99.", "ERR)#: DA#AB@#E NOT F(*ND!") diff --git a/code/game/machinery/buttons.dm b/code/game/machinery/buttons.dm index a3cb942cc2e..75d06eadf48 100644 --- a/code/game/machinery/buttons.dm +++ b/code/game/machinery/buttons.dm @@ -10,10 +10,11 @@ var/device_type = null var/id = null var/initialized = 0 - + armor = list(melee = 50, bullet = 50, laser = 50, energy = 50, bomb = 10, bio = 100, rad = 100, fire = 90, acid = 70) anchored = 1 use_power = 1 idle_power_usage = 2 + resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF /obj/machinery/button/New(loc, ndir = 0, built = 0) diff --git a/code/game/machinery/camera/camera.dm b/code/game/machinery/camera/camera.dm index f0300b7d706..558c5d02c1d 100644 --- a/code/game/machinery/camera/camera.dm +++ b/code/game/machinery/camera/camera.dm @@ -12,8 +12,10 @@ active_power_usage = 10 layer = WALL_OBJ_LAYER - armor = list(melee = 50, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 0, acid = 0) - var/health = 50 + armor = list(melee = 50, bullet = 20, laser = 20, energy = 20, bomb = 0, bio = 0, rad = 0, fire = 90, acid = 50) + obj_integrity = 100 + max_integrity = 100 + integrity_failure = 50 var/list/network = list("SS13") var/c_tag = null var/c_tag_order = 999 @@ -22,7 +24,7 @@ var/start_active = 0 //If it ignores the random chance to start broken on round start var/invuln = null var/obj/item/device/camera_bug/bug = null - var/obj/machinery/camera_assembly/assembly = null + var/obj/structure/camera_assembly/assembly = null //OTHER @@ -112,20 +114,10 @@ ..() qdel(src)//to prevent bomb testing camera from exploding over and over forever -/obj/machinery/camera/blob_act(obj/structure/blob/B) - if(B && B.loc == loc) - take_damage(health, BRUTE, 0) - /obj/machinery/camera/ex_act(severity, target) - if(src.invuln) + if(invuln) return - switch(severity) - if(1) - qdel(src) - if(2) - take_damage(50, BRUTE, 0) - else - take_damage(rand(30,60), BRUTE, 0) + ..() /obj/machinery/camera/proc/setViewRange(num = 7) src.view_range = num @@ -150,7 +142,7 @@ if(panel_open) if(istype(W, /obj/item/weapon/wirecutters)) //enable/disable the camera toggle_cam(user, 1) - health = initial(health) //this is a pretty simplistic way to heal the camera, but there's no reason for this to be complex. + obj_integrity = max_integrity //this is a pretty simplistic way to heal the camera, but there's no reason for this to be complex. return else if(istype(W, /obj/item/device/multitool)) //change focus @@ -161,13 +153,7 @@ else if(istype(W, /obj/item/weapon/weldingtool)) if(weld(W, user)) visible_message("[user] unwelds [src], leaving it as just a frame screwed to the wall.", "You unweld [src], leaving it as just a frame screwed to the wall") - if(!assembly) - assembly = new() - assembly.loc = src.loc - assembly.state = 1 - assembly.setDir(src.dir) - assembly = null - qdel(src) + deconstruct(TRUE) return else if(istype(W, /obj/item/device/analyzer)) @@ -253,26 +239,31 @@ return ..() -/obj/machinery/camera/take_damage(damage, damage_type = BRUTE, sound_effect = 1) - switch(damage_type) - if(BRUTE) - if(sound_effect) - if(damage) - playsound(src, 'sound/weapons/smash.ogg', 50, 1) - else - playsound(src, 'sound/weapons/tap.ogg', 50, 1) - if(BURN) - if(sound_effect) - playsound(src.loc, 'sound/items/Welder.ogg', 100, 1) - else - return - if(damage < 10) //camera has a damage resistance threshold - return - health = max(0, health - damage) - if(!health && status) +/obj/machinery/camera/run_obj_armor(damage_amount, damage_type, damage_flag = 0, attack_dir) + if(damage_flag == "melee" && damage_amount < 12 && !(stat & BROKEN)) + return 0 + . = ..() + +/obj/machinery/camera/obj_break(damage_flag) + if(status && !(flags & NODECONSTRUCT)) triggerCameraAlarm() toggle_cam(null, 0) +/obj/machinery/camera/deconstruct(disassembled = TRUE) + if(!(flags & NODECONSTRUCT)) + if(disassembled) + if(!assembly) + assembly = new() + assembly.loc = src.loc + assembly.state = 1 + assembly.setDir(dir) + assembly = null + else + var/obj/item/I = new /obj/item/wallframe/camera (loc) + I.obj_integrity = I.max_integrity * 0.5 + new /obj/item/stack/cable_coil(loc, 2) + qdel(src) + /obj/machinery/camera/update_icon() if(!status) icon_state = "[initial(icon_state)]1" @@ -401,10 +392,6 @@ else src.SetLuminosity(0) -/obj/machinery/camera/bullet_act(obj/item/projectile/P) - . = ..() - take_damage(P.damage, P.damage_type, 0) - /obj/machinery/camera/portable //Cameras which are placed inside of things, such as helmets. var/turf/prev_turf diff --git a/code/game/machinery/camera/camera_assembly.dm b/code/game/machinery/camera/camera_assembly.dm index 94e97a0e39c..87b08024f3f 100644 --- a/code/game/machinery/camera/camera_assembly.dm +++ b/code/game/machinery/camera/camera_assembly.dm @@ -4,19 +4,21 @@ icon = 'icons/obj/monitors.dmi' icon_state = "cameracase" materials = list(MAT_METAL=400, MAT_GLASS=250) - result_path = /obj/machinery/camera_assembly + result_path = /obj/structure/camera_assembly -/obj/machinery/camera_assembly +/obj/structure/camera_assembly name = "camera assembly" desc = "The basic construction for Nanotrasen-Always-Watching-You cameras." icon = 'icons/obj/monitors.dmi' icon_state = "camera1" + obj_integrity = 150 + max_integrity = 150 // Motion, EMP-Proof, X-Ray var/list/obj/item/possible_upgrades = list(/obj/item/device/assembly/prox_sensor, /obj/item/stack/sheet/mineral/plasma, /obj/item/device/analyzer) var/list/upgrades = list() var/state = 1 - var/busy = 0 + /* 1 = Wrenched in place 2 = Welded in place @@ -24,12 +26,12 @@ 4 = Screwdriver panel closed and is fully built (you cannot attach upgrades) */ -/obj/machinery/camera_assembly/New(loc, ndir, building) +/obj/structure/camera_assembly/New(loc, ndir, building) ..() if(building) setDir(ndir) -/obj/machinery/camera_assembly/attackby(obj/item/W, mob/living/user, params) +/obj/structure/camera_assembly/attackby(obj/item/W, mob/living/user, params) switch(state) if(1) // State 1 @@ -73,14 +75,14 @@ if(istype(W, /obj/item/weapon/screwdriver)) playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) - var/input = stripped_input(usr, "Which networks would you like to connect this camera to? Seperate networks with a comma. No Spaces!\nFor example: SS13,Security,Secret ", "Set Network", "SS13") + var/input = stripped_input(user, "Which networks would you like to connect this camera to? Seperate networks with a comma. No Spaces!\nFor example: SS13,Security,Secret ", "Set Network", "SS13") if(!input) - usr << "No input found, please hang up and try your call again!" + user << "No input found, please hang up and try your call again!" return var/list/tempnetwork = splittext(input, ",") if(tempnetwork.len < 1) - usr << "No network found, please hang up and try your call again!" + user << "No network found, please hang up and try your call again!" return state = 4 @@ -122,19 +124,18 @@ return ..() -/obj/machinery/camera_assembly/proc/weld(obj/item/weapon/weldingtool/WT, mob/living/user) - if(busy) - return 0 +/obj/structure/camera_assembly/proc/weld(obj/item/weapon/weldingtool/WT, mob/living/user) if(!WT.remove_fuel(0, user)) return 0 - user << "You start to weld \the [src]..." playsound(src.loc, 'sound/items/Welder.ogg', 50, 1) - busy = 1 if(do_after(user, 20, target = src)) - busy = 0 - if(!WT.isOn()) - return 0 - return 1 - busy = 0 - return 0 \ No newline at end of file + if(WT.isOn()) + playsound(loc, 'sound/items/Welder2.ogg', 50, 1) + return 1 + return 0 + +/obj/structure/camera_assembly/deconstruct(disassembled = TRUE) + if(!(flags & NODECONSTRUCT)) + new /obj/item/stack/sheet/metal(loc) + qdel(src) \ No newline at end of file diff --git a/code/game/machinery/cell_charger.dm b/code/game/machinery/cell_charger.dm index 142f6c21e97..4255cf42eec 100644 --- a/code/game/machinery/cell_charger.dm +++ b/code/game/machinery/cell_charger.dm @@ -91,7 +91,7 @@ if(!charging) return - charging.loc = loc + charging.forceMove(loc) user << "You telekinetically remove [charging] from [src]." removecell() diff --git a/code/game/machinery/cloning.dm b/code/game/machinery/cloning.dm index 45934d85022..72b74fe486b 100644 --- a/code/game/machinery/cloning.dm +++ b/code/game/machinery/cloning.dm @@ -370,7 +370,8 @@ go_out() /obj/machinery/clonepod/emp_act(severity) - if(prob(100/(severity*efficiency))) malfunction() + if(prob(100/(severity*efficiency))) + malfunction() ..() /obj/machinery/clonepod/ex_act(severity, target) @@ -378,6 +379,13 @@ if(!qdeleted(src)) go_out() +/obj/machinery/clonepod/deconstruct(disassembled = TRUE) + if(occupant) + locked = FALSE + go_out() + ..() + + /* * Diskette Box */ diff --git a/code/game/machinery/computer/buildandrepair.dm b/code/game/machinery/computer/buildandrepair.dm index 955cbf118bb..f62a0be4816 100644 --- a/code/game/machinery/computer/buildandrepair.dm +++ b/code/game/machinery/computer/buildandrepair.dm @@ -15,6 +15,7 @@ user << "You wrench the frame into place." anchored = 1 state = 1 + return if(istype(P, /obj/item/weapon/weldingtool)) var/obj/item/weapon/weldingtool/WT = P if(!WT.remove_fuel(0, user)) @@ -29,6 +30,7 @@ var/obj/item/stack/sheet/metal/M = new (loc, 5) M.add_fingerprint(user) qdel(src) + return if(1) if(istype(P, /obj/item/weapon/wrench)) playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) @@ -37,6 +39,7 @@ user << "You unfasten the frame." anchored = 0 state = 0 + return if(istype(P, /obj/item/weapon/circuitboard/computer) && !circuit) if(!user.drop_item()) return @@ -46,15 +49,17 @@ circuit = P circuit.add_fingerprint(user) P.loc = null + return else if(istype(P, /obj/item/weapon/circuitboard) && !circuit) user << "This frame does not accept circuit boards of this type!" - + return if(istype(P, /obj/item/weapon/screwdriver) && circuit) playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) user << "You screw the circuit board into place." state = 2 icon_state = "2" + return if(istype(P, /obj/item/weapon/crowbar) && circuit) playsound(src.loc, 'sound/items/Crowbar.ogg', 50, 1) user << "You remove the circuit board." @@ -63,12 +68,14 @@ circuit.loc = src.loc circuit.add_fingerprint(user) circuit = null + return if(2) if(istype(P, /obj/item/weapon/screwdriver) && circuit) playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) user << "You unfasten the circuit board." state = 1 icon_state = "1" + return if(istype(P, /obj/item/stack/cable_coil)) var/obj/item/stack/cable_coil/C = P if(C.get_amount() >= 5) @@ -82,6 +89,7 @@ icon_state = "3" else user << "You need five lengths of cable to wire the frame!" + return if(3) if(istype(P, /obj/item/weapon/wirecutters)) playsound(src.loc, 'sound/items/Wirecutter.ogg', 50, 1) @@ -91,6 +99,7 @@ var/obj/item/stack/cable_coil/A = new (loc) A.amount = 5 A.add_fingerprint(user) + return if(istype(P, /obj/item/stack/sheet/glass)) var/obj/item/stack/sheet/glass/G = P @@ -106,6 +115,7 @@ user << "You put in the glass panel." state = 4 src.icon_state = "4" + return if(4) if(istype(P, /obj/item/weapon/crowbar)) playsound(src.loc, 'sound/items/Crowbar.ogg', 50, 1) @@ -114,14 +124,27 @@ icon_state = "3" var/obj/item/stack/sheet/glass/G = new (loc, 2) G.add_fingerprint(user) + return if(istype(P, /obj/item/weapon/screwdriver)) playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) user << "You connect the monitor." var/obj/B = new src.circuit.build_path (src.loc, circuit) transfer_fingerprints_to(B) qdel(src) + return + if(user.a_intent == "harm") + return ..() +/obj/structure/frame/computer/deconstruct(disassembled = TRUE) + if(!(flags & NODECONSTRUCT)) + if(state == 4) + new /obj/item/weapon/shard(loc) + new /obj/item/weapon/shard(loc) + if(state >= 3) + new /obj/item/stack/cable_coil(loc , 5) + ..() + /obj/item/weapon/circuitboard name = "circuit board" diff --git a/code/game/machinery/computer/computer.dm b/code/game/machinery/computer/computer.dm index 2f49e5f59cb..38ef9137c09 100644 --- a/code/game/machinery/computer/computer.dm +++ b/code/game/machinery/computer/computer.dm @@ -7,12 +7,15 @@ use_power = 1 idle_power_usage = 300 active_power_usage = 300 + obj_integrity = 200 + max_integrity = 200 + integrity_failure = 100 + armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 40, acid = 20) var/obj/item/weapon/circuitboard/computer/circuit = null // if circuit==null, computer can't disassembly var/processing = 0 var/brightness_on = 2 var/icon_keyboard = "generic_key" var/icon_screen = "generic" - var/computer_health = 25 var/clockwork = FALSE /obj/machinery/computer/New(location, obj/item/weapon/circuitboard/C) @@ -41,28 +44,6 @@ return 0 return 1 -/obj/machinery/computer/emp_act(severity) - if(severity == 1) - take_damage(rand(15,30), BRUTE, 0) - else - take_damage(rand(15,25), BRUTE, 0) - ..() - -/obj/machinery/computer/ex_act(severity, target) - if(target == src) - qdel(src) - return - switch(severity) - if(1) - qdel(src) - if(2) - if(prob(25)) - qdel(src) - else - take_damage(rand(20,30), BRUTE, 0) - if(3) - take_damage(rand(10,30), BRUTE, 0) - /obj/machinery/computer/ratvar_act() if(!clockwork) clockwork = TRUE @@ -79,10 +60,6 @@ icon_state = initial(icon_state) update_icon() -/obj/machinery/computer/bullet_act(obj/item/projectile/P) - take_damage(P.damage, P.damage_type, 0) - ..() - /obj/machinery/computer/update_icon() cut_overlays() if(stat & NOPOWER) @@ -108,67 +85,61 @@ playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) user << " You start to disconnect the monitor..." if(do_after(user, 20/I.toolspeed, target = src)) - deconstruct() + deconstruct(TRUE, user) + else + return ..() + +/obj/machinery/computer/play_attack_sound(damage_amount, damage_type = BRUTE, damage_flag = 0) + switch(damage_type) + if(BRUTE) + if(stat & BROKEN) + playsound(src.loc, 'sound/effects/hit_on_shattered_glass.ogg', 70, 1) + else + playsound(src.loc, 'sound/effects/Glasshit.ogg', 75, 1) + if(BURN) + playsound(src.loc, 'sound/items/Welder.ogg', 100, 1) + +/obj/machinery/computer/obj_break(damage_flag) + if(circuit && !(flags & NODECONSTRUCT)) //no circuit, no breaking + if(!(stat & BROKEN)) + playsound(loc, 'sound/effects/Glassbr3.ogg', 100, 1) + stat |= BROKEN + update_icon() + +/obj/machinery/computer/emp_act(severity) + switch(severity) + if(1) + if(prob(50)) + obj_break("energy") + if(2) + if(prob(10)) + obj_break("energy") + ..() + + +/obj/machinery/computer/deconstruct(disassembled = TRUE, mob/user) + on_deconstruction() + if(!(flags & NODECONSTRUCT)) + if(circuit) //no circuit, no computer frame var/obj/structure/frame/computer/A = new /obj/structure/frame/computer(src.loc) A.circuit = circuit A.anchored = 1 - circuit = null - for (var/obj/C in src) - C.loc = src.loc - if (stat & BROKEN) - user << "The broken glass falls out." + if(stat & BROKEN) + if(user) + user << "The broken glass falls out." + else + playsound(src.loc, 'sound/effects/hit_on_shattered_glass.ogg', 70, 1) new /obj/item/weapon/shard(src.loc) new /obj/item/weapon/shard(src.loc) A.state = 3 A.icon_state = "3" else - user << "You disconnect the monitor." + if(user) + user << "You disconnect the monitor." A.state = 4 A.icon_state = "4" - qdel(src) - else - return ..() + circuit = null + for(var/obj/C in src) + C.forceMove(loc) -/obj/machinery/computer/take_damage(damage, damage_type = BRUTE, sound_effect = 1) - switch(damage_type) - if(BRUTE) - if(sound_effect) - if(stat & BROKEN) - playsound(src.loc, 'sound/effects/hit_on_shattered_glass.ogg', 70, 1) - else - playsound(src.loc, 'sound/effects/Glasshit.ogg', 75, 1) - if(BURN) - if(sound_effect) - playsound(src.loc, 'sound/items/Welder.ogg', 100, 1) - else - return - computer_health = max(computer_health - damage, 0) - if(circuit) //no circuit, no breaking - if(!computer_health && !(stat & BROKEN)) - playsound(loc, 'sound/effects/Glassbr3.ogg', 100, 1) - stat |= BROKEN - update_icon() - - - -/obj/machinery/computer/deconstruct(mob/user) - on_deconstruction() - var/obj/structure/frame/computer/A = new /obj/structure/frame/computer(src.loc) - A.circuit = circuit - A.anchored = 1 - circuit = null - for(var/obj/C in src) - C.forceMove(loc) - if(stat & BROKEN) - if(user) - user << "The broken glass falls out." - new /obj/item/weapon/shard(src.loc) - new /obj/item/weapon/shard(src.loc) - A.state = 3 - A.icon_state = "3" - else - if(user) - user << "You disconnect the monitor." - A.state = 4 - A.icon_state = "4" - qdel(src) \ No newline at end of file + qdel(src) diff --git a/code/game/machinery/computer/telecrystalconsoles.dm b/code/game/machinery/computer/telecrystalconsoles.dm index abba2eb90ce..ea9437018e0 100644 --- a/code/game/machinery/computer/telecrystalconsoles.dm +++ b/code/game/machinery/computer/telecrystalconsoles.dm @@ -9,6 +9,7 @@ var/list/possible_uplinker_IDs = list("Alfa","Bravo","Charlie","Delta","Echo","F icon_keyboard = "tcstation_key" icon_screen = "syndie" clockwork = TRUE //it'd look weird, at least if ratvar ever got there + resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ACID_PROOF ///////////////////////////////////////////// /obj/machinery/computer/telecrystals/uplinker diff --git a/code/game/machinery/constructable_frame.dm b/code/game/machinery/constructable_frame.dm index def8036d422..ec10b96b79f 100644 --- a/code/game/machinery/constructable_frame.dm +++ b/code/game/machinery/constructable_frame.dm @@ -4,6 +4,8 @@ icon_state = "box_0" density = 1 anchored = 1 + obj_integrity = 250 + max_integrity = 250 var/obj/item/weapon/circuitboard/circuit = null var/state = 1 @@ -12,6 +14,16 @@ if(circuit) user << "It has \a [circuit] installed." + +/obj/structure/frame/deconstruct(disassembled = TRUE) + if(!(flags & NODECONSTRUCT)) + new /obj/item/stack/sheet/metal(loc, 5) + if(circuit) + circuit.forceMove(loc) + circuit = null + qdel(src) + + /obj/structure/frame/machine name = "machine frame" var/list/components = null @@ -66,10 +78,10 @@ if(1) if(istype(P, /obj/item/weapon/circuitboard/machine)) user << "The frame needs wiring first!" - + return else if(istype(P, /obj/item/weapon/circuitboard)) user << "This frame does not accept circuit boards of this type!" - + return if(istype(P, /obj/item/stack/cable_coil)) var/obj/item/stack/cable_coil/C = P if(C.get_amount() >= 5) @@ -83,7 +95,7 @@ icon_state = "box_1" else user << "You need five length of cable to wire the frame!" - return + return if(istype(P, /obj/item/weapon/screwdriver) && !anchored) playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) user.visible_message("[user] disassembles the frame.", \ @@ -94,6 +106,7 @@ var/obj/item/stack/sheet/metal/M = new (loc, 5) M.add_fingerprint(user) qdel(src) + return if(istype(P, /obj/item/weapon/wrench)) user << "You start [anchored ? "un" : ""]securing [name]..." playsound(src.loc, 'sound/items/Ratchet.ogg', 75, 1) @@ -101,6 +114,7 @@ if(state == 1) user << "You [anchored ? "un" : ""]secure [name]." anchored = !anchored + return if(2) if(istype(P, /obj/item/weapon/wrench)) @@ -109,6 +123,7 @@ if(do_after(user, 40/P.toolspeed, target = src)) user << "You [anchored ? "un" : ""]secure [name]." anchored = !anchored + return if(istype(P, /obj/item/weapon/circuitboard/machine)) if(!anchored) @@ -126,9 +141,11 @@ components = list() req_components = B.req_components.Copy() update_namelist() + return else if(istype(P, /obj/item/weapon/circuitboard)) user << "This frame does not accept circuit boards of this type!" + return if(istype(P, /obj/item/weapon/wirecutters)) playsound(src.loc, 'sound/items/Wirecutter.ogg', 50, 1) @@ -137,6 +154,7 @@ icon_state = "box_0" var/obj/item/stack/cable_coil/A = new /obj/item/stack/cable_coil( src.loc ) A.amount = 5 + return if(3) if(istype(P, /obj/item/weapon/crowbar)) @@ -155,6 +173,7 @@ req_components = null components = null icon_state = "box_1" + return if(istype(P, /obj/item/weapon/screwdriver)) var/component_check = 1 @@ -175,6 +194,7 @@ circuit.loc = null new_machine.RefreshParts() qdel(src) + return if(istype(P, /obj/item/weapon/storage/part_replacer) && P.contents.len && get_req_components_amt()) var/obj/item/weapon/storage/part_replacer/replacer = P @@ -224,12 +244,25 @@ if(!user.drop_item()) break user << "You add [P] to [src]." - P.loc = src + P.forceMove(src) components += P req_components[I]-- return 1 user << "You cannot add that to the machine!" return 0 + if(user.a_intent == "harm") + return ..() + + +/obj/structure/frame/machine/deconstruct(disassembled = TRUE) + if(!(flags & NODECONSTRUCT)) + if(state >= 2) + new /obj/item/stack/cable_coil(loc , 5) + for(var/X in components) + var/obj/item/I = X + I.forceMove(loc) + ..() + //Machine Frame Circuit Boards diff --git a/code/game/machinery/deployable.dm b/code/game/machinery/deployable.dm index e04bcd68c55..1fe145e5565 100644 --- a/code/game/machinery/deployable.dm +++ b/code/game/machinery/deployable.dm @@ -13,86 +13,31 @@ desc = "Looks like this would make good cover." anchored = 1 density = 1 - var/health = 100 - var/maxhealth = 100 + obj_integrity = 100 + max_integrity = 100 var/proj_pass_rate = 50 //How many projectiles will pass the cover. Lower means stronger cover - var/ranged_damage_modifier = 1 //Multiply for ranged damage var/material = METAL - var/debris_type - -/obj/structure/barricade/proc/take_damage(damage, damage_type = BRUTE, sound_effect = 1) - switch(damage_type) - if(BRUTE) - if(sound_effect) - if(damage) - playsound(loc, 'sound/weapons/smash.ogg', 50, 1) - else - playsound(loc, 'sound/weapons/tap.ogg', 50, 1) - if(BURN) - if(sound_effect) - playsound(src.loc, 'sound/items/Welder.ogg', 100, 1) - else - damage = 0 - health -= damage - if(health <= 0) +/obj/structure/barricade/deconstruct(disassembled = TRUE) + if(!(flags & NODECONSTRUCT)) make_debris() - qdel(src) + qdel(src) /obj/structure/barricade/proc/make_debris() return -/obj/structure/barricade/attack_animal(mob/living/simple_animal/M) - M.changeNext_move(CLICK_CD_MELEE) - M.do_attack_animation(src) - if(!M.melee_damage_upper && !M.obj_damage || (M.melee_damage_type != BRUTE && M.melee_damage_type != BURN)) - return - visible_message("[M] [M.attacktext] [src]!") - add_logs(M, src, "attacked") - if(M.obj_damage) - take_damage(M.obj_damage) - else - take_damage(M.melee_damage_upper) - -/obj/structure/barricade/attack_alien(mob/living/user) - user.changeNext_move(CLICK_CD_MELEE) - user.do_attack_animation(src) - user.visible_message("[user] claws at [src]!") - playsound(user.loc, 'sound/weapons/slash.ogg', 100, 1) - take_damage(50, BRUTE, 0) - /obj/structure/barricade/attackby(obj/item/I, mob/user, params) if(istype(I, /obj/item/weapon/weldingtool) && user.a_intent != "harm" && material == METAL) var/obj/item/weapon/weldingtool/WT = I - if(health < maxhealth) + if(obj_integrity < max_integrity) if(WT.remove_fuel(0,user)) user << "You begin repairing [src]..." playsound(loc, 'sound/items/Welder.ogg', 40, 1) if(do_after(user, 40/I.toolspeed, target = src)) - health = Clamp(health + 20, 0, maxhealth) + obj_integrity = Clamp(obj_integrity + 20, 0, max_integrity) else return ..() - -/obj/structure/barricade/attacked_by(obj/item/I, mob/living/user) - ..() - take_damage(I.force) - -/obj/structure/barricade/bullet_act(obj/item/projectile/P) - . = ..() - visible_message("\The [src] is hit by [P]!") - take_damage(P.damage*ranged_damage_modifier) - -/obj/structure/barricade/ex_act(severity, target) - switch(severity) - if(1) - qdel(src) - if(2) - take_damage(25, BRUTE, 0) - -/obj/structure/barricade/blob_act(obj/structure/blob/B) - take_damage(25, BRUTE, 0) - /obj/structure/barricade/CanPass(atom/movable/mover, turf/target, height=0)//So bullets will fly over and stuff. if(height==0) return 1 @@ -130,8 +75,8 @@ desc = "Bags of sand. Self explanatory." icon = 'icons/obj/smooth_structures/sandbags.dmi' icon_state = "sandbags" - health = 280 - maxhealth = 280 + obj_integrity = 280 + max_integrity = 280 proj_pass_rate = 20 pass_flags = LETPASSTHROW material = SAND @@ -147,11 +92,10 @@ icon_state = "barrier0" density = 0 anchored = 0 - health = 180 - maxhealth = 180 + obj_integrity = 180 + max_integrity = 180 proj_pass_rate = 20 - ranged_damage_modifier = 0.5 - armor = list(melee = 10, bullet = 50, laser = 50, energy = 0, bomb = 10, bio = 100, rad = 100, fire = 10, acid = 0) + armor = list(melee = 10, bullet = 50, laser = 50, energy = 50, bomb = 10, bio = 100, rad = 100, fire = 10, acid = 0) /obj/structure/barricade/security/New() diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm index 4a53e8e7d53..6c5406a31b2 100644 --- a/code/game/machinery/doors/airlock.dm +++ b/code/game/machinery/doors/airlock.dm @@ -29,6 +29,9 @@ var/list/airlock_overlays = list() name = "airlock" icon = 'icons/obj/doors/airlocks/station/public.dmi' icon_state = "closed" + obj_integrity = 300 + max_integrity = 300 + integrity_failure = 70 var/aiControlDisabled = 0 //If 1, AI control is disabled until the AI hacks back in and disables the lock. If 2, the AI has bypassed the lock. If -1, the control is enabled but the AI had bypassed it earlier, so if it is disabled again the AI would have no trouble getting back in. var/hackProof = 0 // if 1, this door can't be hacked by the AI @@ -926,33 +929,7 @@ var/list/airlock_overlays = list() "You start to remove electronics from the airlock assembly...") if(do_after(user,40/I.toolspeed, target = src)) if(src.loc) - if(assemblytype) - var/obj/structure/door_assembly/A = new assemblytype(src.loc) - A.heat_proof_finished = src.heat_proof //tracks whether there's rglass in - else - new /obj/structure/door_assembly/door_assembly_0(src.loc) - //If you come across a null assemblytype, it will produce the default assembly instead of disintegrating. - - if(emagged) - user << "You discard the damaged electronics." - qdel(src) - return - user << "You remove the airlock electronics." - - var/obj/item/weapon/electronics/airlock/ae - if(!electronics) - ae = new/obj/item/weapon/electronics/airlock( src.loc ) - if(req_one_access) - ae.one_access = 1 - ae.accesses = src.req_one_access - else - ae.accesses = src.req_access - else - ae = electronics - electronics = null - ae.loc = src.loc - - qdel(src) + deconstruct(TRUE, user) return else if(hasPower()) user << "The airlock's motors resist your efforts to force it!" @@ -1218,3 +1195,46 @@ var/list/airlock_overlays = list() secondsElectrified = 0 open() safe = TRUE + + +/obj/machinery/door/airlock/obj_break(damage_flag) + if(!(stat & BROKEN) && !(flags & NODECONSTRUCT)) + stat |= BROKEN + if(!panel_open) + panel_open = 1 + wires.cut_all() + update_icon() + +/obj/machinery/door/airlock/deconstruct(disassembled = TRUE, mob/user) + if(!(flags & NODECONSTRUCT)) + var/obj/structure/door_assembly/A + if(assemblytype) + A = new assemblytype(src.loc) + A.heat_proof_finished = src.heat_proof //tracks whether there's rglass in + else + A = new /obj/structure/door_assembly/door_assembly_0(src.loc) + //If you come across a null assemblytype, it will produce the default assembly instead of disintegrating. + + if(!disassembled) + if(A) + A.obj_integrity = A.max_integrity * 0.5 + else if(emagged) + if(user) + user << "You discard the damaged electronics." + else + if(user) + user << "You remove the airlock electronics." + + var/obj/item/weapon/electronics/airlock/ae + if(!electronics) + ae = new/obj/item/weapon/electronics/airlock( src.loc ) + if(req_one_access) + ae.one_access = 1 + ae.accesses = src.req_one_access + else + ae.accesses = src.req_access + else + ae = electronics + electronics = null + ae.loc = src.loc + qdel(src) diff --git a/code/game/machinery/doors/airlock_types.dm b/code/game/machinery/doors/airlock_types.dm index 8ad89e2f465..737386b9e19 100644 --- a/code/game/machinery/doors/airlock_types.dm +++ b/code/game/machinery/doors/airlock_types.dm @@ -4,10 +4,14 @@ /obj/machinery/door/airlock/command icon = 'icons/obj/doors/airlocks/station/command.dmi' assemblytype = /obj/structure/door_assembly/door_assembly_com + obj_integrity = 450 + max_integrity = 450 /obj/machinery/door/airlock/security icon = 'icons/obj/doors/airlocks/station/security.dmi' assemblytype = /obj/structure/door_assembly/door_assembly_sec + obj_integrity = 450 + max_integrity = 450 /obj/machinery/door/airlock/engineering icon = 'icons/obj/doors/airlocks/station/engineering.dmi' @@ -21,6 +25,8 @@ name = "maintenance access" icon = 'icons/obj/doors/airlocks/station/maintenance.dmi' assemblytype = /obj/structure/door_assembly/door_assembly_mai + obj_integrity = 250 + max_integrity = 250 /obj/machinery/door/airlock/mining name = "mining airlock" @@ -59,6 +65,8 @@ opacity = 0 assemblytype = /obj/structure/door_assembly/door_assembly_com/glass glass = 1 + obj_integrity = 400 + max_integrity = 400 /obj/machinery/door/airlock/glass_engineering icon = 'icons/obj/doors/airlocks/station/engineering.dmi' @@ -71,6 +79,8 @@ opacity = 0 assemblytype = /obj/structure/door_assembly/door_assembly_sec/glass glass = 1 + obj_integrity = 400 + max_integrity = 400 /obj/machinery/door/airlock/glass_medical icon = 'icons/obj/doors/airlocks/station/medical.dmi' @@ -136,6 +146,8 @@ icon = 'icons/obj/doors/airlocks/station/diamond.dmi' var/mineral = "diamond" assemblytype = /obj/structure/door_assembly/door_assembly_diamond + obj_integrity = 1000 + max_integrity = 1000 /obj/machinery/door/airlock/uranium name = "uranium airlock" @@ -241,6 +253,8 @@ overlays_file = 'icons/obj/doors/airlocks/centcom/overlays.dmi' opacity = 1 assemblytype = /obj/structure/door_assembly/door_assembly_centcom + obj_integrity = 1000 + max_integrity = 1000 ////////////////////////////////// /* @@ -254,6 +268,8 @@ opacity = 1 assemblytype = /obj/structure/door_assembly/door_assembly_vault explosion_block = 2 + obj_integrity = 600 + max_integrity = 600 ////////////////////////////////// /* @@ -285,6 +301,8 @@ overlays_file = 'icons/obj/doors/airlocks/highsec/overlays.dmi' assemblytype = /obj/structure/door_assembly/door_assembly_highsecurity explosion_block = 2 + obj_integrity = 500 + max_integrity = 500 ////////////////////////////////// /* @@ -307,6 +325,8 @@ explosion_block = 3 hackProof = 1 aiControlDisabled = 1 + obj_integrity = 700 + max_integrity = 700 ////////////////////////////////// /* diff --git a/code/game/machinery/doors/door.dm b/code/game/machinery/doors/door.dm index a7b193653d7..9bb28c1175a 100644 --- a/code/game/machinery/doors/door.dm +++ b/code/game/machinery/doors/door.dm @@ -8,8 +8,9 @@ density = 1 layer = OPEN_DOOR_LAYER power_channel = ENVIRON - - armor = list(melee = 100, bullet = 100, laser = 100, energy = 100, bomb = 10, bio = 100, rad = 100, fire = 100, acid = 0) + obj_integrity = 350 + max_integrity = 350 + armor = list(melee = 30, bullet = 30, laser = 20, energy = 20, bomb = 10, bio = 100, rad = 100, fire = 80, acid = 70) var/secondsElectrified = 0 var/shockedby = list() @@ -27,6 +28,7 @@ var/locked = 0 //whether the door is bolted or not. var/assemblytype //the type of door frame to drop during deconstruction var/auto_close //TO BE REMOVED, no longer used, it's just preventing a runtime with a map var edit. + var/datum/effect_system/spark_spread/spark_system /obj/machinery/door/New() ..() @@ -37,7 +39,9 @@ update_freelook_sight() air_update_turf(1) airlocks += src - return + spark_system = new /datum/effect_system/spark_spread + spark_system.set_up(2, 1, src) + /obj/machinery/door/Destroy() @@ -45,6 +49,9 @@ air_update_turf(1) update_freelook_sight() airlocks -= src + if(spark_system) + qdel(spark_system) + spark_system = null return ..() //process() @@ -109,28 +116,6 @@ /obj/machinery/door/attack_ai(mob/user) return src.attack_hand(user) - -/obj/machinery/door/attack_paw(mob/user) - if(user.a_intent != "harm") - return src.attack_hand(user) - else - attack_generic(user, 5) - -/obj/machinery/door/proc/attack_generic(mob/user, damage = 0, damage_type = BRUTE) - if(operating) - return - user.do_attack_animation(src) - user.changeNext_move(CLICK_CD_MELEE) - user.visible_message("[user] smashes against the [src.name]!", \ - "You smash against the [src.name]!") - take_damage(damage, damage_type) - -/obj/machinery/door/attack_slime(mob/living/simple_animal/slime/S) - if(!S.is_adult) - attack_generic(S, 0) - else - attack_generic(S, 25) - /obj/machinery/door/attack_hand(mob/user) return try_to_activate_door(user) @@ -174,22 +159,28 @@ obj/machinery/door/proc/try_to_crowbar(obj/item/I, mob/user) else return ..() -/obj/machinery/door/take_damage(damage, damage_type = BRUTE, sound_effect = 1) +/obj/machinery/door/run_obj_armor(damage_amount, damage_type, damage_flag = 0, attack_dir) + if(damage_flag == "melee" && damage_amount < 10) + return 0 + . = ..() + +/obj/machinery/door/take_damage(damage_amount, damage_type = BRUTE, damage_flag = 0, sound_effect = 1, attack_dir) + . = ..() + if(. && obj_integrity > 0) + if(damage_amount >= 10 && prob(30)) + spark_system.start() + +/obj/machinery/door/play_attack_sound(damage_amount, damage_type = BRUTE, damage_flag = 0) switch(damage_type) if(BRUTE) - if(sound_effect) - if(glass) - playsound(loc, 'sound/effects/Glasshit.ogg', 90, 1) - else - playsound(loc, 'sound/weapons/smash.ogg', 50, 1) + if(glass) + playsound(loc, 'sound/effects/Glasshit.ogg', 90, 1) + else if(damage_amount) + playsound(loc, 'sound/weapons/smash.ogg', 50, 1) + else + playsound(src, 'sound/weapons/tap.ogg', 50, 1) if(BURN) - if(sound_effect) - playsound(src.loc, 'sound/items/Welder.ogg', 100, 1) - - -/obj/machinery/door/blob_act(obj/structure/blob/B) - if(prob(60)) - qdel(src) + playsound(src.loc, 'sound/items/Welder.ogg', 100, 1) /obj/machinery/door/emp_act(severity) if(prob(20/severity) && (istype(src,/obj/machinery/door/airlock) || istype(src,/obj/machinery/door/window)) ) @@ -204,15 +195,6 @@ obj/machinery/door/proc/try_to_crowbar(obj/item/I, mob/user) /obj/machinery/door/proc/unelectrify() secondsElectrified = 0 -/obj/machinery/door/ex_act(severity, target) - if(severity == 3) - if(prob(80)) - var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread - s.set_up(2, 1, src) - s.start() - return - ..() - /obj/machinery/door/update_icon() if(density) icon_state = "door1" @@ -353,3 +335,4 @@ obj/machinery/door/proc/try_to_crowbar(obj/item/I, mob/user) /obj/machinery/door/proc/disable_lockdown() if(!stat) //Opens only powered doors. open() //Open everything! + diff --git a/code/game/machinery/doors/firedoor.dm b/code/game/machinery/doors/firedoor.dm index 89e61042920..499050f431f 100644 --- a/code/game/machinery/doors/firedoor.dm +++ b/code/game/machinery/doors/firedoor.dm @@ -14,12 +14,16 @@ icon_state = "door_open" opacity = 0 density = 0 + obj_integrity = 300 + max_integrity = 300 heat_proof = 1 glass = 1 var/nextstate = null sub_door = 1 closingLayer = CLOSED_FIREDOOR_LAYER assemblytype = /obj/structure/firelock_frame + armor = list(melee = 30, bullet = 30, laser = 20, energy = 20, bomb = 10, bio = 100, rad = 100, fire = 95, acid = 70) + /obj/machinery/door/firedoor/Bumped(atom/AM) if(panel_open || operating) @@ -52,10 +56,7 @@ playsound(get_turf(src), 'sound/items/Deconstruct.ogg', 50, 1) user.visible_message("[user] unfastens [src]'s bolts.", \ "You undo [src]'s floor bolts.") - var/obj/structure/firelock_frame/F = new assemblytype(get_turf(src)) - F.constructionStep = CONSTRUCTION_PANEL_OPEN - F.update_icon() - qdel(src) + deconstruct(TRUE) return if(istype(C, /obj/item/weapon/screwdriver)) @@ -123,6 +124,18 @@ . = ..() latetoggle() +/obj/machinery/door/firedoor/deconstruct(disassembled = TRUE) + if(!(flags & NODECONSTRUCT)) + var/obj/structure/firelock_frame/F = new assemblytype(get_turf(src)) + if(disassembled) + F.constructionStep = CONSTRUCTION_PANEL_OPEN + else + F.constructionStep = CONSTRUCTION_WIRES_EXPOSED + F.obj_integrity = F.max_integrity * 0.5 + F.update_icon() + qdel(src) + + /obj/machinery/door/firedoor/proc/latetoggle() if(operating || stat & NOPOWER || !nextstate) return @@ -160,12 +173,14 @@ else return 1 - /obj/machinery/door/firedoor/heavy name = "heavy firelock" icon = 'icons/obj/doors/Doorfire.dmi' glass = 0 assemblytype = /obj/structure/firelock_frame/heavy + obj_integrity = 550 + max_integrity = 550 + /obj/item/weapon/electronics/firelock name = "firelock circuitry" @@ -217,7 +232,7 @@ return if(istype(C, /obj/item/weapon/wrench)) if(locate(/obj/machinery/door/firedoor) in get_turf(src)) - user << "There's already a firlock there." + user << "There's already a firelock there." return playsound(get_turf(src), 'sound/items/Ratchet.ogg', 50, 1) user.visible_message("[user] starts bolting down [src]...", \ diff --git a/code/game/machinery/doors/poddoor.dm b/code/game/machinery/doors/poddoor.dm index f259e2c5cdb..e6c83a4307a 100644 --- a/code/game/machinery/doors/poddoor.dm +++ b/code/game/machinery/doors/poddoor.dm @@ -8,6 +8,10 @@ explosion_block = 3 heat_proof = 1 safe = 0 + obj_integrity = 600 + max_integrity = 600 + armor = list(melee = 50, bullet = 100, laser = 100, energy = 100, bomb = 50, bio = 100, rad = 100, fire = 100, acid = 70) + resistance_flags = FIRE_PROOF /obj/machinery/door/poddoor/preopen icon_state = "open" @@ -36,30 +40,14 @@ //"BLAST" doors are obviously stronger than regular doors when it comes to BLASTS. /obj/machinery/door/poddoor/ex_act(severity, target) - if(target == src) - qdel(src) + if(severity == 3) return - switch(severity) - if(1) - if(prob(80)) - qdel(src) - else - var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread - s.set_up(2, 1, src) - s.start() - if(2) - if(prob(20)) - qdel(src) - else - var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread - s.set_up(2, 1, src) - s.start() + ..() - if(3) - if(prob(80)) - var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread - s.set_up(2, 1, src) - s.start() +/obj/machinery/door/poddoor/run_obj_armor(damage_amount, damage_type, damage_flag = 0, attack_dir) + if(damage_flag == "melee" && damage_amount < 70) //any melee attack below 70 dmg does nothing + return 0 + . = ..() /obj/machinery/door/poddoor/do_animate(animation) switch(animation) diff --git a/code/game/machinery/doors/windowdoor.dm b/code/game/machinery/doors/windowdoor.dm index 8b8e68e0d55..02cb9157938 100644 --- a/code/game/machinery/doors/windowdoor.dm +++ b/code/game/machinery/doors/windowdoor.dm @@ -3,9 +3,12 @@ desc = "A strong door." icon = 'icons/obj/doors/windoor.dmi' icon_state = "left" + resistance_flags = ACID_PROOF var/base_state = "left" - var/health = 150 //If you change this, consider changing ../door/window/brigdoor/ health at the bottom of this .dm file - armor = list(melee = 20, bullet = 50, laser = 50, energy = 100, bomb = 10, bio = 100, rad = 100, fire = 0, acid = 0) + obj_integrity = 150 //If you change this, consider changing ../door/window/brigdoor/ health at the bottom of this .dm file + max_integrity = 150 + integrity_failure = 0 + armor = list(melee = 20, bullet = 50, laser = 50, energy = 50, bomb = 10, bio = 100, rad = 100, fire = 70, acid = 100) visible = 0 flags = ON_BORDER opacity = 0 @@ -34,7 +37,7 @@ density = 0 for(var/I in debris) qdel(I) - if(health == 0) + if(obj_integrity == 0) playsound(src, "shatter", 70, 1) electronics = null return ..() @@ -159,40 +162,22 @@ src.operating = 0 return 1 -/obj/machinery/door/window/take_damage(damage, damage_type = BRUTE, sound_effect = 1) +/obj/machinery/door/window/play_attack_sound(damage_amount, damage_type = BRUTE, damage_flag = 0) switch(damage_type) if(BRUTE) - if(sound_effect) - playsound(loc, 'sound/effects/Glasshit.ogg', 90, 1) + playsound(loc, 'sound/effects/Glasshit.ogg', 90, 1) if(BURN) - if(sound_effect) - playsound(src.loc, 'sound/items/Welder.ogg', 100, 1) - else - return - health = max(0, src.health - damage) - if(health <= 0) - shatter() + playsound(src.loc, 'sound/items/Welder.ogg', 100, 1) -/obj/machinery/door/window/proc/shatter() - if(!(flags & NODECONSTRUCT)) + +/obj/machinery/door/window/deconstruct(disassembled = TRUE) + if(!(flags & NODECONSTRUCT) && !disassembled) for(var/obj/fragment in debris) fragment.forceMove(get_turf(src)) transfer_fingerprints_to(fragment) debris -= fragment qdel(src) -/obj/machinery/door/window/ex_act(severity, target) - switch(severity) - if(1) - qdel(src) - if(2) - if(prob(25)) - shatter() - else - take_damage(120, BRUTE, 0) - if(3) - take_damage(60, BRUTE, 0) - /obj/machinery/door/window/narsie_act() color = "#7D1919" @@ -200,27 +185,11 @@ new/obj/machinery/door/window/clockwork(src.loc, dir) qdel(src) -/obj/machinery/door/window/bullet_act(obj/item/projectile/P) - . = ..() - take_damage(round(P.damage / 2), P.damage_type, 0) - /obj/machinery/door/window/temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume) if(exposed_temperature > T0C + (reinf ? 1600 : 800)) - take_damage(round(exposed_volume / 200), BURN, 0) + take_damage(round(exposed_volume / 200), BURN, 0, 0) ..() -//When an object is thrown at the window -/obj/machinery/door/window/hitby(atom/movable/AM) - ..() - var/tforce = 0 - if(ismob(AM)) - tforce = 40 - else if(isobj(AM)) - var/obj/O = AM - tforce = O.throwforce - take_damage(tforce) - - /obj/machinery/door/window/attack_ai(mob/user) return src.attack_hand(user) @@ -319,20 +288,14 @@ if("deny") flick("[src.base_state]deny", src) -/obj/machinery/door/window/attack_hulk(mob/user) - ..(user, 1) - user.visible_message("[user] smashes through the windoor!", \ - "You tear through the windoor!") - user.say(pick(";RAAAAAAAARGH!", ";HNNNNNNNNNGGGGGGH!", ";GWAAAAAAAARRRHHH!", "NNNNNNNNGGGGGGGGHH!", ";AAAAAAARRRGH!" )) - take_damage(health) - /obj/machinery/door/window/brigdoor name = "secure door" icon_state = "leftsecure" base_state = "leftsecure" var/id = null - health = 300 //Stronger doors for prison (regular window door health is 200) + obj_integrity = 300 //Stronger doors for prison (regular window door health is 200) + max_integrity = 300 reinf = 1 explosion_block = 1 @@ -362,7 +325,7 @@ return ..() /obj/machinery/door/window/clockwork/ratvar_act() - health = initial(health) + obj_integrity = max_integrity /obj/machinery/door/window/clockwork/hasPower() return TRUE //yup that's power all right diff --git a/code/game/machinery/droneDispenser.dm b/code/game/machinery/droneDispenser.dm index 0934edccff7..7d57bb34aac 100644 --- a/code/game/machinery/droneDispenser.dm +++ b/code/game/machinery/droneDispenser.dm @@ -13,8 +13,9 @@ anchored = 1 density = 1 - var/health = 100 - var/max_health = 100 + obj_integrity = 250 + max_integrity = 250 + integrity_failure = 80 // These allow for different icons when creating custom dispensers var/icon_off = "off" @@ -54,7 +55,7 @@ /obj/machinery/droneDispenser/New() ..() - health = max_health + obj_integrity = max_integrity materials = new(src, list(MAT_METAL, MAT_GLASS), MINERAL_MATERIAL_AMOUNT*MAX_STACK_SIZE*2) @@ -157,9 +158,6 @@ ..() if((mode == DRONE_RECHARGING) && !stat && recharging_text) user << "[recharging_text]" - if(stat & BROKEN) - user << "[src] is smoking and steadily buzzing. \ - It seems to be broken." if(metal_cost) user << "It has [materials.amount(MAT_METAL)] \ units of metal stored." @@ -300,35 +298,26 @@ "You restore [src] to operation.") stat &= ~BROKEN - health = max_health + obj_integrity = max_integrity update_icon() else return ..() -/obj/machinery/droneDispenser/take_damage(damage, damage_type = BRUTE, - sound_effect = TRUE) - // But why would you hurt the dispenser? - switch(damage_type) - if(BURN) - if(sound_effect) - playsound(src.loc, 'sound/items/Welder.ogg', 100, 1) - if(BRUTE) - if(sound_effect) - if(damage) - playsound(loc, 'sound/weapons/smash.ogg', 50, 1) - else - playsound(loc, 'sound/weapons/tap.ogg', 50, 1) - else - return - health = max(health - damage, 0) - if(!health && !(stat & BROKEN)) - if(break_message) - audible_message("[src] \ - [break_message]") - if(break_sound) - playsound(src, break_sound, 50, 1) - stat |= BROKEN - update_icon() +/obj/machinery/droneDispenser/obj_break(damage_flag) + if(!(flags & NODECONSTRUCT)) + if(!(stat & BROKEN)) + if(break_message) + audible_message("[src] \ + [break_message]") + if(break_sound) + playsound(src, break_sound, 50, 1) + stat |= BROKEN + update_icon() + +/obj/machinery/droneDispenser/deconstruct(disassembled = TRUE) + if(!(flags & NODECONSTRUCT)) + new /obj/item/stack/sheet/metal(loc, 5) + qdel(src) #undef DRONE_PRODUCTION #undef DRONE_RECHARGING diff --git a/code/game/machinery/embedded_controller/access_controller.dm b/code/game/machinery/embedded_controller/access_controller.dm index 867291018b7..9ed4ea26c3c 100644 --- a/code/game/machinery/embedded_controller/access_controller.dm +++ b/code/game/machinery/embedded_controller/access_controller.dm @@ -10,6 +10,7 @@ use_power = 1 idle_power_usage = 2 active_power_usage = 4 + resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF var/idSelf /obj/machinery/doorButtons/attackby(obj/O, mob/user) diff --git a/code/game/machinery/firealarm.dm b/code/game/machinery/firealarm.dm index 1d9ef9bd082..faf731632d8 100644 --- a/code/game/machinery/firealarm.dm +++ b/code/game/machinery/firealarm.dm @@ -15,13 +15,16 @@ icon = 'icons/obj/monitors.dmi' icon_state = "fire0" anchored = 1 + obj_integrity = 250 + max_integrity = 250 + integrity_failure = 100 + armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 100, rad = 100, fire = 90, acid = 30) use_power = 1 idle_power_usage = 2 active_power_usage = 6 power_channel = ENVIRON var/detecting = 1 var/buildstage = 2 // 2 = complete, 1 = no wires, 0 = circuit gone - var/health = 50 /obj/machinery/firealarm/New(loc, dir, building) @@ -40,7 +43,7 @@ update_icon() /obj/machinery/firealarm/update_icon() - src.overlays = list() + cut_overlays() var/area/A = src.loc A = A.loc @@ -51,25 +54,23 @@ else icon_state = "fire0" - if(stat & NOPOWER) - return if(stat & BROKEN) icon_state = "firex" return + if(stat & NOPOWER) + return + add_overlay("overlay_[security_level]") if(detecting) add_overlay("overlay_[A.fire ? "fire" : "clear"]") else add_overlay("overlay_fire") -/obj/machinery/firealarm/bullet_act(obj/item/projectile/P) - . = ..() - take_damage(P.damage, P.damage_type, 0) - /obj/machinery/firealarm/emp_act(severity) if(prob(50 / severity)) alarm() + ..() /obj/machinery/firealarm/emag_act(mob/user) if(!emagged) @@ -82,6 +83,7 @@ /obj/machinery/firealarm/temperature_expose(datum/gas_mixture/air, temperature, volume) if(!emagged && detecting && !stat && temperature > T0C + 200) alarm() + ..() /obj/machinery/firealarm/proc/alarm() if(!is_operational()) @@ -154,9 +156,7 @@ else if (istype(W, /obj/item/weapon/wirecutters)) buildstage = 1 playsound(src.loc, 'sound/items/Wirecutter.ogg', 50, 1) - var/obj/item/stack/cable_coil/coil = new /obj/item/stack/cable_coil() - coil.amount = 5 - coil.loc = user.loc + new /obj/item/stack/cable_coil(user.loc, 5) user << "You cut the wires from \the [src]." update_icon() return @@ -204,26 +204,28 @@ return return ..() -/obj/machinery/firealarm/take_damage(damage, damage_type = BRUTE, sound_effect = 1) - switch(damage_type) - if(BRUTE) - if(sound_effect) - if(damage) - playsound(loc, 'sound/weapons/smash.ogg', 50, 1) - else - playsound(loc, 'sound/weapons/tap.ogg', 50, 1) - if(BURN) - if(sound_effect) - playsound(src.loc, 'sound/items/Welder.ogg', 100, 1) - else - return - if(!(stat & BROKEN) && buildstage != 0) //can't break the electronics if there isn't any inside. - health -= damage - if(health <= 0) - stat |= BROKEN - update_icon() - else if(prob(33)) - alarm() + +/obj/machinery/firealarm/take_damage(damage_amount, damage_type = BRUTE, damage_flag = 0, sound_effect = 1, attack_dir) + . = ..() + if(.) //damage received + if(obj_integrity > 0 && !(stat & BROKEN) && buildstage != 0) + if(prob(33)) + alarm() + +/obj/machinery/firealarm/obj_break(damage_flag) + if(!(stat & BROKEN) && !(flags & NODECONSTRUCT) && buildstage != 0) //can't break the electronics if there isn't any inside. + stat |= BROKEN + update_icon() + +/obj/machinery/firealarm/deconstruct(disassembled = TRUE) + if(!(flags & NODECONSTRUCT)) + new /obj/item/stack/sheet/metal(loc, 1) + var/obj/item/I = new /obj/item/weapon/electronics/firealarm(loc) + if(!disassembled) + I.obj_integrity = I.max_integrity * 0.5 + new /obj/item/stack/cable_coil(loc, 3) + qdel(src) + /* * Party button diff --git a/code/game/machinery/flasher.dm b/code/game/machinery/flasher.dm index 80ff532d236..99de5c77edc 100644 --- a/code/game/machinery/flasher.dm +++ b/code/game/machinery/flasher.dm @@ -11,6 +11,9 @@ var/last_flash = 0 //Don't want it getting spammed like regular flashes var/strength = 5 //How weakened targets are when flashed. var/base_state = "mflash" + obj_integrity = 250 + max_integrity = 250 + integrity_failure = 100 anchored = 1 /obj/machinery/flasher/portable //Portable version of the flasher. Only flashes when anchored @@ -33,6 +36,9 @@ /obj/machinery/flasher/Destroy() remove_from_proximity_list(src, range) + if(bulb) + qdel(bulb) + bulb = null ..() /obj/machinery/flasher/Move() @@ -47,7 +53,7 @@ else icon_state = "[base_state]1" else - stat |= ~NOPOWER + stat |= NOPOWER icon_state = "[base_state]1-p" //Don't want to render prison breaks impossible @@ -59,7 +65,7 @@ playsound(src.loc, 'sound/items/Wirecutter.ogg', 100, 1) if(do_after(user, 30/W.toolspeed, target = src) && bulb) user.visible_message("[user] has disconnected [src]'s flashbulb!", "You disconnect [src]'s flashbulb.") - bulb.loc = src.loc + bulb.forceMove(loc) bulb = null power_change() @@ -68,7 +74,7 @@ if(!user.drop_item()) return user.visible_message("[user] installs [W] into [src].", "You install [W] into [src].") - W.loc = src + W.forceMove(src) bulb = W power_change() else @@ -80,11 +86,7 @@ playsound(loc, 'sound/items/Ratchet.ogg', 50, 1) if(do_after(user, 40/W.toolspeed, target = src)) user << "You unsecure the flasher frame." - var/obj/item/wallframe/flasher/F = new(get_turf(src)) - transfer_fingerprints_to(F) - F.id = id - playsound(loc, 'sound/items/Deconstruct.ogg', 50, 1) - qdel(src) + deconstruct(TRUE) else user << "Remove a flashbulb from [src] first!" else @@ -94,8 +96,11 @@ /obj/machinery/flasher/attack_ai() if (anchored) return flash() - else - return + +/obj/machinery/flasher/run_obj_armor(damage_amount, damage_type, damage_flag = 0, attack_dir) + if(damage_flag == "melee" && damage_amount < 10) //any melee attack below 10 dmg does nothing + return 0 + . = ..() /obj/machinery/flasher/proc/flash() if (!powered() || !bulb) @@ -128,14 +133,34 @@ /obj/machinery/flasher/emp_act(severity) - if(stat & (BROKEN|NOPOWER)) - ..(severity) - return - if(bulb && prob(75/severity)) - flash() - bulb.burn_out() - power_change() - ..(severity) + if(!(stat & (BROKEN|NOPOWER))) + if(bulb && prob(75/severity)) + flash() + bulb.burn_out() + power_change() + ..() + +/obj/machinery/flasher/obj_break(damage_flag) + if(!(flags & NODECONSTRUCT)) + if(!(stat & BROKEN)) + stat |= BROKEN + if(bulb) + bulb.burn_out() + power_change() + +/obj/machinery/flasher/deconstruct(disassembled = TRUE) + if(!(flags & NODECONSTRUCT)) + if(bulb) + bulb.forceMove(loc) + bulb = null + if(disassembled) + var/obj/item/wallframe/flasher/F = new(get_turf(src)) + transfer_fingerprints_to(F) + F.id = id + playsound(loc, 'sound/items/Deconstruct.ogg', 50, 1) + else + new /obj/item/stack/sheet/metal (loc, 2) + qdel(src) /obj/machinery/flasher/portable/HasProximity(atom/movable/AM) if (last_flash && world.time < last_flash + 150) diff --git a/code/game/machinery/hologram.dm b/code/game/machinery/hologram.dm index aa6500e9b37..6545d93f90b 100644 --- a/code/game/machinery/hologram.dm +++ b/code/game/machinery/hologram.dm @@ -39,6 +39,9 @@ var/const/HOLOPAD_MODE = RANGE_BASED flags = HEAR languages_spoken = ROBOT | HUMAN languages_understood = ROBOT | HUMAN + obj_integrity = 300 + max_integrity = 300 + armor = list(melee = 50, bullet = 20, laser = 20, energy = 20, bomb = 0, bio = 0, rad = 0, fire = 50, acid = 0) var/list/masters = list()//List of AIs that use the holopad var/last_request = 0 //to prevent request spam. ~Carn var/holo_range = 5 // Change to change how far the AI can move away from the holopad before deactivating. diff --git a/code/game/machinery/igniter.dm b/code/game/machinery/igniter.dm index 36034138b6f..2f0cf01823e 100644 --- a/code/game/machinery/igniter.dm +++ b/code/game/machinery/igniter.dm @@ -9,6 +9,10 @@ use_power = 1 idle_power_usage = 2 active_power_usage = 4 + obj_integrity = 300 + max_integrity = 300 + armor = list(melee = 50, bullet = 30, laser = 70, energy = 50, bomb = 20, bio = 0, rad = 0, fire = 100, acid = 70) + resistance_flags = FIRE_PROOF /obj/machinery/igniter/attack_ai(mob/user) return src.attack_hand(user) @@ -118,8 +122,6 @@ return 1 /obj/machinery/sparker/emp_act(severity) - if(stat & (BROKEN|NOPOWER)) - ..(severity) - return - ignite() - ..(severity) \ No newline at end of file + if(!(stat & (BROKEN|NOPOWER))) + ignite() + ..() \ No newline at end of file diff --git a/code/game/machinery/iv_drip.dm b/code/game/machinery/iv_drip.dm index 51be5c91094..ccc199e0f3e 100644 --- a/code/game/machinery/iv_drip.dm +++ b/code/game/machinery/iv_drip.dm @@ -95,6 +95,10 @@ else return ..() +/obj/machinery/iv_drip/deconstruct(disassembled = TRUE) + if(!(flags & NODECONSTRUCT)) + new /obj/item/stack/sheet/metal(loc) + qdel(src) /obj/machinery/iv_drip/process() if(!attached) diff --git a/code/game/machinery/lightswitch.dm b/code/game/machinery/lightswitch.dm index 2383172069b..4fdd4377a99 100644 --- a/code/game/machinery/lightswitch.dm +++ b/code/game/machinery/lightswitch.dm @@ -69,8 +69,6 @@ updateicon() /obj/machinery/light_switch/emp_act(severity) - if(stat & (BROKEN|NOPOWER)) - ..(severity) - return - power_change() - ..(severity) \ No newline at end of file + if(!(stat & (BROKEN|NOPOWER))) + power_change() + ..() \ No newline at end of file diff --git a/code/game/machinery/limbgrower.dm b/code/game/machinery/limbgrower.dm index 45b975a89e7..112b8f028cc 100644 --- a/code/game/machinery/limbgrower.dm +++ b/code/game/machinery/limbgrower.dm @@ -71,6 +71,7 @@ /obj/machinery/limbgrower/on_deconstruction() for(var/obj/item/weapon/reagent_containers/glass/G in component_parts) reagents.trans_to(G, G.reagents.maximum_volume) + ..() /obj/machinery/limbgrower/attackby(obj/item/O, mob/user, params) if (busy) diff --git a/code/game/machinery/machinery.dm b/code/game/machinery/machinery.dm index d9e78c96da8..ce2ac895743 100644 --- a/code/game/machinery/machinery.dm +++ b/code/game/machinery/machinery.dm @@ -99,6 +99,10 @@ Class Procs: verb_say = "beeps" verb_yell = "blares" pressure_resistance = 15 + obj_integrity = 200 + max_integrity = 200 + armor = list(melee = 25, bullet = 10, laser = 10, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 50, acid = 70) + var/stat = 0 var/emagged = 0 var/use_power = 1 @@ -149,9 +153,8 @@ Class Procs: return PROCESS_KILL /obj/machinery/emp_act(severity) - if(use_power && stat == 0) + if(use_power && !stat) use_power(7500/severity) - PoolOrNew(/obj/effect/overlay/temp/emp, loc) ..() @@ -166,12 +169,12 @@ Class Procs: /obj/machinery/proc/dropContents() var/turf/T = get_turf(src) for(var/mob/living/L in src) - L.loc = T - L.reset_perspective(null) + L.forceMove(T) L.update_canmove() //so the mob falls if he became unconscious inside the machine. . += L - T.contents += contents + for(var/atom/movable/A in contents) + A.forceMove(T) occupant = null /obj/machinery/proc/close_machine(mob/living/target = null) @@ -189,10 +192,6 @@ Class Procs: updateUsrDialog() update_icon() -/obj/machinery/blob_act(obj/structure/blob/B) - if(density && prob(75)) - qdel(src) - /obj/machinery/proc/auto_use_power() if(!powered(power_channel)) return 0 @@ -240,48 +239,6 @@ Class Procs: //////////////////////////////////////////////////////////////////////////////////////////// -/obj/machinery/mech_melee_attack(obj/mecha/M) - M.do_attack_animation(src) - if(M.damtype == BRUTE || M.damtype == BURN) - visible_message("[M.name] has hit [src].") - take_damage(M.force*2, M.damtype) // multiplied by 2 so we can hit machines hard but not be overpowered against mobs. - return 1 - return 0 - -/obj/machinery/attacked_by(obj/item/I, mob/living/user) - ..() - take_damage(I.force, I.damtype, 1) - -/obj/machinery/proc/take_damage(damage, damage_type = BRUTE, sound_effect = 1) - switch(damage_type) - if(BRUTE) - if(sound_effect) - if(damage) - playsound(loc, 'sound/weapons/smash.ogg', 50, 1) - else - playsound(loc, 'sound/weapons/tap.ogg', 50, 1) - if(BURN) - if(sound_effect) - playsound(src.loc, 'sound/items/Welder.ogg', 100, 1) - -/obj/machinery/attack_alien(mob/living/carbon/alien/humanoid/user) - user.changeNext_move(CLICK_CD_MELEE) - user.do_attack_animation(src) - add_hiddenprint(user) - visible_message("\The [user] slashes at [src]!") - playsound(src.loc, 'sound/weapons/slash.ogg', 100, 1) - take_damage(20, BRUTE, 0) - -/obj/machinery/attack_animal(mob/living/simple_animal/M) - M.changeNext_move(CLICK_CD_MELEE) - M.do_attack_animation(src) - if(M.melee_damage_upper || M.obj_damage) - M.visible_message("[M.name] smashes against \the [src.name].",\ - "You smash against the [src.name].") - if(M.obj_damage) - take_damage(M.obj_damage, M.melee_damage_type, 1) - else - take_damage(rand(M.melee_damage_lower,M.melee_damage_upper), M.melee_damage_type, 1) /obj/machinery/attack_paw(mob/living/user) @@ -292,7 +249,7 @@ Class Procs: user.do_attack_animation(src) user.visible_message("[user.name] smashes against \the [src.name] with its paws.",\ "You smash against the [src.name] with your paws.") - take_damage(4, BRUTE, 1) + take_damage(4, BRUTE, "melee", 1) /obj/machinery/attack_ai(mob/user) @@ -344,18 +301,27 @@ Class Procs: . = istype(C) && (panel_open || ignore_panel) && !(flags & NODECONSTRUCT) if(.) playsound(loc, 'sound/items/Crowbar.ogg', 50, 1) - deconstruct() + deconstruct(TRUE) -/obj/machinery/proc/deconstruct() - on_deconstruction() - var/obj/structure/frame/machine/M = new /obj/structure/frame/machine(loc) - transfer_fingerprints_to(M) - M.state = 2 - M.icon_state = "box_1" - for(var/obj/item/I in component_parts) - I.forceMove(loc) +/obj/machinery/deconstruct(disassembled = TRUE) + if(!(flags & NODECONSTRUCT)) + on_deconstruction() + if(component_parts && component_parts.len) + var/obj/structure/frame/machine/M = new /obj/structure/frame/machine(loc) + M.anchored = anchored + if(!disassembled) + M.obj_integrity = M.max_integrity * 0.5 //the frame is already half broken + transfer_fingerprints_to(M) + M.state = 2 + M.icon_state = "box_1" + for(var/obj/item/I in component_parts) + I.forceMove(loc) qdel(src) +/obj/machinery/obj_break(damage_flag) + if(!(flags & NODECONSTRUCT)) + stat |= BROKEN + /obj/machinery/proc/default_deconstruction_screwdriver(mob/user, icon_state_open, icon_state_closed, obj/item/weapon/screwdriver/S) if(istype(S) && !(flags & NODECONSTRUCT)) playsound(loc, 'sound/items/Screwdriver.ogg', 50, 1) @@ -432,6 +398,21 @@ Class Procs: /obj/machinery/examine(mob/user) ..() + if(stat & BROKEN) + user << "It looks broken and non functional." + if(!(resistance_flags & INDESTRUCTIBLE)) + if(resistance_flags & ON_FIRE) + user << "It's on fire!" + var/healthpercent = (obj_integrity/max_integrity) * 100 + switch(healthpercent) + if(100 to INFINITY) + user << "It seems pristine and undamaged." + if(50 to 100) + user << "It looks slightly damaged." + if(25 to 50) + user << "It appears heavily damaged." + if(0 to 25) + user << "It's falling apart!" if(user.research_scanner && component_parts) display_parts(user) diff --git a/code/game/machinery/navbeacon.dm b/code/game/machinery/navbeacon.dm index 9b644c909bc..3f8a3c35251 100644 --- a/code/game/machinery/navbeacon.dm +++ b/code/game/machinery/navbeacon.dm @@ -10,6 +10,9 @@ level = 1 // underfloor layer = LOW_OBJ_LAYER anchored = 1 + obj_integrity = 500 + max_integrity = 500 + armor = list(melee = 70, bullet = 70, laser = 70, energy = 70, bomb = 0, bio = 0, rad = 0, fire = 80, acid = 80) var/open = 0 // true if cover is open var/locked = 1 // true if controls are locked diff --git a/code/game/machinery/newscaster.dm b/code/game/machinery/newscaster.dm index 43dea27aad0..f75846cd36d 100644 --- a/code/game/machinery/newscaster.dm +++ b/code/game/machinery/newscaster.dm @@ -175,7 +175,10 @@ var/list/obj/machinery/newscaster/allCasters = list() verb_say = "beeps" verb_ask = "beeps" verb_exclaim = "beeps" - armor = list(melee = 50, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 0, acid = 0) + armor = list(melee = 50, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 50, acid = 30) + obj_integrity = 200 + max_integrity = 200 + integrity_failure = 50 var/screen = 0 var/paper_remaining = 15 var/securityCaster = 0 @@ -187,12 +190,10 @@ var/list/obj/machinery/newscaster/allCasters = list() var/obj/item/weapon/photo/photo = null var/channel_name = "" var/c_locked=0 - var/health = 60 var/datum/newscaster/feed_channel/viewing_channel = null var/allow_comments = 1 luminosity = 0 anchored = 1 - var/hitstaken = 0 //TO BE REMOVED, no longer used, the var is present in a map var edit which must be removed. /obj/machinery/newscaster/security_unit name = "security newscaster" @@ -227,12 +228,13 @@ var/list/obj/machinery/newscaster/allCasters = list() icon_state = "newscaster_normal" if(alert) add_overlay("newscaster_alert") - switch(health) - if(45 to 60) + var/hp_percent = obj_integrity * 100 /max_integrity + switch(hp_percent) + if(75 to 100) return - if(30 to 45) + if(50 to 75) add_overlay("crack1") - if(15 to 30) + if(25 to 50) add_overlay("crack2") else add_overlay("crack3") @@ -249,17 +251,9 @@ var/list/obj/machinery/newscaster/allCasters = list() stat |= NOPOWER update_icon() -/obj/machinery/newscaster/ex_act(severity, target) - switch(severity) - if(1) - qdel(src) - if(2) - if(prob(50)) - qdel(src) - else - take_damage(rand(40,80), BRUTE, 0) - else - take_damage(rand(20,40), BRUTE, 0) +/obj/machinery/newscaster/take_damage(damage_amount, damage_type = BRUTE, damage_flag = 0, sound_effect = 1, attack_dir) + . = ..() + update_icon() /obj/machinery/newscaster/attack_ai(mob/user) return attack_hand(user) @@ -747,6 +741,7 @@ var/list/obj/machinery/newscaster/allCasters = list() return user << "You repair [src]." playsound(loc, 'sound/items/Welder2.ogg', 50, 1) + obj_integrity = max_integrity stat &= ~BROKEN update_icon() else @@ -754,26 +749,28 @@ var/list/obj/machinery/newscaster/allCasters = list() else return ..() -/obj/machinery/newscaster/take_damage(damage, damage_type = BRUTE, sound_effect = 1) +/obj/machinery/newscaster/play_attack_sound(damage, damage_type = BRUTE, damage_flag = 0) switch(damage_type) if(BRUTE) - if(sound_effect) - if(stat & BROKEN) - playsound(loc, 'sound/effects/hit_on_shattered_glass.ogg', 100, 1) - else - playsound(loc, 'sound/effects/Glasshit.ogg', 90, 1) + if(stat & BROKEN) + playsound(loc, 'sound/effects/hit_on_shattered_glass.ogg', 100, 1) + else + playsound(loc, 'sound/effects/Glasshit.ogg', 90, 1) if(BURN) - if(sound_effect) - playsound(src.loc, 'sound/items/Welder.ogg', 100, 1) - else - return - if(damage < 15) //so it can't be broken with a small weapon. - return - if(!(stat & BROKEN)) - health -= damage - if(health <= 0) - stat |= BROKEN - playsound(loc, 'sound/effects/Glassbr3.ogg', 100, 1) + playsound(src.loc, 'sound/items/Welder.ogg', 100, 1) + + +/obj/machinery/newscaster/deconstruct(disassembled = TRUE) + if(!(flags & NODECONSTRUCT)) + new /obj/item/stack/sheet/metal(loc, 2) + new /obj/item/weapon/shard(loc) + new /obj/item/weapon/shard(loc) + qdel(src) + +/obj/machinery/newscaster/obj_break() + if(!(stat & BROKEN) && !(flags & NODECONSTRUCT)) + stat |= BROKEN + playsound(loc, 'sound/effects/Glassbr3.ogg', 100, 1) update_icon() @@ -781,7 +778,7 @@ var/list/obj/machinery/newscaster/allCasters = list() if(user.a_intent != "harm") user << "The newscaster controls are far too complicated for your tiny brain!" else - take_damage(5) + take_damage(5, BRUTE, "melee") /obj/machinery/newscaster/proc/AttachPhoto(mob/user) if(photo) diff --git a/code/game/machinery/porta_turret/portable_turret.dm b/code/game/machinery/porta_turret/portable_turret.dm index b4b048ae15c..def17a8198c 100644 --- a/code/game/machinery/porta_turret/portable_turret.dm +++ b/code/game/machinery/porta_turret/portable_turret.dm @@ -24,8 +24,10 @@ var/lasercolor = "" //Something to do with lasertag turrets, blame Sieve for not adding a comment. var/raised = 0 //if the turret cover is "open" and the turret is raised var/raising= 0 //if the turret is currently opening or closing its cover - var/health = 80 //the turret's health - armor = list(melee = 50, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 0, acid = 0) + obj_integrity = 160 //the turret's health + max_integrity = 160 + integrity_failure = 80 + armor = list(melee = 50, bullet = 30, laser = 30, energy = 30, bomb = 30, bio = 0, rad = 0, fire = 90, acid = 90) var/locked = 1 //if the turret's behaviour control access is locked var/controllock = 0 //if the turret responds to control panels @@ -159,8 +161,9 @@ /obj/machinery/porta_turret/Destroy() //deletes its own cover with it - qdel(cover) - cover = null + if(cover) + qdel(cover) + cover = null return ..() @@ -317,12 +320,6 @@ else return ..() -/obj/machinery/porta_turret/attacked_by(obj/item/I, mob/user) - if(I.force) - user.visible_message("[user] has hit [src] with [I]!", "You hit [src] with [I]!") - take_damage(I.force * 0.5, I.damtype) - - /obj/machinery/porta_turret/emag_act(mob/user) if(!emagged) user << "You short out [src]'s threat assessment circuits." @@ -336,7 +333,6 @@ /obj/machinery/porta_turret/bullet_act(obj/item/projectile/P) . = ..() - take_damage(P.damage, P.damage_type, 0) if(!disabled) if(lasercolor == "b") if(istype(P, /obj/item/projectile/beam/lasertag/redtag)) @@ -366,55 +362,26 @@ ..() -/obj/machinery/porta_turret/ex_act(severity, target) - if(severity >= 3) //turret dies if an explosion touches it! - die() - else - qdel(src) +/obj/machinery/porta_turret/take_damage(damage, damage_type = BRUTE, damage_flag = 0, sound_effect = 1) + . = ..() + if(.) //damage received + if(prob(30)) + spark_system.start() + if(on && !attacked && !emagged) + attacked = 1 + spawn(60) + attacked = 0 -/obj/machinery/porta_turret/attack_animal(mob/living/simple_animal/user) - user.changeNext_move(CLICK_CD_MELEE) - if(user.melee_damage_upper == 0) - user.emote("[user.friendly] [src]") - else - user.do_attack_animation(src) - var/damage = rand(user.melee_damage_lower, user.melee_damage_upper) - take_damage(damage) +/obj/machinery/porta_turret/deconstruct(disassembled = TRUE) + qdel(src) -/obj/machinery/porta_turret/take_damage(damage, damage_type = BRUTE, sound_effect = 1) - switch(damage_type) - if(BRUTE) - if(sound_effect) - if(damage) - playsound(loc, 'sound/weapons/smash.ogg', 50, 1) - else - playsound(loc, 'sound/weapons/tap.ogg', 50, 1) - if(BURN) - if(sound_effect) - playsound(loc, 'sound/items/Welder.ogg', 40, 1) - else - return - if(!(stat & BROKEN)) - if(damage > 1) //if the force of impact dealt at least 1 damage, the turret gets pissed off - if(prob(30)) - spark_system.start() - if(on && !attacked && !emagged) - attacked = 1 - spawn(60) - attacked = 0 - health -= damage - if(health <= 0) - die() - -/obj/machinery/porta_turret/proc/die() //called when the turret dies, ie, health <= 0 - health = 0 - density = 0 - stat |= BROKEN //enables the BROKEN bit - icon_state = "[base_icon_state]Broken" - invisibility = 0 - spark_system.start() //creates some sparks because they look cool - density = 1 - qdel(cover) //deletes the cover - no need on keeping it there! +/obj/machinery/porta_turret/obj_break(damage_flag) + if(!(flags & NODECONSTRUCT) && !(stat & BROKEN)) + stat |= BROKEN //enables the BROKEN bit + icon_state = "[base_icon_state]Broken" + invisibility = 0 + spark_system.start() //creates some sparks because they look cool + qdel(cover) //deletes the cover - no need on keeping it there! @@ -676,7 +643,7 @@ return 10 //Syndicate turrets shoot everything not in their faction /obj/machinery/porta_turret/syndicate/pod - health = 40 + obj_integrity = 40 projectile = /obj/item/projectile/bullet/weakbullet3 eprojectile = /obj/item/projectile/bullet/weakbullet3 @@ -704,6 +671,7 @@ var/ailock = 0 // AI cannot use this req_access = list(access_ai_upload) var/list/obj/machinery/porta_turret/turrets = list() + resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF /obj/machinery/turretid/New(loc, ndir = 0, built = 0) ..() diff --git a/code/game/machinery/porta_turret/portable_turret_cover.dm b/code/game/machinery/porta_turret/portable_turret_cover.dm index bb399096382..5e2a860da13 100644 --- a/code/game/machinery/porta_turret/portable_turret_cover.dm +++ b/code/game/machinery/porta_turret/portable_turret_cover.dm @@ -10,9 +10,18 @@ anchored = 1 layer = HIGH_OBJ_LAYER density = 0 + obj_integrity = 80 + max_integrity = 80 var/obj/machinery/porta_turret/parent_turret = null +/obj/machinery/porta_turret_cover/Destroy() + if(parent_turret) + parent_turret.cover = null + parent_turret.invisibility = 0 + parent_turret = null + return ..() + //The below code is pretty much just recoded from the initial turret object. It's necessary but uncommented because it's exactly the same! //>necessary //I'm not fixing it because i'm fucking bored of this code already, but someone should just reroute these to the parent turret's procs. @@ -67,6 +76,15 @@ /obj/machinery/porta_turret_cover/attacked_by(obj/item/I, mob/user) parent_turret.attacked_by(I, user) +/obj/machinery/porta_turret_cover/attack_alien(mob/living/carbon/alien/humanoid/user) + parent_turret.attack_alien(user) + +/obj/machinery/porta_turret_cover/attack_animal(mob/living/simple_animal/user) + parent_turret.attack_animal(user) + +/obj/machinery/porta_turret_cover/attack_hulk(mob/living/carbon/human/user, does_attack_animation = 0) + parent_turret.attack_hulk(user) + /obj/machinery/porta_turret_cover/can_be_overridden() . = 0 diff --git a/code/game/machinery/recharger.dm b/code/game/machinery/recharger.dm index 5254b3b511f..2067cce19f8 100644 --- a/code/game/machinery/recharger.dm +++ b/code/game/machinery/recharger.dm @@ -148,20 +148,17 @@ update_icon() /obj/machinery/recharger/emp_act(severity) - if(stat & (NOPOWER|BROKEN) || !anchored) - ..(severity) - return + if(!(stat & (NOPOWER|BROKEN)) && anchored) + if(istype(charging, /obj/item/weapon/gun/energy)) + var/obj/item/weapon/gun/energy/E = charging + if(E.power_supply) + E.power_supply.emp_act(severity) - if(istype(charging, /obj/item/weapon/gun/energy)) - var/obj/item/weapon/gun/energy/E = charging - if(E.power_supply) - E.power_supply.emp_act(severity) - - else if(istype(charging, /obj/item/weapon/melee/baton)) - var/obj/item/weapon/melee/baton/B = charging - if(B.bcell) - B.bcell.charge = 0 - ..(severity) + else if(istype(charging, /obj/item/weapon/melee/baton)) + var/obj/item/weapon/melee/baton/B = charging + if(B.bcell) + B.bcell.charge = 0 + ..() /obj/machinery/recharger/update_icon(using_power = 0) //we have an update_icon() in addition to the stuff in process to make it feel a tiny bit snappier. diff --git a/code/game/machinery/rechargestation.dm b/code/game/machinery/rechargestation.dm index 32c60b66759..f0bdd30586d 100644 --- a/code/game/machinery/rechargestation.dm +++ b/code/game/machinery/rechargestation.dm @@ -53,16 +53,9 @@ open_machine() /obj/machinery/recharge_station/emp_act(severity) - if(stat & (BROKEN|NOPOWER)) - ..(severity) - return - if(occupant) - occupant.emp_act(severity) - open_machine() - ..(severity) - -/obj/machinery/recharge_station/ex_act(severity, target) - if(occupant) + if(!(stat & (BROKEN|NOPOWER))) + if(occupant) + occupant.emp_act(severity) open_machine() ..() diff --git a/code/game/machinery/requests_console.dm b/code/game/machinery/requests_console.dm index aa169ff97b6..dd75a88c0b2 100644 --- a/code/game/machinery/requests_console.dm +++ b/code/game/machinery/requests_console.dm @@ -57,6 +57,9 @@ var/list/obj/machinery/requests_console/allConsoles = list() var/obj/item/device/radio/Radio var/emergency //If an emergency has been called by this device. Acts as both a cooldown and lets the responder know where it the emergency was triggered from luminosity = 0 + obj_integrity = 300 + max_integrity = 300 + armor = list(melee = 70, bullet = 30, laser = 30, energy = 30, bomb = 0, bio = 0, rad = 0, fire = 90, acid = 90) /obj/machinery/requests_console/power_change() ..() diff --git a/code/game/machinery/shieldgen.dm b/code/game/machinery/shieldgen.dm index 39030726ac2..036959b4ec9 100644 --- a/code/game/machinery/shieldgen.dm +++ b/code/game/machinery/shieldgen.dm @@ -1,110 +1,95 @@ -/obj/machinery/shield - name = "emergency energy shield" - desc = "An energy shield used to contain hull breaches." - icon = 'icons/effects/effects.dmi' - icon_state = "shield-old" - density = 1 - opacity = 0 - anchored = 1 - resistance_flags = LAVA_PROOF | FIRE_PROOF | UNACIDABLE - var/const/max_health = 200 - var/health = max_health //The shield can only take so much beating (prevents perma-prisons) +/obj/structure/emergency_shield + name = "emergency energy shield" + desc = "An energy shield used to contain hull breaches." + icon = 'icons/effects/effects.dmi' + icon_state = "shield-old" + density = 1 + opacity = 0 + anchored = 1 + resistance_flags = LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF + max_integrity = 200 + obj_integrity = 200 //The shield can only take so much beating (prevents perma-prisons) -/obj/machinery/shield/New() +/obj/structure/emergency_shield/New() src.setDir(pick(1,2,3,4)) ..() air_update_turf(1) -/obj/machinery/shield/Destroy() +/obj/structure/emergency_shield/Destroy() opacity = 0 density = 0 air_update_turf(1) return ..() -/obj/machinery/shield/Move() +/obj/structure/emergency_shield/Move() var/turf/T = loc ..() move_update_air(T) -/obj/machinery/shield/CanPass(atom/movable/mover, turf/target, height) +/obj/structure/emergency_shield/CanPass(atom/movable/mover, turf/target, height) if(!height) return 0 else return ..() -/obj/machinery/shield/CanAtmosPass(turf/T) +/obj/structure/emergency_shield/CanAtmosPass(turf/T) return !density -/obj/machinery/shield/bullet_act(obj/item/projectile/P) - . = ..() - take_damage(P.damage, P.damage_type) - -/obj/machinery/shield/ex_act(severity, target) - switch(severity) - if(1) - take_damage(rand(180,260), BRUTE, 0) - if(2) - take_damage(rand(150,230), BRUTE, 0) - if(3) - take_damage(rand(80,150), BRUTE, 0) - -/obj/machinery/shield/emp_act(severity) +/obj/structure/emergency_shield/emp_act(severity) switch(severity) if(1) qdel(src) if(2) - take_damage(50, BRUTE, 0) + take_damage(50, BRUTE, "energy", 0) -/obj/machinery/shield/blob_act(obj/structure/blob/B) - qdel(src) - - -/obj/machinery/shield/hitby(AM as mob|obj) - var/tforce = 0 - if(ismob(AM)) - tforce = 40 - else - var/obj/O = AM - tforce = O.throwforce - ..() - take_damage(tforce) - -/obj/machinery/shield/take_damage(damage, damage_type = BRUTE, sound_effect = 1) +/obj/structure/emergency_shield/play_attack_sound(damage, damage_type = BRUTE, damage_flag = 0) switch(damage_type) if(BURN) - if(sound_effect) - playsound(loc, 'sound/effects/EMPulse.ogg', 75, 1) + playsound(loc, 'sound/effects/EMPulse.ogg', 75, 1) if(BRUTE) - if(sound_effect) - playsound(loc, 'sound/effects/EMPulse.ogg', 75, 1) - else - return - opacity = 1 - spawn(20) - opacity = 0 - health -= damage - if(health <= 0) - qdel(src) + playsound(loc, 'sound/effects/EMPulse.ogg', 75, 1) + +/obj/structure/emergency_shield/take_damage(damage, damage_type = BRUTE, damage_flag = 0, sound_effect = 1, attack_dir) + . = ..() + if(.) //damage was dealt + opacity = 1 + spawn(20) + opacity = 0 + +/obj/structure/emergency_shield/sanguine + name = "sanguine barrier" + desc = "A potent shield summoned by cultists to defend their rites." + icon_state = "shield-red" + obj_integrity = 60 + max_integrity = 60 + +/obj/structure/emergency_shield/invoker + name = "Invoker's Shield" + desc = "A weak shield summoned by cultists to protect them while they carry out delicate rituals" + color = "red" + obj_integrity = 20 + max_integrity = 20 + mouse_opacity = 0 /obj/machinery/shieldgen - name = "anti-breach shielding projector" - desc = "Used to seal minor hull breaches." - icon = 'icons/obj/objects.dmi' - icon_state = "shieldoff" - density = 1 - opacity = 0 - anchored = 0 - pressure_resistance = 2*ONE_ATMOSPHERE - req_access = list(access_engine) - var/const/max_health = 100 - var/health = max_health - var/active = 0 - var/list/deployed_shields = list() - var/locked = 0 - var/shield_range = 4 + name = "anti-breach shielding projector" + desc = "Used to seal minor hull breaches." + icon = 'icons/obj/objects.dmi' + icon_state = "shieldoff" + density = 1 + opacity = 0 + anchored = 0 + pressure_resistance = 2*ONE_ATMOSPHERE + req_access = list(access_engine) + max_integrity = 100 + obj_integrity = 100 + var/active = 0 + var/list/deployed_shields = list() + var/locked = 0 + var/shield_range = 4 /obj/machinery/shieldgen/Destroy() - for(var/obj/machinery/shield/shield_tile in deployed_shields) - qdel(shield_tile) - deployed_shields = null + for(var/obj/structure/emergency_shield/ES in deployed_shields) + qdel(ES) + deployed_shields = list() return ..() @@ -116,9 +101,9 @@ update_icon() for(var/turf/target_tile in range(shield_range, src)) - if(isspaceturf(target_tile) && !(locate(/obj/machinery/shield) in target_tile)) + if(isspaceturf(target_tile) && !(locate(/obj/structure/emergency_shield) in target_tile)) if(!(stat & BROKEN) || prob(33)) - deployed_shields += new /obj/machinery/shield(target_tile) + deployed_shields += new /obj/structure/emergency_shield(target_tile) /obj/machinery/shieldgen/proc/shields_down() if(!active) @@ -127,8 +112,8 @@ active = 0 update_icon() - for(var/obj/machinery/shield/shield_tile in deployed_shields) - qdel(shield_tile) + for(var/obj/structure/emergency_shield/ES in deployed_shields) + qdel(ES) deployed_shields.Cut() /obj/machinery/shieldgen/process() @@ -137,45 +122,12 @@ qdel(pick(deployed_shields)) -/obj/machinery/shieldgen/take_damage(damage, damage_type = BRUTE, sound_effect = 1) - switch(damage_type) - if(BRUTE) - if(sound_effect) - if(damage) - playsound(loc, 'sound/weapons/smash.ogg', 50, 1) - else - playsound(loc, 'sound/weapons/tap.ogg', 50, 1) - if(BURN) - if(sound_effect) - playsound(loc, 'sound/items/Welder.ogg', 40, 1) - else - return - health = max(health - damage, 0) - if(health <= 0 && !(stat && BROKEN)) - stat |= BROKEN - update_icon() - -/obj/machinery/shieldgen/ex_act(severity, target) - switch(severity) - if(1) - qdel(src) - if(2) - if(prob(33)) - qdel(src) - else - take_damage(rand(80,120), BRUTE, 0) - if(3) - take_damage(rand(40,80), BRUTE, 0) - -/obj/machinery/shieldgen/emp_act(severity) - switch(severity) - if(1) - health = 0 +/obj/machinery/shieldgen/deconstruct(disassembled = TRUE) + if(!(flags & NODECONSTRUCT)) + if(!(stat && BROKEN)) stat |= BROKEN locked = pick(0,1) update_icon() - if(2) - take_damage(rand(80,120), BRUTE, 0) /obj/machinery/shieldgen/attack_hand(mob/user) if(locked) @@ -218,7 +170,7 @@ if(coil.get_amount() < 1) return coil.use(1) - health = max_health + obj_integrity = max_integrity stat &= ~BROKEN user << "You repair \the [src]." update_icon() @@ -252,7 +204,7 @@ /obj/machinery/shieldgen/emag_act() if(!(stat & BROKEN)) stat |= BROKEN - health = 0 + obj_integrity = 0 update_icon() /obj/machinery/shieldgen/update_icon() @@ -261,27 +213,36 @@ else icon_state = (stat & BROKEN) ? "shieldoffbr":"shieldoff" -////FIELD GEN START //shameless copypasta from fieldgen, powersink, and grille + + + + + + + + #define maxstoredpower 500 /obj/machinery/shieldwallgen - name = "shield generator" - desc = "A shield generator." - icon = 'icons/obj/stationobjs.dmi' - icon_state = "Shield_Gen" - anchored = 0 - density = 1 - req_access = list(access_teleporter) - flags = CONDUCT - use_power = 0 - var/active = 0 - var/power = 0 - var/steps = 0 - var/last_check = 0 - var/check_delay = 10 - var/recalc = 0 - var/locked = 1 - var/obj/structure/cable/attached // the attached cable - var/storedpower = 0 + name = "shield wall generator" + desc = "A shield generator." + icon = 'icons/obj/stationobjs.dmi' + icon_state = "Shield_Gen" + anchored = 0 + density = 1 + req_access = list(access_teleporter) + flags = CONDUCT + use_power = 0 + obj_integrity = 300 + max_integrity = 300 + var/active = 0 + var/power = 0 + var/steps = 0 + var/last_check = 0 + var/check_delay = 10 + var/recalc = 0 + var/locked = 1 + var/obj/structure/cable/attached // the attached cable + var/storedpower = 0 /obj/machinery/shieldwallgen/proc/power() if(!anchored) @@ -340,10 +301,8 @@ power() if(power) storedpower -= 50 //this way it can survive longer and survive at all - if(storedpower >= maxstoredpower) - storedpower = maxstoredpower - if(storedpower <= 0) - storedpower = 0 + storedpower = Clamp(storedpower, 0, maxstoredpower) + if(active == 1) if(!anchored) @@ -464,29 +423,25 @@ cleanup(8) return ..() -/obj/machinery/shieldwallgen/bullet_act(obj/item/projectile/P) - . = ..() - storedpower -= P.damage - //////////////Containment Field START /obj/machinery/shieldwall - name = "shield" - desc = "An energy shield." - icon = 'icons/effects/effects.dmi' - icon_state = "shieldwall" - anchored = 1 - density = 1 - resistance_flags = LAVA_PROOF | FIRE_PROOF | UNACIDABLE - luminosity = 3 - var/needs_power = 0 - var/active = 1 - var/delay = 5 - var/last_active - var/mob/U - var/obj/machinery/shieldwallgen/gen_primary - var/obj/machinery/shieldwallgen/gen_secondary + name = "shield wall" + desc = "An energy shield." + icon = 'icons/effects/effects.dmi' + icon_state = "shieldwall" + anchored = 1 + density = 1 + resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF + luminosity = 3 + var/needs_power = 0 + var/active = 1 + var/delay = 5 + var/last_active + var/mob/U + var/obj/machinery/shieldwallgen/gen_primary + var/obj/machinery/shieldwallgen/gen_secondary /obj/machinery/shieldwall/New(var/obj/machinery/shieldwallgen/A, var/obj/machinery/shieldwallgen/B) ..() @@ -517,43 +472,42 @@ else gen_secondary.storedpower -=10 +/obj/machinery/shieldwall/play_attack_sound(damage_amount, damage_type = BRUTE, damage_flag = 0) + switch(damage_type) + if(BURN) + playsound(loc, 'sound/effects/EMPulse.ogg', 75, 1) + if(BRUTE) + playsound(loc, 'sound/effects/EMPulse.ogg', 75, 1) -/obj/machinery/shieldwall/bullet_act(obj/item/projectile/P) +//the shield wall is immune to damage but it drains the stored power of the generators. +/obj/machinery/shieldwall/take_damage(damage_amount, damage_type = BRUTE, damage_flag = 0, sound_effect = 1, attack_dir) . = ..() + if(damage_type == BRUTE || damage_type == BURN) + drain_power(damage_amount) + +/obj/machinery/shieldwall/proc/drain_power(drain_amount) if(needs_power) var/obj/machinery/shieldwallgen/G if(prob(50)) G = gen_primary else G = gen_secondary - G.storedpower -= P.damage + G.storedpower -= drain_amount + +/obj/machinery/shieldwall/bullet_act(obj/item/projectile/P) + . = ..() + drain_power(P.damage) /obj/machinery/shieldwall/ex_act(severity, target) if(needs_power) - var/obj/machinery/shieldwallgen/G + var/drain_amount = 20 switch(severity) - if(1) //big boom - if(prob(50)) - G = gen_primary - else - G = gen_secondary - G.storedpower -= 200 - - if(2) //medium boom - if(prob(50)) - G = gen_primary - else - G = gen_secondary - G.storedpower -= 50 - - if(3) //lil boom - if(prob(50)) - G = gen_primary - else - G = gen_secondary - G.storedpower -= 20 - return + if(1) + drain_amount = 200 + if(2) + drain_amount = 50 + drain_power(drain_amount) /obj/machinery/shieldwall/CanPass(atom/movable/mover, turf/target, height=0) diff --git a/code/game/machinery/spaceheater.dm b/code/game/machinery/spaceheater.dm index 988678b30ad..8c78d592598 100644 --- a/code/game/machinery/spaceheater.dm +++ b/code/game/machinery/spaceheater.dm @@ -10,6 +10,9 @@ icon_state = "sheater-off" name = "space heater" desc = "Made by Space Amish using traditional space techniques, this heater/cooler is guaranteed not to set the station on fire." + obj_integrity = 250 + max_integrity = 250 + armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 100, rad = 100, fire = 80, acid = 10) var/obj/item/weapon/stock_parts/cell/cell var/on = FALSE var/mode = HEATER_MODE_STANDBY diff --git a/code/game/machinery/suit_storage_unit.dm b/code/game/machinery/suit_storage_unit.dm index a23ec04811d..e6e918aeebf 100644 --- a/code/game/machinery/suit_storage_unit.dm +++ b/code/game/machinery/suit_storage_unit.dm @@ -1,4 +1,4 @@ -// SUIT STORAGE UNIT /////////////////close_machine( +// SUIT STORAGE UNIT ///////////////// /obj/machinery/suit_storage_unit name = "suit storage unit" desc = "An industrial unit made to hold space suits. It comes with a built-in UV cauterization mechanism. A small warning label advises that organic matter should not be placed into the unit." @@ -6,6 +6,8 @@ icon_state = "close" anchored = 1 density = 1 + obj_integrity = 250 + max_integrity = 250 var/obj/item/clothing/suit/space/suit = null var/obj/item/clothing/head/helmet/space/helmet = null @@ -112,6 +114,21 @@ storage = new storage_type(src) update_icon() +/obj/machinery/suit_storage_unit/Destroy() + if(suit) + qdel(suit) + suit = null + if(helmet) + qdel(helmet) + helmet = null + if(mask) + qdel(mask) + mask = null + if(storage) + qdel(storage) + storage = null + return ..() + /obj/machinery/suit_storage_unit/update_icon() cut_overlays() @@ -151,18 +168,12 @@ storage = null occupant = null -/obj/machinery/suit_storage_unit/ex_act(severity, target) - switch(severity) - if(1) - if(prob(50)) - open_machine() - dump_contents() - qdel(src) - if(2) - if(prob(50)) - open_machine() - dump_contents() - qdel(src) +/obj/machinery/suit_storage_unit/deconstruct(disassembled = TRUE) + if(!(flags & NODECONSTRUCT)) + open_machine() + dump_contents() + new /obj/item/stack/sheet/metal (loc, 2) + qdel(src) /obj/machinery/suit_storage_unit/MouseDrop_T(atom/A, mob/user) if(user.stat || user.lying || !Adjacent(user) || !Adjacent(A) || !isliving(A)) diff --git a/code/game/machinery/syndicatebomb.dm b/code/game/machinery/syndicatebomb.dm index 674a3735827..20c1beaa9fe 100644 --- a/code/game/machinery/syndicatebomb.dm +++ b/code/game/machinery/syndicatebomb.dm @@ -256,7 +256,7 @@ item_state = "eshield0" w_class = 3 origin_tech = "syndicate=5;combat=6" - resistance_flags = 0 //Burnable (but the casing isn't) + resistance_flags = FLAMMABLE //Burnable (but the casing isn't) var/adminlog = null /obj/item/weapon/bombcore/ex_act(severity, target) // Little boom can chain a big boom. diff --git a/code/game/machinery/vending.dm b/code/game/machinery/vending.dm index 16086fc4f7f..4b0603285f8 100644 --- a/code/game/machinery/vending.dm +++ b/code/game/machinery/vending.dm @@ -21,6 +21,10 @@ verb_say = "beeps" verb_ask = "beeps" verb_exclaim = "beeps" + obj_integrity = 300 + max_integrity = 300 + integrity_failure = 100 + armor = list(melee = 20, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 50, acid = 70) var/active = 1 //No sales pitches if off! var/vend_ready = 1 //Are we ready to vend?? Is it time?? var/vend_delay = 10 //How long does it take to vend? @@ -138,16 +142,34 @@ refill_inventory(VR, coin_records, COIN_CHARGE) refill_inventory(VR, hidden_records, CONTRABAND_CHARGE) -/obj/machinery/vending/ex_act(severity, target) - ..() - if(!qdeleted(src)) - if(prob(25)) - malfunction() -/obj/machinery/vending/blob_act(obj/structure/blob/B) - malfunction() - ..() +/obj/machinery/vending/deconstruct(disassembled = TRUE) + if(!refill_canister) //the non constructable vendors drop metal instead of a machine frame. + if(!(flags & NODECONSTRUCT)) + new /obj/item/stack/sheet/metal(loc, 3) + qdel(src) + else + ..() +/obj/machinery/vending/obj_break(damage_flag) + if(!(stat & BROKEN) && !(flags & NODECONSTRUCT)) + var/dump_amount = 0 + for(var/datum/data/vending_product/R in product_records) + if(R.amount <= 0) //Try to use a record that actually has something to dump. + continue + var/dump_path = R.product_path + if(!dump_path) + continue + + while(R.amount>0) + var/obj/O = new dump_path(loc) + step(O, pick(alldirs)) //we only drop 20% of the total of each products and spread it + R.amount -= 5 //around to not fill the turf with too many objects. + dump_amount++ + if(dump_amount > 15) //so we don't drop too many items (e.g. ClothesMate) + break + stat |= BROKEN + icon_state = "[initial(icon_state)]-broken" /obj/machinery/vending/proc/build_inventory(list/productlist, hidden=0, req_coin=0, start_empty = null) for(var/typepath in productlist) @@ -565,23 +587,6 @@ stat |= NOPOWER -//Oh no we're malfunctioning! Dump out some product and break. -/obj/machinery/vending/proc/malfunction() - for(var/datum/data/vending_product/R in product_records) - if(R.amount <= 0) //Try to use a record that actually has something to dump. - continue - var/dump_path = R.product_path - if(!dump_path) - continue - - while(R.amount>0) - new dump_path(loc) - R.amount-- - continue - - stat |= BROKEN - icon_state = "[initial(icon_state)]-broken" - //Somebody cut an important wire and now we're following a new definition of "pitch." /obj/machinery/vending/proc/throw_item() var/obj/throw_item = null @@ -680,6 +685,8 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C /obj/item/weapon/wirecutters = 1, /obj/item/weapon/cartridge/signal = 4) contraband = list(/obj/item/device/flashlight = 5,/obj/item/device/assembly/timer = 2, /obj/item/device/assembly/voice = 2, /obj/item/device/assembly/health = 2) product_ads = "Only the finest!;Have some tools.;The most robust equipment.;The finest gear in space!" + armor = list(melee = 100, bullet = 100, laser = 100, energy = 100, bomb = 0, bio = 0, rad = 0, fire = 100, acid = 50) + resistance_flags = FIRE_PROOF /obj/machinery/vending/coffee name = "\improper Solar's Best Hot Drinks" @@ -718,7 +725,8 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C /obj/item/weapon/reagent_containers/food/drinks/coffee = 12, /obj/item/weapon/tank/internals/emergency_oxygen = 6, /obj/item/clothing/mask/breath = 6) - + armor = list(melee = 100, bullet = 100, laser = 100, energy = 100, bomb = 0, bio = 0, rad = 0, fire = 100, acid = 50) + resistance_flags = FIRE_PROOF /obj/machinery/vending/cola name = "\improper Robust Softdrinks" @@ -743,6 +751,8 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C products = list(/obj/item/weapon/cartridge/medical = 10,/obj/item/weapon/cartridge/engineering = 10,/obj/item/weapon/cartridge/security = 10, /obj/item/weapon/cartridge/janitor = 10,/obj/item/weapon/cartridge/signal/toxins = 10,/obj/item/device/pda/heads = 10, /obj/item/weapon/cartridge/captain = 3,/obj/item/weapon/cartridge/quartermaster = 10) + armor = list(melee = 100, bullet = 100, laser = 100, energy = 100, bomb = 0, bio = 0, rad = 0, fire = 100, acid = 50) + resistance_flags = FIRE_PROOF /obj/machinery/vending/liberationstation name = "\improper Liberation Station" @@ -758,6 +768,8 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C /obj/item/weapon/gun/projectile/shotgun = 2,/obj/item/weapon/gun/projectile/automatic/ar = 2) premium = list(/obj/item/ammo_box/magazine/smgm9mm = 2,/obj/item/ammo_box/magazine/m50 = 4,/obj/item/ammo_box/magazine/m45 = 2,/obj/item/ammo_box/magazine/m75 = 2) contraband = list(/obj/item/clothing/under/patriotsuit = 1,/obj/item/weapon/bedsheet/patriot = 3) + armor = list(melee = 100, bullet = 100, laser = 100, energy = 100, bomb = 0, bio = 0, rad = 0, fire = 100, acid = 50) + resistance_flags = FIRE_PROOF /obj/machinery/vending/cigarette name = "\improper ShadyCigs Deluxe" @@ -791,7 +803,8 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C /obj/item/weapon/reagent_containers/glass/bottle/epinephrine = 4,/obj/item/weapon/reagent_containers/glass/bottle/morphine = 4,/obj/item/weapon/reagent_containers/glass/bottle/salglu_solution = 3, /obj/item/weapon/reagent_containers/glass/bottle/toxin = 3,/obj/item/weapon/reagent_containers/syringe/antiviral = 6,/obj/item/weapon/reagent_containers/pill/salbutamol = 2,/obj/item/device/healthanalyzer = 4, /obj/item/device/sensor_device = 2) contraband = list(/obj/item/weapon/reagent_containers/pill/tox = 3,/obj/item/weapon/reagent_containers/pill/morphine = 4,/obj/item/weapon/reagent_containers/pill/charcoal = 6) - + armor = list(melee = 100, bullet = 100, laser = 100, energy = 100, bomb = 0, bio = 0, rad = 0, fire = 100, acid = 50) + resistance_flags = FIRE_PROOF //This one's from bay12 /obj/machinery/vending/plasmaresearch @@ -812,6 +825,8 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C /obj/item/weapon/reagent_containers/pill/patch/silver_sulf = 5,/obj/item/weapon/reagent_containers/pill/charcoal = 2, /obj/item/weapon/reagent_containers/spray/medical/sterilizer = 1) contraband = list(/obj/item/weapon/reagent_containers/pill/tox = 2,/obj/item/weapon/reagent_containers/pill/morphine = 2) + armor = list(melee = 100, bullet = 100, laser = 100, energy = 100, bomb = 0, bio = 0, rad = 0, fire = 100, acid = 50) + resistance_flags = FIRE_PROOF /obj/machinery/vending/security name = "\improper SecTech" @@ -824,6 +839,8 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C /obj/item/weapon/reagent_containers/food/snacks/donut = 12,/obj/item/weapon/storage/box/evidence = 6,/obj/item/device/flashlight/seclite = 4,/obj/item/weapon/restraints/legcuffs/bola/energy = 7) contraband = list(/obj/item/clothing/glasses/sunglasses = 2,/obj/item/weapon/storage/fancy/donut_box = 2) premium = list(/obj/item/weapon/coin/antagtoken = 1) + armor = list(melee = 100, bullet = 100, laser = 100, energy = 100, bomb = 0, bio = 0, rad = 0, fire = 100, acid = 50) + resistance_flags = FIRE_PROOF /obj/machinery/vending/hydronutrients name = "\improper NutriMax" @@ -835,6 +852,8 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C products = list(/obj/item/weapon/reagent_containers/glass/bottle/nutrient/ez = 30,/obj/item/weapon/reagent_containers/glass/bottle/nutrient/l4z = 20,/obj/item/weapon/reagent_containers/glass/bottle/nutrient/rh = 10,/obj/item/weapon/reagent_containers/spray/pestspray = 20, /obj/item/weapon/reagent_containers/syringe = 5,/obj/item/weapon/storage/bag/plants = 5,/obj/item/weapon/cultivator = 3,/obj/item/weapon/shovel/spade = 3,/obj/item/device/plant_analyzer = 4) contraband = list(/obj/item/weapon/reagent_containers/glass/bottle/ammonia = 10,/obj/item/weapon/reagent_containers/glass/bottle/diethylamine = 5) + armor = list(melee = 100, bullet = 100, laser = 100, energy = 100, bomb = 0, bio = 0, rad = 0, fire = 100, acid = 50) + resistance_flags = FIRE_PROOF /obj/machinery/vending/hydroseeds name = "\improper MegaSeed Servitor" @@ -853,7 +872,8 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C contraband = list(/obj/item/seeds/amanita = 2,/obj/item/seeds/glowshroom = 2,/obj/item/seeds/liberty = 2,/obj/item/seeds/nettle = 2, /obj/item/seeds/plump = 2,/obj/item/seeds/reishi = 2,/obj/item/seeds/cannabis = 3) premium = list(/obj/item/weapon/reagent_containers/spray/waterflower = 1) - + armor = list(melee = 100, bullet = 100, laser = 100, energy = 100, bomb = 0, bio = 0, rad = 0, fire = 100, acid = 50) + resistance_flags = FIRE_PROOF /obj/machinery/vending/magivend name = "\improper MagiVend" @@ -865,6 +885,8 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C product_ads = "FJKLFJSD;AJKFLBJAKL;1234 LOONIES LOL!;>MFW;Kill them fuckers!;GET DAT FUKKEN DISK;HONK!;EI NATH;Destroy the station!;Admin conspiracies since forever!;Space-time bending hardware!" products = list(/obj/item/clothing/head/wizard = 1,/obj/item/clothing/suit/wizrobe = 1,/obj/item/clothing/head/wizard/red = 1,/obj/item/clothing/suit/wizrobe/red = 1,/obj/item/clothing/head/wizard/yellow = 1,/obj/item/clothing/suit/wizrobe/yellow = 1,/obj/item/clothing/shoes/sandal = 1,/obj/item/weapon/staff = 2) contraband = list(/obj/item/weapon/reagent_containers/glass/bottle/wizarditis = 1) //No one can get to the machine to hack it anyways; for the lulz - Microwave + armor = list(melee = 100, bullet = 100, laser = 100, energy = 100, bomb = 0, bio = 0, rad = 0, fire = 100, acid = 50) + resistance_flags = FIRE_PROOF /obj/machinery/vending/autodrobe name = "\improper AutoDrobe" @@ -911,6 +933,8 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C icon_state = "dinnerware" products = list(/obj/item/weapon/storage/bag/tray = 8,/obj/item/weapon/kitchen/fork = 6,/obj/item/weapon/kitchen/knife = 6,/obj/item/weapon/kitchen/rollingpin = 2,/obj/item/weapon/reagent_containers/food/drinks/drinkingglass = 8,/obj/item/clothing/suit/apron/chef = 2,/obj/item/weapon/reagent_containers/food/condiment/pack/ketchup = 5,/obj/item/weapon/reagent_containers/food/condiment/pack/hotsauce = 5,/obj/item/weapon/reagent_containers/food/condiment/saltshaker = 5,/obj/item/weapon/reagent_containers/food/condiment/peppermill = 5,/obj/item/weapon/reagent_containers/glass/bowl = 20) contraband = list(/obj/item/weapon/kitchen/rollingpin = 2, /obj/item/weapon/kitchen/knife/butcher = 2) + armor = list(melee = 100, bullet = 100, laser = 100, energy = 100, bomb = 0, bio = 0, rad = 0, fire = 100, acid = 50) + resistance_flags = FIRE_PROOF /obj/machinery/vending/sovietsoda name = "\improper BODA" @@ -919,6 +943,8 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C product_ads = "For Tsar and Country.;Have you fulfilled your nutrition quota today?;Very nice!;We are simple people, for this is all we eat.;If there is a person, there is a problem. If there is no person, then there is no problem." products = list(/obj/item/weapon/reagent_containers/food/drinks/drinkingglass/filled/soda = 30) contraband = list(/obj/item/weapon/reagent_containers/food/drinks/drinkingglass/filled/cola = 20) + armor = list(melee = 100, bullet = 100, laser = 100, energy = 100, bomb = 0, bio = 0, rad = 0, fire = 100, acid = 50) + resistance_flags = FIRE_PROOF /obj/machinery/vending/tool name = "\improper YouTool" @@ -930,6 +956,8 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C /obj/item/weapon/wrench = 5,/obj/item/device/analyzer = 5,/obj/item/device/t_scanner = 5,/obj/item/weapon/screwdriver = 5) contraband = list(/obj/item/weapon/weldingtool/hugetank = 2,/obj/item/clothing/gloves/color/fyellow = 2) premium = list(/obj/item/clothing/gloves/color/yellow = 1) + armor = list(melee = 100, bullet = 100, laser = 100, energy = 100, bomb = 0, bio = 0, rad = 0, fire = 100, acid = 70) + resistance_flags = FIRE_PROOF /obj/machinery/vending/engivend name = "\improper Engi-Vend" @@ -940,6 +968,8 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C products = list(/obj/item/clothing/glasses/meson/engine = 2,/obj/item/device/multitool = 4,/obj/item/weapon/electronics/airlock = 10,/obj/item/weapon/electronics/apc = 10,/obj/item/weapon/electronics/airalarm = 10,/obj/item/weapon/stock_parts/cell/high = 10, /obj/item/weapon/rcd/loaded = 3, /obj/item/device/geiger_counter = 5) contraband = list(/obj/item/weapon/stock_parts/cell/potato = 3) premium = list(/obj/item/weapon/storage/belt/utility = 3) + armor = list(melee = 100, bullet = 100, laser = 100, energy = 100, bomb = 0, bio = 0, rad = 0, fire = 100, acid = 50) + resistance_flags = FIRE_PROOF //This one's from bay12 /obj/machinery/vending/engineering @@ -954,6 +984,8 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C /obj/item/weapon/stock_parts/cell = 8, /obj/item/weapon/weldingtool = 8,/obj/item/clothing/head/welding = 8, /obj/item/weapon/light/tube = 10,/obj/item/clothing/suit/fire = 4, /obj/item/weapon/stock_parts/scanning_module = 5,/obj/item/weapon/stock_parts/micro_laser = 5, /obj/item/weapon/stock_parts/matter_bin = 5,/obj/item/weapon/stock_parts/manipulator = 5,/obj/item/weapon/stock_parts/console_screen = 5) + armor = list(melee = 100, bullet = 100, laser = 100, energy = 100, bomb = 0, bio = 0, rad = 0, fire = 100, acid = 50) + resistance_flags = FIRE_PROOF //This one's from bay12 /obj/machinery/vending/robotics @@ -966,7 +998,8 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C /obj/item/weapon/stock_parts/cell/high = 12, /obj/item/device/assembly/prox_sensor = 3,/obj/item/device/assembly/signaler = 3,/obj/item/device/healthanalyzer = 3, /obj/item/weapon/scalpel = 2,/obj/item/weapon/circular_saw = 2,/obj/item/weapon/tank/internals/anesthetic = 2,/obj/item/clothing/mask/breath/medical = 5, /obj/item/weapon/screwdriver = 5,/obj/item/weapon/crowbar = 5) - + armor = list(melee = 100, bullet = 100, laser = 100, energy = 100, bomb = 0, bio = 0, rad = 0, fire = 100, acid = 50) + resistance_flags = FIRE_PROOF //DON'T FORGET TO CHANGE THE REFILL SIZE IF YOU CHANGE THE MACHINE'S CONTENTS! /obj/machinery/vending/clothing diff --git a/code/game/machinery/washing_machine.dm b/code/game/machinery/washing_machine.dm index d5c1f0da4fe..ac5e7ba1e68 100644 --- a/code/game/machinery/washing_machine.dm +++ b/code/game/machinery/washing_machine.dm @@ -241,6 +241,9 @@ state_open = 0 //close the door update_icon() +/obj/machinery/washing_machine/deconstruct(disassembled = TRUE) + new /obj/item/stack/sheet/metal (loc, 2) + qdel(src) /obj/machinery/washing_machine/open_machine(drop = 1) ..() diff --git a/code/game/mecha/combat/combat.dm b/code/game/mecha/combat/combat.dm index ff1dced21fd..31e557cdba3 100644 --- a/code/game/mecha/combat/combat.dm +++ b/code/game/mecha/combat/combat.dm @@ -1,16 +1,14 @@ /obj/mecha/combat force = 30 internal_damage_threshold = 50 - damage_absorption = list("brute"=0.7,"fire"=1,"bullet"=0.7,"laser"=0.85,"energy"=1,"bomb"=0.8) - armor = list(melee = 30, bullet = 30, laser = 15, energy = 0, bomb = 20, bio = 0, rad = 0, fire = 0, acid = 0) + armor = list(melee = 30, bullet = 30, laser = 15, energy = 20, bomb = 20, bio = 0, rad = 0, fire = 100, acid = 100) /obj/mecha/combat/CheckParts(atom/holder) ..() var/obj/item/weapon/stock_parts/capacitor/C = locate() in holder var/obj/item/weapon/stock_parts/scanning_module/SM = locate() in holder step_energy_drain = 20 - (5 * SM.rating) //10 is normal, so on lowest part its worse, on second its ok and on higher its real good up to 0 on best - var/DR = damage_absorption["energy"] - damage_absorption["energy"] = DR - (C.rating / 10) //Each level of capacitor protects the mech against emp by 10% + armor["energy"] += (C.rating * 10) //Each level of capacitor protects the mech against emp by 10% qdel(C) qdel(SM) diff --git a/code/game/mecha/combat/durand.dm b/code/game/mecha/combat/durand.dm index b9aa9037743..ced8b5bee4a 100644 --- a/code/game/mecha/combat/durand.dm +++ b/code/game/mecha/combat/durand.dm @@ -4,10 +4,10 @@ icon_state = "durand" step_in = 4 dir_in = 1 //Facing North. - health = 400 + obj_integrity = 400 + max_integrity = 400 deflect_chance = 20 - damage_absorption = list("brute"=0.5,"fire"=1.1,"bullet"=0.65,"laser"=0.85,"energy"=0.9,"bomb"=0.8) - armor = list(melee = 40, bullet = 35, laser = 15, energy = 10, bomb = 20, bio = 0, rad = 0, fire = 0, acid = 0) + armor = list(melee = 40, bullet = 35, laser = 15, energy = 10, bomb = 20, bio = 0, rad = 0, fire = 100, acid = 100) max_temperature = 30000 infra_luminosity = 8 force = 40 diff --git a/code/game/mecha/combat/gygax.dm b/code/game/mecha/combat/gygax.dm index 1992d48671e..597ed7827a2 100644 --- a/code/game/mecha/combat/gygax.dm +++ b/code/game/mecha/combat/gygax.dm @@ -4,10 +4,9 @@ icon_state = "gygax" step_in = 3 dir_in = 1 //Facing North. - health = 250 + obj_integrity = 250 deflect_chance = 5 - damage_absorption = list("brute"=0.75,"fire"=1,"bullet"=0.8,"laser"=0.7,"energy"=0.85,"bomb"=1) - armor = list(melee = 40, bullet = 35, laser = 15, energy = 10, bomb = 20, bio = 0, rad = 0, fire = 0, acid = 0) + armor = list(melee = 25, bullet = 20, laser = 30, energy = 15, bomb = 0, bio = 0, rad = 0, fire = 100, acid = 100) max_temperature = 25000 infra_luminosity = 6 wreckage = /obj/structure/mecha_wreckage/gygax @@ -19,10 +18,9 @@ desc = "A lightweight exosuit, painted in a dark scheme. This model appears to have some modifications." name = "\improper Dark Gygax" icon_state = "darkgygax" - health = 300 + obj_integrity = 300 deflect_chance = 15 - damage_absorption = list("brute"=0.6,"fire"=0.8,"bullet"=0.6,"laser"=0.5,"energy"=0.65,"bomb"=0.8) - armor = list(melee = 40, bullet = 40, laser = 50, energy = 35, bomb = 20, bio = 0, rad = 0, fire = 0, acid = 0) + armor = list(melee = 40, bullet = 40, laser = 50, energy = 35, bomb = 20, bio = 0, rad = 0, fire = 100, acid = 100) max_temperature = 35000 leg_overload_coeff = 100 operation_req_access = list(access_syndicate) diff --git a/code/game/mecha/combat/honker.dm b/code/game/mecha/combat/honker.dm index 1dc45391ca1..61de8129602 100644 --- a/code/game/mecha/combat/honker.dm +++ b/code/game/mecha/combat/honker.dm @@ -3,10 +3,11 @@ name = "\improper H.O.N.K" icon_state = "honker" step_in = 3 - health = 140 + obj_integrity = 140 + max_integrity = 140 deflect_chance = 60 internal_damage_threshold = 60 - damage_absorption = list("brute"=1.2,"fire"=1.5,"bullet"=1,"laser"=1,"energy"=1,"bomb"=1) + armor = list(melee = -20, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 100, acid = 100) max_temperature = 25000 infra_luminosity = 5 operation_req_access = list(access_theatre) @@ -27,7 +28,7 @@ */ /obj/mecha/combat/honker/get_stats_part() - var/integrity = health/initial(health)*100 + var/integrity = obj_integrity/max_integrity*100 var/cell_charge = get_charge() var/datum/gas_mixture/int_tank_air = internal_tank.return_air() var/tank_pressure = internal_tank ? round(int_tank_air.return_pressure(),0.01) : "None" diff --git a/code/game/mecha/combat/marauder.dm b/code/game/mecha/combat/marauder.dm index 441577a9c2c..fd1021b8b69 100644 --- a/code/game/mecha/combat/marauder.dm +++ b/code/game/mecha/combat/marauder.dm @@ -3,12 +3,12 @@ name = "\improper Marauder" icon_state = "marauder" step_in = 5 - health = 500 + obj_integrity = 500 + max_integrity = 500 deflect_chance = 25 - damage_absorption = list("brute"=0.5,"fire"=0.7,"bullet"=0.45,"laser"=0.6,"energy"=0.7,"bomb"=0.7) - armor = list(melee = 50, bullet = 55, laser = 40, energy = 30, bomb = 30, bio = 0, rad = 0, fire = 0, acid = 0) + armor = list(melee = 50, bullet = 55, laser = 40, energy = 30, bomb = 30, bio = 0, rad = 0, fire = 100, acid = 100) max_temperature = 60000 - resistance_flags = LAVA_PROOF |FIRE_PROOF | ACID_PROOF + resistance_flags = LAVA_PROOF | FIRE_PROOF | ACID_PROOF infra_luminosity = 3 operation_req_access = list(access_cent_specops) wreckage = /obj/structure/mecha_wreckage/marauder @@ -47,7 +47,7 @@ icon_state = "seraph" operation_req_access = list(access_cent_specops) step_in = 3 - health = 550 + obj_integrity = 550 wreckage = /obj/structure/mecha_wreckage/seraph internal_damage_threshold = 20 force = 55 diff --git a/code/game/mecha/combat/phazon.dm b/code/game/mecha/combat/phazon.dm index b05a01435f1..74a758bce0b 100644 --- a/code/game/mecha/combat/phazon.dm +++ b/code/game/mecha/combat/phazon.dm @@ -5,10 +5,10 @@ step_in = 2 dir_in = 2 //Facing South. step_energy_drain = 3 - health = 200 + obj_integrity = 200 + max_integrity = 200 deflect_chance = 30 - damage_absorption = list("brute"=0.7,"fire"=0.7,"bullet"=0.7,"laser"=0.7,"energy"=0.7,"bomb"=0.7) - armor = list(melee = 30, bullet = 30, laser = 30, energy = 30, bomb = 30, bio = 0, rad = 0, fire = 0, acid = 0) + armor = list(melee = 30, bullet = 30, laser = 30, energy = 30, bomb = 30, bio = 0, rad = 0, fire = 100, acid = 100) max_temperature = 25000 infra_luminosity = 3 wreckage = /obj/structure/mecha_wreckage/phazon diff --git a/code/game/mecha/combat/reticence.dm b/code/game/mecha/combat/reticence.dm index d25d67f4af3..0f23b7ea224 100644 --- a/code/game/mecha/combat/reticence.dm +++ b/code/game/mecha/combat/reticence.dm @@ -4,10 +4,10 @@ icon_state = "reticence" step_in = 2 dir_in = 1 //Facing North. - health = 100 + obj_integrity = 100 + max_integrity = 100 deflect_chance = 3 - damage_absorption = list("brute"=0.75,"fire"=1,"bullet"=0.8,"laser"=0.7,"energy"=0.85,"bomb"=1) - armor = list(melee = 25, bullet = 20, laser = 30, energy = 15, bomb = 0, bio = 0, rad = 0, fire = 0, acid = 0) + armor = list(melee = 25, bullet = 20, laser = 30, energy = 15, bomb = 0, bio = 0, rad = 0, fire = 100, acid = 100) max_temperature = 15000 wreckage = /obj/structure/mecha_wreckage/reticence operation_req_access = list(access_theatre) diff --git a/code/game/mecha/equipment/tools/other_tools.dm b/code/game/mecha/equipment/tools/other_tools.dm index a1daa55e41b..7e8481cb7d7 100644 --- a/code/game/mecha/equipment/tools/other_tools.dm +++ b/code/game/mecha/equipment/tools/other_tools.dm @@ -248,8 +248,8 @@ chassis.clearInternalDamage(int_dam_flag) repaired = 1 break - if(health_boost<0 || chassis.health < initial(chassis.health)) - chassis.health += min(health_boost, initial(chassis.health)-chassis.health) + if(health_boost<0 || chassis.obj_integrity < chassis.max_integrity) + chassis.obj_integrity += min(health_boost, chassis.max_integrity-chassis.obj_integrity) repaired = 1 if(repaired) if(!chassis.use_power(energy_drain)) diff --git a/code/game/mecha/mech_bay.dm b/code/game/mecha/mech_bay.dm index 5f7135cdc57..b0830304f46 100644 --- a/code/game/mecha/mech_bay.dm +++ b/code/game/mecha/mech_bay.dm @@ -114,7 +114,7 @@ if(recharge_port && !qdeleted(recharge_port)) data["recharge_port"] = list("mech" = null) if(recharge_port.recharging_mech && !qdeleted(recharge_port.recharging_mech)) - data["recharge_port"]["mech"] = list("health" = recharge_port.recharging_mech.health, "maxhealth" = initial(recharge_port.recharging_mech.health), "cell" = null) + data["recharge_port"]["mech"] = list("health" = recharge_port.recharging_mech.obj_integrity, "max_integrity" = recharge_port.recharging_mech.max_integrity, "cell" = null) if(recharge_port.recharging_mech.cell && !qdeleted(recharge_port.recharging_mech.cell)) data["recharge_port"]["mech"]["cell"] = list( "critfail" = recharge_port.recharging_mech.cell.crit_fail, diff --git a/code/game/mecha/mecha.dm b/code/game/mecha/mecha.dm index 62f50eb2c42..a8642407f7c 100644 --- a/code/game/mecha/mecha.dm +++ b/code/game/mecha/mecha.dm @@ -29,11 +29,10 @@ var/step_in = 10 //make a step in step_in/10 sec. var/dir_in = 2//What direction will the mech face when entered/powered on? Defaults to South. var/step_energy_drain = 10 - var/health = 300 //health is health + obj_integrity = 300 //obj_integrity is health + max_integrity = 300 var/deflect_chance = 10 //chance to deflect the incoming projectiles, hits, or lesser the effect of ex_act. - //the values in this list show how much damage will pass through, not how much will be absorbed. - var/list/damage_absorption = list("brute"=0.8,"fire"=1.2,"bullet"=0.9,"laser"=1,"energy"=1,"bomb"=1) - armor = list(melee = 20, bullet = 10, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 0, acid = 0) + armor = list(melee = 20, bullet = 10, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 100, acid = 100) var/list/facing_modifiers = list(FRONT_ARMOUR = 1.5, SIDE_ARMOUR = 1, BACK_ARMOUR = 0.5) var/obj/item/weapon/stock_parts/cell/cell var/state = 0 @@ -240,7 +239,7 @@ /obj/mecha/examine(mob/user) ..() - var/integrity = health/initial(health)*100 + var/integrity = obj_integrity*100/max_integrity switch(integrity) if(85 to 100) user << "It's fully intact." @@ -256,8 +255,6 @@ user << "It's equipped with:" for(var/obj/item/mecha_parts/mecha_equipment/ME in equipment) user << "\icon[ME] [ME]" - return - //processing internal damage, temperature, air regulation, alert updates, lights power use. /obj/mecha/process() @@ -276,7 +273,7 @@ if(cabin_air && cabin_air.return_volume()>0) cabin_air.temperature = min(6000+T0C, cabin_air.return_temperature()+rand(10,15)) if(cabin_air.return_temperature() > max_temperature/2) - take_damage(4/round(max_temperature/cabin_air.return_temperature(),0.1),"fire") + take_damage(4/round(max_temperature/cabin_air.return_temperature(),0.1), BURN, 0, 0) if(internal_damage & MECHA_INT_TEMP_CONTROL) internal_temp_regulation = 0 @@ -342,7 +339,7 @@ else occupant.throw_alert("charge",/obj/screen/alert/emptycell) - var/integrity = health/initial(health)*100 + var/integrity = obj_integrity/max_integrity*100 switch(integrity) if(30 to 45) occupant.throw_alert("mech damage", /obj/screen/alert/low_mech_integrity, 1) @@ -568,7 +565,7 @@ /obj/mecha/proc/check_for_internal_damage(list/possible_int_damage,ignore_threshold=null) if(!islist(possible_int_damage) || isemptylist(possible_int_damage)) return if(prob(20)) - if(ignore_threshold || health*100/initial(health) < internal_damage_threshold) + if(ignore_threshold || obj_integrity*100/max_integrity < internal_damage_threshold) for(var/T in possible_int_damage) if(internal_damage & T) possible_int_damage -= T @@ -576,7 +573,7 @@ if(int_dam_flag) setInternalDamage(int_dam_flag) if(prob(5)) - if(ignore_threshold || health*100/initial(health)You cannot get in the [name], it has been destroyed!" else if(occupant) user << "[occupant] was faster! Try better next time, loser." diff --git a/code/game/mecha/mecha_control_console.dm b/code/game/mecha/mecha_control_console.dm index 0fc08605bcf..a252f25ad08 100644 --- a/code/game/mecha/mecha_control_console.dm +++ b/code/game/mecha/mecha_control_console.dm @@ -72,7 +72,7 @@ var/obj/mecha/M = src.loc var/cell_charge = M.get_charge() var/answer = {"Name: [M.name]
- Integrity: [M.health/initial(M.health)*100]%
+ Integrity: [M.obj_integrity/M.max_integrity*100]%
Cell charge: [isnull(cell_charge)?"Not found":"[M.cell.percent()]%"]
Airtank: [M.return_pressure()]kPa
Pilot: [M.occupant||"None"]
diff --git a/code/game/mecha/mecha_defense.dm b/code/game/mecha/mecha_defense.dm index 24391c95550..a8c31514f66 100644 --- a/code/game/mecha/mecha_defense.dm +++ b/code/game/mecha/mecha_defense.dm @@ -8,174 +8,128 @@ return facing_modifiers[FRONT_ARMOUR] return 1 //always return non-0 +/obj/mecha/take_damage(damage_amount, damage_type = BRUTE, damage_flag = 0, sound_effect = 1, attack_dir) + . = ..() + if(. && obj_integrity > 0) + spark_system.start() + switch(damage_flag) + if("fire") + check_for_internal_damage(list(MECHA_INT_FIRE,MECHA_INT_TEMP_CONTROL)) + if("melee") + check_for_internal_damage(list(MECHA_INT_TEMP_CONTROL,MECHA_INT_TANK_BREACH,MECHA_INT_CONTROL_LOST)) + else + check_for_internal_damage(list(MECHA_INT_FIRE,MECHA_INT_TEMP_CONTROL,MECHA_INT_TANK_BREACH,MECHA_INT_CONTROL_LOST,MECHA_INT_SHORT_CIRCUIT)) + if(. >= 5 || prob(33)) + occupant_message("Taking damage!") + log_append_to_last("Took [damage_amount] points of damage. Damage type: \"[damage_type]\".",1) -/obj/mecha/proc/take_damage(amount, type="brute", booster_deflection_modifier = 1, booster_damage_modifier = 1, send_message = 1) +/obj/mecha/run_obj_armor(damage_amount, damage_type, damage_flag = 0, attack_dir) + . = ..() + var/booster_deflection_modifier = 1 + var/booster_damage_modifier = 1 + if(damage_flag == "bullet" || damage_flag == "laser" || damage_flag == "energy") + for(var/obj/item/mecha_parts/mecha_equipment/antiproj_armor_booster/B in equipment) + if(B.projectile_react()) + booster_deflection_modifier = B.deflect_coeff + booster_damage_modifier = B.damage_coeff + break + else if(damage_flag == "melee") + for(var/obj/item/mecha_parts/mecha_equipment/anticcw_armor_booster/B in equipment) + if(B.attack_react()) + booster_deflection_modifier *= B.deflect_coeff + booster_damage_modifier *= B.damage_coeff + break + + if(attack_dir) + var/facing_modifier = get_armour_facing(dir2angle(attack_dir) - dir2angle(src)) + booster_damage_modifier /= facing_modifier + booster_deflection_modifier *= facing_modifier if(prob(deflect_chance * booster_deflection_modifier)) visible_message("[src]'s armour deflects the attack!") log_append_to_last("Armor saved.") return 0 - if(amount) - var/damage = absorbDamage(amount,type) - damage = damage * booster_damage_modifier - health -= damage - update_health() - if(send_message) - occupant_message("Taking damage!") - log_append_to_last("Took [damage] points of damage. Damage type: \"[type]\".",1) - return 1 + if(.) + . *= booster_damage_modifier -/obj/mecha/proc/take_directional_damage(amount, type="brute", adir = 0, booster_deflection_modifier = 1, booster_damage_modifier = 1, send_message = 1) - var/facing_modifier = get_armour_facing(dir2angle(adir) - dir2angle(src)) - - booster_damage_modifier /= facing_modifier - booster_deflection_modifier *= facing_modifier - - return take_damage(amount, type, booster_deflection_modifier, booster_damage_modifier, send_message) - - -/obj/mecha/proc/absorbDamage(damage,damage_type) - var/coeff = 1 - if(damage_absorption[damage_type]) - coeff = damage_absorption[damage_type] - return damage*coeff - - -/obj/mecha/proc/update_health() - if(health > 0) - spark_system.start() - else - qdel(src) - -/obj/mecha/attack_hulk(mob/living/carbon/human/user) - ..(user, 1) - take_directional_damage(15, "brute", get_dir(src, user)) - check_for_internal_damage(list(MECHA_INT_TEMP_CONTROL,MECHA_INT_TANK_BREACH,MECHA_INT_CONTROL_LOST)) - user.visible_message("[user] hits [name]. The metal creaks and bends.") - -/obj/mecha/attack_hand(mob/living/user as mob) +/obj/mecha/attack_hand(mob/living/user) user.changeNext_move(CLICK_CD_MELEE) // Ugh. Ideally we shouldn't be setting cooldowns outside of click code. user.do_attack_animation(src) log_message("Attack by hand/paw. Attacker - [user].",1) user.visible_message("[user] hits [name]. Nothing happens","You hit [name] with no visible effect.") log_append_to_last("Armor saved.") - return /obj/mecha/attack_paw(mob/user as mob) return attack_hand(user) -/obj/mecha/attack_alien(mob/living/user as mob) +/obj/mecha/attack_alien(mob/living/user) log_message("Attack by alien. Attacker - [user].",1) - user.changeNext_move(CLICK_CD_MELEE) //Now stompy alien killer mechs are actually scary to aliens! - user.do_attack_animation(src) - take_directional_damage(15, "brute", get_dir(src, user)) - check_for_internal_damage(list(MECHA_INT_TEMP_CONTROL,MECHA_INT_TANK_BREACH,MECHA_INT_CONTROL_LOST)) - playsound(loc, 'sound/weapons/slash.ogg', 50, 1, -1) - visible_message("The [user] slashes at [name]'s armor!") + playsound(src.loc, 'sound/weapons/slash.ogg', 100, 1) + attack_generic(user, 15, BRUTE, "melee", 0) -/obj/mecha/attack_animal(mob/living/simple_animal/user as mob) +/obj/mecha/attack_animal(mob/living/simple_animal/user) log_message("Attack by simple animal. Attacker - [user].",1) - user.changeNext_move(CLICK_CD_MELEE) if(!user.melee_damage_upper && !user.obj_damage) user.emote("[user.friendly] [src]") + return 0 else - user.do_attack_animation(src) - var/damage = rand(user.melee_damage_lower, user.melee_damage_upper) + var/play_soundeffect = 1 + if(user.environment_smash) + play_soundeffect = 0 + playsound(src, 'sound/effects/bang.ogg', 50, 1) + var/animal_damage = rand(user.melee_damage_lower,user.melee_damage_upper) if(user.obj_damage) - damage = user.obj_damage - take_directional_damage(damage, "brute", get_dir(src, user)) - check_for_internal_damage(list(MECHA_INT_TEMP_CONTROL,MECHA_INT_TANK_BREACH,MECHA_INT_CONTROL_LOST)) - visible_message("[user] [user.attacktext] [src]!") + animal_damage = user.obj_damage + animal_damage = min(animal_damage, 20*user.environment_smash) + attack_generic(user, animal_damage, user.melee_damage_type, "melee", play_soundeffect) add_logs(user, src, "attacked") + return 1 + + + +/obj/mecha/attack_hulk(mob/living/carbon/human/user) + if(user.a_intent == "harm") + log_message("Attack by hulk. Attacker - [user].",1) + user.changeNext_move(CLICK_CD_MELEE) + add_logs(user, src, "punched", "hulk powers") + user.do_attack_animation(src) + user.visible_message("[user] hits [name]. The metal creaks and bends.") + take_damage(15, BRUTE, "melee", 0, get_dir(src, user)) + +/obj/mecha/blob_act(obj/structure/blob/B) + take_damage(30, BRUTE, "melee", 0, get_dir(src, B)) /obj/mecha/attack_tk() return /obj/mecha/hitby(atom/movable/A as mob|obj) //wrapper log_message("Hit by [A].",1) - var/deflection = 1 - var/dam_coeff = 1 - var/counter_tracking = 0 - for(var/obj/item/mecha_parts/mecha_equipment/antiproj_armor_booster/B in equipment) - if(B.projectile_react()) - deflection = B.deflect_coeff - dam_coeff = B.damage_coeff - counter_tracking = 1 - break - if(istype(A, /obj/item/mecha_parts/mecha_tracking)) - if(!counter_tracking) - A.forceMove(src) - visible_message("The [A] fastens firmly to [src].") - return - else - deflection = 100 //will bounce off - - if(isobj(A)) - var/obj/O = A - if(O.throwforce) - visible_message("[name] is hit by [A].") - take_directional_damage(O.throwforce, "brute", get_dir(src, A), deflection, dam_coeff) - check_for_internal_damage(list(MECHA_INT_TEMP_CONTROL,MECHA_INT_TANK_BREACH,MECHA_INT_CONTROL_LOST)) - return + . = ..() -/obj/mecha/bullet_act(var/obj/item/projectile/Proj) //wrapper +/obj/mecha/bullet_act(obj/item/projectile/Proj) //wrapper log_message("Hit by projectile. Type: [Proj.name]([Proj.flag]).",1) - var/deflection = 1 - var/dam_coeff = 1 - for(var/obj/item/mecha_parts/mecha_equipment/antiproj_armor_booster/B in equipment) - if(B.projectile_react()) - deflection = B.deflect_coeff - dam_coeff = B.damage_coeff - break - - if((Proj.damage_type == BRUTE || Proj.damage_type == BURN)) - visible_message("[name] is hit by [Proj].") - take_directional_damage(Proj.damage*dam_coeff,Proj.flag, turn(Proj.dir, 180), deflection, dam_coeff) - check_for_internal_damage(list(MECHA_INT_FIRE,MECHA_INT_TEMP_CONTROL,MECHA_INT_TANK_BREACH,MECHA_INT_CONTROL_LOST,MECHA_INT_SHORT_CIRCUIT)) - Proj.on_hit(src) + . = ..() /obj/mecha/ex_act(severity, target) log_message("Affected by explosion of severity: [severity].",1) if(prob(deflect_chance)) severity++ log_append_to_last("Armor saved, changing severity to [severity].") - switch(severity) - if(1) - qdel(src) - if(2) - if (prob(30)) - qdel(src) - else - take_damage(initial(health)/2) - check_for_internal_damage(list(MECHA_INT_FIRE,MECHA_INT_TEMP_CONTROL,MECHA_INT_TANK_BREACH,MECHA_INT_CONTROL_LOST,MECHA_INT_SHORT_CIRCUIT),1) - if(3) - if (prob(5)) - qdel(src) - else - take_damage(initial(health)/5) - check_for_internal_damage(list(MECHA_INT_FIRE,MECHA_INT_TEMP_CONTROL,MECHA_INT_TANK_BREACH,MECHA_INT_CONTROL_LOST,MECHA_INT_SHORT_CIRCUIT),1) - return - -/obj/mecha/blob_act(obj/structure/blob/B) - take_directional_damage(30, "brute", get_dir(src, B)) + . = ..(severity, target) /obj/mecha/emp_act(severity) if(get_charge()) use_power((cell.charge/3)/(severity*2)) - take_damage(30 / severity,"energy") + take_damage(30 / severity, BURN, "energy", 1) log_message("EMP detected",1) check_for_internal_damage(list(MECHA_INT_FIRE,MECHA_INT_TEMP_CONTROL,MECHA_INT_CONTROL_LOST,MECHA_INT_SHORT_CIRCUIT),1) - return /obj/mecha/temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume) if(exposed_temperature>max_temperature) log_message("Exposed to dangerous temperature.",1) - take_damage(5,"fire") - check_for_internal_damage(list(MECHA_INT_FIRE, MECHA_INT_TEMP_CONTROL)) - return - + take_damage(5, BURN, 0, 1) /obj/mecha/attackby(obj/item/W as obj, mob/user as mob, params) @@ -271,14 +225,14 @@ else if(istype(W, /obj/item/weapon/weldingtool) && user.a_intent != "harm") user.changeNext_move(CLICK_CD_MELEE) var/obj/item/weapon/weldingtool/WT = W - if(healthYou repair the damaged gas tank." else user.visible_message("[user] repairs some damage to [name].") - health += min(10, initial(health)-health) + obj_integrity += min(10, max_integrity-obj_integrity) else user << "The welder must be on for this task!" return 1 @@ -298,21 +252,7 @@ /obj/mecha/attacked_by(obj/item/I, mob/living/user) log_message("Attacked by [I]. Attacker - [user]") - var/deflection = deflect_chance - var/dam_coeff = 1 - for(var/obj/item/mecha_parts/mecha_equipment/anticcw_armor_booster/B in equipment) - if(B.attack_react()) - deflection *= B.deflect_coeff - dam_coeff *= B.damage_coeff - break - if(prob(deflection)) - user << "\The [I.name] bounces off [name]'s armor." - log_append_to_last("Armor saved.") - else - user.visible_message("[user] hits [src] with [I].", "You hit [src] with [I].") - take_directional_damage(round(I.force*dam_coeff),I.damtype, get_dir(src, user)) - check_for_internal_damage(list(MECHA_INT_TEMP_CONTROL,MECHA_INT_TANK_BREACH,MECHA_INT_CONTROL_LOST)) - + ..() /obj/mecha/proc/mech_toxin_damage(mob/living/target) playsound(src, 'sound/effects/spray2.ogg', 50, 1) @@ -323,17 +263,7 @@ target.reagents.add_reagent("toxin", force/2.5) -/atom/proc/mech_melee_attack(obj/mecha/M) - return - /obj/mecha/mech_melee_attack(obj/mecha/M) - if(M.damtype =="brute") - playsound(src, 'sound/weapons/punch4.ogg', 50, 1) - else if(M.damtype == "fire") - playsound(src, 'sound/items/Welder.ogg', 50, 1) - else - return - visible_message("[M.name] has hit [src].") - take_directional_damage(M.force, damtype, get_dir(src, M)) - add_logs(M.occupant, src, "attacked", M, "(INTENT: [uppertext(M.occupant.a_intent)]) (DAMTYPE: [uppertext(M.damtype)])") - return \ No newline at end of file + if(M.damtype == BRUTE || M.damtype == BURN) + add_logs(M.occupant, src, "attacked", M, "(INTENT: [uppertext(M.occupant.a_intent)]) (DAMTYPE: [uppertext(M.damtype)])") + . = ..() \ No newline at end of file diff --git a/code/game/mecha/mecha_topic.dm b/code/game/mecha/mecha_topic.dm index 8084c64a43d..0f6623141c1 100644 --- a/code/game/mecha/mecha_topic.dm +++ b/code/game/mecha/mecha_topic.dm @@ -69,7 +69,7 @@ /obj/mecha/proc/get_stats_part() - var/integrity = health/initial(health)*100 + var/integrity = obj_integrity/max_integrity*100 var/cell_charge = get_charge() var/datum/gas_mixture/int_tank_air = internal_tank.return_air() var/tank_pressure = internal_tank ? round(int_tank_air.return_pressure(),0.01) : "None" diff --git a/code/game/mecha/medical/odysseus.dm b/code/game/mecha/medical/odysseus.dm index efb5b3d31b4..f9ae636dff9 100644 --- a/code/game/mecha/medical/odysseus.dm +++ b/code/game/mecha/medical/odysseus.dm @@ -4,7 +4,8 @@ icon_state = "odysseus" step_in = 3 max_temperature = 15000 - health = 120 + obj_integrity = 120 + max_integrity = 120 wreckage = /obj/structure/mecha_wreckage/odysseus internal_damage_threshold = 35 deflect_chance = 15 diff --git a/code/game/mecha/working/ripley.dm b/code/game/mecha/working/ripley.dm index b9d693deb91..84155a23b7e 100644 --- a/code/game/mecha/working/ripley.dm +++ b/code/game/mecha/working/ripley.dm @@ -6,11 +6,11 @@ var/hi_pres_step_in = 4 //step_in while in high pressure. var/lo_pres_step_in = 2 //step_in while in low/zero pressure. max_temperature = 20000 - health = 200 + obj_integrity = 200 + max_integrity = 200 lights_power = 7 deflect_chance = 15 - damage_absorption = list("brute"=0.6,"fire"=1,"bullet"=0.8,"laser"=0.9,"energy"=1,"bomb"=0.6) - armor = list(melee = 40, bullet = 20, laser = 10, energy = 0, bomb = 40, bio = 0, rad = 0, fire = 0, acid = 0) + armor = list(melee = 40, bullet = 20, laser = 10, energy = 20, bomb = 40, bio = 0, rad = 0, fire = 100, acid = 100) max_equip = 6 wreckage = /obj/structure/mecha_wreckage/ripley var/list/cargo = new @@ -29,7 +29,6 @@ /obj/mecha/working/ripley/Destroy() for(var/i=1, i <= hides, i++) new /obj/item/stack/sheet/animalhide/goliath_hide(loc) //If a goliath-plated ripley gets killed, all the plates drop - damage_absorption["brute"] = initial(damage_absorption["brute"]) for(var/atom/movable/A in cargo) A.loc = loc step_rand(A) @@ -63,11 +62,11 @@ name = "\improper APLU \"Firefighter\"" icon_state = "firefighter" max_temperature = 65000 - health = 250 - resistance_flags = LAVA_PROOF |FIRE_PROOF | ACID_PROOF + obj_integrity = 250 + max_integrity = 250 + resistance_flags = LAVA_PROOF | FIRE_PROOF | ACID_PROOF lights_power = 7 - damage_absorption = list("brute"=0.6,"fire"=0.5,"bullet"=0.7,"laser"=0.7,"energy"=1,"bomb"=0.4) - armor = list(melee = 40, bullet = 30, laser = 30, energy = 0, bomb = 60, bio = 0, rad = 0, fire = 0, acid = 0) + armor = list(melee = 40, bullet = 30, laser = 30, energy = 30, bomb = 60, bio = 0, rad = 0, fire = 100, acid = 100) max_equip = 5 // More armor, less tools wreckage = /obj/structure/mecha_wreckage/ripley/firefighter diff --git a/code/game/objects/effects/alien_acid.dm b/code/game/objects/effects/alien_acid.dm index d95106c2210..96b1406a0b6 100644 --- a/code/game/objects/effects/alien_acid.dm +++ b/code/game/objects/effects/alien_acid.dm @@ -15,73 +15,92 @@ density = 0 opacity = 0 anchored = 1 - resistance_flags = FIRE_PROOF | UNACIDABLE - var/atom/target - var/ticks = 0 - var/target_strength = 0 + resistance_flags = FIRE_PROOF | UNACIDABLE | ACID_PROOF + layer = ABOVE_NORMAL_TURF_LAYER + var/turf/target -/obj/effect/acid/New(loc, targ) +/obj/effect/acid/New(loc, acid_pwr, acid_amt) ..(loc) - target = targ + + target = get_turf(src) + + if(acid_amt) + acid_level = min(acid_amt*acid_pwr, 12000) //capped so the acid effect doesn't last a half hour on the floor. //handle APCs and newscasters and stuff nicely - pixel_x = target.pixel_x - pixel_y = target.pixel_y + pixel_x = target.pixel_x + rand(-4,4) + pixel_y = target.pixel_y + rand(-4,4) - if(isturf(target)) //Turfs take twice as long to take down. - target_strength = 640 - else - target_strength = 320 - tick() + START_PROCESSING(SSobj, src) -/obj/effect/acid/proc/tick() +/obj/effect/acid/Destroy() + STOP_PROCESSING(SSobj, src) + target = null + return ..() + +/obj/effect/acid/process() + . = 1 if(!target) qdel(src) + return 0 - ticks++ + if(prob(5)) + playsound(loc, 'sound/items/Welder.ogg', 100, 1) - if(ticks >= target_strength) - target.visible_message("[target] collapses under its own weight into a puddle of goop and undigested debris!") - - if(istype(target, /obj/structure/closet)) - var/obj/structure/closet/T = target - T.dump_contents() - qdel(target) - - if(ismineralturf(target)) - var/turf/closed/mineral/M = target - M.ChangeTurf(M.baseturf) - - if(isfloorturf(target)) - var/turf/open/floor/F = target - F.ChangeTurf(F.baseturf) - - if(iswallturf(target)) - var/turf/closed/wall/W = target - W.dismantle_wall(1) - - else - qdel(target) + for(var/obj/O in target) + if(prob(20) && !(resistance_flags & UNACIDABLE)) + if(O.acid_level < acid_level*0.3) + var/acid_used = min(acid_level*0.05, 20) + O.acid_act(10, acid_used) + acid_level = max(0, acid_level - acid_used*10) + acid_level = max(acid_level - (5 + 2*round(sqrt(acid_level))), 0) + if(acid_level <= 0) qdel(src) - return + return 0 - x = target.x - y = target.y - z = target.z +/obj/effect/acid/Crossed(AM as mob|obj) + if(isliving(AM)) + var/mob/living/L = AM + if(ishuman(L)) + var/mob/living/carbon/human/H = L + if(FLYING in H.dna.species.specflags) + return + else if(isanimal(L)) + var/mob/living/simple_animal/SA = L + if(SA.flying) + return + if(L.m_intent != "walk" && prob(40)) + var/acid_used = min(acid_level*0.05, 20) + if(L.acid_act(10, acid_used, "feet")) + acid_level = max(0, acid_level - acid_used*10) + playsound(L, 'sound/weapons/sear.ogg', 50, 1) + L << "[src] burns you!" - switch(target_strength - ticks) - if(480) - visible_message("[target] is holding up against the acid!") - if(320) - visible_message("[target] is being melted by the acid!") - if(160) - visible_message("[target] is struggling to withstand the acid!") - if(80) - visible_message("[target] begins to crumble under the acid!") +/obj/effect/acid/alien + var/target_strength = 60 - spawn(1) - if(src) - tick() + +/obj/effect/acid/alien/process() + . = ..() + if(.) + if(prob(45)) + playsound(loc, 'sound/items/Welder.ogg', 100, 1) + target_strength-- + if(target_strength <= 0) + target.visible_message("[target] collapses under its own weight into a puddle of goop and undigested debris!") + target.acid_melt() + qdel(src) + else + + switch(target_strength) + if(48) + visible_message("[target] is holding up against the acid!") + if(32) + visible_message("[target] is being melted by the acid!") + if(16) + visible_message("[target] is struggling to withstand the acid!") + if(8) + visible_message("[target] begins to crumble under the acid!") \ No newline at end of file diff --git a/code/game/objects/effects/contraband.dm b/code/game/objects/effects/contraband.dm index e2b248cb28d..918c4251a88 100644 --- a/code/game/objects/effects/contraband.dm +++ b/code/game/objects/effects/contraband.dm @@ -103,7 +103,7 @@ list(name = "- Carbon Dioxide", desc = " This informational poster teaches the v desc = "You probably shouldn't be holding this." icon = 'icons/obj/contraband.dmi' force = 0 - resistance_flags = 0 + resistance_flags = FLAMMABLE var/serial_number = 0 var/obj/structure/sign/poster/resulting_poster = null //The poster that will be created is initialised and stored through contraband/poster's constructor var/official = 0 diff --git a/code/game/objects/effects/decals/Cleanable/misc.dm b/code/game/objects/effects/decals/Cleanable/misc.dm index 885ab1d6be1..97df69802f6 100644 --- a/code/game/objects/effects/decals/Cleanable/misc.dm +++ b/code/game/objects/effects/decals/Cleanable/misc.dm @@ -52,25 +52,16 @@ gender = NEUTER layer = WALL_OBJ_LAYER icon_state = "cobweb1" + resistance_flags = FLAMMABLE -/obj/effect/decal/cleanable/cobweb/fire_act() - qdel(src) - -/obj/effect/decal/cleanable/cobweb2 - name = "cobweb" - desc = "Somebody should remove that." - gender = NEUTER - layer = WALL_OBJ_LAYER +/obj/effect/decal/cleanable/cobweb/cobweb2 icon_state = "cobweb2" -/obj/effect/decal/cleanable/cobweb2/fire_act() - qdel(src) - -/obj/effect/decal/cleanable/molten_item +/obj/effect/decal/cleanable/molten_object name = "gooey grey mass" desc = "It looks like a melted... something." gender = NEUTER - icon = 'icons/obj/chemical.dmi' + icon = 'icons/effects/effects.dmi' icon_state = "molten" mergeable_decal = 0 @@ -150,9 +141,13 @@ gender = PLURAL mergeable_decal = 0 +/obj/effect/decal/cleanable/shreds/ex_act(severity, target) + if(severity == 1) //so shreds created during an explosion aren't deleted by the explosion. + qdel(src) + /obj/effect/decal/cleanable/shreds/New() - pixel_x = rand(-5, 5) - pixel_y = rand(-5, 5) + pixel_x = rand(-10, 10) + pixel_y = rand(-10, 10) ..() /obj/effect/decal/cleanable/salt diff --git a/code/game/objects/effects/decals/cleanable.dm b/code/game/objects/effects/decals/cleanable.dm index d6f40add970..963165efe99 100644 --- a/code/game/objects/effects/decals/cleanable.dm +++ b/code/game/objects/effects/decals/cleanable.dm @@ -46,6 +46,8 @@ src.reagents.chem_temp = min(src.reagents.chem_temp + added_heat, hotness) src.reagents.handle_reactions() user << "You heat [src] with [W]!" + else + return ..() /obj/effect/decal/cleanable/ex_act() if(reagents) @@ -53,7 +55,7 @@ R.on_ex_act() ..() -/obj/effect/decal/cleanable/fire_act() +/obj/effect/decal/cleanable/fire_act(exposed_temperature, exposed_volume) if(reagents) reagents.chem_temp += 30 reagents.handle_reactions() diff --git a/code/game/objects/effects/decals/decal.dm b/code/game/objects/effects/decals/decal.dm index d54b26ea358..416056f20c7 100644 --- a/code/game/objects/effects/decals/decal.dm +++ b/code/game/objects/effects/decals/decal.dm @@ -1,6 +1,11 @@ /obj/effect/decal name = "decal" anchored = 1 + resistance_flags = FIRE_PROOF | UNACIDABLE | ACID_PROOF /obj/effect/decal/ex_act(severity, target) - qdel(src) \ No newline at end of file + qdel(src) + +/obj/effect/decal/fire_act(exposed_temperature, exposed_volume) + if(!(resistance_flags & FIRE_PROOF)) //non fire proof decal or being burned by lava + qdel(src) diff --git a/code/game/objects/effects/effect_system/effects_foam.dm b/code/game/objects/effects/effect_system/effects_foam.dm index 3911ce019a1..ad098d196f6 100644 --- a/code/game/objects/effects/effect_system/effects_foam.dm +++ b/code/game/objects/effects/effect_system/effects_foam.dm @@ -57,6 +57,10 @@ for(var/obj/O in range(0,src)) if(O.type == src.type) continue + if(isturf(O.loc)) + var/turf/T = O.loc + if(T.intact && O.level == 1) //hidden under the floor + continue reagents.reaction(O, VAPOR, fraction) var/hit = 0 for(var/mob/living/L in range(0,src)) @@ -177,7 +181,8 @@ name = "foamed metal" desc = "A lightweight foamed metal wall." gender = PLURAL - var/metal = 1 // 1=aluminium, 2=iron + obj_integrity = 20 + max_integrity = 20 /obj/structure/foamedmetal/New() ..() @@ -189,76 +194,16 @@ air_update_turf(1) return ..() - /obj/structure/foamedmetal/Move() var/turf/T = loc ..() move_update_air(T) - -/obj/structure/foamedmetal/proc/updateicon() - if(metal == 1) - icon_state = "metalfoam" - else - icon_state = "ironfoam" - - -/obj/structure/foamedmetal/ex_act(severity, target) - qdel(src) - - -/obj/structure/foamedmetal/blob_act(obj/structure/blob/B) - qdel(src) - - -/obj/structure/foamedmetal/bullet_act() - ..() - if(metal==1 || prob(50)) - qdel(src) - - /obj/structure/foamedmetal/attack_paw(mob/user) attack_hand(user) - -/obj/structure/foamedmetal/attack_animal(mob/living/simple_animal/user) - user.changeNext_move(CLICK_CD_MELEE) - user.do_attack_animation(src) +/obj/structure/foamedmetal/play_attack_sound(damage_amount, damage_type = BRUTE, damage_flag = 0) playsound(src.loc, 'sound/weapons/tap.ogg', 100, 1) - if(user.environment_smash >= 1) - user.do_attack_animation(src) - user << "You smash apart the foam wall." - qdel(src) - -/obj/structure/foamedmetal/attack_hulk(mob/living/carbon/human/user) - ..(user, 1) - playsound(src.loc, 'sound/weapons/tap.ogg', 100, 1) - if(prob(75 - metal*25)) - user.visible_message("[user] smashes through the foamed metal!", \ - "You smash through the metal foam wall!") - qdel(src) - return 1 - -/obj/structure/foamedmetal/attack_alien(mob/living/carbon/alien/humanoid/user) - user.changeNext_move(CLICK_CD_MELEE) - user.do_attack_animation(src) - playsound(src.loc, 'sound/weapons/tap.ogg', 100, 1) - if(prob(75 - metal*25)) - user.visible_message("[user] smashes through the foamed metal!", \ - "You smash through the metal foam wall!") - qdel(src) - -/obj/structure/foamedmetal/attack_slime(mob/living/simple_animal/slime/user) - user.changeNext_move(CLICK_CD_MELEE) - user.do_attack_animation(src) - playsound(src.loc, 'sound/weapons/tap.ogg', 100, 1) - if(!user.is_adult) - attack_hand(user) - return - if(prob(75 - metal*25)) - user.visible_message("[user] smashes through the foamed metal!", \ - "You smash through the metal foam wall!") - qdel(src) /obj/structure/foamedmetal/attack_hand(mob/user) user.changeNext_move(CLICK_CD_MELEE) @@ -266,24 +211,13 @@ user << "You hit the metal foam but bounce off it!" playsound(src.loc, 'sound/weapons/tap.ogg', 100, 1) - -/obj/structure/foamedmetal/attacked_by(obj/item/I, mob/living/user) - playsound(src.loc, 'sound/weapons/tap.ogg', 100, 1) //the item attack sound is muffled by the foam. - if(prob(I.force*20 - metal*25)) - user.visible_message("[user] smashes through the foamed metal!", \ - "You smash through the foamed metal with \the [I]!") - qdel(src) - else - user << "You hit the metal foam to no effect!" - /obj/structure/foamedmetal/CanPass(atom/movable/mover, turf/target, height=1.5) return !density /obj/structure/foamedmetal/CanAtmosPass() return !density - - /obj/structure/foamedmetal/iron + obj_integrity = 50 + max_integrity = 50 icon_state = "ironfoam" - metal = 2 \ No newline at end of file diff --git a/code/game/objects/effects/effect_system/effects_smoke.dm b/code/game/objects/effects/effect_system/effects_smoke.dm index c74b9a0cc42..7d34bd40957 100644 --- a/code/game/objects/effects/effect_system/effects_smoke.dm +++ b/code/game/objects/effects/effect_system/effects_smoke.dm @@ -227,6 +227,8 @@ for(var/atom/movable/AM in T) if(AM.type == src.type) continue + if(T.intact && AM.level == 1) //hidden under the floor + continue reagents.reaction(AM, TOUCH, fraction) reagents.reaction(T, TOUCH, fraction) diff --git a/code/game/objects/effects/effects.dm b/code/game/objects/effects/effects.dm index 51d8f30feb8..e0abc98490e 100644 --- a/code/game/objects/effects/effects.dm +++ b/code/game/objects/effects/effects.dm @@ -1,9 +1,41 @@ //objects in /obj/effect should never be things that are attackable, use obj/structure instead. //Effects are mostly temporary visual effects like sparks, smoke, as well as decals, etc... - /obj/effect icon = 'icons/effects/effects.dmi' - resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE + resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF +/obj/effect/attackby(obj/item/I, mob/living/user, params) + return +/obj/effect/take_damage(damage_amount, damage_type = BRUTE, damage_flag = 0, sound_effect = 1, attack_dir) + return + +/obj/effect/fire_act(exposed_temperature, exposed_volume) + return + +/obj/effect/acid_act() + return + +/obj/effect/mech_melee_attack(obj/mecha/M) + return 0 + +/obj/effect/blob_act() + return + +/obj/effect/ex_act(severity, target) + if(target == src) + qdel(src) + else + switch(severity) + if(1) + qdel(src) + if(2) + if(prob(60)) + qdel(src) + if(3) + if(prob(25)) + qdel(src) + +/obj/effect/attack_hulk(mob/living/carbon/human/user, does_attack_animation = 0) + return 0 diff --git a/code/game/objects/effects/glowshroom.dm b/code/game/objects/effects/glowshroom.dm index f33bb7cd3a3..09f8878c709 100644 --- a/code/game/objects/effects/glowshroom.dm +++ b/code/game/objects/effects/glowshroom.dm @@ -13,7 +13,8 @@ var/list/blacklisted_glowshroom_turfs = typecacheof(list( icon = 'icons/obj/lighting.dmi' icon_state = "glowshroom" //replaced in New layer = ABOVE_NORMAL_TURF_LAYER - var/endurance = 30 + obj_integrity = 30 + max_integrity = 30 var/potency = 30 var/delay = 1200 var/floor = 0 @@ -89,7 +90,9 @@ obj/structure/glowshroom/glowcap child.potency = max(potency + rand(-3,6), 0) child.yield = max(yield + rand(-1,2), 0) child.delay = max(delay + rand(-30,60), 0) - child.endurance = max(endurance + rand(-3,6), 1) + var/newhealth = max(obj_integrity + rand(-3,6), 1) + child.obj_integrity = newhealth + child.max_integrity = newhealth child.generation = generation + 1 CHECK_TICK @@ -126,34 +129,17 @@ obj/structure/glowshroom/glowcap floor = 1 return 1 -/obj/structure/glowshroom/attacked_by(obj/item/I, mob/user) - ..() - if(I.damtype != STAMINA) - endurance -= I.force - CheckEndurance() - -/obj/structure/glowshroom/ex_act(severity, target) - switch(severity) - if(1) - qdel(src) - if(2) - if(prob(50)) - qdel(src) - if(3) - if(prob(5)) - qdel(src) +/obj/structure/glowshroom/play_attack_sound(damage_amount, damage_type = BRUTE, damage_flag = 0) + if(damage_type == BURN && damage_amount) + playsound(src.loc, 'sound/items/Welder.ogg', 100, 1) /obj/structure/glowshroom/temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume) if(exposed_temperature > 300) - endurance -= 5 - CheckEndurance() + take_damage(5, BURN, 0, 0) -/obj/structure/glowshroom/proc/CheckEndurance() - if(endurance <= 0) - qdel(src) - -/obj/structure/glowshroom/acid_act(acidpwr, toxpwr, acid_volume) +/obj/structure/glowshroom/acid_act(acidpwr, acid_volume) + . = 1 visible_message("[src] melts away!") - var/obj/effect/decal/cleanable/molten_item/I = new (get_turf(src)) + var/obj/effect/decal/cleanable/molten_object/I = new (get_turf(src)) I.desc = "Looks like this was \an [src] some time ago." qdel(src) diff --git a/code/game/objects/effects/overlays.dm b/code/game/objects/effects/overlays.dm index 93a16e2b624..639b2de74c1 100644 --- a/code/game/objects/effects/overlays.dm +++ b/code/game/objects/effects/overlays.dm @@ -22,7 +22,6 @@ icon_state = "nothing" anchored = 1 layer = ABOVE_MOB_LAYER - resistance_flags = LAVA_PROOF | FIRE_PROOF | UNACIDABLE mouse_opacity = 0 var/duration = 10 //in deciseconds var/randomdir = TRUE diff --git a/code/game/objects/effects/spiders.dm b/code/game/objects/effects/spiders.dm index 09efd978b5e..d2aff6fb3ec 100644 --- a/code/game/objects/effects/spiders.dm +++ b/code/game/objects/effects/spiders.dm @@ -5,46 +5,27 @@ desc = "it's stringy and sticky" anchored = 1 density = 0 - var/health = 15 + obj_integrity = 15 -//similar to weeds, but only barfed out by nurses manually -/obj/structure/spider/ex_act(severity, target) - switch(severity) - if(1) - qdel(src) - if(2) - if (prob(50)) - qdel(src) - if(3) - if (prob(5)) - qdel(src) -/obj/structure/spider/attacked_by(obj/item/I, mob/user) - ..() - var/damage = I.force - take_damage(damage, I.damtype, 1) -/obj/structure/spider/bullet_act(obj/item/projectile/P) +/obj/structure/spider/play_attack_sound(damage_amount, damage_type = BRUTE, damage_flag = 0) + if(damage_type == BURN)//the stickiness of the web mutes all attack sounds except fire damage type + playsound(loc, 'sound/items/Welder.ogg', 100, 1) + + +/obj/structure/spider/run_obj_armor(damage_amount, damage_type, damage_flag = 0, attack_dir) + if(damage_flag == "melee") + switch(damage_type) + if(BURN) + damage_amount *= 2 + if(BRUTE) + damage_amount *= 0.25 . = ..() - take_damage(P.damage, P.damage_type, 0) - -/obj/structure/spider/proc/take_damage(damage, damage_type = BRUTE, sound_effect = 1) - switch(damage_type) - if(BURN) - damage *= 2 - if(sound_effect) - playsound(loc, 'sound/items/Welder.ogg', 100, 1) - if(BRUTE)//the stickiness of the web mutes all attack sounds except fire damage type - damage *= 0.25 - else - return - health -= damage - if(health <= 0) - qdel(src) /obj/structure/spider/temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume) if(exposed_temperature > 300) - take_damage(5, BURN, 0) + take_damage(5, BURN, 0, 0) /obj/structure/spider/stickyweb icon_state = "stickyweb1" @@ -99,7 +80,7 @@ icon_state = "spiderling" anchored = 0 layer = PROJECTILE_HIT_THRESHHOLD_LAYER - health = 3 + obj_integrity = 3 var/amount_grown = 0 var/grow_as = null var/obj/machinery/atmospherics/components/unary/vent_pump/entry_vent @@ -198,7 +179,7 @@ name = "cocoon" desc = "Something wrapped in silky spider web" icon_state = "cocoon1" - health = 60 + obj_integrity = 60 /obj/structure/spider/cocoon/New() icon_state = pick("cocoon1","cocoon2","cocoon3") diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index d5a551f6fb4..534dd1e27c0 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -20,6 +20,10 @@ var/global/image/fire_overlay = image("icon" = 'icons/effects/fire.dmi', "icon_s var/icon/alternate_worn_icon = null//If this is set, update_icons() will find on mob (WORN, NOT INHANDS) states in this file instead, primary use: badminnery/events var/alternate_worn_layer = null//If this is set, update_icons() will force the on mob state (WORN, NOT INHANDS) onto this layer, instead of it's default + obj_integrity = 150 + max_integrity = 150 + armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 0, acid = 0) + var/hitsound = null var/throwhitsound = null var/w_class = 3 @@ -120,12 +124,6 @@ var/global/image/fire_overlay = image("icon" = 'icons/effects/fire.dmi', "icon_s if(B && B.loc == loc) qdel(src) -/obj/item/ex_act(severity, target) - if(severity == 1 || target == src) - qdel(src) - if(!qdeleted(src)) - contents_explosion(severity, target) - //user: The mob that is suiciding //damagetype: The type of damage the item will inflict on the user //BRUTELOSS = 1 @@ -220,21 +218,30 @@ var/global/image/fire_overlay = image("icon" = 'icons/effects/fire.dmi', "icon_s return if(resistance_flags & ON_FIRE) - var/mob/living/carbon/human/H = user - if(istype(H)) - if(H.gloves && (H.gloves.max_heat_protection_temperature > 360)) + var/mob/living/carbon/C = user + if(istype(C)) + if(C.gloves && (C.gloves.max_heat_protection_temperature > 360)) extinguish() user << "You put out the fire on [src]." else user << "You burn your hand on [src]!" - var/obj/item/bodypart/affecting = H.get_bodypart("[(user.active_hand_index % 2 == 0) ? "r" : "l" ]_arm") - if(affecting && affecting.take_damage( 0, 5 )) // 5 burn damage - H.update_damage_overlays() - + var/obj/item/bodypart/affecting = C.get_bodypart("[(user.active_hand_index % 2 == 0) ? "r" : "l" ]_arm") + if(affecting && affecting.receive_damage( 0, 5 )) // 5 burn damage + C.update_damage_overlays() return else extinguish() + if(acid_level > 20 && !ismob(loc))// so we can still remove the clothes on us that have acid. + var/mob/living/carbon/C = user + if(istype(C)) + if(!C.gloves || (!(C.gloves.resistance_flags & (UNACIDABLE|ACID_PROOF)))) + user << "The acid on [src] burns your hand!" + var/obj/item/bodypart/affecting = C.get_bodypart("[(user.active_hand_index % 2 == 0) ? "r" : "l" ]_arm") + if(affecting && affecting.receive_damage( 0, 5 )) // 5 burn damage + C.update_damage_overlays() + + if(istype(loc, /obj/item/weapon/storage)) //If the item is in a storage item, take it out var/obj/item/weapon/storage/S = loc @@ -501,36 +508,6 @@ obj/item/proc/item_action_slot_check(slot, mob/user) throw_at_fast(S,14,3, spin=0) else ..() -/obj/item/acid_act(acidpwr, acid_volume) - . = 1 - if(resistance_flags & UNACIDABLE) - return - - var/meltingpwr = acid_volume*acidpwr - var/melting_threshold = 100 - if(meltingpwr <= melting_threshold) // so a single unit can't melt items. You need 5.1+ unit for fluoro and 10.1+ for sulphuric - return - for(var/V in armor) - if(armor[V] > 0) - .-- //it survives the acid... - break - if(. && prob(min(meltingpwr/10,90))) //chance to melt depends on acid power and volume. - var/turf/T = get_turf(src) - if(T) - var/obj/effect/decal/cleanable/molten_item/I = new (T) - I.pixel_x = rand(-16,16) - I.pixel_y = rand(-16,16) - I.desc = "Looks like this was \an [src] some time ago." - if(istype(src,/obj/item/weapon/storage)) - var/obj/item/weapon/storage/S = src - S.do_quick_empty() //melted storage item drops its content. - qdel(src) - else - for(var/armour_value in armor) //but is weakened - armor[armour_value] = max(armor[armour_value]-min(acidpwr,meltingpwr/10),0) - if(!findtext(desc, "it looks slightly melted...")) //it looks slightly melted... it looks slightly melted... it looks slightly melted... etc. - desc += " it looks slightly melted..." //needs a space at the start, formatting - /obj/item/throw_impact(atom/A) var/itempush = 1 if(w_class < 4) @@ -591,3 +568,32 @@ obj/item/proc/item_action_slot_check(slot, mob/user) //when an item modify our speech spans when in our active hand. Override this to modify speech spans. /obj/item/proc/get_held_item_speechspans(mob/living/carbon/user) return + +/obj/item/hitby(atom/movable/AM) + return + +/obj/item/attack_hulk(mob/living/carbon/human/user) + return 0 + +/obj/item/attack_animal(mob/living/simple_animal/M) + return 0 + +/obj/item/mech_melee_attack(obj/mecha/M) + return 0 + +/obj/item/burn() + if(!qdeleted(src)) + var/turf/T = get_turf(src) + var/obj/effect/decal/cleanable/ash/A = new() + A.desc = "Looks like this used to be a [name] some time ago." + A.forceMove(T) //so the ash decal is deleted if on top of lava. + ..() + +/obj/item/acid_melt() + if(!qdeleted(src)) + var/turf/T = get_turf(src) + var/obj/effect/decal/cleanable/molten_object/MO = new (T) + MO.pixel_x = rand(-16,16) + MO.pixel_y = rand(-16,16) + MO.desc = "Looks like this was \an [src] some time ago." + ..() \ No newline at end of file diff --git a/code/game/objects/items/candle.dm b/code/game/objects/items/candle.dm index c5ae2345881..c30b0ed2f5d 100644 --- a/code/game/objects/items/candle.dm +++ b/code/game/objects/items/candle.dm @@ -35,9 +35,10 @@ if(msg) light(msg) -/obj/item/candle/fire_act() +/obj/item/candle/fire_act(exposed_temperature, exposed_volume) if(!src.lit) light() //honk + ..() /obj/item/candle/proc/light(show_message) if(!src.lit) diff --git a/code/game/objects/items/cardboard_cutouts.dm b/code/game/objects/items/cardboard_cutouts.dm index 2a02f5f8139..f7f4864fbb8 100644 --- a/code/game/objects/items/cardboard_cutouts.dm +++ b/code/game/objects/items/cardboard_cutouts.dm @@ -5,7 +5,7 @@ icon = 'icons/obj/cardboard_cutout.dmi' icon_state = "cutout_basic" w_class = 4 - resistance_flags = 0 + resistance_flags = FLAMMABLE // Possible restyles for the cutout; // add an entry in change_appearance() if you add to here var/list/possible_appearances = list("Assistant", "Clown", "Mime", diff --git a/code/game/objects/items/devices/PDA/PDA.dm b/code/game/objects/items/devices/PDA/PDA.dm index 017a6076c8b..df9bed4e4e8 100644 --- a/code/game/objects/items/devices/PDA/PDA.dm +++ b/code/game/objects/items/devices/PDA/PDA.dm @@ -14,6 +14,9 @@ var/global/list/obj/item/device/pda/PDAs = list() w_class = 1 slot_flags = SLOT_ID | SLOT_BELT origin_tech = "programming=2" + armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 100, acid = 100) + resistance_flags = FIRE_PROOF | ACID_PROOF + //Main variables var/owner = null // String name of owner diff --git a/code/game/objects/items/devices/instruments.dm b/code/game/objects/items/devices/instruments.dm index 53e40bfba80..cbdc878dcb3 100644 --- a/code/game/objects/items/devices/instruments.dm +++ b/code/game/objects/items/devices/instruments.dm @@ -1,8 +1,9 @@ //copy pasta of the space piano, don't hurt me -Pete /obj/item/device/instrument name = "generic instrument" - resistance_flags = 0 - burntime = 20 + resistance_flags = FLAMMABLE + obj_integrity = 100 + max_integrity = 100 var/datum/song/handheld/song var/instrumentId = "generic" var/instrumentExt = "ogg" diff --git a/code/game/objects/items/devices/taperecorder.dm b/code/game/objects/items/devices/taperecorder.dm index 605caa32cd0..42560a9804a 100644 --- a/code/game/objects/items/devices/taperecorder.dm +++ b/code/game/objects/items/devices/taperecorder.dm @@ -47,9 +47,9 @@ mytape = null update_icon() -/obj/item/device/taperecorder/fire_act() +/obj/item/device/taperecorder/fire_act(exposed_temperature, exposed_volume) mytape.ruin() //Fires destroy the tape - return() + ..() /obj/item/device/taperecorder/attack_hand(mob/user) if(loc == user) @@ -248,8 +248,9 @@ var/list/timestamp = list() var/ruined = 0 -/obj/item/device/tape/fire_act() +/obj/item/device/tape/fire_act(exposed_temperature, exposed_volume) ruin() + ..() /obj/item/device/tape/attack_self(mob/user) if(!ruined) diff --git a/code/game/objects/items/religion.dm b/code/game/objects/items/religion.dm index 4f6fa7ad3f0..91f64ccebe5 100644 --- a/code/game/objects/items/religion.dm +++ b/code/game/objects/items/religion.dm @@ -58,7 +58,7 @@ w_class = 4 //bulky slowdown = 2.0 //gotta pretend we're balanced. body_parts_covered = CHEST|GROIN|LEGS|FEET|ARMS|HANDS - armor = list(melee = 50, bullet = 50, laser = 50, energy = 40, bomb = 60, bio = 0, rad = 0) + armor = list(melee = 50, bullet = 50, laser = 50, energy = 40, bomb = 60, bio = 0, rad = 0, fire = 60, acid = 60) /obj/item/clothing/suit/armor/plate/crusader/red icon_state = "crusader-red" @@ -72,7 +72,7 @@ icon_state = "crusader" w_class = 3 //normal flags_inv = HIDEHAIR|HIDEEARS|HIDEFACE - armor = list(melee = 50, bullet = 50, laser = 50, energy = 40, bomb = 60, bio = 0, rad = 0) + armor = list(melee = 50, bullet = 50, laser = 50, energy = 40, bomb = 60, bio = 0, rad = 0, fire = 60, acid = 60) /obj/item/clothing/head/helmet/plate/crusader/blue icon_state = "crusader-blue" @@ -86,7 +86,7 @@ desc = "A religious-looking hat." alternate_worn_icon = 'icons/mob/large-worn-icons/64x64/head.dmi' flags = 0 - armor = list(melee = 60, bullet = 60, laser = 60, energy = 50, bomb = 70, bio = 50, rad = 50) //religion protects you from disease and radiation, honk. + armor = list(melee = 60, bullet = 60, laser = 60, energy = 50, bomb = 70, bio = 50, rad = 50, fire = 60, acid = 60) //religion protects you from disease and radiation, honk. worn_x_dimension = 64 worn_y_dimension = 64 @@ -143,7 +143,7 @@ desc = "Metal boots, they look heavy." icon_state = "crusader" w_class = 3 //normal - armor = list(melee = 50, bullet = 50, laser = 50, energy = 40, bomb = 60, bio = 0, rad = 0) //does this even do anything on boots? + armor = list(melee = 50, bullet = 50, laser = 50, energy = 40, bomb = 60, bio = 0, rad = 0, fire = 60, acid = 60) //does this even do anything on boots? flags = NOSLIP cold_protection = FEET min_cold_protection_temperature = SHOES_MIN_TEMP_PROTECT diff --git a/code/game/objects/items/stacks/cash.dm b/code/game/objects/items/stacks/cash.dm index 948aeff5910..847c205b60b 100644 --- a/code/game/objects/items/stacks/cash.dm +++ b/code/game/objects/items/stacks/cash.dm @@ -10,7 +10,7 @@ throw_speed = 2 throw_range = 2 w_class = 1 - resistance_flags = 0 + resistance_flags = FLAMMABLE var/value = 1 /obj/item/stack/spacecash/c10 diff --git a/code/game/objects/items/stacks/medical.dm b/code/game/objects/items/stacks/medical.dm index 27c78cd1bbe..e7f16358c8b 100644 --- a/code/game/objects/items/stacks/medical.dm +++ b/code/game/objects/items/stacks/medical.dm @@ -7,8 +7,9 @@ w_class = 1 throw_speed = 3 throw_range = 7 - resistance_flags = 0 - burntime = 5 + resistance_flags = FLAMMABLE + obj_integrity = 40 + max_integrity = 40 var/heal_brute = 0 var/heal_burn = 0 var/stop_bleeding = 0 diff --git a/code/game/objects/items/stacks/sheets/glass.dm b/code/game/objects/items/stacks/sheets/glass.dm index a7f84608ffe..728c6d0d48a 100644 --- a/code/game/objects/items/stacks/sheets/glass.dm +++ b/code/game/objects/items/stacks/sheets/glass.dm @@ -15,6 +15,8 @@ icon_state = "sheet-glass" materials = list(MAT_GLASS=MINERAL_MATERIAL_AMOUNT) origin_tech = "materials=1" + armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 50, acid = 100) + resistance_flags = ACID_PROOF /obj/item/stack/sheet/glass/cyborg materials = list() @@ -137,6 +139,8 @@ icon_state = "sheet-rglass" materials = list(MAT_METAL=MINERAL_MATERIAL_AMOUNT/2, MAT_GLASS=MINERAL_MATERIAL_AMOUNT) origin_tech = "materials=2" + armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 70, acid = 100) + resistance_flags = ACID_PROOF /obj/item/stack/sheet/rglass/cyborg materials = list() @@ -282,6 +286,10 @@ materials = list(MAT_GLASS=MINERAL_MATERIAL_AMOUNT) attack_verb = list("stabbed", "slashed", "sliced", "cut") hitsound = 'sound/weapons/bladeslice.ogg' + resistance_flags = ACID_PROOF + armor = list(melee = 100, bullet = 0, laser = 0, energy = 100, bomb = 0, bio = 0, rad = 0, fire = 50, acid = 100) + obj_integrity = 40 + max_integrity = 40 var/cooldown = 0 sharpness = IS_SHARP diff --git a/code/game/objects/items/stacks/sheets/mineral.dm b/code/game/objects/items/stacks/sheets/mineral.dm index d7d8f3e66ba..4e5960697ad 100644 --- a/code/game/objects/items/stacks/sheets/mineral.dm +++ b/code/game/objects/items/stacks/sheets/mineral.dm @@ -135,8 +135,9 @@ var/global/list/datum/stack_recipe/uranium_recipes = list ( \ singular_name = "plasma sheet" origin_tech = "plasmatech=2;materials=2" sheettype = "plasma" - resistance_flags = 0 - burntime = 5 + resistance_flags = FLAMMABLE + obj_integrity = 100 + max_integrity = 100 materials = list(MAT_PLASMA=MINERAL_MATERIAL_AMOUNT) var/global/list/datum/stack_recipe/plasma_recipes = list ( \ @@ -159,7 +160,7 @@ var/global/list/datum/stack_recipe/plasma_recipes = list ( \ else return ..() -/obj/item/stack/sheet/mineral/plasma/fire_act() +/obj/item/stack/sheet/mineral/plasma/fire_act(exposed_temperature, exposed_volume) atmos_spawn_air("plasma=[amount*10];TEMP=1000") qdel(src) diff --git a/code/game/objects/items/stacks/sheets/sheet_types.dm b/code/game/objects/items/stacks/sheets/sheet_types.dm index 78b27c7a287..beff0bb8cab 100644 --- a/code/game/objects/items/stacks/sheets/sheet_types.dm +++ b/code/game/objects/items/stacks/sheets/sheet_types.dm @@ -61,6 +61,7 @@ var/global/list/datum/stack_recipe/metal_recipes = list ( \ throwforce = 10 flags = CONDUCT origin_tech = "materials=1" + resistance_flags = FIRE_PROOF /obj/item/stack/sheet/metal/ratvar_act() new /obj/item/stack/sheet/brass(loc, amount) @@ -104,6 +105,8 @@ var/global/list/datum/stack_recipe/plasteel_recipes = list ( \ throwforce = 10 flags = CONDUCT origin_tech = "materials=2" + armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 100, acid = 80) + resistance_flags = FIRE_PROOF /obj/item/stack/sheet/plasteel/New(var/loc, var/amount=null) recipes = plasteel_recipes @@ -146,7 +149,8 @@ var/global/list/datum/stack_recipe/wood_recipes = list ( \ icon = 'icons/obj/items.dmi' origin_tech = "materials=1;biotech=1" sheettype = "wood" - resistance_flags = 0 + armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 50, acid = 0) + resistance_flags = FLAMMABLE /obj/item/stack/sheet/mineral/wood/New(var/loc, var/amount=null) recipes = wood_recipes @@ -183,7 +187,7 @@ var/global/list/datum/stack_recipe/cloth_recipes = list ( \ singular_name = "cloth roll" icon_state = "sheet-cloth" origin_tech = "materials=2" - resistance_flags = 0 + resistance_flags = FLAMMABLE force = 0 throwforce = 0 @@ -216,7 +220,7 @@ var/global/list/datum/stack_recipe/cardboard_recipes = list ( \ singular_name = "cardboard sheet" icon_state = "sheet-card" origin_tech = "materials=1" - resistance_flags = 0 + resistance_flags = FLAMMABLE /obj/item/stack/sheet/cardboard/New(var/loc, var/amount=null) recipes = cardboard_recipes diff --git a/code/game/objects/items/stacks/tiles/tile_types.dm b/code/game/objects/items/stacks/tiles/tile_types.dm index 39f50a2d1c2..8e8cb737265 100644 --- a/code/game/objects/items/stacks/tiles/tile_types.dm +++ b/code/game/objects/items/stacks/tiles/tile_types.dm @@ -79,7 +79,7 @@ icon_state = "tile_grass" origin_tech = "biotech=1" turf_type = /turf/open/floor/grass - resistance_flags = 0 + resistance_flags = FLAMMABLE //Wood @@ -90,7 +90,7 @@ icon_state = "tile-wood" origin_tech = "biotech=1" turf_type = /turf/open/floor/wood - resistance_flags = 0 + resistance_flags = FLAMMABLE //Carpets @@ -100,7 +100,7 @@ desc = "A piece of carpet. It is the same size as a floor tile." icon_state = "tile-carpet" turf_type = /turf/open/floor/carpet - resistance_flags = 0 + resistance_flags = FLAMMABLE /obj/item/stack/tile/fakespace @@ -109,7 +109,7 @@ desc = "A piece of carpet with a convincing star pattern." icon_state = "tile_space" turf_type = /turf/open/floor/fakespace - resistance_flags = 0 + resistance_flags = FLAMMABLE /obj/item/stack/tile/fakespace/loaded amount = 30 @@ -167,6 +167,8 @@ flags = CONDUCT turf_type = /turf/open/floor/plasteel mineralType = "metal" + armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 100, acid = 70) + resistance_flags = FIRE_PROOF /obj/item/stack/tile/plasteel/cyborg desc = "The ground you walk on." //Not the usual floor tile desc as that refers to throwing, Cyborgs can't do that - RR diff --git a/code/game/objects/items/stacks/wrap.dm b/code/game/objects/items/stacks/wrap.dm index b90798aeb33..1836c559713 100644 --- a/code/game/objects/items/stacks/wrap.dm +++ b/code/game/objects/items/stacks/wrap.dm @@ -12,7 +12,7 @@ flags = NOBLUDGEON amount = 25 max_amount = 25 - resistance_flags = 0 + resistance_flags = FLAMMABLE /obj/item/stack/wrapping_paper/Destroy() if(!amount) @@ -32,7 +32,7 @@ flags = NOBLUDGEON amount = 25 max_amount = 25 - resistance_flags = 0 + resistance_flags = FLAMMABLE /obj/item/proc/can_be_package_wrapped() //can the item be wrapped with package wrapper into a delivery package return 1 diff --git a/code/game/objects/items/toys.dm b/code/game/objects/items/toys.dm index 79f51f68e45..7fad3b35eb6 100644 --- a/code/game/objects/items/toys.dm +++ b/code/game/objects/items/toys.dm @@ -277,7 +277,7 @@ item_state = "arm_blade" attack_verb = list("pricked", "absorbed", "gored") w_class = 2 - resistance_flags = 0 + resistance_flags = FLAMMABLE /* @@ -337,7 +337,7 @@ playsound(src, 'sound/effects/snap.ogg', 50, 1) qdel(src) -/obj/item/toy/snappop/fire_act() +/obj/item/toy/snappop/fire_act(exposed_temperature, exposed_volume) pop_burst() /obj/item/toy/snappop/throw_impact(atom/hit_atom) @@ -638,8 +638,9 @@ /obj/item/toy/cards - resistance_flags = 0 - burntime = 5 + resistance_flags = FLAMMABLE + obj_integrity = 50 + max_integrity = 50 var/parentdeck = null var/deckstyle = "nanotrasen" var/card_hitsound = null @@ -873,8 +874,7 @@ newobj.card_throw_speed = sourceobj.card_throw_speed newobj.card_throw_range = sourceobj.card_throw_range newobj.card_attack_verb = sourceobj.card_attack_verb - if(sourceobj.resistance_flags & FIRE_PROOF) - newobj.resistance_flags |= FIRE_PROOF + newobj.resistance_flags = sourceobj.resistance_flags /obj/item/toy/cards/singlecard name = "card" @@ -991,7 +991,7 @@ card_throw_speed = 3 card_throw_range = 7 card_attack_verb = list("attacked", "sliced", "diced", "slashed", "cut") - resistance_flags = FIRE_PROOF + resistance_flags = 0 /* * Fake nuke @@ -1051,7 +1051,7 @@ item_state = "carp_plushie" w_class = 2 attack_verb = list("bitten", "eaten", "fin slapped") - resistance_flags = 0 + resistance_flags = FLAMMABLE var/bitesound = 'sound/weapons/bite.ogg' //Attack mob @@ -1161,7 +1161,7 @@ icon_state = "toy_mouse" w_class = 2.0 var/cooldown = 0 - resistance_flags = 0 + resistance_flags = FLAMMABLE /* diff --git a/code/game/objects/items/trash.dm b/code/game/objects/items/trash.dm index aeea6c170d0..f1f38450d91 100644 --- a/code/game/objects/items/trash.dm +++ b/code/game/objects/items/trash.dm @@ -3,7 +3,7 @@ icon = 'icons/obj/janitor.dmi' desc = "This is rubbish." w_class = 1 - resistance_flags = 0 + resistance_flags = FLAMMABLE /obj/item/trash/raisins name = "\improper 4no raisins" @@ -40,7 +40,7 @@ /obj/item/trash/plate name = "plate" icon_state = "plate" - resistance_flags = FIRE_PROOF + resistance_flags = 0 /obj/item/trash/pistachios name = "pistachios pack" @@ -53,7 +53,7 @@ /obj/item/trash/tray name = "tray" icon_state = "tray" - resistance_flags = FIRE_PROOF + resistance_flags = 0 /obj/item/trash/candle name = "candle" @@ -63,7 +63,7 @@ /obj/item/trash/can name = "crushed can" icon_state = "cola" - resistance_flags = FIRE_PROOF + resistance_flags = 0 /obj/item/trash/attack(mob/M, mob/living/user) return diff --git a/code/game/objects/items/weapons/RCD.dm b/code/game/objects/items/weapons/RCD.dm index 7f974faaf42..b42ea177b89 100644 --- a/code/game/objects/items/weapons/RCD.dm +++ b/code/game/objects/items/weapons/RCD.dm @@ -21,6 +21,8 @@ RCD materials = list(MAT_METAL=100000) origin_tech = "engineering=4;materials=2" req_access_txt = "11" + armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 100, acid = 50) + resistance_flags = FIRE_PROOF var/datum/effect_system/spark_spread/spark_system var/matter = 0 var/max_matter = 160 diff --git a/code/game/objects/items/weapons/RPD.dm b/code/game/objects/items/weapons/RPD.dm index ab6c2cae1ec..d7de33121f7 100644 --- a/code/game/objects/items/weapons/RPD.dm +++ b/code/game/objects/items/weapons/RPD.dm @@ -133,6 +133,8 @@ var/global/list/RPD_recipes=list( w_class = 3 materials = list(MAT_METAL=75000, MAT_GLASS=37500) origin_tech = "engineering=4;materials=2" + armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 100, acid = 50) + resistance_flags = FIRE_PROOF var/datum/effect_system/spark_spread/spark_system var/working = 0 var/p_type = PIPE_SIMPLE diff --git a/code/game/objects/items/weapons/RSF.dm b/code/game/objects/items/weapons/RSF.dm index 76772fbf2a6..880c78145e4 100644 --- a/code/game/objects/items/weapons/RSF.dm +++ b/code/game/objects/items/weapons/RSF.dm @@ -12,6 +12,7 @@ RSF density = 0 anchored = 0 flags = NOBLUDGEON + armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 0, acid = 0) var/matter = 0 var/mode = 1 w_class = 3 diff --git a/code/game/objects/items/weapons/cards_ids.dm b/code/game/objects/items/weapons/cards_ids.dm index bd400f6ddce..ae47d2f0172 100644 --- a/code/game/objects/items/weapons/cards_ids.dm +++ b/code/game/objects/items/weapons/cards_ids.dm @@ -77,6 +77,8 @@ icon_state = "id" item_state = "card-id" slot_flags = SLOT_ID + armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 100, acid = 100) + resistance_flags = FIRE_PROOF | ACID_PROOF var/mining_points = 0 //For redeeming at mining equipment vendors var/list/access = list() var/registered_name = null // The name registered_name on the card diff --git a/code/game/objects/items/weapons/cigs_lighters.dm b/code/game/objects/items/weapons/cigs_lighters.dm index 96f223e59cb..ae9fe307c69 100644 --- a/code/game/objects/items/weapons/cigs_lighters.dm +++ b/code/game/objects/items/weapons/cigs_lighters.dm @@ -34,7 +34,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM else open_flame(heat) -/obj/item/weapon/match/fire_act() +/obj/item/weapon/match/fire_act(exposed_temperature, exposed_volume) matchignite() /obj/item/weapon/match/proc/matchignite() @@ -248,7 +248,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM else return ..() -/obj/item/clothing/mask/cigarette/fire_act() +/obj/item/clothing/mask/cigarette/fire_act(exposed_temperature, exposed_volume) light() /obj/item/clothing/mask/cigarette/is_hot() @@ -448,6 +448,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM slot_flags = SLOT_BELT var/lit = 0 heat = 1500 + resistance_flags = FIRE_PROOF /obj/item/weapon/lighter/greyscale name = "cheap lighter" diff --git a/code/game/objects/items/weapons/courtroom.dm b/code/game/objects/items/weapons/courtroom.dm index e2f9b2fd21d..734a0428179 100644 --- a/code/game/objects/items/weapons/courtroom.dm +++ b/code/game/objects/items/weapons/courtroom.dm @@ -11,7 +11,7 @@ throwforce = 6 w_class = 2 attack_verb = list("bashed", "battered", "judged", "whacked") - resistance_flags = 0 + resistance_flags = FLAMMABLE /obj/item/weapon/gavelhammer/suicide_act(mob/user) user.visible_message("[user] has sentenced \himself to death with the [src.name]! It looks like \he's trying to commit suicide.") @@ -26,7 +26,7 @@ force = 2 throwforce = 2 w_class = 1 - resistance_flags = 0 + resistance_flags = FLAMMABLE /obj/item/weapon/gavelblock/attackby(obj/item/I, mob/user, params) if(istype(I, /obj/item/weapon/gavelhammer)) diff --git a/code/game/objects/items/weapons/defib.dm b/code/game/objects/items/weapons/defib.dm index b43514eb2cb..d23ce40ffc6 100644 --- a/code/game/objects/items/weapons/defib.dm +++ b/code/game/objects/items/weapons/defib.dm @@ -11,6 +11,7 @@ w_class = 4 origin_tech = "biotech=4" actions_types = list(/datum/action/item_action/toggle_paddles) + armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 50, acid = 50) var/on = 0 //if the paddles are equipped (1) or on the defib (0) var/safety = 1 //if you can zap people with the defibs on harm mode diff --git a/code/game/objects/items/weapons/extinguisher.dm b/code/game/objects/items/weapons/extinguisher.dm index 0e4a15a74ba..17688f30031 100644 --- a/code/game/objects/items/weapons/extinguisher.dm +++ b/code/game/objects/items/weapons/extinguisher.dm @@ -14,6 +14,7 @@ materials = list(MAT_METAL=90) attack_verb = list("slammed", "whacked", "bashed", "thunked", "battered", "bludgeoned", "thrashed") dog_fashion = /datum/dog_fashion/back + resistance_flags = FIRE_PROOF var/max_water = 50 var/last_use = 1 var/safety = 1 diff --git a/code/game/objects/items/weapons/flamethrower.dm b/code/game/objects/items/weapons/flamethrower.dm index 9dbfce86b95..deeb9245b1b 100644 --- a/code/game/objects/items/weapons/flamethrower.dm +++ b/code/game/objects/items/weapons/flamethrower.dm @@ -12,6 +12,7 @@ w_class = 3 materials = list(MAT_METAL=500) origin_tech = "combat=1;plasmatech=2;engineering=2" + resistance_flags = FIRE_PROOF var/status = 0 var/throw_amount = 100 var/lit = 0 //on or off diff --git a/code/game/objects/items/weapons/gift.dm b/code/game/objects/items/weapons/gift.dm index ffeeefe3865..6da16cb6e4a 100644 --- a/code/game/objects/items/weapons/gift.dm +++ b/code/game/objects/items/weapons/gift.dm @@ -13,7 +13,7 @@ icon = 'icons/obj/storage.dmi' icon_state = "giftdeliverypackage3" item_state = "gift1" - resistance_flags = 0 + resistance_flags = FLAMMABLE /obj/item/weapon/a_gift/New() ..() diff --git a/code/game/objects/items/weapons/grenades/grenade.dm b/code/game/objects/items/weapons/grenades/grenade.dm index 4328f3bb274..8c393a65bed 100644 --- a/code/game/objects/items/weapons/grenades/grenade.dm +++ b/code/game/objects/items/weapons/grenades/grenade.dm @@ -9,15 +9,18 @@ throw_range = 7 flags = CONDUCT slot_flags = SLOT_BELT - resistance_flags = 0 - burntime = 5 + resistance_flags = FLAMMABLE + obj_integrity = 40 + max_integrity = 40 var/active = 0 var/det_time = 50 var/display_timer = 1 -/obj/item/weapon/grenade/burn() - prime() - ..() +/obj/item/weapon/grenade/deconstruct(disassembled = TRUE) + if(!disassembled) + prime() + if(!qdeleted(src)) + qdel(src) /obj/item/weapon/grenade/proc/clown_check(mob/living/carbon/human/user) if(user.disabilities & CLUMSY && prob(50)) diff --git a/code/game/objects/items/weapons/grenades/smokebomb.dm b/code/game/objects/items/weapons/grenades/smokebomb.dm index 16a355a1258..3672e2fb90f 100644 --- a/code/game/objects/items/weapons/grenades/smokebomb.dm +++ b/code/game/objects/items/weapons/grenades/smokebomb.dm @@ -26,7 +26,6 @@ for(var/obj/structure/blob/B in view(8,src)) var/damage = round(30/(get_dist(B,src)+1)) - B.health -= damage - B.update_icon() + B.take_damage(damage, BURN, "melee", 0) sleep(80) qdel(src) diff --git a/code/game/objects/items/weapons/handcuffs.dm b/code/game/objects/items/weapons/handcuffs.dm index 7951045eb84..762832bd4e8 100644 --- a/code/game/objects/items/weapons/handcuffs.dm +++ b/code/game/objects/items/weapons/handcuffs.dm @@ -18,6 +18,7 @@ materials = list(MAT_METAL=500) origin_tech = "engineering=3;combat=3" breakouttime = 600 //Deciseconds = 60s = 1 minute + armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 50, acid = 50) var/cuffsound = 'sound/weapons/handcuffs.ogg' var/trashtype = null //for disposable cuffs diff --git a/code/game/objects/items/weapons/holosign_creator.dm b/code/game/objects/items/weapons/holosign_creator.dm index c2693b246b2..043f625f5df 100644 --- a/code/game/objects/items/weapons/holosign_creator.dm +++ b/code/game/objects/items/weapons/holosign_creator.dm @@ -14,7 +14,7 @@ var/list/signs = list() var/max_signs = 10 var/creation_time = 0 //time to create a holosign in deciseconds. - var/holosign_type = /obj/effect/overlay/holograph/wetsign + var/holosign_type = /obj/structure/holosign/wetsign var/holocreator_busy = 0 //to prevent placing multiple holo barriers at once /obj/item/weapon/holosign_creator/afterattack(atom/target, mob/user, flag) @@ -22,7 +22,7 @@ if(!check_allowed_items(target, 1)) return var/turf/T = get_turf(target) - var/obj/effect/overlay/holograph/H = locate(holosign_type) in T + var/obj/structure/holosign/H = locate(holosign_type) in T if(H) user << "You use [src] to deactivate [H]." qdel(H) @@ -62,7 +62,7 @@ name = "security holobarrier projector" desc = "A holographic projector that creates holographic security barriers." icon_state = "signmaker_sec" - holosign_type = /obj/effect/overlay/holograph/barrier + holosign_type = /obj/structure/holosign/barrier creation_time = 30 max_signs = 6 @@ -70,7 +70,7 @@ name = "engineering holobarrier projector" desc = "A holographic projector that creates holographic engineering barriers." icon_state = "signmaker_engi" - holosign_type = /obj/effect/overlay/holograph/barrier/engineering + holosign_type = /obj/structure/holosign/barrier/engineering creation_time = 30 max_signs = 6 @@ -79,7 +79,7 @@ desc = "A holographic projector that creates fragile energy fields" creation_time = 5 max_signs = 9 - holosign_type = /obj/effect/overlay/holograph/barrier/cyborg + holosign_type = /obj/structure/holosign/barrier/cyborg var/shock = 0 /obj/item/weapon/holosign_creator/cyborg/attack_self(mob/user) @@ -88,7 +88,7 @@ if(shock) user <<"You clear all active holograms, and reset your projector to normal." - holosign_type = /obj/effect/overlay/holograph/barrier/cyborg + holosign_type = /obj/structure/holosign/barrier/cyborg creation_time = 5 if(signs.len) for(var/H in signs) @@ -97,7 +97,7 @@ return else if(R.emagged&&!shock) user <<"You clear all active holograms, and overload your energy projector!" - holosign_type = /obj/effect/overlay/holograph/barrier/cyborg/hacked + holosign_type = /obj/structure/holosign/barrier/cyborg/hacked creation_time = 30 if(signs.len) for(var/H in signs) @@ -114,148 +114,3 @@ qdel(H) user << "You clear all active holograms." -/obj/effect/overlay/holograph - icon = 'icons/effects/effects.dmi' - anchored = 1 - var/holo_integrity = 1 - armor = list(melee = 0, bullet = 50, laser = 50, energy = 50, bomb = 0, bio = 0, rad = 0, fire = 0, acid = 0) - var/obj/item/weapon/holosign_creator/projector - -/obj/effect/overlay/holograph/New(loc, source_projector) - if(source_projector) - projector = source_projector - projector.signs += src - ..() - -/obj/effect/overlay/holograph/Destroy() - if(projector) - projector.signs -= src - projector = null - return ..() - -/obj/effect/overlay/holograph/attacked_by(obj/item/I, mob/user) - ..() - take_damage(I.force * 0.5, I.damtype) - -/obj/effect/overlay/holograph/blob_act(obj/structure/blob/B) - qdel(src) - -/obj/effect/overlay/holograph/attack_animal(mob/living/simple_animal/M) - if(!M.melee_damage_upper && !M.obj_damage) - return - attack_generic(5, M) - -/obj/effect/overlay/holograph/attack_alien(mob/living/carbon/alien/A) - attack_generic(5, A) - -/obj/effect/overlay/holograph/attack_hand(mob/living/user) - attack_generic(1, user) - -/obj/effect/overlay/holograph/mech_melee_attack(obj/mecha/M) - M.do_attack_animation(src) - playsound(loc, 'sound/weapons/Egloves.ogg', 80, 1) - visible_message("[M.name] has hit [src].") - qdel(src) - -/obj/effect/overlay/holograph/attack_slime(mob/living/simple_animal/slime/S) - if(S.is_adult) - attack_generic(5, S) - else - attack_generic(2, S) - -/obj/effect/overlay/holograph/proc/attack_generic(damage_amount, mob/user) - user.changeNext_move(CLICK_CD_MELEE) - user.do_attack_animation(src) - user.visible_message("[user] hits [src].", \ - "You hit [src]." ) - take_damage(damage_amount) - -/obj/effect/overlay/holograph/proc/take_damage(damage, damage_type = BRUTE, sound_effect = 1) - switch(damage_type) - if(BRUTE) - if(damage && sound_effect) - playsound(loc, 'sound/weapons/Egloves.ogg', 80, 1) - if(BURN) - if(damage && sound_effect) - playsound(loc, 'sound/weapons/Egloves.ogg', 80, 1) - else - return - holo_integrity -= damage - if(holo_integrity <= 0) - qdel(src) - -/obj/effect/overlay/holograph/hitby(atom/movable/AM) - ..() - var/tforce = 1 - if(ismob(AM)) - tforce = 5 - else if(isobj(AM)) - var/obj/item/I = AM - tforce = max(1, I.throwforce * 0.2) - take_damage(tforce) - -/obj/effect/overlay/holograph/bullet_act(obj/item/projectile/P) - . = ..() - take_damage(P.damage * 0.5, P.damage_type) - -/obj/effect/overlay/holograph/wetsign - name = "wet floor sign" - desc = "The words flicker as if they mean nothing." - icon_state = "holosign" - -/obj/effect/overlay/holograph/barrier - name = "holo barrier" - desc = "A short holographic barrier which can only be passed by walking." - icon_state = "holosign_sec" - pass_flags = LETPASSTHROW - density = 1 - holo_integrity = 4 - -/obj/effect/overlay/holograph/barrier/CanPass(atom/movable/mover, turf/target, height=0, air_group=0) - if(!density) - return 1 - if(air_group || (height==0)) - return 1 - if(mover.pass_flags & (PASSGLASS|PASSTABLE|PASSGRILLE)) - return 1 - if(iscarbon(mover)) - var/mob/living/carbon/C = mover - if(C.m_intent == "walk") - return 1 - -/obj/effect/overlay/holograph/barrier/engineering - icon_state = "holosign_engi" - -/obj/effect/overlay/holograph/barrier/cyborg - name = "Energy Field" - desc = "A fragile energy field that blocks movement" - density = 1 - holo_integrity = 1 - -/obj/effect/overlay/holograph/barrier/cyborg/CanPass() - return 0 - -/obj/effect/overlay/holograph/barrier/cyborg/hacked - name = "Charged Energy Field" - desc = "A powerful energy field that blocks movement. Energy arcs off it" - holo_integrity = 3 - var/shockcd = 0 - -/obj/effect/overlay/holograph/barrier/cyborg/hacked/proc/cooldown() - shockcd = FALSE - -/obj/effect/overlay/holograph/barrier/cyborg/hacked/attack_hand(mob/living/user) - if(!shockcd) - if(ismob(user)) - var/mob/living/M = user - M.electrocute_act(15,"Energy Barrier", safety=1) - shockcd = TRUE - addtimer(src, "cooldown", 10) - -/obj/effect/overlay/holograph/barrier/cyborg/hacked/Bumped(atom/user) - if(!shockcd) - if(ismob(user)) - var/mob/living/M = user - M.electrocute_act(15,"Energy Barrier", safety=1) - shockcd = TRUE - addtimer(src, "cooldown", 10) diff --git a/code/game/objects/items/weapons/kitchen.dm b/code/game/objects/items/weapons/kitchen.dm index ee4a454f671..4b9189cbe1d 100644 --- a/code/game/objects/items/weapons/kitchen.dm +++ b/code/game/objects/items/weapons/kitchen.dm @@ -25,6 +25,7 @@ flags = CONDUCT attack_verb = list("attacked", "stabbed", "poked") hitsound = 'sound/weapons/bladeslice.ogg' + armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 50, acid = 30) var/datum/reagent/forkload //used to eat omelette /obj/item/weapon/kitchen/fork/attack(mob/living/carbon/M, mob/living/carbon/user) @@ -63,6 +64,7 @@ materials = list(MAT_METAL=12000) attack_verb = list("slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") sharpness = IS_SHARP_ACCURATE + armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 50, acid = 50) /obj/item/weapon/kitchen/knife/attack(mob/living/carbon/M, mob/living/carbon/user) if(user.zone_selected == "eyes") @@ -140,6 +142,7 @@ materials = list() origin_tech = "biotech=3;combat=2" attack_verb = list("shanked", "shivved") + armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 0, acid = 0) /obj/item/weapon/kitchen/rollingpin name = "rolling pin" diff --git a/code/game/objects/items/weapons/melee/energy.dm b/code/game/objects/items/weapons/melee/energy.dm index b9d3a17e023..4e4bc94f7e7 100644 --- a/code/game/objects/items/weapons/melee/energy.dm +++ b/code/game/objects/items/weapons/melee/energy.dm @@ -7,6 +7,10 @@ w_class = 2 var/w_class_on = 4 heat = 3500 + obj_integrity = 200 + max_integrity = 200 + armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 100, acid = 30) + resistance_flags = FIRE_PROOF /obj/item/weapon/melee/energy/suicide_act(mob/user) user.visible_message(pick("[user] is slitting \his stomach open with [src]! It looks like \he's trying to commit seppuku.", \ diff --git a/code/game/objects/items/weapons/mop.dm b/code/game/objects/items/weapons/mop.dm index de00af41d6f..a3f2621f37a 100644 --- a/code/game/objects/items/weapons/mop.dm +++ b/code/game/objects/items/weapons/mop.dm @@ -9,7 +9,7 @@ throw_range = 7 w_class = 3 attack_verb = list("mopped", "bashed", "bludgeoned", "whacked") - resistance_flags = 0 + resistance_flags = FLAMMABLE var/mopping = 0 var/mopcount = 0 var/mopcap = 5 diff --git a/code/game/objects/items/weapons/paint.dm b/code/game/objects/items/weapons/paint.dm index 1b51fdd88ad..ac24af721ce 100644 --- a/code/game/objects/items/weapons/paint.dm +++ b/code/game/objects/items/weapons/paint.dm @@ -10,8 +10,9 @@ item_color = "FFFFFF" item_state = "paintcan" w_class = 3 - resistance_flags = 0 - burntime = 5 + resistance_flags = FLAMMABLE + obj_integrity = 100 + max_integrity = 100 var/paintleft = 10 /obj/item/weapon/paint/red diff --git a/code/game/objects/items/weapons/pneumaticCannon.dm b/code/game/objects/items/weapons/pneumaticCannon.dm index 6ba69175bf4..3dba89c7f87 100644 --- a/code/game/objects/items/weapons/pneumaticCannon.dm +++ b/code/game/objects/items/weapons/pneumaticCannon.dm @@ -9,6 +9,7 @@ item_state = "bulldog" lefthand_file = 'icons/mob/inhands/guns_lefthand.dmi' righthand_file = 'icons/mob/inhands/guns_righthand.dmi' + armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 60, acid = 50) var/maxWeightClass = 20 //The max weight of items that can fit into the cannon var/loadedWeightClass = 0 //The weight of items currently in the cannon var/obj/item/weapon/tank/internals/tank = null //The gas tank that is drawn from to fire things diff --git a/code/game/objects/items/weapons/powerfist.dm b/code/game/objects/items/weapons/powerfist.dm index 4748b109a2b..37efb4ad832 100644 --- a/code/game/objects/items/weapons/powerfist.dm +++ b/code/game/objects/items/weapons/powerfist.dm @@ -10,6 +10,8 @@ throw_range = 7 w_class = 3 origin_tech = "combat=5;powerstorage=3;syndicate=3" + armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 100, acid = 40) + resistance_flags = FIRE_PROOF var/click_delay = 1.5 var/fisto_setting = 1 var/gasperfist = 3 diff --git a/code/game/objects/items/weapons/scrolls.dm b/code/game/objects/items/weapons/scrolls.dm index 45d3b2e6d60..6060aec8d4c 100644 --- a/code/game/objects/items/weapons/scrolls.dm +++ b/code/game/objects/items/weapons/scrolls.dm @@ -9,7 +9,7 @@ throw_speed = 3 throw_range = 7 origin_tech = "bluespace=6" - resistance_flags = 0 + resistance_flags = FLAMMABLE /obj/item/weapon/teleportation_scroll/apprentice name = "lesser scroll of teleportation" diff --git a/code/game/objects/items/weapons/shields.dm b/code/game/objects/items/weapons/shields.dm index 1f510031439..0161515d54e 100644 --- a/code/game/objects/items/weapons/shields.dm +++ b/code/game/objects/items/weapons/shields.dm @@ -1,6 +1,7 @@ /obj/item/weapon/shield name = "shield" block_chance = 50 + armor = list(melee = 50, bullet = 50, laser = 50, energy = 0, bomb = 30, bio = 0, rad = 0, fire = 80, acid = 70) /obj/item/weapon/shield/riot name = "riot shield" @@ -48,7 +49,7 @@ item_state = "buckler" materials = list() origin_tech = "materials=1;combat=3;biotech=2" - resistance_flags = 0 + resistance_flags = FLAMMABLE block_chance = 30 /obj/item/weapon/shield/energy diff --git a/code/game/objects/items/weapons/signs.dm b/code/game/objects/items/weapons/signs.dm index 9950d25a61d..24824f7cd4f 100644 --- a/code/game/objects/items/weapons/signs.dm +++ b/code/game/objects/items/weapons/signs.dm @@ -5,7 +5,7 @@ force = 5 w_class = 4 attack_verb = list("bashed","smacked") - resistance_flags = 0 + resistance_flags = FLAMMABLE var/label = "" var/last_wave = 0 diff --git a/code/game/objects/items/weapons/singularityhammer.dm b/code/game/objects/items/weapons/singularityhammer.dm index 27d91f15d16..6b51397ff53 100644 --- a/code/game/objects/items/weapons/singularityhammer.dm +++ b/code/game/objects/items/weapons/singularityhammer.dm @@ -12,6 +12,8 @@ w_class = 5 var/charged = 5 origin_tech = "combat=4;bluespace=4;plasmatech=7" + armor = list(melee = 50, bullet = 50, laser = 50, energy = 0, bomb = 50, bio = 0, rad = 0, fire = 100, acid = 100) + resistance_flags = FIRE_PROOF | ACID_PROOF /obj/item/weapon/twohanded/singularityhammer/New() ..() diff --git a/code/game/objects/items/weapons/storage/backpack.dm b/code/game/objects/items/weapons/storage/backpack.dm index 6255c1ebe13..3c46834224e 100644 --- a/code/game/objects/items/weapons/storage/backpack.dm +++ b/code/game/objects/items/weapons/storage/backpack.dm @@ -19,8 +19,9 @@ max_w_class = 3 max_combined_w_class = 21 storage_slots = 21 - resistance_flags = 0 - burntime = 20 + resistance_flags = FLAMMABLE + obj_integrity = 100 + max_integrity = 100 /obj/item/weapon/storage/backpack/attackby(obj/item/weapon/W, mob/user, params) playsound(src.loc, "rustle", 50, 1, -5) @@ -37,9 +38,11 @@ icon_state = "holdingpack" max_w_class = 6 max_combined_w_class = 35 - resistance_flags = FIRE_PROOF + resistance_flags = 0 var/pshoom = 'sound/items/PSHOOM.ogg' var/alt_sound = 'sound/items/PSHOOM_2.ogg' + armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 60, acid = 50) + /obj/item/weapon/storage/backpack/holding/suicide_act(mob/user) user.visible_message("[user] is jumping into [src]! It looks like \he's trying to commit suicide.") @@ -141,14 +144,14 @@ desc = "It's a special backpack made exclusively for Nanotrasen officers." icon_state = "captainpack" item_state = "captainpack" - resistance_flags = FIRE_PROOF + resistance_flags = 0 /obj/item/weapon/storage/backpack/industrial name = "industrial backpack" desc = "It's a tough backpack for the daily grind of station life." icon_state = "engiepack" item_state = "engiepack" - resistance_flags = FIRE_PROOF + resistance_flags = 0 /obj/item/weapon/storage/backpack/botany name = "botany backpack" @@ -173,7 +176,7 @@ desc = "A specially designed backpack. It's fire resistant and smells vaguely of plasma." icon_state = "toxpack" item_state = "toxpack" - resistance_flags = FIRE_PROOF + resistance_flags = 0 /obj/item/weapon/storage/backpack/virology name = "virology backpack" @@ -196,7 +199,7 @@ name = "leather satchel" desc = "It's a very fancy satchel made with fine leather." icon_state = "satchel" - resistance_flags = FIRE_PROOF + resistance_flags = 0 /obj/item/weapon/storage/backpack/satchel/leather/withwallet/New() ..() @@ -207,7 +210,7 @@ desc = "A tough satchel with extra pockets." icon_state = "satchel-eng" item_state = "engiepack" - resistance_flags = FIRE_PROOF + resistance_flags = 0 /obj/item/weapon/storage/backpack/satchel/med name = "medical satchel" @@ -238,7 +241,7 @@ desc = "Useful for holding research materials." icon_state = "satchel-tox" item_state = "satchel-tox" - resistance_flags = FIRE_PROOF + resistance_flags = 0 /obj/item/weapon/storage/backpack/satchel/hyd name = "botanist satchel" @@ -263,7 +266,7 @@ desc = "An exclusive satchel for Nanotrasen officers." icon_state = "satchel-cap" item_state = "captainpack" - resistance_flags = FIRE_PROOF + resistance_flags = 0 /obj/item/weapon/storage/backpack/satchel/flat name = "smuggler's satchel" @@ -328,7 +331,7 @@ desc = "A large dufflebag for holding extra captainly goods." icon_state = "duffle-captain" item_state = "duffle-captain" - resistance_flags = FIRE_PROOF + resistance_flags = 0 /obj/item/weapon/storage/backpack/dufflebag/med name = "medical dufflebag" @@ -347,7 +350,7 @@ desc = "A large dufflebag for holding extra tools and supplies." icon_state = "duffle-eng" item_state = "duffle-eng" - resistance_flags = FIRE_PROOF + resistance_flags = 0 /obj/item/weapon/storage/backpack/dufflebag/drone name = "drone dufflebag" diff --git a/code/game/objects/items/weapons/storage/bags.dm b/code/game/objects/items/weapons/storage/bags.dm index ea0d4721f78..7bf1b3e476c 100644 --- a/code/game/objects/items/weapons/storage/bags.dm +++ b/code/game/objects/items/weapons/storage/bags.dm @@ -113,7 +113,7 @@ max_w_class = 3 w_class = 1 can_hold = list(/obj/item/weapon/reagent_containers/food/snacks/grown,/obj/item/seeds,/obj/item/weapon/grown) - resistance_flags = 0 + resistance_flags = FLAMMABLE //////// @@ -294,7 +294,7 @@ max_w_class = 3 w_class = 4 //Bigger than a book because physics can_hold = list(/obj/item/weapon/book, /obj/item/weapon/storage/book, /obj/item/weapon/spellbook) - resistance_flags = 0 + resistance_flags = FLAMMABLE /* * Trays - Agouri @@ -364,7 +364,7 @@ w_class = 1 preposition = "in" can_hold = list(/obj/item/weapon/reagent_containers/pill, /obj/item/weapon/reagent_containers/glass/beaker, /obj/item/weapon/reagent_containers/glass/bottle) - resistance_flags = 0 + resistance_flags = FLAMMABLE /* * Biowaste bag (mostly for xenobiologists) @@ -380,4 +380,4 @@ w_class = 1 preposition = "in" can_hold = list(/obj/item/slime_extract, /obj/item/weapon/reagent_containers/syringe, /obj/item/weapon/reagent_containers/glass/beaker, /obj/item/weapon/reagent_containers/glass/bottle, /obj/item/weapon/reagent_containers/blood, /obj/item/weapon/reagent_containers/hypospray/medipen, /obj/item/trash/deadmouse) - resistance_flags = 0 + resistance_flags = FLAMMABLE diff --git a/code/game/objects/items/weapons/storage/book.dm b/code/game/objects/items/weapons/storage/book.dm index 0b93ec1fb7a..fb83d85e1a1 100644 --- a/code/game/objects/items/weapons/storage/book.dm +++ b/code/game/objects/items/weapons/storage/book.dm @@ -6,7 +6,7 @@ throw_speed = 2 throw_range = 5 w_class = 3 - resistance_flags = 0 + resistance_flags = FLAMMABLE var/title = "book" /obj/item/weapon/storage/book/attack_self(mob/user) user << "The pages of [title] have been cut out!" diff --git a/code/game/objects/items/weapons/storage/boxes.dm b/code/game/objects/items/weapons/storage/boxes.dm index 99c11c88f3b..d8e8a8cfd0c 100644 --- a/code/game/objects/items/weapons/storage/boxes.dm +++ b/code/game/objects/items/weapons/storage/boxes.dm @@ -25,7 +25,7 @@ desc = "It's just an ordinary box." icon_state = "box" item_state = "syringe_kit" - resistance_flags = 0 + resistance_flags = FLAMMABLE var/foldable = /obj/item/stack/sheet/cardboard @@ -634,7 +634,7 @@ desc = "A sack neatly crafted out of paper." icon_state = "paperbag_None" item_state = "paperbag_None" - resistance_flags = 0 + resistance_flags = FLAMMABLE foldable = null var/design = NODESIGN diff --git a/code/game/objects/items/weapons/storage/briefcase.dm b/code/game/objects/items/weapons/storage/briefcase.dm index a540ed7080c..8a94a7a6a53 100644 --- a/code/game/objects/items/weapons/storage/briefcase.dm +++ b/code/game/objects/items/weapons/storage/briefcase.dm @@ -11,8 +11,9 @@ max_w_class = 3 max_combined_w_class = 21 attack_verb = list("bashed", "battered", "bludgeoned", "thrashed", "whacked") - resistance_flags = 0 - burntime = 20 + resistance_flags = FLAMMABLE + obj_integrity = 150 + max_integrity = 150 var/folder_path = /obj/item/weapon/folder //this is the path of the folder that gets spawned in New() /obj/item/weapon/storage/briefcase/New() @@ -42,8 +43,9 @@ max_w_class = 3 max_combined_w_class = 21 attack_verb = list("bashed", "battered", "bludgeoned", "thrashed", "whacked") - resistance_flags = 0 - burntime = 20 + resistance_flags = FLAMMABLE + obj_integrity = 150 + max_integrity = 150 /obj/item/weapon/storage/briefcase/sniperbundle/New() ..() diff --git a/code/game/objects/items/weapons/storage/fancy.dm b/code/game/objects/items/weapons/storage/fancy.dm index 6111e75fe85..72acca6b996 100644 --- a/code/game/objects/items/weapons/storage/fancy.dm +++ b/code/game/objects/items/weapons/storage/fancy.dm @@ -17,7 +17,7 @@ icon = 'icons/obj/food/containers.dmi' icon_state = "donutbox6" name = "donut box" - resistance_flags = 0 + resistance_flags = FLAMMABLE var/icon_type = "donut" var/spawn_type = null var/fancy_open = FALSE diff --git a/code/game/objects/items/weapons/storage/storage.dm b/code/game/objects/items/weapons/storage/storage.dm index 1f169b0db52..0fc24a85698 100644 --- a/code/game/objects/items/weapons/storage/storage.dm +++ b/code/game/objects/items/weapons/storage/storage.dm @@ -342,7 +342,7 @@ //Call this proc to handle the removal of an item from the storage item. The item will be moved to the atom sent as new_target -/obj/item/weapon/storage/proc/remove_from_storage(obj/item/W, atom/new_location, burn = 0) +/obj/item/weapon/storage/proc/remove_from_storage(obj/item/W, atom/new_location) if(!istype(W)) return 0 @@ -369,14 +369,13 @@ W.on_exit_storage(src) update_icon() W.mouse_opacity = initial(W.mouse_opacity) - if(burn) - W.fire_act() return 1 -/obj/item/weapon/storage/empty_object_contents(burn, src.loc) +/obj/item/weapon/storage/deconstruct(disassembled = TRUE) for(var/obj/item/Item in contents) - remove_from_storage(Item, src.loc, burn) + remove_from_storage(Item, src.loc) + qdel(src) //This proc is called when you want to place an item into the storage item. /obj/item/weapon/storage/attackby(obj/item/W, mob/user, params) diff --git a/code/game/objects/items/weapons/storage/wallets.dm b/code/game/objects/items/weapons/storage/wallets.dm index 3dd8d772de1..9ac9ec9e81b 100644 --- a/code/game/objects/items/weapons/storage/wallets.dm +++ b/code/game/objects/items/weapons/storage/wallets.dm @@ -4,7 +4,7 @@ storage_slots = 4 icon_state = "wallet" w_class = 2 - resistance_flags = 0 + resistance_flags = FLAMMABLE can_hold = list( /obj/item/stack/spacecash, /obj/item/weapon/card, diff --git a/code/game/objects/items/weapons/stunbaton.dm b/code/game/objects/items/weapons/stunbaton.dm index b5a5175d0b0..c4118cce190 100644 --- a/code/game/objects/items/weapons/stunbaton.dm +++ b/code/game/objects/items/weapons/stunbaton.dm @@ -9,6 +9,8 @@ w_class = 3 origin_tech = "combat=2" attack_verb = list("beaten") + armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 50, bio = 0, rad = 0, fire = 80, acid = 80) + var/stunforce = 7 var/status = 0 var/obj/item/weapon/stock_parts/cell/high/bcell = null diff --git a/code/game/objects/items/weapons/tanks/tanks.dm b/code/game/objects/items/weapons/tanks/tanks.dm index ba3361b4c4e..18b428f311d 100644 --- a/code/game/objects/items/weapons/tanks/tanks.dm +++ b/code/game/objects/items/weapons/tanks/tanks.dm @@ -10,6 +10,7 @@ throw_speed = 1 throw_range = 4 actions_types = list(/datum/action/item_action/set_internals) + armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 10, bio = 0, rad = 0, fire = 80, acid = 30) var/datum/gas_mixture/air_contents = null var/distribute_pressure = ONE_ATMOSPHERE var/integrity = 3 @@ -102,6 +103,15 @@ qdel(src) +/obj/item/weapon/tank/deconstruct(disassembled = TRUE) + if(!disassembled) + var/turf/T = get_turf(src) + if(T) + T.assume_air(air_contents) + air_update_turf() + playsound(src.loc, 'sound/effects/spray.ogg', 10, 1, -3) + qdel(src) + /obj/item/weapon/tank/suicide_act(mob/user) var/mob/living/carbon/human/H = user user.visible_message("[user] is putting the [src]'s valve to their lips! I don't think they're gonna stop!") diff --git a/code/game/objects/items/weapons/tanks/watertank.dm b/code/game/objects/items/weapons/tanks/watertank.dm index 9cd88a660a9..b641a999de8 100644 --- a/code/game/objects/items/weapons/tanks/watertank.dm +++ b/code/game/objects/items/weapons/tanks/watertank.dm @@ -9,6 +9,10 @@ slot_flags = SLOT_BACK slowdown = 1 actions_types = list(/datum/action/item_action/toggle_mister) + obj_integrity = 200 + max_integrity = 200 + armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 100, acid = 30) + resistance_flags = FIRE_PROOF var/obj/item/weapon/noz var/on = 0 diff --git a/code/game/objects/items/weapons/teleportation.dm b/code/game/objects/items/weapons/teleportation.dm index b0b0e8ac781..f0480362db0 100644 --- a/code/game/objects/items/weapons/teleportation.dm +++ b/code/game/objects/items/weapons/teleportation.dm @@ -134,6 +134,8 @@ Frequency: throw_range = 5 materials = list(MAT_METAL=10000) origin_tech = "magnets=3;bluespace=4" + armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 30, bio = 0, rad = 0, fire = 100, acid = 100) + resistance_flags = FIRE_PROOF | ACID_PROOF var/active_portals = 0 /obj/item/weapon/hand_tele/attack_self(mob/user) diff --git a/code/game/objects/items/weapons/tools.dm b/code/game/objects/items/weapons/tools.dm index 8b3816cc3dd..7e0f3b1c966 100644 --- a/code/game/objects/items/weapons/tools.dm +++ b/code/game/objects/items/weapons/tools.dm @@ -28,6 +28,7 @@ origin_tech = "materials=1;engineering=1" attack_verb = list("bashed", "battered", "bludgeoned", "whacked") toolspeed = 1 + armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 50, acid = 30) /obj/item/weapon/wrench/suicide_act(mob/user) user.visible_message("[user] is beating \himself to death with the [src.name]! It looks like \he's trying to commit suicide.") @@ -103,6 +104,7 @@ attack_verb = list("stabbed") hitsound = 'sound/weapons/bladeslice.ogg' toolspeed = 1 + armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 50, acid = 30) /obj/item/weapon/screwdriver/suicide_act(mob/user) user.visible_message(pick("[user] is stabbing the [src.name] into \his temple! It looks like \he's trying to commit suicide.", \ @@ -161,6 +163,7 @@ attack_verb = list("pinched", "nipped") hitsound = 'sound/items/Wirecutter.ogg' toolspeed = 1 + armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 50, acid = 30) /obj/item/weapon/wirecutters/New(loc, var/param_color = null) ..() @@ -216,7 +219,8 @@ throw_speed = 3 throw_range = 5 w_class = 2 - + armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 100, acid = 30) + resistance_flags = FIRE_PROOF materials = list(MAT_METAL=70, MAT_GLASS=30) origin_tech = "engineering=1;plasmatech=1" @@ -552,6 +556,7 @@ obj/item/weapon/weldingtool/proc/switched_off(mob/user) origin_tech = "engineering=1;combat=1" attack_verb = list("attacked", "bashed", "battered", "bludgeoned", "whacked") toolspeed = 1 + armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 50, acid = 30) /obj/item/weapon/crowbar/suicide_act(mob/user) user.visible_message("[user] is beating \himself to death with the [src.name]! It looks like \he's trying to commit suicide.") diff --git a/code/game/objects/items/weapons/twohanded.dm b/code/game/objects/items/weapons/twohanded.dm index 6890ef0f7a9..ec802e17b6e 100644 --- a/code/game/objects/items/weapons/twohanded.dm +++ b/code/game/objects/items/weapons/twohanded.dm @@ -118,6 +118,7 @@ icon_state = "offhand" w_class = 5 flags = ABSTRACT + resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF /obj/item/weapon/twohanded/offhand/unwield() qdel(src) @@ -173,6 +174,10 @@ attack_verb = list("attacked", "chopped", "cleaved", "torn", "cut") hitsound = 'sound/weapons/bladeslice.ogg' sharpness = IS_SHARP + obj_integrity = 200 + max_integrity = 200 + armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 100, acid = 30) + resistance_flags = FIRE_PROOF /obj/item/weapon/twohanded/fireaxe/update_icon() //Currently only here to fuck with the on-mob icons. icon_state = "fireaxe[wielded]" @@ -187,10 +192,10 @@ if(wielded) //destroys windows and grilles in one hit if(istype(A,/obj/structure/window)) var/obj/structure/window/W = A - W.shatter() + W.take_damage(400, BRUTE, "melee", 0) else if(istype(A,/obj/structure/grille)) var/obj/structure/grille/G = A - G.take_damage(16) + G.take_damage(40, BRUTE, "melee", 0) /* @@ -216,6 +221,10 @@ item_color = "green" attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") block_chance = 75 + obj_integrity = 200 + max_integrity = 200 + armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 100, acid = 70) + resistance_flags = FIRE_PROOF var/hacked = 0 /obj/item/weapon/twohanded/dualsaber/New() @@ -265,7 +274,7 @@ return ..() return 0 -/obj/item/weapon/twohanded/dualsaber/attack_hulk(mob/living/carbon/human/user) //In case thats just so happens that it is still activated on the groud, prevents hulk from picking it up +/obj/item/weapon/twohanded/dualsaber/attack_hulk(mob/living/carbon/human/user, does_attack_animation = 0) //In case thats just so happens that it is still activated on the groud, prevents hulk from picking it up if(wielded) user << "You can't pick up such dangerous item with your meaty hands without losing fingers, better not to!" return 1 @@ -350,6 +359,9 @@ hitsound = 'sound/weapons/bladeslice.ogg' attack_verb = list("attacked", "poked", "jabbed", "torn", "gored") sharpness = IS_SHARP + obj_integrity = 200 + max_integrity = 200 + armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 50, acid = 30) var/obj/item/weapon/grenade/explosive = null var/war_cry = "AAAAARGH!!!" @@ -494,6 +506,10 @@ attack_verb = list("attacked", "impaled", "pierced") hitsound = 'sound/weapons/bladeslice.ogg' sharpness = IS_SHARP + obj_integrity = 200 + max_integrity = 200 + armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 100, acid = 30) + resistance_flags = FIRE_PROOF /obj/item/weapon/twohanded/pitchfork/demonic name = "demonic pitchfork" diff --git a/code/game/objects/items/weapons/vending_items.dm b/code/game/objects/items/weapons/vending_items.dm index 29b76b0a746..eaf89e512e8 100644 --- a/code/game/objects/items/weapons/vending_items.dm +++ b/code/game/objects/items/weapons/vending_items.dm @@ -11,7 +11,7 @@ throw_speed = 1 throw_range = 7 w_class = 4 - + armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 70, acid = 30) var/charges = list(0, 0, 0) //how many restocking "charges" the refill has for standard/contraband/coin products var/init_charges = list(0, 0, 0) diff --git a/code/game/objects/items/weapons/weaponry.dm b/code/game/objects/items/weapons/weaponry.dm index f5b4175f753..06c1518d179 100644 --- a/code/game/objects/items/weapons/weaponry.dm +++ b/code/game/objects/items/weapons/weaponry.dm @@ -34,6 +34,10 @@ throw_speed = 3 throw_range = 7 attack_verb = list("banned") + obj_integrity = 200 + max_integrity = 200 + armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 100, acid = 70) + resistance_flags = FIRE_PROOF /obj/item/weapon/banhammer/suicide_act(mob/user) user.visible_message("[user] is hitting \himself with the [src.name]! It looks like \he's trying to ban \himself from life.") @@ -74,6 +78,10 @@ attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") block_chance = 50 sharpness = IS_SHARP + obj_integrity = 200 + max_integrity = 200 + armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 100, acid = 50) + resistance_flags = FIRE_PROOF /obj/item/weapon/claymore/suicide_act(mob/user) user.visible_message("[user] is falling on the [src.name]! It looks like \he's trying to commit suicide.") @@ -245,6 +253,10 @@ var/highlander_claymores = 0 attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") block_chance = 50 sharpness = IS_SHARP + obj_integrity = 200 + max_integrity = 200 + armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 100, acid = 50) + resistance_flags = FIRE_PROOF /obj/item/weapon/katana/cursed slot_flags = null @@ -307,6 +319,7 @@ var/highlander_claymores = 0 embedded_fall_chance = 0 //Hahaha! sharpness = IS_SHARP materials = list(MAT_METAL=500, MAT_GLASS=500) + resistance_flags = FIRE_PROOF /obj/item/weapon/switchblade @@ -323,6 +336,7 @@ var/highlander_claymores = 0 origin_tech = "engineering=3;combat=2" hitsound = 'sound/weapons/Genhit.ogg' attack_verb = list("stubbed", "poked") + resistance_flags = FIRE_PROOF var/extended = 0 /obj/item/weapon/switchblade/attack_self(mob/user) @@ -393,14 +407,14 @@ var/highlander_claymores = 0 w_class = 2 armour_penetration = 100 attack_verb = list("bludgeoned", "whacked", "disciplined") - resistance_flags = 0 + resistance_flags = FLAMMABLE /obj/item/weapon/staff/broom name = "broom" desc = "Used for sweeping, and flying into the night while cackling. Black cat not included." icon = 'icons/obj/wizard.dmi' icon_state = "broom" - resistance_flags = 0 + resistance_flags = FLAMMABLE /obj/item/weapon/staff/stick name = "stick" diff --git a/code/game/objects/obj_defense.dm b/code/game/objects/obj_defense.dm new file mode 100644 index 00000000000..b60057a63c6 --- /dev/null +++ b/code/game/objects/obj_defense.dm @@ -0,0 +1,236 @@ + +//the essential proc to call when an obj must receive damage of any kind. +/obj/proc/take_damage(damage_amount, damage_type = BRUTE, damage_flag = 0, sound_effect = 1, attack_dir) + if(sound_effect) + play_attack_sound(damage_amount, damage_type, damage_flag) + if(!(resistance_flags & INDESTRUCTIBLE) && obj_integrity > 0) + damage_amount = run_obj_armor(damage_amount, damage_type, damage_flag, attack_dir) + if(damage_amount >= 1) + . = damage_amount + obj_integrity = max(obj_integrity - damage_amount, 0) + if(obj_integrity <= 0) + obj_destruction(damage_flag) + else if(integrity_failure) + if(obj_integrity <= integrity_failure) + obj_break(damage_flag) + +//returns the damage value of the attack after processing the obj's various armor protections +/obj/proc/run_obj_armor(damage_amount, damage_type, damage_flag = 0, attack_dir) + switch(damage_type) + if(BRUTE) + if(BURN) + else + return 0 + var/armor_protection = 0 + if(damage_flag) + armor_protection = armor[damage_flag] + return round(damage_amount * (100 - armor_protection)*0.01, 0.1) + +//the sound played when the obj is damaged. +/obj/proc/play_attack_sound(damage_amount, damage_type = BRUTE, damage_flag = 0) + switch(damage_type) + if(BRUTE) + if(damage_amount) + playsound(src, 'sound/weapons/smash.ogg', 50, 1) + else + playsound(src, 'sound/weapons/tap.ogg', 50, 1) + if(BURN) + playsound(src.loc, 'sound/items/Welder.ogg', 100, 1) + +/obj/hitby(atom/movable/AM) + ..() + var/tforce = 0 + if(ismob(AM)) + tforce = 10 + else if(isobj(AM)) + var/obj/O = AM + tforce = O.throwforce + take_damage(tforce, BRUTE, "melee", 1, get_dir(src, AM)) + +/obj/ex_act(severity, target) + ..() //contents explosion + if(target == src) + qdel(src) + return + switch(severity) + if(1) + qdel(src) + if(2) + take_damage(rand(100, 250), BRUTE, "bomb", 0) + if(3) + take_damage(rand(10, 90), BRUTE, "bomb", 0) + +/obj/bullet_act(obj/item/projectile/P) + . = ..() + visible_message("[src] is hit by \a [P]!") + playsound(src, P.hitsound, 50, 1) + take_damage(P.damage, P.damage_type, P.flag, 0, turn(P.dir, 180)) + + +/obj/attack_hulk(mob/living/carbon/human/user, does_attack_animation = 0) + if(user.a_intent == "harm") + ..(user, 1) + visible_message("[user] smashes [src]!") + if(density) + playsound(src, 'sound/effects/meteorimpact.ogg', 100, 1) + user.say(pick(";RAAAAAAAARGH!", ";HNNNNNNNNNGGGGGGH!", ";GWAAAAAAAARRRHHH!", "NNNNNNNNGGGGGGGGHH!", ";AAAAAAARRRGH!" )) + else + playsound(src, 'sound/effects/bang.ogg', 50, 1) + take_damage(150, BRUTE, "melee", 0, get_dir(src, user)) + return 1 + return 0 + +/obj/blob_act(obj/structure/blob/B) + take_damage(400, BRUTE, "melee", 0, get_dir(src, B)) + +/obj/proc/attack_generic(mob/user, damage_amount = 0, damage_type = BRUTE, damage_flag = 0, sound_effect = 1) //used by attack_alien, attack_animal, and attack_slime + user.do_attack_animation(src) + user.changeNext_move(CLICK_CD_MELEE) + user.visible_message("[user] smashes into [src]!") + take_damage(damage_amount, damage_type, damage_flag, sound_effect, get_dir(src, user)) + +/obj/attack_alien(mob/living/carbon/alien/humanoid/user) + playsound(src.loc, 'sound/weapons/slash.ogg', 100, 1) + attack_generic(user, 60, BRUTE, "melee", 0) + +/obj/attack_animal(mob/living/simple_animal/M) + if(!M.melee_damage_upper && !M.obj_damage) + M.emote("[M.friendly] [src]") + return 0 + else + var/play_soundeffect = 1 + if(M.environment_smash) + play_soundeffect = 0 + playsound(src, 'sound/effects/meteorimpact.ogg', 100, 1) + if(M.obj_damage) + attack_generic(M, M.obj_damage, M.melee_damage_type, "melee", play_soundeffect) + else + attack_generic(M, rand(M.melee_damage_lower,M.melee_damage_upper), M.melee_damage_type, "melee", play_soundeffect) + return 1 + +/obj/attack_slime(mob/living/simple_animal/slime/user) + if(!user.is_adult) + return + attack_generic(user, rand(10, 15), "melee", 1) + +/obj/mech_melee_attack(obj/mecha/M) + M.do_attack_animation(src) + switch(damtype) + if(BRUTE) + playsound(src, 'sound/weapons/punch4.ogg', 50, 1) + if(BURN) + playsound(src, 'sound/items/Welder.ogg', 50, 1) + else + return 0 + visible_message("[M.name] has hit [src].") + return take_damage(M.force*3, M.damtype, "melee", 0, get_dir(src, M)) // multiplied by 3 so we can hit objs hard but not be overpowered against mobs. + +/obj/singularity_act() + ex_act(1) + if(src && !qdeleted(src)) + qdel(src) + return 2 + + +///// ACID + +var/global/image/acid_overlay = image("icon" = 'icons/effects/effects.dmi', "icon_state" = "acid") + +//the obj's reaction when touched by acid +/obj/acid_act(acidpwr, acid_volume) + if(!(resistance_flags & UNACIDABLE) && acid_volume) + + if(!acid_level) + SSacid.processing[src] = src + add_overlay(acid_overlay, 1) + var/acid_cap = acidpwr * 300 //so we cannot use huge amounts of weak acids to do as well as strong acids. + if(acid_level < acid_cap) + acid_level = min(acid_level + acidpwr * acid_volume, acid_cap) + return 1 + +//the proc called by the acid subsystem to process the acid that's on the obj +/obj/proc/acid_processing() + . = 1 + if(!(resistance_flags & ACID_PROOF)) + for(var/armour_value in armor) + if(armour_value != "acid" && armour_value != "fire") + armor[armour_value] = max(armor[armour_value] - round(sqrt(acid_level)*0.1), 0) + if(prob(33)) + playsound(loc, 'sound/items/Welder.ogg', 150, 1) + take_damage(min(1 + round(sqrt(acid_level)*0.3), 300), BURN, "acid", 0) + + acid_level = max(acid_level - (5 + 3*round(sqrt(acid_level))), 0) + if(!acid_level) + return 0 + +//called when the obj is destroyed by acid. +/obj/proc/acid_melt() + var/location = loc + SSacid.processing -= src + var/remaining_acid = acid_level + var/list/contained = contents + deconstruct(FALSE) + if(isturf(location)) + var/turf/T = location + for(var/obj/item/I in contained) + if(I.loc == T) //we acid the items that used to be inside src and ended up on the turf + I.acid_act(10, 0.1 * remaining_acid/T.contents.len) + + +//// FIRE + +/obj/fire_act(exposed_temperature, exposed_volume) + if(exposed_temperature && !(resistance_flags & FIRE_PROOF)) + take_damage(Clamp(0.02 * exposed_temperature, 0, 20), BURN, "fire", 0) + if(!(resistance_flags & ON_FIRE) && (resistance_flags & FLAMMABLE)) + resistance_flags |= ON_FIRE + SSfire_burning.processing[src] = src + add_overlay(fire_overlay) + return 1 + +//called when the obj is destroyed by fire +/obj/proc/burn() + var/location = loc + var/list/contained = contents + if(resistance_flags & ON_FIRE) + SSfire_burning.processing -= src + deconstruct(FALSE) + if(isturf(location)) + var/turf/T = location + for(var/obj/item/I in contained) + if(I.loc == T) //we burn the items that used to be inside src and ended up on the turf + I.fire_act() + +/obj/proc/extinguish() + if(resistance_flags & ON_FIRE) + resistance_flags &= ~ON_FIRE + overlays -= fire_overlay + SSfire_burning.processing -= src + + + +/obj/proc/tesla_act(var/power) + being_shocked = 1 + var/power_bounced = power / 2 + tesla_zap(src, 3, power_bounced) + addtimer(src, "reset_shocked", 10) + +/obj/proc/reset_shocked() + being_shocked = 0 + +//the obj is deconstructed into pieces, whether through careful disassembly or when destroyed. +/obj/proc/deconstruct(disassembled = TRUE) + qdel(src) + +//what happens when the obj's health is below integrity_failure level. +/obj/proc/obj_break(damage_flag) + return + +//what happens when the obj's integrity reaches zero. +/obj/proc/obj_destruction(damage_flag) + if(damage_flag == "acid") + acid_melt() + else if(damage_flag == "fire") + burn() + else + deconstruct(FALSE) \ No newline at end of file diff --git a/code/game/objects/objs.dm b/code/game/objects/objs.dm index 6603dfd6926..ddc903ef8f0 100644 --- a/code/game/objects/objs.dm +++ b/code/game/objects/objs.dm @@ -9,11 +9,15 @@ var/damtype = "brute" var/force = 0 - var/list/armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0, fire = 0, acid = 0) - var/resistance_flags = FIRE_PROOF // INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ON_FIRE | UNACIDABLE | ACID_PROOF + var/list/armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 0, acid = 0) + var/obj_integrity = 500 + var/max_integrity = 500 + var/integrity_failure = 0 //0 if we have no special broken behavior + + var/resistance_flags = 0 // INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ON_FIRE | UNACIDABLE | ACID_PROOF + + var/acid_level = 0 //how much acid is on that obj - var/burntime = 10 //How long it takes to burn to ashes, in seconds - var/burn_world_time //What world time the object will burn up completely var/being_shocked = 0 var/on_blueprints = FALSE //Are we visible on the station blueprints at roundstart? @@ -21,6 +25,8 @@ var/persistence_replacement = null //have something WAY too amazing to live to the next round? Set a new path here. Overuse of this var will make me upset. var/is_frozen = FALSE + + /obj/New() ..() @@ -153,15 +159,6 @@ /obj/proc/hide(h) return -/obj/ex_act(severity, target) - if(severity == 1 || target == src) - qdel(src) - else if(severity == 2) - if(prob(50)) - qdel(src) - if(!qdeleted(src)) - ..() - //If a mob logouts/logins in side of an object you can use this proc /obj/proc/on_log() ..() @@ -169,19 +166,11 @@ var/obj/Loc=loc Loc.on_log() -/obj/singularity_act() - ex_act(1) - if(src && !qdeleted(src)) - qdel(src) - return 2 /obj/singularity_pull(S, current_size) if(!anchored || current_size >= STAGE_FIVE) step_towards(src,S) -/obj/proc/Deconstruct() - qdel(src) - /obj/get_spans() return ..() | SPAN_ROBOT @@ -189,43 +178,6 @@ var/turf/T = get_turf(src) return T.storage_contents_dump_act(src_object, user) -/obj/fire_act(global_overlay=1) - if(!(resistance_flags & (FIRE_PROOF|ON_FIRE))) - resistance_flags |= ON_FIRE - SSobj.burning += src - burn_world_time = world.time + burntime*rand(10,20) - if(global_overlay) - add_overlay(fire_overlay) - return 1 - -/obj/proc/burn() - empty_object_contents(1, src.loc) - var/obj/effect/decal/cleanable/ash/A = new(src.loc) - A.desc = "Looks like this used to be a [name] some time ago." - SSobj.burning -= src - qdel(src) - -/obj/proc/extinguish() - if(resistance_flags & ON_FIRE) - resistance_flags &= ~ON_FIRE - overlays -= fire_overlay - SSobj.burning -= src - -/obj/proc/empty_object_contents(burn = 0, new_loc = src.loc) - for(var/obj/item/Item in contents) //Empty out the contents - Item.loc = new_loc - if(burn) - Item.fire_act() //Set them on fire, too - -/obj/proc/tesla_act(power, explosive = FALSE) - being_shocked = 1 - var/power_bounced = power / 2 - tesla_zap(src, 3, power_bounced, explosive) - addtimer(src, "reset_shocked", 10) - -/obj/proc/reset_shocked() - being_shocked = 0 - /obj/proc/CanAStarPass() . = !density diff --git a/code/game/objects/structures.dm b/code/game/objects/structures.dm index d162b55b7c5..2cf309254a0 100644 --- a/code/game/objects/structures.dm +++ b/code/game/objects/structures.dm @@ -1,10 +1,14 @@ /obj/structure icon = 'icons/obj/structures.dmi' pressure_resistance = 8 + armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 50, acid = 50) + obj_integrity = 300 + max_integrity = 300 var/climb_time = 20 var/climb_stun = 2 var/climbable = FALSE var/mob/structureclimber + var/broken = 0 //similar to machinery's stat BROKEN /obj/structure/New() ..() @@ -15,10 +19,6 @@ if(ticker) cameranet.updateVisibility(src) -/obj/structure/blob_act(obj/structure/blob/B) - if(density && prob(50)) - qdel(src) - /obj/structure/Destroy() if(ticker) cameranet.updateVisibility(src) @@ -28,13 +28,6 @@ queue_smooth_neighbors(src) return ..() -/obj/structure/mech_melee_attack(obj/mecha/M) - M.do_attack_animation(src) - if(M.damtype == BRUTE || M.damtype == BURN) - visible_message("[M.name] has hit [src].") - return 1 - return 0 - /obj/structure/attack_hand(mob/user) . = ..() add_fingerprint(user) @@ -52,10 +45,6 @@ ..() add_fingerprint(usr) -/obj/structure/proc/deconstruct(forced = FALSE) - qdel(src) - - /obj/structure/MouseDrop_T(atom/movable/O, mob/user) . = ..() if(!climbable) @@ -97,3 +86,21 @@ user << "You fail to climb onto [src]." density = 1 structureclimber = null + +/obj/structure/examine(mob/user) + ..() + if(!(resistance_flags & INDESTRUCTIBLE)) + if(resistance_flags & ON_FIRE) + user << "It's on fire!" + var/healthpercent = (obj_integrity/max_integrity) * 100 + if(broken) + user << "It looks broken." + switch(healthpercent) + if(100 to INFINITY) + user << "It seems pristine and undamaged." + if(50 to 100) + user << "It looks slightly damaged." + if(25 to 50) + user << "It appears heavily damaged." + if(0 to 25) + user << "It's falling apart!" \ No newline at end of file diff --git a/code/game/objects/structures/ai_core.dm b/code/game/objects/structures/ai_core.dm index e1bcccebac1..79be989d0d6 100644 --- a/code/game/objects/structures/ai_core.dm +++ b/code/game/objects/structures/ai_core.dm @@ -4,6 +4,8 @@ name = "\improper AI core" icon = 'icons/mob/AI.dmi' icon_state = "0" + obj_integrity = 500 + max_integrity = 500 var/state = 0 var/datum/ai_laws/laws = new() var/obj/item/weapon/circuitboard/circuit = null @@ -13,6 +15,15 @@ ..() laws.set_laws_config() +/obj/structure/AIcore/Destroy() + if(circuit) + qdel(circuit) + circuit = null + if(brain) + brain.forceMove(loc) + brain = null + return ..() + /obj/structure/AIcore/attackby(obj/item/P, mob/user, params) switch(state) if(0) @@ -99,8 +110,7 @@ user << "You remove the cables." state = 2 icon_state = "2" - var/obj/item/stack/cable_coil/A = new /obj/item/stack/cable_coil( loc ) - A.amount = 5 + new /obj/item/stack/cable_coil(loc, 5) return if(istype(P, /obj/item/stack/sheet/rglass)) @@ -166,7 +176,7 @@ if(istype(P, /obj/item/weapon/crowbar) && brain) playsound(loc, 'sound/items/Crowbar.ogg', 50, 1) user << "You remove the brain." - brain.loc = loc + brain.forceMove(loc) brain = null icon_state = "3" return @@ -192,6 +202,18 @@ return return ..() + +/obj/structure/AIcore/deconstruct(disassembled = TRUE) + if(state == 4) + new /obj/item/stack/sheet/rglass(loc, 2) + if(state >= 3) + new /obj/item/stack/cable_coil(loc, 5) + if(circuit) + circuit.forceMove(loc) + circuit = null + new /obj/item/stack/sheet/plasteel( loc, 4) + qdel(src) + /obj/structure/AIcore/deactivated name = "inactive AI" icon = 'icons/mob/AI.dmi' diff --git a/code/game/objects/structures/aliens.dm b/code/game/objects/structures/aliens.dm index 0c8f5237e05..27167d31012 100644 --- a/code/game/objects/structures/aliens.dm +++ b/code/game/objects/structures/aliens.dm @@ -9,40 +9,28 @@ /obj/structure/alien icon = 'icons/mob/alien.dmi' - var/health = 100 + obj_integrity = 100 + max_integrity = 100 -/obj/structure/alien/attacked_by(obj/item/I, mob/user) - ..() - var/damage = I.force - switch(I.damtype) - if(BRUTE) - damage *= 0.25 - if(BURN) - damage *= 2 - else - damage = 0 //stamina damage does no damage - take_damage(damage, I.damtype) +/obj/structure/alien/run_obj_armor(damage_amount, damage_type, damage_flag = 0, attack_dir) + if(damage_flag == "melee") + switch(damage_type) + if(BRUTE) + damage_amount *= 0.25 + if(BURN) + damage_amount *= 2 + . = ..() -/obj/structure/alien/proc/take_damage(amount, damage_type = BRUTE, sound_effect = 1) +/obj/structure/alien/play_attack_sound(damage_amount, damage_type = BRUTE, damage_flag = 0) switch(damage_type) if(BRUTE) - if(sound_effect) + if(damage_amount) playsound(loc, 'sound/effects/attackblob.ogg', 100, 1) + else + playsound(src, 'sound/weapons/tap.ogg', 50, 1) if(BURN) - if(sound_effect) + if(damage_amount) playsound(loc, 'sound/items/Welder.ogg', 100, 1) - else - return - health = max(health - amount, 0) - if(!health) - Break() - -/obj/structure/alien/proc/Break() - qdel(src) - -/obj/structure/alien/bullet_act(obj/item/projectile/P) - . = ..() - take_damage(P.damage, P.damage_type) /* * Generic alien stuff, not related to the purple lizards but still alien-like @@ -54,8 +42,9 @@ icon = 'icons/obj/fluff.dmi' icon_state = "gelmound" -/obj/structure/alien/gelpod/Break() - new/obj/effect/mob_spawn/human/corpse/damaged(get_turf(src)) +/obj/structure/alien/gelpod/deconstruct(disassembled = TRUE) + if(!(flags & NODECONSTRUCT)) + new/obj/effect/mob_spawn/human/corpse/damaged(get_turf(src)) qdel(src) /* @@ -70,7 +59,8 @@ opacity = 1 anchored = 1 canSmoothWith = list(/obj/structure/alien/resin) - health = 200 + obj_integrity = 200 + max_integrity = 200 smooth = SMOOTH_TRUE var/resintype = null @@ -106,37 +96,11 @@ icon = 'icons/obj/smooth_structures/alien/resin_membrane.dmi' icon_state = "membrane0" opacity = 0 - health = 160 + obj_integrity = 160 + max_integrity = 160 resintype = "membrane" canSmoothWith = list(/obj/structure/alien/resin/wall, /obj/structure/alien/resin/membrane) -/obj/structure/alien/resin/ex_act(severity, target) - switch(severity) - if(1) - take_damage(150, BRUTE, 0) - if(2) - take_damage(100, BRUTE, 0) - if(3) - take_damage(50, BRUTE, 0) - -/obj/structure/alien/blob_act(obj/structure/blob/B) - take_damage(50, BRUTE, 0) - -/obj/structure/alien/resin/hitby(atom/movable/AM) - ..() - var/tforce = 0 - if(!isobj(AM)) - tforce = 10 - else - var/obj/O = AM - tforce = O.throwforce - take_damage(tforce) - -/obj/structure/alien/resin/attack_hulk(mob/living/carbon/human/user) - ..(user, 1) - user.visible_message("[user] destroys [src]!") - take_damage(200) - /obj/structure/alien/resin/attack_paw(mob/user) return attack_hand(user) @@ -147,17 +111,6 @@ user.visible_message("[user] claws at the resin!") take_damage(50) -/obj/structure/alien/resin/attack_animal(mob/living/simple_animal/M) - M.changeNext_move(CLICK_CD_MELEE) - M.do_attack_animation(src) - if(!M.melee_damage_upper && !M.obj_damage) - return - visible_message("[M] [M.attacktext] [src]!") - if(M.obj_damage) - take_damage(M.obj_damage, M.melee_damage_type) - else - take_damage(rand(M.melee_damage_lower,M.melee_damage_upper), M.melee_damage_type) - /obj/structure/alien/resin/CanPass(atom/movable/mover, turf/target, height=0) return !density @@ -176,7 +129,8 @@ density = 0 layer = TURF_LAYER icon_state = "weeds" - health = 15 + obj_integrity = 15 + max_integrity = 15 var/obj/structure/alien/weeds/node/linked_node = null canSmoothWith = list(/obj/structure/alien/weeds, /turf/closed/wall) smooth = SMOOTH_MORE @@ -229,7 +183,7 @@ /obj/structure/alien/weeds/temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume) if(exposed_temperature > 300) - take_damage(5, BURN, 0) + take_damage(5, BURN, 0, 0) //Weed nodes @@ -266,7 +220,8 @@ icon_state = "egg_growing" density = 0 anchored = 1 - health = 100 + obj_integrity = 100 + max_integrity = 100 var/status = GROWING //can be GROWING, GROWN or BURST; all mutually exclusive layer = MOB_LAYER @@ -334,16 +289,18 @@ remove_from_proximity_list(src, 1) ..() -/obj/structure/alien/egg/Break() - if(status != BURST && status != BURSTING) - Burst() - else if(status == BURST) - qdel(src) //Remove the egg after it has been hit after bursting. - +/obj/structure/alien/egg/deconstruct() + if(!(flags & NODECONSTRUCT)) + if(status != BURST && status != BURSTING) + Burst() + else if(status == BURST) + qdel(src) //Remove the egg after it has been hit after bursting. + else + qdel(src) /obj/structure/alien/egg/temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume) if(exposed_temperature > 500) - take_damage(5, BURN, 0) + take_damage(5, BURN, 0, 0) /obj/structure/alien/egg/HasProximity(atom/movable/AM) diff --git a/code/game/objects/structures/artstuff.dm b/code/game/objects/structures/artstuff.dm index 53351dab39e..07e16b77988 100644 --- a/code/game/objects/structures/artstuff.dm +++ b/code/game/objects/structures/artstuff.dm @@ -9,8 +9,9 @@ icon = 'icons/obj/artstuff.dmi' icon_state = "easel" density = 1 - resistance_flags = 0 - burntime = 15 + resistance_flags = FLAMMABLE + obj_integrity = 60 + max_integrity = 60 var/obj/item/weapon/canvas/painting = null @@ -51,7 +52,7 @@ var/global/list/globalBlankCanvases[AMT_OF_CANVASES] desc = "draw out your soul on this canvas!" icon = 'icons/obj/artstuff.dmi' icon_state = "11x11" - resistance_flags = 0 + resistance_flags = FLAMMABLE var/whichGlobalBackup = 1 //List index /obj/item/weapon/canvas/nineteenXnineteen diff --git a/code/game/objects/structures/barsigns.dm b/code/game/objects/structures/barsigns.dm index 0a0e00016bc..1a80c9b782a 100644 --- a/code/game/objects/structures/barsigns.dm +++ b/code/game/objects/structures/barsigns.dm @@ -4,9 +4,12 @@ icon = 'icons/obj/barsigns.dmi' icon_state = "empty" req_access = list(access_bar) + obj_integrity = 500 + max_integrity = 500 + integrity_failure = 250 + armor = list(melee = 20, bullet = 20, laser = 20, energy = 100, bomb = 0, bio = 0, rad = 0, fire = 50, acid = 50) var/list/barsigns=list() var/list/hiddensigns - var/broken = 0 var/emagged = 0 var/state = 0 var/prev_sign = "" @@ -43,6 +46,22 @@ +/obj/structure/sign/barsign/obj_break(damage_flag) + if(!broken && !(flags & NODECONSTRUCT)) + broken = 1 + +/obj/structure/sign/barsign/deconstruct(disassembled = TRUE) + new /obj/item/stack/sheet/metal (loc, 2) + new /obj/item/stack/cable_coil (loc, 2) + qdel(src) + +/obj/structure/sign/barsign/play_attack_sound(damage_amount, damage_type = BRUTE, damage_flag = 0) + switch(damage_type) + if(BRUTE) + playsound(src.loc, 'sound/effects/Glasshit.ogg', 75, 1) + if(BURN) + playsound(src.loc, 'sound/items/Welder.ogg', 100, 1) + /obj/structure/sign/barsign/attack_ai(mob/user) return src.attack_hand(user) diff --git a/code/game/objects/structures/beds_chairs/alien_nest.dm b/code/game/objects/structures/beds_chairs/alien_nest.dm index 645551d494d..351ab2e2539 100644 --- a/code/game/objects/structures/beds_chairs/alien_nest.dm +++ b/code/game/objects/structures/beds_chairs/alien_nest.dm @@ -5,7 +5,8 @@ desc = "It's a gruesome pile of thick, sticky resin shaped like a nest." icon = 'icons/obj/smooth_structures/alien/nest.dmi' icon_state = "nest" - var/health = 100 + obj_integrity = 120 + max_integrity = 120 smooth = SMOOTH_TRUE can_be_unanchored = 0 canSmoothWith = null @@ -81,22 +82,10 @@ M.layer = initial(M.layer) overlays -= nest_overlay -/obj/structure/bed/nest/attacked_by(obj/item/I, mob/user) - ..() - take_damage(I.force, I.damtype) - -/obj/structure/bed/nest/proc/take_damage(damage, damage_type = BRUTE, sound_effect = 1) +/obj/structure/bed/nest/play_attack_sound(damage_amount, damage_type = BRUTE, damage_flag = 0) switch(damage_type) if(BRUTE) - if(sound_effect) - playsound(loc, 'sound/effects/attackblob.ogg', 100, 1) + playsound(loc, 'sound/effects/attackblob.ogg', 100, 1) if(BURN) - if(sound_effect) - playsound(loc, 'sound/items/Welder.ogg', 100, 1) - else - return - health -= damage - if(health <=0) - density = 0 - qdel(src) + playsound(loc, 'sound/items/Welder.ogg', 100, 1) diff --git a/code/game/objects/structures/beds_chairs/bed.dm b/code/game/objects/structures/beds_chairs/bed.dm index e77f9a7845e..b5110331b10 100644 --- a/code/game/objects/structures/beds_chairs/bed.dm +++ b/code/game/objects/structures/beds_chairs/bed.dm @@ -15,41 +15,26 @@ anchored = 1 can_buckle = 1 buckle_lying = 1 - resistance_flags = 0 - burntime = 30 + resistance_flags = FLAMMABLE + obj_integrity = 100 + max_integrity = 100 + integrity_failure = 30 var/buildstacktype = /obj/item/stack/sheet/metal var/buildstackamount = 2 -/obj/structure/bed/deconstruct() - if(buildstacktype) - new buildstacktype(loc,buildstackamount) +/obj/structure/bed/deconstruct(disassembled = TRUE) + if(!(flags & NODECONSTRUCT)) + if(buildstacktype) + new buildstacktype(loc,buildstackamount) ..() /obj/structure/bed/attack_paw(mob/user) return attack_hand(user) -/obj/structure/bed/attack_animal(mob/living/simple_animal/M)//No more buckling hostile mobs to chairs to render them immobile forever - if(M.environment_smash) - deconstruct() - -/obj/structure/bed/ex_act(severity, target) - switch(severity) - if(1) - qdel(src) - return - if(2) - if(prob(70)) - deconstruct() - return - if(3) - if(prob(50)) - deconstruct() - return - /obj/structure/bed/attackby(obj/item/weapon/W, mob/user, params) if(istype(W, /obj/item/weapon/wrench) && !(flags&NODECONSTRUCT)) playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) - deconstruct() + deconstruct(TRUE) else return ..() @@ -61,7 +46,7 @@ icon = 'icons/obj/rollerbed.dmi' icon_state = "down" anchored = 0 - resistance_flags = FIRE_PROOF + resistance_flags = 0 var/foldabletype = /obj/item/roller /obj/structure/bed/roller/MouseDrop(over_object, src_location, over_location) diff --git a/code/game/objects/structures/beds_chairs/chair.dm b/code/game/objects/structures/beds_chairs/chair.dm index 65e2d09eac2..6494225fedc 100644 --- a/code/game/objects/structures/beds_chairs/chair.dm +++ b/code/game/objects/structures/beds_chairs/chair.dm @@ -6,7 +6,10 @@ anchored = 1 can_buckle = 1 buckle_lying = 0 //you sit in a chair, not lay - resistance_flags = FIRE_PROOF + resistance_flags = 0 + obj_integrity = 250 + max_integrity = 250 + integrity_failure = 25 var/buildstacktype = /obj/item/stack/sheet/metal var/buildstackamount = 1 var/item_chair = /obj/item/chair // if null it can't be picked up @@ -24,21 +27,6 @@ /obj/structure/chair/attack_paw(mob/user) return attack_hand(user) -/obj/structure/chair/attack_animal(mob/living/simple_animal/M)//No more buckling hostile mobs to chairs to render them immobile forever - if(M.environment_smash) - deconstruct() - -/obj/structure/chair/ex_act(severity, target) - switch(severity) - if(1) - qdel(src) - if(2) - if(prob(70)) - deconstruct() - if(3) - if(prob(50)) - deconstruct() - /obj/structure/chair/narsie_act() if(prob(20)) var/obj/structure/chair/wood/W = new/obj/structure/chair/wood(get_turf(src)) @@ -118,8 +106,9 @@ icon_state = "wooden_chair" name = "wooden chair" desc = "Old is never too old to not be in fashion." - resistance_flags = 0 - burntime = 20 + resistance_flags = FLAMMABLE + obj_integrity = 70 + max_integrity = 70 buildstacktype = /obj/item/stack/sheet/mineral/wood buildstackamount = 3 item_chair = /obj/item/chair/wood @@ -139,8 +128,9 @@ desc = "It looks comfy.\nAlt-click to rotate it clockwise." icon_state = "comfychair" color = rgb(255,255,255) - resistance_flags = 0 - burntime = 30 + resistance_flags = FLAMMABLE + obj_integrity = 70 + max_integrity = 70 buildstackamount = 2 var/image/armrest = null item_chair = null @@ -308,8 +298,9 @@ name = "wooden chair" icon_state = "wooden_chair_toppled" item_state = "woodenchair" - resistance_flags = 0 - burntime = 20 + resistance_flags = FLAMMABLE + obj_integrity = 70 + max_integrity = 70 hitsound = 'sound/weapons/genhit1.ogg' origin_type = /obj/structure/chair/wood break_chance = 50 diff --git a/code/game/objects/structures/bedsheet_bin.dm b/code/game/objects/structures/bedsheet_bin.dm index 9bbe254094f..74687887a76 100644 --- a/code/game/objects/structures/bedsheet_bin.dm +++ b/code/game/objects/structures/bedsheet_bin.dm @@ -17,7 +17,7 @@ LINEN BINS throw_range = 2 w_class = 1 item_color = "white" - resistance_flags = 0 + resistance_flags = FLAMMABLE dog_fashion = /datum/dog_fashion/head/ghost @@ -205,8 +205,9 @@ LINEN BINS icon = 'icons/obj/structures.dmi' icon_state = "linenbin-full" anchored = 1 - resistance_flags = 0 - burntime = 20 + resistance_flags = FLAMMABLE + obj_integrity = 70 + max_integrity = 70 var/amount = 10 var/list/sheets = list() var/obj/item/hidden = null @@ -231,17 +232,12 @@ LINEN BINS else icon_state = "linenbin-full" -/obj/structure/bedsheetbin/fire_act() - if(!amount) - return +/obj/structure/bedsheetbin/fire_act(exposed_temperature, exposed_volume) + if(amount) + amount = 0 + update_icon() ..() -/obj/structure/bedsheetbin/burn() - amount = 0 - extinguish() - update_icon() - return - /obj/structure/bedsheetbin/attackby(obj/item/I, mob/user, params) if(istype(I, /obj/item/weapon/bedsheet)) if(!user.drop_item()) diff --git a/code/game/objects/structures/crates_lockers/closets.dm b/code/game/objects/structures/crates_lockers/closets.dm index 72889a0a672..167cc876486 100644 --- a/code/game/objects/structures/crates_lockers/closets.dm +++ b/code/game/objects/structures/crates_lockers/closets.dm @@ -10,10 +10,12 @@ var/opened = FALSE var/welded = FALSE var/locked = FALSE - var/broken = FALSE var/large = TRUE var/wall_mounted = 0 //never solid (You can always pass over it) - var/health = 100 + obj_integrity = 200 + max_integrity = 200 + integrity_failure = 50 + armor = list(melee = 20, bullet = 10, laser = 10, energy = 0, bomb = 10, bio = 0, rad = 0, fire = 70, acid = 60) var/breakout_time = 2 var/lastbang var/can_weld_shut = TRUE @@ -188,25 +190,14 @@ else return open(user) -/obj/structure/closet/ex_act(severity, target) - contents_explosion(severity, target) - if(loc && ispath(material_drop) && !(flags & NODECONSTRUCT)) +/obj/structure/closet/deconstruct(disassembled = TRUE) + if(ispath(material_drop) && !(flags & NODECONSTRUCT)) new material_drop(loc) qdel(src) - ..() -/obj/structure/closet/bullet_act(obj/item/projectile/P) - ..() - if(P.damage_type == BRUTE || P.damage_type == BURN) - health -= P.damage - if(health <= 0) - qdel(src) - -/obj/structure/closet/attack_animal(mob/living/simple_animal/user) - if(user.environment_smash) - user.do_attack_animation(src) - visible_message("[user] destroys \the [src].") - qdel(src) +/obj/structure/closet/obj_break(damage_flag) + if(!broken && !(flags & NODECONSTRUCT)) + bust_open() /obj/structure/closet/attackby(obj/item/weapon/W, mob/user, params) if(user in src) @@ -226,9 +217,7 @@ visible_message("[user] slices apart \the [src].", "You cut \the [src] apart with \the [WT].", "You hear welding.") - var/turf/T = get_turf(src) - new material_drop(T) - qdel(src) + deconstruct(TRUE) return 0 else if(user.drop_item()) W.forceMove(loc) @@ -367,16 +356,19 @@ if(!user || user.stat != CONSCIOUS || user.loc != src || opened || (!locked && !welded) ) return //we check after a while whether there is a point of resisting anymore and whether the user is capable of resisting - welded = 0 //applies to all lockers lockers - locked = 0 //applies to critter crates and secure lockers only - broken = 1 //applies to secure lockers only user.visible_message("[user] successfully broke out of [src]!", "You successfully break out of [src]!") - open() + bust_open() else if(user.loc == src) //so we don't get the message if we resisted multiple times and succeeded. user << "You fail to break out of [src]!" +/obj/structure/closet/proc/bust_open() + welded = 0 //applies to all lockers lockers + locked = 0 //applies to critter crates and secure lockers only + broken = 1 //applies to secure lockers only + open() + /obj/structure/closet/AltClick(mob/user) ..() if(!user.canUseTopic(src, be_close=TRUE)) diff --git a/code/game/objects/structures/crates_lockers/closets/cardboardbox.dm b/code/game/objects/structures/crates_lockers/closets/cardboardbox.dm index 80f9282f457..f0f690d843c 100644 --- a/code/game/objects/structures/crates_lockers/closets/cardboardbox.dm +++ b/code/game/objects/structures/crates_lockers/closets/cardboardbox.dm @@ -2,10 +2,10 @@ name = "large cardboard box" desc = "Just a box..." icon_state = "cardboard" - health = 10 mob_storage_capacity = 1 - resistance_flags = 0 - burntime = 20 + resistance_flags = FLAMMABLE + obj_integrity = 70 + max_integrity = 70 can_weld_shut = 0 cutting_tool = /obj/item/weapon/wirecutters open_sound = 'sound/effects/rustle2.ogg' @@ -59,9 +59,9 @@ name = "large metal box" desc = "THE COWARDS! THE FOOLS!" icon_state = "metalbox" - health = 500 + obj_integrity = 500 mob_storage_capacity = 5 - resistance_flags = FIRE_PROOF + resistance_flags = 0 move_speed_multiplier = 2 cutting_tool = /obj/item/weapon/weldingtool open_sound = 'sound/machines/click.ogg' diff --git a/code/game/objects/structures/crates_lockers/closets/gimmick.dm b/code/game/objects/structures/crates_lockers/closets/gimmick.dm index 3d9a7a36790..72a4c988a4c 100644 --- a/code/game/objects/structures/crates_lockers/closets/gimmick.dm +++ b/code/game/objects/structures/crates_lockers/closets/gimmick.dm @@ -2,8 +2,9 @@ name = "cabinet" desc = "Old will forever be in fashion." icon_state = "cabinet" - resistance_flags = 0 - burntime = 20 + resistance_flags = FLAMMABLE + obj_integrity = 70 + max_integrity = 70 /obj/structure/closet/acloset name = "strange closet" diff --git a/code/game/objects/structures/crates_lockers/closets/job_closets.dm b/code/game/objects/structures/crates_lockers/closets/job_closets.dm index bcfc691703a..47c168cd1ec 100644 --- a/code/game/objects/structures/crates_lockers/closets/job_closets.dm +++ b/code/game/objects/structures/crates_lockers/closets/job_closets.dm @@ -121,8 +121,9 @@ name = "coffin" desc = "It's a burial receptacle for the dearly departed." icon_state = "coffin" - resistance_flags = 0 - burntime = 20 + resistance_flags = FLAMMABLE + obj_integrity = 70 + max_integrity = 70 /obj/structure/closet/wardrobe/red name = "security wardrobe" diff --git a/code/game/objects/structures/crates_lockers/closets/secure/bar.dm b/code/game/objects/structures/crates_lockers/closets/secure/bar.dm index 59a88859d99..ec8952b8524 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/bar.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/bar.dm @@ -2,8 +2,9 @@ name = "booze storage" req_access = list(access_bar) icon_state = "cabinet" - resistance_flags = 0 - burntime = 20 + resistance_flags = FLAMMABLE + obj_integrity = 70 + max_integrity = 70 /obj/structure/closet/secure_closet/bar/New() ..() diff --git a/code/game/objects/structures/crates_lockers/closets/secure/personal.dm b/code/game/objects/structures/crates_lockers/closets/secure/personal.dm index 22773137de4..6625bc6a2ee 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/personal.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/personal.dm @@ -25,8 +25,9 @@ /obj/structure/closet/secure_closet/personal/cabinet icon_state = "cabinet" - resistance_flags = 0 - burntime = 20 + resistance_flags = FLAMMABLE + obj_integrity = 70 + max_integrity = 70 /obj/structure/closet/secure_closet/personal/cabinet/New() ..() diff --git a/code/game/objects/structures/crates_lockers/closets/secure/secure_closets.dm b/code/game/objects/structures/crates_lockers/closets/secure/secure_closets.dm index 6b16c70b7ba..b1c1e889a50 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/secure_closets.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/secure_closets.dm @@ -3,5 +3,12 @@ desc = "It's a card-locked storage unit." locked = 1 icon_state = "secure" - health = 200 + obj_integrity = 250 + max_integrity = 250 + armor = list(melee = 30, bullet = 50, laser = 50, energy = 100, bomb = 0, bio = 0, rad = 0, fire = 80, acid = 80) secure = 1 + +/obj/structure/closet/secure_closet/run_obj_armor(damage_amount, damage_type, damage_flag = 0, attack_dir) + if(damage_flag == "melee" && damage_amount < 20) + return 0 + . = ..() \ No newline at end of file diff --git a/code/game/objects/structures/crates_lockers/closets/secure/security.dm b/code/game/objects/structures/crates_lockers/closets/secure/security.dm index 785aeaacdc3..8b1219c0f44 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/security.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/security.dm @@ -157,8 +157,9 @@ name = "\proper detective's cabinet" req_access = list(access_forensics_lockers) icon_state = "cabinet" - resistance_flags = 0 - burntime = 20 + resistance_flags = FLAMMABLE + obj_integrity = 70 + max_integrity = 70 /obj/structure/closet/secure_closet/detective/New() ..() diff --git a/code/game/objects/structures/crates_lockers/closets/statue.dm b/code/game/objects/structures/crates_lockers/closets/statue.dm index a28c8b3ebfd..850e07b9e93 100644 --- a/code/game/objects/structures/crates_lockers/closets/statue.dm +++ b/code/game/objects/structures/crates_lockers/closets/statue.dm @@ -5,7 +5,8 @@ icon_state = "human_male" density = 1 anchored = 1 - health = 0 //destroying the statue kills the mob within + obj_integrity = 200 + max_integrity = 200 var/intialTox = 0 //these are here to keep the mob from taking damage from things that logically wouldn't affect a rock var/intialFire = 0 //it's a little sloppy I know but it was this or the GODMODE flag. Lesser of two evils. var/intialBrute = 0 @@ -23,7 +24,8 @@ L.faction += "mimic" //Stops mimics from instaqdeling people in statues L.visible_message("[L]'s skin rapidly turns to marble!", "Your body freezes up! Can't... move... can't... think...") - health = L.health + 100 //stoning damaged mobs will result in easier to shatter statues + obj_integrity = L.health + 100 //stoning damaged mobs will result in easier to shatter statues + max_integrity = obj_integrity intialTox = L.getToxLoss() intialFire = L.getFireLoss() intialBrute = L.getBruteLoss() @@ -42,7 +44,7 @@ icon_state = "corgi" desc = "If it takes forever, I will wait for you..." - if(health == 0) //meaning if the statue didn't find a valid target + if(obj_integrity == 0) //meaning if the statue didn't find a valid target qdel(src) return @@ -84,9 +86,9 @@ O.loc = src.loc for(var/mob/living/M in src) - M.loc = src.loc + M.forceMove(loc) M.disabilities -= MUTE - M.take_overall_damage((M.health - health - 100),0) //any new damage the statue incurred is transfered to the mob + M.take_overall_damage((M.health - obj_integrity + 100)) //any new damage the statue incurred is transfered to the mob M.faction -= "mimic" M.reset_perspective(null) @@ -111,25 +113,6 @@ /obj/structure/closet/statue/toggle() return -/obj/structure/closet/statue/bullet_act(obj/item/projectile/Proj) - health -= Proj.damage - if(health <= 0) - shatter() - -/obj/structure/closet/statue/attack_animal(mob/living/simple_animal/user) - if(user.environment_smash) - shatter() - -/obj/structure/closet/statue/blob_act(obj/structure/blob/B) - shatter() - -/obj/structure/closet/statue/attacked_by(obj/item/I, mob/living/user) - if(I.damtype != STAMINA) - health -= I.force - visible_message("[user] strikes [src] with [I].") - if(health <= 0) - shatter() - /obj/structure/closet/statue/MouseDrop_T() return @@ -145,9 +128,10 @@ /obj/structure/closet/statue/update_icon() return -/obj/structure/closet/statue/proc/shatter() - for(var/mob/living/M in src) - M.dust() +/obj/structure/closet/statue/deconstruct(disassembled = TRUE) + if(!disassembled) + for(var/mob/living/M in src) + M.dust() dump_contents() visible_message("[src] shatters!.") qdel(src) diff --git a/code/game/objects/structures/crates_lockers/crates/secure.dm b/code/game/objects/structures/crates_lockers/crates/secure.dm index 3b809f74f9f..bac428d5d1f 100644 --- a/code/game/objects/structures/crates_lockers/crates/secure.dm +++ b/code/game/objects/structures/crates_lockers/crates/secure.dm @@ -4,7 +4,14 @@ icon_state = "securecrate" secure = 1 locked = 1 - health = 1000 + obj_integrity = 500 + max_integrity = 500 + armor = list(melee = 30, bullet = 50, laser = 50, energy = 100, bomb = 0, bio = 0, rad = 0, fire = 80, acid = 80) + +/obj/structure/closet/crate/secure/run_obj_armor(damage_amount, damage_type, damage_flag = 0, attack_dir) + if(damage_flag == "melee" && damage_amount < 25) + return 0 + . = ..() /obj/structure/closet/crate/secure/update_icon() ..() diff --git a/code/game/objects/structures/destructible_structures.dm b/code/game/objects/structures/destructible_structures.dm index 688715f5202..d002991c576 100644 --- a/code/game/objects/structures/destructible_structures.dm +++ b/code/game/objects/structures/destructible_structures.dm @@ -1,89 +1,17 @@ /obj/structure/destructible //a base for destructible structures - var/max_health = 100 - var/health = 100 - var/takes_damage = TRUE //If the structure can be damaged + max_integrity = 100 + obj_integrity = 100 var/break_message = "The strange, admin-y structure breaks!" //The message shown when a structure breaks var/break_sound = 'sound/magic/clockwork/invoke_general.ogg' //The sound played when a structure breaks var/list/debris = null //Parts left behind when a structure breaks, takes the form of list(path = amount_to_spawn) -/obj/structure/destructible/proc/take_damage(amount, damage_type) - var/static/list/physical_damage_types = list(BRUTE = TRUE, BURN = TRUE) - if(!takes_damage || !amount || !damage_type || !physical_damage_types[damage_type]) - return 0 - health = max(0, health - amount) - if(!health) - destroyed() - return amount - -/obj/structure/destructible/proc/destroyed() - if(!takes_damage) - return 0 - if(islist(debris)) - for(var/I in debris) - for(var/i in 1 to debris[I]) - new I (get_turf(src)) +/obj/structure/destructible/deconstruct(disassembled = TRUE) + if(!(flags & NODECONSTRUCT)) + if(islist(debris)) + for(var/I in debris) + for(var/i in 1 to debris[I]) + new I (get_turf(src)) visible_message(break_message) playsound(src, break_sound, 50, 1) qdel(src) return 1 - -/obj/structure/destructible/burn() - SSobj.burning -= src - if(takes_damage) - playsound(src, 'sound/items/Welder.ogg', 100, 1) - visible_message("[src] is warped by the heat!") - take_damage(rand(50, 100), BURN) - -/obj/structure/destructible/ex_act(severity) - var/damage = 0 - switch(severity) - if(1) - damage = max_health //100% max health lost - if(2) - damage = max_health * (0.01 * rand(50, 70)) //50-70% max health lost - if(3) - damage = max_health * (0.01 * rand(10, 30)) //10-30% max health lost - if(damage) - take_damage(damage, BRUTE) - -/obj/structure/destructible/bullet_act(obj/item/projectile/P) - . = ..() - visible_message("[src] is hit by \a [P]!") - playsound(src, P.hitsound, 50, 1) - take_damage(P.damage, P.damage_type) - -/obj/structure/destructible/proc/attack_generic(mob/user, damage = 0, damage_type = BRUTE) //used by attack_alien, attack_animal, and attack_slime - user.do_attack_animation(src) - user.changeNext_move(CLICK_CD_MELEE) - user.visible_message("[user] smashes into [src]!") - take_damage(damage, damage_type) - -/obj/structure/destructible/attack_alien(mob/living/user) - playsound(src, 'sound/weapons/bladeslice.ogg', 50, 1) - attack_generic(user, 15) - -/obj/structure/destructible/attack_animal(mob/living/simple_animal/M) - if(!M.melee_damage_upper && !M.obj_damage) - return - playsound(src, 'sound/weapons/Genhit.ogg', 50, 1) - if(M.obj_damage) - attack_generic(M, M.obj_damage, M.melee_damage_type) - else - attack_generic(M, M.melee_damage_upper, M.melee_damage_type) - -/obj/structure/destructible/attack_slime(mob/living/simple_animal/slime/user) - if(!user.is_adult) - return - playsound(src, 'sound/weapons/Genhit.ogg', 50, 1) - attack_generic(user, rand(10, 15)) - -/obj/structure/destructible/attacked_by(obj/item/I, mob/living/user) - . = ..() - var/turf/T = get_turf(src) - if(take_damage(I.force, I.damtype)) - playsound(T, I.hitsound, 50, 1) - -/obj/structure/destructible/mech_melee_attack(obj/mecha/M) - if(..()) - playsound(src, 'sound/weapons/punch4.ogg', 50, 1) - take_damage(M.force, M.damtype) diff --git a/code/game/objects/structures/displaycase.dm b/code/game/objects/structures/displaycase.dm index 0194e0d9f40..6d974be8c2e 100644 --- a/code/game/objects/structures/displaycase.dm +++ b/code/game/objects/structures/displaycase.dm @@ -5,9 +5,11 @@ desc = "A display case for prized possessions." density = 1 anchored = 1 - resistance_flags = FIRE_PROOF | ACID_PROOF - var/health = 30 - var/destroyed = 0 + resistance_flags = ACID_PROOF + armor = list(melee = 30, bullet = 0, laser = 0, energy = 0, bomb = 10, bio = 0, rad = 0, fire = 70, acid = 100) + obj_integrity = 200 + max_integrity = 200 + integrity_failure = 50 var/obj/item/showpiece = null var/alert = 0 var/open = 0 @@ -20,17 +22,6 @@ showpiece = new start_showpiece_type (src) update_icon() -/obj/structure/displaycase/ex_act(severity, target) - switch(severity) - if (1) - new /obj/item/weapon/shard( src.loc ) - dump() - qdel(src) - if (2) - take_damage(rand(10,20), BRUTE, 0) - if (3) - take_damage(5, BRUTE, 0) - /obj/structure/displaycase/examine(mob/user) ..() if(showpiece) @@ -39,48 +30,45 @@ user << "Hooked up with an anti-theft system." -/obj/structure/displaycase/bullet_act(obj/item/projectile/P) - . = ..() - take_damage(P.damage, P.damage_type, 0) - /obj/structure/displaycase/proc/dump() if (showpiece) showpiece.loc = src.loc showpiece = null -/obj/structure/displaycase/blob_act(obj/structure/blob/B) - take_damage(30) - -/obj/structure/displaycase/hitby(atom/movable/AM) - ..() - if(isobj(AM)) - var/obj/item/I = AM - take_damage(I.throwforce * 0.2) - -/obj/structure/displaycase/proc/take_damage(damage, damage_type = BRUTE, sound_effect = 1) +/obj/structure/displaycase/play_attack_sound(damage_amount, damage_type = BRUTE, damage_flag = 0) switch(damage_type) if(BRUTE) - if(sound_effect) - playsound(src.loc, 'sound/effects/Glasshit.ogg', 75, 1) + playsound(src.loc, 'sound/effects/Glasshit.ogg', 75, 1) if(BURN) - if(sound_effect) - playsound(src.loc, 'sound/items/Welder.ogg', 100, 1) - else - return - health = max( health - damage, 0) - if(!health && !destroyed) + playsound(src.loc, 'sound/items/Welder.ogg', 100, 1) + +/obj/structure/displaycase/deconstruct(disassembled = TRUE) + if(!(flags & NODECONSTRUCT)) + dump() + if(!disassembled) + new /obj/item/weapon/shard( src.loc ) + trigger_alarm() + qdel(src) + +/obj/structure/displaycase/obj_break(damage_flag) + if(!broken && !(flags & NODECONSTRUCT)) density = 0 - destroyed = 1 + broken = 1 new /obj/item/weapon/shard( src.loc ) playsound(src, "shatter", 70, 1) update_icon() + trigger_alarm() - //Activate Anti-theft - if(alert) - var/area/alarmed = get_area(src) - alarmed.burglaralert(src) - playsound(src, "sound/effects/alert.ogg", 50, 1) +/obj/structure/displaycase/proc/trigger_alarm() + //Activate Anti-theft + if(alert) + var/area/alarmed = get_area(src) + alarmed.burglaralert(src) + playsound(src, "sound/effects/alert.ogg", 50, 1) +/* + +*/ /obj/structure/displaycase/proc/is_directional(atom/A) try @@ -88,6 +76,7 @@ catch return 0 return 1 + /obj/structure/displaycase/proc/get_flat_icon_directional(atom/A) //Get flatIcon even if dir is mismatched for directionless icons //SLOW @@ -107,7 +96,7 @@ I = icon('icons/obj/stationobjs.dmi',"glassbox_open") else I = icon('icons/obj/stationobjs.dmi',"glassbox0") - if(destroyed) + if(broken) I = icon('icons/obj/stationobjs.dmi',"glassboxb0") if(showpiece) var/icon/S = get_flat_icon_directional(showpiece) @@ -117,7 +106,7 @@ return /obj/structure/displaycase/attackby(obj/item/weapon/W, mob/user, params) - if(W.GetID() && electronics && !destroyed) + if(W.GetID() && electronics && !broken) if(allowed(user)) user << "You [open ? "close":"open"] the [src]" open = !open @@ -125,7 +114,7 @@ else user << "Access denied." else if(!alert && istype(W,/obj/item/weapon/crowbar)) - if(destroyed) + if(broken) if(showpiece) user << "Remove the displayed object first." else @@ -143,49 +132,26 @@ showpiece = W user << "You put [W] on display" update_icon() - else if(istype(W, /obj/item/stack/sheet/glass) && destroyed) + else if(istype(W, /obj/item/stack/sheet/glass) && broken) var/obj/item/stack/sheet/glass/G = W if(G.get_amount() < 2) user << "You need two glass sheets to fix the case!" return - user << "You start fixing the [src]..." + user << "You start fixing [src]..." if(do_after(user, 20, target = src)) G.use(2) - destroyed = 0 - health = initial(health) + broken = 0 + obj_integrity = max_integrity update_icon() else return ..() -/obj/structure/displaycase/attacked_by(obj/item/weapon/W, mob/living/user) - ..() - take_damage(W.force, W.damtype) - /obj/structure/displaycase/attack_paw(mob/user) return src.attack_hand(user) -/obj/structure/displaycase/attack_alien(mob/living/carbon/alien/humanoid/user) - user.changeNext_move(CLICK_CD_MELEE) - user.do_attack_animation(src) - visible_message("\The [user] slashes at [src]!") - playsound(src.loc, 'sound/weapons/slash.ogg', 100, 1) - take_damage(20, BRUTE, 0) - -/obj/structure/displaycase/attack_animal(mob/living/simple_animal/M) - M.changeNext_move(CLICK_CD_MELEE) - M.do_attack_animation(src) - if(M.melee_damage_upper || M.obj_damage) - M.visible_message("[M.name] smashes against \the [src.name].",\ - "You smash against the [src.name].") - if(M.obj_damage) - take_damage(M.obj_damage, M.melee_damage_type, 1) - else - take_damage(rand(M.melee_damage_lower,M.melee_damage_upper), M.melee_damage_type, 1) - - /obj/structure/displaycase/attack_hand(mob/user) user.changeNext_move(CLICK_CD_MELEE) - if (showpiece && (destroyed || open)) + if (showpiece && (broken || open)) dump() user << "You deactivate the hover field built into the case." src.add_fingerprint(user) diff --git a/code/game/objects/structures/door_assembly.dm b/code/game/objects/structures/door_assembly.dm index 2941bf9c3c5..bf2a6435626 100644 --- a/code/game/objects/structures/door_assembly.dm +++ b/code/game/objects/structures/door_assembly.dm @@ -5,6 +5,8 @@ var/overlays_file = 'icons/obj/doors/airlocks/station/overlays.dmi' anchored = 0 density = 1 + obj_integrity = 200 + max_integrity = 200 var/state = 0 var/mineral = null var/typetext = "" @@ -495,18 +497,7 @@ if( !WT.isOn() ) return user << "You disassemble the airlock assembly." - new /obj/item/stack/sheet/metal(get_turf(src), 4) - if (mineral) - if (mineral == "glass") - if (heat_proof_finished) - new /obj/item/stack/sheet/rglass(get_turf(src)) - else - new /obj/item/stack/sheet/glass(get_turf(src)) - else - var/M = text2path("/obj/item/stack/sheet/mineral/[mineral]") - new M(get_turf(src)) - new M(get_turf(src)) - qdel(src) + deconstruct(TRUE) else if(istype(W, /obj/item/weapon/wrench)) if(!anchored ) @@ -684,4 +675,26 @@ add_overlay(get_airlock_overlay("fill_construction", icon)) else add_overlay(get_airlock_overlay("[material]_construction", overlays_file)) - add_overlay(get_airlock_overlay("panel_c[state+1]", overlays_file)) \ No newline at end of file + add_overlay(get_airlock_overlay("panel_c[state+1]", overlays_file)) + + +/obj/structure/door_assembly/deconstruct(disassembled = TRUE) + if(!(flags & NODECONSTRUCT)) + var/turf/T = get_turf(src) + var/metal_amt = 4 + if(!disassembled) + metal_amt = rand(2,4) + new /obj/item/stack/sheet/metal(T, metal_amt) + if(mineral) + if (mineral == "glass") + if(disassembled) + if (heat_proof_finished) + new /obj/item/stack/sheet/rglass(T) + else + new /obj/item/stack/sheet/glass(T) + else + new /obj/item/weapon/shard(T) + else + var/obj/item/stack/sheet/mineral/mineral_path = text2path("/obj/item/stack/sheet/mineral/[mineral]") + new mineral_path(T, 2) + qdel(src) \ No newline at end of file diff --git a/code/game/objects/structures/extinguisher.dm b/code/game/objects/structures/extinguisher.dm index c766dc13a2f..4ec8001ebd7 100644 --- a/code/game/objects/structures/extinguisher.dm +++ b/code/game/objects/structures/extinguisher.dm @@ -5,7 +5,10 @@ icon_state = "extinguisher_closed" anchored = 1 density = 0 - var/obj/item/weapon/extinguisher/has_extinguisher + obj_integrity = 200 + max_integrity = 200 + integrity_failure = 50 + var/obj/item/weapon/extinguisher/stored_extinguisher var/opened = 0 /obj/structure/extinguisher_cabinet/New(loc, ndir, building) @@ -17,25 +20,16 @@ opened = 1 icon_state = "extinguisher_empty" else - has_extinguisher = new /obj/item/weapon/extinguisher(src) - -/obj/structure/extinguisher_cabinet/ex_act(severity, target) - switch(severity) - if(1) - qdel(src) - return - if(2) - if(prob(50)) - if(has_extinguisher) - has_extinguisher.loc = src.loc - qdel(src) - return - if(3) - return + stored_extinguisher = new /obj/item/weapon/extinguisher(src) +/obj/structure/extinguisher_cabinet/Destroy() + if(stored_extinguisher) + qdel(stored_extinguisher) + stored_extinguisher = null + return ..() /obj/structure/extinguisher_cabinet/attackby(obj/item/I, mob/user, params) - if(istype(I, /obj/item/weapon/wrench) && !has_extinguisher) + if(istype(I, /obj/item/weapon/wrench) && !stored_extinguisher) user << "You start unsecuring [name]..." playsound(loc, 'sound/items/Ratchet.ogg', 50, 1) if(do_after(user, 60/I.toolspeed, target = src)) @@ -48,63 +42,92 @@ if(iscyborg(user) || isalien(user)) return if(istype(I, /obj/item/weapon/extinguisher)) - if(!has_extinguisher && opened) + if(!stored_extinguisher && opened) if(!user.drop_item()) return contents += I - has_extinguisher = I + stored_extinguisher = I user << "You place [I] in [src]." else - opened = !opened + toggle_cabinet(user) + else if(user.a_intent != "harm") + toggle_cabinet(user) else - opened = !opened - update_icon() + return ..() /obj/structure/extinguisher_cabinet/attack_hand(mob/user) if(iscyborg(user) || isalien(user)) return - if(has_extinguisher) - user.put_in_hands(has_extinguisher) - user << "You take [has_extinguisher] from [src]." - has_extinguisher = null + if(stored_extinguisher) + user.put_in_hands(stored_extinguisher) + user << "You take [stored_extinguisher] from [src]." + stored_extinguisher = null opened = 1 + playsound(loc, 'sound/machines/click.ogg', 15, 1, -3) + update_icon() else - opened = !opened - update_icon() + toggle_cabinet(user) + /obj/structure/extinguisher_cabinet/attack_tk(mob/user) - if(has_extinguisher) - has_extinguisher.loc = loc - user << "You telekinetically remove [has_extinguisher] from [src]." - has_extinguisher = null + if(stored_extinguisher) + stored_extinguisher.forceMove(loc) + user << "You telekinetically remove [stored_extinguisher] from [src]." + stored_extinguisher = null opened = 1 + playsound(loc, 'sound/machines/click.ogg', 15, 1, -3) + update_icon() else - opened = !opened - update_icon() + toggle_cabinet(user) + /obj/structure/extinguisher_cabinet/attack_paw(mob/user) attack_hand(user) - return /obj/structure/extinguisher_cabinet/AltClick(mob/living/user) if(user.incapacitated() || !Adjacent(user) || !istype(user)) return - opened = !opened - update_icon() + toggle_cabinet(user) + +/obj/structure/extinguisher_cabinet/proc/toggle_cabinet(mob/user) + if(opened && broken) + user << "[src] is broken open." + else + playsound(loc, 'sound/machines/click.ogg', 15, 1, -3) + opened = !opened + update_icon() /obj/structure/extinguisher_cabinet/update_icon() if(!opened) icon_state = "extinguisher_closed" return - if(has_extinguisher) - if(istype(has_extinguisher, /obj/item/weapon/extinguisher/mini)) + if(stored_extinguisher) + if(istype(stored_extinguisher, /obj/item/weapon/extinguisher/mini)) icon_state = "extinguisher_mini" else icon_state = "extinguisher_full" else icon_state = "extinguisher_empty" +/obj/structure/extinguisher_cabinet/obj_break(damage_flag) + if(!broken && !(flags & NODECONSTRUCT)) + broken = 1 + opened = 0 + update_icon() + if(stored_extinguisher) + stored_extinguisher.forceMove(loc) + stored_extinguisher = null + + +/obj/structure/extinguisher_cabinet/deconstruct(disassembled = TRUE) + if(!(flags & NODECONSTRUCT)) + new /obj/item/stack/sheet/metal (loc, 2) + if(stored_extinguisher) + stored_extinguisher.forceMove(loc) + stored_extinguisher = null + qdel(src) + /obj/item/wallframe/extinguisher_cabinet name = "extinguisher cabinet frame" desc = "Used for building wall-mounted extinguisher cabinets." diff --git a/code/game/objects/structures/false_walls.dm b/code/game/objects/structures/false_walls.dm index 5de0247b4e2..9d7dfc42686 100644 --- a/code/game/objects/structures/false_walls.dm +++ b/code/game/objects/structures/false_walls.dm @@ -14,6 +14,8 @@ var/opening = 0 density = 1 opacity = 1 + obj_integrity = 100 + max_integrity = 100 canSmoothWith = list( /turf/closed/wall, @@ -65,14 +67,6 @@ air_update_turf(1) opening = 0 -/obj/structure/falsewall/attack_animal(mob/living/simple_animal/user) - if(user.environment_smash) - user.changeNext_move(CLICK_CD_MELEE) - user.do_attack_animation(src) - playsound(src, 'sound/effects/meteorimpact.ogg', 100, 1) - visible_message("[user] smashes [src] apart!") - deconstruct() - /obj/structure/falsewall/proc/do_the_flick() if(density) smooth = SMOOTH_FALSE @@ -128,18 +122,19 @@ else return ..() -/obj/structure/falsewall/proc/dismantle(mob/user, drop_girder) +/obj/structure/falsewall/proc/dismantle(mob/user, disassembled = TRUE) user.visible_message("[user] dismantles the false wall.", "You dismantle the false wall.") playsound(src, 'sound/items/Welder.ogg', 100, 1) - deconstruct(drop_girder) + deconstruct(disassembled) -/obj/structure/falsewall/deconstruct(drop_girder) - if(drop_girder) - new girder_type(loc) - if(mineral_amount) - for(var/i in 1 to mineral_amount) - new mineral(loc) - ..() +/obj/structure/falsewall/deconstruct(disassembled = TRUE) + if(!(flags & NODECONSTRUCT)) + if(disassembled) + new girder_type(loc) + if(mineral_amount) + for(var/i in 1 to mineral_amount) + new mineral(loc) + qdel(src) /obj/structure/falsewall/storage_contents_dump_act(obj/item/weapon/storage/src_object, mob/user) return 0 @@ -220,6 +215,8 @@ mineral = /obj/item/stack/sheet/mineral/diamond walltype = /turf/closed/wall/mineral/diamond canSmoothWith = list(/obj/structure/falsewall/diamond, /turf/closed/wall/mineral/diamond) + obj_integrity = 800 + max_integrity = 800 /obj/structure/falsewall/plasma name = "plasma wall" diff --git a/code/game/objects/structures/fireaxe.dm b/code/game/objects/structures/fireaxe.dm index f7b3ce72098..aa127a88443 100644 --- a/code/game/objects/structures/fireaxe.dm +++ b/code/game/objects/structures/fireaxe.dm @@ -6,20 +6,37 @@ icon_state = "fireaxe" anchored = 1 density = 0 - armor = list(melee = 50, bullet = 20, laser = 0, energy = 100, bomb = 10, bio = 100, rad = 100, fire = 0, acid = 0) + armor = list(melee = 50, bullet = 20, laser = 0, energy = 100, bomb = 10, bio = 100, rad = 100, fire = 90, acid = 50) var/locked = 1 var/open = 0 - var/health = 60 + obj_integrity = 150 + max_integrity = 150 + integrity_failure = 50 /obj/structure/fireaxecabinet/New() ..() update_icon() +/obj/structure/fireaxecabinet/Destroy() + if(fireaxe) + qdel(fireaxe) + fireaxe = null + return ..() + /obj/structure/fireaxecabinet/attackby(obj/item/I, mob/user, params) if(iscyborg(user) || istype(I,/obj/item/device/multitool)) toggle_lock(user) - return - if(open || health <= 0) + else if(istype(I, /obj/item/stack/sheet/glass) && broken) + var/obj/item/stack/sheet/glass/G = I + if(G.get_amount() < 2) + user << "You need two glass sheets to fix [src]!" + return + user << "You start fixing [src]..." + if(do_after(user, 20, target = src) && G.use(2)) + broken = 0 + obj_integrity = max_integrity + update_icon() + else if(open || broken) if(istype(I, /obj/item/weapon/twohanded/fireaxe) && !fireaxe) var/obj/item/weapon/twohanded/fireaxe/F = I if(F.wielded) @@ -28,68 +45,56 @@ if(!user.drop_item()) return fireaxe = F - src.contents += F + F.forceMove(loc) user << "You place the [F.name] back in the [name]." update_icon() return - else if(health > 0) + else if(!broken) toggle_open() else return ..() -/obj/structure/fireaxecabinet/attacked_by(obj/item/I, mob/living/user) - ..() - take_damage(I.force, I.damtype) - -/obj/structure/fireaxecabinet/proc/take_damage(damage, damage_type, sound_effect = 1) - if(open) - return +/obj/structure/fireaxecabinet/play_attack_sound(damage_amount, damage_type = BRUTE, damage_flag = 0) switch(damage_type) if(BRUTE) - if(sound_effect) - if(health <= 0) - playsound(loc, 'sound/effects/hit_on_shattered_glass.ogg', 90, 1) - else - playsound(loc, 'sound/effects/Glasshit.ogg', 90, 1) - if(BURN) - if(sound_effect) - playsound(src.loc, 'sound/items/Welder.ogg', 100, 1) - else - return - if(damage < 10) - return - if(health > 0) - health -= damage - update_icon() - if(health <= 0) - playsound(src, 'sound/effects/Glassbr3.ogg', 100, 1) - - -/obj/structure/fireaxecabinet/ex_act(severity, target) - switch(severity) - if(1) - qdel(src) - if(2) - if(prob(50) && fireaxe) - fireaxe.loc = src.loc - qdel(src) + if(broken) + playsound(loc, 'sound/effects/hit_on_shattered_glass.ogg', 90, 1) else - take_damage(rand(30,70), BRUTE, 0) - if(3) - take_damage(rand(10,30), BRUTE, 0) + playsound(loc, 'sound/effects/Glasshit.ogg', 90, 1) + if(BURN) + playsound(src.loc, 'sound/items/Welder.ogg', 100, 1) -/obj/structure/fireaxecabinet/bullet_act(obj/item/projectile/P) +/obj/structure/fireaxecabinet/take_damage(damage_amount, damage_type = BRUTE, damage_flag = 0, sound_effect = 1, attack_dir) + if(open) + return . = ..() - take_damage(P.damage, P.damage_type, 0) + if(.) + update_icon() +/obj/structure/fireaxecabinet/obj_break(damage_flag) + if(!broken && !(flags & NODECONSTRUCT)) + update_icon() + broken = TRUE + playsound(src, 'sound/effects/Glassbr3.ogg', 100, 1) + new /obj/item/weapon/shard(loc) + new /obj/item/weapon/shard(loc) + +/obj/structure/fireaxecabinet/deconstruct(disassembled = TRUE) + if(!(flags & NODECONSTRUCT)) + if(fireaxe && loc) + fireaxe.forceMove(loc) + fireaxe = null + new /obj/item/stack/sheet/metal(loc, 2) + qdel(src) /obj/structure/fireaxecabinet/blob_act(obj/structure/blob/B) if(fireaxe) fireaxe.forceMove(loc) + fireaxe = null qdel(src) /obj/structure/fireaxecabinet/attack_hand(mob/user) - if(open || health <= 0) + if(open || broken) if(fireaxe) user.put_in_hands(fireaxe) fireaxe = null @@ -108,20 +113,6 @@ /obj/structure/fireaxecabinet/attack_paw(mob/living/user) attack_hand(user) -/obj/structure/fireaxecabinet/attack_alien(mob/living/user) - user.visible_message("[user] slashes [src].") - take_damage(20) - -/obj/structure/fireaxecabinet/attack_animal(mob/living/simple_animal/M) - if(!M.melee_damage_upper && !M.obj_damage) - return - M.visible_message("[M] smashes against [src].", \ - "You smash against [src].") - if(M.obj_damage) - take_damage(M.obj_damage, M.melee_damage_type) - else - take_damage(rand(M.melee_damage_lower,M.melee_damage_upper), M.melee_damage_type) - /obj/structure/fireaxecabinet/attack_ai(mob/user) toggle_lock(user) return @@ -131,17 +122,19 @@ if(fireaxe) add_overlay("axe") if(!open) - switch(health) - if(-INFINITY to 0) - add_overlay("glass4") - if(1 to 20) - add_overlay("glass3") - if(21 to 40) - add_overlay("glass2") - if(41 to 59) - add_overlay("glass1") - if(60) - add_overlay("glass") + var/hp_percent = obj_integrity/max_integrity * 100 + if(broken) + add_overlay("glass4") + else + switch(hp_percent) + if(-INFINITY to 40) + add_overlay("glass3") + if(40 to 60) + add_overlay("glass2") + if(60 to 80) + add_overlay("glass1") + if(80 to INFINITY) + add_overlay("glass") if(locked) add_overlay("locked") else diff --git a/code/game/objects/structures/flora.dm b/code/game/objects/structures/flora.dm index f9f4b0d0d95..d3b78110830 100644 --- a/code/game/objects/structures/flora.dm +++ b/code/game/objects/structures/flora.dm @@ -1,6 +1,7 @@ /obj/structure/flora - resistance_flags = 0 - burntime = 30 + resistance_flags = FLAMMABLE + obj_integrity = 150 + max_integrity = 150 anchored = 1 //trees diff --git a/code/game/objects/structures/girders.dm b/code/game/objects/structures/girders.dm index 82333932cbc..7209637f484 100644 --- a/code/game/objects/structures/girders.dm +++ b/code/game/objects/structures/girders.dm @@ -13,6 +13,8 @@ var/state = GIRDER_NORMAL var/girderpasschance = 20 // percentage chance that a projectile passes through the girder. var/can_displace = TRUE //If the girder can be moved around by wrenching it + obj_integrity = 200 + max_integrity = 200 /obj/structure/girder/attackby(obj/item/W, mob/user, params) add_fingerprint(user) @@ -264,32 +266,11 @@ var/atom/movable/mover = caller . = . || mover.checkpass(PASSGRILLE) -/obj/structure/girder/attack_animal(mob/living/simple_animal/M) - if(M.environment_smash) - if(state != GIRDER_DISPLACED) - var/obj/structure/girder/displaced/D = new (loc) - transfer_fingerprints_to(D) - qdel(src) - - -/obj/structure/girder/blob_act(obj/structure/blob/B) - if(prob(40)) - qdel(src) - -/obj/structure/girder/ex_act(severity, target) - switch(severity) - if(1) - qdel(src) - if(2) - if (prob(70)) - var/remains = pick(/obj/item/stack/rods,/obj/item/stack/sheet/metal) - new remains(loc) - qdel(src) - if(3) - if (prob(40)) - var/remains = pick(/obj/item/stack/rods,/obj/item/stack/sheet/metal) - new remains(loc) - qdel(src) +/obj/structure/girder/deconstruct(disassembled = TRUE) + if(!(flags & NODECONSTRUCT)) + var/remains = pick(/obj/item/stack/rods,/obj/item/stack/sheet/metal) + new remains(loc) + qdel(src) /obj/structure/girder/narsie_act() if(prob(25)) @@ -302,27 +283,17 @@ anchored = 0 state = GIRDER_DISPLACED girderpasschance = 25 + obj_integrity = 120 + max_integrity = 120 /obj/structure/girder/reinforced name = "reinforced girder" icon_state = "reinforced" state = GIRDER_REINF girderpasschance = 0 + obj_integrity = 350 + max_integrity = 350 -/obj/structure/girder/reinforced/ex_act(severity, target) - switch(severity) - if(1) - qdel(src) - if(2) - if (prob(50)) - var/remains = pick(/obj/item/stack/rods,/obj/item/stack/sheet/metal) - new remains(loc) - qdel(src) - if(3) - if (prob(20)) - var/remains = pick(/obj/item/stack/rods,/obj/item/stack/sheet/metal) - new remains(loc) - qdel(src) //////////////////////////////////////////// cult girder ////////////////////////////////////////////// @@ -396,15 +367,7 @@ /obj/structure/girder/cult/narsie_act() return -/obj/structure/girder/cult/ex_act(severity, target) - switch(severity) - if(1) - qdel(src) - if(2) - if(prob(30)) - new/obj/item/stack/sheet/runed_metal/(get_turf(src), 1) - qdel(src) - if(3) - if(prob(5)) - new/obj/item/stack/sheet/runed_metal/(get_turf(src), 1) - qdel(src) +/obj/structure/girder/cult/deconstruct(disassembled = TRUE) + if(!(flags & NODECONSTRUCT)) + new/obj/item/stack/sheet/runed_metal/(get_turf(src), 1) + qdel(src) diff --git a/code/game/objects/structures/grille.dm b/code/game/objects/structures/grille.dm index f3cbde713e8..e6365b97c83 100644 --- a/code/game/objects/structures/grille.dm +++ b/code/game/objects/structures/grille.dm @@ -8,9 +8,10 @@ flags = CONDUCT pressure_resistance = 5*ONE_ATMOSPHERE layer = BELOW_OBJ_LAYER - var/health = 10 armor = list(melee = 50, bullet = 70, laser = 70, energy = 100, bomb = 10, bio = 100, rad = 100, fire = 0, acid = 0) - var/destroyed = 0 + obj_integrity = 50 + max_integrity = 50 + integrity_failure = 20 var/obj/item/stack/rods/stored /obj/structure/grille/New() @@ -18,24 +19,13 @@ stored = new/obj/item/stack/rods(src) stored.amount = 2 -/obj/structure/grille/ex_act(severity, target) - switch(severity) - if(1) - qdel(src) - else - take_damage(rand(5,10), BRUTE, 0) - /obj/structure/grille/ratvar_act() - if(destroyed) + if(broken) new /obj/structure/grille/ratvar/broken(src.loc) else new /obj/structure/grille/ratvar(src.loc) qdel(src) -/obj/structure/grille/blob_act(obj/structure/blob/B) - if(!destroyed) - Break() - /obj/structure/grille/Bumped(atom/user) if(ismob(user)) shock(user, 70) @@ -44,10 +34,11 @@ /obj/structure/grille/attack_paw(mob/user) attack_hand(user) -/obj/structure/grille/attack_hulk(mob/living/carbon/human/user) - ..(user, 1) - shock(user, 70) - take_damage(5) +/obj/structure/grille/attack_hulk(mob/living/carbon/human/user, does_attack_animation = 0) + if(user.a_intent == "harm") + if(!shock(user, 70)) + ..(user, 1) + return 1 /obj/structure/grille/attack_hand(mob/living/user) user.changeNext_move(CLICK_CD_MELEE) @@ -56,7 +47,7 @@ "You hit [src].", \ "You hear twisting metal.") if(!shock(user, 70)) - take_damage(rand(1,2)) + take_damage(rand(5,10), BRUTE, "melee", 1) /obj/structure/grille/attack_alien(mob/living/user) user.do_attack_animation(src) @@ -65,36 +56,8 @@ "You mangle [src].", \ "You hear twisting metal.") if(!shock(user, 70)) - take_damage(5) + take_damage(20, BRUTE, "melee", 1) -/obj/structure/grille/attack_slime(mob/living/simple_animal/slime/user) - user.changeNext_move(CLICK_CD_MELEE) - user.do_attack_animation(src) - if(!user.is_adult) - return - - user.visible_message("[user] smashes against [src].", \ - "You smash against [src].", \ - "You hear twisting metal.") - take_damage(rand(1,2)) - -/obj/structure/grille/attack_animal(var/mob/living/simple_animal/M) - M.changeNext_move(CLICK_CD_MELEE) - if(!M.melee_damage_upper && !M.obj_damage || (M.melee_damage_type != BRUTE && M.melee_damage_type != BURN)) - return - M.do_attack_animation(src) - M.visible_message("[M] smashes against [src].", \ - "You smash against [src].", \ - "You hear twisting metal.") - if(M.obj_damage) - take_damage(M.obj_damage, M.melee_damage_type) - else - take_damage(rand(M.melee_damage_lower,M.melee_damage_upper), M.melee_damage_type) - - -/obj/structure/grille/mech_melee_attack(obj/mecha/M) - if(..()) - take_damage(M.force * 0.5, M.damtype) /obj/structure/grille/CanPass(atom/movable/mover, turf/target, height=0) if(height==0) return 1 @@ -112,35 +75,13 @@ var/atom/movable/mover = caller . = . || mover.checkpass(PASSGRILLE) -/obj/structure/grille/bullet_act(var/obj/item/projectile/Proj) - . = ..() - take_damage(Proj.damage*0.3, Proj.damage_type) - -/obj/structure/grille/Deconstruct() - if(!loc) //if already qdel'd somehow, we do nothing - return - if(!(flags&NODECONSTRUCT)) - transfer_fingerprints_to(stored) - var/turf/T = loc - stored.loc = T - ..() - -/obj/structure/grille/proc/Break() - icon_state = "broken[initial(icon_state)]" - density = 0 - destroyed = 1 - stored.amount = 1 - if(!(flags&NODECONSTRUCT)) - var/obj/item/stack/rods/newrods = new(loc) - transfer_fingerprints_to(newrods) - /obj/structure/grille/attackby(obj/item/weapon/W, mob/user, params) user.changeNext_move(CLICK_CD_MELEE) add_fingerprint(user) if(istype(W, /obj/item/weapon/wirecutters)) if(!shock(user, 100)) playsound(loc, 'sound/items/Wirecutter.ogg', 100, 1) - Deconstruct() + deconstruct() else if((istype(W, /obj/item/weapon/screwdriver)) && (istype(loc, /turf) || anchored)) if(!shock(user, 90)) playsound(loc, 'sound/items/Screwdriver.ogg', 100, 1) @@ -148,21 +89,21 @@ user.visible_message("[user] [anchored ? "fastens" : "unfastens"] [src].", \ "You [anchored ? "fasten [src] to" : "unfasten [src] from"] the floor.") return - else if(istype(W, /obj/item/stack/rods) && destroyed) + else if(istype(W, /obj/item/stack/rods) && broken) var/obj/item/stack/rods/R = W if(!shock(user, 90)) user.visible_message("[user] rebuilds the broken grille.", \ "You rebuild the broken grille.") - health = 10 + obj_integrity = max_integrity density = 1 - destroyed = 0 + broken = 0 icon_state = initial(icon_state) R.use(1) return //window placing begin else if(istype(W, /obj/item/stack/sheet/rglass) || istype(W, /obj/item/stack/sheet/glass)) - if (!destroyed) + if (!broken) var/obj/item/stack/ST = W if (ST.get_amount() < 2) user << "You need at least two sheets of glass for that!" @@ -176,7 +117,7 @@ return user << "You start placing the window..." if(do_after(user,20, target = src)) - if(!src.loc || !anchored) //Grille destroyed or unanchored while waiting + if(!src.loc || !anchored) //Grille broken or unanchored while waiting return for(var/obj/structure/window/WINDOW in loc) //Another window already installed on grille return @@ -197,38 +138,41 @@ else if(istype(W, /obj/item/weapon/shard) || !shock(user, 70)) return ..() - -/obj/structure/grille/attacked_by(obj/item/I, mob/living/user) - ..() - take_damage(I.force * 0.3, I.damtype) - -/obj/structure/grille/proc/take_damage(damage, damage_type = BRUTE, sound_effect = 1) +/obj/structure/grille/play_attack_sound(damage_amount, damage_type = BRUTE, damage_flag = 0) switch(damage_type) - if(BURN) - if(sound_effect) - playsound(loc, 'sound/items/welder.ogg', 80, 1) if(BRUTE) - if(sound_effect) - if(damage) - playsound(loc, 'sound/effects/grillehit.ogg', 80, 1) - else - playsound(loc, 'sound/weapons/tap.ogg', 50, 1) - else - return - health -= damage - if(health <= 0) - if(!destroyed) - Break() - else - if(health <= -6) - Deconstruct() + if(damage_amount) + playsound(loc, 'sound/effects/grillehit.ogg', 80, 1) + else + playsound(loc, 'sound/weapons/tap.ogg', 50, 1) + if(BURN) + playsound(loc, 'sound/items/welder.ogg', 80, 1) + + +/obj/structure/grille/deconstruct(disassembled = TRUE) + if(!loc) //if already qdel'd somehow, we do nothing + return + if(!(flags&NODECONSTRUCT)) + transfer_fingerprints_to(stored) + var/turf/T = loc + stored.forceMove(T) + ..() + +/obj/structure/grille/obj_break() + if(!broken && !(flags & NODECONSTRUCT)) + icon_state = "broken[initial(icon_state)]" + density = 0 + broken = 1 + stored.amount = 1 + var/obj/item/stack/rods/newrods = new(loc) + transfer_fingerprints_to(newrods) // shock user with probability prb (if all connections & power are working) // returns 1 if shocked, 0 otherwise /obj/structure/grille/proc/shock(mob/user, prb) - if(!anchored || destroyed) // anchored/destroyed grilles are never connected + if(!anchored || broken) // anchored/broken grilles are never connected return 0 if(!prob(prb)) return 0 @@ -247,27 +191,20 @@ return 0 /obj/structure/grille/temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume) - if(!destroyed) + if(!broken) if(exposed_temperature > T0C + 1500) - take_damage(1) + take_damage(1, BURN, 0, 0) ..() /obj/structure/grille/hitby(AM as mob|obj) - ..() - var/tforce = 0 - if(ismob(AM)) - tforce = 5 - else if(isobj(AM)) - if(prob(50)) - var/obj/item/I = AM - tforce = max(0, I.throwforce * 0.5) - else if(anchored && !destroyed) + if(isobj(AM)) + if(prob(50) && anchored && !broken) var/turf/T = get_turf(src) var/obj/structure/cable/C = T.get_cable_node() if(C) playsound(src.loc, 'sound/magic/LightningShock.ogg', 100, 1, extrarange = 5) tesla_zap(src, 3, C.powernet.avail * 0.01) //Zap for 1/100 of the amount of power. At a million watts in the grid, it will be as powerful as a tesla revolver shot. - take_damage(tforce) + return ..() /obj/structure/grille/storage_contents_dump_act(obj/item/weapon/storage/src_object, mob/user) return 0 @@ -275,8 +212,8 @@ /obj/structure/grille/broken // Pre-broken grilles for map placement icon_state = "brokengrille" density = 0 - health = 0 - destroyed = 1 + obj_integrity = 20 + broken = 1 /obj/structure/grille/broken/New() ..() @@ -290,7 +227,7 @@ /obj/structure/grille/ratvar/New() ..() change_construction_value(1) - if(destroyed) + if(broken) PoolOrNew(/obj/effect/overlay/temp/ratvar/grille/broken, get_turf(src)) else PoolOrNew(/obj/effect/overlay/temp/ratvar/grille, get_turf(src)) @@ -312,8 +249,8 @@ /obj/structure/grille/ratvar/broken density = 0 - health = 0 - destroyed = 1 + obj_integrity = 20 + broken = 1 /obj/structure/grille/ratvar/broken/New() ..() diff --git a/code/game/objects/structures/holosign.dm b/code/game/objects/structures/holosign.dm new file mode 100644 index 00000000000..ac8ad9d02e0 --- /dev/null +++ b/code/game/objects/structures/holosign.dm @@ -0,0 +1,101 @@ + +//holographic signs and barriers + +/obj/structure/holosign + name = "holo sign" + icon = 'icons/effects/effects.dmi' + anchored = 1 + obj_integrity = 1 + max_integrity = 1 + armor = list(melee = 0, bullet = 50, laser = 50, energy = 50, bomb = 0, bio = 0, rad = 0, fire = 20, acid = 20) + var/obj/item/weapon/holosign_creator/projector + +/obj/structure/holosign/New(loc, source_projector) + if(source_projector) + projector = source_projector + projector.signs += src + ..() + +/obj/structure/holosign/Destroy() + if(projector) + projector.signs -= src + projector = null + return ..() + +/obj/structure/holosign/attack_hand(mob/living/user) + user.do_attack_animation(src) + user.changeNext_move(CLICK_CD_MELEE) + take_damage(5 , BRUTE, "melee", 1) + +/obj/structure/holosign/play_attack_sound(damage_amount, damage_type = BRUTE, damage_flag = 0) + switch(damage_type) + if(BRUTE) + playsound(loc, 'sound/weapons/Egloves.ogg', 80, 1) + if(BURN) + playsound(loc, 'sound/weapons/Egloves.ogg', 80, 1) + + +/obj/structure/holosign/wetsign + name = "wet floor sign" + desc = "The words flicker as if they mean nothing." + icon = 'icons/effects/effects.dmi' + icon_state = "holosign" + +/obj/structure/holosign/barrier + name = "holo barrier" + desc = "A short holographic barrier which can only be passed by walking." + icon_state = "holosign_sec" + pass_flags = LETPASSTHROW + density = 1 + obj_integrity = 20 + max_integrity = 20 + var/allow_walk = 1 //can we pass through it on walk intent + +/obj/structure/holosign/barrier/CanPass(atom/movable/mover, turf/target, height=0, air_group=0) + if(!density) + return 1 + if(air_group || (height==0)) + return 1 + if(mover.pass_flags & (PASSGLASS|PASSTABLE|PASSGRILLE)) + return 1 + if(iscarbon(mover)) + var/mob/living/carbon/C = mover + if(allow_walk && C.m_intent == "walk") + return 1 + +/obj/structure/holosign/barrier/engineering + icon_state = "holosign_engi" + +/obj/structure/holosign/barrier/cyborg + name = "Energy Field" + desc = "A fragile energy field that blocks movement" + density = 1 + obj_integrity = 1 + max_integrity = 1 + allow_walk = 0 + +/obj/structure/holosign/barrier/cyborg/hacked + name = "Charged Energy Field" + desc = "A powerful energy field that blocks movement. Energy arcs off it" + obj_integrity = 10 + max_integrity = 10 + var/shockcd = 0 + +/obj/structure/holosign/barrier/cyborg/hacked/proc/cooldown() + shockcd = FALSE + +/obj/structure/holosign/barrier/cyborg/hacked/attack_hand(mob/living/user) + if(!shockcd) + if(ismob(user)) + var/mob/living/M = user + M.electrocute_act(15,"Energy Barrier", safety=1) + shockcd = TRUE + addtimer(src, "cooldown", 10) + +/obj/structure/holosign/barrier/cyborg/hacked/Bumped(atom/user) + if(!shockcd) + if(ismob(user)) + var/mob/living/M = user + M.electrocute_act(15,"Energy Barrier", safety=1) + shockcd = TRUE + addtimer(src, "cooldown", 10) diff --git a/code/game/objects/structures/kitchen_spike.dm b/code/game/objects/structures/kitchen_spike.dm index 56e81172352..99593f51ebe 100644 --- a/code/game/objects/structures/kitchen_spike.dm +++ b/code/game/objects/structures/kitchen_spike.dm @@ -7,6 +7,8 @@ desc = "The frame of a meat spike." density = 1 anchored = 0 + obj_integrity = 200 + max_integrity = 200 /obj/structure/kitchenspike_frame/attackby(obj/item/I, mob/user, params) add_fingerprint(user) @@ -48,6 +50,8 @@ anchored = 1 buckle_lying = 0 can_buckle = 1 + obj_integrity = 250 + max_integrity = 250 /obj/structure/kitchenspike/attack_paw(mob/user) @@ -60,10 +64,7 @@ playsound(loc, 'sound/items/Crowbar.ogg', 100, 1) if(do_after(user, 20/I.toolspeed, target = src)) user << "You pry the spikes out of the frame." - new /obj/item/stack/rods(loc, 4) - var/obj/F = new /obj/structure/kitchenspike_frame(src.loc,) - transfer_fingerprints_to(F) - qdel(src) + deconstruct(TRUE) else user << "You can't do that while something's on the spike!" else @@ -136,3 +137,12 @@ unbuckle_mob(M,force=1) M.emote("scream") M.AdjustWeakened(10) + +/obj/structure/kitchenspike/deconstruct(disassembled = TRUE) + if(disassembled) + var/obj/F = new /obj/structure/kitchenspike_frame(src.loc,) + transfer_fingerprints_to(F) + else + new /obj/item/stack/sheet/metal(src.loc, 4) + new /obj/item/stack/rods(loc, 4) + qdel(src) \ No newline at end of file diff --git a/code/game/objects/structures/lattice.dm b/code/game/objects/structures/lattice.dm index bf40a96002b..418243dd85b 100644 --- a/code/game/objects/structures/lattice.dm +++ b/code/game/objects/structures/lattice.dm @@ -5,7 +5,9 @@ icon_state = "lattice" density = 0 anchored = 1 - armor = list(melee = 100, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 0, acid = 0) + armor = list(melee = 50, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 80, acid = 50) + obj_integrity = 50 + max_integrity = 50 layer = LATTICE_LAYER //under pipes var/obj/item/stack/rods/stored canSmoothWith = list(/obj/structure/lattice, @@ -30,37 +32,25 @@ /obj/structure/lattice/blob_act(obj/structure/blob/B) return -/obj/structure/lattice/ex_act(severity, target) - switch(severity) - if(1) - qdel(src) - return - if(2) - qdel(src) - return - if(3) - return - else - return - /obj/structure/lattice/attackby(obj/item/C, mob/user, params) if(istype(C, /obj/item/weapon/weldingtool)) var/obj/item/weapon/weldingtool/WT = C if(WT.remove_fuel(0, user)) user << "Slicing [name] joints ..." - Deconstruct() + deconstruct() else var/turf/T = get_turf(src) return T.attackby(C, user) //hand this off to the turf instead (for building plating, catwalks, etc) -/obj/structure/lattice/Deconstruct() - stored.loc = get_turf(src) - stored = null - ..() +/obj/structure/lattice/deconstruct(disassembled = TRUE) + if(!(flags & NODECONSTRUCT)) + stored.forceMove(get_turf(src)) + stored = null + qdel(src) /obj/structure/lattice/singularity_pull(S, current_size) if(current_size >= STAGE_FOUR) - Deconstruct() + deconstruct() /obj/structure/lattice/catwalk name = "catwalk" @@ -73,12 +63,12 @@ /obj/structure/lattice/catwalk/Move() var/turf/T = loc for(var/obj/structure/cable/C in T) - C.Deconstruct() + C.deconstruct() ..() -/obj/structure/lattice/catwalk/Deconstruct() +/obj/structure/lattice/catwalk/deconstruct() var/turf/T = loc for(var/obj/structure/cable/C in T) - C.Deconstruct() + C.deconstruct() ..() diff --git a/code/game/objects/structures/mineral_doors.dm b/code/game/objects/structures/mineral_doors.dm index 520aba8873e..d32b5e3b687 100644 --- a/code/game/objects/structures/mineral_doors.dm +++ b/code/game/objects/structures/mineral_doors.dm @@ -14,7 +14,9 @@ var/state = 0 //closed, 1 == open var/isSwitchingStates = 0 var/close_delay = -1 //-1 if does not auto close. - var/hardness = 1 + obj_integrity = 200 + max_integrity = 200 + armor = list(melee = 10, bullet = 0, laser = 0, energy = 100, bomb = 10, bio = 100, rad = 100, fire = 50, acid = 50) var/sheetType = /obj/item/stack/sheet/metal var/sheetAmount = 7 var/openSound = 'sound/effects/stonedoor_openclose.ogg' @@ -126,63 +128,33 @@ if(istype(W,/obj/item/weapon/pickaxe)) var/obj/item/weapon/pickaxe/digTool = W user << "You start digging the [name]..." - if(do_after(user,digTool.digspeed*hardness, target = src) && src) + if(do_after(user,digTool.digspeed*(1+round(max_integrity*0.01)), target = src) && src) user << "You finish digging." - Dismantle() + deconstruct(TRUE) else if(user.a_intent != "harm") attack_hand(user) else return ..() -/obj/structure/mineral_door/attacked_by(obj/item/I, mob/user) - ..() - if(I.damtype != STAMINA) - hardness -= I.force/100 - CheckHardness() - -/obj/structure/mineral_door/bullet_act(obj/item/projectile/Proj) - hardness -= Proj.damage - ..() - CheckHardness() - -/obj/structure/mineral_door/proc/CheckHardness() - if(hardness <= 0) - Dismantle(1) - -/obj/structure/mineral_door/proc/Dismantle(devastated = 0) +/obj/structure/mineral_door/deconstruct(disassembled = TRUE) var/turf/T = get_turf(src) - if(!devastated) - for(var/i in 1 to sheetAmount) - new sheetType(T) + if(disassembled) + new sheetType(T, sheetAmount) else - for(var/i in 3 to sheetAmount) - new sheetType(T) + new sheetType(T, max(sheetAmount - 2, 1)) qdel(src) -/obj/structure/mineral_door/ex_act(severity = 1) - switch(severity) - if(1) - Dismantle(1) - if(2) - if(prob(20)) - Dismantle(1) - else - hardness-- - CheckHardness() - if(3) - hardness -= 0.1 - CheckHardness() - - /obj/structure/mineral_door/iron name = "iron door" - hardness = 3 + obj_integrity = 300 + max_integrity = 300 /obj/structure/mineral_door/silver name = "silver door" icon_state = "silver" sheetType = /obj/item/stack/sheet/mineral/silver - hardness = 3 + obj_integrity = 300 + max_integrity = 300 /obj/structure/mineral_door/gold name = "gold door" @@ -193,14 +165,16 @@ name = "uranium door" icon_state = "uranium" sheetType = /obj/item/stack/sheet/mineral/uranium - hardness = 3 + obj_integrity = 300 + max_integrity = 300 luminosity = 2 /obj/structure/mineral_door/sandstone name = "sandstone door" icon_state = "sandstone" sheetType = /obj/item/stack/sheet/mineral/sandstone - hardness = 0.5 + obj_integrity = 100 + max_integrity = 100 /obj/structure/mineral_door/transparent opacity = 0 @@ -228,20 +202,21 @@ /obj/structure/mineral_door/transparent/plasma/proc/TemperatureAct() atmos_spawn_air("plasma=500;TEMP=1000") - Dismantle(1) + deconstruct(FALSE) /obj/structure/mineral_door/transparent/diamond name = "diamond door" icon_state = "diamond" sheetType = /obj/item/stack/sheet/mineral/diamond - hardness = 10 + obj_integrity = 1000 + max_integrity = 1000 /obj/structure/mineral_door/wood name = "wood door" icon_state = "wood" - hardness = 1 openSound = 'sound/effects/doorcreaky.ogg' closeSound = 'sound/effects/doorcreaky.ogg' sheetType = /obj/item/stack/sheet/mineral/wood - resistance_flags = 0 - burntime = 30 + resistance_flags = FLAMMABLE + obj_integrity = 200 + max_integrity = 200 diff --git a/code/game/objects/structures/mirror.dm b/code/game/objects/structures/mirror.dm index f6c5c6691d4..4df0630d7b9 100644 --- a/code/game/objects/structures/mirror.dm +++ b/code/game/objects/structures/mirror.dm @@ -6,11 +6,13 @@ icon_state = "mirror" density = 0 anchored = 1 - var/shattered = 0 + obj_integrity = 200 + max_integrity = 200 + integrity_failure = 100 /obj/structure/mirror/attack_hand(mob/user) - if(shattered || !Adjacent(user)) + if(broken || !Adjacent(user)) return if(ishuman(user)) @@ -41,22 +43,23 @@ H.update_hair() -/obj/structure/mirror/proc/shatter() - icon_state = "mirror_broke" - playsound(src, "shatter", 70, 1) - desc = "Oh no, seven years of bad luck!" - shattered = 1 - - -/obj/structure/mirror/bullet_act(obj/item/projectile/P) - . = ..() - take_damage(P.damage, P.damage_type, 0) +/obj/structure/mirror/obj_break(damage_flag) + if(!broken && !(flags & NODECONSTRUCT)) + icon_state = "mirror_broke" + playsound(src, "shatter", 70, 1) + desc = "Oh no, seven years of bad luck!" + broken = 1 +/obj/structure/mirror/deconstruct(disassembled = TRUE) + if(!(flags & NODECONSTRUCT)) + if(!disassembled) + new /obj/item/weapon/shard( src.loc ) + qdel(src) /obj/structure/mirror/attackby(obj/item/I, mob/living/user, params) if(istype(I, /obj/item/weapon/weldingtool) && user.a_intent != "harm") var/obj/item/weapon/weldingtool/WT = I - if(shattered) + if(broken) user.changeNext_move(CLICK_CD_MELEE) if(WT.remove_fuel(0, user)) user << "You begin repairing [src]..." @@ -65,57 +68,19 @@ if(!user || !WT || !WT.isOn()) return user << "You repair [src]." - shattered = 0 + broken = 0 icon_state = initial(icon_state) desc = initial(desc) else return ..() -/obj/structure/mirror/attacked_by(obj/item/I, mob/living/user) - ..() - take_damage(I.force, I.damtype) - -/obj/structure/mirror/ex_act(severity) - switch(severity) - if(1) - qdel(src) - if(2) - if(prob(50)) - qdel(src) - else - take_damage(5) - if(3) - if(prob(75)) - take_damage(5) - -/obj/structure/mirror/proc/take_damage(damage, damage_type = BRUTE, sound_effect = 1) +/obj/structure/mirror/play_attack_sound(damage_amount, damage_type = BRUTE, damage_flag = 0) switch(damage_type) if(BRUTE) + playsound(src.loc, 'sound/effects/hit_on_shattered_glass.ogg', 70, 1) if(BURN) - else - return - if(!shattered) - if(damage) - shatter() - else if(sound_effect) - playsound(src.loc, 'sound/effects/hit_on_shattered_glass.ogg', 70, 1) + playsound(src.loc, 'sound/effects/hit_on_shattered_glass.ogg', 70, 1) -/obj/structure/mirror/proc/attack_generic(mob/living/user) - user.changeNext_move(CLICK_CD_MELEE) - user.do_attack_animation(src) - user.visible_message("[user] smashes [src]!") - take_damage(5) - -/obj/structure/mirror/attack_alien(mob/living/user) - attack_generic(user) - -/obj/structure/mirror/attack_animal(mob/living/simple_animal/M) - if(!M.melee_damage_upper && !M.obj_damage) - return - attack_generic(M) - -/obj/structure/mirror/attack_slime(mob/living/user) - attack_generic(user) /obj/structure/mirror/magic name = "magic mirror" diff --git a/code/game/objects/structures/morgue.dm b/code/game/objects/structures/morgue.dm index c16ae3f1401..5f1441e38f5 100644 --- a/code/game/objects/structures/morgue.dm +++ b/code/game/objects/structures/morgue.dm @@ -17,6 +17,8 @@ icon_state = "morgue1" density = 1 anchored = 1 + obj_integrity = 400 + max_integrity = 400 var/obj/structure/tray/connected = null var/locked = 0 @@ -77,6 +79,10 @@ else return ..() +/obj/structure/bodycontainer/deconstruct(disassembled = TRUE) + new /obj/item/stack/sheet/metal (loc, 5) + qdel(src) + /obj/structure/bodycontainer/container_resist() open() @@ -202,9 +208,10 @@ var/global/list/crematoriums = new/list() new /obj/effect/decal/cleanable/ash(src) sleep(30) - locked = 0 - update_icon() - playsound(src.loc, 'sound/machines/ding.ogg', 50, 1) //you horrible people + if(!qdeleted(src)) + locked = 0 + update_icon() + playsound(src.loc, 'sound/machines/ding.ogg', 50, 1) //you horrible people /* @@ -219,6 +226,8 @@ var/global/list/crematoriums = new/list() var/obj/structure/bodycontainer/connected = null anchored = 1 pass_flags = LETPASSTHROW + obj_integrity = 350 + max_integrity = 350 /obj/structure/tray/Destroy() if(connected) @@ -227,6 +236,10 @@ var/global/list/crematoriums = new/list() connected = null return ..() +/obj/structure/tray/deconstruct(disassembled = TRUE) + new /obj/item/stack/sheet/metal (loc, 2) + qdel(src) + /obj/structure/tray/attack_paw(mob/user) return src.attack_hand(user) diff --git a/code/game/objects/structures/noticeboard.dm b/code/game/objects/structures/noticeboard.dm index de2b2a7d24e..c58b11f2186 100644 --- a/code/game/objects/structures/noticeboard.dm +++ b/code/game/objects/structures/noticeboard.dm @@ -5,6 +5,8 @@ icon_state = "nboard00" density = 0 anchored = 1 + obj_integrity = 150 + max_integrity = 150 var/notices = 0 /obj/structure/noticeboard/initialize() @@ -76,4 +78,8 @@ else usr << browse("[P.name][P.info]", "window=[P.name]") onclose(usr, "[P.name]") - return + +/obj/structure/noticeboard/deconstruct(disassembled = TRUE) + if(!(flags & NODECONSTRUCT)) + new /obj/item/stack/sheet/metal (loc, 1) + qdel(src) diff --git a/code/game/objects/structures/signs.dm b/code/game/objects/structures/signs.dm index bf634f55443..5ee7786c3a9 100644 --- a/code/game/objects/structures/signs.dm +++ b/code/game/objects/structures/signs.dm @@ -4,17 +4,24 @@ opacity = 0 density = 0 layer = SIGN_LAYER + obj_integrity = 100 + max_integrity = 100 + armor = list(melee = 50, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 50, acid = 50) /obj/structure/sign/basic name = "blank sign" desc = "How can signs be real if our eyes aren't real?" icon_state = "backing" -/obj/structure/sign/ex_act(severity, target) - qdel(src) - -/obj/structure/sign/blob_act(obj/structure/blob/B) - qdel(src) +/obj/structure/sign/play_attack_sound(damage_amount, damage_type = BRUTE, damage_flag = 0) + switch(damage_type) + if(BRUTE) + if(damage_amount) + playsound(src.loc, 'sound/weapons/slash.ogg', 80, 1) + else + playsound(loc, 'sound/weapons/tap.ogg', 50, 1) + if(BURN) + playsound(loc, 'sound/items/welder.ogg', 80, 1) /obj/structure/sign/attackby(obj/item/O, mob/user, params) if(istype(O, /obj/item/weapon/wrench)) @@ -87,7 +94,7 @@ icon = 'icons/obj/decals.dmi' icon_state = "backing" w_class = 3 - resistance_flags = 0 + resistance_flags = FLAMMABLE var/sign_path = /obj/structure/sign/basic //the type of sign that will be created when placed on a turf /obj/item/sign_backing/afterattack(atom/target, mob/user, proximity) @@ -105,6 +112,8 @@ /obj/structure/sign/map name = "station map" desc = "A framed picture of the station." + obj_integrity = 500 + max_integrity = 500 /obj/structure/sign/map/left icon_state = "map-left" diff --git a/code/game/objects/structures/statues.dm b/code/game/objects/structures/statues.dm index acbaa96531b..fdf0ca8a919 100644 --- a/code/game/objects/structures/statues.dm +++ b/code/game/objects/structures/statues.dm @@ -8,7 +8,7 @@ icon_state = "" density = 1 anchored = 0 - var/health = 100 + obj_integrity = 100 var/oreAmount = 7 var/mineralType = "metal" @@ -53,7 +53,7 @@ return user.visible_message("[user] slices apart the [name].", \ "You slice apart the [name].") - Dismantle(1) + deconstruct(FALSE) else if(istype(W, /obj/item/weapon/pickaxe/drill/jackhammer)) var/obj/item/weapon/pickaxe/drill/jackhammer/D = W @@ -74,14 +74,10 @@ playsound(loc, 'sound/items/Welder2.ogg', 50, 1) user.visible_message("[user] slices apart the [name].", \ "You slice apart the [name]!") - Dismantle(1) + deconstruct(FALSE) else return ..() -/obj/structure/statue/attacked_by(obj/item/I, mob/living/user) - ..() - take_damage(I.force, I.damtype) - /obj/structure/statue/attack_hand(mob/living/user) user.changeNext_move(CLICK_CD_MELEE) add_fingerprint(user) @@ -91,62 +87,33 @@ /obj/structure/statue/CanAtmosPass() return !density -/obj/structure/statue/bullet_act(obj/item/projectile/P) - . = ..() - take_damage(P.damage, P.damage_type, 0) - -/obj/structure/statue/proc/take_damage(damage, damage_type = BRUTE, sound_effect = 1) - switch(damage_type) - if(BRUTE) - if(sound_effect) - if(damage) - playsound(loc, 'sound/weapons/smash.ogg', 50, 1) - else - playsound(loc, 'sound/weapons/tap.ogg', 50, 1) - if(BURN) - if(sound_effect) - playsound(loc, 'sound/items/Welder.ogg', 40, 1) +/obj/structure/statue/deconstruct(disassembled = TRUE) + if(!(flags & NODECONSTRUCT)) + if(disassembled) + if (mineralType == "metal") + var/ore = /obj/item/stack/sheet/metal + for(var/i = 1, i <= oreAmount, i++) + new ore(get_turf(src)) + else + var/ore = text2path("/obj/item/stack/sheet/mineral/[mineralType]") + for(var/i = 1, i <= oreAmount, i++) + new ore(get_turf(src)) else - return - health -= damage - if(health <= 0) - Dismantle(1) - -/obj/structure/statue/proc/Dismantle(devastated = 0) - if(!devastated) - if (mineralType == "metal") - var/ore = /obj/item/stack/sheet/metal - for(var/i = 1, i <= oreAmount, i++) - new ore(get_turf(src)) - else - var/ore = text2path("/obj/item/stack/sheet/mineral/[mineralType]") - for(var/i = 1, i <= oreAmount, i++) - new ore(get_turf(src)) - else - if (mineralType == "metal") - var/ore = /obj/item/stack/sheet/metal - for(var/i = 3, i <= oreAmount, i++) - new ore(get_turf(src)) - else - var/ore = text2path("/obj/item/stack/sheet/mineral/[mineralType]") - for(var/i = 3, i <= oreAmount, i++) - new ore(get_turf(src)) + if (mineralType == "metal") + var/ore = /obj/item/stack/sheet/metal + for(var/i = 3, i <= oreAmount, i++) + new ore(get_turf(src)) + else + var/ore = text2path("/obj/item/stack/sheet/mineral/[mineralType]") + for(var/i = 3, i <= oreAmount, i++) + new ore(get_turf(src)) qdel(src) -/obj/structure/statue/ex_act(severity = 1) - switch(severity) - if(1) - Dismantle(1) - if(2) - take_damage(rand(60,110), BRUTE, 0) - if(3) - take_damage(10, BRUTE, 0) - //////////////////////////////////////STATUES///////////////////////////////////////////////////////////// ////////////////////////uranium/////////////////////////////////// /obj/structure/statue/uranium - health = 300 + obj_integrity = 300 luminosity = 2 mineralType = "uranium" var/last_event = 0 @@ -191,7 +158,7 @@ ////////////////////////////plasma/////////////////////////////////////////////////////////////////////// /obj/structure/statue/plasma - health = 200 + obj_integrity = 200 mineralType = "plasma" desc = "This statue is suitably made from plasma." @@ -231,7 +198,7 @@ /obj/structure/statue/plasma/proc/PlasmaBurn() atmos_spawn_air("plasma=400;TEMP=1000") - Dismantle(1) + deconstruct(FALSE) /obj/structure/statue/plasma/proc/ignite(exposed_temperature) if(exposed_temperature > 300) @@ -240,7 +207,7 @@ //////////////////////gold/////////////////////////////////////// /obj/structure/statue/gold - health = 300 + obj_integrity = 300 mineralType = "gold" desc = "This is a highly valuable statue made from gold." @@ -267,7 +234,7 @@ //////////////////////////silver/////////////////////////////////////// /obj/structure/statue/silver - health = 300 + obj_integrity = 300 mineralType = "silver" desc = "This is a valuable statue made from silver." @@ -294,7 +261,7 @@ /////////////////////////diamond///////////////////////////////////////// /obj/structure/statue/diamond - health = 1000 + obj_integrity = 1000 mineralType = "diamond" desc = "This is a very expensive diamond statue" @@ -313,7 +280,7 @@ ////////////////////////bananium/////////////////////////////////////// /obj/structure/statue/bananium - health = 300 + obj_integrity = 300 mineralType = "bananium" desc = "A bananium statue with a small engraving:'HOOOOOOONK'." var/spam_flag = 0 @@ -348,7 +315,7 @@ /////////////////////sandstone///////////////////////////////////////// /obj/structure/statue/sandstone - health = 50 + obj_integrity = 50 mineralType = "sandstone" /obj/structure/statue/sandstone/assistant @@ -366,7 +333,7 @@ /////////////////////snow///////////////////////////////////////// /obj/structure/statue/snow - health = 50 + obj_integrity = 50 mineralType = "snow" /obj/structure/statue/snow/snowman diff --git a/code/game/objects/structures/table_frames.dm b/code/game/objects/structures/table_frames.dm index 5a86a818633..e6affabaab5 100644 --- a/code/game/objects/structures/table_frames.dm +++ b/code/game/objects/structures/table_frames.dm @@ -17,6 +17,8 @@ density = 0 anchored = 0 layer = PROJECTILE_HIT_THRESHHOLD_LAYER + obj_integrity = 100 + max_integrity = 100 var/framestack = /obj/item/stack/rods var/framestackamount = 2 @@ -26,9 +28,7 @@ playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) if(do_after(user, 30/I.toolspeed, target = src)) playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1) - for(var/i = 1, i <= framestackamount, i++) - new framestack(get_turf(src)) - qdel(src) + deconstruct(TRUE) else if(istype(I, /obj/item/stack/sheet/plasteel)) var/obj/item/stack/sheet/plasteel/P = I if(P.get_amount() < 1) @@ -77,6 +77,10 @@ else return ..() +/obj/structure/table_frame/deconstruct(disassembled = TRUE) + new framestack(get_turf(src), framestackamount) + qdel(src) + /obj/structure/table_frame/narsie_act() if(prob(20)) new /obj/structure/table_frame/wood(src.loc) @@ -96,7 +100,7 @@ icon_state = "wood_frame" framestack = /obj/item/stack/sheet/mineral/wood framestackamount = 2 - resistance_flags = 0 + resistance_flags = FLAMMABLE /obj/structure/table_frame/wood/attackby(obj/item/I, mob/user, params) if(istype(I, /obj/item/stack/sheet/mineral/wood)) diff --git a/code/game/objects/structures/tables_racks.dm b/code/game/objects/structures/tables_racks.dm index 067ea45c404..14c70be238a 100644 --- a/code/game/objects/structures/tables_racks.dm +++ b/code/game/objects/structures/tables_racks.dm @@ -29,7 +29,9 @@ var/buildstackamount = 1 var/framestackamount = 2 var/deconstruction_ready = 1 - var/health = 100 + obj_integrity = 100 + max_integrity = 100 + integrity_failure = 30 smooth = SMOOTH_TRUE canSmoothWith = list(/obj/structure/table, /obj/structure/table/reinforced) @@ -44,18 +46,6 @@ queue_smooth(src) queue_smooth_neighbors(src) -/obj/structure/table/ex_act(severity, target) - switch(severity) - if(1) - qdel(src) - if(2) - take_damage(rand(80,120), BRUTE, 0) - if(3) - take_damage(rand(40,80), BRUTE, 0) - -/obj/structure/table/blob_act(obj/structure/blob/B) - take_damage(rand(75,150), BRUTE, 0) - /obj/structure/table/narsie_act() if(prob(20)) new /obj/structure/table/wood(src.loc) @@ -63,44 +53,10 @@ /obj/structure/table/ratvar_act() new /obj/structure/table/reinforced/brass(src.loc) -/obj/structure/table/mech_melee_attack(obj/mecha/M) - playsound(src.loc, 'sound/weapons/punch4.ogg', 50, 1) - visible_message("[M.name] smashes [src]!") - take_damage(200, M.damtype, 0) - -/obj/structure/table/attack_alien(mob/living/user) - user.changeNext_move(CLICK_CD_MELEE) - user.do_attack_animation(src) - playsound(src.loc, 'sound/weapons/bladeslice.ogg', 50, 1) - visible_message("[user] slices [src]!") - take_damage(100, BRUTE, 0) - - -/obj/structure/table/attack_animal(mob/living/simple_animal/user) - user.changeNext_move(CLICK_CD_MELEE) - user.do_attack_animation(src) - if(user.melee_damage_upper || user.obj_damage) - var/dmg_dealt = user.melee_damage_upper - if(user.obj_damage) - dmg_dealt = user.obj_damage - if(user.environment_smash) - dmg_dealt = 100 - visible_message("[user] smashes [src]!") - playsound(src.loc, 'sound/weapons/Genhit.ogg', 50, 1) - take_damage(dmg_dealt, user.melee_damage_type, 0) - /obj/structure/table/attack_paw(mob/user) attack_hand(user) -/obj/structure/table/attack_hulk(mob/living/carbon/human/user) - ..(user, 1) - playsound(src, 'sound/effects/meteorimpact.ogg', 100, 1) - visible_message("[user] smashes [src]!") - user.say(pick(";RAAAAAAAARGH!", ";HNNNNNNNNNGGGGGGH!", ";GWAAAAAAAARRRHHH!", "NNNNNNNNGGGGGGGGHH!", ";AAAAAAARRRGH!" )) - take_damage(rand(180,280), BRUTE, 0) - return 1 - /obj/structure/table/attack_hand(mob/living/user) if(user.a_intent == "grab" && user.pulling && isliving(user.pulling)) var/mob/living/pushed_mob = user.pulling @@ -118,10 +74,6 @@ /obj/structure/table/attack_tk() // no telehulk sorry return -/obj/structure/table/bullet_act(obj/item/projectile/P) - . = ..() - take_damage(P.damage, P.damage_type, 0) - /obj/structure/table/CanPass(atom/movable/mover, turf/target, height=0) if(height==0) return 1 @@ -151,11 +103,18 @@ /obj/structure/table/attackby(obj/item/I, mob/user, params) if(!(flags & NODECONSTRUCT)) if(istype(I, /obj/item/weapon/screwdriver) && deconstruction_ready) - table_deconstruct(user, 1) + user << "You start disassembling [src]..." + playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) + if(do_after(user, 20, target = src)) + deconstruct(TRUE) return if(istype(I, /obj/item/weapon/wrench) && deconstruction_ready) - table_deconstruct(user, 0) + user << "You start deconstructing [src]..." + playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) + if(do_after(user, 40, target = src)) + playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1) + deconstruct(TRUE, 1) return if(istype(I, /obj/item/weapon/storage/bag/tray)) @@ -185,62 +144,18 @@ else return ..() -/obj/structure/table/attacked_by(obj/item/I, mob/living/user) - ..() - take_damage(I.force, I.damtype) -/obj/structure/table/proc/take_damage(damage, damage_type = BRUTE, sound_effect = 1) - switch(damage_type) - if(BRUTE) - if(sound_effect) - if(damage) - playsound(loc, 'sound/weapons/smash.ogg', 50, 1) - else - playsound(loc, 'sound/weapons/tap.ogg', 50, 1) - if(BURN) - if(sound_effect) - playsound(loc, 'sound/items/Welder.ogg', 40, 1) - else - return - health -= damage - if(health <= 0) - table_destroy() - -/* - * TABLE DESTRUCTION/DECONSTRUCTION - */ - - - -/obj/structure/table/proc/table_destroy() +/obj/structure/table/deconstruct(disassembled = TRUE, wrench_disassembly = 0) if(!(flags & NODECONSTRUCT)) var/turf/T = get_turf(src) - for(var/i = 1, i <= framestackamount, i++) - new framestack(T) - for(var/i = 1, i <= buildstackamount, i++) - new buildstack(T) + new buildstack(T, buildstackamount) + if(!wrench_disassembly) + new frame(T) + else + new framestack(T, framestackamount) qdel(src) -/obj/structure/table/proc/table_deconstruct(mob/user, disassembling = 0) - if(flags & NODECONSTRUCT) - return - if(disassembling) - user << "You start disassembling [src]..." - playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) - if(do_after(user, 20, target = src)) - new frame(src.loc) - for(var/i = 1, i <= buildstackamount, i++) - new buildstack(get_turf(src)) - qdel(src) - else - user << "You start deconstructing [src]..." - playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) - if(do_after(user, 40, target = src)) - playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1) - table_destroy() - - /* * Glass tables */ @@ -251,7 +166,10 @@ icon_state = "glass_table" buildstack = /obj/item/stack/sheet/glass canSmoothWith = null - health = 50 + obj_integrity = 70 + max_integrity = 70 + resistance_flags = ACID_PROOF + armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 80, acid = 100) var/list/debris = list() /obj/structure/table/glass/New() @@ -298,6 +216,20 @@ M.Weaken(5) qdel(src) +/obj/structure/table/glass/deconstruct(disassembled = TRUE, wrench_disassembly = 0) + if(!(flags & NODECONSTRUCT)) + if(disassembled) + ..() + return + else + var/turf/T = get_turf(src) + playsound(T, "shatter", 50, 1) + for(var/X in debris) + var/atom/movable/AM = X + AM.forceMove(T) + debris -= AM + qdel(src) + /obj/structure/table/glass/narsie_act() color = NARSIE_WINDOW_COLOUR for(var/obj/item/weapon/shard/S in debris) @@ -315,8 +247,9 @@ frame = /obj/structure/table_frame/wood framestack = /obj/item/stack/sheet/mineral/wood buildstack = /obj/item/stack/sheet/mineral/wood - resistance_flags = 0 - burntime = 20 + resistance_flags = FLAMMABLE + obj_integrity = 70 + max_integrity = 70 canSmoothWith = list(/obj/structure/table/wood, /obj/structure/table/wood/poker, /obj/structure/table/wood/bar) @@ -348,10 +281,6 @@ icon = 'icons/obj/smooth_structures/fancy_table.dmi' //so that the tables place correctly in the map editor ..() -/obj/structure/table/wood/fancy/burn() //basically made out of metal - new frame(loc) - qdel(src) - /* * Reinforced tables */ @@ -363,8 +292,10 @@ deconstruction_ready = 0 buildstack = /obj/item/stack/sheet/plasteel canSmoothWith = list(/obj/structure/table/reinforced, /obj/structure/table) - health = 200 - armor = list(melee = 10, bullet = 10, laser = 10, energy = 100, bomb = 20, bio = 0, rad = 0, fire = 0, acid = 70) + obj_integrity = 200 + max_integrity = 200 + integrity_failure = 50 + armor = list(melee = 10, bullet = 30, laser = 30, energy = 100, bomb = 20, bio = 0, rad = 0, fire = 80, acid = 70) /obj/structure/table/reinforced/attackby(obj/item/weapon/W, mob/user, params) if(istype(W, /obj/item/weapon/weldingtool)) @@ -406,7 +337,7 @@ animate(src, color = previouscolor, time = 8) /obj/structure/table/reinforced/brass/ratvar_act() - health = initial(health) + obj_integrity = max_integrity /* * Surgery Tables @@ -463,27 +394,8 @@ density = 1 anchored = 1 pass_flags = LETPASSTHROW //You can throw objects over this, despite it's density. - var/health = 20 - -/obj/structure/rack/ex_act(severity, target) - switch(severity) - if(1) - qdel(src) - if(2) - if(prob(50)) - rack_destroy() - else - qdel(src) - if(3) - take_damage(rand(5,25), BRUTE, 0) - -/obj/structure/rack/blob_act(obj/structure/blob/B) - rack_destroy() - - -/obj/structure/rack/mech_melee_attack(obj/mecha/M) - if(..()) - take_damage(M.force*2) + obj_integrity = 20 + max_integrity = 20 /obj/structure/rack/CanPass(atom/movable/mover, turf/target, height=0) if(height==0) return 1 @@ -512,7 +424,7 @@ /obj/structure/rack/attackby(obj/item/weapon/W, mob/user, params) if (istype(W, /obj/item/weapon/wrench) && !(flags&NODECONSTRUCT)) playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) - rack_destroy() + deconstruct(TRUE) return if(user.a_intent == "harm") return ..() @@ -520,78 +432,35 @@ W.Move(loc) return 1 -/obj/structure/rack/attacked_by(obj/item/I, mob/living/user) - ..() - take_damage(I.force, I.damtype) - /obj/structure/rack/attack_paw(mob/living/user) attack_hand(user) -/obj/structure/rack/attack_hulk(mob/living/carbon/human/user) - ..(user, 1) - rack_destroy() - return 1 - /obj/structure/rack/attack_hand(mob/living/user) user.changeNext_move(CLICK_CD_MELEE) user.do_attack_animation(src) user.visible_message("[user] kicks [src].", \ "You kick [src].") - take_damage(rand(4,8), BRUTE) - -/obj/structure/rack/attack_alien(mob/living/user) - user.changeNext_move(CLICK_CD_MELEE) - user.do_attack_animation(src) - playsound(src.loc, 'sound/weapons/bladeslice.ogg', 50, 1) - visible_message("[user] slices [src] apart.") - rack_destroy() - - -/obj/structure/rack/attack_animal(mob/living/simple_animal/user) - user.changeNext_move(CLICK_CD_MELEE) - user.do_attack_animation(src) - if(user.melee_damage_upper || user.obj_damage) - var/dmg_dealt = user.melee_damage_upper - if(user.obj_damage) - dmg_dealt = user.obj_damage - if(user.environment_smash) - playsound(src, 'sound/effects/meteorimpact.ogg', 100, 1) - visible_message("[user] smashes [src] apart.") - rack_destroy() - else - take_damage(dmg_dealt, user.melee_damage_type) + take_damage(rand(4,8), BRUTE, "melee", 1) /obj/structure/rack/attack_tk() // no telehulk sorry return -/obj/structure/rack/bullet_act(obj/item/projectile/P) - . = ..() - take_damage(P.damage, P.damage_type, 0) - -/obj/structure/rack/proc/take_damage(damage, damage_type = BRUTE, sound_effect = 1) +/obj/structure/rack/play_attack_sound(damage_amount, damage_type = BRUTE, damage_flag = 0) switch(damage_type) if(BRUTE) - if(sound_effect) - if(damage) - playsound(loc, 'sound/items/dodgeball.ogg', 80, 1) - else - playsound(loc, 'sound/weapons/tap.ogg', 50, 1) + if(damage_amount) + playsound(loc, 'sound/items/dodgeball.ogg', 80, 1) + else + playsound(loc, 'sound/weapons/tap.ogg', 50, 1) if(BURN) - if(sound_effect) - playsound(loc, 'sound/items/Welder.ogg', 40, 1) - else - return - health -= damage - if(health <= 0) - rack_destroy() - + playsound(loc, 'sound/items/Welder.ogg', 40, 1) /* * Rack destruction */ -/obj/structure/rack/proc/rack_destroy() +/obj/structure/rack/deconstruct(disassembled = TRUE) if(!(flags&NODECONSTRUCT)) density = 0 var/obj/item/weapon/rack_parts/newparts = new(loc) diff --git a/code/game/objects/structures/tank_dispenser.dm b/code/game/objects/structures/tank_dispenser.dm index 17c4d9861ac..1a95786b56a 100644 --- a/code/game/objects/structures/tank_dispenser.dm +++ b/code/game/objects/structures/tank_dispenser.dm @@ -7,6 +7,8 @@ icon_state = "dispenser" density = 1 anchored = 1 + obj_integrity = 300 + max_integrity = 300 var/oxygentanks = TANK_DISPENSER_CAPACITY var/plasmatanks = TANK_DISPENSER_CAPACITY @@ -48,6 +50,9 @@ oxygentanks++ else full = TRUE + else if(istype(I, /obj/item/weapon/wrench)) + default_unfasten_wrench(user, I, time = 20) + return else if(user.a_intent != "harm") user << "[I] does not fit into [src]." return @@ -95,4 +100,13 @@ . = TRUE update_icon() + +/obj/structure/tank_dispenser/deconstruct(disassembled = TRUE) + if(!(flags & NODECONSTRUCT)) + for(var/X in src) + var/obj/item/I = X + I.forceMove(loc) + new /obj/item/stack/sheet/metal (loc, 2) + qdel(src) + #undef TANK_DISPENSER_CAPACITY \ No newline at end of file diff --git a/code/game/objects/structures/watercloset.dm b/code/game/objects/structures/watercloset.dm index 69f0fbc1fbd..35f7a4c56f1 100644 --- a/code/game/objects/structures/watercloset.dm +++ b/code/game/objects/structures/watercloset.dm @@ -274,6 +274,7 @@ if(istype(O,/obj/item)) var/obj/item/I = O + I.acid_level = 0 I.extinguish() @@ -371,6 +372,9 @@ else wash_obj(G) +/obj/machinery/shower/deconstruct(disassembled = TRUE) + new /obj/item/stack/sheet/metal (loc, 3) + qdel(src) /obj/machinery/shower/proc/check_heat(mob/living/carbon/C) if(watertemp == "freezing") @@ -494,12 +498,18 @@ return 1 busy = 0 O.clean_blood() + O.acid_level = 0 user.visible_message("[user] washes [O] using [src].", \ "You wash [O] using [src].") return 1 else return ..() +/obj/structure/sink/deconstruct(disassembled = TRUE) + new /obj/item/stack/sheet/metal (loc, 3) + qdel(src) + + /obj/structure/sink/kitchen name = "kitchen sink" @@ -538,7 +548,6 @@ density = 0 var/open = TRUE - /obj/structure/curtain/proc/toggle() open = !open update_icon() @@ -561,3 +570,16 @@ toggle() ..() +/obj/structure/curtain/deconstruct(disassembled = TRUE) + new /obj/item/stack/sheet/cloth (loc, 3) + qdel(src) + +/obj/structure/curtain/play_attack_sound(damage_amount, damage_type = BRUTE, damage_flag = 0) + switch(damage_type) + if(BRUTE) + if(damage_amount) + playsound(src.loc, 'sound/weapons/slash.ogg', 80, 1) + else + playsound(loc, 'sound/weapons/tap.ogg', 50, 1) + if(BURN) + playsound(loc, 'sound/items/welder.ogg', 80, 1) \ No newline at end of file diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm index f6a9cd7b922..008ae109c1d 100644 --- a/code/game/objects/structures/window.dm +++ b/code/game/objects/structures/window.dm @@ -7,8 +7,8 @@ pressure_resistance = 4*ONE_ATMOSPHERE anchored = 1 //initially is 0 for tile smoothing flags = ON_BORDER - var/maxhealth = 25 - var/health = 0 + max_integrity = 25 + obj_integrity = 25 var/ini_dir = null var/state = 0 var/reinf = 0 @@ -19,6 +19,8 @@ var/image/crack_overlay var/list/debris = list() can_be_unanchored = 1 + resistance_flags = ACID_PROOF + armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 80, acid = 100) /obj/structure/window/examine(mob/user) ..() @@ -26,7 +28,7 @@ /obj/structure/window/New(Loc,re=0) ..() - health = maxhealth + obj_integrity = max_integrity if(re) reinf = re if(reinf) @@ -52,22 +54,6 @@ debris += new /obj/item/stack/rods(src, rods) -/obj/structure/window/bullet_act(obj/item/projectile/P) - . = ..() - take_damage(P.damage, P.damage_type, 0) - -/obj/structure/window/ex_act(severity, target) - switch(severity) - if(1) - qdel(src) - if(2) - shatter() - if(3) - take_damage(rand(25,75), BRUTE, 0) - -/obj/structure/window/blob_act(obj/structure/blob/B) - take_damage(rand(75,150), BRUTE, 0) - /obj/structure/window/narsie_act() color = NARSIE_WINDOW_COLOUR for(var/obj/item/weapon/shard/shard in debris) @@ -82,7 +68,7 @@ /obj/structure/window/singularity_pull(S, current_size) if(current_size >= STAGE_FIVE) - shatter() + deconstruct(FALSE) /obj/structure/window/setDir(direct) if(!fulltile) @@ -106,35 +92,16 @@ return 0 return 1 - -/obj/structure/window/hitby(AM as mob|obj) - ..() - var/tforce = 0 - if(ismob(AM)) - tforce = 40 - - else if(isobj(AM)) - var/obj/item/I = AM - tforce = I.throwforce - if(reinf) - tforce *= 0.25 - take_damage(tforce) - /obj/structure/window/attack_tk(mob/user) user.changeNext_move(CLICK_CD_MELEE) user.visible_message("Something knocks on [src].") add_fingerprint(user) playsound(loc, 'sound/effects/Glassknock.ogg', 50, 1) -/obj/structure/window/attack_hulk(mob/living/carbon/human/user) +/obj/structure/window/attack_hulk(mob/living/carbon/human/user, does_attack_animation = 0) if(!can_be_reached(user)) - return - ..(user, 1) - user.say(pick(";RAAAAAAAARGH!", ";HNNNNNNNNNGGGGGGH!", ";GWAAAAAAAARRRHHH!", "NNNNNNNNGGGGGGGGHH!", ";AAAAAAARRRGH!")) - user.visible_message("[user] smashes through [src]!") - add_fingerprint(user) - take_damage(50) - return 1 + return 1 + ..() /obj/structure/window/attack_hand(mob/user) if(!can_be_reached(user)) @@ -148,31 +115,10 @@ return attack_hand(user) -/obj/structure/window/proc/attack_generic(mob/user, damage = 0, damage_type = BRUTE) //used by attack_alien, attack_animal, and attack_slime +/obj/structure/window/attack_generic(mob/user, damage_amount = 0, damage_type = BRUTE, damage_flag = 0, sound_effect = 1) //used by attack_alien, attack_animal, and attack_slime if(!can_be_reached(user)) return - user.do_attack_animation(src) - user.changeNext_move(CLICK_CD_MELEE) - user.visible_message("[user] smashes into [src]!") - take_damage(damage, damage_type) - -/obj/structure/window/attack_alien(mob/living/user) - attack_generic(user, 15) - -/obj/structure/window/attack_animal(mob/living/simple_animal/M) - if(!M.melee_damage_upper && !M.obj_damage) - return - if(M.obj_damage) - attack_generic(M, M.obj_damage, M.melee_damage_type) - else - attack_generic(M, M.melee_damage_upper, M.melee_damage_type) - - -/obj/structure/window/attack_slime(mob/living/simple_animal/slime/user) - if(!user.is_adult) - return - attack_generic(user, rand(10, 15)) - + ..() /obj/structure/window/attackby(obj/item/I, mob/living/user, params) if(!can_be_reached(user)) @@ -181,12 +127,12 @@ add_fingerprint(user) if(istype(I, /obj/item/weapon/weldingtool) && user.a_intent == "help") var/obj/item/weapon/weldingtool/WT = I - if(health < maxhealth) + if(obj_integrity < max_integrity) if(WT.remove_fuel(0,user)) user << "You begin repairing [src]..." playsound(loc, 'sound/items/Welder.ogg', 40, 1) if(do_after(user, 40/I.toolspeed, target = src)) - health = maxhealth + obj_integrity = max_integrity playsound(loc, 'sound/items/Welder2.ogg', 50, 1) update_nearby_icons() user << "You repair [src]." @@ -256,14 +202,10 @@ return return ..() - -/obj/structure/window/attacked_by(obj/item/I, mob/living/user) - ..() - take_damage(I.force, I.damtype) - /obj/structure/window/mech_melee_attack(obj/mecha/M) - if(..()) - take_damage(M.force, M.damtype) + if(!can_be_reached()) + return + ..() /obj/structure/window/proc/can_be_reached(mob/user) @@ -274,35 +216,35 @@ return 0 return 1 -/obj/structure/window/proc/take_damage(damage, damage_type = BRUTE, sound_effect = 1) - if(reinf) - damage *= 0.5 +/obj/structure/window/take_damage(damage_amount, damage_type = BRUTE, damage_flag = 0, sound_effect = 1) + . = ..() + if(.) //received damage + update_nearby_icons() + +/obj/structure/window/play_attack_sound(damage_amount, damage_type = BRUTE, damage_flag = 0) switch(damage_type) if(BRUTE) - if(sound_effect) - playsound(loc, 'sound/effects/Glasshit.ogg', 90, 1) + if(damage_amount) + playsound(src.loc, 'sound/effects/Glasshit.ogg', 75, 1) + else + playsound(src, 'sound/weapons/tap.ogg', 50, 1) if(BURN) - if(sound_effect) - playsound(src.loc, 'sound/items/Welder.ogg', 100, 1) - else - return - health -= damage - update_nearby_icons() - if(health <= 0) - shatter() + playsound(src.loc, 'sound/items/Welder.ogg', 100, 1) -/obj/structure/window/proc/shatter() + +/obj/structure/window/deconstruct(disassembled = TRUE) if(qdeleted(src)) return - playsound(src, "shatter", 70, 1) - var/turf/T = loc + if(!disassembled) + playsound(src, "shatter", 70, 1) + var/turf/T = loc - if(!(flags & NODECONSTRUCT)) - for(var/i in debris) - var/obj/item/I = i + if(!(flags & NODECONSTRUCT)) + for(var/i in debris) + var/obj/item/I = i - I.loc = T - transfer_fingerprints_to(I) + I.loc = T + transfer_fingerprints_to(I) qdel(src) update_nearby_icons() @@ -402,7 +344,7 @@ if(!fulltile) return - var/ratio = health / maxhealth + var/ratio = obj_integrity / max_integrity ratio = Ceiling(ratio*4) * 25 if(smooth) @@ -416,7 +358,7 @@ /obj/structure/window/temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume) if(exposed_temperature > T0C + (reinf ? 1600 : 800)) - take_damage(round(exposed_volume / 100), BURN, 0) + take_damage(round(exposed_volume / 100), BURN, 0, 0) ..() /obj/structure/window/storage_contents_dump_act(obj/item/weapon/storage/src_object, mob/user) @@ -434,8 +376,8 @@ name = "reinforced window" icon_state = "rwindow" reinf = 1 - armor = list(melee = 50, bullet = 0, laser = 0, energy = 0, bomb = 25, bio = 100, rad = 100, fire = 0, acid = 0) - maxhealth = 50 + armor = list(melee = 50, bullet = 0, laser = 0, energy = 0, bomb = 25, bio = 100, rad = 100, fire = 80, acid = 100) + max_integrity = 50 explosion_block = 1 /obj/structure/window/reinforced/tinted @@ -448,13 +390,13 @@ icon_state = "fwindow" -/* Full Tile Windows (more health) */ +/* Full Tile Windows (more obj_integrity) */ /obj/structure/window/fulltile icon = 'icons/obj/smooth_structures/window.dmi' icon_state = "window" dir = NORTHEAST - maxhealth = 50 + max_integrity = 50 fulltile = 1 smooth = SMOOTH_TRUE canSmoothWith = list(/obj/structure/window/fulltile, /obj/structure/window/reinforced/fulltile, /obj/structure/window/reinforced/tinted/fulltile) @@ -463,7 +405,7 @@ icon = 'icons/obj/smooth_structures/reinforced_window.dmi' icon_state = "r_window" dir = NORTHEAST - maxhealth = 100 + max_integrity = 100 fulltile = 1 smooth = SMOOTH_TRUE canSmoothWith = list(/obj/structure/window/fulltile, /obj/structure/window/reinforced/fulltile, /obj/structure/window/reinforced/tinted/fulltile) @@ -481,7 +423,7 @@ /obj/structure/window/reinforced/fulltile/ice icon = 'icons/obj/smooth_structures/rice_window.dmi' icon_state = "ice_window" - maxhealth = 150 + max_integrity = 150 canSmoothWith = list(/obj/structure/window/fulltile, /obj/structure/window/reinforced/fulltile, /obj/structure/window/reinforced/tinted/fulltile, /obj/structure/window/reinforced/fulltile/ice) level = 3 @@ -491,11 +433,11 @@ icon = 'icons/obj/smooth_structures/shuttle_window.dmi' icon_state = "shuttle_window" dir = NORTHEAST - maxhealth = 100 + max_integrity = 100 wtype = "shuttle" fulltile = 1 reinf = 1 - armor = list(melee = 50, bullet = 0, laser = 0, energy = 0, bomb = 25, bio = 100, rad = 100, fire = 0, acid = 0) + armor = list(melee = 50, bullet = 0, laser = 0, energy = 0, bomb = 25, bio = 100, rad = 100, fire = 80, acid = 100) smooth = SMOOTH_TRUE canSmoothWith = null explosion_block = 1 @@ -512,7 +454,7 @@ desc = "A paper-thin pane of translucent yet reinforced brass." icon = 'icons/obj/smooth_structures/clockwork_window.dmi' icon_state = "clockwork_window_single" - maxhealth = 100 + max_integrity = 100 explosion_block = 2 //fancy AND hard to destroy. the most useful combination. var/made_glow = FALSE @@ -546,7 +488,7 @@ return ..() /obj/structure/window/reinforced/clockwork/ratvar_act() - health = maxhealth + obj_integrity = max_integrity update_icon() return 0 @@ -563,4 +505,4 @@ canSmoothWith = null fulltile = 1 dir = NORTHEAST - maxhealth = 150 + max_integrity = 150 diff --git a/code/game/shuttle_engines.dm b/code/game/shuttle_engines.dm index 086ab95e10c..6fae87f145f 100644 --- a/code/game/shuttle_engines.dm +++ b/code/game/shuttle_engines.dm @@ -2,6 +2,7 @@ /obj/structure/shuttle name = "shuttle" icon = 'icons/turf/shuttle.dmi' + resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ACID_PROOF /obj/structure/shuttle/engine name = "engine" diff --git a/code/game/turfs/closed.dm b/code/game/turfs/closed.dm index 23b37751181..e22fb4fa86e 100644 --- a/code/game/turfs/closed.dm +++ b/code/game/turfs/closed.dm @@ -10,6 +10,9 @@ icon = 'icons/turf/walls.dmi' explosion_block = 50 +/turf/closed/indestructible/acid_act(acidpwr, acid_volume, acid_id) + return 0 + /turf/closed/indestructible/oldshuttle name = "strange shuttle wall" icon = 'icons/turf/shuttleold.dmi' diff --git a/code/game/turfs/simulated/floor.dm b/code/game/turfs/simulated/floor.dm index 4385b13c8d3..2e8cc58622e 100644 --- a/code/game/turfs/simulated/floor.dm +++ b/code/game/turfs/simulated/floor.dm @@ -182,3 +182,7 @@ var/list/icons_to_ignore_at_floor_init = list("damaged1","damaged2","damaged3"," /turf/open/floor/initialize() ..() MakeDirty() + +/turf/open/floor/acid_melt() + ChangeTurf(baseturf) + diff --git a/code/game/turfs/simulated/floor/plating.dm b/code/game/turfs/simulated/floor/plating.dm index 91c259c7061..a5d13a2f3d5 100644 --- a/code/game/turfs/simulated/floor/plating.dm +++ b/code/game/turfs/simulated/floor/plating.dm @@ -272,16 +272,15 @@ for(var/thing in thing_to_check) if(isobj(thing)) var/obj/O = thing - if(O.resistance_flags & LAVA_PROOF || O.throwing) - continue - if(istype(O, /obj/effect/decal/cleanable/ash)) //So we don't get stuck burning the same ash pile forever - qdel(O) + if((O.resistance_flags & (LAVA_PROOF|ON_FIRE|INDESTRUCTIBLE)) || O.throwing) continue . = 1 - if(O.resistance_flags & FIRE_PROOF) - O.resistance_flags &= ~FIRE_PROOF //Even fireproof things burn up in lava - - O.fire_act() + if(!(O.resistance_flags & FLAMMABLE)) + O.resistance_flags |= FLAMMABLE //Even fireproof things burn up in lava + O.resistance_flags = ~FIRE_PROOF + if(O.armor["fire"] > 50) //obj with 100% fire armor still get slowly burned away. + O.armor["fire"] = 50 + O.fire_act(10000, 1000) else if (isliving(thing)) diff --git a/code/game/turfs/simulated/walls.dm b/code/game/turfs/simulated/walls.dm index aec76bc3ba0..6f5c4cb53b8 100644 --- a/code/game/turfs/simulated/walls.dm +++ b/code/game/turfs/simulated/walls.dm @@ -108,14 +108,13 @@ dismantle_wall(1) return -/turf/closed/wall/attack_hulk(mob/user) +/turf/closed/wall/attack_hulk(mob/user, does_attack_animation = 0) ..(user, 1) if(prob(hardness)) playsound(src, 'sound/effects/meteorimpact.ogg', 100, 1) user << text("You smash through the wall.") user.say(pick(";RAAAAAAAARGH!", ";HNNNNNNNNNGGGGGGH!", ";GWAAAAAAAARRRHHH!", "NNNNNNNNGGGGGGGGHH!", ";AAAAAAARRRGH!" )) dismantle_wall(1) - else playsound(src, 'sound/effects/bang.ogg', 50, 1) user << text("You punch the wall.") @@ -266,3 +265,7 @@ /turf/closed/wall/storage_contents_dump_act(obj/item/weapon/storage/src_object, mob/user) return 0 + +/turf/closed/wall/acid_melt() + dismantle_wall(1) + diff --git a/code/game/turfs/space/space.dm b/code/game/turfs/space/space.dm index f48eb683c59..950236f982c 100644 --- a/code/game/turfs/space/space.dm +++ b/code/game/turfs/space/space.dm @@ -173,4 +173,8 @@ /turf/open/space/is_transition_turf() if(destination_x || destination_y || destination_z) - return 1 \ No newline at end of file + return 1 + + +/turf/open/space/acid_act(acidpwr, acid_volume) + return 0 \ No newline at end of file diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm index 2c4c0577749..3a522e10267 100644 --- a/code/game/turfs/turf.dm +++ b/code/game/turfs/turf.dm @@ -155,7 +155,7 @@ if(!can_have_cabling()) for(var/obj/structure/cable/C in contents) - C.Deconstruct() + C.deconstruct() queue_smooth_neighbors(src) @@ -212,7 +212,7 @@ M.adjustBruteLoss(damage) M.Paralyse(damage/5) for(var/obj/mecha/M in src) - M.take_damage(damage*2, "brute") + M.take_damage(damage*2, BRUTE, "melee", 1) /turf/proc/Bless() flags |= NOJAUNT @@ -328,3 +328,24 @@ /turf/proc/is_transition_turf() return + + +/turf/acid_act(acidpwr, acid_volume) + . = 1 + var/has_acid_effect = 0 + for(var/obj/O in src) + if(intact && O.level == 1) //hidden under the floor + continue + if(istype(O, /obj/effect/acid)) + var/obj/effect/acid/A = O + A.acid_level = min(A.level + acid_volume * acidpwr, 12000)//capping acid level to limit power of the acid + has_acid_effect = 1 + continue + O.acid_act(acidpwr, acid_volume) + if(!has_acid_effect) + new /obj/effect/acid(src, acidpwr, acid_volume) + + +/turf/proc/acid_melt() + return + diff --git a/code/modules/admin/secrets.dm b/code/modules/admin/secrets.dm index cce111cdbfb..1065b1fa29c 100644 --- a/code/modules/admin/secrets.dm +++ b/code/modules/admin/secrets.dm @@ -389,7 +389,7 @@ feedback_add_details("admin_secrets_fun_used","BO") message_admins("[key_name_admin(usr)] broke all lights") for(var/obj/machinery/light/L in machines) - L.broken() + L.break_light_tube() if("anime") if(!check_rights(R_FUN)) diff --git a/code/modules/assembly/mousetrap.dm b/code/modules/assembly/mousetrap.dm index 31ecea937bd..833068afdab 100644 --- a/code/modules/assembly/mousetrap.dm +++ b/code/modules/assembly/mousetrap.dm @@ -59,7 +59,7 @@ affecting = H.get_bodypart(type) H.Stun(3) if(affecting) - if(affecting.take_damage(1, 0)) + if(affecting.receive_damage(1, 0)) H.update_damage_overlays() else if(ismouse(target)) var/mob/living/simple_animal/mouse/M = target diff --git a/code/modules/atmospherics/environmental/LINDA_fire.dm b/code/modules/atmospherics/environmental/LINDA_fire.dm index 7ce4eba77b1..326ff220334 100644 --- a/code/modules/atmospherics/environmental/LINDA_fire.dm +++ b/code/modules/atmospherics/environmental/LINDA_fire.dm @@ -69,6 +69,8 @@ if(!istype(location) || !(location.air)) return 0 + location.active_hotspot = src + if(volume > CELL_VOLUME*0.95) bypassing = 1 else @@ -87,9 +89,9 @@ location.assume_air(affected) for(var/A in loc) - var/atom/item = A - if(item && item != src) // It's possible that the item is deleted in temperature_expose - item.fire_act(null, temperature, volume) + var/atom/AT = A + if(AT && AT != src) // It's possible that the item is deleted in temperature_expose + AT.fire_act(temperature, volume) return 0 @@ -175,4 +177,4 @@ /obj/effect/hotspot/Crossed(mob/living/L) ..() if(isliving(L)) - L.fire_act() + L.fire_act(temperature, volume) diff --git a/code/modules/atmospherics/machinery/airalarm.dm b/code/modules/atmospherics/machinery/airalarm.dm index 9d2c5627bc2..f73dc6b4cc9 100644 --- a/code/modules/atmospherics/machinery/airalarm.dm +++ b/code/modules/atmospherics/machinery/airalarm.dm @@ -55,6 +55,11 @@ active_power_usage = 8 power_channel = ENVIRON req_access = list(access_atmospherics) + obj_integrity = 250 + max_integrity = 250 + integrity_failure = 80 + armor = list(melee = 0, bullet = 0, laser = 0, energy = 100, bomb = 0, bio = 100, rad = 100, fire = 90, acid = 30) + resistance_flags = 0 var/danger_level = 0 var/mode = AALARM_MODE_SCRUBBING @@ -628,8 +633,7 @@ if(istype(W, /obj/item/weapon/wirecutters) && panel_open && wires.is_all_cut()) playsound(src.loc, 'sound/items/Wirecutter.ogg', 50, 1) user << "You cut the final wires." - var/obj/item/stack/cable_coil/cable = new /obj/item/stack/cable_coil(loc) - cable.amount = 5 + new /obj/item/stack/cable_coil(loc, 5) buildstage = 1 update_icon() return @@ -713,4 +717,17 @@ return emagged = TRUE visible_message("Sparks fly out of the [src]!", "You emag the [src], disabling its safeties.") - playsound(src.loc, 'sound/effects/sparks4.ogg', 50, 1) \ No newline at end of file + playsound(src.loc, 'sound/effects/sparks4.ogg', 50, 1) + +/obj/machinery/airalarm/obj_break(damage_flag) + ..() + update_icon() + +/obj/machinery/airalarm/deconstruct(disassembled = TRUE) + if(!(flags & NODECONSTRUCT)) + new /obj/item/stack/sheet/metal(loc, 2) + var/obj/item/I = new /obj/item/weapon/electronics/airalarm(loc) + if(!disassembled) + I.obj_integrity = I.max_integrity * 0.5 + new /obj/item/stack/cable_coil(loc, 3) + qdel(src) \ No newline at end of file diff --git a/code/modules/atmospherics/machinery/atmosmachinery.dm b/code/modules/atmospherics/machinery/atmosmachinery.dm index 0101bd9d415..a3bb43227bc 100644 --- a/code/modules/atmospherics/machinery/atmosmachinery.dm +++ b/code/modules/atmospherics/machinery/atmosmachinery.dm @@ -16,6 +16,10 @@ Pipelines + Other Objects -> Pipe network power_channel = ENVIRON on_blueprints = TRUE layer = GAS_PIPE_LAYER //under wires + armor = list(melee = 25, bullet = 10, laser = 10, energy = 100, bomb = 0, bio = 100, rad = 100, fire = 100, acid = 70) + resistance_flags = FIRE_PROOF + obj_integrity = 200 + max_integrity = 200 var/nodealert = 0 var/can_unwrench = 0 var/initialize_directions = 0 @@ -152,11 +156,10 @@ Pipelines + Other Objects -> Pipe network //You unwrenched a pipe full of pressure? Let's splat you into the wall, silly. if(unsafe_wrenching) unsafe_pressure_release(user, internal_pressure) - Deconstruct() + deconstruct(TRUE) else return ..() - /obj/machinery/atmospherics/proc/can_unwrench(mob/user) return can_unwrench @@ -179,13 +182,16 @@ Pipelines + Other Objects -> Pipe network user.visible_message("[user] is sent flying by pressure!","The pressure sends you flying!") user.throw_at(target, range, speed) -/obj/machinery/atmospherics/Deconstruct() - if(can_unwrench) - stored.loc = src.loc - transfer_fingerprints_to(stored) - stored = null - - qdel(src) +/obj/machinery/atmospherics/deconstruct(disassembled = TRUE) + if(!(flags & NODECONSTRUCT)) + if(can_unwrench) + if(stored) + stored.forceMove(loc) + if(!disassembled) + stored.obj_integrity = stored.max_integrity * 0.5 + transfer_fingerprints_to(stored) + stored = null + ..() /obj/machinery/atmospherics/proc/getpipeimage(iconset, iconstate, direction, col=rgb(255,255,255)) @@ -226,7 +232,7 @@ Pipelines + Other Objects -> Pipe network /obj/machinery/atmospherics/singularity_pull(S, current_size) if(current_size >= STAGE_FIVE) - Deconstruct() + deconstruct(FALSE) //Find a connecting /obj/machinery/atmospherics in specified direction @@ -288,3 +294,9 @@ Pipelines + Other Objects -> Pipe network //Used for certain children of obj/machinery/atmospherics to not show pipe vision when mob is inside it. /obj/machinery/atmospherics/proc/can_see_pipes() return 1 + +/obj/machinery/atmospherics/fire_act(exposed_temperature, exposed_volume) + var/turf/T = src.loc + if(T && T.intact && level == 1) //protected from fire when hidden behind a floor. + return + ..() diff --git a/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm b/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm index 9ec331734ac..e5c82a06462 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm @@ -4,6 +4,9 @@ icon_state = "cell-off" density = 1 anchored = 1 + obj_integrity = 350 + max_integrity = 350 + armor = list(melee = 0, bullet = 0, laser = 0, energy = 100, bomb = 0, bio = 100, rad = 100, fire = 30, acid = 30) var/on = FALSE state_open = FALSE @@ -50,9 +53,16 @@ conduction_coefficient = initial(conduction_coefficient) * C /obj/machinery/atmospherics/components/unary/cryo_cell/Destroy() - beaker = null + if(beaker) + qdel(beaker) + beaker = null return ..() +/obj/machinery/atmospherics/components/unary/cryo_cell/on_deconstruction() + if(beaker) + beaker.forceMove(loc) + beaker = null + /obj/machinery/atmospherics/components/unary/cryo_cell/update_icon() if(panel_open) icon_state = "cell-o" @@ -137,7 +147,7 @@ on = FALSE ..() if(beaker) - beaker.loc = src + beaker.forceMove(src) /obj/machinery/atmospherics/components/unary/cryo_cell/close_machine(mob/living/carbon/user) if((isnull(user) || istype(user)) && state_open && !panel_open) @@ -253,7 +263,7 @@ . = TRUE if("ejectbeaker") if(beaker) - beaker.loc = loc + beaker.forceMove(loc) beaker = null . = TRUE update_icon() diff --git a/code/modules/atmospherics/machinery/components/unary_devices/tank.dm b/code/modules/atmospherics/machinery/components/unary_devices/tank.dm index cee595c5466..af070c4091b 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/tank.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/tank.dm @@ -4,6 +4,8 @@ icon_state = "generic" name = "pressure tank" desc = "A large vessel containing pressurized gas." + obj_integrity = 800 + max_integrity = 800 var/volume = 10000 //in liters, 1 meters by 1 meters by 2 meters density = 1 var/gas_type = 0 @@ -46,4 +48,4 @@ var/datum/gas_mixture/air_contents = AIR1 air_contents.assert_gases("o2", "n2") air_contents.gases["o2"][MOLES] = AIR_CONTENTS * 0.2 - air_contents.gases["n2"][MOLES] = AIR_CONTENTS * 0.8 \ No newline at end of file + air_contents.gases["n2"][MOLES] = AIR_CONTENTS * 0.8 diff --git a/code/modules/atmospherics/machinery/components/unary_devices/thermomachine.dm b/code/modules/atmospherics/machinery/components/unary_devices/thermomachine.dm index 74a0a279188..2a62684c873 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/thermomachine.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/thermomachine.dm @@ -6,6 +6,9 @@ var/icon_state_open = "cold_off" density = TRUE anchored = TRUE + obj_integrity = 300 + max_integrity = 300 + armor = list(melee = 0, bullet = 0, laser = 0, energy = 100, bomb = 0, bio = 100, rad = 100, fire = 80, acid = 30) var/on = FALSE var/min_temperature = 0 diff --git a/code/modules/atmospherics/machinery/other/meter.dm b/code/modules/atmospherics/machinery/other/meter.dm index 4f94c2a2b4e..4bde239d26c 100644 --- a/code/modules/atmospherics/machinery/other/meter.dm +++ b/code/modules/atmospherics/machinery/other/meter.dm @@ -11,6 +11,10 @@ use_power = 1 idle_power_usage = 2 active_power_usage = 4 + obj_integrity = 150 + max_integrity = 150 + armor = list(melee = 0, bullet = 0, laser = 0, energy = 100, bomb = 0, bio = 100, rad = 100, fire = 40, acid = 0) + /obj/machinery/meter/New() ..() diff --git a/code/modules/atmospherics/machinery/pipes/heat_exchange/he_pipes.dm b/code/modules/atmospherics/machinery/pipes/heat_exchange/he_pipes.dm index 9585fb6b8fb..8f6467cd09a 100644 --- a/code/modules/atmospherics/machinery/pipes/heat_exchange/he_pipes.dm +++ b/code/modules/atmospherics/machinery/pipes/heat_exchange/he_pipes.dm @@ -1,4 +1,4 @@ -/obj/machinery/atmospherics/pipe/heat_exchanging/ +/obj/machinery/atmospherics/pipe/heat_exchanging icon = 'icons/obj/atmospherics/pipes/heat.dmi' level = 2 var/initialize_directions_he diff --git a/code/modules/atmospherics/machinery/pipes/pipes.dm b/code/modules/atmospherics/machinery/pipes/pipes.dm index fc412840ebe..6401feaf454 100644 --- a/code/modules/atmospherics/machinery/pipes/pipes.dm +++ b/code/modules/atmospherics/machinery/pipes/pipes.dm @@ -97,4 +97,9 @@ N.update_icon() /obj/machinery/atmospherics/pipe/returnPipenets() - . = list(parent) \ No newline at end of file + . = list(parent) + +/obj/machinery/atmospherics/pipe/run_obj_armor(damage_amount, damage_type, damage_flag = 0, attack_dir) + if(damage_flag == "melee" && damage_amount < 12) + return 0 + . = ..() \ No newline at end of file diff --git a/code/modules/atmospherics/machinery/portable/canister.dm b/code/modules/atmospherics/machinery/portable/canister.dm index df48ca85a8d..0e722acfba4 100644 --- a/code/modules/atmospherics/machinery/portable/canister.dm +++ b/code/modules/atmospherics/machinery/portable/canister.dm @@ -17,8 +17,10 @@ var/gas_type = "" var/release_pressure = ONE_ATMOSPHERE - armor = list(melee = 50, bullet = 50, laser = 50, energy = 100, bomb = 10, bio = 100, rad = 100, fire = 10, acid = 0) - var/health = 100 + armor = list(melee = 50, bullet = 50, laser = 50, energy = 100, bomb = 10, bio = 100, rad = 100, fire = 80, acid = 50) + obj_integrity = 250 + max_integrity = 250 + integrity_failure = 100 pressure_resistance = 7 * ONE_ATMOSPHERE var/temperature_resistance = 1000 + T0C var/starter_temp @@ -182,40 +184,56 @@ /obj/machinery/portable_atmospherics/canister/temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume) if(exposed_temperature > temperature_resistance) - take_damage(5, BRUTE, 0) + take_damage(5, BURN, 0) -/obj/machinery/portable_atmospherics/canister/take_damage(damage, damage_type = BRUTE, sound_effect = 1) - switch(damage_type) - if(BRUTE) - if(sound_effect) - if(damage) - playsound(loc, 'sound/weapons/smash.ogg', 50, 1) - else - playsound(loc, 'sound/weapons/tap.ogg', 50, 1) - if(BURN) - if(sound_effect) - playsound(src.loc, 'sound/items/Welder.ogg', 100, 1) + +/obj/machinery/portable_atmospherics/canister/deconstruct(disassembled = TRUE) + if(!(flags & NODECONSTRUCT)) + if(!(stat & BROKEN)) + canister_break() + if(disassembled) + new /obj/item/stack/sheet/metal (loc, 10) else - return - if(stat & BROKEN) + new /obj/item/stack/sheet/metal (loc, 5) + qdel(src) + +/obj/machinery/portable_atmospherics/canister/attackby(obj/item/weapon/W, mob/user, params) + if(user.a_intent != "harm" && istype(W, /obj/item/weapon/weldingtool)) + var/obj/item/weapon/weldingtool/WT = W + if(stat & BROKEN) + if(!WT.remove_fuel(0, user)) + return + playsound(loc, 'sound/items/Welder.ogg', 40, 1) + user << "You begin cutting [src] apart..." + if(do_after(user, 30, target = src)) + deconstruct(TRUE) + else + user << "You cannot slice [src] apart when it isn't broken." + return 1 + else + return ..() + +/obj/machinery/portable_atmospherics/canister/obj_break(damage_flag) + if((stat & BROKEN) || (flags & NODECONSTRUCT)) return - health = max( health - damage, 0) - if(!health) - disconnect() - var/datum/gas_mixture/expelled_gas = air_contents.remove(air_contents.total_moles()) - var/turf/T = get_turf(src) - T.assume_air(expelled_gas) - air_update_turf() + canister_break() - stat |= BROKEN - density = 0 - playsound(src.loc, 'sound/effects/spray.ogg', 10, 1, -3) - update_icon() - investigate_log("was destroyed.", "atmos") +/obj/machinery/portable_atmospherics/canister/proc/canister_break() + disconnect() + var/datum/gas_mixture/expelled_gas = air_contents.remove(air_contents.total_moles()) + var/turf/T = get_turf(src) + T.assume_air(expelled_gas) + air_update_turf() - if(holding) - holding.loc = T - holding = null + stat |= BROKEN + density = 0 + playsound(src.loc, 'sound/effects/spray.ogg', 10, 1, -3) + update_icon() + investigate_log("was destroyed.", "atmos") + + if(holding) + holding.forceMove(T) + holding = null /obj/machinery/portable_atmospherics/canister/process_atmos() ..() @@ -236,39 +254,6 @@ air_update_turf() // Update the environment if needed. update_icon() -/obj/machinery/portable_atmospherics/canister/blob_act(obj/structure/blob/B) - take_damage(100, BRUTE, 0) - -/obj/machinery/portable_atmospherics/canister/burn() - take_damage(health, BURN, 1) - ..() - -/obj/machinery/portable_atmospherics/canister/bullet_act(obj/item/projectile/P) - . = ..() - take_damage(P.damage / 2, P.damage_type, 0) - -/obj/machinery/portable_atmospherics/canister/ex_act(severity, target) - switch(severity) - if(1) - if((stat & BROKEN) || prob(30)) - qdel(src) - else - take_damage(100, BRUTE, 0) - if(2) - if(stat & BROKEN) - qdel(src) - else - take_damage(rand(40, 110), BRUTE, 0) - if(3) - take_damage(rand(15, 40), BRUTE, 0) - -/obj/machinery/portable_atmospherics/canister/attacked_by(obj/item/I, mob/user) - if(I.force) - user.visible_message("[user] has hit [src] with [I]!", "You hit [src] with [I]!") - investigate_log("was smacked with \a [I] by [key_name(user)].", "atmos") - add_fingerprint(user) - take_damage(I.force, I.damtype, 1) - /obj/machinery/portable_atmospherics/canister/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, \ datum/tgui/master_ui = null, datum/ui_state/state = physical_state) ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) diff --git a/code/modules/atmospherics/machinery/portable/portable_atmospherics.dm b/code/modules/atmospherics/machinery/portable/portable_atmospherics.dm index 11e65a78165..49baa0e1bf4 100644 --- a/code/modules/atmospherics/machinery/portable/portable_atmospherics.dm +++ b/code/modules/atmospherics/machinery/portable/portable_atmospherics.dm @@ -2,6 +2,10 @@ name = "portable_atmospherics" icon = 'icons/obj/atmos.dmi' use_power = 0 + obj_integrity = 250 + max_integrity = 250 + armor = list(melee = 0, bullet = 0, laser = 0, energy = 100, bomb = 0, bio = 100, rad = 100, fire = 60, acid = 30) + var/datum/gas_mixture/air_contents var/obj/machinery/atmospherics/components/unary/portables_connector/connected_port @@ -106,4 +110,12 @@ else if(istype(W, /obj/item/device/analyzer) && Adjacent(user)) atmosanalyzer_scan(air_contents, user) else - return ..() \ No newline at end of file + return ..() + +/obj/machinery/portable_atmospherics/attacked_by(obj/item/I, mob/user) + if(I.force < 10 && !(stat & BROKEN)) + take_damage(0) + else + investigate_log("was smacked with \a [I] by [key_name(user)].", "atmos") + add_fingerprint(user) + ..() \ No newline at end of file diff --git a/code/modules/awaymissions/gateway.dm b/code/modules/awaymissions/gateway.dm index 8a77545144c..abe092702fa 100644 --- a/code/modules/awaymissions/gateway.dm +++ b/code/modules/awaymissions/gateway.dm @@ -7,7 +7,7 @@ var/obj/machinery/gateway/centerstation/the_gateway = null icon_state = "off" density = 1 anchored = 1 - resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE + resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF var/active = 0 diff --git a/code/modules/awaymissions/mission_code/Academy.dm b/code/modules/awaymissions/mission_code/Academy.dm index 585453a1849..e1bf0b85a37 100644 --- a/code/modules/awaymissions/mission_code/Academy.dm +++ b/code/modules/awaymissions/mission_code/Academy.dm @@ -57,17 +57,22 @@ icon = 'icons/obj/cult.dmi' icon_state = "forge" anchored = 1 - var/health = 200 + obj_integrity = 200 + max_integrity = 200 var/mob/living/current_wizard = null var/next_check = 0 var/cooldown = 600 var/faction = "wizard" - var/broken = 0 var/braindead_check = 0 /obj/structure/academy_wizard_spawner/New() START_PROCESSING(SSobj, src) +/obj/structure/academy_wizard_spawner/Destroy() + if(!broken) + STOP_PROCESSING(SSobj, src) + return ..() + /obj/structure/academy_wizard_spawner/process() if(next_check < world.time) if(!current_wizard) @@ -127,28 +132,12 @@ give_control() -/obj/structure/academy_wizard_spawner/proc/update_status() - if(health<0) +/obj/structure/academy_wizard_spawner/deconstruct(disassembled = TRUE) + if(!broken) + broken = 1 visible_message("[src] breaks down!") icon_state = "forge_off" STOP_PROCESSING(SSobj, src) - broken = 1 - -/obj/structure/academy_wizard_spawner/attackby(obj/item/weapon/W, mob/living/user, params) - add_fingerprint(user) - user.changeNext_move(CLICK_CD_MELEE) - if(!broken) - health -= W.force - update_status() - ..() - -/obj/structure/academy_wizard_spawner/bullet_act(obj/item/projectile/Proj) - if(!broken) - if((Proj.damage_type == BRUTE || Proj.damage_type == BURN)) - health -= Proj.damage - update_status() - ..() - return /datum/outfit/wizard/academy name = "Academy Wizard" diff --git a/code/modules/awaymissions/mission_code/Cabin.dm b/code/modules/awaymissions/mission_code/Cabin.dm index 2f386c471e2..7fbb1dc0f47 100644 --- a/code/modules/awaymissions/mission_code/Cabin.dm +++ b/code/modules/awaymissions/mission_code/Cabin.dm @@ -62,7 +62,7 @@ active = FALSE toggleFirepit() -/obj/structure/firepit/fire_act() +/obj/structure/firepit/fire_act(exposed_temperature, exposed_volume) if(!active) active = TRUE toggleFirepit() diff --git a/code/modules/awaymissions/mission_code/challenge.dm b/code/modules/awaymissions/mission_code/challenge.dm index 75d240ec777..329978827af 100644 --- a/code/modules/awaymissions/mission_code/challenge.dm +++ b/code/modules/awaymissions/mission_code/challenge.dm @@ -22,6 +22,7 @@ icon_state = "emitter" anchored = 1 density = 1 + resistance_flags = INDESTRUCTIBLE | FIRE_PROOF | ACID_PROOF use_power = 0 idle_power_usage = 0 diff --git a/code/modules/clothing/chameleon.dm b/code/modules/clothing/chameleon.dm index b57b4ad5927..8068b0ea9aa 100644 --- a/code/modules/clothing/chameleon.dm +++ b/code/modules/clothing/chameleon.dm @@ -159,8 +159,8 @@ origin_tech = "syndicate=2" sensor_mode = 0 //Hey who's this guy on the Syndicate Shuttle?? random_sensor = 0 - resistance_flags = FIRE_PROOF - armor = list(melee = 10, bullet = 10, laser = 10, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 0, acid = 0) + resistance_flags = 0 + armor = list(melee = 10, bullet = 10, laser = 10, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 50, acid = 50) /obj/item/clothing/under/chameleon/New() ..() @@ -176,8 +176,8 @@ item_state = "armor" blood_overlay_type = "armor" origin_tech = "syndicate=2" - resistance_flags = FIRE_PROOF - armor = list(melee = 10, bullet = 10, laser = 10, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 0, acid = 0) + resistance_flags = 0 + armor = list(melee = 10, bullet = 10, laser = 10, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 50, acid = 50) /obj/item/clothing/suit/chameleon/New() ..() @@ -192,8 +192,8 @@ icon_state = "meson" item_state = "meson" origin_tech = "syndicate=2" - resistance_flags = FIRE_PROOF - armor = list(melee = 10, bullet = 10, laser = 10, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 0, acid = 0) + resistance_flags = 0 + armor = list(melee = 10, bullet = 10, laser = 10, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 50, acid = 50) /obj/item/clothing/glasses/chameleon/New() ..() @@ -208,8 +208,8 @@ icon_state = "yellow" item_state = "ygloves" - resistance_flags = FIRE_PROOF - armor = list(melee = 10, bullet = 10, laser = 10, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 0, acid = 0) + resistance_flags = 0 + armor = list(melee = 10, bullet = 10, laser = 10, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 50, acid = 50) /obj/item/clothing/gloves/chameleon/New() ..() @@ -224,8 +224,8 @@ icon_state = "greysoft" item_color = "grey" - resistance_flags = FIRE_PROOF - armor = list(melee = 5, bullet = 5, laser = 5, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 0, acid = 0) + resistance_flags = 0 + armor = list(melee = 5, bullet = 5, laser = 5, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 50, acid = 50) var/datum/action/item_action/chameleon/change/chameleon_action = null @@ -256,8 +256,8 @@ desc = "A face-covering mask that can be connected to an air supply. While good for concealing your identity, it isn't good for blocking gas flow." //More accurate icon_state = "gas_alt" item_state = "gas_alt" - resistance_flags = FIRE_PROOF - armor = list(melee = 5, bullet = 5, laser = 5, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 0, acid = 0) + resistance_flags = 0 + armor = list(melee = 5, bullet = 5, laser = 5, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 50, acid = 50) flags = BLOCK_GAS_SMOKE_EFFECT | MASKINTERNALS flags_inv = HIDEEARS|HIDEEYES|HIDEFACE|HIDEFACIALHAIR @@ -307,9 +307,9 @@ permeability_coefficient = 0.05 flags = NOSLIP origin_tech = "syndicate=2" - resistance_flags = FIRE_PROOF + resistance_flags = 0 pockets = /obj/item/weapon/storage/internal/pocket/shoes - armor = list(melee = 10, bullet = 10, laser = 10, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 0, acid = 0) + armor = list(melee = 10, bullet = 10, laser = 10, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 50, acid = 50) /obj/item/clothing/shoes/chameleon/New() ..() diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm index 510a3a523ed..b10df45b782 100644 --- a/code/modules/clothing/clothing.dm +++ b/code/modules/clothing/clothing.dm @@ -1,6 +1,10 @@ /obj/item/clothing name = "clothing" - resistance_flags = 0 + resistance_flags = FLAMMABLE + obj_integrity = 150 + max_integrity = 150 + integrity_failure = 80 + var/damaged_clothes = 0 //similar to machine's BROKEN stat and structure's broken var var/flash_protect = 0 //Malk: What level of bright light protection item has. 1 = Flashers, Flashes, & Flashbangs | 2 = Welding | -1 = OH GOD WELDING BURNT OUT MY RETINAS var/tint = 0 //Malk: Sets the item's level of visual impairment tint, normally set to the same as flash_protect var/up = 0 // but seperated to allow items to protect but not impair vision, like space helmets @@ -59,6 +63,13 @@ return ..() /obj/item/clothing/attackby(obj/item/W, mob/user, params) + if(damaged_clothes && istype(W, /obj/item/stack/sheet/cloth)) + var/obj/item/stack/sheet/cloth/C = W + C.use(1) + update_clothes_damaged_state(FALSE) + obj_integrity = max_integrity + user << "You fix the damages on [src] with [C]." + return 1 if(pockets) return pockets.attackby(W, user, params) else @@ -110,6 +121,34 @@ user.vars[variable] = user_vars_to_edit[variable] +/obj/item/clothing/examine(mob/user) + ..() + if(damaged_clothes) + user << "It looks damaged!" + +/obj/item/clothing/obj_break(damage_flag) + if(!damaged_clothes) + update_clothes_damaged_state(TRUE) + +var/list/damaged_clothes_icons = list() + +/obj/item/clothing/proc/update_clothes_damaged_state(damaging = TRUE) + var/index = "\ref[initial(icon)]-[initial(icon_state)]" + if(damaging) + damaged_clothes = 1 + var/icon/damaged_clothes_icon = damaged_clothes_icons[index] + if(!damaged_clothes_icon) + damaged_clothes_icon = icon(initial(icon), initial(icon_state), , 1) //we only want to apply damaged effect to the initial icon_state for each object + damaged_clothes_icon.Blend("#fff", ICON_ADD) //fills the icon_state with white (except where it's transparent) + damaged_clothes_icon.Blend(icon('icons/effects/item_damage.dmi', "itemdamaged"), ICON_MULTIPLY) //adds damage effect and the remaining white areas become transparant + damaged_clothes_icon = fcopy_rsc(damaged_clothes_icon) + damaged_clothes_icons[index] = damaged_clothes_icon + add_overlay(damaged_clothes_icon, 1) + else + damaged_clothes = 0 + overlays -= damaged_clothes_icons[index] + priority_overlays -= damaged_clothes_icons[index] + //Ears: currently only used for headsets and earmuffs /obj/item/clothing/ears @@ -117,7 +156,7 @@ w_class = 1 throwforce = 0 slot_flags = SLOT_EARS - resistance_flags = FIRE_PROOF + resistance_flags = 0 /obj/item/clothing/ears/earmuffs name = "earmuffs" @@ -127,7 +166,7 @@ flags = EARBANGPROTECT strip_delay = 15 put_on_delay = 25 - resistance_flags = 0 + resistance_flags = FLAMMABLE //Glasses /obj/item/clothing/glasses @@ -145,7 +184,7 @@ var/vision_correction = 0 //does wearing these glasses correct some of our vision defects? strip_delay = 20 put_on_delay = 25 - resistance_flags = FIRE_PROOF + resistance_flags = 0 /* SEE_SELF // can see self, no matter what SEE_MOBS // can see all mobs, no matter what @@ -175,9 +214,17 @@ BLIND // can't see anything /obj/item/clothing/gloves/worn_overlays(isinhands = FALSE) . = list() if(!isinhands) + if(damaged_clothes) + . += image("icon"='icons/effects/item_damage.dmi', "icon_state"="damagedgloves") if(blood_DNA) . += image("icon"='icons/effects/blood.dmi', "icon_state"="bloodyhands") +/obj/item/clothing/gloves/update_clothes_damaged_state(damaging = TRUE) + ..() + if(ismob(loc)) + var/mob/M = loc + M.update_inv_gloves() + // Called just before an attack_hand(), in mob/UnarmedAttack() /obj/item/clothing/gloves/proc/Touch(atom/A, proximity) return 0 // return 1 to cancel attack_hand() @@ -195,9 +242,18 @@ BLIND // can't see anything /obj/item/clothing/head/worn_overlays(isinhands = FALSE) . = list() if(!isinhands) + if(damaged_clothes) + . += image("icon"='icons/effects/item_damage.dmi', "icon_state"="damagedhelmet") if(blood_DNA) . += image("icon"='icons/effects/blood.dmi', "icon_state"="helmetblood") +/obj/item/clothing/head/update_clothes_damaged_state(damaging = TRUE) + ..() + if(ismob(loc)) + var/mob/M = loc + M.update_inv_head() + + //Mask /obj/item/clothing/mask name = "mask" @@ -213,8 +269,18 @@ BLIND // can't see anything /obj/item/clothing/mask/worn_overlays(isinhands = FALSE) . = list() if(!isinhands) - if(blood_DNA && (body_parts_covered & HEAD)) - . += image("icon"='icons/effects/blood.dmi', "icon_state"="maskblood") + if(body_parts_covered & HEAD) + if(damaged_clothes) + . += image("icon"='icons/effects/item_damage.dmi', "icon_state"="damagedmask") + if(blood_DNA) + . += image("icon"='icons/effects/blood.dmi', "icon_state"="maskblood") + +/obj/item/clothing/mask/update_clothes_damaged_state(damaging = TRUE) + ..() + if(ismob(loc)) + var/mob/M = loc + M.update_inv_wear_mask() + //Override this to modify speech like luchador masks. /obj/item/clothing/mask/proc/speechModification(message) @@ -276,9 +342,16 @@ BLIND // can't see anything else bloody = bloody_shoes[BLOOD_STATE_HUMAN] + if(damaged_clothes) + . += image("icon"='icons/effects/item_damage.dmi', "icon_state"="damagedshoe") if(bloody) . += image("icon"='icons/effects/blood.dmi', "icon_state"="shoeblood") +/obj/item/clothing/shoes/update_clothes_damaged_state(damaging = TRUE) + ..() + if(ismob(loc)) + var/mob/M = loc + M.update_inv_shoes() /obj/item/clothing/shoes/clean_blood() ..() @@ -306,9 +379,17 @@ BLIND // can't see anything /obj/item/clothing/suit/worn_overlays(isinhands = FALSE) . = list() if(!isinhands) + if(damaged_clothes) + . += image("icon"='icons/effects/item_damage.dmi', "icon_state"="damaged[blood_overlay_type]") if(blood_DNA) . += image("icon"='icons/effects/blood.dmi', "icon_state"="[blood_overlay_type]blood") +/obj/item/clothing/suit/update_clothes_damaged_state(damaging = TRUE) + ..() + if(ismob(loc)) + var/mob/M = loc + M.update_inv_wear_suit() + //Spacesuit //Note: Everything in modules/clothing/spacesuits should have the entire suit grouped together. // Meaning the the suit is defined directly after the corrisponding helmet. Just like below! @@ -319,7 +400,7 @@ BLIND // can't see anything flags = STOPSPRESSUREDMAGE | THICKMATERIAL item_state = "spaceold" permeability_coefficient = 0.01 - armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 100, rad = 50, fire = 0, acid = 70) + armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 100, rad = 50, fire = 80, acid = 70) flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDEFACIALHAIR cold_protection = HEAD min_cold_protection_temperature = SPACE_HELM_MIN_TEMP_PROTECT @@ -329,7 +410,7 @@ BLIND // can't see anything strip_delay = 50 put_on_delay = 50 flags_cover = HEADCOVERSEYES | HEADCOVERSMOUTH - resistance_flags = FIRE_PROOF + resistance_flags = 0 /obj/item/clothing/suit/space name = "space suit" @@ -343,7 +424,7 @@ BLIND // can't see anything body_parts_covered = CHEST|GROIN|LEGS|FEET|ARMS|HANDS allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank/internals) slowdown = 1 - armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 100, rad = 50, fire = 0, acid = 70) + armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 100, rad = 50, fire = 80, acid = 70) flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT cold_protection = CHEST | GROIN | LEGS | FEET | ARMS | HANDS min_cold_protection_temperature = SPACE_SUIT_MIN_TEMP_PROTECT @@ -351,7 +432,7 @@ BLIND // can't see anything max_heat_protection_temperature = SPACE_SUIT_MAX_TEMP_PROTECT strip_delay = 80 put_on_delay = 80 - resistance_flags = FIRE_PROOF + resistance_flags = 0 //Under clothing @@ -376,6 +457,9 @@ BLIND // can't see anything . = list() if(!isinhands) + + if(damaged_clothes) + . += image("icon"='icons/effects/item_damage.dmi', "icon_state"="damageduniform") if(blood_DNA) . += image("icon"='icons/effects/blood.dmi', "icon_state"="uniformblood") if(hastie) @@ -387,6 +471,11 @@ BLIND // can't see anything tI.color = hastie.color . += tI +/obj/item/clothing/under/update_clothes_damaged_state(damaging = TRUE) + ..() + if(ismob(loc)) + var/mob/M = loc + M.update_inv_w_uniform() /obj/item/clothing/under/New() if(random_sensor) @@ -464,7 +553,11 @@ BLIND // can't see anything /obj/item/clothing/under/examine(mob/user) ..() - switch(src.sensor_mode) + if(adjusted == ALT_STYLE) + user << "Alt-click on [src] to wear it normally." + else + user << "Alt-click on [src] to wear it casually." + switch(sensor_mode) if(0) user << "Its sensors appear to be disabled." if(1) @@ -573,13 +666,6 @@ BLIND // can't see anything body_parts_covered |= CHEST return adjusted -/obj/item/clothing/under/examine(mob/user) - ..() - if(src.adjusted == ALT_STYLE) - user << "Alt-click on [src] to wear it normally." - else - user << "Alt-click on [src] to wear it casually." - /obj/item/clothing/proc/weldingvisortoggle() //Malk: proc to toggle welding visors on helmets, masks, goggles, etc. if(!can_use(usr)) return @@ -605,3 +691,14 @@ BLIND // can't see anything if(!user.incapacitated()) return 1 return 0 + + +/obj/item/clothing/obj_destruction(damage_flag) + if(damage_flag == "bomb" || damage_flag == "melee") + var/turf/T = get_turf(src) + spawn(1) //so the shred survives potential turf change from the explosion. + var/obj/effect/decal/cleanable/shreds/Shreds = new(T) + Shreds.desc = "The sad remains of what used to be [name]." + deconstruct(FALSE) + else + ..() \ No newline at end of file diff --git a/code/modules/clothing/glasses/glasses.dm b/code/modules/clothing/glasses/glasses.dm index 05206e37108..35098f19800 100644 --- a/code/modules/clothing/glasses/glasses.dm +++ b/code/modules/clothing/glasses/glasses.dm @@ -56,7 +56,8 @@ scan_reagents = 1 //You can see reagents while wearing science goggles actions_types = list(/datum/action/item_action/toggle_research_scanner) glass_colour_type = /datum/client_colour/glass_colour/purple - resistance_flags = FIRE_PROOF | ACID_PROOF + resistance_flags = ACID_PROOF + armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 80, acid = 100) /obj/item/clothing/glasses/science/item_action_slot_check(slot) if(slot == slot_glasses) diff --git a/code/modules/clothing/gloves/color.dm b/code/modules/clothing/gloves/color.dm index 8dc34e005c4..ec0cec172db 100644 --- a/code/modules/clothing/gloves/color.dm +++ b/code/modules/clothing/gloves/color.dm @@ -6,7 +6,7 @@ siemens_coefficient = 0 permeability_coefficient = 0.05 item_color="yellow" - resistance_flags = FIRE_PROOF + resistance_flags = 0 /obj/item/clothing/gloves/color/fyellow //Cheap Chinese Crap desc = "These gloves are cheap knockoffs of the coveted ones - no way this can end badly." @@ -16,7 +16,7 @@ siemens_coefficient = 1 //Set to a default of 1, gets overridden in New() permeability_coefficient = 0.05 item_color="yellow" - resistance_flags = FIRE_PROOF + resistance_flags = 0 /obj/item/clothing/gloves/color/fyellow/New() ..() @@ -32,7 +32,7 @@ min_cold_protection_temperature = GLOVES_MIN_TEMP_PROTECT heat_protection = HANDS max_heat_protection_temperature = GLOVES_MAX_TEMP_PROTECT - resistance_flags = FIRE_PROOF + resistance_flags = 0 var/can_be_cut = 1 /obj/item/clothing/gloves/color/black/hos @@ -70,7 +70,7 @@ desc = "These gloves will protect the wearer from electric shock." siemens_coefficient = 0 permeability_coefficient = 0.05 - resistance_flags = FIRE_PROOF + resistance_flags = 0 /obj/item/clothing/gloves/color/rainbow name = "rainbow gloves" @@ -146,6 +146,7 @@ heat_protection = HANDS max_heat_protection_temperature = GLOVES_MAX_TEMP_PROTECT strip_delay = 60 + armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 70, acid = 50) /obj/item/clothing/gloves/color/latex name = "latex gloves" @@ -156,7 +157,7 @@ permeability_coefficient = 0.01 item_color="white" transfer_prints = TRUE - resistance_flags = FIRE_PROOF + resistance_flags = 0 /obj/item/clothing/gloves/color/latex/nitrile name = "nitrile gloves" diff --git a/code/modules/clothing/gloves/miscellaneous.dm b/code/modules/clothing/gloves/miscellaneous.dm index 47e4f799474..e3b688e9cb4 100644 --- a/code/modules/clothing/gloves/miscellaneous.dm +++ b/code/modules/clothing/gloves/miscellaneous.dm @@ -21,8 +21,8 @@ min_cold_protection_temperature = GLOVES_MIN_TEMP_PROTECT heat_protection = HANDS max_heat_protection_temperature = GLOVES_MAX_TEMP_PROTECT - resistance_flags = FIRE_PROOF - armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 0, acid = 30) + resistance_flags = 0 + armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 70, acid = 30) /obj/item/clothing/gloves/combat name = "combat gloves" @@ -36,8 +36,8 @@ min_cold_protection_temperature = GLOVES_MIN_TEMP_PROTECT heat_protection = HANDS max_heat_protection_temperature = GLOVES_MAX_TEMP_PROTECT - resistance_flags = FIRE_PROOF - armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 0, acid = 50) + resistance_flags = 0 + armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 80, acid = 50) /obj/item/clothing/gloves/bracer @@ -53,5 +53,5 @@ cold_protection = ARMS min_cold_protection_temperature = GLOVES_MIN_TEMP_PROTECT max_heat_protection_temperature = GLOVES_MAX_TEMP_PROTECT - resistance_flags = FIRE_PROOF + resistance_flags = 0 armor = list(melee = 15, bullet = 35, laser = 35, energy = 20, bomb = 35, bio = 35, rad = 35, fire = 0, acid = 0) diff --git a/code/modules/clothing/head/collectable.dm b/code/modules/clothing/head/collectable.dm index 5e61b69a2eb..70dfabdcfcb 100644 --- a/code/modules/clothing/head/collectable.dm +++ b/code/modules/clothing/head/collectable.dm @@ -68,7 +68,7 @@ desc = "A collectable welding helmet. Now with 80% less lead! Not for actual welding. Any welding done while wearing this helmet is done so at the owner's own risk!" icon_state = "welding" item_state = "welding" - resistance_flags = FIRE_PROOF + resistance_flags = 0 /obj/item/clothing/head/collectable/slime name = "collectable slime hat" @@ -137,11 +137,11 @@ desc = "Go Red! I mean Green! I mean Red! No Green!" icon_state = "thunderdome" item_state = "thunderdome" - resistance_flags = FIRE_PROOF + resistance_flags = 0 /obj/item/clothing/head/collectable/swat name = "collectable SWAT helmet" desc = "That's not real blood. That's red paint." //Reference to the actual description icon_state = "swat" item_state = "swat" - resistance_flags = FIRE_PROOF + resistance_flags = 0 diff --git a/code/modules/clothing/head/hardhat.dm b/code/modules/clothing/head/hardhat.dm index 7ea5150f4d1..1d9d2da01a1 100644 --- a/code/modules/clothing/head/hardhat.dm +++ b/code/modules/clothing/head/hardhat.dm @@ -6,7 +6,7 @@ var/brightness_on = 4 //luminosity when on var/on = 0 item_color = "yellow" //Determines used sprites: hardhat[on]_[item_color] and hardhat[on]_[item_color]2 (lying down sprite) - armor = list(melee = 15, bullet = 5, laser = 20,energy = 10, bomb = 20, bio = 10, rad = 20, fire = 0, acid = 50) + armor = list(melee = 15, bullet = 5, laser = 20,energy = 10, bomb = 20, bio = 10, rad = 20, fire = 100, acid = 50) flags_inv = 0 actions_types = list(/datum/action/item_action/toggle_helmet_light) resistance_flags = FIRE_PROOF diff --git a/code/modules/clothing/head/helmet.dm b/code/modules/clothing/head/helmet.dm index 337442a674e..65c6ab20bc6 100644 --- a/code/modules/clothing/head/helmet.dm +++ b/code/modules/clothing/head/helmet.dm @@ -4,14 +4,14 @@ icon_state = "helmet" flags = HEADBANGPROTECT item_state = "helmet" - armor = list(melee = 40, bullet = 30, laser = 30,energy = 10, bomb = 25, bio = 0, rad = 0, fire = 0, acid = 50) + armor = list(melee = 40, bullet = 30, laser = 30,energy = 10, bomb = 25, bio = 0, rad = 0, fire = 50, acid = 50) flags_inv = HIDEEARS cold_protection = HEAD min_cold_protection_temperature = HELMET_MIN_TEMP_PROTECT heat_protection = HEAD max_heat_protection_temperature = HELMET_MAX_TEMP_PROTECT strip_delay = 60 - resistance_flags = FIRE_PROOF + resistance_flags = 0 flags_cover = HEADCOVERSEYES dog_fashion = /datum/dog_fashion/head/helmet @@ -20,9 +20,6 @@ /obj/item/clothing/head/helmet/New() ..() -/obj/item/clothing/head/helmet/emp_act(severity) - ..() - /obj/item/clothing/head/helmet/sec can_flashlight = 1 @@ -31,7 +28,7 @@ desc = "A bulletproof combat helmet that excels in protecting the wearer against traditional projectile weaponry and explosives to a minor extent." icon_state = "helmetalt" item_state = "helmetalt" - armor = list(melee = 15, bullet = 40, laser = 10, energy = 10, bomb = 40, bio = 0, rad = 0, fire = 0, acid = 50) + armor = list(melee = 15, bullet = 40, laser = 10, energy = 10, bomb = 40, bio = 0, rad = 0, fire = 50, acid = 50) can_flashlight = 1 dog_fashion = null @@ -48,7 +45,7 @@ alt_toggle_message = "You push the visor up on" can_toggle = 1 flags = HEADBANGPROTECT - armor = list(melee = 41, bullet = 15, laser = 5,energy = 5, bomb = 5, bio = 2, rad = 0, fire = 0, acid = 50) + armor = list(melee = 41, bullet = 15, laser = 5,energy = 5, bomb = 5, bio = 2, rad = 0, fire = 50, acid = 50) flags_inv = HIDEEARS|HIDEFACE strip_delay = 80 actions_types = list(/datum/action/item_action/toggle) @@ -102,7 +99,7 @@ desc = "An extremely robust, space-worthy helmet in a nefarious red and black stripe pattern." icon_state = "swatsyndie" item_state = "swatsyndie" - armor = list(melee = 40, bullet = 30, laser = 30,energy = 30, bomb = 50, bio = 90, rad = 20, fire = 20, acid = 50) + armor = list(melee = 40, bullet = 30, laser = 30,energy = 30, bomb = 50, bio = 90, rad = 20, fire = 50, acid = 50) cold_protection = HEAD min_cold_protection_temperature = SPACE_HELM_MIN_TEMP_PROTECT heat_protection = HEAD @@ -123,7 +120,7 @@ flags_inv = HIDEEARS|HIDEHAIR icon_state = "thunderdome" item_state = "thunderdome" - armor = list(melee = 40, bullet = 30, laser = 25,energy = 10, bomb = 25, bio = 10, rad = 0, fire = 0, acid = 50) + armor = list(melee = 40, bullet = 30, laser = 25,energy = 10, bomb = 25, bio = 10, rad = 0, fire = 50, acid = 50) cold_protection = HEAD min_cold_protection_temperature = SPACE_HELM_MIN_TEMP_PROTECT heat_protection = HEAD @@ -136,7 +133,8 @@ desc = "An ancient helmet made of bronze and leather." flags_inv = HIDEEARS|HIDEHAIR flags_cover = HEADCOVERSEYES - armor = list(melee = 25, bullet = 0, laser = 25, energy = 10, bomb = 10, bio = 0, rad = 0, fire = 0, acid = 50) + armor = list(melee = 25, bullet = 0, laser = 25, energy = 10, bomb = 10, bio = 0, rad = 0, fire = 100, acid = 50) + resistance_flags = FIRE_PROOF icon_state = "roman" item_state = "roman" strip_delay = 100 @@ -212,7 +210,7 @@ desc = "An intimidating tribal helmet, it doesn't look very comfortable." flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE flags_cover = HEADCOVERSEYES - armor = list(melee = 25, bullet = 25, laser = 25, energy = 10, bomb = 10, bio = 5, rad = 20, fire = 20, acid = 20) + armor = list(melee = 25, bullet = 25, laser = 25, energy = 10, bomb = 10, bio = 5, rad = 20, fire = 40, acid = 20) icon_state = "skull" item_state = "skull" strip_delay = 100 diff --git a/code/modules/clothing/head/jobs.dm b/code/modules/clothing/head/jobs.dm index f013c37db74..ebde71d8005 100644 --- a/code/modules/clothing/head/jobs.dm +++ b/code/modules/clothing/head/jobs.dm @@ -26,7 +26,7 @@ icon_state = "captain" item_state = "that" flags_inv = 0 - armor = list(melee = 25, bullet = 15, laser = 25, energy = 10, bomb = 25, bio = 0, rad = 0, fire = 0, acid = 50) + armor = list(melee = 25, bullet = 15, laser = 25, energy = 10, bomb = 25, bio = 0, rad = 0, fire = 50, acid = 50) strip_delay = 60 dog_fashion = /datum/dog_fashion/head/captain @@ -44,7 +44,7 @@ name = "head of personnel's cap" icon_state = "hopcap" desc = "The symbol of true bureaucratic micromanagement." - armor = list(melee = 25, bullet = 15, laser = 25, energy = 10, bomb = 25, bio = 0, rad = 0, fire = 0, acid = 50) + armor = list(melee = 25, bullet = 15, laser = 25, energy = 10, bomb = 25, bio = 0, rad = 0, fire = 50, acid = 50) dog_fashion = /datum/dog_fashion/head/hop //Chaplain @@ -59,7 +59,7 @@ name = "detective's fedora" desc = "There's only one man who can sniff out the dirty stench of crime, and he's likely wearing this hat." icon_state = "detective" - armor = list(melee = 25, bullet = 5, laser = 25, energy = 10, bomb = 0, bio = 0, rad = 0, fire = 0, acid = 50) + armor = list(melee = 25, bullet = 5, laser = 25, energy = 10, bomb = 0, bio = 0, rad = 0, fire = 30, acid = 50) var/candy_cooldown = 0 pockets = /obj/item/weapon/storage/internal/pocket/small/detective dog_fashion = /datum/dog_fashion/head/detective @@ -96,7 +96,7 @@ name = "head of security cap" desc = "The robust standard-issue cap of the Head of Security. For showing the officers who's in charge." icon_state = "hoscap" - armor = list(melee = 40, bullet = 30, laser = 25, energy = 10, bomb = 25, bio = 10, rad = 0, fire = 0, acid = 60) + armor = list(melee = 40, bullet = 30, laser = 25, energy = 10, bomb = 25, bio = 10, rad = 0, fire = 50, acid = 60) strip_delay = 80 /obj/item/clothing/head/HoS/beret @@ -108,7 +108,7 @@ name = "warden's police hat" desc = "It's a special armored hat issued to the Warden of a security force. Protects the head from impacts." icon_state = "policehelm" - armor = list(melee = 40, bullet = 30, laser = 30, energy = 10, bomb = 25, bio = 0, rad = 0, fire = 0, acid = 60) + armor = list(melee = 40, bullet = 30, laser = 30, energy = 10, bomb = 25, bio = 0, rad = 0, fire = 30, acid = 60) strip_delay = 60 dog_fashion = /datum/dog_fashion/head/warden @@ -116,7 +116,7 @@ name = "security beret" desc = "A robust beret with the security insignia emblazoned on it. Uses reinforced fabric to offer sufficent protection." icon_state = "beret_badge" - armor = list(melee = 40, bullet = 30, laser = 30,energy = 10, bomb = 25, bio = 0, rad = 0, fire = 0, acid = 50) + armor = list(melee = 40, bullet = 30, laser = 30,energy = 10, bomb = 25, bio = 0, rad = 0, fire = 20, acid = 50) strip_delay = 60 dog_fashion = null @@ -129,7 +129,7 @@ name = "warden's beret" desc = "A special beret with the Warden's insignia emblazoned on it. For wardens with class." icon_state = "wardenberet" - armor = list(melee = 40, bullet = 30, laser = 30, energy = 10, bomb = 25, bio = 0, rad = 0, fire = 0, acid = 50) + armor = list(melee = 40, bullet = 30, laser = 30, energy = 10, bomb = 25, bio = 0, rad = 0, fire = 30, acid = 50) strip_delay = 60 /obj/item/clothing/head/beret/sec/navyofficer diff --git a/code/modules/clothing/head/misc.dm b/code/modules/clothing/head/misc.dm index 4ebcd8a4a27..b61d1c18f5a 100644 --- a/code/modules/clothing/head/misc.dm +++ b/code/modules/clothing/head/misc.dm @@ -6,7 +6,7 @@ desc = "It's good to be emperor." item_state = "that" flags_inv = 0 - armor = list(melee = 30, bullet = 15, laser = 30, energy = 10, bomb = 25, bio = 0, rad = 0, fire = 0, acid = 50) + armor = list(melee = 30, bullet = 15, laser = 30, energy = 10, bomb = 25, bio = 0, rad = 0, fire = 50, acid = 50) strip_delay = 80 /obj/item/clothing/head/powdered_wig @@ -222,7 +222,7 @@ throw_range = 5 w_class = 2 attack_verb = list("warned", "cautioned", "smashed") - resistance_flags = FIRE_PROOF + resistance_flags = 0 /obj/item/clothing/head/santa name = "santa hat" @@ -264,7 +264,8 @@ name = "crown" desc = "A crown fit for a king, a petty king maybe." icon_state = "crown" - armor = list(melee = 15, bullet = 0, laser = 0,energy = 15, bomb = 0, bio = 0, rad = 0, fire = 0, acid = 50) + armor = list(melee = 15, bullet = 0, laser = 0,energy = 15, bomb = 0, bio = 0, rad = 0, fire = 100, acid = 50) + resistance_flags = FIRE_PROOF /obj/item/clothing/head/crown/fancy name = "magnificent crown" diff --git a/code/modules/clothing/head/misc_special.dm b/code/modules/clothing/head/misc_special.dm index 6d623c22c39..94ca9b8ed5f 100644 --- a/code/modules/clothing/head/misc_special.dm +++ b/code/modules/clothing/head/misc_special.dm @@ -21,7 +21,7 @@ // var/up = 0 flash_protect = 2 tint = 2 - armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0, fire = 0, acid = 60) + armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0, fire = 100, acid = 60) flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE actions_types = list(/datum/action/item_action/toggle) visor_flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE diff --git a/code/modules/clothing/head/soft_caps.dm b/code/modules/clothing/head/soft_caps.dm index eb52e83640f..4aac0629f34 100644 --- a/code/modules/clothing/head/soft_caps.dm +++ b/code/modules/clothing/head/soft_caps.dm @@ -120,7 +120,7 @@ desc = "It's a robust baseball hat in tasteful red colour." icon_state = "secsoft" item_color = "sec" - armor = list(melee = 30, bullet = 25, laser = 25, energy = 10, bomb = 25, bio = 0, rad = 0, fire = 0, acid = 50) + armor = list(melee = 30, bullet = 25, laser = 25, energy = 10, bomb = 25, bio = 0, rad = 0, fire = 20, acid = 50) strip_delay = 60 dog_fashion = null diff --git a/code/modules/clothing/masks/breath.dm b/code/modules/clothing/masks/breath.dm index 7c79e261c96..115ab7bd6ed 100644 --- a/code/modules/clothing/masks/breath.dm +++ b/code/modules/clothing/masks/breath.dm @@ -12,7 +12,7 @@ actions_types = list(/datum/action/item_action/adjust) flags_cover = MASKCOVERSMOUTH visor_flags_cover = MASKCOVERSMOUTH - resistance_flags = FIRE_PROOF + resistance_flags = 0 /obj/item/clothing/mask/breath/attack_self(mob/user) adjustmask(user) diff --git a/code/modules/clothing/masks/gasmask.dm b/code/modules/clothing/masks/gasmask.dm index 7ba9af72bf7..48cc4e4c238 100644 --- a/code/modules/clothing/masks/gasmask.dm +++ b/code/modules/clothing/masks/gasmask.dm @@ -9,7 +9,7 @@ gas_transfer_coefficient = 0.01 permeability_coefficient = 0.01 flags_cover = MASKCOVERSEYES | MASKCOVERSMOUTH - resistance_flags = FIRE_PROOF + resistance_flags = 0 // **** Welding gas mask **** @@ -20,13 +20,14 @@ materials = list(MAT_METAL=4000, MAT_GLASS=2000) flash_protect = 2 tint = 2 - armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0, fire = 0, acid = 55) + armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0, fire = 100, acid = 55) origin_tech = "materials=2;engineering=3" actions_types = list(/datum/action/item_action/toggle) flags_inv = HIDEEARS|HIDEEYES|HIDEFACE flags_cover = MASKCOVERSEYES visor_flags_inv = HIDEEYES visor_flags_cover = MASKCOVERSEYES + resistance_flags = FIRE_PROOF /obj/item/clothing/mask/gas/welding/attack_self() toggle() @@ -61,7 +62,7 @@ icon_state = "clown" item_state = "clown_hat" flags_cover = MASKCOVERSEYES - resistance_flags = 0 + resistance_flags = FLAMMABLE actions_types = list(/datum/action/item_action/adjust) dog_fashion = /datum/dog_fashion/head/clown @@ -93,7 +94,7 @@ icon_state = "sexyclown" item_state = "sexyclown" flags_cover = MASKCOVERSEYES - resistance_flags = 0 + resistance_flags = FLAMMABLE /obj/item/clothing/mask/gas/mime name = "mime mask" @@ -102,7 +103,7 @@ icon_state = "mime" item_state = "mime" flags_cover = MASKCOVERSEYES - resistance_flags = 0 + resistance_flags = FLAMMABLE actions_types = list(/datum/action/item_action/adjust) /obj/item/clothing/mask/gas/mime/attack_self(mob/user) @@ -132,7 +133,7 @@ icon_state = "monkeymask" item_state = "monkeymask" flags_cover = MASKCOVERSEYES - resistance_flags = 0 + resistance_flags = FLAMMABLE /obj/item/clothing/mask/gas/sexymime name = "sexy mime mask" @@ -141,7 +142,7 @@ icon_state = "sexymime" item_state = "sexymime" flags_cover = MASKCOVERSEYES - resistance_flags = 0 + resistance_flags = FLAMMABLE /obj/item/clothing/mask/gas/death_commando name = "Death Commando Mask" @@ -152,7 +153,7 @@ name = "cyborg visor" desc = "Beep boop." icon_state = "death" - resistance_flags = 0 + resistance_flags = FLAMMABLE /obj/item/clothing/mask/gas/owl_mask name = "owl mask" @@ -160,7 +161,7 @@ icon_state = "owl" flags = MASKINTERNALS flags_cover = MASKCOVERSEYES - resistance_flags = 0 + resistance_flags = FLAMMABLE /obj/item/clothing/mask/gas/carp name = "carp mask" diff --git a/code/modules/clothing/masks/miscellaneous.dm b/code/modules/clothing/masks/miscellaneous.dm index 03e8fd31c83..15abf2b8940 100644 --- a/code/modules/clothing/masks/miscellaneous.dm +++ b/code/modules/clothing/masks/miscellaneous.dm @@ -28,7 +28,7 @@ visor_flags_cover = MASKCOVERSMOUTH gas_transfer_coefficient = 0.90 permeability_coefficient = 0.01 - armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 25, rad = 0) + armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 25, rad = 0, fire = 0, acid = 0) actions_types = list(/datum/action/item_action/adjust) /obj/item/clothing/mask/surgical/attack_self(mob/user) diff --git a/code/modules/clothing/shoes/miscellaneous.dm b/code/modules/clothing/shoes/miscellaneous.dm index 4fc5182db7c..c5f6436a484 100644 --- a/code/modules/clothing/shoes/miscellaneous.dm +++ b/code/modules/clothing/shoes/miscellaneous.dm @@ -17,9 +17,9 @@ desc = "High speed, low drag combat boots." icon_state = "jackboots" item_state = "jackboots" - armor = list(melee = 25, bullet = 25, laser = 25, energy = 25, bomb = 50, bio = 10, rad = 0, fire = 0, acid = 50) + armor = list(melee = 25, bullet = 25, laser = 25, energy = 25, bomb = 50, bio = 10, rad = 0, fire = 70, acid = 50) strip_delay = 70 - resistance_flags = FIRE_PROOF + resistance_flags = 0 pockets = /obj/item/weapon/storage/internal/pocket/shoes /obj/item/clothing/shoes/combat/swat //overpowered boots for death squads @@ -27,7 +27,7 @@ desc = "High speed, no drag combat boots." permeability_coefficient = 0.01 flags = NOSLIP - armor = list(melee = 40, bullet = 30, laser = 25, energy = 25, bomb = 50, bio = 30, rad = 30, fire = 0, acid = 50) + armor = list(melee = 40, bullet = 30, laser = 25, energy = 25, bomb = 50, bio = 30, rad = 30, fire = 90, acid = 50) /obj/item/clothing/shoes/sandal desc = "A pair of rather plain, wooden sandals." @@ -51,8 +51,8 @@ slowdown = SHOES_SLOWDOWN+1 strip_delay = 50 put_on_delay = 50 - resistance_flags = FIRE_PROOF - armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 0, acid = 75) + resistance_flags = 0 + armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 40, acid = 75) /obj/item/clothing/shoes/galoshes/dry name = "absorbent galoshes" @@ -90,7 +90,7 @@ item_color = "hosred" strip_delay = 50 put_on_delay = 50 - resistance_flags = FIRE_PROOF + resistance_flags = 0 pockets = /obj/item/weapon/storage/internal/pocket/shoes /obj/item/clothing/shoes/jackboots/fast diff --git a/code/modules/clothing/spacesuits/chronosuit.dm b/code/modules/clothing/spacesuits/chronosuit.dm index be717658e23..17142d8bb46 100644 --- a/code/modules/clothing/spacesuits/chronosuit.dm +++ b/code/modules/clothing/spacesuits/chronosuit.dm @@ -4,7 +4,8 @@ icon_state = "chronohelmet" item_state = "chronohelmet" slowdown = 1 - armor = list(melee = 60, bullet = 30/*bullet through the visor*/, laser = 60, energy = 60, bomb = 30, bio = 90, rad = 90, fire = 95, acid = 95) + armor = list(melee = 60, bullet = 30/*bullet through the visor*/, laser = 60, energy = 60, bomb = 30, bio = 90, rad = 90, fire = 100, acid = 100) + resistance_flags = FIRE_PROOF | ACID_PROOF var/obj/item/clothing/suit/space/chronos/suit = null /obj/item/clothing/head/helmet/space/chronos/dropped() @@ -23,7 +24,8 @@ icon_state = "chronosuit" item_state = "chronosuit" actions_types = list(/datum/action/item_action/toggle) - armor = list(melee = 60, bullet = 60, laser = 60, energy = 60, bomb = 30, bio = 90, rad = 90, fire = 95, acid = 95) + armor = list(melee = 60, bullet = 60, laser = 60, energy = 60, bomb = 30, bio = 90, rad = 90, fire = 100, acid = 1000) + resistance_flags = FIRE_PROOF | ACID_PROOF var/list/chronosafe_items = list(/obj/item/weapon/chrono_eraser, /obj/item/weapon/gun/energy/chrono_gun) var/list/hands_nodrop = list() var/obj/item/clothing/head/helmet/space/chronos/helmet = null diff --git a/code/modules/clothing/spacesuits/hardsuit.dm b/code/modules/clothing/spacesuits/hardsuit.dm index 9378fbf2b4a..c09fdb06c03 100644 --- a/code/modules/clothing/spacesuits/hardsuit.dm +++ b/code/modules/clothing/spacesuits/hardsuit.dm @@ -4,6 +4,8 @@ desc = "A special helmet designed for work in a hazardous, low-pressure environment. Has radiation shielding." icon_state = "hardsuit0-engineering" item_state = "eng_helm" + obj_integrity = 200 + max_integrity = 200 armor = list(melee = 10, bullet = 5, laser = 10, energy = 5, bomb = 10, bio = 100, rad = 75, fire = 50, acid = 75) var/basestate = "hardsuit" var/brightness_on = 4 //luminosity when on @@ -80,6 +82,7 @@ var/helmettype = /obj/item/clothing/head/helmet/space/hardsuit var/obj/item/weapon/tank/jetpack/suit/jetpack = null + /obj/item/clothing/suit/space/hardsuit/New() if(jetpack && ispath(jetpack)) jetpack = new jetpack(src) @@ -142,16 +145,18 @@ desc = "A special helmet designed for work in a hazardous, low-pressure environment. Has radiation shielding." icon_state = "hardsuit0-engineering" item_state = "eng_helm" - armor = list(melee = 30, bullet = 5, laser = 10, energy = 5, bomb = 10, bio = 100, rad = 75, fire = 50, acid = 75) + armor = list(melee = 30, bullet = 5, laser = 10, energy = 5, bomb = 10, bio = 100, rad = 75, fire = 100, acid = 75) item_color = "engineering" + resistance_flags = FIRE_PROOF /obj/item/clothing/suit/space/hardsuit/engine name = "engineering hardsuit" desc = "A special suit that protects against hazardous, low pressure environments. Has radiation shielding." icon_state = "hardsuit-engineering" item_state = "eng_hardsuit" - armor = list(melee = 30, bullet = 5, laser = 10, energy = 5, bomb = 10, bio = 100, rad = 75, fire = 50, acid = 75) + armor = list(melee = 30, bullet = 5, laser = 10, energy = 5, bomb = 10, bio = 100, rad = 75, fire = 100, acid = 75) helmettype = /obj/item/clothing/head/helmet/space/hardsuit/engine + resistance_flags = FIRE_PROOF //Atmospherics /obj/item/clothing/head/helmet/space/hardsuit/engine/atmos @@ -319,7 +324,7 @@ alt_desc = "An elite version of the syndicate helmet, with improved armour and fire shielding. It is in combat mode. Property of Gorlex Marauders." icon_state = "hardsuit0-syndielite" item_color = "syndielite" - armor = list(melee = 60, bullet = 60, laser = 50, energy = 25, bomb = 55, bio = 100, rad = 70, fire = 95, acid = 100) + armor = list(melee = 60, bullet = 60, laser = 50, energy = 25, bomb = 55, bio = 100, rad = 70, fire = 100, acid = 100) heat_protection = HEAD max_heat_protection_temperature = FIRE_IMMUNITY_SUIT_MAX_TEMP_PROTECT visor_flags_inv = 0 @@ -335,7 +340,7 @@ icon_state = "hardsuit0-syndielite" item_color = "syndielite" helmettype = /obj/item/clothing/head/helmet/space/hardsuit/syndi/elite - armor = list(melee = 60, bullet = 60, laser = 50, energy = 25, bomb = 55, bio = 100, rad = 70, fire = 95, acid = 100) + armor = list(melee = 60, bullet = 60, laser = 50, energy = 25, bomb = 55, bio = 100, rad = 70, fire = 100, acid = 100) heat_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS max_heat_protection_temperature = FIRE_IMMUNITY_SUIT_MAX_TEMP_PROTECT resistance_flags = FIRE_PROOF | ACID_PROOF @@ -414,7 +419,7 @@ desc = "A prototype helmet designed for research in a hazardous, low pressure environment. Scientific data flashes across the visor." icon_state = "hardsuit0-rd" item_color = "rd" - resistance_flags = FIRE_PROOF | ACID_PROOF + resistance_flags = ACID_PROOF var/onboard_hud_enabled = 0 //stops conflicts with another diag HUD max_heat_protection_temperature = FIRE_SUIT_MAX_TEMP_PROTECT armor = list(melee = 30, bullet = 5, laser = 10, energy = 5, bomb = 100, bio = 100, rad = 60, fire = 60, acid = 80) @@ -495,7 +500,8 @@ icon_state = "capspace" item_state = "capspacehelmet" desc = "A special hardsuit helmet designed for only the most fashionable of military figureheads." - armor = list(melee = 40, bullet = 50, laser = 50, energy = 25, bomb = 50, bio = 100, rad = 50, fire = 100, acid = 95) + armor = list(melee = 40, bullet = 50, laser = 50, energy = 25, bomb = 50, bio = 100, rad = 50, fire = 100, acid = 100) + resistance_flags = FIRE_PROOF | ACID_PROOF actions_types = list() /obj/item/clothing/head/helmet/space/hardsuit/captain/attack_self() @@ -507,7 +513,8 @@ icon_state = "caparmor" item_state = "capspacesuit" allowed = list(/obj/item/weapon/tank/internals, /obj/item/device/flashlight,/obj/item/weapon/gun/energy, /obj/item/weapon/gun/projectile, /obj/item/ammo_box, /obj/item/ammo_casing, /obj/item/weapon/melee/baton,/obj/item/weapon/restraints/handcuffs) - armor = list(melee = 40, bullet = 50, laser = 50, energy = 25, bomb = 50, bio = 100, rad = 50, fire = 100, acid = 95) + armor = list(melee = 40, bullet = 50, laser = 50, energy = 25, bomb = 50, bio = 100, rad = 50, fire = 100, acid = 100) + resistance_flags = FIRE_PROOF | ACID_PROOF helmettype = /obj/item/clothing/head/helmet/space/hardsuit/captain //Clown @@ -545,7 +552,7 @@ icon_state = "hardsuit-hos" helmettype = /obj/item/clothing/head/helmet/space/hardsuit/security/hos allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank/internals, /obj/item/weapon/gun,/obj/item/weapon/reagent_containers/spray/pepper,/obj/item/ammo_box,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/restraints/handcuffs) - armor = list(melee = 30, bullet = 15, laser = 30, energy = 10, bomb = 10, bio = 100, rad = 50, fire = 95, acid = 100) + armor = list(melee = 30, bullet = 15, laser = 30, energy = 10, bomb = 10, bio = 100, rad = 50, fire = 100, acid = 100) resistance_flags = FIRE_PROOF | ACID_PROOF var/current_charges = 3 var/max_charges = 3 //How many charges total the shielding has @@ -662,7 +669,7 @@ icon_state = "hardsuit1-syndi" item_state = "syndie_hardsuit" item_color = "syndi" - armor = list(melee = 40, bullet = 50, laser = 30, energy = 15, bomb = 35, bio = 100, rad = 50, fire = 95, acid = 100) + armor = list(melee = 40, bullet = 50, laser = 30, energy = 15, bomb = 35, bio = 100, rad = 50, fire = 100, acid = 100) allowed = list(/obj/item/weapon/gun,/obj/item/ammo_box,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/melee/energy/sword/saber,/obj/item/weapon/restraints/handcuffs,/obj/item/weapon/tank/internals) helmettype = /obj/item/clothing/head/helmet/space/hardsuit/shielded/syndi slowdown = 0 @@ -678,7 +685,7 @@ icon_state = "hardsuit1-syndi" item_state = "syndie_helm" item_color = "syndi" - armor = list(melee = 40, bullet = 50, laser = 30, energy = 15, bomb = 35, bio = 100, rad = 50, fire = 95, acid = 100) + armor = list(melee = 40, bullet = 50, laser = 30, energy = 15, bomb = 35, bio = 100, rad = 50, fire = 100, acid = 100) ///SWAT version /obj/item/clothing/suit/space/hardsuit/shielded/swat @@ -690,10 +697,9 @@ max_charges = 4 current_charges = 4 recharge_delay = 15 - armor = list(melee = 80, bullet = 80, laser = 50, energy = 50, bomb = 100, bio = 100, rad = 100, fire = 95, acid = 95) + armor = list(melee = 80, bullet = 80, laser = 50, energy = 50, bomb = 100, bio = 100, rad = 100, fire = 100, acid = 100) strip_delay = 130 max_heat_protection_temperature = FIRE_IMMUNITY_SUIT_MAX_TEMP_PROTECT - resistance_flags = FIRE_PROOF | ACID_PROOF helmettype = /obj/item/clothing/head/helmet/space/hardsuit/shielded/swat dog_fashion = /datum/dog_fashion/back/deathsquad @@ -703,8 +709,7 @@ icon_state = "deathsquad" item_state = "deathsquad" item_color = "syndi" - armor = list(melee = 80, bullet = 80, laser = 50, energy = 50, bomb = 100, bio = 100, rad = 100, fire = 95, acid = 95) + armor = list(melee = 80, bullet = 80, laser = 50, energy = 50, bomb = 100, bio = 100, rad = 100, fire = 100, acid = 100) strip_delay = 130 max_heat_protection_temperature = FIRE_IMMUNITY_HELM_MAX_TEMP_PROTECT - resistance_flags = ACID_PROOF actions_types = list() \ No newline at end of file diff --git a/code/modules/clothing/spacesuits/miscellaneous.dm b/code/modules/clothing/spacesuits/miscellaneous.dm index 895b1ef9dc1..afea89290f2 100644 --- a/code/modules/clothing/spacesuits/miscellaneous.dm +++ b/code/modules/clothing/spacesuits/miscellaneous.dm @@ -49,7 +49,7 @@ Contains: icon_state = "heavy" item_state = "swat_suit" allowed = list(/obj/item/weapon/gun,/obj/item/ammo_box,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/restraints/handcuffs,/obj/item/weapon/tank/internals,/obj/item/weapon/kitchen/knife/combat) - armor = list(melee = 40, bullet = 30, laser = 30,energy = 30, bomb = 50, bio = 90, rad = 20, fire = 60, acid = 75) + armor = list(melee = 40, bullet = 30, laser = 30,energy = 30, bomb = 50, bio = 90, rad = 20, fire = 100, acid = 100) strip_delay = 120 resistance_flags = FIRE_PROOF | ACID_PROOF @@ -59,7 +59,7 @@ Contains: icon_state = "beret_badge" flags = STOPSPRESSUREDMAGE flags_inv = 0 - armor = list(melee = 80, bullet = 80, laser = 50, energy = 50, bomb = 100, bio = 100, rad = 100, fire = 80, acid = 80) + armor = list(melee = 80, bullet = 80, laser = 50, energy = 50, bomb = 100, bio = 100, rad = 100, fire = 100, acid = 100) strip_delay = 130 max_heat_protection_temperature = FIRE_IMMUNITY_HELM_MAX_TEMP_PROTECT resistance_flags = FIRE_PROOF | ACID_PROOF @@ -74,7 +74,7 @@ Contains: flags_inv = 0 w_class = 3 allowed = list(/obj/item/weapon/gun,/obj/item/ammo_box,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/restraints/handcuffs,/obj/item/weapon/tank/internals) - armor = list(melee = 80, bullet = 80, laser = 50, energy = 50, bomb = 100, bio = 100, rad = 100, fire = 80, acid = 80) + armor = list(melee = 80, bullet = 80, laser = 50, energy = 50, bomb = 100, bio = 100, rad = 100, fire = 100, acid = 100) strip_delay = 130 max_heat_protection_temperature = FIRE_IMMUNITY_HELM_MAX_TEMP_PROTECT resistance_flags = FIRE_PROOF | ACID_PROOF diff --git a/code/modules/clothing/spacesuits/plasmamen.dm b/code/modules/clothing/spacesuits/plasmamen.dm index fedbd537c0b..fc09409ff9e 100644 --- a/code/modules/clothing/spacesuits/plasmamen.dm +++ b/code/modules/clothing/spacesuits/plasmamen.dm @@ -5,7 +5,8 @@ name = "plasmaman suit" desc = "A special containment suit designed to protect a plasmaman's volatile body from outside exposure and quickly extinguish it in emergencies." allowed = list(/obj/item/weapon/gun,/obj/item/ammo_casing,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/melee/energy/sword,/obj/item/weapon/restraints/handcuffs,/obj/item/weapon/tank) - armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 100, rad = 0, fire = 95, acid = 75) + armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 100, rad = 0, fire = 100, acid = 75) + resistance_flags = FIRE_PROOF icon_state = "plasmaman_suit" item_state = "plasmaman_suit" var/next_extinguish = 0 @@ -41,5 +42,7 @@ item_color = "plasma" //needed for the helmet lighting item_state = "plasmaman-helm" strip_delay = 80 + armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 100, rad = 0, fire = 100, acid = 75) + resistance_flags = FIRE_PROOF diff --git a/code/modules/clothing/suits/armor.dm b/code/modules/clothing/suits/armor.dm index 18bc250016c..1fbde88b1ce 100644 --- a/code/modules/clothing/suits/armor.dm +++ b/code/modules/clothing/suits/armor.dm @@ -7,8 +7,10 @@ max_heat_protection_temperature = ARMOR_MAX_TEMP_PROTECT strip_delay = 60 put_on_delay = 40 - resistance_flags = FIRE_PROOF - armor = list(melee = 30, bullet = 30, laser = 30, energy = 10, bomb = 25, bio = 0, rad = 0, fire = 0, acid = 50) + obj_integrity = 200 + max_integrity = 200 + resistance_flags = 0 + armor = list(melee = 30, bullet = 30, laser = 30, energy = 10, bomb = 25, bio = 0, rad = 0, fire = 50, acid = 50) /obj/item/clothing/suit/armor/vest name = "armor" @@ -16,7 +18,7 @@ icon_state = "armoralt" item_state = "armoralt" blood_overlay_type = "armor" - armor = list(melee = 30, bullet = 30, laser = 30, energy = 10, bomb = 25, bio = 0, rad = 0, fire = 0, acid = 75) + armor = list(melee = 30, bullet = 30, laser = 30, energy = 10, bomb = 25, bio = 0, rad = 0, fire = 50, acid = 75) dog_fashion = /datum/dog_fashion/back /obj/item/clothing/suit/armor/vest/alt @@ -34,7 +36,7 @@ icon_state = "hos" item_state = "greatcoat" body_parts_covered = CHEST|GROIN|ARMS|LEGS - armor = list(melee = 30, bullet = 30, laser = 30, energy = 10, bomb = 25, bio = 0, rad = 0, fire = 0, acid = 90) + armor = list(melee = 30, bullet = 30, laser = 30, energy = 10, bomb = 25, bio = 0, rad = 0, fire = 70, acid = 90) cold_protection = CHEST|GROIN|LEGS|ARMS heat_protection = CHEST|GROIN|LEGS|ARMS strip_delay = 80 @@ -56,7 +58,7 @@ cold_protection = CHEST|GROIN|ARMS|HANDS heat_protection = CHEST|GROIN|ARMS|HANDS strip_delay = 70 - resistance_flags = 0 + resistance_flags = FLAMMABLE dog_fashion = null /obj/item/clothing/suit/armor/vest/warden/alt @@ -80,8 +82,9 @@ icon_state = "capcarapace" item_state = "armor" body_parts_covered = CHEST|GROIN - armor = list(melee = 50, bullet = 40, laser = 50, energy = 10, bomb = 25, bio = 0, rad = 0, fire = 90, acid = 90) + armor = list(melee = 50, bullet = 40, laser = 50, energy = 10, bomb = 25, bio = 0, rad = 0, fire = 100, acid = 90) dog_fashion = null + resistance_flags = FIRE_PROOF /obj/item/clothing/suit/armor/vest/capcarapace/alt name = "captain's parade jacket" @@ -127,7 +130,8 @@ icon_state = "armor_reflec" item_state = "armor_reflec" blood_overlay_type = "armor" - armor = list(melee = 10, bullet = 10, laser = 60, energy = 50, bomb = 0, bio = 0, rad = 0, fire = 80, acid = 50) + armor = list(melee = 10, bullet = 10, laser = 60, energy = 50, bomb = 0, bio = 0, rad = 0, fire = 100, acid = 50) + resistance_flags = FIRE_PROOF var/hit_reflect_chance = 40 /obj/item/clothing/suit/armor/laserproof/IsReflect(def_zone) @@ -141,7 +145,7 @@ desc = "An armored vest with a detective's badge on it." icon_state = "detective-armor" allowed = list(/obj/item/weapon/tank/internals/emergency_oxygen,/obj/item/weapon/reagent_containers/spray/pepper,/obj/item/device/flashlight,/obj/item/weapon/gun/energy,/obj/item/weapon/gun/projectile,/obj/item/ammo_box,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/restraints/handcuffs,/obj/item/weapon/storage/fancy/cigarettes,/obj/item/weapon/lighter,/obj/item/device/detective_scanner,/obj/item/device/taperecorder,/obj/item/weapon/melee/classic_baton/telescopic) - resistance_flags = 0 + resistance_flags = FLAMMABLE dog_fashion = null @@ -155,7 +159,7 @@ icon_state = "reactiveoff" item_state = "reactiveoff" blood_overlay_type = "armor" - armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 80, acid = 80) + armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 100, acid = 100) actions_types = list(/datum/action/item_action/toggle) resistance_flags = FIRE_PROOF | ACID_PROOF hit_reaction_chance = 50 @@ -341,7 +345,7 @@ min_cold_protection_temperature = SPACE_SUIT_MIN_TEMP_PROTECT heat_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS max_heat_protection_temperature = SPACE_SUIT_MAX_TEMP_PROTECT - armor = list(melee = 80, bullet = 80, laser = 50, energy = 50, bomb = 100, bio = 100, rad = 100, fire = 95, acid = 95) + armor = list(melee = 80, bullet = 80, laser = 50, energy = 50, bomb = 100, bio = 100, rad = 100, fire = 90, acid = 90) /obj/item/clothing/suit/armor/heavy name = "heavy armor" diff --git a/code/modules/clothing/suits/bio.dm b/code/modules/clothing/suits/bio.dm index 9a7c584f968..28ebe2f9f39 100644 --- a/code/modules/clothing/suits/bio.dm +++ b/code/modules/clothing/suits/bio.dm @@ -7,7 +7,7 @@ flags = THICKMATERIAL armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 100, rad = 20, fire = 30, acid = 100) flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEHAIR|HIDEFACIALHAIR|HIDEFACE - resistance_flags = FIRE_PROOF | ACID_PROOF + resistance_flags = ACID_PROOF flags_cover = HEADCOVERSEYES | HEADCOVERSMOUTH /obj/item/clothing/suit/bio_suit @@ -26,7 +26,7 @@ flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT strip_delay = 70 put_on_delay = 70 - resistance_flags = FIRE_PROOF | ACID_PROOF + resistance_flags = ACID_PROOF //Standard biosuit, orange stripe /obj/item/clothing/head/bio_hood/general diff --git a/code/modules/clothing/suits/cloaks.dm b/code/modules/clothing/suits/cloaks.dm index a25d4044482..77fd5976d4a 100644 --- a/code/modules/clothing/suits/cloaks.dm +++ b/code/modules/clothing/suits/cloaks.dm @@ -66,7 +66,7 @@ icon_state = "dragon" desc = "A suit of armour fashioned from the remains of an ash drake. " allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank/internals, /obj/item/weapon/resonator, /obj/item/device/mining_scanner, /obj/item/device/t_scanner/adv_mining_scanner, /obj/item/weapon/gun/energy/kinetic_accelerator, /obj/item/weapon/pickaxe, /obj/item/weapon/twohanded/spear) - armor = list(melee = 70, bullet = 30, laser = 50, energy = 40, bomb = 70, bio = 60, rad = 50, fire = 50, acid = 100) + armor = list(melee = 70, bullet = 30, laser = 50, energy = 40, bomb = 70, bio = 60, rad = 50, fire = 100, acid = 100) hooded = 1 hoodtype = /obj/item/clothing/head/cloakhood/drake heat_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS @@ -78,7 +78,7 @@ name = "drake helm" icon_state = "dragon" desc = "The skull of a dragon." - armor = list(melee = 70, bullet = 30, laser = 50, energy = 40, bomb = 70, bio = 60, rad = 50, fire = 50, acid = 100) + armor = list(melee = 70, bullet = 30, laser = 50, energy = 40, bomb = 70, bio = 60, rad = 50, fire = 100, acid = 100) heat_protection = HEAD max_heat_protection_temperature = FIRE_IMMUNITY_HELM_MAX_TEMP_PROTECT resistance_flags = FIRE_PROOF | ACID_PROOF diff --git a/code/modules/clothing/suits/jobs.dm b/code/modules/clothing/suits/jobs.dm index ad821773ac7..ec4b145f18b 100644 --- a/code/modules/clothing/suits/jobs.dm +++ b/code/modules/clothing/suits/jobs.dm @@ -100,7 +100,7 @@ item_state = "hazard" blood_overlay_type = "armor" allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank/internals/emergency_oxygen,/obj/item/device/t_scanner,/obj/item/device/radio) - resistance_flags = FIRE_PROOF + resistance_flags = 0 //Lawyer /obj/item/clothing/suit/toggle/lawyer name = "blue suit jacket" diff --git a/code/modules/clothing/suits/miscellaneous.dm b/code/modules/clothing/suits/miscellaneous.dm index f19764bed15..61d1f7d4ebe 100644 --- a/code/modules/clothing/suits/miscellaneous.dm +++ b/code/modules/clothing/suits/miscellaneous.dm @@ -16,7 +16,7 @@ blood_overlay_type = "armor" body_parts_covered = CHEST allowed = list (/obj/item/weapon/gun/energy/laser/bluetag) - resistance_flags = FIRE_PROOF + resistance_flags = 0 /obj/item/clothing/suit/redtag name = "red laser tag armor" @@ -26,7 +26,7 @@ blood_overlay_type = "armor" body_parts_covered = CHEST allowed = list (/obj/item/weapon/gun/energy/laser/redtag) - resistance_flags = FIRE_PROOF + resistance_flags = 0 /* * Costume @@ -89,7 +89,7 @@ w_class = 3 allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank/internals/emergency_oxygen,/obj/item/toy) flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT - resistance_flags = FIRE_PROOF + resistance_flags = 0 /obj/item/clothing/suit/hastur name = "\improper Hastur's robe" @@ -342,7 +342,7 @@ desc = "Pompadour not included." icon_state = "leatherjacket" item_state = "hostrench" - resistance_flags = FIRE_PROOF + resistance_flags = 0 max_heat_protection_temperature = ARMOR_MAX_TEMP_PROTECT allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank/internals/emergency_oxygen,/obj/item/toy,/obj/item/weapon/storage/fancy/cigarettes,/obj/item/weapon/lighter,/obj/item/weapon/gun/projectile/automatic/pistol,/obj/item/weapon/gun/projectile/revolver,/obj/item/weapon/gun/projectile/revolver/detective,/obj/item/device/radio) diff --git a/code/modules/clothing/suits/utility.dm b/code/modules/clothing/suits/utility.dm index bbca34cbf4f..f9cde71de41 100644 --- a/code/modules/clothing/suits/utility.dm +++ b/code/modules/clothing/suits/utility.dm @@ -57,7 +57,7 @@ desc = "Use in case of bomb." icon_state = "bombsuit" flags = THICKMATERIAL - armor = list(melee = 20, bullet = 0, laser = 20,energy = 10, bomb = 100, bio = 0, rad = 0, fire = 25, acid = 50) + armor = list(melee = 20, bullet = 0, laser = 20,energy = 10, bomb = 100, bio = 0, rad = 0, fire = 80, acid = 50) flags_inv = HIDEFACE|HIDEMASK|HIDEEARS|HIDEEYES|HIDEHAIR|HIDEFACIALHAIR cold_protection = HEAD min_cold_protection_temperature = HELMET_MIN_TEMP_PROTECT @@ -66,7 +66,7 @@ strip_delay = 70 put_on_delay = 70 flags_cover = HEADCOVERSEYES | HEADCOVERSMOUTH - resistance_flags = FIRE_PROOF + resistance_flags = 0 /obj/item/clothing/suit/bomb_suit @@ -80,7 +80,7 @@ flags = THICKMATERIAL body_parts_covered = CHEST|GROIN|LEGS|FEET|ARMS|HANDS slowdown = 2 - armor = list(melee = 20, bullet = 0, laser = 20,energy = 10, bomb = 100, bio = 0, rad = 0, fire = 25, acid = 50) + armor = list(melee = 20, bullet = 0, laser = 20,energy = 10, bomb = 100, bio = 0, rad = 0, fire = 80, acid = 50) flags_inv = HIDEJUMPSUIT heat_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS max_heat_protection_temperature = ARMOR_MAX_TEMP_PROTECT @@ -88,7 +88,7 @@ min_cold_protection_temperature = ARMOR_MIN_TEMP_PROTECT strip_delay = 70 put_on_delay = 70 - resistance_flags = FIRE_PROOF + resistance_flags = 0 /obj/item/clothing/head/bomb_hood/security @@ -114,7 +114,7 @@ strip_delay = 60 put_on_delay = 60 flags_cover = HEADCOVERSEYES | HEADCOVERSMOUTH - resistance_flags = FIRE_PROOF + resistance_flags = 0 /obj/item/clothing/suit/radiation name = "radiation suit" @@ -132,4 +132,4 @@ strip_delay = 60 put_on_delay = 60 flags_inv = HIDEJUMPSUIT - resistance_flags = FIRE_PROOF + resistance_flags = 0 diff --git a/code/modules/clothing/suits/wiz_robe.dm b/code/modules/clothing/suits/wiz_robe.dm index 0d43b4705d6..702e367634c 100644 --- a/code/modules/clothing/suits/wiz_robe.dm +++ b/code/modules/clothing/suits/wiz_robe.dm @@ -35,7 +35,7 @@ gas_transfer_coefficient = 1 permeability_coefficient = 1 armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 0, acid = 0) - resistance_flags = 0 + resistance_flags = FLAMMABLE dog_fashion = /datum/dog_fashion/head/blue_wizard /obj/item/clothing/head/wizard/marisa @@ -124,7 +124,7 @@ gas_transfer_coefficient = 1 permeability_coefficient = 1 armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 0, acid = 0) - resistance_flags = 0 + resistance_flags = FLAMMABLE /obj/item/clothing/head/wizard/marisa/fake name = "witch hat" @@ -133,7 +133,7 @@ gas_transfer_coefficient = 1 permeability_coefficient = 1 armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 0, acid = 0) - resistance_flags = 0 + resistance_flags = FLAMMABLE /obj/item/clothing/suit/wizrobe/marisa/fake name = "witch robe" @@ -143,7 +143,7 @@ gas_transfer_coefficient = 1 permeability_coefficient = 1 armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 0, acid = 0) - resistance_flags = 0 + resistance_flags = FLAMMABLE /obj/item/clothing/suit/wizrobe/paper name = "papier-mâché robe" diff --git a/code/modules/clothing/under/color.dm b/code/modules/clothing/under/color.dm index 7ac3b606184..68b1fc784f2 100644 --- a/code/modules/clothing/under/color.dm +++ b/code/modules/clothing/under/color.dm @@ -14,7 +14,7 @@ icon_state = "black" item_state = "bl_suit" item_color = "black" - resistance_flags = FIRE_PROOF + resistance_flags = 0 /obj/item/clothing/under/color/grey name = "grey jumpsuit" diff --git a/code/modules/clothing/under/jobs/engineering.dm b/code/modules/clothing/under/jobs/engineering.dm index 3ac2b59656d..8a2e1a2ed2f 100644 --- a/code/modules/clothing/under/jobs/engineering.dm +++ b/code/modules/clothing/under/jobs/engineering.dm @@ -5,8 +5,8 @@ icon_state = "chiefengineer" item_state = "gy_suit" item_color = "chief" - armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 10, fire = 40, acid = 40) - resistance_flags = FIRE_PROOF + armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 10, fire = 80, acid = 40) + resistance_flags = 0 /obj/item/clothing/under/rank/atmospheric_technician desc = "It's a jumpsuit worn by atmospheric technicians." @@ -14,7 +14,7 @@ icon_state = "atmos" item_state = "atmos_suit" item_color = "atmos" - resistance_flags = FIRE_PROOF + resistance_flags = 0 /obj/item/clothing/under/rank/engineer desc = "It's an orange high visibility jumpsuit worn by engineers. It has minor radiation shielding." @@ -22,11 +22,13 @@ icon_state = "engine" item_state = "engi_suit" item_color = "engine" - armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 10, fire = 30, acid = 20) + armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 10, fire = 60, acid = 20) + resistance_flags = 0 /obj/item/clothing/under/rank/roboticist desc = "It's a slimming black with reinforced seams; great for industrial work." name = "roboticist's jumpsuit" icon_state = "robotics" item_state = "robotics" - item_color = "robotics" \ No newline at end of file + item_color = "robotics" + resistance_flags = 0 \ No newline at end of file diff --git a/code/modules/clothing/under/miscellaneous.dm b/code/modules/clothing/under/miscellaneous.dm index f88d34d1ba7..736e3ce3da8 100644 --- a/code/modules/clothing/under/miscellaneous.dm +++ b/code/modules/clothing/under/miscellaneous.dm @@ -37,7 +37,7 @@ item_state = "armor" can_adjust = 0 strip_delay = 100 - resistance_flags = FIRE_PROOF + resistance_flags = 0 /obj/item/clothing/under/waiter name = "waiter's outfit" @@ -125,7 +125,7 @@ heat_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS max_heat_protection_temperature = SPACE_SUIT_MAX_TEMP_PROTECT can_adjust = 0 - resistance_flags = FIRE_PROOF + resistance_flags = 0 /obj/item/clothing/under/acj name = "administrative cybernetic jumpsuit" @@ -378,7 +378,7 @@ body_parts_covered = CHEST|GROIN|ARMS fitted = NO_FEMALE_UNIFORM can_adjust = 0 - resistance_flags = FIRE_PROOF + resistance_flags = 0 /obj/item/clothing/under/sundress name = "sundress" diff --git a/code/modules/clothing/under/syndicate.dm b/code/modules/clothing/under/syndicate.dm index 4ae10c98d94..ec506accf51 100644 --- a/code/modules/clothing/under/syndicate.dm +++ b/code/modules/clothing/under/syndicate.dm @@ -37,4 +37,4 @@ item_color = "trackpants" can_adjust = 0 armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0, fire = 0, acid = 0) - resistance_flags = FIRE_PROOF \ No newline at end of file + resistance_flags = 0 \ No newline at end of file diff --git a/code/modules/countdown/countdown.dm b/code/modules/countdown/countdown.dm index 9b108de8e31..6f7a73355fa 100644 --- a/code/modules/countdown/countdown.dm +++ b/code/modules/countdown/countdown.dm @@ -115,7 +115,7 @@ var/obj/structure/destructible/clockwork/massive/celestial_gateway/G = attached_to if(!istype(G)) return - else if(G.health && !G.purpose_fulfilled) + else if(G.obj_integrity && !G.purpose_fulfilled) return "
[G.get_arrival_text(FALSE)]
" /obj/effect/countdown/transformer diff --git a/code/modules/events/holiday/vday.dm b/code/modules/events/holiday/vday.dm index 276e88d82a9..7f0f711da25 100644 --- a/code/modules/events/holiday/vday.dm +++ b/code/modules/events/holiday/vday.dm @@ -28,7 +28,7 @@ icon = 'icons/obj/toy.dmi' icon_state = "sc_Ace of Hearts_syndicate" // shut up var/message = "A generic message of love or whatever." - resistance_flags = 0 + resistance_flags = FLAMMABLE w_class = 1 /obj/item/weapon/valentine/New() diff --git a/code/modules/events/spacevine.dm b/code/modules/events/spacevine.dm index de3632195d5..8a151a116e6 100644 --- a/code/modules/events/spacevine.dm +++ b/code/modules/events/spacevine.dm @@ -19,7 +19,7 @@ if(turfs.len) //Pick a turf to spawn at if we can var/turf/T = pick(turfs) - new/obj/structure/spacevine_controller(T) //spawn a controller at turf + new/obj/effect/spacevine_controller(T) //spawn a controller at turf /datum/spacevine_mutation @@ -328,8 +328,8 @@ /datum/spacevine_mutation/woodening/on_grow(obj/structure/spacevine/holder) if(holder.energy) holder.density = 1 - holder.maxhealth = 100 - holder.health = holder.maxhealth + holder.max_integrity = 100 + holder.obj_integrity = holder.max_integrity /datum/spacevine_mutation/woodening/on_hit(obj/structure/spacevine/holder, mob/living/hitter, obj/item/I, expected_damage) if(I.is_sharp()) @@ -362,10 +362,10 @@ layer = SPACEVINE_LAYER mouse_opacity = 2 //Clicking anywhere on the turf is good enough pass_flags = PASSTABLE | PASSGRILLE - var/health = 50 - var/maxhealth = 50 + obj_integrity = 50 + max_integrity = 50 var/energy = 0 - var/obj/structure/spacevine_controller/master = null + var/obj/effect/spacevine_controller/master = null var/list/mutations = list() /obj/structure/spacevine/examine(mob/user) @@ -415,39 +415,36 @@ qdel(src) /obj/structure/spacevine/attackby(obj/item/weapon/W, mob/user, params) - if (!W || !user || !W.type) - return - user.changeNext_move(CLICK_CD_MELEE) - var/force = W.force if(istype(W, /obj/item/weapon/scythe)) - force = force * 4 + user.changeNext_move(CLICK_CD_MELEE) for(var/obj/structure/spacevine/B in orange(1,src)) - B.health = health - force - if(B.health < 1) - qdel(B) - - health = health - force - - if(health < 1) - qdel(src) - + B.take_damage(W.force * 4, BRUTE, "melee", 1) return + else + return ..() - if(W.is_sharp()) - force = force * 4 - if(W && W.damtype == "fire") - force = force * 4 +/obj/structure/spacevine/attacked_by(obj/item/I, mob/living/user) + var/damage_dealt = I.force + if(I.is_sharp()) + damage_dealt *= 4 + if(I.damtype == BURN) + damage_dealt *= 4 for(var/datum/spacevine_mutation/SM in mutations) - force = SM.on_hit(src, user, W, force) //on_hit now takes override damage as arg and returns new value for other mutations to permutate further + damage_dealt = SM.on_hit(src, user, I, force) //on_hit now takes override damage as arg and returns new value for other mutations to permutate further + take_damage(damage_dealt, I.damtype, "melee", 1) - health = health - force - if(health < 1) - qdel(src) - - ..() +/obj/structure/spacevine/play_attack_sound(damage_amount, damage_type = BRUTE, damage_flag = 0) + switch(damage_type) + if(BRUTE) + if(damage_amount) + playsound(src, 'sound/weapons/slash.ogg', 50, 1) + else + playsound(src, 'sound/weapons/tap.ogg', 50, 1) + if(BURN) + playsound(src.loc, 'sound/items/Welder.ogg', 100, 1) /obj/structure/spacevine/Crossed(mob/crosser) if(isliving(crosser)) @@ -469,7 +466,7 @@ /obj/structure/spacevine/attack_alien(mob/living/user) eat(user) -/obj/structure/spacevine_controller +/obj/effect/spacevine_controller invisibility = INVISIBILITY_ABSTRACT var/list/obj/structure/spacevine/vines = list() var/list/growth_queue = list() @@ -478,7 +475,7 @@ var/list/mutations_list = list() var/mutativness = 1 -/obj/structure/spacevine_controller/New(loc, list/muts, mttv, spreading) +/obj/effect/spacevine_controller/New(loc, list/muts, mttv, spreading) spawn_spacevine_piece(loc, , muts) START_PROCESSING(SSobj, src) init_subtypes(/datum/spacevine_mutation/, mutations_list) @@ -488,20 +485,20 @@ spread_cap *= spreading / 50 spread_multiplier /= spreading / 50 -/obj/structure/spacevine_controller/ex_act() //only killing all vines will end this suffering +/obj/effect/spacevine_controller/ex_act() //only killing all vines will end this suffering return -/obj/structure/spacevine_controller/singularity_act() +/obj/effect/spacevine_controller/singularity_act() return -/obj/structure/spacevine_controller/singularity_pull() +/obj/effect/spacevine_controller/singularity_pull() return -/obj/structure/spacevine_controller/Destroy() +/obj/effect/spacevine_controller/Destroy() STOP_PROCESSING(SSobj, src) return ..() -/obj/structure/spacevine_controller/proc/spawn_spacevine_piece(turf/location, obj/structure/spacevine/parent, list/muts) +/obj/effect/spacevine_controller/proc/spawn_spacevine_piece(turf/location, obj/structure/spacevine/parent, list/muts) var/obj/structure/spacevine/SV = new(location) growth_queue += SV vines += SV @@ -520,7 +517,7 @@ for(var/datum/spacevine_mutation/SM in SV.mutations) SM.on_birth(SV) -/obj/structure/spacevine_controller/process() +/obj/effect/spacevine_controller/process() if(!vines) qdel(src) //space vines exterminated. Remove the controller return diff --git a/code/modules/events/vent_clog.dm b/code/modules/events/vent_clog.dm index f323f55cb50..dcbdba4db9c 100644 --- a/code/modules/events/vent_clog.dm +++ b/code/modules/events/vent_clog.dm @@ -10,7 +10,7 @@ var/interval = 2 var/list/vents = list() var/list/gunk = list("water","carbon","flour","radium","toxin","cleaner","nutriment","condensedcapsaicin","mushroomhallucinogen","lube", - "plantbgone","banana","charcoal","space_drugs","morphine","holywater","ethanol","hot_coco","facid") + "plantbgone","banana","charcoal","space_drugs","morphine","holywater","ethanol","hot_coco","sacid") /datum/round_event/vent_clog/announce() priority_announce("The scrubbers network is experiencing a backpressure surge. Some ejection of contents may occur.", "Atmospherics alert") diff --git a/code/modules/events/wizard/rpgloot.dm b/code/modules/events/wizard/rpgloot.dm index 961671763ec..cacf2ba4fce 100644 --- a/code/modules/events/wizard/rpgloot.dm +++ b/code/modules/events/wizard/rpgloot.dm @@ -51,6 +51,7 @@ user << "[target] catches fire!" if(target.resistance_flags & (LAVA_PROOF|FIRE_PROOF)) target.resistance_flags &= ~(LAVA_PROOF|FIRE_PROOF) + target.resistance_flags |= FLAMMABLE target.fire_act() qdel(src) return diff --git a/code/modules/flufftext/Hallucination.dm b/code/modules/flufftext/Hallucination.dm index 2c69abfe524..c1cd8ab0e6b 100644 --- a/code/modules/flufftext/Hallucination.dm +++ b/code/modules/flufftext/Hallucination.dm @@ -363,7 +363,7 @@ Gunshots/explosions/opening doors/less rare audio (done) var/collapse var/image/down - var/health = 100 + obj_integrity = 100 /obj/effect/fake_attacker/attackby(obj/item/weapon/P, mob/living/user, params) step_away(src,my_target,2) @@ -373,7 +373,7 @@ Gunshots/explosions/opening doors/less rare audio (done) my_target.visible_message("[my_target] flails around wildly.", \ "[my_target] has attacked [src]!") - src.health -= P.force + obj_integrity -= P.force /obj/effect/fake_attacker/Crossed(mob/M, somenumber) if(M == my_target) @@ -410,7 +410,7 @@ Gunshots/explosions/opening doors/less rare audio (done) /obj/effect/fake_attacker/proc/attack_loop() while(1) sleep(rand(5,10)) - if(src.health < 0) + if(obj_integrity < 0) collapse() continue if(get_dist(src,my_target) > 1) diff --git a/code/modules/food_and_drinks/drinks/drinks.dm b/code/modules/food_and_drinks/drinks/drinks.dm index cc98c437146..2ef1faca034 100644 --- a/code/modules/food_and_drinks/drinks/drinks.dm +++ b/code/modules/food_and_drinks/drinks/drinks.dm @@ -10,7 +10,7 @@ var/gulp_size = 5 //This is now officially broken ... need to think of a nice way to fix it. possible_transfer_amounts = list(5,10,15,20,25,30,50) volume = 50 - resistance_flags = FIRE_PROOF + resistance_flags = 0 /obj/item/weapon/reagent_containers/food/drinks/New() ..() @@ -105,6 +105,7 @@ volume = 5 flags = CONDUCT | OPENCONTAINER spillable = 1 + resistance_flags = FIRE_PROOF /obj/item/weapon/reagent_containers/food/drinks/trophy/gold_cup name = "gold cup" diff --git a/code/modules/food_and_drinks/drinks/drinks/drinkingglass.dm b/code/modules/food_and_drinks/drinks/drinks/drinkingglass.dm index 41473bcfc9f..3bf95470b8b 100644 --- a/code/modules/food_and_drinks/drinks/drinks/drinkingglass.dm +++ b/code/modules/food_and_drinks/drinks/drinks/drinkingglass.dm @@ -7,21 +7,10 @@ amount_per_transfer_from_this = 10 volume = 50 materials = list(MAT_GLASS=500) - resistance_flags = 0 - burntime = 5 + obj_integrity = 20 + max_integrity = 20 spillable = 1 - -/obj/item/weapon/reagent_containers/food/drinks/drinkingglass/fire_act() - if(!reagents.total_volume) - return - ..() - -/obj/item/weapon/reagent_containers/food/drinks/drinkingglass/burn() - reagents.total_volume = 0 //Burns away all the alcohol :( - reagents.reagent_list.Cut() - on_reagent_change() - extinguish() - return + resistance_flags = ACID_PROOF /obj/item/weapon/reagent_containers/food/drinks/drinkingglass/on_reagent_change() cut_overlays() diff --git a/code/modules/food_and_drinks/food.dm b/code/modules/food_and_drinks/food.dm index 9905d061150..4a05510ff07 100644 --- a/code/modules/food_and_drinks/food.dm +++ b/code/modules/food_and_drinks/food.dm @@ -4,7 +4,7 @@ /obj/item/weapon/reagent_containers/food possible_transfer_amounts = list() volume = 50 //Sets the default container amount for all food items. - resistance_flags = 0 + resistance_flags = FLAMMABLE /obj/item/weapon/reagent_containers/food/New() ..() diff --git a/code/modules/food_and_drinks/food/snacks/meat.dm b/code/modules/food_and_drinks/food/snacks/meat.dm index f16532a9bf9..406b998d7ed 100644 --- a/code/modules/food_and_drinks/food/snacks/meat.dm +++ b/code/modules/food_and_drinks/food/snacks/meat.dm @@ -176,12 +176,6 @@ list_reagents = list("nutriment" = 3, "toxin" = 5) icon_state = "goliathmeat" -/obj/item/weapon/reagent_containers/food/snacks/meat/slab/goliath/burn() - visible_message("\The [src] finishes cooking!") - new/obj/item/weapon/reagent_containers/food/snacks/meat/steak/goliath/(src.loc) - SSobj.burning -= src - qdel(src) - /obj/item/weapon/reagent_containers/food/snacks/meat/slab/meatwheat name = "meatwheat clump" desc = "This doesn't look like meat, but your standards aren't that high to begin with." diff --git a/code/modules/food_and_drinks/kitchen_machinery/food_cart.dm b/code/modules/food_and_drinks/kitchen_machinery/food_cart.dm index 6ce7a8b1790..54acb1aa49f 100644 --- a/code/modules/food_and_drinks/kitchen_machinery/food_cart.dm +++ b/code/modules/food_and_drinks/kitchen_machinery/food_cart.dm @@ -25,6 +25,12 @@ mixer = new /obj/item/weapon/reagent_containers(src, MIXER_CAPACITY) mixer.name = "Mixer" +/obj/machinery/food_cart/Destroy() + if(mixer) + qdel(mixer) + mixer = null + return ..() + /obj/machinery/food_cart/attack_hand(mob/user) user.set_machine(src) interact(user) @@ -150,6 +156,11 @@ usr << browse(null,"window=foodcart") return +/obj/machinery/food_cart/deconstruct(disassembled = TRUE) + if(!(flags & NODECONSTRUCT)) + new /obj/item/stack/sheet/metal(loc, 4) + qdel(src) + #undef STORAGE_CAPACITY #undef LIQUID_CAPACIY #undef MIXER_CAPACITY diff --git a/code/modules/food_and_drinks/kitchen_machinery/icecream_vat.dm b/code/modules/food_and_drinks/kitchen_machinery/icecream_vat.dm index ea2fa786b16..56b4ec3f757 100644 --- a/code/modules/food_and_drinks/kitchen_machinery/icecream_vat.dm +++ b/code/modules/food_and_drinks/kitchen_machinery/icecream_vat.dm @@ -18,6 +18,8 @@ var/dispense_flavour = ICECREAM_VANILLA var/flavour_name = "vanilla" flags = OPENCONTAINER + obj_integrity = 300 + max_integrity = 300 /obj/machinery/icecream_vat/proc/get_ingredient_list(type) switch(type) @@ -206,6 +208,12 @@ reagents.add_reagent("singulo", 2) ice_creamed = 1 +/obj/machinery/icecream_vat/deconstruct(disassembled = TRUE) + if(!(flags & NODECONSTRUCT)) + new /obj/item/stack/sheet/metal(loc, 4) + qdel(src) + + #undef ICECREAM_VANILLA #undef ICECREAM_CHOCOLATE #undef ICECREAM_STRAWBERRY diff --git a/code/modules/food_and_drinks/kitchen_machinery/smartfridge.dm b/code/modules/food_and_drinks/kitchen_machinery/smartfridge.dm index 33e5d058f9c..f61e370eff0 100644 --- a/code/modules/food_and_drinks/kitchen_machinery/smartfridge.dm +++ b/code/modules/food_and_drinks/kitchen_machinery/smartfridge.dm @@ -49,14 +49,6 @@ else return ..() -/obj/machinery/smartfridge/on_construction() - for(var/datum/A in contents) - qdel(A) - -/obj/machinery/smartfridge/on_deconstruction() - for(var/atom/movable/A in contents) - A.loc = loc - /obj/machinery/smartfridge/RefreshParts() for(var/obj/item/weapon/stock_parts/matter_bin/B in component_parts) max_n_of_items = 1500 * B.rating @@ -95,44 +87,44 @@ updateUsrDialog() return - if(stat) - return 0 + if(!stat) - if(contents.len >= max_n_of_items) - user << "\The [src] is full!" - return 0 - - if(accept_check(O)) - load(O) - user.visible_message("[user] has added \the [O] to \the [src].", "You add \the [O] to \the [src].") - updateUsrDialog() - return 1 - - if(istype(O, /obj/item/weapon/storage/bag)) - var/obj/item/weapon/storage/P = O - var/loaded = 0 - for(var/obj/G in P.contents) - if(contents.len >= max_n_of_items) - break - if(accept_check(G)) - load(G) - loaded++ - updateUsrDialog() - - if(loaded) - if(contents.len >= max_n_of_items) - user.visible_message("[user] loads \the [src] with \the [O].", \ - "You fill \the [src] with \the [O].") - else - user.visible_message("[user] loads \the [src] with \the [O].", \ - "You load \the [src] with \the [O].") - if(O.contents.len > 0) - user << "Some items are refused." - else - user << "There is nothing in [O] to put in [src]!" + if(contents.len >= max_n_of_items) + user << "\The [src] is full!" return 0 - else if(user.a_intent != "harm") + if(accept_check(O)) + load(O) + user.visible_message("[user] has added \the [O] to \the [src].", "You add \the [O] to \the [src].") + updateUsrDialog() + return 1 + + if(istype(O, /obj/item/weapon/storage/bag)) + var/obj/item/weapon/storage/P = O + var/loaded = 0 + for(var/obj/G in P.contents) + if(contents.len >= max_n_of_items) + break + if(accept_check(G)) + load(G) + loaded++ + updateUsrDialog() + + if(loaded) + if(contents.len >= max_n_of_items) + user.visible_message("[user] loads \the [src] with \the [O].", \ + "You fill \the [src] with \the [O].") + else + user.visible_message("[user] loads \the [src] with \the [O].", \ + "You load \the [src] with \the [O].") + if(O.contents.len > 0) + user << "Some items are refused." + return 1 + else + user << "There is nothing in [O] to put in [src]!" + return 0 + + if(user.a_intent != "harm") user << "\The [src] smartly refuses [O]." updateUsrDialog() return 0 @@ -294,6 +286,10 @@ return 1 return 0 +/obj/machinery/smartfridge/drying_rack/deconstruct(disassembled = TRUE) + new /obj/item/stack/sheet/mineral/wood (loc, 10) + qdel(src) + /obj/machinery/smartfridge/drying_rack/proc/toggle_drying(forceoff = 0) if(drying || forceoff) drying = 0 diff --git a/code/modules/games/cards.dm b/code/modules/games/cards.dm index e00dc38691b..bb8d4e144eb 100644 --- a/code/modules/games/cards.dm +++ b/code/modules/games/cards.dm @@ -125,7 +125,7 @@ var/blank = 0 var/list/cards = list() var/datum/html_interface/hi - resistance_flags = 0 + resistance_flags = FLAMMABLE /obj/item/weapon/hand/New(loc) . = ..() diff --git a/code/modules/holodeck/area_copy.dm b/code/modules/holodeck/area_copy.dm index 67e55144f48..d2e4a1d05b2 100644 --- a/code/modules/holodeck/area_copy.dm +++ b/code/modules/holodeck/area_copy.dm @@ -21,7 +21,7 @@ O.vars[V] = original.vars[V] if(istype(O)) - O.resistance_flags |= LAVA_PROOF | FIRE_PROOF | UNACIDABLE // holoitems do not burn + O.resistance_flags = LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF // holoitems do not burn if(nerf && istype(O,/obj/item)) var/obj/item/I = O I.damtype = STAMINA // thou shalt not diff --git a/code/modules/hydroponics/grown.dm b/code/modules/hydroponics/grown.dm index 77f04b08ccc..d486dec83ab 100644 --- a/code/modules/hydroponics/grown.dm +++ b/code/modules/hydroponics/grown.dm @@ -14,7 +14,7 @@ dried_type = -1 // Saves us from having to define each stupid grown's dried_type as itself. // If you don't want a plant to be driable (watermelons) set this to null in the time definition. - resistance_flags = 0 + resistance_flags = FLAMMABLE origin_tech = "biotech=1" /obj/item/weapon/reagent_containers/food/snacks/grown/New(newloc, var/obj/item/seeds/new_seed = null) diff --git a/code/modules/hydroponics/grown/kudzu.dm b/code/modules/hydroponics/grown/kudzu.dm index c431644831c..2e05b8bb35b 100644 --- a/code/modules/hydroponics/grown/kudzu.dm +++ b/code/modules/hydroponics/grown/kudzu.dm @@ -32,7 +32,7 @@ var/turf/T = get_turf(src) message_admins("Kudzu planted by [key_name_admin(user)](?) (FLW) at ([T.x],[T.y],[T.z] - (JMP))",0,1) investigate_log("was planted by [key_name(user)] at ([T.x],[T.y],[T.z])","kudzu") - new /obj/structure/spacevine_controller(user.loc, mutations, potency, production) + new /obj/effect/spacevine_controller(user.loc, mutations, potency, production) qdel(src) /obj/item/seeds/kudzu/attack_self(mob/user) diff --git a/code/modules/hydroponics/grown/misc.dm b/code/modules/hydroponics/grown/misc.dm index 4504d1740ba..508880f5c6e 100644 --- a/code/modules/hydroponics/grown/misc.dm +++ b/code/modules/hydroponics/grown/misc.dm @@ -115,6 +115,8 @@ seed = /obj/item/seeds/cherry/bomb bitesize_mod = 2 volume = 125 //Gives enough room for the black powder at max potency + obj_integrity = 40 + max_integrity = 40 /obj/item/weapon/reagent_containers/food/snacks/grown/cherry_bomb/attack_self(mob/living/user) var/area/A = get_area(user) @@ -123,12 +125,14 @@ log_game("[user] ([user.key ? user.key : "no key"]) primed a cherry bomb for detonation at [A] ([user.x],[user.y],[user.z]).") prime() -/obj/item/weapon/reagent_containers/food/snacks/grown/cherry_bomb/burn() - prime() - ..() +/obj/item/weapon/reagent_containers/food/snacks/grown/cherry_bomb/deconstruct(disassembled = TRUE) + if(!disassembled) + prime() + if(!qdeleted(src)) + qdel(src) /obj/item/weapon/reagent_containers/food/snacks/grown/cherry_bomb/ex_act(severity) - qdel(src) //Ensuring that it's deleted by its own explosion + qdel(src) //Ensuring that it's deleted by its own explosion. Also prevents mass chain reaction with piles of cherry bombs /obj/item/weapon/reagent_containers/food/snacks/grown/cherry_bomb/proc/prime() icon_state = "cherry_bomb_lit" diff --git a/code/modules/hydroponics/grown/mushrooms.dm b/code/modules/hydroponics/grown/mushrooms.dm index c974d1b9da3..0125c35fcbd 100644 --- a/code/modules/hydroponics/grown/mushrooms.dm +++ b/code/modules/hydroponics/grown/mushrooms.dm @@ -245,7 +245,8 @@ return var/obj/structure/glowshroom/planted = new effect_path(user.loc) planted.delay = planted.delay - seed.production * 100 //So the delay goes DOWN with better stats instead of up. :I - planted.endurance = seed.endurance + planted.obj_integrity = seed.endurance + planted.max_integrity = seed.endurance planted.yield = seed.yield planted.potency = seed.potency user << "You plant [src]." diff --git a/code/modules/hydroponics/grown/nettle.dm b/code/modules/hydroponics/grown/nettle.dm index 04ac147e52d..fa8f9fc1de7 100644 --- a/code/modules/hydroponics/grown/nettle.dm +++ b/code/modules/hydroponics/grown/nettle.dm @@ -56,7 +56,7 @@ var/hit_zone = (C.held_index_to_dir(C.active_hand_index) == "l" ? "l_":"r_") + "arm" var/obj/item/bodypart/affecting = C.get_bodypart(hit_zone) if(affecting) - if(affecting.take_damage(0, force)) + if(affecting.receive_damage(0, force)) C.update_damage_overlays() C << "The nettle burns your bare hand!" return 1 diff --git a/code/modules/hydroponics/grown/towercap.dm b/code/modules/hydroponics/grown/towercap.dm index a1c9b2fc2d6..8fa0c463c3b 100644 --- a/code/modules/hydroponics/grown/towercap.dm +++ b/code/modules/hydroponics/grown/towercap.dm @@ -150,7 +150,7 @@ Burn() START_PROCESSING(SSobj, src) -/obj/structure/bonfire/fire_act() +/obj/structure/bonfire/fire_act(exposed_temperature, exposed_volume) StartBurning() /obj/structure/bonfire/Crossed(atom/movable/AM) @@ -165,9 +165,7 @@ continue if(isobj(A)) var/obj/O = A - if(O.resistance_flags & FIRE_PROOF) - continue - O.fire_act() + O.fire_act(1000, 500) else if(isliving(A)) var/mob/living/L = A L.adjust_fire_stacks(fire_stack_strength) diff --git a/code/modules/hydroponics/growninedible.dm b/code/modules/hydroponics/growninedible.dm index 4fe9efe83c6..2c23081c95d 100644 --- a/code/modules/hydroponics/growninedible.dm +++ b/code/modules/hydroponics/growninedible.dm @@ -5,7 +5,7 @@ /obj/item/weapon/grown // Grown weapons name = "grown_weapon" icon = 'icons/obj/hydroponics/harvest.dmi' - resistance_flags = 0 + resistance_flags = FLAMMABLE var/obj/item/seeds/seed = null // type path, gets converted to item on New(). It's safe to assume it's always a seed item. /obj/item/weapon/grown/New(newloc, var/obj/item/seeds/new_seed = null) diff --git a/code/modules/hydroponics/hydroponics.dm b/code/modules/hydroponics/hydroponics.dm index 7b38596b2e3..82134306813 100644 --- a/code/modules/hydroponics/hydroponics.dm +++ b/code/modules/hydroponics/hydroponics.dm @@ -16,7 +16,7 @@ var/toxic = 0 //Toxicity in the tray? var/age = 0 //Current age var/dead = 0 //Is it dead? - var/health = 0 //Its health. + var/plant_health //Its health var/lastproduce = 0 //Last time it was harvested var/lastcycle = 0 //Used for timing of cycles. var/cycledelay = 200 //About 10 seconds / cycle @@ -197,8 +197,8 @@ //Health & Age/////////////////////////////////////////////////////////// - // Plant dies if health <= 0 - if(health <= 0) + // Plant dies if plant_health <= 0 + if(plant_health <= 0) plantdies() adjustWeeds(1 / rating) // Weeds flourish @@ -305,7 +305,7 @@ add_overlay(image('icons/obj/hydroponics/equipment.dmi', icon_state = "over_lowwater3")) if(nutrilevel <= 2) add_overlay(image('icons/obj/hydroponics/equipment.dmi', icon_state = "over_lownutri3")) - if(health <= (myseed.endurance / 2)) + if(plant_health <= (myseed.endurance / 2)) add_overlay(image('icons/obj/hydroponics/equipment.dmi', icon_state = "over_lowhealth3")) if(weedlevel >= 5 || pestlevel >= 5 || toxic >= 40) add_overlay(image('icons/obj/hydroponics/equipment.dmi', icon_state = "over_alert3")) @@ -321,7 +321,7 @@ user << "It's dead!" else if (harvest) user << "It's ready to harvest." - else if (health <= (myseed.endurance / 2)) + else if (plant_health <= (myseed.endurance / 2)) user << "It looks unhealthy." else user << "[src] is empty." @@ -366,7 +366,7 @@ else myseed = new /obj/item/seeds/weeds(src) age = 0 - health = myseed.endurance + plant_health = myseed.endurance lastcycle = world.time harvest = 0 weedlevel = 0 // Reset @@ -399,7 +399,7 @@ hardmutate() age = 0 - health = myseed.endurance + plant_health = myseed.endurance lastcycle = world.time harvest = 0 weedlevel = 0 // Reset @@ -419,7 +419,7 @@ dead = 0 hardmutate() age = 0 - health = myseed.endurance + plant_health = myseed.endurance lastcycle = world.time harvest = 0 weedlevel = 0 // Reset @@ -432,7 +432,7 @@ /obj/machinery/hydroponics/proc/plantdies() // OH NOES!!!!! I put this all in one function to make things easier - health = 0 + plant_health = 0 harvest = 0 pestlevel = 0 // Pests die if(!dead) @@ -773,9 +773,9 @@ dead = 0 myseed = O age = 1 - health = myseed.endurance + plant_health = myseed.endurance lastcycle = world.time - O.loc = src + O.forceMove(src) update_icon() else user << "[src] already has seeds in it!" @@ -858,7 +858,7 @@ playsound(src, 'sound/effects/shovel_dig.ogg', 50, 1) if(myseed) //Could be that they're just using it as a de-weeder age = 0 - health = 0 + plant_health = 0 if(harvest) harvest = FALSE //To make sure they can't just put in another seed and insta-harvest it qdel(myseed) @@ -910,7 +910,7 @@ /obj/machinery/hydroponics/proc/adjustHealth(adjustamt) if(myseed && !dead) - health = Clamp(health + adjustamt, 0, myseed.endurance) + plant_health = Clamp(plant_health + adjustamt, 0, myseed.endurance) /obj/machinery/hydroponics/proc/adjustToxic(adjustamt) toxic = Clamp(toxic + adjustamt, 0, 100) diff --git a/code/modules/hydroponics/plant_genes.dm b/code/modules/hydroponics/plant_genes.dm index 3812bc18124..7431980ac1f 100644 --- a/code/modules/hydroponics/plant_genes.dm +++ b/code/modules/hydroponics/plant_genes.dm @@ -276,7 +276,7 @@ if(isliving(target)) var/teleport_radius = max(round(G.seed.potency / 10), 1) var/turf/T = get_turf(target) - new /obj/effect/decal/cleanable/molten_item(T) //Leave a pile of goo behind for dramatic effect... + new /obj/effect/decal/cleanable/molten_object(T) //Leave a pile of goo behind for dramatic effect... do_teleport(target, T, teleport_radius) /datum/plant_gene/trait/teleport/on_slip(obj/item/weapon/reagent_containers/food/snacks/grown/G, mob/living/carbon/C) @@ -287,7 +287,7 @@ if(prob(50)) do_teleport(G, T, teleport_radius) else - new /obj/effect/decal/cleanable/molten_item(T) //Leave a pile of goo behind for dramatic effect... + new /obj/effect/decal/cleanable/molten_object(T) //Leave a pile of goo behind for dramatic effect... qdel(G) diff --git a/code/modules/hydroponics/seeds.dm b/code/modules/hydroponics/seeds.dm index 51bdb5b7fb8..b395b8e277d 100644 --- a/code/modules/hydroponics/seeds.dm +++ b/code/modules/hydroponics/seeds.dm @@ -6,7 +6,7 @@ icon = 'icons/obj/hydroponics/seeds.dmi' icon_state = "seed" // Unknown plant seed - these shouldn't exist in-game. w_class = 1 - resistance_flags = 0 + resistance_flags = FLAMMABLE var/plantname = "Plants" // Name of plant when planted. var/product // A type path. The thing that is created when the plant is harvested. var/species = "" // Used to update icons. Should match the name in the sprites unless all icon_* are overriden. diff --git a/code/modules/library/lib_items.dm b/code/modules/library/lib_items.dm index abdd72df540..c707fb544bb 100644 --- a/code/modules/library/lib_items.dm +++ b/code/modules/library/lib_items.dm @@ -17,8 +17,10 @@ anchored = 0 density = 1 opacity = 0 - resistance_flags = 0 - burntime = 30 + resistance_flags = FLAMMABLE + obj_integrity = 200 + max_integrity = 200 + armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 50, acid = 0) var/state = 0 var/list/allowed_books = list(/obj/item/weapon/book, /obj/item/weapon/spellbook, /obj/item/weapon/storage/book) //Things allowed in the bookcase @@ -46,8 +48,7 @@ playsound(loc, 'sound/items/Crowbar.ogg', 100, 1) if(do_after(user, 20/I.toolspeed, target = src)) user << "You pry the frame apart." - new /obj/item/stack/sheet/mineral/wood(loc, 4) - qdel(src) + deconstruct(TRUE) if(1) if(istype(I, /obj/item/stack/sheet/mineral/wood)) @@ -109,13 +110,12 @@ update_icon() -/obj/structure/bookcase/ex_act(severity, target) - ..() - if(!qdeleted(src)) - for(var/obj/item/weapon/book/b in contents) - b.loc = (get_turf(src)) - if(prob(50)) - qdel(src) +/obj/structure/bookcase/deconstruct(disassembled = TRUE) + new /obj/item/stack/sheet/mineral/wood(loc, 4) + for(var/obj/item/weapon/book/B in contents) + B.forceMove(get_turf(src)) + qdel(src) + /obj/structure/bookcase/update_icon() if(contents.len < 5) @@ -167,7 +167,7 @@ throw_range = 5 w_class = 3 //upped to three because books are, y'know, pretty big. (and you could hide them inside eachother recursively forever) attack_verb = list("bashed", "whacked", "educated") - resistance_flags = 0 + resistance_flags = FLAMMABLE var/dat //Actual page content var/due_date = 0 //Game time in 1/10th seconds var/author //Who wrote the thing, can be changed by pen or PC. It is not automatically assigned diff --git a/code/modules/mining/abandoned_crates.dm b/code/modules/mining/abandoned_crates.dm index 9109ddefc76..c31226730ea 100644 --- a/code/modules/mining/abandoned_crates.dm +++ b/code/modules/mining/abandoned_crates.dm @@ -179,9 +179,6 @@ else return ..() -/obj/structure/closet/crate/secure/loot/attack_animal(mob/user) - boom(user) - /obj/structure/closet/crate/secure/loot/AltClick(mob/living/user) if(!user.canUseTopic(src)) return @@ -224,8 +221,7 @@ else ..() -/obj/structure/closet/crate/secure/loot/burn() - SSobj.burning -= src +/obj/structure/closet/crate/secure/loot/deconstruct(disassembled = TRUE) boom() /obj/structure/closet/crate/secure/loot/proc/boom(mob/user) diff --git a/code/modules/mining/lavaland/ash_flora.dm b/code/modules/mining/lavaland/ash_flora.dm index ae054817156..4a6c74c82b8 100644 --- a/code/modules/mining/lavaland/ash_flora.dm +++ b/code/modules/mining/lavaland/ash_flora.dm @@ -152,8 +152,9 @@ icon = 'icons/obj/lavaland/ash_flora.dmi' icon_state = "mushroom_shavings" w_class = 1 - resistance_flags = 0 - burntime = 30 + resistance_flags = FLAMMABLE + obj_integrity = 100 + max_integrity = 100 var/prepared = FALSE var/prepared_type = /obj/item/ash_flora/shavings var/standard_prep = TRUE @@ -240,8 +241,9 @@ icon = 'icons/obj/lavaland/ash_flora.dmi' icon_state = "mushroom_bowl" w_class = 2 - resistance_flags = 0 - burntime = 40 + resistance_flags = FLAMMABLE + obj_integrity = 200 + max_integrity = 200 //what you can craft with these things /datum/crafting_recipe/mushroom_bowl diff --git a/code/modules/mining/lavaland/necropolis_chests.dm b/code/modules/mining/lavaland/necropolis_chests.dm index 46f25ab3c4b..6a244812746 100644 --- a/code/modules/mining/lavaland/necropolis_chests.dm +++ b/code/modules/mining/lavaland/necropolis_chests.dm @@ -252,7 +252,6 @@ /obj/effect/immortality_talisman icon_state = "blank" icon = 'icons/effects/effects.dmi' - resistance_flags = LAVA_PROOF | FIRE_PROOF | ACID_PROOF var/can_destroy = FALSE /obj/effect/immortality_talisman/attackby() diff --git a/code/modules/mining/mine_items.dm b/code/modules/mining/mine_items.dm index 4474a48fc0c..e3c54e6290c 100644 --- a/code/modules/mining/mine_items.dm +++ b/code/modules/mining/mine_items.dm @@ -451,9 +451,10 @@ var/buildstackamount = 5 /obj/structure/fans/deconstruct() - if(buildstacktype) - new buildstacktype(loc,buildstackamount) - ..() + if(!(flags & NODECONSTRUCT)) + if(buildstacktype) + new buildstacktype(loc,buildstackamount) + qdel(src) /obj/structure/fans/attackby(obj/item/weapon/W, mob/user, params) if(istype(W, /obj/item/weapon/wrench) && !(flags&NODECONSTRUCT)) diff --git a/code/modules/mining/mine_turfs.dm b/code/modules/mining/mine_turfs.dm index 88c0e85baf4..0f0f4d776c0 100644 --- a/code/modules/mining/mine_turfs.dm +++ b/code/modules/mining/mine_turfs.dm @@ -36,6 +36,10 @@ if(istype(T, /turf/closed/mineral/random)) Spread(T) + +/turf/closed/mineral/acid_melt() + ChangeTurf(baseturf) + /turf/closed/mineral/volcanic environment_type = "basalt" turf_type = /turf/open/floor/plating/asteroid/basalt diff --git a/code/modules/mining/minebot.dm b/code/modules/mining/minebot.dm index bb92d145e93..234f3adfcaa 100644 --- a/code/modules/mining/minebot.dm +++ b/code/modules/mining/minebot.dm @@ -24,6 +24,7 @@ maxHealth = 125 melee_damage_lower = 15 melee_damage_upper = 15 + obj_damage = 0 environment_smash = 0 check_friendly_fire = 1 stop_automated_movement_when_pulled = 1 diff --git a/code/modules/mining/money_bag.dm b/code/modules/mining/money_bag.dm index d98a98b714c..f68565e29ce 100644 --- a/code/modules/mining/money_bag.dm +++ b/code/modules/mining/money_bag.dm @@ -5,8 +5,9 @@ icon_state = "moneybag" force = 10 throwforce = 0 - resistance_flags = 0 - burntime = 20 + resistance_flags = FLAMMABLE + obj_integrity = 100 + max_integrity = 100 w_class = 4 max_w_class = 3 storage_slots = 80 diff --git a/code/modules/mob/inventory.dm b/code/modules/mob/inventory.dm index 542616a278e..89f1a5a7529 100644 --- a/code/modules/mob/inventory.dm +++ b/code/modules/mob/inventory.dm @@ -315,6 +315,7 @@ return items + /obj/item/proc/equip_to_best_slot(var/mob/M) if(src != M.get_active_held_item()) M << "You are not holding anything to equip!" diff --git a/code/modules/mob/living/bloodcrawl.dm b/code/modules/mob/living/bloodcrawl.dm index 8fb5aa0cced..a1ada1800a3 100644 --- a/code/modules/mob/living/bloodcrawl.dm +++ b/code/modules/mob/living/bloodcrawl.dm @@ -6,7 +6,7 @@ density = 0 anchored = 1 invisibility = 60 - resistance_flags = LAVA_PROOF | FIRE_PROOF | UNACIDABLE + resistance_flags = LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF /obj/effect/dummy/slaughter/relaymove(mob/user, direction) forceMove(get_step(src,direction)) diff --git a/code/modules/mob/living/brain/MMI.dm b/code/modules/mob/living/brain/MMI.dm index 32179d23f61..9d8ea058792 100644 --- a/code/modules/mob/living/brain/MMI.dm +++ b/code/modules/mob/living/brain/MMI.dm @@ -90,23 +90,27 @@ user << "You toggle the MMI's radio system [radio.on==1 ? "on" : "off"]." else user << "You unlock and upend the MMI, spilling the brain onto the floor." - - brainmob.container = null //Reset brainmob mmi var. - brainmob.loc = brain //Throw mob into brain. - brainmob.stat = DEAD - brainmob.emp_damage = 0 - brainmob.reset_perspective() //so the brainmob follows the brain organ instead of the mmi. And to update our vision - living_mob_list -= brainmob //Get outta here - dead_mob_list += brainmob - brain.brainmob = brainmob //Set the brain to use the brainmob - brainmob = null //Set mmi brainmob var to null - - user.put_in_hands(brain) //puts brain in the user's hand or otherwise drops it on the user's turf - brain = null //No more brain in here - + eject_brain(user) update_icon() name = "Man-Machine Interface" +/obj/item/device/mmi/proc/eject_brain(mob/user) + brainmob.container = null //Reset brainmob mmi var. + brainmob.loc = brain //Throw mob into brain. + brainmob.stat = DEAD + brainmob.emp_damage = 0 + brainmob.reset_perspective() //so the brainmob follows the brain organ instead of the mmi. And to update our vision + living_mob_list -= brainmob //Get outta here + dead_mob_list += brainmob + brain.brainmob = brainmob //Set the brain to use the brainmob + brainmob = null //Set mmi brainmob var to null + if(user) + user.put_in_hands(brain) //puts brain in the user's hand or otherwise drops it on the user's turf + else + brain.forceMove(get_turf(src)) + brain = null //No more brain in here + + /obj/item/device/mmi/proc/transfer_identity(mob/living/L) //Same deal as the regular brain proc. Used for human-->robot people. if(!brainmob) brainmob = new(src) @@ -170,8 +174,21 @@ if(brainmob) qdel(brainmob) brainmob = null + if(brain) + qdel(brain) + brain = null + if(mecha) + mecha = null + if(radio) + qdel(radio) + radio = null return ..() +/obj/item/device/mmi/deconstruct(disassembled = TRUE) + if(brain) + eject_brain() + qdel(src) + /obj/item/device/mmi/examine(mob/user) ..() if(brainmob) diff --git a/code/modules/mob/living/carbon/alien/alien_defense.dm b/code/modules/mob/living/carbon/alien/alien_defense.dm index 0d934446366..c78e574b2e9 100644 --- a/code/modules/mob/living/carbon/alien/alien_defense.dm +++ b/code/modules/mob/living/carbon/alien/alien_defense.dm @@ -109,6 +109,7 @@ In all, this is a lot like the monkey code. /N switch (severity) if (1) gib() + return if (2) take_overall_damage(60, 60) @@ -121,4 +122,7 @@ In all, this is a lot like the monkey code. /N adjustEarDamage(15,60) /mob/living/carbon/alien/soundbang_act(intensity = 1, stun_pwr = 1, damage_pwr = 5, deafen_pwr = 15) - return 0 \ No newline at end of file + return 0 + +/mob/living/carbon/alien/acid_act(acidpwr, acid_volume) + return 0//aliens are immune to acid. \ No newline at end of file diff --git a/code/modules/mob/living/carbon/alien/humanoid/alien_powers.dm b/code/modules/mob/living/carbon/alien/humanoid/alien_powers.dm index 8d155f8ceca..630c6d629c6 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/alien_powers.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/alien_powers.dm @@ -140,30 +140,16 @@ Doesn't work on other aliens/AI.*/ /obj/effect/proc_holder/alien/acid/on_lose(mob/living/carbon/user) user.verbs.Remove(/mob/living/carbon/proc/corrosive_acid) -/obj/effect/proc_holder/alien/acid/proc/corrode(target,mob/living/carbon/user = usr) +/obj/effect/proc_holder/alien/acid/proc/corrode(atom/target,mob/living/carbon/user = usr) if(target in oview(1,user)) - // OBJ CHECK - if(isobj(target)) - var/obj/I = target - if(I.resistance_flags & UNACIDABLE)//So the aliens don't destroy energy fields/singularies/other aliens/etc with their acid. - user << "You cannot dissolve this object." - return 0 - // TURF CHECK - else if(istype(target, /turf)) - var/turf/T = target - // R WALL - if(istype(T, /turf/closed/wall/r_wall)) - user << "You cannot dissolve this object." - return 0 - // R FLOOR - if(istype(T, /turf/open/floor/engine)) - user << "You cannot dissolve this object." - return 0 - else// Not a type we can acid. + if(target.acid_act(200, 100)) + user.visible_message("[user] vomits globs of vile stuff all over [target]. It begins to sizzle and melt under the bubbling mess of acid!") + return 1 + else + user << "You cannot dissolve this object." + + return 0 - new /obj/effect/acid(get_turf(target), target) - user.visible_message("[user] vomits globs of vile stuff all over [target]. It begins to sizzle and melt under the bubbling mess of acid!") - return 1 else src << "Target is too far away." return 0 @@ -171,8 +157,10 @@ Doesn't work on other aliens/AI.*/ /obj/effect/proc_holder/alien/acid/fire(mob/living/carbon/alien/user) var/O = input("Select what to dissolve:","Dissolve",null) as obj|turf in oview(1,user) - if(!O) return 0 - return corrode(O,user) + if(!O || user.incapacitated()) + return 0 + else + return corrode(O,user) /mob/living/carbon/proc/corrosive_acid(O as obj|turf in oview(1)) // right click menu verb ugh set name = "Corrossive Acid" diff --git a/code/modules/mob/living/carbon/alien/humanoid/humanoid_defense.dm b/code/modules/mob/living/carbon/alien/humanoid/humanoid_defense.dm index 4f08997c40f..a9b5fae735f 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/humanoid_defense.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/humanoid_defense.dm @@ -5,7 +5,7 @@ else ..() -/mob/living/carbon/alien/humanoid/attack_hulk(mob/living/carbon/human/user) +/mob/living/carbon/alien/humanoid/attack_hulk(mob/living/carbon/human/user, does_attack_animation = 0) if(user.a_intent == "harm") ..(user, 1) adjustBruteLoss(15) diff --git a/code/modules/mob/living/carbon/alien/larva/larva_defense.dm b/code/modules/mob/living/carbon/alien/larva/larva_defense.dm index 77bab6cdf04..82bb19b1475 100644 --- a/code/modules/mob/living/carbon/alien/larva/larva_defense.dm +++ b/code/modules/mob/living/carbon/alien/larva/larva_defense.dm @@ -18,7 +18,7 @@ visible_message("[M] has attempted to kick [src]!", \ "[M] has attempted to kick [src]!") -/mob/living/carbon/alien/larva/attack_hulk(mob/living/carbon/human/user) +/mob/living/carbon/alien/larva/attack_hulk(mob/living/carbon/human/user, does_attack_animation = 0) if(user.a_intent == "harm") ..(user, 1) adjustBruteLoss(5 + rand(1,9)) diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index 1c26411d02f..5bc761c0faa 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -30,7 +30,7 @@ if(I && I.force) var/d = rand(round(I.force / 4), I.force) var/obj/item/bodypart/BP = get_bodypart("chest") - if(BP.take_damage(d, 0)) + if(BP.receive_damage(d, 0)) update_damage_overlays() visible_message("[user] attacks [src]'s stomach wall with the [I.name]!", \ "[user] attacks your stomach wall with the [I.name]!") @@ -501,8 +501,6 @@ update_stat() if(((maxHealth - total_burn) < HEALTH_THRESHOLD_DEAD) && stat == DEAD ) become_husk() - if(on_fire) - shred_clothing() med_hud_set_health() /mob/living/carbon/update_sight() @@ -707,6 +705,13 @@ ..() +/mob/living/carbon/ExtinguishMob() + for(var/X in get_equipped_items()) + var/obj/item/I = X + I.acid_level = 0 //washes off the acid on our clothes + I.extinguish() //extinguishes our clothes + ..() + /mob/living/carbon/fakefire(var/fire_icon = "Generic_mob_burning") overlays_standing[FIRE_LAYER] = image("icon"='icons/mob/OnFire.dmi', "icon_state"= fire_icon, "layer"=-FIRE_LAYER) apply_overlay(FIRE_LAYER) diff --git a/code/modules/mob/living/carbon/carbon_defense.dm b/code/modules/mob/living/carbon/carbon_defense.dm index ea2195d1727..74898463ff9 100644 --- a/code/modules/mob/living/carbon/carbon_defense.dm +++ b/code/modules/mob/living/carbon/carbon_defense.dm @@ -286,3 +286,15 @@ mob/living/carbon/bullet_act(obj/item/projectile/P, def_zone) src << "Your ears start to ring!" src << sound('sound/weapons/flash_ring.ogg',0,1,0,250) return effect_amount //how soundbanged we are + + +/mob/living/carbon/damage_clothes(damage_amount, damage_type = BRUTE, damage_flag = 0, def_zone) + var/bodypart_bit = 0 + if(def_zone) + bodypart_bit = body_zone2body_parts_covered(def_zone) + for(var/X in get_equipped_items()) + var/obj/item/I = X + if(I.body_parts_covered & bodypart_bit) + I.take_damage(0.5*damage_amount, damage_type, damage_flag, 0) + //0.5 multiplier for balance reason, we don't want clothes to be too easily destroyed + diff --git a/code/modules/mob/living/carbon/damage_procs.dm b/code/modules/mob/living/carbon/damage_procs.dm index 6da20373f62..226a4f4666a 100644 --- a/code/modules/mob/living/carbon/damage_procs.dm +++ b/code/modules/mob/living/carbon/damage_procs.dm @@ -18,13 +18,13 @@ switch(damagetype) if(BRUTE) if(BP) - if(BP.take_damage(damage * hit_percent, 0)) + if(BP.receive_damage(damage * hit_percent, 0)) update_damage_overlays() else //no bodypart, we deal damage with a more general method. adjustBruteLoss(damage * hit_percent) if(BURN) if(BP) - if(BP.take_damage(0, damage * hit_percent)) + if(BP.receive_damage(0, damage * hit_percent)) update_damage_overlays() else adjustFireLoss(damage * hit_percent) @@ -120,7 +120,7 @@ if(!parts.len) return var/obj/item/bodypart/picked = pick(parts) - if(picked.take_damage(brute,burn)) + if(picked.receive_damage(brute,burn)) update_damage_overlays() @@ -162,7 +162,7 @@ var/burn_was = picked.burn_dam - update |= picked.take_damage(brute_per_part,burn_per_part, 0) + update |= picked.receive_damage(brute_per_part,burn_per_part, 0) brute -= (picked.brute_dam - brute_was) burn -= (picked.burn_dam - burn_was) diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm index dc076f45497..b9285c64abc 100644 --- a/code/modules/mob/living/carbon/human/examine.dm +++ b/code/modules/mob/living/carbon/human/examine.dm @@ -306,10 +306,10 @@ msg += "Detected cybernetic modifications:
" msg += implant_detect if(R) - var/health = R.fields["p_stat"] - msg += "\[[health]\]" - health = R.fields["m_stat"] - msg += "\[[health]\]
" + var/health_r = R.fields["p_stat"] + msg += "\[[health_r]\]" + health_r = R.fields["m_stat"] + msg += "\[[health_r]\]
" R = find_record("name", perpname, data_core.medical) if(R) msg += "\[Medical evaluation\]
" diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index e04bbd5b023..bcc9bdfe3cb 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -219,8 +219,8 @@ if(!I || !L || I.loc != src || !(I in L.embedded_objects)) return L.embedded_objects -= I - L.take_damage(I.embedded_unsafe_removal_pain_multiplier*I.w_class)//It hurts to rip it out, get surgery you dingus. - I.loc = get_turf(src) + L.receive_damage(I.embedded_unsafe_removal_pain_multiplier*I.w_class)//It hurts to rip it out, get surgery you dingus. + I.forceMove(get_turf(src)) usr.put_in_hands(I) usr.emote("scream") usr.visible_message("[usr] successfully rips [I] out of their [L.name]!","You successfully remove [I] from your [L.name].") @@ -294,24 +294,24 @@ if(href_list["hud"] == "m") if(istype(H.glasses, /obj/item/clothing/glasses/hud/health)) if(href_list["p_stat"]) - var/health = input(usr, "Specify a new physical status for this person.", "Medical HUD", R.fields["p_stat"]) in list("Active", "Physically Unfit", "*Unconscious*", "*Deceased*", "Cancel") + var/health_status = input(usr, "Specify a new physical status for this person.", "Medical HUD", R.fields["p_stat"]) in list("Active", "Physically Unfit", "*Unconscious*", "*Deceased*", "Cancel") if(R) if(!H.canUseHUD()) return else if(!istype(H.glasses, /obj/item/clothing/glasses/hud/health)) return - if(health && health != "Cancel") - R.fields["p_stat"] = health + if(health_status && health_status != "Cancel") + R.fields["p_stat"] = health_status return if(href_list["m_stat"]) - var/health = input(usr, "Specify a new mental status for this person.", "Medical HUD", R.fields["m_stat"]) in list("Stable", "*Watch*", "*Unstable*", "*Insane*", "Cancel") + var/health_status = input(usr, "Specify a new mental status for this person.", "Medical HUD", R.fields["m_stat"]) in list("Stable", "*Watch*", "*Unstable*", "*Insane*", "Cancel") if(R) if(!H.canUseHUD()) return else if(!istype(H.glasses, /obj/item/clothing/glasses/hud/health)) return - if(health && health != "Cancel") - R.fields["m_stat"] = health + if(health_status && health_status != "Cancel") + R.fields["m_stat"] = health_status return if(href_list["evaluation"]) if(!getBruteLoss() && !getFireLoss() && !getOxyLoss() && getToxLoss() < 20) @@ -884,7 +884,6 @@ override = dna.species.override_float ..() - /mob/living/carbon/human/vomit(lost_nutrition = 10, blood = 0, stun = 1, distance = 0, message = 1, toxic = 0) if(blood && (NOBLOOD in dna.species.specflags)) if(message) @@ -893,4 +892,4 @@ if(stun) Weaken(10) return 1 - ..() \ No newline at end of file + ..() diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm index 766a37aad4a..cf7908ce2ef 100644 --- a/code/modules/mob/living/carbon/human/human_defense.dm +++ b/code/modules/mob/living/carbon/human/human_defense.dm @@ -18,8 +18,8 @@ return (armorval/max(organnum, 1)) -/mob/living/carbon/human/proc/checkarmor(obj/item/bodypart/def_zone, type) - if(!type) +/mob/living/carbon/human/proc/checkarmor(obj/item/bodypart/def_zone, d_type) + if(!d_type) return 0 var/protection = 0 var/list/body_parts = list(head, wear_mask, wear_suit, w_uniform, back, gloves, shoes, belt, s_store, glasses, ears, wear_id) //Everything but pockets. Pockets are l_store and r_store. (if pockets were allowed, putting something armored, gloves or hats for example, would double up on the armor) @@ -29,7 +29,7 @@ if(bp && istype(bp ,/obj/item/clothing)) var/obj/item/clothing/C = bp if(C.body_parts_covered & def_zone.body_part) - protection += C.armor[type] + protection += C.armor[d_type] return protection ///checkeyeprot() @@ -139,7 +139,7 @@ L.embedded_objects |= I I.add_mob_blood(src)//it embedded itself in you, of course it's bloody! I.loc = src - L.take_damage(I.w_class*I.embedded_impact_pain_multiplier) + L.receive_damage(I.w_class*I.embedded_impact_pain_multiplier) visible_message("\the [I.name] embeds itself in [src]'s [L.name]!","\the [I.name] embeds itself in your [L.name]!") hitpush = 0 skipcatch = 1 //can't catch the now embedded item @@ -171,7 +171,7 @@ return dna.species.spec_attacked_by(I, user, affecting, a_intent, src) -/mob/living/carbon/human/attack_hulk(mob/living/carbon/human/user) +/mob/living/carbon/human/attack_hulk(mob/living/carbon/human/user, does_attack_animation = 0) if(user.a_intent == "harm") ..(user, 1) playsound(loc, user.dna.species.attack_sound, 25, 1, -1) @@ -179,6 +179,7 @@ visible_message("[user] has [hulk_verb]ed [src]!", \ "[user] has [hulk_verb]ed [src]!") adjustBruteLoss(15) + damage_clothes(15, BRUTE, "melee") return 1 /mob/living/carbon/human/attack_hand(mob/living/carbon/human/M) @@ -190,7 +191,8 @@ /mob/living/carbon/human/attack_paw(mob/living/carbon/monkey/M) var/dam_zone = pick("chest", "l_hand", "r_hand", "l_leg", "r_leg") var/obj/item/bodypart/affecting = get_bodypart(ran_zone(dam_zone)) - + if(!affecting) + affecting = get_bodypart("chest") if(M.a_intent == "help") ..() //shaking return 0 @@ -203,6 +205,7 @@ var/damage = rand(1, 3) if(stat != DEAD) apply_damage(damage, BRUTE, affecting, run_armor_check(affecting, "melee")) + damage_clothes(damage, BRUTE, "melee", affecting.body_zone) return 1 /mob/living/carbon/human/attack_alien(mob/living/carbon/alien/humanoid/M) @@ -221,6 +224,8 @@ "[M] has lunged at [src]!") return 0 var/obj/item/bodypart/affecting = get_bodypart(ran_zone(M.zone_selected)) + if(!affecting) + affecting = get_bodypart("chest") var/armor_block = run_armor_check(affecting, "melee","","",10) playsound(loc, 'sound/weapons/slice.ogg', 25, 1, -1) @@ -230,6 +235,7 @@ if(!dismembering_strike(M, M.zone_selected)) //Dismemberment successful return 1 apply_damage(damage, BRUTE, affecting, armor_block) + damage_clothes(damage, BRUTE, "melee", affecting.body_zone) if(M.a_intent == "disarm") //Always drop item in hand, if no item, get stunned instead. if(get_active_held_item() && drop_item()) @@ -253,8 +259,11 @@ if(stat != DEAD) L.amount_grown = min(L.amount_grown + damage, L.max_grown) var/obj/item/bodypart/affecting = get_bodypart(ran_zone(L.zone_selected)) + if(!affecting) + affecting = get_bodypart("chest") var/armor_block = run_armor_check(affecting, "melee") apply_damage(damage, BRUTE, affecting, armor_block) + damage_clothes(damage, BRUTE, "melee", affecting.body_zone) /mob/living/carbon/human/attack_animal(mob/living/simple_animal/M) @@ -266,9 +275,11 @@ if(!dam_zone) //Dismemberment successful return 1 var/obj/item/bodypart/affecting = get_bodypart(ran_zone(dam_zone)) + if(!affecting) + affecting = get_bodypart("chest") var/armor = run_armor_check(affecting, "melee", armour_penetration = M.armour_penetration) apply_damage(damage, M.melee_damage_type, affecting, armor) - + damage_clothes(damage, BRUTE, "melee", affecting.body_zone) /mob/living/carbon/human/attack_slime(mob/living/simple_animal/slime/M) @@ -285,8 +296,11 @@ return 1 var/obj/item/bodypart/affecting = get_bodypart(ran_zone(dam_zone)) + if(!affecting) + affecting = get_bodypart("chest") var/armor_block = run_armor_check(affecting, "melee") apply_damage(damage, BRUTE, affecting, armor_block) + damage_clothes(damage, BRUTE, "melee", affecting.body_zone) /mob/living/carbon/human/mech_melee_attack(obj/mecha/M) @@ -297,15 +311,18 @@ var/obj/item/bodypart/temp = get_bodypart(pick("chest", "chest", "chest", "head")) if(temp) var/update = 0 + var/dmg = rand(M.force/2, M.force) switch(M.damtype) if("brute") if(M.force > 20) Paralyse(1) - update |= temp.take_damage(rand(M.force/2, M.force), 0) + update |= temp.receive_damage(dmg, 0) playsound(src, 'sound/weapons/punch4.ogg', 50, 1) + damage_clothes(dmg, BRUTE, "melee", temp.body_zone) if("fire") - update |= temp.take_damage(0, rand(M.force/2, M.force)) + update |= temp.receive_damage(0, dmg) playsound(src, 'sound/items/Welder.ogg', 50, 1) + damage_clothes(dmg, BURN, "melee", temp.body_zone) if("tox") M.mech_toxin_damage(src) else @@ -323,17 +340,17 @@ /mob/living/carbon/human/ex_act(severity, ex_target) - var/b_loss = null - var/f_loss = null - var/bomb_armor = getarmor(null, "bomb") + if(istype(ex_target, /datum/spacevine_mutation) && isvineimmune(src)) return + var/b_loss = 0 + var/f_loss = 0 + var/bomb_armor = getarmor(null, "bomb") switch (severity) if (1) - b_loss += 500 - if (prob(bomb_armor)) - shred_clothing(1,150) + if(prob(bomb_armor)) + b_loss = 500 var/atom/target = get_edge_target_turf(src, get_dir(src, get_step_away(src, src))) throw_at(target, 200, 4) else @@ -341,15 +358,11 @@ return if (2) - b_loss += 60 - - f_loss += 60 - if (prob(bomb_armor)) - b_loss = b_loss/1.5 - f_loss = f_loss/1.5 - shred_clothing(1,25) - else - shred_clothing(1,50) + b_loss = 60 + f_loss = 60 + if(bomb_armor) + b_loss = 30*(2 - round(bomb_armor*0.01, 0.05)) + f_loss = b_loss if (!istype(ears, /obj/item/clothing/ears/earmuffs)) adjustEarDamage(30, 120) @@ -357,15 +370,20 @@ Paralyse(10) if(3) - b_loss += 30 - if (prob(bomb_armor)) - b_loss = b_loss/2 + b_loss = 30 + if(bomb_armor) + b_loss = 15*(2 - round(bomb_armor*0.01, 0.05)) + if (!istype(ears, /obj/item/clothing/ears/earmuffs)) adjustEarDamage(15,60) if (prob(50)) Paralyse(8) take_overall_damage(b_loss,f_loss) + if(bomb_armor == 100) //full bomb armor set, we don't call contents_explosion + flash_act() + return + //attempt to dismember bodyparts if(severity <= 2 || !bomb_armor) var/max_limb_loss = round(4/severity) //so you don't lose four limbs at severity 3. @@ -426,131 +444,129 @@ informed = 1 switch(severity) if(1) - L.take_damage(0,10) + L.receive_damage(0,10) src.Stun(10) if(2) - L.take_damage(0,5) + L.receive_damage(0,5) src.Stun(5) ..() -/mob/living/carbon/human/acid_act(acidpwr, toxpwr, acid_volume) +/mob/living/carbon/human/acid_act(acidpwr, acid_volume, bodyzone_hit) var/list/damaged = list() var/list/inventory_items_to_kill = list() - var/acidity = min(acidpwr*acid_volume/200, toxpwr) - var/acid_volume_left = acid_volume - var/acid_decay = 100/acidpwr // how much volume we lose per item we try to melt. 5 for fluoro, 10 for sulphuric - + var/acidity = acidpwr * min(acid_volume*0.005, 0.1) //HEAD// - var/obj/item/clothing/head_clothes = null - if(glasses) - head_clothes = glasses - if(wear_mask) - head_clothes = wear_mask - if(head) - head_clothes = head - if(head_clothes) - if(!(head_clothes.resistance_flags & UNACIDABLE)) - head_clothes.acid_act(acidpwr, acid_volume_left) - acid_volume_left = max(acid_volume_left - acid_decay, 0) //We remove some of the acid volume. - update_inv_glasses() - update_inv_wear_mask() - update_inv_head() + if(!bodyzone_hit || bodyzone_hit == "head") //only if we didn't specify a zone or if that zone is the head. + var/obj/item/clothing/head_clothes = null + if(glasses) + head_clothes = glasses + if(wear_mask) + head_clothes = wear_mask + if(head) + head_clothes = head + if(head_clothes) + if(!(head_clothes.resistance_flags & UNACIDABLE)) + head_clothes.acid_act(acidpwr, acid_volume) + update_inv_glasses() + update_inv_wear_mask() + update_inv_head() + else + src << "Your [head_clothes.name] protects your head and face from the acid!" else - src << "Your [head_clothes.name] protects your head and face from the acid!" - else - . = get_bodypart("head") - if(.) - damaged += . - if(ears) - inventory_items_to_kill += ears + . = get_bodypart("head") + if(.) + damaged += . + if(ears) + inventory_items_to_kill += ears //CHEST// - var/obj/item/clothing/chest_clothes = null - if(w_uniform) - chest_clothes = w_uniform - if(wear_suit) - chest_clothes = wear_suit - if(chest_clothes) - if(!(chest_clothes.resistance_flags & UNACIDABLE)) - chest_clothes.acid_act(acidpwr, acid_volume_left) - acid_volume_left = max(acid_volume_left - acid_decay, 0) - update_inv_w_uniform() - update_inv_wear_suit() + if(!bodyzone_hit || bodyzone_hit == "chest") + var/obj/item/clothing/chest_clothes = null + if(w_uniform) + chest_clothes = w_uniform + if(wear_suit) + chest_clothes = wear_suit + if(chest_clothes) + if(!(chest_clothes.resistance_flags & UNACIDABLE)) + chest_clothes.acid_act(acidpwr, acid_volume) + update_inv_w_uniform() + update_inv_wear_suit() + else + src << "Your [chest_clothes.name] protects your body from the acid!" else - src << "Your [chest_clothes.name] protects your body from the acid!" - else - . = get_bodypart("chest") - if(.) - damaged += . - if(wear_id) - inventory_items_to_kill += wear_id - if(r_store) - inventory_items_to_kill += r_store - if(l_store) - inventory_items_to_kill += l_store - if(s_store) - inventory_items_to_kill += s_store + . = get_bodypart("chest") + if(.) + damaged += . + if(wear_id) + inventory_items_to_kill += wear_id + if(r_store) + inventory_items_to_kill += r_store + if(l_store) + inventory_items_to_kill += l_store + if(s_store) + inventory_items_to_kill += s_store //ARMS & HANDS// - var/obj/item/clothing/arm_clothes = null - if(gloves) - arm_clothes = gloves - if(w_uniform && (w_uniform.body_parts_covered & HANDS) || w_uniform && (w_uniform.body_parts_covered & ARMS)) - arm_clothes = w_uniform - if(wear_suit && (wear_suit.body_parts_covered & HANDS) || wear_suit && (wear_suit.body_parts_covered & ARMS)) - arm_clothes = wear_suit - if(arm_clothes) - if(!(arm_clothes.resistance_flags & UNACIDABLE)) - arm_clothes.acid_act(acidpwr, acid_volume_left) - acid_volume_left = max(acid_volume_left - acid_decay, 0) - update_inv_gloves() - update_inv_w_uniform() - update_inv_wear_suit() + if(!bodyzone_hit || bodyzone_hit == "l_arm" || bodyzone_hit == "r_arm") + var/obj/item/clothing/arm_clothes = null + if(gloves) + arm_clothes = gloves + if(w_uniform && ((w_uniform.body_parts_covered & HANDS) || (w_uniform.body_parts_covered & ARMS))) + arm_clothes = w_uniform + if(wear_suit && ((wear_suit.body_parts_covered & HANDS) || (wear_suit.body_parts_covered & ARMS))) + arm_clothes = wear_suit + + if(arm_clothes) + if(!(arm_clothes.resistance_flags & UNACIDABLE)) + arm_clothes.acid_act(acidpwr, acid_volume) + update_inv_gloves() + update_inv_w_uniform() + update_inv_wear_suit() + else + src << "Your [arm_clothes.name] protects your arms and hands from the acid!" else - src << "Your [arm_clothes.name] protects your arms and hands from the acid!" - else - . = get_bodypart("r_arm") - if(.) - damaged += . - . = get_bodypart("l_arm") - if(.) - damaged += . + . = get_bodypart("r_arm") + if(.) + damaged += . + . = get_bodypart("l_arm") + if(.) + damaged += . //LEGS & FEET// - var/obj/item/clothing/leg_clothes = null - if(shoes) - leg_clothes = shoes - if(w_uniform && (w_uniform.body_parts_covered & FEET) || w_uniform && (w_uniform.body_parts_covered & LEGS)) - leg_clothes = w_uniform - if(wear_suit && (wear_suit.body_parts_covered & FEET) || wear_suit && (wear_suit.body_parts_covered & LEGS)) - leg_clothes = wear_suit - if(leg_clothes) - if(!(leg_clothes.resistance_flags & UNACIDABLE)) - leg_clothes.acid_act(acidpwr, acid_volume_left) - acid_volume_left = max(acid_volume_left - acid_decay, 0) - update_inv_shoes() - update_inv_w_uniform() - update_inv_wear_suit() + if(!bodyzone_hit || bodyzone_hit == "l_leg" || bodyzone_hit == "r_leg" || bodyzone_hit == "feet") + var/obj/item/clothing/leg_clothes = null + if(shoes) + leg_clothes = shoes + if(w_uniform && ((w_uniform.body_parts_covered & FEET) || (bodyzone_hit != "feet" && (w_uniform.body_parts_covered & LEGS)))) + leg_clothes = w_uniform + if(wear_suit && ((wear_suit.body_parts_covered & FEET) || (bodyzone_hit != "feet" && (wear_suit.body_parts_covered & LEGS)))) + leg_clothes = wear_suit + if(leg_clothes) + if(!(leg_clothes.resistance_flags & UNACIDABLE)) + leg_clothes.acid_act(acidpwr, acid_volume) + update_inv_shoes() + update_inv_w_uniform() + update_inv_wear_suit() + else + src << "Your [leg_clothes.name] protects your legs and feet from the acid!" else - src << "Your [leg_clothes.name] protects your legs and feet from the acid!" - else - . = get_bodypart("r_leg") - if(.) - damaged += . - . = get_bodypart("l_leg") - if(.) - damaged += . + . = get_bodypart("r_leg") + if(.) + damaged += . + . = get_bodypart("l_leg") + if(.) + damaged += . //DAMAGE// for(var/obj/item/bodypart/affecting in damaged) - affecting.take_damage(acidity, 2*acidity) + affecting.receive_damage(acidity, 2*acidity) if(affecting.name == "head") if(prob(min(acidpwr*acid_volume/10, 90))) //Applies disfigurement - affecting.take_damage(acidity, 2*acidity) + affecting.receive_damage(acidity, 2*acidity) emote("scream") facial_hair_style = "Shaved" hair_style = "Bald" @@ -561,17 +577,17 @@ //MELTING INVENTORY ITEMS// //these items are all outside of armour visually, so melt regardless. - if(back) - inventory_items_to_kill += back - if(belt) - inventory_items_to_kill += belt + if(!bodyzone_hit) + if(back) + inventory_items_to_kill += back + if(belt) + inventory_items_to_kill += belt - inventory_items_to_kill += held_items + inventory_items_to_kill += held_items for(var/obj/item/I in inventory_items_to_kill) - I.acid_act(acidpwr, acid_volume_left) - acid_volume_left = max(acid_volume_left - acid_decay, 0) - + I.acid_act(acidpwr, acid_volume) + return 1 /mob/living/carbon/human/singularity_act() var/gain = 20 diff --git a/code/modules/mob/living/carbon/human/inventory.dm b/code/modules/mob/living/carbon/human/inventory.dm index 4d82003dadf..e175fec7d3e 100644 --- a/code/modules/mob/living/carbon/human/inventory.dm +++ b/code/modules/mob/living/carbon/human/inventory.dm @@ -200,100 +200,6 @@ sec_hud_set_security_status() ..() - - - -//Cycles through all clothing slots and tests them for destruction -/mob/living/carbon/proc/shred_clothing(bomb,shock) - if(back) - back.shred(bomb,shock-20,src) - if(head) - head.shred(bomb,shock,src) - if(wear_mask) - wear_mask.shred(bomb,shock,src) - - -/mob/living/carbon/human/shred_clothing(bomb,shock) - var/covered_parts = 0 //The body parts that are protected by exterior clothing/armor - var/head_absorbed = 0 //How much of the shock the headgear absorbs when it is shredded. -1=it survives - var/suit_absorbed = 0 //How much of the shock the exosuit absorbs when it is shredded. -1=it survives - - //Backpacks can never be protected but are annoying as fuck to lose, so they get a lower chance to be shredded - if(back) - back.shred(bomb,shock-20,src) - - if(head) - covered_parts |= head.flags_inv - head_absorbed = head.shred(bomb,shock,src) - if(wear_mask) - var/absorbed = ((covered_parts & HIDEMASK) ? head_absorbed : 0) //Check if clothing covering this part absorbed any of the shock - if(absorbed >= 0) - //Masks can be used to shield other parts, but are simplified to simply add their absorbsion to the head armor if it covers the face - var/mask_absorbed = wear_mask.shred(bomb,shock-absorbed,src) - if(wear_mask.flags_inv & HIDEFACE) - covered_parts |= wear_mask.flags_inv - if(mask_absorbed < 0) //If the mask didn't get shredded, everything else on the head is protected - head_absorbed = -1 - else - head_absorbed += mask_absorbed - if(ears) - var/absorbed = ((covered_parts & HIDEEARS) ? head_absorbed : 0) - if(absorbed >= 0) - ears.shred(bomb,shock-absorbed,src) - if(glasses) - var/absorbed = ((covered_parts & HIDEEYES) ? head_absorbed : 0) - if(absorbed >= 0) - glasses.shred(bomb,shock-absorbed,src) - - if(wear_suit) - covered_parts |= wear_suit.flags_inv - suit_absorbed = wear_suit.shred(bomb,shock,src) - if(gloves) - var/absorbed = ((covered_parts & HIDEGLOVES) ? suit_absorbed : 0) - if(absorbed >= 0) - gloves.shred(bomb,shock-absorbed,src) - if(shoes) - var/absorbed = ((covered_parts & HIDESHOES) ? suit_absorbed : 0) - if(absorbed >= 0) - shoes.shred(bomb,shock-absorbed,src) - if(w_uniform) - var/absorbed = ((covered_parts & HIDEJUMPSUIT) ? suit_absorbed : 0) - if(absorbed >= 0) - w_uniform.shred(bomb,shock-20-absorbed,src) //Uniforms are also annoying to get shredded - -/obj/item/proc/shred(bomb,shock,mob/living/carbon/human/Human) - if(flags & ABSTRACT) - return -1 - - var/shredded - - if(!bomb) - if(!(resistance_flags & FIRE_PROOF)) - shredded = 1 //No heat protection, it burns - else - shredded = -1 //Heat protection = Fireproof - - else if(shock > 0) - if(prob(max(shock-armor["bomb"],0))) - shredded = armor["bomb"] + 10 //It gets shredded, but it also absorbs the shock the clothes underneath would recieve by this amount - else - shredded = -1 //It survives explosion - - if(shredded > 0) - if(Human) //Unequip if equipped - Human.unEquip(src) - - if(bomb) - empty_object_contents() - spawn(1) //so the shreds aren't instantly deleted by the explosion - var/obj/effect/decal/cleanable/shreds/Shreds = new(loc) - Shreds.desc = "The sad remains of what used to be [src.name]." - qdel(src) - else - burn() - - return shredded - /mob/living/carbon/human/proc/equipOutfit(outfit, visualsOnly = FALSE) var/datum/outfit/O = null diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index 5d7003106aa..4a67cb15236 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -103,6 +103,72 @@ if(!dna || !dna.species.handle_fire(src)) ..() if(on_fire) + + //the fire tries to damage the exposed clothes and items + var/list/burning_items = list() + //HEAD// + var/obj/item/clothing/head_clothes = null + if(glasses) + head_clothes = glasses + if(wear_mask) + head_clothes = wear_mask + if(head) + head_clothes = head + if(head_clothes) + burning_items += head_clothes + else if(ears) + burning_items += ears + + //CHEST// + var/obj/item/clothing/chest_clothes = null + if(w_uniform) + chest_clothes = w_uniform + if(wear_suit) + chest_clothes = wear_suit + else + if(wear_id) + burning_items += wear_id + if(r_store) + burning_items += r_store + if(l_store) + burning_items += l_store + if(s_store) + burning_items += s_store + if(chest_clothes) + burning_items += chest_clothes + + //ARMS & HANDS// + var/obj/item/clothing/arm_clothes = null + if(gloves) + arm_clothes = gloves + if(w_uniform && ((w_uniform.body_parts_covered & HANDS) || (w_uniform.body_parts_covered & ARMS))) + arm_clothes = w_uniform + if(wear_suit && ((wear_suit.body_parts_covered & HANDS) || (wear_suit.body_parts_covered & ARMS))) + arm_clothes = wear_suit + if(arm_clothes) + burning_items += arm_clothes + + //LEGS & FEET// + var/obj/item/clothing/leg_clothes = null + if(shoes) + leg_clothes = shoes + if(w_uniform && ((w_uniform.body_parts_covered & FEET) || (w_uniform.body_parts_covered & LEGS))) + leg_clothes = w_uniform + if(wear_suit && ((wear_suit.body_parts_covered & FEET) || (wear_suit.body_parts_covered & LEGS))) + leg_clothes = wear_suit + if(leg_clothes) + burning_items += leg_clothes + + if(back) + burning_items += back + if(belt) + burning_items += belt + + for(var/X in burning_items) + var/obj/item/I = X + if(!(I.resistance_flags & FIRE_PROOF)) + I.take_damage(fire_stacks, BURN, "fire", 0) + var/thermal_protection = get_thermal_protection() if(thermal_protection >= FIRE_IMMUNITY_SUIT_MAX_TEMP_PROTECT) @@ -293,11 +359,11 @@ var/obj/item/bodypart/BP = X for(var/obj/item/I in BP.embedded_objects) if(prob(I.embedded_pain_chance)) - BP.take_damage(I.w_class*I.embedded_pain_multiplier) + BP.receive_damage(I.w_class*I.embedded_pain_multiplier) src << "\the [I] embedded in your [BP.name] hurts!" if(prob(I.embedded_fall_chance)) - BP.take_damage(I.w_class*I.embedded_fall_pain_multiplier) + BP.receive_damage(I.w_class*I.embedded_fall_pain_multiplier) BP.embedded_objects -= I I.loc = get_turf(src) visible_message("\the [I] falls out of [name]'s [BP.name]!","\the [I] falls out of your [BP.name]!") diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm index be40ad01a7b..0a26478c0c0 100644 --- a/code/modules/mob/living/carbon/human/species.dm +++ b/code/modules/mob/living/carbon/human/species.dm @@ -1086,6 +1086,7 @@ var/weakness = H.check_weakness(I, user) apply_damage(I.force * weakness, I.damtype, def_zone, armor_block, H) + H.damage_clothes(I.force, BRUTE, "melee", affecting.body_zone) H.send_item_attack_message(I, user, hit_area) @@ -1172,14 +1173,14 @@ if(BRUTE) H.damageoverlaytemp = 20 if(BP) - if(BP.take_damage(damage * hit_percent * brutemod, 0)) + if(BP.receive_damage(damage * hit_percent * brutemod, 0)) H.update_damage_overlays() else//no bodypart, we deal damage with a more general method. H.adjustBruteLoss(damage * hit_percent * brutemod) if(BURN) H.damageoverlaytemp = 20 if(BP) - if(BP.take_damage(0, damage * hit_percent * burnmod)) + if(BP.receive_damage(0, damage * hit_percent * burnmod)) H.update_damage_overlays() else H.adjustFireLoss(damage * hit_percent* burnmod) diff --git a/code/modules/mob/living/carbon/monkey/life.dm b/code/modules/mob/living/carbon/monkey/life.dm index 3e87fa5c1ab..d879cdb128b 100644 --- a/code/modules/mob/living/carbon/monkey/life.dm +++ b/code/modules/mob/living/carbon/monkey/life.dm @@ -142,7 +142,27 @@ return 1 /mob/living/carbon/monkey/handle_fire() - if(..()) - return - bodytemperature += BODYTEMP_HEATING_MAX - return + . = ..() + if(on_fire) + + //the fire tries to damage the exposed clothes and items + var/list/burning_items = list() + //HEAD// + var/obj/item/clothing/head_clothes = null + if(wear_mask) + head_clothes = wear_mask + if(head) + head_clothes = head + if(head_clothes) + burning_items += head_clothes + + if(back) + burning_items += back + + for(var/X in burning_items) + var/obj/item/I = X + if(!(I.resistance_flags & FIRE_PROOF)) + I.take_damage(fire_stacks, BURN, "fire", 0) + + bodytemperature += BODYTEMP_HEATING_MAX + diff --git a/code/modules/mob/living/carbon/monkey/monkey_defense.dm b/code/modules/mob/living/carbon/monkey/monkey_defense.dm index 112999aff67..39b2637cc1c 100644 --- a/code/modules/mob/living/carbon/monkey/monkey_defense.dm +++ b/code/modules/mob/living/carbon/monkey/monkey_defense.dm @@ -17,10 +17,14 @@ if(..()) //successful monkey bite. var/dam_zone = pick("chest", "l_hand", "r_hand", "l_leg", "r_leg") var/obj/item/bodypart/affecting = get_bodypart(ran_zone(dam_zone)) + if(!affecting) + affecting = get_bodypart("chest") if(M.limb_destroyer) dismembering_strike(M, affecting.body_zone) if(stat != DEAD) - apply_damage(rand(1, 5), BRUTE, affecting) + var/dmg = rand(1, 5) + apply_damage(dmg, BRUTE, affecting) + damage_clothes(dmg, BRUTE, "melee", affecting.body_zone) @@ -30,7 +34,10 @@ if(stat != DEAD) L.amount_grown = min(L.amount_grown + damage, L.max_grown) var/obj/item/bodypart/affecting = get_bodypart(ran_zone(L.zone_selected)) + if(!affecting) + affecting = get_bodypart("chest") apply_damage(damage, BRUTE, affecting) + damage_clothes(damage, BRUTE, "melee", affecting.body_zone) /mob/living/carbon/monkey/attack_hand(mob/living/carbon/human/M) if(..()) //To allow surgery to return properly. @@ -56,7 +63,10 @@ visible_message("[M] has knocked out [name]!", \ "[M] has knocked out [name]!") var/obj/item/bodypart/affecting = get_bodypart(ran_zone(M.zone_selected)) + if(!affecting) + affecting = get_bodypart("chest") apply_damage(damage, BRUTE, affecting) + damage_clothes(damage, BRUTE, "melee", affecting.body_zone) add_logs(M, src, "attacked") else @@ -96,9 +106,12 @@ var/obj/item/bodypart/affecting = get_bodypart(ran_zone(M.zone_selected)) add_logs(M, src, "attacked") - if(!dismembering_strike(M, M.zone_selected)) //Dismemberment successful + if(!affecting) + affecting = get_bodypart("chest") + if(!dismembering_strike(M, affecting.body_zone)) //Dismemberment successful return 1 apply_damage(damage, BRUTE, affecting) + damage_clothes(damage, BRUTE, "melee", affecting.body_zone) else playsound(loc, 'sound/weapons/slashmiss.ogg', 25, 1, -1) @@ -126,7 +139,10 @@ if(!dam_zone) //Dismemberment successful return 1 var/obj/item/bodypart/affecting = get_bodypart(ran_zone(dam_zone)) + if(!affecting) + affecting = get_bodypart("chest") apply_damage(damage, M.melee_damage_type, affecting) + damage_clothes(damage, BRUTE, "melee", affecting.body_zone) @@ -139,19 +155,28 @@ if(!dam_zone) //Dismemberment successful return 1 var/obj/item/bodypart/affecting = get_bodypart(ran_zone(dam_zone)) + if(!affecting) + affecting = get_bodypart("chest") apply_damage(damage, BRUTE, affecting) + damage_clothes(damage, BRUTE, "melee", affecting.body_zone) -/mob/living/carbon/monkey/acid_act(acidpwr, toxpwr, acid_volume) - if(wear_mask) - if(!(wear_mask.resistance_flags & UNACIDABLE)) - wear_mask.acid_act(acidpwr) - update_inv_wear_mask() - else - src << "Your mask protects you from the acid." - return - - take_bodypart_damage(min(6*toxpwr, acid_volume * acidpwr/10)) +/mob/living/carbon/monkey/acid_act(acidpwr, acid_volume, bodyzone_hit) + . = 1 + if(!bodyzone_hit || bodyzone_hit == "head") + if(wear_mask) + if(!(wear_mask.resistance_flags & UNACIDABLE)) + wear_mask.acid_act(acidpwr) + else + src << "Your mask protects you from the acid." + return + if(head) + if(!(head.resistance_flags & UNACIDABLE)) + head.acid_act(acidpwr) + else + src << "Your hat protects you from the acid." + return + take_bodypart_damage(acidpwr * min(0.6, acid_volume*0.1)) /mob/living/carbon/monkey/ex_act(severity, target) @@ -160,10 +185,10 @@ switch (severity) if (1) gib() + return if (2) take_overall_damage(60, 60) - shred_clothing(1,50) adjustEarDamage(30, 120) if(prob(70)) Paralyse(10) diff --git a/code/modules/mob/living/living_defense.dm b/code/modules/mob/living/living_defense.dm index ee4bd6ce206..57ed2439227 100644 --- a/code/modules/mob/living/living_defense.dm +++ b/code/modules/mob/living/living_defense.dm @@ -81,7 +81,7 @@ visible_message("[src] has been hit by [I].", \ "[src] has been hit by [I].") var/armor = run_armor_check(zone, "melee", "Your armor has protected your [parse_zone(zone)].", "Your armor has softened hit to your [parse_zone(zone)].",I.armour_penetration) - apply_damage(I.throwforce, dtype, zone, armor, I) + apply_damage(I.throwforce, dtype, zone, armor) if(I.thrownby) add_logs(I.thrownby, src, "hit", I) else @@ -276,8 +276,9 @@ //Looking for irradiate()? It's been moved to radiation.dm under the rad_act() for mobs. -/mob/living/acid_act(acidpwr, toxpwr, acid_volume) - take_bodypart_damage(min(10*toxpwr, acid_volume * toxpwr)) +/mob/living/acid_act(acidpwr, acid_volume) + take_bodypart_damage(acidpwr * min(1, acid_volume * 0.1)) + return 1 /mob/living/proc/electrocute_act(shock_damage, obj/source, siemens_coeff = 1, safety = 0, tesla_shock = 0) @@ -336,3 +337,7 @@ //called when the mob receives a loud bang /mob/living/proc/soundbang_act() return 0 + +//to damage the clothes worn by a mob +/mob/living/proc/damage_clothes(damage_amount, damage_type = BRUTE, damage_flag = 0, def_zone) + return diff --git a/code/modules/mob/living/living_defines.dm b/code/modules/mob/living/living_defines.dm index 0dafbfe1137..d33be72052d 100644 --- a/code/modules/mob/living/living_defines.dm +++ b/code/modules/mob/living/living_defines.dm @@ -71,5 +71,5 @@ var/blood_volume = 0 //how much blood the mob has var/obj/effect/proc_holder/ranged_ability //Any ranged ability the mob has, as a click override - + var/slipping = FALSE \ No newline at end of file diff --git a/code/modules/mob/living/silicon/robot/robot_defense.dm b/code/modules/mob/living/silicon/robot/robot_defense.dm index b3a74621c22..120e1fac7d6 100644 --- a/code/modules/mob/living/silicon/robot/robot_defense.dm +++ b/code/modules/mob/living/silicon/robot/robot_defense.dm @@ -166,17 +166,16 @@ gib() return if(2) - if (stat != 2) + if (stat != DEAD) adjustBruteLoss(60) adjustFireLoss(60) if(3) - if (stat != 2) + if (stat != DEAD) adjustBruteLoss(30) - return - /mob/living/silicon/robot/bullet_act(var/obj/item/projectile/Proj) ..(Proj) updatehealth() - if(prob(75) && Proj.damage > 0) spark_system.start() + if(prob(75) && Proj.damage > 0) + spark_system.start() return 2 diff --git a/code/modules/mob/living/silicon/silicon_defense.dm b/code/modules/mob/living/silicon/silicon_defense.dm index b216c04e1ab..34b0e954c8a 100644 --- a/code/modules/mob/living/silicon/silicon_defense.dm +++ b/code/modules/mob/living/silicon/silicon_defense.dm @@ -48,7 +48,7 @@ if(L.a_intent == "help") visible_message("[L.name] rubs its head against [src].") -/mob/living/silicon/attack_hulk(mob/living/carbon/human/user) +/mob/living/silicon/attack_hulk(mob/living/carbon/human/user, does_attack_animation = 0) if(user.a_intent == "harm") ..(user, 1) adjustBruteLoss(rand(10, 15)) diff --git a/code/modules/mob/living/simple_animal/animal_defense.dm b/code/modules/mob/living/simple_animal/animal_defense.dm index 0b36b950653..9478bdd60e0 100644 --- a/code/modules/mob/living/simple_animal/animal_defense.dm +++ b/code/modules/mob/living/simple_animal/animal_defense.dm @@ -21,6 +21,15 @@ updatehealth() return 1 +/mob/living/simple_animal/attack_hulk(mob/living/carbon/human/user, does_attack_animation = 0) + if(user.a_intent == "harm") + ..(user, 1) + playsound(loc, "punch", 25, 1, -1) + visible_message("[user] has punched [src]!", \ + "[user] has punched [src]!") + adjustBruteLoss(15) + return 1 + /mob/living/simple_animal/attack_paw(mob/living/carbon/monkey/M) if(..()) //successful monkey bite. if(stat != DEAD) diff --git a/code/modules/mob/living/simple_animal/bot/cleanbot.dm b/code/modules/mob/living/simple_animal/bot/cleanbot.dm index 3b213031234..5757267f06f 100644 --- a/code/modules/mob/living/simple_animal/bot/cleanbot.dm +++ b/code/modules/mob/living/simple_animal/bot/cleanbot.dm @@ -170,7 +170,7 @@ /obj/effect/decal/cleanable/vomit, /obj/effect/decal/cleanable/robot_debris, /obj/effect/decal/cleanable/crayon, - /obj/effect/decal/cleanable/molten_item, + /obj/effect/decal/cleanable/molten_object, /obj/effect/decal/cleanable/tomato_smudge, /obj/effect/decal/cleanable/egg_smudge, /obj/effect/decal/cleanable/pie_smudge, diff --git a/code/modules/mob/living/simple_animal/bot/ed209bot.dm b/code/modules/mob/living/simple_animal/bot/ed209bot.dm index 9b08a1f308b..5cceafbcfaa 100644 --- a/code/modules/mob/living/simple_animal/bot/ed209bot.dm +++ b/code/modules/mob/living/simple_animal/bot/ed209bot.dm @@ -8,7 +8,7 @@ health = 100 maxHealth = 100 damage_coeff = list(BRUTE = 0.5, BURN = 0.7, TOX = 0, CLONE = 0, STAMINA = 0, OXY = 0) - + obj_damage = 60 environment_smash = 2 //Walls can't stop THE LAW mob_size = MOB_SIZE_LARGE diff --git a/code/modules/mob/living/simple_animal/constructs.dm b/code/modules/mob/living/simple_animal/constructs.dm index 4893c83ed86..98a177d334b 100644 --- a/code/modules/mob/living/simple_animal/constructs.dm +++ b/code/modules/mob/living/simple_animal/constructs.dm @@ -91,6 +91,7 @@ health = 250 response_harm = "harmlessly punches" harm_intent_damage = 0 + obj_damage = 90 melee_damage_lower = 30 melee_damage_upper = 30 attacktext = "smashes their armored gauntlet into" @@ -169,6 +170,7 @@ health = 50 response_harm = "viciously beats" harm_intent_damage = 5 + obj_damage = 60 melee_damage_lower = 5 melee_damage_upper = 5 retreat_distance = 10 diff --git a/code/modules/mob/living/simple_animal/friendly/farm_animals.dm b/code/modules/mob/living/simple_animal/friendly/farm_animals.dm index e36c96c79f5..e2a2c7ffc89 100644 --- a/code/modules/mob/living/simple_animal/friendly/farm_animals.dm +++ b/code/modules/mob/living/simple_animal/friendly/farm_animals.dm @@ -50,8 +50,8 @@ src.visible_message("[src] calms down.") if(stat == CONSCIOUS) udder.generateMilk() - if(locate(/obj/structure/spacevine) in loc) - var/obj/structure/spacevine/SV = locate(/obj/structure/spacevine) in loc + var/obj/structure/spacevine/SV = locate(/obj/structure/spacevine) in loc + if(SV) SV.eat(src) if(!pulledby) for(var/direction in shuffle(list(1,2,4,8,5,6,9,10))) @@ -67,8 +67,8 @@ /mob/living/simple_animal/hostile/retaliate/goat/Move() ..() if(!stat) - if(locate(/obj/structure/spacevine) in loc) - var/obj/structure/spacevine/SV = locate(/obj/structure/spacevine) in loc + var/obj/structure/spacevine/SV = locate(/obj/structure/spacevine) in loc + if(SV) SV.eat(src) /mob/living/simple_animal/hostile/retaliate/goat/attackby(obj/item/O, mob/user, params) diff --git a/code/modules/mob/living/simple_animal/friendly/lizard.dm b/code/modules/mob/living/simple_animal/friendly/lizard.dm index 4fdcf0610a1..98cc9b3d535 100644 --- a/code/modules/mob/living/simple_animal/friendly/lizard.dm +++ b/code/modules/mob/living/simple_animal/friendly/lizard.dm @@ -20,6 +20,7 @@ pass_flags = PASSTABLE | PASSMOB mob_size = MOB_SIZE_SMALL gold_core_spawnable = 2 + obj_damage = 0 environment_smash = 0 var/list/edibles = list(/mob/living/simple_animal/butterfly,/mob/living/simple_animal/cockroach) //list of atoms, however turfs won't affect AI, but will affect consumption. diff --git a/code/modules/mob/living/simple_animal/friendly/mouse.dm b/code/modules/mob/living/simple_animal/friendly/mouse.dm index 1a52e018bae..79281886fd6 100644 --- a/code/modules/mob/living/simple_animal/friendly/mouse.dm +++ b/code/modules/mob/living/simple_animal/friendly/mouse.dm @@ -69,10 +69,10 @@ if(C.avail()) visible_message("[src] chews through the [C]. It's toast!") playsound(src, 'sound/effects/sparks2.ogg', 100, 1) - C.Deconstruct() + C.deconstruct() death(toast=1) else - C.Deconstruct() + C.deconstruct() visible_message("[src] chews through the [C].") /* diff --git a/code/modules/mob/living/simple_animal/guardian/guardian.dm b/code/modules/mob/living/simple_animal/guardian/guardian.dm index 407076bbd4c..d77708e0b2a 100644 --- a/code/modules/mob/living/simple_animal/guardian/guardian.dm +++ b/code/modules/mob/living/simple_animal/guardian/guardian.dm @@ -32,6 +32,7 @@ var/global/list/parasites = list() //all currently existing/living guardians healable = FALSE //don't brusepack the guardian damage_coeff = list(BRUTE = 0.5, BURN = 0.5, TOX = 0.5, CLONE = 0.5, STAMINA = 0, OXY = 0.5) //how much damage from each damage type we transfer to the owner environment_smash = 1 + obj_damage = 40 melee_damage_lower = 15 melee_damage_upper = 15 butcher_results = list(/obj/item/weapon/ectoplasm = 1) diff --git a/code/modules/mob/living/simple_animal/guardian/types/assassin.dm b/code/modules/mob/living/simple_animal/guardian/types/assassin.dm index d54d5013690..ff2e1c5a6aa 100644 --- a/code/modules/mob/living/simple_animal/guardian/types/assassin.dm +++ b/code/modules/mob/living/simple_animal/guardian/types/assassin.dm @@ -51,6 +51,7 @@ melee_damage_lower = initial(melee_damage_lower) melee_damage_upper = initial(melee_damage_upper) armour_penetration = initial(armour_penetration) + obj_damage = initial(obj_damage) environment_smash = initial(environment_smash) alpha = initial(alpha) if(!forced) @@ -68,6 +69,7 @@ melee_damage_lower = 50 melee_damage_upper = 50 armour_penetration = 100 + obj_damage = 0 environment_smash = 0 PoolOrNew(/obj/effect/overlay/temp/guardian/phase/out, get_turf(src)) alpha = 15 diff --git a/code/modules/mob/living/simple_animal/guardian/types/ranged.dm b/code/modules/mob/living/simple_animal/guardian/types/ranged.dm index 3d4b665fa81..842bc5e7200 100644 --- a/code/modules/mob/living/simple_animal/guardian/types/ranged.dm +++ b/code/modules/mob/living/simple_animal/guardian/types/ranged.dm @@ -33,6 +33,7 @@ ranged = initial(ranged) melee_damage_lower = initial(melee_damage_lower) melee_damage_upper = initial(melee_damage_upper) + obj_damage = initial(obj_damage) environment_smash = initial(environment_smash) alpha = 255 range = initial(range) @@ -43,6 +44,7 @@ ranged = 0 melee_damage_lower = 0 melee_damage_upper = 0 + obj_damage = 0 environment_smash = 0 alpha = 45 range = 255 diff --git a/code/modules/mob/living/simple_animal/guardian/types/standard.dm b/code/modules/mob/living/simple_animal/guardian/types/standard.dm index 4cff9a0604b..45624bbaaa2 100644 --- a/code/modules/mob/living/simple_animal/guardian/types/standard.dm +++ b/code/modules/mob/living/simple_animal/guardian/types/standard.dm @@ -2,6 +2,7 @@ /mob/living/simple_animal/hostile/guardian/punch melee_damage_lower = 20 melee_damage_upper = 20 + obj_damage = 80 next_move_modifier = 0.8 //attacks 20% faster environment_smash = 2 playstyle_string = "As a standard type you have no special abilities, but have a high damage resistance and a powerful attack capable of smashing through walls." diff --git a/code/modules/mob/living/simple_animal/hostile/alien.dm b/code/modules/mob/living/simple_animal/hostile/alien.dm index 6ed4d60229e..32c330d2cd5 100644 --- a/code/modules/mob/living/simple_animal/hostile/alien.dm +++ b/code/modules/mob/living/simple_animal/hostile/alien.dm @@ -16,6 +16,7 @@ maxHealth = 125 health = 125 harm_intent_damage = 5 + obj_damage = 60 melee_damage_lower = 25 melee_damage_upper = 25 attacktext = "slashes" @@ -156,6 +157,7 @@ melee_damage_upper = 0 a_intent = "help" friendly = "caresses" + obj_damage = 0 environment_smash = 0 gold_core_spawnable = 1 icon_state = "maid" diff --git a/code/modules/mob/living/simple_animal/hostile/bear.dm b/code/modules/mob/living/simple_animal/hostile/bear.dm index ce7c655206d..d41863222bc 100644 --- a/code/modules/mob/living/simple_animal/hostile/bear.dm +++ b/code/modules/mob/living/simple_animal/hostile/bear.dm @@ -22,6 +22,7 @@ health = 60 var/armored = FALSE + obj_damage = 60 melee_damage_lower = 20 melee_damage_upper = 30 attacktext = "claws" diff --git a/code/modules/mob/living/simple_animal/hostile/bees.dm b/code/modules/mob/living/simple_animal/hostile/bees.dm index 0ec1db86273..2f09653734f 100644 --- a/code/modules/mob/living/simple_animal/hostile/bees.dm +++ b/code/modules/mob/living/simple_animal/hostile/bees.dm @@ -30,6 +30,7 @@ health = 10 faction = list("hostile") move_to_delay = 0 + obj_damage = 0 environment_smash = 0 mouse_opacity = 2 pass_flags = PASSTABLE | PASSGRILLE | PASSMOB diff --git a/code/modules/mob/living/simple_animal/hostile/bosses/paperwizard.dm b/code/modules/mob/living/simple_animal/hostile/bosses/paperwizard.dm index 356d4bafbef..e6b80ad893b 100644 --- a/code/modules/mob/living/simple_animal/hostile/bosses/paperwizard.dm +++ b/code/modules/mob/living/simple_animal/hostile/bosses/paperwizard.dm @@ -10,6 +10,7 @@ environment_smash = 0 minimum_distance = 3 retreat_distance = 3 + obj_damage = 0 melee_damage_lower = 10 melee_damage_upper = 20 health = 1000 diff --git a/code/modules/mob/living/simple_animal/hostile/carp.dm b/code/modules/mob/living/simple_animal/hostile/carp.dm index c5d197084e6..bf99d02e8a4 100644 --- a/code/modules/mob/living/simple_animal/hostile/carp.dm +++ b/code/modules/mob/living/simple_animal/hostile/carp.dm @@ -18,6 +18,7 @@ health = 25 harm_intent_damage = 8 + obj_damage = 50 melee_damage_lower = 15 melee_damage_upper = 15 attacktext = "bites" @@ -63,6 +64,7 @@ pixel_x = -16 mob_size = MOB_SIZE_LARGE + obj_damage = 80 melee_damage_lower = 20 melee_damage_upper = 20 diff --git a/code/modules/mob/living/simple_animal/hostile/creature.dm b/code/modules/mob/living/simple_animal/hostile/creature.dm index 32d5b7c73dc..566f1266adf 100644 --- a/code/modules/mob/living/simple_animal/hostile/creature.dm +++ b/code/modules/mob/living/simple_animal/hostile/creature.dm @@ -7,6 +7,7 @@ icon_dead = "otherthing-dead" health = 80 maxHealth = 80 + obj_damage = 100 melee_damage_lower = 25 melee_damage_upper = 50 attacktext = "chomps" diff --git a/code/modules/mob/living/simple_animal/hostile/eyeballs.dm b/code/modules/mob/living/simple_animal/hostile/eyeballs.dm index 9781dcd05a4..07aeea0a523 100644 --- a/code/modules/mob/living/simple_animal/hostile/eyeballs.dm +++ b/code/modules/mob/living/simple_animal/hostile/eyeballs.dm @@ -17,6 +17,7 @@ speak_emote = list("telepathically cries") harm_intent_damage = 15 + obj_damage = 60 melee_damage_lower = 20 melee_damage_upper = 25 attacktext = "blinks at" diff --git a/code/modules/mob/living/simple_animal/hostile/faithless.dm b/code/modules/mob/living/simple_animal/hostile/faithless.dm index 6dba4c84856..b9f7b834f98 100644 --- a/code/modules/mob/living/simple_animal/hostile/faithless.dm +++ b/code/modules/mob/living/simple_animal/hostile/faithless.dm @@ -19,6 +19,7 @@ robust_searching = 1 harm_intent_damage = 10 + obj_damage = 50 melee_damage_lower = 15 melee_damage_upper = 15 attacktext = "grips" diff --git a/code/modules/mob/living/simple_animal/hostile/giant_spider.dm b/code/modules/mob/living/simple_animal/hostile/giant_spider.dm index fa6d21456c9..bf85dfce9ce 100644 --- a/code/modules/mob/living/simple_animal/hostile/giant_spider.dm +++ b/code/modules/mob/living/simple_animal/hostile/giant_spider.dm @@ -35,6 +35,7 @@ response_harm = "hits" maxHealth = 200 health = 200 + obj_damage = 60 melee_damage_lower = 15 melee_damage_upper = 20 faction = list("spiders") diff --git a/code/modules/mob/living/simple_animal/hostile/headcrab.dm b/code/modules/mob/living/simple_animal/hostile/headcrab.dm index f1bf3e339dc..cf528306b21 100644 --- a/code/modules/mob/living/simple_animal/hostile/headcrab.dm +++ b/code/modules/mob/living/simple_animal/hostile/headcrab.dm @@ -16,6 +16,7 @@ faction = list("creature") robust_searching = 1 stat_attack = 2 + obj_damage = 0 environment_smash = 0 speak_emote = list("squeaks") ventcrawler = 2 diff --git a/code/modules/mob/living/simple_animal/hostile/hostile.dm b/code/modules/mob/living/simple_animal/hostile/hostile.dm index 4bee096b9f4..d4b62f616ce 100644 --- a/code/modules/mob/living/simple_animal/hostile/hostile.dm +++ b/code/modules/mob/living/simple_animal/hostile/hostile.dm @@ -1,6 +1,7 @@ /mob/living/simple_animal/hostile faction = list("hostile") stop_automated_movement_when_pulled = 0 + obj_damage = 40 environment_smash = 1 //Set to 1 to break closets,tables,racks, etc; 2 for walls; 3 for rwalls var/atom/target var/ranged = 0 diff --git a/code/modules/mob/living/simple_animal/hostile/illusion.dm b/code/modules/mob/living/simple_animal/hostile/illusion.dm index 9b9b0ee4aa1..fdde147b9ef 100644 --- a/code/modules/mob/living/simple_animal/hostile/illusion.dm +++ b/code/modules/mob/living/simple_animal/hostile/illusion.dm @@ -66,6 +66,7 @@ melee_damage_lower = 0 melee_damage_upper = 0 speed = -1 + obj_damage = 0 environment_smash = 0 diff --git a/code/modules/mob/living/simple_animal/hostile/mecha_pilot.dm b/code/modules/mob/living/simple_animal/hostile/mecha_pilot.dm index 63d3bd82565..46c3a62aca8 100644 --- a/code/modules/mob/living/simple_animal/hostile/mecha_pilot.dm +++ b/code/modules/mob/living/simple_animal/hostile/mecha_pilot.dm @@ -122,7 +122,7 @@ return 0 if(!M.has_charge(required_mecha_charge)) return 0 - if(M.health < (initial(M.health)*0.5)) + if(M.obj_integrity < M.max_integrity*0.5) return 0 return 1 @@ -216,7 +216,7 @@ return //Too Much Damage - Eject - if(mecha.health < initial(mecha.health)*0.1) + if(mecha.obj_integrity < mecha.max_integrity*0.1) exit_mecha(mecha) return @@ -226,7 +226,7 @@ mecha.smoke_action.Activate() //Heavy damage - Defence Power or Retreat - if(mecha.health < initial(mecha.health)*0.25) + if(mecha.obj_integrity < mecha.max_integrity*0.25) if(prob(defence_mode_chance)) if(mecha.defense_action && mecha.defense_action.owner && !mecha.defence_mode) mecha.leg_overload_mode = 0 diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm index 85d6e6a72e4..24a2ef5c935 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm @@ -625,6 +625,7 @@ Difficulty: Very Hard flying = 1 minbodytemp = 0 maxbodytemp = 1500 + obj_damage = 0 environment_smash = 0 AIStatus = AI_OFF stop_automated_movement = 1 @@ -699,7 +700,7 @@ Difficulty: Very Hard icon_state = null //This shouldn't even be visible, so if it DOES show up, at least nobody will notice density = 1 anchored = 1 - health = 999 + obj_integrity = 999 var/mob/living/simple_animal/holder_animal /obj/structure/closet/stasis/process() diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/dragon.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/dragon.dm index cfeb0a19e9d..2d40aae0cd2 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/dragon.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/dragon.dm @@ -262,6 +262,7 @@ Difficulty: Medium maxHealth = 300 health = 300 faction = list("neutral") + obj_damage = 80 melee_damage_upper = 30 melee_damage_lower = 30 damage_coeff = list(BRUTE = 1, BURN = 1, TOX = 1, CLONE = 1, STAMINA = 0, OXY = 1) diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/hierophant.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/hierophant.dm index 7cbcaa090bf..9d5c97f4831 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/hierophant.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/hierophant.dm @@ -535,7 +535,7 @@ Difficulty: Hard continue M.occupant << "Your [M.name] is struck by a [name]!" playsound(M,'sound/weapons/sear.ogg', 50, 1, -4) - M.take_damage(damage, "fire", 0) + M.take_damage(damage, BURN, 0, 0) /obj/effect/hierophant name = "hierophant rune" diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/megafauna.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/megafauna.dm index 8ef9ee4a1ee..f05445085d6 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/megafauna.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/megafauna.dm @@ -9,7 +9,7 @@ a_intent = "harm" sentience_type = SENTIENCE_BOSS environment_smash = 3 - obj_damage = 75 + obj_damage = 400 luminosity = 3 faction = list("mining", "boss") weather_immunities = list("lava","ash") diff --git a/code/modules/mob/living/simple_animal/hostile/mimic.dm b/code/modules/mob/living/simple_animal/hostile/mimic.dm index bb7c223fa9c..e2d3afd545a 100644 --- a/code/modules/mob/living/simple_animal/hostile/mimic.dm +++ b/code/modules/mob/living/simple_animal/hostile/mimic.dm @@ -216,6 +216,7 @@ var/global/list/protected_objects = list(/obj/structure/table, /obj/structure/ca /mob/living/simple_animal/hostile/mimic/copy/ranged/CopyObject(obj/O, mob/living/creator, destroy_original = 0) if(..()) emote_see = list("aims menacingly") + obj_damage = 0 environment_smash = 0 //needed? seems weird for them to do so ranged = 1 retreat_distance = 1 //just enough to shoot diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm index 3478fff7ad0..205f0dd3b31 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm @@ -3,6 +3,7 @@ atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) faction = list("mining") weather_immunities = list("lava","ash") + obj_damage = 30 environment_smash = 2 minbodytemp = 0 maxbodytemp = INFINITY @@ -69,6 +70,7 @@ maxHealth = 200 health = 200 harm_intent_damage = 5 + obj_damage = 60 melee_damage_lower = 12 melee_damage_upper = 12 attacktext = "bites into" @@ -210,6 +212,7 @@ throw_message = "falls right through the strange body of the" ranged_cooldown = 0 ranged_cooldown_time = 20 + obj_damage = 0 environment_smash = 0 retreat_distance = 3 minimum_distance = 3 @@ -327,6 +330,7 @@ speak_emote = list("telepathically cries") attack_sound = 'sound/weapons/pierce.ogg' throw_message = "falls right through the strange body of the" + obj_damage = 0 environment_smash = 0 pass_flags = PASSTABLE del_on_death = 1 @@ -420,6 +424,7 @@ maxHealth = 300 health = 300 harm_intent_damage = 0 + obj_damage = 100 melee_damage_lower = 25 melee_damage_upper = 25 attacktext = "pulverizes" @@ -537,13 +542,11 @@ return if(istype(target, /obj/mecha/working/ripley)) var/obj/mecha/working/ripley/D = target - var/list/damage_absorption = D.damage_absorption if(D.hides < 3) D.hides++ - damage_absorption["brute"] = max(damage_absorption["brute"] - 0.1, 0.3) - damage_absorption["bullet"] = damage_absorption["bullet"] - 0.05 - damage_absorption["fire"] = damage_absorption["fire"] - 0.05 - damage_absorption["laser"] = damage_absorption["laser"] - 0.025 + D.armor["melee"] = max(D.armor["melee"] - 0.1, 0.3) + D.armor["bullet"] = D.armor["bullet"] - 0.05 + D.armor["laser"] = D.armor["laser"] - 0.025 user << "You strengthen [target], improving its resistance against melee attacks." D.update_icon() if(D.hides == 3) @@ -581,6 +584,7 @@ maxHealth = 50 health = 50 harm_intent_damage = 5 + obj_damage = 0 melee_damage_lower = 0 melee_damage_upper = 0 attacktext = "chomps" @@ -625,6 +629,7 @@ return wumbo = 1 icon_state = "Fugu_big" + obj_damage = 60 melee_damage_lower = 15 melee_damage_upper = 20 harm_intent_damage = 0 @@ -643,6 +648,7 @@ walk(src, 0) wumbo = 0 icon_state = "Fugu" + obj_damage = 0 melee_damage_lower = 0 melee_damage_upper = 0 harm_intent_damage = 5 @@ -743,6 +749,7 @@ icon_aggro = "legion" icon_dead = "legion" icon_gib = "syndicate_gib" + obj_damage = 60 melee_damage_lower = 15 melee_damage_upper = 15 attacktext = "lashes out at" @@ -861,6 +868,7 @@ density = 0 speak_chance = 1 turns_per_move = 8 + obj_damage = 0 environment_smash = 0 move_to_delay = 15 response_help = "pets" diff --git a/code/modules/mob/living/simple_animal/hostile/mushroom.dm b/code/modules/mob/living/simple_animal/hostile/mushroom.dm index b0d71991d30..023774cf439 100644 --- a/code/modules/mob/living/simple_animal/hostile/mushroom.dm +++ b/code/modules/mob/living/simple_animal/hostile/mushroom.dm @@ -13,6 +13,7 @@ response_disarm = "gently pushes aside" response_harm = "whacks" harm_intent_damage = 5 + obj_damage = 0 melee_damage_lower = 1 melee_damage_upper = 1 attack_same = 2 diff --git a/code/modules/mob/living/simple_animal/hostile/pirate.dm b/code/modules/mob/living/simple_animal/hostile/pirate.dm index 9f12d423d15..b87ace1afad 100644 --- a/code/modules/mob/living/simple_animal/hostile/pirate.dm +++ b/code/modules/mob/living/simple_animal/hostile/pirate.dm @@ -14,6 +14,7 @@ health = 100 harm_intent_damage = 5 + obj_damage = 60 melee_damage_lower = 30 melee_damage_upper = 30 attacktext = "slashes" diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/bat.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/bat.dm index b4de57da65e..c28250e3fcc 100644 --- a/code/modules/mob/living/simple_animal/hostile/retaliate/bat.dm +++ b/code/modules/mob/living/simple_animal/hostile/retaliate/bat.dm @@ -21,6 +21,7 @@ pass_flags = PASSTABLE faction = list("hostile") attack_sound = 'sound/weapons/bite.ogg' + obj_damage = 0 environment_smash = 0 ventcrawler = 2 mob_size = MOB_SIZE_TINY diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/clown.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/clown.dm index ae38b62698a..1830ff0cd61 100644 --- a/code/modules/mob/living/simple_animal/hostile/retaliate/clown.dm +++ b/code/modules/mob/living/simple_animal/hostile/retaliate/clown.dm @@ -22,6 +22,7 @@ melee_damage_upper = 10 attacktext = "attacks" attack_sound = 'sound/items/bikehorn.ogg' + obj_damage = 0 environment_smash = 0 del_on_death = 1 loot = list(/obj/effect/mob_spawn/human/corpse/clown) diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/spaceman.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/spaceman.dm index e1892140a2c..a1257d71e34 100644 --- a/code/modules/mob/living/simple_animal/hostile/retaliate/spaceman.dm +++ b/code/modules/mob/living/simple_animal/hostile/retaliate/spaceman.dm @@ -19,6 +19,7 @@ melee_damage_upper = 10 attacktext = "hits" attack_sound = 'sound/weapons/punch1.ogg' + obj_damage = 0 environment_smash = 0 del_on_death = 0 diff --git a/code/modules/mob/living/simple_animal/hostile/skeleton.dm b/code/modules/mob/living/simple_animal/hostile/skeleton.dm index 4664a41082c..f318f7ae15c 100644 --- a/code/modules/mob/living/simple_animal/hostile/skeleton.dm +++ b/code/modules/mob/living/simple_animal/hostile/skeleton.dm @@ -22,7 +22,6 @@ attack_sound = 'sound/hallucinations/growl1.ogg' atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) unsuitable_atmos_damage = 10 - environment_smash = 1 robust_searching = 1 stat_attack = 1 gold_core_spawnable = 1 @@ -64,6 +63,7 @@ speak_chance = 1 speak = list("THE GODS WILL IT!","DEUS VULT!","REMOVE KABAB!") force_threshold = 10 //trying to simulate actually having armor + obj_damage = 50 melee_damage_lower = 25 melee_damage_upper = 30 deathmessage = "collapses into a pile of bones, its gear clanging as it hits the ground!" diff --git a/code/modules/mob/living/simple_animal/hostile/statue.dm b/code/modules/mob/living/simple_animal/hostile/statue.dm index 998cbebc3d5..30dbb43e153 100644 --- a/code/modules/mob/living/simple_animal/hostile/statue.dm +++ b/code/modules/mob/living/simple_animal/hostile/statue.dm @@ -18,7 +18,8 @@ health = 50000 healable = 0 - harm_intent_damage = 70 + harm_intent_damage = 10 + obj_damage = 100 melee_damage_lower = 68 melee_damage_upper = 83 attacktext = "claws" diff --git a/code/modules/mob/living/simple_animal/hostile/stickman.dm b/code/modules/mob/living/simple_animal/hostile/stickman.dm index 904f3abcdcf..2f17fa57523 100644 --- a/code/modules/mob/living/simple_animal/hostile/stickman.dm +++ b/code/modules/mob/living/simple_animal/hostile/stickman.dm @@ -18,6 +18,7 @@ maxHealth = 100 health = 100 harm_intent_damage = 5 + obj_damage = 0 melee_damage_lower = 10 melee_damage_upper = 10 attacktext = "punches" diff --git a/code/modules/mob/living/simple_animal/hostile/syndicate.dm b/code/modules/mob/living/simple_animal/hostile/syndicate.dm index 9663b70e2f5..b6f99faf0cb 100644 --- a/code/modules/mob/living/simple_animal/hostile/syndicate.dm +++ b/code/modules/mob/living/simple_animal/hostile/syndicate.dm @@ -136,6 +136,7 @@ /mob/living/simple_animal/hostile/syndicate/civilian minimum_distance = 10 retreat_distance = 10 + obj_damage = 0 environment_smash = 0 /mob/living/simple_animal/hostile/syndicate/civilian/Aggro() @@ -154,6 +155,8 @@ maxHealth = 25 melee_damage_lower = 15 melee_damage_upper = 15 + obj_damage = 0 + environment_smash = 0 attacktext = "cuts" attack_sound = 'sound/weapons/bladeslice.ogg' faction = list("syndicate") diff --git a/code/modules/mob/living/simple_animal/hostile/venus_human_trap.dm b/code/modules/mob/living/simple_animal/hostile/venus_human_trap.dm index 14aeb265158..6bc9aa07972 100644 --- a/code/modules/mob/living/simple_animal/hostile/venus_human_trap.dm +++ b/code/modules/mob/living/simple_animal/hostile/venus_human_trap.dm @@ -55,6 +55,7 @@ maxHealth = 50 ranged = 1 harm_intent_damage = 5 + obj_damage = 60 melee_damage_lower = 25 melee_damage_upper = 25 a_intent = "harm" diff --git a/code/modules/mob/living/simple_animal/slime/slime.dm b/code/modules/mob/living/simple_animal/slime/slime.dm index 975438b0a70..ace41147727 100644 --- a/code/modules/mob/living/simple_animal/slime/slime.dm +++ b/code/modules/mob/living/simple_animal/slime/slime.dm @@ -259,10 +259,11 @@ var/list/slime_colours = list("rainbow", "grey", "purple", "metal", "orange", if(..()) //successful larva bite. attacked += 10 -/mob/living/simple_animal/slime/attack_hulk(mob/living/carbon/human/user) +/mob/living/simple_animal/slime/attack_hulk(mob/living/carbon/human/user, does_attack_animation = 0) if(user.a_intent == "harm") - adjustBruteLoss(15) discipline_slime(user) + return ..() + /mob/living/simple_animal/slime/attack_hand(mob/living/carbon/human/M) diff --git a/code/modules/modular_computers/computers/item/computer.dm b/code/modules/modular_computers/computers/item/computer.dm index e8e09b4943a..69ed544ded5 100644 --- a/code/modules/modular_computers/computers/item/computer.dm +++ b/code/modules/modular_computers/computers/item/computer.dm @@ -30,12 +30,10 @@ var/max_hardware_size = 0 // Maximal hardware w_class. Tablets/PDAs have 1, laptops 2, consoles 4. var/steel_sheet_cost = 5 // Amount of steel sheets refunded when disassembling an empty frame of this computer. - // Damage of the chassis. If the chassis takes too much damage it will break apart. - var/damage = 0 // Current damage level - var/broken_damage = 50 // Damage level at which the computer ceases to operate - var/max_damage = 100 // Damage level at which the computer breaks apart. - + obj_integrity = 100 + max_integrity = 100 armor = list(melee = 0, bullet = 20, laser = 20, energy = 100, bomb = 0, bio = 100, rad = 100, fire = 0, acid = 0) + // Important hardware (must be installed for computer to work) // Optional hardware (improves functionality, but is not critical for computer to work) @@ -164,9 +162,9 @@ /obj/item/device/modular_computer/examine(mob/user) ..() - if(damage > broken_damage) + if(obj_integrity <= integrity_failure) user << "It is heavily damaged!" - else if(damage) + else if(obj_integrity < max_integrity) user << "It is damaged." /obj/item/device/modular_computer/update_icon() @@ -180,7 +178,7 @@ else add_overlay(icon_state_menu) - if(damage > broken_damage) + if(obj_integrity <= integrity_failure) add_overlay("bsod") add_overlay("broken") @@ -194,7 +192,7 @@ /obj/item/device/modular_computer/proc/turn_on(mob/user) var/issynth = issilicon(user) // Robots and AIs get different activation messages. - if(damage > broken_damage) + if(obj_integrity <= integrity_failure) if(issynth) user << "You send an activation signal to \the [src], but it responds with an error code. It must be damaged." else @@ -226,7 +224,7 @@ last_power_usage = 0 return 0 - if(damage > broken_damage) + if(obj_integrity <= integrity_failure) shutdown_computer() return 0 @@ -377,13 +375,14 @@ user << "\The [W] is off." return - if(!damage) + if(obj_integrity == max_integrity) user << "\The [src] does not require repairs." return user << "You begin repairing damage to \the [src]..." - if(WT.remove_fuel(round(damage/75)) && do_after(usr, damage/10)) - damage = 0 + var/dmg = round(max_integrity - obj_integrity) + if(WT.remove_fuel(round(dmg/75)) && do_after(usr, dmg/10)) + obj_integrity = max_integrity user << "You repair \the [src]." return diff --git a/code/modules/modular_computers/computers/item/computer_damage.dm b/code/modules/modular_computers/computers/item/computer_damage.dm index d27ec0a750f..5e521a04e17 100644 --- a/code/modules/modular_computers/computers/item/computer_damage.dm +++ b/code/modules/modular_computers/computers/item/computer_damage.dm @@ -1,49 +1,31 @@ -/obj/item/device/modular_computer/proc/take_damage(amount, component_probability, damage_casing = 1, randomize = 1) - if(randomize) - // 75%-125%, rand() works with integers, apparently. - amount *= (rand(75, 125) / 100.0) - amount = round(amount) - if(damage_casing) - damage += amount - damage = max(0,min(max_damage,damage)) - +/obj/item/device/modular_computer/take_damage(damage_amount, damage_type = BRUTE, damage_flag = 0, sound_effect = 1) + . = ..() + var/component_probability = min(50, max(damage_amount*0.1, 1 - obj_integrity/max_integrity)) + switch(damage_flag) + if("bullet") + component_probability = damage_amount * 0.5 + if("laser") + component_probability = damage_amount * 0.66 if(component_probability) for(var/I in all_components) var/obj/item/weapon/computer_hardware/H = all_components[I] if(prob(component_probability)) - H.take_damage(round(amount / 2)) + H.take_damage(round(damage_amount*0.5), damage_type, damage_flag, 0) - if(damage >= max_damage) - break_apart() -// Stronger explosions cause serious damage to internal components -// Minor explosions are mostly mitigitated by casing. -/obj/item/device/modular_computer/ex_act(severity) - take_damage(rand(100,200)/severity, component_probability = 30/severity) - -// EMPs are similar to explosions, but don't cause physical damage to the casing. Instead they screw up the components -/obj/item/device/modular_computer/emp_act(severity) - take_damage(rand(100,200)/severity, component_probability = 50/severity, damage_casing = 0) - -// "Stun" weapons can cause minor damage to components (short-circuits?) -// "Burn" damage is equally strong against internal components and exterior casing -// "Brute" damage mostly damages the casing. -/obj/item/device/modular_computer/bullet_act(obj/item/projectile/Proj) - switch(Proj.damage_type) - if(BRUTE) - take_damage(Proj.damage, component_probability = Proj.damage/2) - if(BURN) - take_damage(Proj.damage, component_probability = Proj.damage/1.5) +/obj/item/device/modular_computer/deconstruct(disassembled = TRUE) + break_apart() /obj/item/device/modular_computer/proc/break_apart() - physical.visible_message("\The [src] breaks apart!") - var/turf/newloc = get_turf(src) - new /obj/item/stack/sheet/metal(newloc, round(steel_sheet_cost/2)) - for(var/C in all_components) - var/obj/item/weapon/computer_hardware/H = all_components[C] - uninstall_component(H) - H.forceMove(newloc) - if(prob(25)) - H.take_damage(rand(10,30)) + if(!(flags & NODECONSTRUCT)) + physical.visible_message("\The [src] breaks apart!") + var/turf/newloc = get_turf(src) + new /obj/item/stack/sheet/metal(newloc, round(steel_sheet_cost/2)) + for(var/C in all_components) + var/obj/item/weapon/computer_hardware/H = all_components[C] + uninstall_component(H) + H.forceMove(newloc) + if(prob(25)) + H.take_damage(rand(10,30), BRUTE, 0, 0) relay_qdel() - qdel() + qdel(src) diff --git a/code/modules/modular_computers/computers/item/processor.dm b/code/modules/modular_computers/computers/item/processor.dm index d50b9f9fd30..e9b7f8d52ff 100644 --- a/code/modules/modular_computers/computers/item/processor.dm +++ b/code/modules/modular_computers/computers/item/processor.dm @@ -30,8 +30,8 @@ hardware_flag = machinery_computer.hardware_flag max_hardware_size = machinery_computer.max_hardware_size steel_sheet_cost = machinery_computer.steel_sheet_cost - max_damage = machinery_computer._max_damage - broken_damage = machinery_computer._break_damage + max_integrity = machinery_computer.max_integrity + integrity_failure = machinery_computer.integrity_failure base_active_power_usage = machinery_computer.base_active_power_usage base_idle_power_usage = machinery_computer.base_idle_power_usage diff --git a/code/modules/modular_computers/computers/machinery/modular_computer.dm b/code/modules/modular_computers/computers/machinery/modular_computer.dm index e04bc0cee73..12efea42f9b 100644 --- a/code/modules/modular_computers/computers/machinery/modular_computer.dm +++ b/code/modules/modular_computers/computers/machinery/modular_computer.dm @@ -28,9 +28,6 @@ var/list/global_modular_computers = list() var/base_active_power_usage = 100 // Power usage when the computer is open (screen is active) and can be interacted with. Remember hardware can use power too. var/base_idle_power_usage = 10 // Power usage when the computer is idle and screen is off (currently only applies to laptops) - var/_max_damage = 100 - var/_break_damage = 50 - var/obj/item/device/modular_computer/processor/cpu = null // CPU that handles most logic while this type only handles power and other specific things. /obj/machinery/modular_computer/New() @@ -69,7 +66,7 @@ var/list/global_modular_computers = list() else overlays.Add(screen_icon_state_menu) - if(cpu && cpu.damage > cpu.broken_damage) + if(cpu && cpu.obj_integrity <= cpu.integrity_failure) add_overlay("bsod") add_overlay("broken") diff --git a/code/modules/modular_computers/computers/machinery/modular_console.dm b/code/modules/modular_computers/computers/machinery/modular_console.dm index cebb1f4d715..60315198ca6 100644 --- a/code/modules/modular_computers/computers/machinery/modular_console.dm +++ b/code/modules/modular_computers/computers/machinery/modular_console.dm @@ -16,8 +16,9 @@ max_hardware_size = 4 steel_sheet_cost = 10 light_strength = 2 - _max_damage = 300 - _break_damage = 150 + obj_integrity = 300 + max_integrity = 300 + integrity_failure = 150 /obj/machinery/modular_computer/console/buildable/New() ..() diff --git a/code/modules/modular_computers/file_system/programs/antagonist/revelation.dm b/code/modules/modular_computers/file_system/programs/antagonist/revelation.dm index 89040ca7ae7..4278159d1a9 100644 --- a/code/modules/modular_computers/file_system/programs/antagonist/revelation.dm +++ b/code/modules/modular_computers/file_system/programs/antagonist/revelation.dm @@ -23,7 +23,7 @@ var/obj/item/weapon/computer_hardware/battery/battery_module = computer.all_components[MC_CELL] var/obj/item/weapon/computer_hardware/recharger/recharger = computer.all_components[MC_CHARGE] qdel(hard_drive) - computer.take_damage(25, 10, 1, 1) + computer.take_damage(25, BRUTE, 0, 0) if(battery_module && prob(25)) qdel(battery_module) computer.visible_message("\The [computer]'s battery explodes in rain of sparks.") diff --git a/code/modules/modular_computers/hardware/_hardware.dm b/code/modules/modular_computers/hardware/_hardware.dm index 81f61671555..d1d51ead8e7 100644 --- a/code/modules/modular_computers/hardware/_hardware.dm +++ b/code/modules/modular_computers/hardware/_hardware.dm @@ -42,12 +42,12 @@ // Cable coil. Works as repair method, but will probably require multiple applications and more cable. if(istype(I, /obj/item/stack/cable_coil)) var/obj/item/stack/S = I - if(!damage) + if(obj_integrity == max_integrity) user << "\The [src] doesn't seem to require repairs." return 1 if(S.use(1)) user << "You patch up \the [src] with a bit of \the [I]." - take_damage(-10) + obj_integrity = min(obj_integrity + 10, max_integrity) return 1 if(try_insert(I, user)) @@ -82,12 +82,6 @@ else if(damage) user << "It seems to be slightly damaged." -// Damages the component. Contains necessary checks. Negative damage "heals" the component. -/obj/item/weapon/computer_hardware/proc/take_damage(var/amount) - damage += round(amount) // We want nice rounded numbers here. - damage = max(0, min(damage, max_damage)) // Clamp the value. - - // Component-side compatibility check. /obj/item/weapon/computer_hardware/proc/can_install(obj/item/device/modular_computer/M, mob/living/user = null) return can_install diff --git a/code/modules/ninja/suit/n_suit_verbs/energy_net_nets.dm b/code/modules/ninja/suit/n_suit_verbs/energy_net_nets.dm index 010b69edf54..a29a42f89a7 100644 --- a/code/modules/ninja/suit/n_suit_verbs/energy_net_nets.dm +++ b/code/modules/ninja/suit/n_suit_verbs/energy_net_nets.dm @@ -14,25 +14,19 @@ It is possible to destroy the net by the occupant or someone else. mouse_opacity = 1//So you can hit it with stuff. anchored = 1//Can't drag/grab the trapped mob. layer = ABOVE_ALL_MOB_LAYER - var/health = 25//How much health it has. + obj_integrity = 25//How much health it has. + max_integrity = 25 var/mob/living/affecting = null//Who it is currently affecting, if anyone. var/mob/living/master = null//Who shot web. Will let this person know if the net was successful or failed. -/obj/structure/energy_net/proc/take_damage(damage, damage_type = BRUTE, sound_effect = 1) +/obj/structure/energy_net/play_attack_sound(damage, damage_type = BRUTE, damage_flag = 0) switch(damage_type) if(BRUTE) - if(sound_effect) - playsound(src.loc, 'sound/weapons/slash.ogg', 80, 1) + playsound(src.loc, 'sound/weapons/slash.ogg', 80, 1) if(BURN) - if(sound_effect) - playsound(src.loc, 'sound/weapons/slash.ogg', 80, 1) - else - return - health -= damage - if(health <=0) - qdel(src) + playsound(src.loc, 'sound/weapons/slash.ogg', 80, 1) /obj/structure/energy_net/Destroy() if(affecting) @@ -67,7 +61,7 @@ It is possible to destroy the net by the occupant or someone else. density = 0//Make the net pass-through. invisibility = INVISIBILITY_ABSTRACT//Make the net invisible so all the animations can play out. - health = INFINITY//Make the net invincible so that an explosion/something else won't kill it while, spawn() is running. + resistance_flags |= INDESTRUCTIBLE //Make the net invincible so that an explosion/something else won't kill it while, spawn() is running. for(var/obj/item/W in M) if(ishuman(M)) var/mob/living/carbon/human/H = M @@ -102,61 +96,7 @@ It is possible to destroy the net by the occupant or someone else. -/obj/structure/energy_net/bullet_act(obj/item/projectile/Proj) - . = ..() - take_damage(Proj.damage, Proj.damage_type) - - - -/obj/structure/energy_net/ex_act(severity, target) - switch(severity) - if(1) - qdel(src) - if(2) - qdel(src) - if(3) - take_damage(rand(10,25), BRUTE, 0) - -/obj/structure/energy_net/blob_act(obj/structure/blob/B) - qdel(src) - -/obj/structure/energy_net/hitby(atom/movable/AM) - ..() - var/tforce = 0 - if(ismob(AM)) - tforce = 10 - else if(isobj(AM)) - var/obj/O = AM - tforce = O.throwforce - take_damage(tforce) - - -/obj/structure/energy_net/attack_hulk(mob/living/carbon/human/user) - ..(user, 1) - user.visible_message("[user] rips the energy net apart!", \ - "You easily destroy the energy net.") - qdel(src) - - - /obj/structure/energy_net/attack_paw(mob/user) return attack_hand() - -/obj/structure/energy_net/attack_alien(mob/living/user) - user.do_attack_animation(src) - user.changeNext_move(CLICK_CD_MELEE) - playsound(src.loc, 'sound/weapons/slash.ogg', 80, 1) - user.visible_message("[user] slices the energy net apart!", \ - "\green You slice the energy net to pieces.") - qdel(src) - - - -/obj/structure/energy_net/attacked_by(obj/item/weapon/W, mob/user) - ..() - take_damage(W.force, W.damtype) - - - diff --git a/code/modules/ninja/suit/shoes.dm b/code/modules/ninja/suit/shoes.dm index fa8013941ad..ac8326b13fb 100644 --- a/code/modules/ninja/suit/shoes.dm +++ b/code/modules/ninja/suit/shoes.dm @@ -7,7 +7,7 @@ permeability_coefficient = 0.01 flags = NOSLIP resistance_flags = LAVA_PROOF | FIRE_PROOF | ACID_PROOF - armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 30, bio = 30, rad = 30) + armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 30, bio = 30, rad = 30, fire = 100, acid = 100) strip_delay = 120 cold_protection = FEET min_cold_protection_temperature = SHOES_MIN_TEMP_PROTECT diff --git a/code/modules/ninja/suit/suit.dm b/code/modules/ninja/suit/suit.dm index 70c3a964374..bdf6f2b3eb4 100644 --- a/code/modules/ninja/suit/suit.dm +++ b/code/modules/ninja/suit/suit.dm @@ -18,8 +18,8 @@ Contents: item_state = "s-ninja_suit" allowed = list(/obj/item/weapon/gun,/obj/item/ammo_box,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/restraints/handcuffs,/obj/item/weapon/tank/internals,/obj/item/weapon/stock_parts/cell) slowdown = 0 - resistance_flags = LAVA_PROOF | FIRE_PROOF | ACID_PROOF - armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 30, bio = 30, rad = 30) + resistance_flags = LAVA_PROOF | ACID_PROOF + armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 30, bio = 30, rad = 30, fire = 100, acid = 100) strip_delay = 12 //Important parts of the suit. diff --git a/code/modules/paperwork/clipboard.dm b/code/modules/paperwork/clipboard.dm index b1ef1644340..418ab389ab0 100644 --- a/code/modules/paperwork/clipboard.dm +++ b/code/modules/paperwork/clipboard.dm @@ -10,7 +10,7 @@ var/obj/item/weapon/pen/haspen //The stored pen. var/obj/item/weapon/paper/toppaper //The topmost piece of paper. slot_flags = SLOT_BELT - resistance_flags = 0 + resistance_flags = FLAMMABLE /obj/item/weapon/clipboard/New() update_icon() diff --git a/code/modules/paperwork/filingcabinet.dm b/code/modules/paperwork/filingcabinet.dm index 2a35bfff8ff..6d5a27fe467 100644 --- a/code/modules/paperwork/filingcabinet.dm +++ b/code/modules/paperwork/filingcabinet.dm @@ -36,11 +36,12 @@ if(istype(I, /obj/item/weapon/paper) || istype(I, /obj/item/weapon/folder) || istype(I, /obj/item/weapon/photo)) I.loc = src -/obj/structure/filingcabinet/ex_act(severity, target) - for(var/obj/item/I in src) - I.loc = src.loc +/obj/structure/filingcabinet/deconstruct(disassembled = TRUE) + if(!(flags & NODECONSTRUCT)) + new /obj/item/stack/sheet/metal(loc, 2) + for(var/obj/item/I in src) + I.forceMove(loc) qdel(src) - ..() /obj/structure/filingcabinet/attackby(obj/item/P, mob/user, params) if(istype(P, /obj/item/weapon/paper) || istype(P, /obj/item/weapon/folder) || istype(P, /obj/item/weapon/photo) || istype(P, /obj/item/documents)) @@ -53,9 +54,11 @@ icon_state = initial(icon_state) updateUsrDialog() else if(istype(P, /obj/item/weapon/wrench)) + user << "You begin to [anchored ? "wrench" : "unwrench"] [src]." playsound(loc, 'sound/items/Ratchet.ogg', 50, 1) - anchored = !anchored - user << "You [anchored ? "wrench" : "unwrench"] [src]." + if(do_after(user, 20, target = src)) + user << "You successfully [anchored ? "wrench" : "unwrench"] [src]." + anchored = !anchored else if(user.a_intent != "harm") user << "You can't put [P] in [src]!" else @@ -131,6 +134,7 @@ P.name = "paper - '[G.fields["name"]]'" virgin = 0 //tabbing here is correct- it's possible for people to try and use it //before the records have been generated, so we do this inside the loop. + /obj/structure/filingcabinet/security/attack_hand() populate() ..() @@ -212,16 +216,3 @@ var/list/employmentCabinets = list() cooldown = 0 else user << "The [src] is jammed, give it a few seconds." - - - - -/obj/structure/filingcabinet/employment/attackby(obj/item/P, mob/user, params) - if(istype(P, /obj/item/weapon/wrench)) - user << "You begin to [anchored ? "wrench" : "unwrench"] [src]." - if (do_after(user,300,user)) - playsound(loc, 'sound/items/Ratchet.ogg', 50, 1) - anchored = !anchored - user << "You successfully [anchored ? "wrench" : "unwrench"] [src]." - else - return ..() diff --git a/code/modules/paperwork/folders.dm b/code/modules/paperwork/folders.dm index cec63a72253..ace6a835e78 100644 --- a/code/modules/paperwork/folders.dm +++ b/code/modules/paperwork/folders.dm @@ -5,7 +5,7 @@ icon_state = "folder" w_class = 2 pressure_resistance = 2 - resistance_flags = 0 + resistance_flags = FLAMMABLE /obj/item/weapon/folder/blue desc = "A blue folder." diff --git a/code/modules/paperwork/paper.dm b/code/modules/paperwork/paper.dm index 64d0ad1ca6d..3ddb31a8343 100644 --- a/code/modules/paperwork/paper.dm +++ b/code/modules/paperwork/paper.dm @@ -17,8 +17,9 @@ pressure_resistance = 0 slot_flags = SLOT_HEAD body_parts_covered = HEAD - resistance_flags = 0 - burntime = 5 + resistance_flags = FLAMMABLE + obj_integrity = 50 + max_integrity = 50 dog_fashion = /datum/dog_fashion/head var/info //What's actually written on the paper. @@ -338,8 +339,8 @@ add_fingerprint(user) -/obj/item/weapon/paper/fire_act() - ..(0) +/obj/item/weapon/paper/fire_act(exposed_temperature, exposed_volume) + ..() icon_state = "paper_onfire" info = "[stars(info)]" diff --git a/code/modules/paperwork/paper_cutter.dm b/code/modules/paperwork/paper_cutter.dm index 487a7457a4c..e66f9992800 100644 --- a/code/modules/paperwork/paper_cutter.dm +++ b/code/modules/paperwork/paper_cutter.dm @@ -106,8 +106,9 @@ desc = "A little slip of paper left over after a larger piece was cut. Whoa." icon_state = "paperslip" icon = 'icons/obj/bureaucracy.dmi' - resistance_flags = 0 - burntime = 3 + resistance_flags = FLAMMABLE + obj_integrity = 50 + max_integrity = 50 /obj/item/weapon/paperslip/New() ..() diff --git a/code/modules/paperwork/paperbin.dm b/code/modules/paperwork/paperbin.dm index 4c9da27c069..e6703e9718d 100644 --- a/code/modules/paperwork/paperbin.dm +++ b/code/modules/paperwork/paperbin.dm @@ -9,11 +9,10 @@ throw_speed = 3 throw_range = 7 pressure_resistance = 8 - resistance_flags = 0 var/amount = 30 //How much paper is in the bin. var/list/papers = list() //List of papers put in the bin for reference. -/obj/item/weapon/paper_bin/fire_act() +/obj/item/weapon/paper_bin/fire_act(exposed_temperature, exposed_volume) if(!amount) return ..() @@ -25,10 +24,11 @@ papers = null . = ..() -/obj/item/weapon/paper_bin/burn() - amount = 0 - extinguish() - update_icon() +/obj/item/weapon/paper_bin/fire_act(exposed_temperature, exposed_volume) + if(amount) + amount = 0 + update_icon() + ..() /obj/item/weapon/paper_bin/MouseDrop(atom/over_object) var/mob/living/M = usr diff --git a/code/modules/paperwork/paperplane.dm b/code/modules/paperwork/paperplane.dm index a5a72604e93..f3827856ded 100644 --- a/code/modules/paperwork/paperplane.dm +++ b/code/modules/paperwork/paperplane.dm @@ -7,8 +7,9 @@ throw_speed = 1 throwforce = 0 w_class = 1 - resistance_flags = 0 - burntime = 4 + resistance_flags = FLAMMABLE + obj_integrity = 50 + max_integrity = 50 var/obj/item/weapon/paper/internalPaper var/list/stamped = list() @@ -79,7 +80,6 @@ if(!(in_range(user, src))) //to prevent issues as a result of telepathically lighting a paper return - internalPaper.burntime = 1 //its already pretty burnt out user.unEquip(src) user.visible_message("[user] lights [src] ablaze with [P]!", "You light [src] on fire!") fire_act() diff --git a/code/modules/paperwork/photocopier.dm b/code/modules/paperwork/photocopier.dm index 526fc3818ef..2462a5bcdc8 100644 --- a/code/modules/paperwork/photocopier.dm +++ b/code/modules/paperwork/photocopier.dm @@ -18,6 +18,9 @@ idle_power_usage = 30 active_power_usage = 200 power_channel = EQUIP + obj_integrity = 300 + max_integrity = 300 + integrity_failure = 100 var/obj/item/weapon/paper/copy = null //what's in the copier! var/obj/item/weapon/photo/photocopy = null var/obj/item/documents/doccopy = null @@ -251,8 +254,9 @@ if(istype(O, /obj/item/weapon/paper)) if(copier_empty()) if(istype(O,/obj/item/weapon/paper/contract/infernal)) - user << "The [src] smokes, smelling of brimstone!" - resistance_flags |= ON_FIRE + user << "[src] smokes, smelling of brimstone!" + resistance_flags |= FLAMMABLE + fire_act() else if(!user.drop_item()) return @@ -304,28 +308,8 @@ else return ..() -/obj/machinery/photocopier/ex_act(severity, target) - switch(severity) - if(1) - qdel(src) - if(2) - if(prob(50)) - qdel(src) - else - if(toner > 0) - new /obj/effect/decal/cleanable/oil(get_turf(src)) - toner = 0 - else - if(prob(50)) - if(toner > 0) - new /obj/effect/decal/cleanable/oil(get_turf(src)) - toner = 0 - - -/obj/machinery/photocopier/blob_act(obj/structure/blob/B) - if(prob(50)) - qdel(src) - else +/obj/machinery/photocopier/obj_break(damage_flag) + if(!(flags & NODECONSTRUCT)) if(toner > 0) new /obj/effect/decal/cleanable/oil(get_turf(src)) toner = 0 diff --git a/code/modules/paperwork/photography.dm b/code/modules/paperwork/photography.dm index a5b37664c7e..2a54c05d053 100644 --- a/code/modules/paperwork/photography.dm +++ b/code/modules/paperwork/photography.dm @@ -17,7 +17,7 @@ icon_state = "film" item_state = "electropack" w_class = 1 - resistance_flags = 0 + resistance_flags = FLAMMABLE /* * Photo @@ -28,8 +28,9 @@ icon_state = "photo" item_state = "paper" w_class = 1 - resistance_flags = 0 - burntime = 5 + resistance_flags = FLAMMABLE + obj_integrity = 50 + max_integrity = 50 var/icon/img //Big photo image var/scribble //Scribble on the back. var/blueprints = 0 //Does it include the blueprints? @@ -94,7 +95,7 @@ icon_state = "album" item_state = "briefcase" can_hold = list(/obj/item/weapon/photo) - resistance_flags = 0 + resistance_flags = FLAMMABLE /* * Camera diff --git a/code/modules/power/antimatter/control.dm b/code/modules/power/antimatter/control.dm index 4540a53a972..dcc443b2938 100644 --- a/code/modules/power/antimatter/control.dm +++ b/code/modules/power/antimatter/control.dm @@ -181,6 +181,7 @@ else return ..() + /obj/machinery/power/am_control_unit/take_damage(damage, damage_type = BRUTE, sound_effect = 1) switch(damage_type) if(BRUTE) diff --git a/code/modules/power/antimatter/shielding.dm b/code/modules/power/antimatter/shielding.dm index 7524010b166..860a80a3912 100644 --- a/code/modules/power/antimatter/shielding.dm +++ b/code/modules/power/antimatter/shielding.dm @@ -119,11 +119,11 @@ shutdown_core() -/obj/machinery/am_shielding/take_damage(damage, damage_type = BRUTE, sound_effect = 1) +/obj/machinery/am_shielding/take_damage(damage_amount, damage_type = BRUTE, damage_flag = 0, sound_effect = 1) switch(damage_type) if(BRUTE) if(sound_effect) - if(damage) + if(damage_amount) playsound(loc, 'sound/weapons/smash.ogg', 50, 1) else playsound(loc, 'sound/weapons/tap.ogg', 50, 1) @@ -132,8 +132,8 @@ playsound(src.loc, 'sound/items/Welder.ogg', 100, 1) else return - if(damage >= 10) - stability -= damage/2 + if(damage_amount >= 10) + stability -= damage_amount/2 check_stability() diff --git a/code/modules/power/apc.dm b/code/modules/power/apc.dm index 5a9875accda..d43314eb8f5 100644 --- a/code/modules/power/apc.dm +++ b/code/modules/power/apc.dm @@ -48,6 +48,10 @@ anchored = 1 use_power = 0 req_access = list(access_engine_equip) + obj_integrity = 200 + max_integrity = 200 + integrity_failure = 50 + armor = list(melee = 20, bullet = 20, laser = 10, energy = 100, bomb = 30, bio = 100, rad = 100, fire = 90, acid = 50) var/area/area var/areastring = null var/obj/item/weapon/stock_parts/cell/cell @@ -93,7 +97,7 @@ var/global/list/status_overlays_equipment var/global/list/status_overlays_lighting var/global/list/status_overlays_environ - var/health = 50 + /obj/machinery/power/apc/connect_to_network() //Override because the APC does not directly connect to the network; it goes through a terminal. @@ -183,7 +187,6 @@ /obj/machinery/power/apc/examine(mob/user) ..() if(stat & BROKEN) - user << "Looks broken." return if(opened) if(has_electronics && terminal) @@ -411,7 +414,7 @@ return if(!user.drop_item()) return - W.loc = src + W.forceMove(src) cell = W user.visible_message(\ "[user.name] has inserted the power cell to [src.name]!",\ @@ -555,13 +558,21 @@ else return ..() -/obj/machinery/power/apc/take_damage(damage, damage_type = BRUTE, sound_effect = 1) - ..() - if((malfhack || (stat & BROKEN)) && !opened) - if(damage < 10) - return - health -= damage - if(health <= 0) +/obj/machinery/power/apc/run_obj_armor(damage_amount, damage_type, damage_flag = 0, attack_dir) + if(damage_flag == "melee" && damage_amount < 15 && (!(stat & BROKEN) || malfai)) + return 0 + . = ..() + + +/obj/machinery/power/apc/obj_break(damage_flag) + if(!(flags & NODECONSTRUCT)) + set_broken() + +/obj/machinery/power/apc/deconstruct(disassembled = TRUE) + if(!(flags & NODECONSTRUCT)) + if(!(stat & BROKEN)) + set_broken() + if(opened != 2) opened = 2 visible_message("The APC cover is knocked down!") update_icon() @@ -602,28 +613,9 @@ ..() /obj/machinery/power/apc/attack_alien(mob/living/carbon/alien/humanoid/user) - ..() - if(malfhack || (stat & BROKEN)) + if(malfhack) return - if(opened == 0) - if(!panel_open) - panel_open = 1 - update_icon() - visible_message("The [src.name]'s cover flies open, exposing the wires!") - - else if(panel_open && !wires.is_all_cut()) - wires.cut_all() - update_icon() - visible_message("The [src.name]'s wires are shredded!") - else if(opened == 1) - if(cell) - cell.loc = user.loc - cell.updateicon() - cell = null - visible_message("The [src.name]'s power cell flies off!") - charging = 0 - update_icon() - + ..() /obj/machinery/power/apc/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, \ datum/tgui/master_ui = null, datum/ui_state/state = default_state) @@ -1084,17 +1076,6 @@ addtimer(src, "reset", 600, FALSE, APC_RESET_EMP) ..() -/obj/machinery/power/apc/ex_act(severity, target) - ..() - if(!qdeleted(src)) - switch(severity) - if(2) - if(prob(50)) - set_broken() - if(3) - if(prob(25)) - set_broken() - /obj/machinery/power/apc/blob_act(obj/structure/blob/B) set_broken() @@ -1124,7 +1105,7 @@ for(var/area/A in area.related) for(var/obj/machinery/light/L in A) L.on = 1 - L.broken() + L.break_light_tube() stoplag() /obj/machinery/power/apc/proc/shock(mob/user, prb) diff --git a/code/modules/power/cable.dm b/code/modules/power/cable.dm index 4ce5dfb3f9a..941c423c43c 100644 --- a/code/modules/power/cable.dm +++ b/code/modules/power/cable.dm @@ -97,9 +97,16 @@ By design, d1 is the smallest direction and d2 is the highest if(invisibility != INVISIBILITY_MAXIMUM) qdel(src) -/obj/structure/cable/Deconstruct() - var/turf/T = loc - stored.loc = T +/obj/structure/cable/deconstruct(disassembled = TRUE) + if(!(flags & NODECONSTRUCT)) + var/turf/T = loc + stored.forceMove(T) + qdel(src) + +/obj/structure/cable/fire_act(exposed_temperature, exposed_volume) + var/turf/T = src.loc + if(T && T.intact) //protected from fire when hidden behind a floor. + return ..() /////////////////////////////////// @@ -138,7 +145,7 @@ By design, d1 is the smallest direction and d2 is the highest user.visible_message("[user] cuts the cable.", "You cut the cable.") stored.add_fingerprint(user) investigate_log("was cut by [key_name(usr, usr.client)] in [user.loc.loc]","wires") - Deconstruct() + deconstruct() return else if(istype(W, /obj/item/stack/cable_coil)) @@ -169,21 +176,9 @@ By design, d1 is the smallest direction and d2 is the highest else return 0 -//explosion handling -/obj/structure/cable/ex_act(severity, target) - ..() - if(!qdeleted(src)) - switch(severity) - if(2) - if(prob(50)) - Deconstruct() - if(3) - if(prob(25)) - Deconstruct() - /obj/structure/cable/singularity_pull(S, current_size) if(current_size >= STAGE_FIVE) - Deconstruct() + deconstruct() /obj/structure/cable/proc/cableColor(colorC = "red") cable_color = colorC @@ -619,7 +614,7 @@ var/global/list/datum/stack_recipe/cable_coil_recipes = list ( \ if (C.shock(user, 50)) if (prob(50)) //fail - C.Deconstruct() + C.deconstruct() // called when cable_coil is click on an installed obj/cable // or click on a turf that already contains a "node" cable @@ -684,7 +679,7 @@ var/global/list/datum/stack_recipe/cable_coil_recipes = list ( \ if (NC.shock(user, 50)) if (prob(50)) //fail - NC.Deconstruct() + NC.deconstruct() return @@ -734,7 +729,7 @@ var/global/list/datum/stack_recipe/cable_coil_recipes = list ( \ if (C.shock(user, 50)) if (prob(50)) //fail - C.Deconstruct() + C.deconstruct() return C.denode()// this call may have disconnected some cables that terminated on the centre of the turf, if so split the powernets. diff --git a/code/modules/power/gravitygenerator.dm b/code/modules/power/gravitygenerator.dm index 395eebbb65b..ccae16644f3 100644 --- a/code/modules/power/gravitygenerator.dm +++ b/code/modules/power/gravitygenerator.dm @@ -25,7 +25,7 @@ var/const/GRAV_NEEDS_WRENCH = 3 anchored = 1 density = 1 use_power = 0 - resistance_flags = LAVA_PROOF | FIRE_PROOF | UNACIDABLE + resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF var/sprite_number = 0 /obj/machinery/gravity_generator/ex_act(severity, target) diff --git a/code/modules/power/lighting.dm b/code/modules/power/lighting.dm index 3647c9173e8..6ad8d8eba08 100644 --- a/code/modules/power/lighting.dm +++ b/code/modules/power/lighting.dm @@ -16,34 +16,38 @@ desc = "Used for building lights." icon = 'icons/obj/lighting.dmi' icon_state = "tube-construct-item" - result_path = /obj/machinery/light_construct + result_path = /obj/structure/light_construct inverse = 1 /obj/item/wallframe/light_fixture/small name = "small light fixture frame" icon_state = "bulb-construct-item" - result_path = /obj/machinery/light_construct/small + result_path = /obj/structure/light_construct/small materials = list(MAT_METAL=MINERAL_MATERIAL_AMOUNT) -/obj/machinery/light_construct +/obj/structure/light_construct name = "light fixture frame" desc = "A light fixture under construction." icon = 'icons/obj/lighting.dmi' icon_state = "tube-construct-stage1" anchored = 1 layer = WALL_OBJ_LAYER + obj_integrity = 200 + max_integrity = 200 + armor = list(melee = 50, bullet = 10, laser = 10, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 80, acid = 50) + var/stage = 1 var/fixture_type = "tube" var/sheets_refunded = 2 var/obj/machinery/light/newlight = null -/obj/machinery/light_construct/New(loc, ndir, building) +/obj/structure/light_construct/New(loc, ndir, building) ..() if(building) setDir(ndir) -/obj/machinery/light_construct/examine(mob/user) +/obj/structure/light_construct/examine(mob/user) ..() switch(src.stage) if(1) @@ -53,7 +57,7 @@ if(3) user << "The casing is closed." -/obj/machinery/light_construct/attackby(obj/item/weapon/W, mob/user, params) +/obj/structure/light_construct/attackby(obj/item/weapon/W, mob/user, params) add_fingerprint(user) switch(stage) if(1) @@ -116,17 +120,24 @@ return return ..() -/obj/machinery/light_construct/blob_act(obj/structure/blob/B) +/obj/structure/light_construct/blob_act(obj/structure/blob/B) if(B && B.loc == loc) qdel(src) -/obj/machinery/light_construct/small +/obj/structure/light_construct/deconstruct(disassembled = TRUE) + if(!(flags & NODECONSTRUCT)) + new /obj/item/stack/sheet/metal(loc, sheets_refunded) + qdel(src) + +/obj/structure/light_construct/small name = "small light fixture frame" icon_state = "bulb-construct-stage1" fixture_type = "bulb" sheets_refunded = 1 + + // the standard tube light fixture /obj/machinery/light name = "light fixture" @@ -136,6 +147,8 @@ desc = "A lighting fixture." anchored = 1 layer = WALL_OBJ_LAYER + obj_integrity = 100 + max_integrity = 100 use_power = 2 idle_power_usage = 2 active_power_usage = 20 @@ -152,7 +165,6 @@ // this is used to calc the probability the light burns out var/rigged = 0 // true if rigged to explode - var/health = 20 // the smaller bulb light fixture @@ -163,12 +175,12 @@ brightness = 4 desc = "A small lighting fixture." light_type = /obj/item/weapon/light/bulb - health = 15 + /obj/machinery/light/Move() if(status != LIGHT_BROKEN) - broken(1) + break_light_tube(1) return ..() /obj/machinery/light/built/New() @@ -190,11 +202,11 @@ if("tube") brightness = 8 if(prob(2)) - broken(1) + break_light_tube(1) if("bulb") brightness = 4 if(prob(5)) - broken(1) + break_light_tube(1) spawn(1) update(0) @@ -319,19 +331,7 @@ playsound(src.loc, 'sound/items/Screwdriver.ogg', 75, 1) user.visible_message("[user.name] opens [src]'s casing.", \ "You open [src]'s casing.", "You hear a noise.") - var/obj/machinery/light_construct/newlight = null - switch(fitting) - if("tube") - newlight = new /obj/machinery/light_construct(src.loc) - newlight.icon_state = "tube-construct-stage2" - - if("bulb") - newlight = new /obj/machinery/light_construct/small(src.loc) - newlight.icon_state = "bulb-construct-stage2" - newlight.setDir(src.dir) - newlight.stage = 2 - transfer_fingerprints_to(newlight) - qdel(src) + deconstruct() else user << "You stick \the [W] into the light socket!" if(has_power() && (W.flags & CONDUCT)) @@ -343,6 +343,32 @@ else return ..() +/obj/machinery/light/deconstruct(disassembled = TRUE) + if(!(flags & NODECONSTRUCT)) + var/obj/structure/light_construct/newlight = null + var/cur_stage = 2 + if(!disassembled) + cur_stage = 1 + switch(fitting) + if("tube") + newlight = new /obj/structure/light_construct(src.loc) + newlight.icon_state = "tube-construct-stage[cur_stage]" + + if("bulb") + newlight = new /obj/structure/light_construct/small(src.loc) + newlight.icon_state = "bulb-construct-stage[cur_stage]" + newlight.setDir(src.dir) + newlight.stage = cur_stage + if(!disassembled) + newlight.obj_integrity = newlight.max_integrity * 0.5 + if(status != LIGHT_BROKEN) + break_light_tube() + if(status != LIGHT_EMPTY) + drop_light_tube() + new /obj/item/stack/cable_coil(loc, 1, "red") + transfer_fingerprints_to(newlight) + qdel(src) + /obj/machinery/light/attacked_by(obj/item/I, mob/living/user) ..() if(status == LIGHT_BROKEN || status == LIGHT_EMPTY) @@ -350,25 +376,27 @@ if(prob(12)) electrocute_mob(user, get_area(src), src, 0.3) -/obj/machinery/light/take_damage(damage, damage_type = BRUTE, sound_effect = 1) +/obj/machinery/light/take_damage(damage_amount, damage_type = BRUTE, damage_flag = 0, sound_effect = 1) + . = ..() + if(. && !qdeleted(src)) + if(prob(damage_amount * 5)) + break_light_tube() + + + + +/obj/machinery/light/play_attack_sound(damage_amount, damage_type = BRUTE, damage_flag = 0) switch(damage_type) if(BRUTE) - if(sound_effect) - switch(status) - if(LIGHT_EMPTY) - playsound(loc, 'sound/weapons/smash.ogg', 50, 1) - if(LIGHT_BROKEN) - playsound(loc, 'sound/effects/hit_on_shattered_glass.ogg', 90, 1) - else - playsound(loc, 'sound/effects/Glasshit.ogg', 90, 1) + switch(status) + if(LIGHT_EMPTY) + playsound(loc, 'sound/weapons/smash.ogg', 50, 1) + if(LIGHT_BROKEN) + playsound(loc, 'sound/effects/hit_on_shattered_glass.ogg', 90, 1) + else + playsound(loc, 'sound/effects/Glasshit.ogg', 90, 1) if(BURN) - if(sound_effect) - playsound(src.loc, 'sound/items/Welder.ogg', 100, 1) - else - return - health -= damage - if(health <= 0) - broken() + playsound(src.loc, 'sound/items/Welder.ogg', 100, 1) // returns whether this light has power @@ -397,20 +425,6 @@ src.flicker(1) return -/obj/machinery/light/bullet_act(obj/item/projectile/P) - . = ..() - take_damage(P.damage, P.damage_type, 0) - -/obj/machinery/light/hitby(AM as mob|obj) - ..() - var/tforce = 0 - if(ismob(AM)) - tforce = 40 - else if(isobj(AM)) - var/obj/item/I = AM - tforce = I.throwforce - take_damage(tforce) - // attack with hand - remove tube/bulb // if hands aren't protected and the light is on, burn the player @@ -444,12 +458,15 @@ user << "You try to remove the light [fitting], but you burn your hand on it!" var/obj/item/bodypart/affecting = H.get_bodypart("[(user.active_hand_index % 2 == 0) ? "r" : "l" ]_arm") - if(affecting && affecting.take_damage( 0, 5 )) // 5 burn damage + if(affecting && affecting.receive_damage( 0, 5 )) // 5 burn damage H.update_damage_overlays() return // if burned, don't remove the light else user << "You remove the light [fitting]." // create a light tube/bulb item and put it in the user's hand + drop_light_tube(user) + +/obj/machinery/light/proc/drop_light_tube(mob/user) var/obj/item/weapon/light/L = new light_type() L.status = status L.rigged = rigged @@ -460,10 +477,11 @@ switchcount = 0 L.update() - L.add_fingerprint(user) - L.loc = loc + L.forceMove(loc) - user.put_in_active_hand(L) //puts it in our active hand + if(user) //puts it in our active hand + L.add_fingerprint(user) + user.put_in_active_hand(L) status = LIGHT_EMPTY update() @@ -475,26 +493,13 @@ user << "You telekinetically remove the light [fitting]." // create a light tube/bulb item and put it in the user's hand - var/obj/item/weapon/light/L = new light_type() - L.status = status - L.rigged = rigged - L.brightness = brightness + drop_light_tube() - // light item inherits the switchcount, then zero it - L.switchcount = switchcount - switchcount = 0 - - L.update() - L.add_fingerprint(user) - L.loc = loc - - status = LIGHT_EMPTY - update() // break the light and make sparks if was on -/obj/machinery/light/proc/broken(skip_sound_and_sparks = 0) - if(status == LIGHT_EMPTY) +/obj/machinery/light/proc/break_light_tube(skip_sound_and_sparks = 0) + if(status == LIGHT_EMPTY || status == LIGHT_BROKEN) return if(!skip_sound_and_sparks) @@ -515,29 +520,6 @@ on = 1 update() -// explosion effect -// destroy the whole light fixture or just shatter it - -/obj/machinery/light/ex_act(severity, target) - ..() - if(!qdeleted(src)) - switch(severity) - if(2) - if(prob(50)) - broken() - if(3) - if(prob(25)) - broken() - -/obj/machinery/light/blob_act(obj/structure/blob/B) - if(B && B.loc == loc) - broken() - qdel(src) - else if(prob(50)) - broken() - else - flicker() - /obj/machinery/light/tesla_act(power, explosive = FALSE) if(explosive) explosion(src.loc,0,0,0,flame_range = 5, adminlog = 0) @@ -553,14 +535,14 @@ /obj/machinery/light/temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume) if(prob(max(0, exposed_temperature - 673))) //0% at <400C, 100% at >500C - broken() + break_light_tube() // explode the light /obj/machinery/light/proc/explode() set waitfor = 0 var/turf/T = get_turf(src.loc) - broken() // break it first to give a warning + break_light_tube() // break it first to give a warning sleep(2) explosion(T, 0, 0, 2, 2) sleep(1) diff --git a/code/modules/power/rtg.dm b/code/modules/power/rtg.dm index 058084e1cec..915f909e231 100644 --- a/code/modules/power/rtg.dm +++ b/code/modules/power/rtg.dm @@ -142,7 +142,7 @@ else overload() -/obj/machinery/power/rtg/abductor/fire_act() +/obj/machinery/power/rtg/abductor/fire_act(exposed_temperature, exposed_volume) overload() /obj/machinery/power/rtg/abductor/tesla_act() diff --git a/code/modules/power/singularity/collector.dm b/code/modules/power/singularity/collector.dm index ec4da0d1b2e..74fd320c11d 100644 --- a/code/modules/power/singularity/collector.dm +++ b/code/modules/power/singularity/collector.dm @@ -10,6 +10,9 @@ var/global/list/rad_collectors = list() density = 1 req_access = list(access_engine_equip) // use_power = 0 + obj_integrity = 350 + max_integrity = 350 + integrity_failure = 80 var/obj/item/weapon/tank/internals/plasma/loaded_tank = null var/last_power = 0 var/active = 0 @@ -105,12 +108,10 @@ var/global/list/rad_collectors = list() return ..() -/obj/machinery/power/rad_collector/ex_act(severity, target) - switch(severity) - if(2, 3) - eject() - return ..() - +/obj/machinery/power/rad_collector/obj_break(damage_flag) + if(!(stat & BROKEN) && !(flags & NODECONSTRUCT)) + eject() + stat |= BROKEN /obj/machinery/power/rad_collector/proc/eject() locked = 0 diff --git a/code/modules/power/singularity/containment_field.dm b/code/modules/power/singularity/containment_field.dm index 6b3f4deb296..90a8beff273 100644 --- a/code/modules/power/singularity/containment_field.dm +++ b/code/modules/power/singularity/containment_field.dm @@ -7,7 +7,7 @@ icon_state = "Contain_F" anchored = 1 density = 0 - resistance_flags = LAVA_PROOF | FIRE_PROOF | UNACIDABLE + resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF use_power = 0 luminosity = 4 layer = ABOVE_OBJ_LAYER @@ -26,11 +26,20 @@ shock(user) return 1 +/obj/machinery/field/containment/attackby(obj/item/W, mob/user, params) + shock(user) + return 1 + +/obj/machinery/field/containment/play_attack_sound(damage_amount, damage_type = BRUTE, damage_flag = 0) + switch(damage_type) + if(BURN) + playsound(loc, 'sound/effects/EMPulse.ogg', 75, 1) + if(BRUTE) + playsound(loc, 'sound/effects/EMPulse.ogg', 75, 1) /obj/machinery/field/containment/blob_act(obj/structure/blob/B) return 0 - /obj/machinery/field/containment/ex_act(severity, target) return 0 @@ -69,6 +78,8 @@ /obj/machinery/field/containment/Move() qdel(src) + + // Abstract Field Class // Used for overriding certain procs @@ -106,7 +117,6 @@ user.updatehealth() bump_field(user) - return /obj/machinery/field/proc/clear_shock() hasShocked = 0 diff --git a/code/modules/power/singularity/field_generator.dm b/code/modules/power/singularity/field_generator.dm index 366bab4bad9..69b592d5fdf 100644 --- a/code/modules/power/singularity/field_generator.dm +++ b/code/modules/power/singularity/field_generator.dm @@ -30,6 +30,10 @@ field_generator power level display anchored = 0 density = 1 use_power = 0 + obj_integrity = 500 + max_integrity = 500 + //100% immune to lasers and energy projectiles since it absorbs their energy. + armor = list(melee = 25, bullet = 10, laser = 100, energy = 100, bomb = 0, bio = 0, rad = 0, fire = 50, acid = 70) var/const/num_power_levels = 6 // Total number of power level icon has var/power_level = 0 var/active = FG_OFFLINE @@ -157,7 +161,7 @@ field_generator power level display if(Proj.flag != "bullet") power = min(power + Proj.damage, field_generator_max_power) check_power_level() - return 0 + ..() /obj/machinery/field/generator/Destroy() diff --git a/code/modules/power/singularity/particle_accelerator/particle_accelerator.dm b/code/modules/power/singularity/particle_accelerator/particle_accelerator.dm index b8140b80a10..64538f978c1 100644 --- a/code/modules/power/singularity/particle_accelerator/particle_accelerator.dm +++ b/code/modules/power/singularity/particle_accelerator/particle_accelerator.dm @@ -26,6 +26,10 @@ icon_state = "none" anchored = 0 density = 1 + obj_integrity = 500 + max_integrity = 500 + armor = list(melee = 30, bullet = 20, laser = 20, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 90, acid = 80) + var/obj/machinery/particle_accelerator/control_box/master = null var/construction_state = PA_CONSTRUCTION_UNSECURED var/reference = null @@ -143,16 +147,17 @@ return ..() +/obj/structure/particle_accelerator/deconstruct(disassembled = TRUE) + if(!(flags & NODECONSTRUCT)) + new /obj/item/stack/sheet/metal (loc, 5) + qdel(src) + /obj/structure/particle_accelerator/Move() ..() if(master && master.active) master.toggle_power() investigate_log("was moved whilst active; it powered down.","singulo") -/obj/structure/particle_accelerator/blob_act(obj/structure/blob/B) - if(prob(50)) - qdel(src) - /obj/structure/particle_accelerator/update_icon() switch(construction_state) @@ -165,7 +170,6 @@ icon_state="[reference]p[strength]" else icon_state="[reference]c" - return /obj/structure/particle_accelerator/proc/update_state() if(master) diff --git a/code/modules/power/singularity/singularity.dm b/code/modules/power/singularity/singularity.dm index 96ee044fb77..fb9af570189 100644 --- a/code/modules/power/singularity/singularity.dm +++ b/code/modules/power/singularity/singularity.dm @@ -26,7 +26,7 @@ var/last_failed_movement = 0//Will not move in the same dir if it couldnt before, will help with the getting stuck on fields thing var/last_warning var/consumedSupermatter = 0 //If the singularity has eaten a supermatter shard and can go to stage six - resistance_flags = LAVA_PROOF | FIRE_PROOF | UNACIDABLE + resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF /obj/singularity/New(loc, var/starting_energy = 50, var/temp = 0) //CARN: admin-alert for chuckle-fuckery. @@ -60,6 +60,19 @@ consume(user) return 1 +/obj/singularity/attack_paw(mob/user) + consume(user) + +/obj/singularity/attack_alien(mob/user) + consume(user) + +/obj/singularity/attack_animal(mob/user) + consume(user) + +/obj/singularity/attackby(obj/item/weapon/W, mob/user, params) + consume(user) + return 1 + /obj/singularity/Process_Spacemove() //The singularity stops drifting for no man! return 0 diff --git a/code/modules/power/solar.dm b/code/modules/power/solar.dm index d38b2a9c426..6b19344e683 100644 --- a/code/modules/power/solar.dm +++ b/code/modules/power/solar.dm @@ -12,7 +12,9 @@ idle_power_usage = 0 active_power_usage = 0 var/id = 0 - var/health = 20 + obj_integrity = 150 + max_integrity = 150 + integrity_failure = 50 var/obscured = 0 var/sunfrac = 0 var/adir = SOUTH // actual dir @@ -50,7 +52,8 @@ S.anchored = 1 S.loc = src if(S.glass_type == /obj/item/stack/sheet/rglass) //if the panel is in reinforced glass - health *= 2 //this need to be placed here, because panels already on the map don't have an assembly linked to + max_integrity *= 2 //this need to be placed here, because panels already on the map don't have an assembly linked to + obj_integrity = max_integrity update_icon() /obj/machinery/power/solar/attackby(obj/item/weapon/W, mob/user, params) @@ -58,54 +61,43 @@ playsound(src.loc, 'sound/machines/click.ogg', 50, 1) user.visible_message("[user] begins to take the glass off the solar panel.", "You begin to take the glass off the solar panel...") if(do_after(user, 50/W.toolspeed, target = src)) - var/obj/item/solar_assembly/S = locate() in src - if(S) - S.loc = src.loc - S.give_glass(stat & BROKEN) - playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1) user.visible_message("[user] takes the glass off the solar panel.", "You take the glass off the solar panel.") - qdel(src) + deconstruct(TRUE) else return ..() -/obj/machinery/power/solar/bullet_act(obj/item/projectile/P) - . = ..() - take_damage(P.damage, P.damage_type) - -/obj/machinery/power/solar/hitby(AM as mob|obj) - ..() - var/tforce = 0 - if(ismob(AM)) - tforce = 20 - else if(isobj(AM)) - var/obj/item/I = AM - tforce = I.throwforce - take_damage(tforce) - -/obj/machinery/power/solar/take_damage(damage, damage_type = BRUTE, sound_effect = 1) +/obj/machinery/power/solar/play_attack_sound(damage_amount, damage_type = BRUTE, damage_flag = 0) switch(damage_type) if(BRUTE) - if(sound_effect) - if(stat & BROKEN) - playsound(loc, 'sound/effects/hit_on_shattered_glass.ogg', 60, 1) - else - playsound(loc, 'sound/effects/Glasshit.ogg', 90, 1) + if(stat & BROKEN) + playsound(loc, 'sound/effects/hit_on_shattered_glass.ogg', 60, 1) + else + playsound(loc, 'sound/effects/Glasshit.ogg', 90, 1) if(BURN) - if(sound_effect) - playsound(loc, 'sound/items/Welder.ogg', 100, 1) + playsound(loc, 'sound/items/Welder.ogg', 100, 1) + + +/obj/machinery/power/solar/obj_break(damage_flag) + if(!(stat & BROKEN) && !(flags & NODECONSTRUCT)) + playsound(loc, 'sound/effects/Glassbr3.ogg', 100, 1) + stat |= BROKEN + unset_control() + update_icon() + +/obj/machinery/power/solar/deconstruct(disassembled = TRUE) + if(!(flags & NODECONSTRUCT)) + if(disassembled) + var/obj/item/solar_assembly/S = locate() in src + if(S) + S.forceMove(loc) + S.give_glass(stat & BROKEN) else - return - health -= damage - if(health <= 0) - playsound(src, "shatter", 70, 1) - new /obj/item/weapon/shard(src.loc) - new /obj/item/weapon/shard(src.loc) - qdel(src) - else if(health <= 10) - if(!(stat & BROKEN)) - playsound(loc, 'sound/effects/Glassbr3.ogg', 100, 1) - set_broken() + playsound(src, "shatter", 70, 1) + new /obj/item/weapon/shard(src.loc) + new /obj/item/weapon/shard(src.loc) + qdel(src) + /obj/machinery/power/solar/update_icon() ..() @@ -115,7 +107,6 @@ else add_overlay(image('icons/obj/power.dmi', icon_state = "solar_panel", layer = FLY_LAYER)) src.setDir(angle2dir(adir)) - return //calculates the fraction of the sunlight that the panel recieves /obj/machinery/power/solar/proc/update_solar_exposure() @@ -149,21 +140,6 @@ else //if we're no longer on the same powernet, remove from control computer unset_control() -/obj/machinery/power/solar/proc/set_broken() - . = (!(stat & BROKEN)) - stat |= BROKEN - unset_control() - update_icon() - - -/obj/machinery/power/solar/ex_act(severity, target) - ..() - if(!qdeleted(src)) - switch(severity) - if(2) - take_damage(rand(10,20), BRUTE, 0) - if(3) - take_damage(rand(5,15), BRUTE, 0) /obj/machinery/power/solar/fake/New(var/turf/loc, var/obj/item/solar_assembly/S) ..(loc, S, 0) @@ -289,7 +265,9 @@ density = 1 use_power = 1 idle_power_usage = 250 - var/health = 25 + obj_integrity = 200 + max_integrity = 200 + integrity_failure = 100 var/icon_screen = "solar" var/icon_keyboard = "power_key" var/id = 0 @@ -468,25 +446,18 @@ else return ..() -/obj/machinery/power/solar_control/bullet_act(obj/item/projectile/P) - . = ..() - take_damage(P.damage, P.damage_type) - -/obj/machinery/power/solar_control/take_damage(damage, damage_type = BRUTE, sound_effect = 1) +/obj/machinery/power/solar_control/play_attack_sound(damage_amount, damage_type = BRUTE, damage_flag = 0) switch(damage_type) if(BRUTE) - if(sound_effect) - if(stat & BROKEN) - playsound(src.loc, 'sound/effects/hit_on_shattered_glass.ogg', 70, 1) - else - playsound(src.loc, 'sound/effects/Glasshit.ogg', 75, 1) + if(stat & BROKEN) + playsound(src.loc, 'sound/effects/hit_on_shattered_glass.ogg', 70, 1) + else + playsound(src.loc, 'sound/effects/Glasshit.ogg', 75, 1) if(BURN) - if(sound_effect) - playsound(src.loc, 'sound/items/Welder.ogg', 100, 1) - else - return - health -= damage - if(health <= 0 && !(stat & BROKEN)) + playsound(src.loc, 'sound/items/Welder.ogg', 100, 1) + +/obj/machinery/power/solar_control/obj_break(damage_flag) + if(!(stat & BROKEN) && !(flags & NODECONSTRUCT)) playsound(loc, 'sound/effects/Glassbr3.ogg', 100, 1) stat |= BROKEN update_icon() @@ -523,24 +494,6 @@ update_icon() -/obj/machinery/power/solar_control/proc/set_broken() - stat |= BROKEN - update_icon() - - -/obj/machinery/power/solar_control/ex_act(severity, target) - ..() - if(!qdeleted(src)) - switch(severity) - if(2) - take_damage(rand(20,30), BRUTE, 0) - if(3) - take_damage(rand(10,20), BRUTE, 0) - -/obj/machinery/power/solar_control/blob_act(obj/structure/blob/B) - if (prob(75)) - set_broken() - src.density = 0 // diff --git a/code/modules/power/supermatter/supermatter.dm b/code/modules/power/supermatter/supermatter.dm index cb765e76f40..8f5c739346a 100644 --- a/code/modules/power/supermatter/supermatter.dm +++ b/code/modules/power/supermatter/supermatter.dm @@ -76,7 +76,9 @@ /obj/machinery/power/supermatter_shard/Destroy() investigate_log("has been destroyed.", "supermatter") - qdel(radio) + if(radio) + qdel(radio) + radio = null poi_list -= src . = ..() @@ -245,11 +247,11 @@ /obj/machinery/power/supermatter_shard/blob_act(obj/structure/blob/B) if(B && !isspaceturf(loc)) //does nothing in space playsound(get_turf(src), 'sound/effects/supermatter.ogg', 50, 1) - damage += B.health * 0.5 //take damage equal to 50% of remaining blob health before it tried to eat us - if(B.health > 100) + damage += B.obj_integrity * 0.5 //take damage equal to 50% of remaining blob health before it tried to eat us + if(B.obj_integrity > 100) B.visible_message("\The [B] strikes at \the [src] and flinches away!",\ "You hear a loud crack as you are washed with a wave of heat.") - B.take_damage(100, BURN, src) + B.take_damage(100, BURN) else B.visible_message("\The [B] strikes at \the [src] and rapidly flashes to ash.",\ "You hear a loud crack as you are washed with a wave of heat.") diff --git a/code/modules/power/tracker.dm b/code/modules/power/tracker.dm index 928e98563f3..0f37617704b 100644 --- a/code/modules/power/tracker.dm +++ b/code/modules/power/tracker.dm @@ -11,6 +11,9 @@ anchored = 1 density = 1 use_power = 0 + obj_integrity = 250 + max_integrity = 250 + integrity_failure = 50 var/id = 0 var/sun_angle = 0 // sun angle as set by sun datum @@ -64,16 +67,31 @@ playsound(src.loc, 'sound/machines/click.ogg', 50, 1) user.visible_message("[user] begins to take the glass off the solar tracker.", "You begin to take the glass off the solar tracker...") if(do_after(user, 50/W.toolspeed, target = src)) - var/obj/item/solar_assembly/S = locate() in src - if(S) - S.loc = src.loc - S.give_glass(stat & BROKEN) playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1) user.visible_message("[user] takes the glass off the tracker.", "You take the glass off the tracker.") - qdel(src) + deconstruct(TRUE) else return ..() +/obj/machinery/power/tracker/obj_break(damage_flag) + if(!(stat & BROKEN) && !(flags & NODECONSTRUCT)) + playsound(loc, 'sound/effects/Glassbr3.ogg', 100, 1) + stat |= BROKEN + unset_control() + +/obj/machinery/power/solar/deconstruct(disassembled = TRUE) + if(!(flags & NODECONSTRUCT)) + if(disassembled) + var/obj/item/solar_assembly/S = locate() in src + if(S) + S.forceMove(loc) + S.give_glass(stat & BROKEN) + else + playsound(src, "shatter", 70, 1) + new /obj/item/weapon/shard(src.loc) + new /obj/item/weapon/shard(src.loc) + qdel(src) + // Tracker Electronic /obj/item/weapon/electronics/tracker diff --git a/code/modules/power/turbine.dm b/code/modules/power/turbine.dm index b43b7b0f4ef..b64323c9ec6 100644 --- a/code/modules/power/turbine.dm +++ b/code/modules/power/turbine.dm @@ -29,6 +29,7 @@ icon_state = "compressor" anchored = 1 density = 1 + resistance_flags = FIRE_PROOF var/obj/machinery/power/turbine/turbine var/datum/gas_mixture/gas_contained var/turf/inturf @@ -47,6 +48,7 @@ icon_state = "turbine" anchored = 1 density = 1 + resistance_flags = FIRE_PROOF var/opened = 0 var/obj/machinery/power/compressor/compressor var/turf/outturf diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm index ede8268be7d..db04bb92816 100644 --- a/code/modules/projectiles/gun.dm +++ b/code/modules/projectiles/gun.dm @@ -484,8 +484,3 @@ obj/item/weapon/gun/proc/newshot() azoom = new() azoom.gun = src - -/obj/item/weapon/gun/burn() - if(pin) - qdel(pin) - .=..() diff --git a/code/modules/projectiles/guns/energy.dm b/code/modules/projectiles/guns/energy.dm index f9c488f9628..185d5ff2654 100644 --- a/code/modules/projectiles/guns/energy.dm +++ b/code/modules/projectiles/guns/energy.dm @@ -47,6 +47,9 @@ fire_delay = shot.delay /obj/item/weapon/gun/energy/Destroy() + if(power_supply) + qdel(power_supply) + power_supply = null STOP_PROCESSING(SSobj, src) return ..() @@ -170,7 +173,3 @@ STOP_PROCESSING(SSobj, src) ..() -/obj/item/weapon/gun/energy/burn() - if(power_supply) - qdel(power_supply) - .=..() diff --git a/code/modules/projectiles/projectile.dm b/code/modules/projectiles/projectile.dm index 313e2814ccc..da8e2c83ec7 100644 --- a/code/modules/projectiles/projectile.dm +++ b/code/modules/projectiles/projectile.dm @@ -10,7 +10,7 @@ hitsound = 'sound/weapons/pierce.ogg' var/hitsound_wall = "" - resistance_flags = LAVA_PROOF | FIRE_PROOF | UNACIDABLE + resistance_flags = LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF var/def_zone = "" //Aiming at var/mob/firer = null//Who shot it var/obj/item/ammo_casing/ammo_casing = null diff --git a/code/modules/reagents/chemistry/machinery/chem_dispenser.dm b/code/modules/reagents/chemistry/machinery/chem_dispenser.dm index 7279ec41475..79072028c9a 100644 --- a/code/modules/reagents/chemistry/machinery/chem_dispenser.dm +++ b/code/modules/reagents/chemistry/machinery/chem_dispenser.dm @@ -8,6 +8,7 @@ use_power = 1 idle_power_usage = 40 interact_offline = 1 + resistance_flags = FIRE_PROOF | ACID_PROOF var/energy = 100 var/max_energy = 100 var/amount = 30 diff --git a/code/modules/reagents/chemistry/machinery/chem_heater.dm b/code/modules/reagents/chemistry/machinery/chem_heater.dm index aa4955e7ef1..a4af808cbb2 100644 --- a/code/modules/reagents/chemistry/machinery/chem_heater.dm +++ b/code/modules/reagents/chemistry/machinery/chem_heater.dm @@ -6,6 +6,7 @@ icon_state = "mixer0b" use_power = 1 idle_power_usage = 40 + resistance_flags = FIRE_PROOF | ACID_PROOF var/obj/item/weapon/reagent_containers/beaker = null var/target_temperature = 300 var/heater_coefficient = 0.10 diff --git a/code/modules/reagents/chemistry/machinery/chem_master.dm b/code/modules/reagents/chemistry/machinery/chem_master.dm index 07042c5e1ad..52dccdedcd8 100644 --- a/code/modules/reagents/chemistry/machinery/chem_master.dm +++ b/code/modules/reagents/chemistry/machinery/chem_master.dm @@ -7,6 +7,7 @@ icon_state = "mixer0" use_power = 1 idle_power_usage = 20 + resistance_flags = FIRE_PROOF | ACID_PROOF var/obj/item/weapon/reagent_containers/beaker = null var/obj/item/weapon/storage/pill_bottle/bottle = null var/mode = 1 diff --git a/code/modules/reagents/chemistry/machinery/pandemic.dm b/code/modules/reagents/chemistry/machinery/pandemic.dm index 9fd265af203..448de75f0b6 100644 --- a/code/modules/reagents/chemistry/machinery/pandemic.dm +++ b/code/modules/reagents/chemistry/machinery/pandemic.dm @@ -8,6 +8,7 @@ circuit = /obj/item/weapon/circuitboard/computer/pandemic use_power = 1 idle_power_usage = 20 + resistance_flags = ACID_PROOF var/temp_html = "" var/wait = null var/obj/item/weapon/reagent_containers/beaker = null diff --git a/code/modules/reagents/chemistry/machinery/reagentgrinder.dm b/code/modules/reagents/chemistry/machinery/reagentgrinder.dm index 479a2ea140b..cc6a21adf5a 100644 --- a/code/modules/reagents/chemistry/machinery/reagentgrinder.dm +++ b/code/modules/reagents/chemistry/machinery/reagentgrinder.dm @@ -9,6 +9,7 @@ idle_power_usage = 5 active_power_usage = 100 pass_flags = PASSTABLE + resistance_flags = ACID_PROOF var/operating = 0 var/obj/item/weapon/reagent_containers/beaker = null var/limit = 10 diff --git a/code/modules/reagents/chemistry/reagents/blob_reagents.dm b/code/modules/reagents/chemistry/reagents/blob_reagents.dm index 3c0e289f6da..42621f1a7fc 100644 --- a/code/modules/reagents/chemistry/reagents/blob_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/blob_reagents.dm @@ -25,10 +25,10 @@ return 0 //the dead, and blob mobs, don't cause reactions return round(reac_volume * min(1.5 - touch_protection, 1), 0.1) //full touch protection means 50% volume, any prot below 0.5 means 100% volume. -/datum/reagent/blob/proc/damage_reaction(obj/structure/blob/B, original_health, damage, damage_type, cause) //when the blob takes damage, do this +/datum/reagent/blob/proc/damage_reaction(obj/structure/blob/B, damage, damage_type, damage_flag) //when the blob takes damage, do this return damage -/datum/reagent/blob/proc/death_reaction(obj/structure/blob/B, cause) //when a blob dies, do this +/datum/reagent/blob/proc/death_reaction(obj/structure/blob/B, damage_flag) //when a blob dies, do this return /datum/reagent/blob/proc/expand_reaction(obj/structure/blob/B, obj/structure/blob/newB, turf/T) //when the blob expands, do this @@ -59,15 +59,14 @@ reac_volume = ..() M.apply_damage(0.7*reac_volume, BRUTE) -/datum/reagent/blob/replicating_foam/damage_reaction(obj/structure/blob/B, original_health, damage, damage_type, cause) +/datum/reagent/blob/replicating_foam/damage_reaction(obj/structure/blob/B, damage, damage_type, damage_flag) var/effectivedamage = damage if(damage_type == BRUTE) effectivedamage = damage * 2 - if(damage_type == BURN && effectivedamage > 0 && original_health - effectivedamage > 0 && prob(60)) + if(damage_type == BURN && effectivedamage > 0 && B.obj_integrity - effectivedamage > 0 && prob(60)) var/obj/structure/blob/newB = B.expand(null, null, 0) if(newB) - newB.health = original_health - effectivedamage - newB.check_health(cause) + newB.obj_integrity = B.obj_integrity - effectivedamage newB.update_icon() return effectivedamage @@ -95,8 +94,8 @@ newB.forceMove(get_turf(B)) B.forceMove(T) -/datum/reagent/blob/shifting_fragments/damage_reaction(obj/structure/blob/B, original_health, damage, damage_type, cause) - if(cause && damage > 0 && original_health - damage > 0 && prob(60-damage)) +/datum/reagent/blob/shifting_fragments/damage_reaction(obj/structure/blob/B, damage, damage_type, damage_flag) + if((damage_flag == "melee" || damage_flag == "bullet" || damage_flag == "laser") && damage > 0 && B.obj_integrity - damage > 0 && prob(60-damage)) var/list/blobstopick = list() for(var/obj/structure/blob/OB in orange(1, B)) if((istype(OB, /obj/structure/blob/normal) || (istype(OB, /obj/structure/blob/shield) && prob(25))) && OB.overmind && OB.overmind.blob_reagent_datum.id == B.overmind.blob_reagent_datum.id) @@ -134,8 +133,8 @@ /datum/reagent/blob/blazing_oil/extinguish_reaction(obj/structure/blob/B) B.take_damage(rand(1, 3), BURN) -/datum/reagent/blob/blazing_oil/damage_reaction(obj/structure/blob/B, original_health, damage, damage_type, cause) - if(cause && damage_type == BURN) +/datum/reagent/blob/blazing_oil/damage_reaction(obj/structure/blob/B, damage, damage_type, damage_flag) + if(damage_type == BURN && (damage_flag == "melee" || damage_flag == "bullet" || damage_flag == "laser")) for(var/turf/open/T in range(1, B)) var/obj/structure/blob/C = locate() in T if(!(C && C.overmind && C.overmind.blob_reagent_datum.id == B.overmind.blob_reagent_datum.id) && prob(80)) @@ -200,8 +199,8 @@ O.add_points(points) O << "Gained [points] resources from the zombification of [M]." -/datum/reagent/blob/zombifying_pods/damage_reaction(obj/structure/blob/B, original_health, damage, damage_type, cause) - if(!isnull(cause) && damage <= 20 && original_health - damage <= 0 && prob(30)) //if the cause isn't fire or a bomb, the damage is less than 21, we're going to die from that damage, 20% chance of a shitty spore. +/datum/reagent/blob/zombifying_pods/damage_reaction(obj/structure/blob/B, damage, damage_type, damage_flag) + if((damage_flag == "melee" || damage_flag == "bullet" || damage_flag == "laser") && damage <= 20 && B.obj_integrity - damage <= 0 && prob(30)) //if the cause isn't fire or a bomb, the damage is less than 21, we're going to die from that damage, 20% chance of a shitty spore. B.visible_message("A spore floats free of the blob!") var/mob/living/simple_animal/hostile/blob/blobspore/weak/BS = new/mob/living/simple_animal/hostile/blob/blobspore/weak(B.loc) BS.overmind = B.overmind @@ -236,8 +235,8 @@ if(M) M.apply_damage(0.6*reac_volume, OXY) -/datum/reagent/blob/energized_jelly/damage_reaction(obj/structure/blob/B, original_health, damage, damage_type, cause) - if(!isnull(cause) && original_health - damage <= 0 && prob(10)) +/datum/reagent/blob/energized_jelly/damage_reaction(obj/structure/blob/B, damage, damage_type, damage_flag) + if((damage_flag == "melee" || damage_flag == "bullet" || damage_flag == "laser") && B.obj_integrity - damage <= 0 && prob(10)) spark_system.set_up(rand(2, 4), 0, B) spark_system.start() return ..() @@ -247,7 +246,7 @@ /datum/reagent/blob/energized_jelly/emp_reaction(obj/structure/blob/B, severity) var/damage = rand(30, 50) - severity * rand(10, 15) - B.take_damage(damage, BURN) + B.take_damage(damage, BURN, "energy") //does aoe brute damage when hitting targets, is immune to explosions /datum/reagent/blob/explosive_lattice @@ -278,12 +277,11 @@ else M.apply_damage(0.6*reac_volume, BRUTE) -/datum/reagent/blob/explosive_lattice/damage_reaction(obj/structure/blob/B, original_health, damage, damage_type, cause) - if(isnull(cause)) - if(damage_type == BRUTE) - return 0 //no-sell the explosion we do not take damage - if(damage_type == BURN) - return damage * 1.5 //take more from fire, tesla, and flashbangs +/datum/reagent/blob/explosive_lattice/damage_reaction(obj/structure/blob/B, damage, damage_type, damage_flag) + if(damage_flag == "bomb") + return 0 + else if(damage_flag != "melee" || damage_flag != "bullet" || damage_flag != "laser") + return damage * 1.5 return ..() //does brute, burn, and toxin damage, and cools targets down @@ -334,7 +332,7 @@ if(M) M.apply_damage(reac_volume, BURN) -/datum/reagent/blob/electromagnetic_web/damage_reaction(obj/structure/blob/B, original_health, damage, damage_type, cause) +/datum/reagent/blob/electromagnetic_web/damage_reaction(obj/structure/blob/B, damage, damage_type, damage_flag) if(damage_type == BRUTE) //take full brute switch(B.brute_resist) if(0.5) @@ -345,8 +343,8 @@ return damage * 10 return damage * 1.25 //a laser will do 25 damage, which will kill any normal blob -/datum/reagent/blob/electromagnetic_web/death_reaction(obj/structure/blob/B, cause) - if(cause) +/datum/reagent/blob/electromagnetic_web/death_reaction(obj/structure/blob/B, damage_flag) + if(damage_flag == "melee" || damage_flag == "bullet" || damage_flag == "laser") empulse(B.loc, 1, 3) //less than screen range, so you can stand out of range to avoid it //does brute damage, bonus damage for each nearby blob, and spreads damage out @@ -371,15 +369,15 @@ B.blob_attack_animation(M) //show them they're getting a bad time M.apply_damage(0.3*reac_volume, BRUTE) -/datum/reagent/blob/synchronous_mesh/damage_reaction(obj/structure/blob/B, original_health, damage, damage_type, cause) - if(!isnull(cause)) //the cause isn't fire or bombs, so split the damage +/datum/reagent/blob/synchronous_mesh/damage_reaction(obj/structure/blob/B, damage, damage_type, damage_flag) + if(damage_flag == "melee" || damage_flag == "bullet" || damage_flag == "laser") //the cause isn't fire or bombs, so split the damage var/damagesplit = 1 //maximum split is 9, reducing the damage each blob takes to 11% but doing that damage to 9 blobs for(var/obj/structure/blob/C in orange(1, B)) if(!istype(C, /obj/structure/blob/core) && !istype(C, /obj/structure/blob/node) && C.overmind && C.overmind.blob_reagent_datum.id == B.overmind.blob_reagent_datum.id) //if it doesn't have the same chemical or is a core or node, don't split damage to it damagesplit += 1 for(var/obj/structure/blob/C in orange(1, B)) if(!istype(C, /obj/structure/blob/core) && !istype(C, /obj/structure/blob/node) && C.overmind && C.overmind.blob_reagent_datum.id == B.overmind.blob_reagent_datum.id) //only hurt blobs that have the same overmind chemical and aren't cores or nodes - C.take_damage(damage/damagesplit, CLONE, B, 0) + C.take_damage(damage/damagesplit, CLONE, 0, 0) return damage / damagesplit else return damage * 1.25 @@ -402,9 +400,9 @@ return 0 //the dead, and blob mobs, don't cause reactions M.adjustBruteLoss(0.8*reac_volume) -/datum/reagent/blob/reactive_spines/damage_reaction(obj/structure/blob/B, original_health, damage, damage_type, cause) - if(damage && damage_type == BRUTE && original_health - damage > 0) //is there any damage, is it brute, and will we be alive - if(isliving(cause)) +/datum/reagent/blob/reactive_spines/damage_reaction(obj/structure/blob/B, damage, damage_type, damage_flag) + if(damage && damage_type == BRUTE && B.obj_integrity - damage > 0) //is there any damage, is it brute, and will we be alive + if(damage_flag == "melee") B.visible_message("The blob retaliates, lashing out!") for(var/atom/A in range(1, B)) A.blob_act(B) @@ -437,13 +435,13 @@ if(M) M.adjustStaminaLoss(0.2*reac_volume) -/datum/reagent/blob/pressurized_slime/damage_reaction(obj/structure/blob/B, original_health, damage, damage_type, cause) - if(cause || damage_type != BURN) +/datum/reagent/blob/pressurized_slime/damage_reaction(obj/structure/blob/B, damage, damage_type, damage_flag) + if((damage_flag == "melee" || damage_flag == "bullet" || damage_flag == "laser") || damage_type != BURN) extinguisharea(B, damage) return ..() -/datum/reagent/blob/pressurized_slime/death_reaction(obj/structure/blob/B, cause) - if(!isnull(cause)) +/datum/reagent/blob/pressurized_slime/death_reaction(obj/structure/blob/B, damage_flag) + if(damage_flag == "melee" || damage_flag == "bullet" || damage_flag == "laser") B.visible_message("The blob ruptures, spraying the area with liquid!") extinguisharea(B, 50) diff --git a/code/modules/reagents/chemistry/reagents/other_reagents.dm b/code/modules/reagents/chemistry/reagents/other_reagents.dm index 57197c22691..4c8ce615323 100644 --- a/code/modules/reagents/chemistry/reagents/other_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/other_reagents.dm @@ -125,15 +125,17 @@ G.temperature = max(min(G.temperature-(CT*1000),G.temperature/CT),0) G.react() qdel(hotspot) + var/obj/effect/acid/A = (locate(/obj/effect/acid) in T) + if(A) + A.acid_level = max(A.acid_level - reac_volume*50, 0) /* * Water reaction to an object */ /datum/reagent/water/reaction_obj(obj/O, reac_volume) - if(istype(O)) - O.extinguish() - + O.extinguish() + O.acid_level = 0 // Monkey cube if(istype(O,/obj/item/weapon/reagent_containers/food/snacks/monkeycube)) var/obj/item/weapon/reagent_containers/food/snacks/monkeycube/cube = O diff --git a/code/modules/reagents/chemistry/reagents/toxin_reagents.dm b/code/modules/reagents/chemistry/reagents/toxin_reagents.dm index 4ece92a9410..36a6eb68a49 100644 --- a/code/modules/reagents/chemistry/reagents/toxin_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/toxin_reagents.dm @@ -679,7 +679,7 @@ if(method == INJECT) C.adjustBruteLoss(1.5 * min(6*toxpwr, reac_volume * toxpwr)) return - C.acid_act(acidpwr, toxpwr, reac_volume) + C.acid_act(acidpwr, reac_volume) /datum/reagent/toxin/acid/reaction_obj(obj/O, reac_volume) if(istype(O.loc, /mob)) //handled in human acid_act() @@ -691,8 +691,7 @@ if (!istype(T)) return reac_volume = round(reac_volume,0.1) - for(var/obj/O in T) - O.acid_act(acidpwr, reac_volume) + T.acid_act(acidpwr, reac_volume) /datum/reagent/toxin/acid/fluacid name = "Fluorosulfuric acid" diff --git a/code/modules/reagents/chemistry/recipes/slime_extracts.dm b/code/modules/reagents/chemistry/recipes/slime_extracts.dm index 9831f73bc60..2a2b0e9f244 100644 --- a/code/modules/reagents/chemistry/recipes/slime_extracts.dm +++ b/code/modules/reagents/chemistry/recipes/slime_extracts.dm @@ -289,10 +289,10 @@ feedback_add_details("slime_cores_used","[type]") var/turf/TU = get_turf(holder.my_atom) TU.visible_message("The slime extract begins to vibrate adorably!") - addtimer(src, "burn", 50, FALSE, holder) + addtimer(src, "slime_burn", 50, FALSE, holder) -/datum/chemical_reaction/slimefire/proc/burn(datum/reagents/holder) +/datum/chemical_reaction/slimefire/proc/slime_burn(datum/reagents/holder) if(holder && holder.my_atom) var/turf/open/T = get_turf(holder.my_atom) if(istype(T)) diff --git a/code/modules/reagents/reagent_containers.dm b/code/modules/reagents/reagent_containers.dm index 1c54b6f22ce..ff3c280c431 100644 --- a/code/modules/reagents/reagent_containers.dm +++ b/code/modules/reagents/reagent_containers.dm @@ -73,7 +73,7 @@ R.on_ex_act() ..() -/obj/item/weapon/reagent_containers/fire_act() +/obj/item/weapon/reagent_containers/fire_act(exposed_temperature, exposed_volume) reagents.chem_temp += 30 reagents.handle_reactions() ..() diff --git a/code/modules/reagents/reagent_containers/bottle.dm b/code/modules/reagents/reagent_containers/bottle.dm index 8bd874837df..61bd6b78ff6 100644 --- a/code/modules/reagents/reagent_containers/bottle.dm +++ b/code/modules/reagents/reagent_containers/bottle.dm @@ -19,7 +19,7 @@ update_icon() /obj/item/weapon/reagent_containers/glass/bottle/update_icon() - overlays.Cut() + cut_overlays() if(reagents.total_volume) var/image/filling = image('icons/obj/reagentfillings.dmi', src, "[icon_state]-10") diff --git a/code/modules/reagents/reagent_containers/glass.dm b/code/modules/reagents/reagent_containers/glass.dm index 469be2bbbb2..b6edef2315d 100644 --- a/code/modules/reagents/reagent_containers/glass.dm +++ b/code/modules/reagents/reagent_containers/glass.dm @@ -5,6 +5,7 @@ volume = 50 flags = OPENCONTAINER spillable = 1 + resistance_flags = ACID_PROOF /obj/item/weapon/reagent_containers/glass/attack(mob/M, mob/user, obj/target) @@ -212,7 +213,7 @@ /obj/item/weapon/reagent_containers/glass/beaker/large/epinephrine name = "epinephrine reserve tank" list_reagents = list("epinephrine" = 50) - + /obj/item/weapon/reagent_containers/glass/beaker/synthflesh list_reagents = list("synthflesh" = 50) @@ -230,7 +231,8 @@ flags = OPENCONTAINER flags_inv = HIDEHAIR slot_flags = SLOT_HEAD - armor = list(melee = 10, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0) //Weak melee protection, because you can wear it on your head + resistance_flags = 0 + armor = list(melee = 10, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 75, acid = 50) //Weak melee protection, because you can wear it on your head slot_equipment_priority = list( \ slot_back, slot_wear_id,\ slot_w_uniform, slot_wear_suit,\ diff --git a/code/modules/reagents/reagent_dispenser.dm b/code/modules/reagents/reagent_dispenser.dm index 962649807d4..7cc303bc814 100644 --- a/code/modules/reagents/reagent_dispenser.dm +++ b/code/modules/reagents/reagent_dispenser.dm @@ -6,28 +6,16 @@ density = 1 anchored = 0 pressure_resistance = 2*ONE_ATMOSPHERE + obj_integrity = 300 + max_integrity = 300 var/tank_volume = 1000 //In units, how much the dispenser can hold var/reagent_id = "water" //The ID of the reagent that the dispenser uses -/obj/structure/reagent_dispensers/ex_act(severity, target) - switch(severity) - if(1) +/obj/structure/reagent_dispensers/take_damage(damage_amount, damage_type = BRUTE, damage_flag = 0, sound_effect = 1, attack_dir) + . = ..() + if(. && obj_integrity > 0) + if(tank_volume && (damage_flag == "bullet" || damage_flag == "laser")) boom() - return - if(2) - if (prob(50)) - boom() - return - if(3) - if (prob(5)) - boom() - return - else - return - -/obj/structure/reagent_dispensers/blob_act(obj/structure/blob/B) - if(prob(50)) - boom() /obj/structure/reagent_dispensers/attackby(obj/item/weapon/W, mob/user, params) if(istype(W, /obj/item/weapon/reagent_containers)) @@ -53,21 +41,18 @@ chem_splash(loc, 5, list(reagents)) qdel(src) +/obj/structure/reagent_dispensers/deconstruct(disassembled = TRUE) + if(!(flags & NODECONSTRUCT)) + if(!disassembled) + boom() + else + qdel(src) + /obj/structure/reagent_dispensers/watertank name = "water tank" desc = "A water tank." icon_state = "water" -/obj/structure/reagent_dispensers/bullet_act(obj/item/projectile/Proj) - ..() - if(tank_volume && istype(Proj) && !Proj.nodamage && ((Proj.damage_type == BURN) || (Proj.damage_type == BRUTE))) - boom() - -/obj/structure/reagent_dispensers/watertank/blob_act(obj/structure/blob/B) - if(prob(50)) - PoolOrNew(/obj/effect/particle_effect/water, loc) - qdel(src) - /obj/structure/reagent_dispensers/watertank/high name = "high-capacity water tank" desc = "A highly-pressurized water tank made to hold gargantuan amounts of water.." @@ -80,15 +65,6 @@ icon_state = "fuel" reagent_id = "welding_fuel" -/obj/structure/reagent_dispensers/fueltank/bullet_act(obj/item/projectile/Proj) - ..() - if(istype(Proj) && !Proj.nodamage && ((Proj.damage_type == BURN) || (Proj.damage_type == BRUTE))) - var/boom_message = "[key_name_admin(Proj.firer)] triggered a fueltank explosion via projectile." - bombers += boom_message - message_admins(boom_message) - log_game("[key_name(Proj.firer)] triggered a fueltank explosion via projectile.") - boom() - /obj/structure/reagent_dispensers/fueltank/boom() explosion(get_turf(src), 0, 1, 5, flame_range = 5) qdel(src) @@ -99,13 +75,23 @@ /obj/structure/reagent_dispensers/fueltank/ex_act() boom() -/obj/structure/reagent_dispensers/fueltank/fire_act() +/obj/structure/reagent_dispensers/fueltank/fire_act(exposed_temperature, exposed_volume) boom() /obj/structure/reagent_dispensers/fueltank/tesla_act() ..() //extend the zap boom() +/obj/structure/reagent_dispensers/fueltank/bullet_act(obj/item/projectile/P) + ..() + if(!qdeleted(src)) //wasn't deleted by the projectile's effects. + if(!P.nodamage && ((P.damage_type == BURN) || (P.damage_type == BRUTE))) + var/boom_message = "[key_name_admin(P.firer)] triggered a fueltank explosion via projectile." + bombers += boom_message + message_admins(boom_message) + log_game("[key_name(P.firer)] triggered a fueltank explosion via projectile.") + boom() + /obj/structure/reagent_dispensers/fueltank/attackby(obj/item/I, mob/living/user, params) if(istype(I, /obj/item/weapon/weldingtool)) if(!reagents.has_reagent("welding_fuel")) @@ -176,6 +162,8 @@ /obj/structure/reagent_dispensers/beerkeg/blob_act(obj/structure/blob/B) explosion(src.loc,0,3,5,7,10) + if(!qdeleted(src)) + qdel(src) /obj/structure/reagent_dispensers/virusfood diff --git a/code/modules/recycling/disposal-construction.dm b/code/modules/recycling/disposal-construction.dm index 6c75044074b..8982370ff3a 100644 --- a/code/modules/recycling/disposal-construction.dm +++ b/code/modules/recycling/disposal-construction.dm @@ -11,6 +11,8 @@ density = 0 pressure_resistance = 5*ONE_ATMOSPHERE level = 2 + obj_integrity = 200 + max_integrity = 200 var/ptype = 0 var/dpdir = 0 // directions as disposalpipe diff --git a/code/modules/recycling/disposal-structures.dm b/code/modules/recycling/disposal-structures.dm index 528b8dce387..0389b87fd99 100644 --- a/code/modules/recycling/disposal-structures.dm +++ b/code/modules/recycling/disposal-structures.dm @@ -6,6 +6,7 @@ /obj/structure/disposalholder invisibility = INVISIBILITY_MAXIMUM + resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF var/datum/gas_mixture/gas = null // gas used to flush, will appear at exit point var/active = 0 // true if the holder is moving, otherwise inactive dir = 0 @@ -123,6 +124,8 @@ /obj/structure/disposalholder/allow_drop() return 1 + + // Disposal pipes /obj/structure/disposalpipe @@ -135,7 +138,9 @@ level = 1 // underfloor only var/dpdir = 0 // bitmask of pipe directions dir = 0// dir will contain dominant direction for junction pipes - var/health = 10 // health points 0-10 + obj_integrity = 200 + max_integrity = 200 + armor = list(melee = 25, bullet = 10, laser = 10, energy = 100, bomb = 0, bio = 100, rad = 100, fire = 90, acid = 30) layer = DISPOSAL_PIPE_LAYER // slightly lower than wires and other pipes var/base_icon_state // initial icon state on map var/obj/structure/disposalconstruct/stored @@ -178,22 +183,9 @@ /obj/structure/disposalpipe/Destroy() var/obj/structure/disposalholder/H = locate() in src if(H) - // holder was present H.active = 0 var/turf/T = src.loc - if(T.density) - // deleting pipe is inside a dense turf (wall) - // this is unlikely, but just dump out everything into the turf in case - - for(var/atom/movable/AM in H) - AM.forceMove(src.loc) - AM.pipe_eject(0) - qdel(H) - return ..() - - // otherwise, do normal expel from turf - else - expel(H, T, 0) + expel(H, T, 0) return ..() // returns the direction of the next pipe object, given the entrance dir @@ -255,12 +247,14 @@ /obj/structure/disposalpipe/proc/expel(obj/structure/disposalholder/H, turf/T, direction) var/turf/target + var/eject_range = 5 + var/turf/open/floor/floorturf if(isfloorturf(T)) //intact floor, pop the tile - var/turf/open/floor/myturf = T - if(myturf.floor_tile) - PoolOrNew(myturf.floor_tile, T) - myturf.make_plating() + floorturf = T + if(floorturf.floor_tile) + PoolOrNew(floorturf.floor_tile, T) + floorturf.make_plating() if(direction) // direction is specified if(isspaceturf(T)) // if ended in space, then range is unlimited @@ -268,59 +262,19 @@ else // otherwise limit to 10 tiles target = get_ranged_target_turf(T, direction, 10) - playsound(src, 'sound/machines/hiss.ogg', 50, 0, 0) - if(H) - for(var/atom/movable/AM in H) - AM.forceMove(src.loc) - AM.pipe_eject(direction) - AM.throw_at_fast(target, 10, 1) + eject_range = 10 - else // no specified direction, so throw in random direction + else if(floorturf) + target = get_offset_target_turf(T, rand(5)-rand(5), rand(5)-rand(5)) - playsound(src, 'sound/machines/hiss.ogg', 50, 0, 0) - if(H) - for(var/atom/movable/AM in H) - target = get_offset_target_turf(T, rand(5)-rand(5), rand(5)-rand(5)) - AM.forceMove(src.loc) - AM.pipe_eject(0) - AM.throw_at_fast(target, 5, 1) + playsound(src, 'sound/machines/hiss.ogg', 50, 0, 0) + for(var/atom/movable/AM in H) + AM.forceMove(src.loc) + AM.pipe_eject(direction) + if(target) + AM.throw_at_fast(target, eject_range, 1) H.vent_gas(T) qdel(H) - return - -// call to break the pipe -// will expel any holder inside at the time -// then delete the pipe -// remains : set to leave broken pipe pieces in place -/obj/structure/disposalpipe/proc/broken(remains = 0) - if(remains) - for(var/D in cardinal) - if(D & dpdir) - var/obj/structure/disposalpipe/broken/P = new(src.loc) - P.setDir(D) - - src.invisibility = INVISIBILITY_MAXIMUM // make invisible (since we won't delete the pipe immediately) - var/obj/structure/disposalholder/H = locate() in src - if(H) - // holder was present - H.active = 0 - var/turf/T = src.loc - if(T.density) - // broken pipe is inside a dense turf (wall) - // this is unlikely, but just dump out everything into the turf in case - - for(var/atom/movable/AM in H) - AM.forceMove(src.loc) - AM.pipe_eject(0) - qdel(H) - return - - // otherwise, do normal expel from turf - if(H) - expel(H, T, 0) - - spawn(2) // delete pipe after 2 ticks to ensure expel proc finished - qdel(src) // pipe affected by explosion @@ -330,28 +284,20 @@ var/obj/structure/disposalholder/H = locate() in src if(H) H.contents_explosion(severity, target) - - switch(severity) - if(1) - broken(0) - return - if(2) - health -= rand(5,15) - healthcheck() - return - if(3) - health -= rand(0,15) - healthcheck() - return + ..() -// test health for brokenness -/obj/structure/disposalpipe/proc/healthcheck() - if(health < -2) - broken(0) - else if(health<1) - broken(1) - return +/obj/structure/disposalpipe/run_obj_armor(damage_amount, damage_type, damage_flag = 0, attack_dir) + if(damage_flag == "melee" && damage_amount < 10) + return 0 + . = ..() + +/obj/structure/disposalpipe/fire_act(exposed_temperature, exposed_volume) + var/turf/T = src.loc + if(T && T.intact) //protected from fire when hidden behind a floor. + return + ..() + //attack by item //weldingtool: unfasten and convert to obj/disposalconstruct @@ -370,7 +316,7 @@ // check if anything changed over 2 seconds if(do_after(user,30, target = src)) if(!src || !W.isOn()) return - Deconstruct() + deconstruct() user << "You slice the disposal pipe." else return ..() @@ -380,20 +326,28 @@ . = 1 // called when pipe is cut with welder -/obj/structure/disposalpipe/Deconstruct() - if(stored) - var/turf/T = loc - stored.loc = T - transfer_fingerprints_to(stored) - stored.setDir(dir) - stored.density = 0 - stored.anchored = 1 - stored.update_icon() - ..() +/obj/structure/disposalpipe/deconstruct(disassembled = TRUE) + if(!(flags & NODECONSTRUCT)) + if(disassembled) + if(stored) + var/turf/T = loc + stored.loc = T + transfer_fingerprints_to(stored) + stored.setDir(dir) + stored.density = 0 + stored.anchored = 1 + stored.update_icon() + else + for(var/D in cardinal) + if(D & dpdir) + var/obj/structure/disposalpipe/broken/P = new(src.loc) + P.setDir(D) + qdel(src) + /obj/structure/disposalpipe/singularity_pull(S, current_size) if(current_size >= STAGE_FIVE) - Deconstruct() + deconstruct() // *** TEST verb //client/verb/dispstop() @@ -679,11 +633,10 @@ /obj/structure/disposalpipe/broken/New() ..() update() - return // the disposal outlet machine -/obj/structure/disposalpipe/broken/Deconstruct() +/obj/structure/disposalpipe/broken/deconstruct() qdel(src) /obj/structure/disposaloutlet diff --git a/code/modules/recycling/disposal-unit.dm b/code/modules/recycling/disposal-unit.dm index d185fa41adc..f2952257970 100644 --- a/code/modules/recycling/disposal-unit.dm +++ b/code/modules/recycling/disposal-unit.dm @@ -8,6 +8,9 @@ anchored = 1 density = 1 on_blueprints = TRUE + armor = list(melee = 25, bullet = 10, laser = 10, energy = 100, bomb = 0, bio = 100, rad = 100, fire = 90, acid = 30) + obj_integrity = 200 + max_integrity = 200 var/datum/gas_mixture/air_contents // internal reservoir var/mode = 1 // mode -1=screws removed 0=off 1=charging 2=charged var/flush = 0 // true if flush handle is pulled @@ -54,7 +57,7 @@ /obj/machinery/disposal/singularity_pull(S, current_size) if(current_size >= STAGE_FIVE) - Deconstruct() + deconstruct() /obj/machinery/disposal/initialize() // this will get a copy of the air turf and take a SEND PRESSURE amount of air from it @@ -91,7 +94,7 @@ if(!W.isOn()) return user << "You slice the floorweld off \the [src]." - Deconstruct() + deconstruct() return if(user.a_intent != "harm") @@ -195,14 +198,6 @@ */ interact(user, 0) -// hostile mob escape from disposals -/obj/machinery/disposal/attack_animal(mob/living/simple_animal/M) - if(M.environment_smash) - M.do_attack_animation(src) - visible_message("[M.name] smashes \the [src] apart!") - qdel(src) - return - // eject the contents of the disposal unit /obj/machinery/disposal/proc/eject() var/turf/T = get_turf(src) @@ -265,14 +260,15 @@ H.vent_gas(loc) qdel(H) -/obj/machinery/disposal/Deconstruct() - if(stored) - var/turf/T = loc - stored.loc = T - src.transfer_fingerprints_to(stored) - stored.anchored = 0 - stored.density = 1 - stored.update_icon() +/obj/machinery/disposal/deconstruct() + if(!(flags & NODECONSTRUCT)) + if(stored) + var/turf/T = loc + stored.loc = T + src.transfer_fingerprints_to(stored) + stored.anchored = 0 + stored.density = 1 + stored.update_icon() ..() //How disposal handles getting a storage dump from a storage object diff --git a/code/modules/research/rdmachines.dm b/code/modules/research/rdmachines.dm index 339d468a7df..156de6e3c46 100644 --- a/code/modules/research/rdmachines.dm +++ b/code/modules/research/rdmachines.dm @@ -107,5 +107,5 @@ //we eject the loaded item when deconstructing the machine /obj/machinery/r_n_d/on_deconstruction() if(loaded_item) - loaded_item.loc = loc + loaded_item.forceMove(loc) ..() diff --git a/code/modules/research/server.dm b/code/modules/research/server.dm index 7545803b9e0..cfc64d6ab01 100644 --- a/code/modules/research/server.dm +++ b/code/modules/research/server.dm @@ -3,7 +3,7 @@ icon = 'icons/obj/machines/research.dmi' icon_state = "server" var/datum/research/files - var/health = 100 + var/heat_health = 100 var/list/id_with_upload = list() //List of R&D consoles with upload to server access. var/list/id_with_download = list() //List of R&D consoles with download from server access. var/id_with_upload_string = "" //String versions for easy editing in map editor. @@ -56,12 +56,12 @@ var/datum/gas_mixture/environment = loc.return_air() switch(environment.temperature) if(0 to T0C) - health = min(100, health + 1) + heat_health = min(100, heat_health + 1) if(T0C to (T20C + 20)) - health = Clamp(health, 0, 100) + heat_health = Clamp(heat_health, 0, 100) if((T20C + 20) to (T0C + 70)) - health = max(0, health - 1) - if(health <= 0) + heat_health = max(0, heat_health - 1) + if(heat_health <= 0) /*griefProtection() This seems to get called twice before running any code that deletes/damages the server or it's files anwyay. refreshParts and the hasReq procs that get called by this are laggy and do not need to be called by every server on the map every tick */ var/updateRD = 0 @@ -84,18 +84,10 @@ griefProtection() ..() - /obj/machinery/r_n_d/server/ex_act(severity, target) griefProtection() ..() - -/obj/machinery/r_n_d/server/blob_act(obj/structure/blob/B) - griefProtection() - ..() - - - //Backup files to centcom to help admins recover data after greifer attacks /obj/machinery/r_n_d/server/proc/griefProtection() for(var/obj/machinery/r_n_d/server/centcom/C in machines) diff --git a/code/modules/research/xenobiology/xenobiology.dm b/code/modules/research/xenobiology/xenobiology.dm index 89e662e3c05..078f20f0afc 100644 --- a/code/modules/research/xenobiology/xenobiology.dm +++ b/code/modules/research/xenobiology/xenobiology.dm @@ -418,7 +418,7 @@ item_state = "golem" item_color = "golem" flags = ABSTRACT | NODROP - resistance_flags = LAVA_PROOF | FIRE_PROOF | UNACIDABLE + resistance_flags = LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF has_sensor = 0 /obj/item/clothing/suit/golem @@ -431,7 +431,7 @@ permeability_coefficient = 0.50 body_parts_covered = FULL_BODY flags_inv = HIDEGLOVES | HIDESHOES | HIDEJUMPSUIT - resistance_flags = LAVA_PROOF | FIRE_PROOF | UNACIDABLE + resistance_flags = LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF flags = ABSTRACT | NODROP /obj/item/clothing/shoes/golem @@ -439,7 +439,7 @@ desc = "sturdy adamantine feet" icon_state = "golem" item_state = null - resistance_flags = LAVA_PROOF | FIRE_PROOF | UNACIDABLE + resistance_flags = LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF flags = NOSLIP | ABSTRACT | NODROP @@ -449,7 +449,7 @@ icon_state = "golem" item_state = "golem" siemens_coefficient = 0 - resistance_flags = LAVA_PROOF | FIRE_PROOF | UNACIDABLE + resistance_flags = LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF flags = ABSTRACT | NODROP @@ -460,7 +460,7 @@ item_state = null siemens_coefficient = 0 flags = ABSTRACT | NODROP - resistance_flags = LAVA_PROOF | FIRE_PROOF | UNACIDABLE + resistance_flags = LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF /obj/item/clothing/head/space/golem @@ -469,7 +469,7 @@ item_color = "dermal" name = "golem's head" desc = "a golem's head" - resistance_flags = LAVA_PROOF | FIRE_PROOF | UNACIDABLE + resistance_flags = LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF flags = ABSTRACT | NODROP /obj/effect/golemrune @@ -478,7 +478,7 @@ name = "rune" icon = 'icons/obj/rune.dmi' icon_state = "golem" - resistance_flags = LAVA_PROOF | FIRE_PROOF | UNACIDABLE + resistance_flags = LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF layer = TURF_LAYER /obj/effect/golemrune/New() diff --git a/code/modules/ruins/objects_and_mobs/necropolis_gate.dm b/code/modules/ruins/objects_and_mobs/necropolis_gate.dm index 71ee2153806..96dc4c28bea 100644 --- a/code/modules/ruins/objects_and_mobs/necropolis_gate.dm +++ b/code/modules/ruins/objects_and_mobs/necropolis_gate.dm @@ -10,7 +10,7 @@ bound_width = 96 bound_height = 96 pixel_x = -32 - resistance_flags = LAVA_PROOF | FIRE_PROOF | ACID_PROOF + resistance_flags = LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF luminosity = 1 var/boss = FALSE var/is_anyone_home = FALSE diff --git a/code/modules/security_levels/keycard_authentication.dm b/code/modules/security_levels/keycard_authentication.dm index 34be79ef84d..9a90b43541e 100644 --- a/code/modules/security_levels/keycard_authentication.dm +++ b/code/modules/security_levels/keycard_authentication.dm @@ -11,6 +11,7 @@ var/datum/events/keycard_events = new() active_power_usage = 6 power_channel = ENVIRON req_access = list(access_keycard_auth) + resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF var/datum/event/ev var/event = "" var/obj/machinery/keycard_auth/event_source diff --git a/code/modules/shuttle/ferry.dm b/code/modules/shuttle/ferry.dm index eb64c406645..0ebc8ef0436 100644 --- a/code/modules/shuttle/ferry.dm +++ b/code/modules/shuttle/ferry.dm @@ -12,6 +12,7 @@ var/cooldown = 600 possible_destinations = "ferry_home" admin_controlled = 1 + resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ACID_PROOF /obj/machinery/computer/shuttle/ferry/request/Topic(href, href_list) ..() diff --git a/code/modules/shuttle/shuttle.dm b/code/modules/shuttle/shuttle.dm index 208672cc81e..770a1673ac2 100644 --- a/code/modules/shuttle/shuttle.dm +++ b/code/modules/shuttle/shuttle.dm @@ -8,7 +8,7 @@ //icon = 'icons/dirsquare.dmi' icon_state = "pinonfar" - resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE + resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF anchored = 1 var/id @@ -29,12 +29,16 @@ else return QDEL_HINT_LETMELIVE +/obj/docking_port/take_damage() + return + /obj/docking_port/singularity_pull() return /obj/docking_port/singularity_act() return 0 /obj/docking_port/shuttleRotate() return //we don't rotate with shuttles via this code. + //returns a list(x0,y0, x1,y1) where points 0 and 1 are bounding corners of the projected rectangle /obj/docking_port/proc/return_coords(_x, _y, _dir) if(_dir == null) diff --git a/code/modules/shuttle/special.dm b/code/modules/shuttle/special.dm index f018168952c..37e44407dd0 100644 --- a/code/modules/shuttle/special.dm +++ b/code/modules/shuttle/special.dm @@ -57,7 +57,8 @@ name = "wabbajack altar" desc = "Whether you're sleeping or waking, it's going to be \ quite chaotic." - health = 1000 + obj_integrity = 1000 + max_integrity = 1000 verb_say = "chants" var/obj/machinery/power/emitter/energycannon/magical/our_statue var/list/mob/living/sleepers = list() @@ -187,7 +188,8 @@ /obj/structure/table/wood/bar resistance_flags = LAVA_PROOF | FIRE_PROOF | ACID_PROOF flags = NODECONSTRUCT - health = 1000 + obj_integrity = 1000 + max_integrity = 1000 var/boot_dir = 1 /obj/structure/table/wood/bar/Crossed(atom/movable/AM) diff --git a/code/modules/shuttle/syndicate.dm b/code/modules/shuttle/syndicate.dm index 8d993a45c49..c835013866a 100644 --- a/code/modules/shuttle/syndicate.dm +++ b/code/modules/shuttle/syndicate.dm @@ -8,6 +8,7 @@ req_access = list(access_syndicate) shuttleId = "syndicate" possible_destinations = "syndicate_away;syndicate_z5;syndicate_ne;syndicate_nw;syndicate_n;syndicate_se;syndicate_sw;syndicate_s" + resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ACID_PROOF /obj/machinery/computer/shuttle/syndicate/recall name = "syndicate shuttle recall terminal" diff --git a/code/modules/spells/spell_types/ethereal_jaunt.dm b/code/modules/spells/spell_types/ethereal_jaunt.dm index 5aba7f5b5c3..bd91b8ff347 100644 --- a/code/modules/spells/spell_types/ethereal_jaunt.dm +++ b/code/modules/spells/spell_types/ethereal_jaunt.dm @@ -78,7 +78,7 @@ density = 0 anchored = 1 invisibility = 60 - resistance_flags = LAVA_PROOF | FIRE_PROOF | UNACIDABLE + resistance_flags = LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF /obj/effect/dummy/spell_jaunt/Destroy() // Eject contents if deleted somehow diff --git a/code/modules/surgery/bodyparts/bodyparts.dm b/code/modules/surgery/bodyparts/bodyparts.dm index eb490cffc5a..a2acadb0f93 100644 --- a/code/modules/surgery/bodyparts/bodyparts.dm +++ b/code/modules/surgery/bodyparts/bodyparts.dm @@ -104,7 +104,7 @@ //Applies brute and burn damage to the organ. Returns 1 if the damage-icon states changed at all. //Damage will not exceed max_damage using this proc //Cannot apply negative damage -/obj/item/bodypart/proc/take_damage(brute, burn, updating_health = 1) +/obj/item/bodypart/proc/receive_damage(brute, burn, updating_health = 1) if(owner && (owner.status_flags & GODMODE)) return 0 //godmode brute = max(brute * config.damage_multiplier,0) @@ -345,6 +345,11 @@ return standing + +/obj/item/bodypart/deconstruct(disassembled = TRUE) + drop_organs() + qdel(src) + /obj/item/bodypart/chest name = "chest" desc = "It's impolite to stare at a person's chest." diff --git a/code/modules/surgery/bodyparts/dismemberment.dm b/code/modules/surgery/bodyparts/dismemberment.dm index 7c153342226..fa648d9bd26 100644 --- a/code/modules/surgery/bodyparts/dismemberment.dm +++ b/code/modules/surgery/bodyparts/dismemberment.dm @@ -16,7 +16,7 @@ return 0 var/obj/item/bodypart/affecting = C.get_bodypart("chest") - affecting.take_damage(Clamp(brute_dam/2, 15, 50), Clamp(burn_dam/2, 0, 50)) //Damage the chest based on limb's existing damage + affecting.receive_damage(Clamp(brute_dam/2, 15, 50), Clamp(burn_dam/2, 0, 50)) //Damage the chest based on limb's existing damage C.visible_message("[C]'s [src.name] has been violently dismembered!") C.emote("scream") drop_limb() diff --git a/code/modules/surgery/bodyparts/head.dm b/code/modules/surgery/bodyparts/head.dm index c3d86b5d4a2..067788acfcf 100644 --- a/code/modules/surgery/bodyparts/head.dm +++ b/code/modules/surgery/bodyparts/head.dm @@ -174,10 +174,6 @@ return standing -/obj/item/bodypart/head/burn() - drop_organs() - ..() - /obj/item/bodypart/head/monkey icon = 'icons/mob/animal_parts.dmi' icon_state = "default_monkey_head" diff --git a/code/modules/surgery/organs/augments_arms.dm b/code/modules/surgery/organs/augments_arms.dm index c07e5208bef..2bbcb36fcc6 100644 --- a/code/modules/surgery/organs/augments_arms.dm +++ b/code/modules/surgery/organs/augments_arms.dm @@ -73,7 +73,7 @@ F.SetLuminosity(0) owner.unEquip(holder, 1) - holder.loc = src + holder.forceMove(src) holder = null playsound(get_turf(owner), 'sound/mecha/mechmove03.ogg', 50, 1) @@ -84,7 +84,7 @@ holder = item holder.flags |= NODROP - holder.resistance_flags |= LAVA_PROOF | UNACIDABLE + holder.resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF holder.slot_flags = null holder.w_class = 5 holder.materials = null @@ -158,7 +158,8 @@ origin_tech = "materials=4;combat=4;biotech=4;powerstorage=4;syndicate=3" holder = /obj/item/weapon/gun/energy/laser/mounted -/obj/item/organ/cyberimp/arm/gun/laser/l/zone = "l_arm" +/obj/item/organ/cyberimp/arm/gun/laser/l + zone = "l_arm" /obj/item/organ/cyberimp/arm/gun/taser @@ -168,7 +169,8 @@ origin_tech = "materials=5;combat=5;biotech=4;powerstorage=4" holder = /obj/item/weapon/gun/energy/gun/advtaser/mounted -/obj/item/organ/cyberimp/arm/gun/taser/l/zone = "l_arm" +/obj/item/organ/cyberimp/arm/gun/taser/l + zone = "l_arm" /obj/item/organ/cyberimp/arm/toolset @@ -178,7 +180,8 @@ contents = newlist(/obj/item/weapon/screwdriver/cyborg, /obj/item/weapon/wrench/cyborg, /obj/item/weapon/weldingtool/largetank/cyborg, /obj/item/weapon/crowbar/cyborg, /obj/item/weapon/wirecutters/cyborg, /obj/item/device/multitool/cyborg) -/obj/item/organ/cyberimp/arm/toolset/l/zone = "l_arm" +/obj/item/organ/cyberimp/arm/toolset/l + zone = "l_arm" /obj/item/organ/cyberimp/arm/toolset/emag_act() if(!(locate(/obj/item/weapon/kitchen/knife/combat/cyborg) in items_list)) diff --git a/code/modules/vehicles/pimpin_ride.dm b/code/modules/vehicles/pimpin_ride.dm index 4e001cb1680..4058a763519 100644 --- a/code/modules/vehicles/pimpin_ride.dm +++ b/code/modules/vehicles/pimpin_ride.dm @@ -7,6 +7,11 @@ var/obj/item/weapon/storage/bag/trash/mybag = null var/floorbuffer = 0 +/obj/vehicle/janicart/Destroy() + if(mybag) + qdel(mybag) + mybag = null + return ..() /obj/vehicle/janicart/handle_vehicle_offsets() ..() diff --git a/code/modules/vehicles/vehicle.dm b/code/modules/vehicles/vehicle.dm index f21275b6fce..be42e5ef8d9 100644 --- a/code/modules/vehicles/vehicle.dm +++ b/code/modules/vehicles/vehicle.dm @@ -8,6 +8,9 @@ anchored = 0 can_buckle = 1 buckle_lying = 0 + obj_integrity = 300 + max_integrity = 300 + armor = list(melee = 30, bullet = 30, laser = 30, energy = 0, bomb = 30, bio = 0, rad = 0, fire = 60, acid = 60) var/keytype = null //item typepath, if non-null an item of this type is needed in your hands to drive this vehicle var/next_vehicle_move = 0 //used for move delays var/vehicle_move_delay = 2 //tick delay between movements, lower = faster, higher = slower @@ -144,3 +147,28 @@ /obj/vehicle/space/Process_Spacemove(direction) return 1 + +/obj/vehicle/run_obj_armor(damage_amount, damage_type, damage_flag = 0, attack_dir) + if(damage_flag == "melee" && damage_amount < 20) + return 0 + . = ..() + +/obj/vehicle/deconstruct(disassembled = TRUE) + new /obj/item/stack/sheet/metal (loc, 5) + qdel(src) + +/obj/vehicle/examine(mob/user) + ..() + if(!(resistance_flags & INDESTRUCTIBLE)) + if(resistance_flags & ON_FIRE) + user << "It's on fire!" + var/healthpercent = (obj_integrity/max_integrity) * 100 + switch(healthpercent) + if(100 to INFINITY) + user << "It seems pristine and undamaged." + if(50 to 100) + user << "It looks slightly damaged." + if(25 to 50) + user << "It appears heavily damaged." + if(0 to 25) + user << "It's falling apart!" \ No newline at end of file diff --git a/icons/effects/blood.dmi b/icons/effects/blood.dmi index 5e71e45d4bf7a70206b2f7deeca90de9530ed9e2..c29eb7d616f4768c9a8f28a2ba6bd33000d542ec 100644 GIT binary patch literal 112432 zcmZ^JWmpx_8t%{`-Q5T%jdYiE3rcr)cW+v{I}}h5P`Xn>iA_pNv+3@<<2mO(_t*Ww zW@63ET3^23`>hytRXI#_GIRg{FcsuwGywoU1pG5WMFy{s#Y`51Cue@|K6uDjx|_S% zx_H<+I{|=CUV0YPX^|6S0QyUdkq0kS`i11Vu_%_#rXb_`2 zT_N^{{OjI%TaLW^%iehf=%g!4iA}UDL40j=Nhp!Vn?H9)aSZ+@V!OUbZ7pHTQU~1W zYs^H4-1%!egg=g4JQ6>x(7vhd`y6|~Sxnc)lg+ODlDS#BM-;IvC1&cwqWfM$ktpcvrQegRL<{?zq?U4k^o9UVm$5YlW@1N6tr-=K{|1&PAfs6?;rL zNidMZdzxKv0288?T#vq>zcC{3=!&q*ht)J9o;@#UDTRCYPRHAYsOg@HHap^~u^B~P z({45ax4fmv828Zsy}*W!0>J3yuSN2FPa(a9S>@UcGn&l)Nj=w+rK6**QCK}?>}jLM z(eZE=9WV*^S^T}EBJu$Po@5jbgND_y^aveqp3yiev2uy z_qNI51p--Vn$E?MaFF$JO6Dl6m}cdWhVj~BYwzFWR9Nd4yBwhBJcq4R+wN{J1(DW% z>!v-?EAJj6t(|C-Bd+CQEIyZrLZ4@<_t6Ve&(+FlrbkLVg0d#p!(47okR^R+Q?JO) ziApm$Y8Uyf7RKn>0ykI{IiU5F$n>OyVJ5eK*1nGr$mUcP-YfUONxZ&O5kL(}#k7bZ z%+MvPKPpVY(>JGVN)X#%le*f5qmg-5UqbC#b*19MQSCD*3ni)t_G-#Z<)I zhPw#Y)tHkzN;`MQbuRIsgG`t$sls>%-yFv3R8&x>eJ172`BRxXBSd4YolXPAZr7X* zMpxwFyPiMvz!ERBb=3Q6cPpt-Q8`inC;!`@>e~uGnxXS%&DqDI3;D8x+=uU(ejR%( zhY$?(vxlSCp7~*upKN&*<@alR3Zh$sTvf!nh##YUaFup%4r;uyHD2aZsBlI#iT=EcK zac!3l)sc~t>`0`pvNuQuN_KH@;F@j)Os=K9txj71SzJ|`U&pW^#r2+3<>fK2bktvk z5b^}u1w9UEFzw!5Q#L^`*L`7|fYX&z<%}_p$4)P=H7j8S72 zW-0y9g68YcLQ|i^7%Le3mvPJL`gAT@7|f*&yHy_ZRyB$a8tPTq zCVJQEiI2XYk!B1T9dtDVU*q{)@^FvwV zVybWp5uzE3`B`)~N(We;EJE&bzw|=Qds0Vypb3TuyC`oxX%{Jy`%UqdR~4Mmxx?$Bu$V1K)5V*+@AVGnxX{y)VPLR;=(V=#yQ@X@b93 zcQxwZ5H-!#KOsTd|A&VKyF$pIUKKLWAIyVZaQcki2hfN6f&%#rp3p;TKwRb zS8LyN^6~TFFImWD669>y(I?$UwNL% zzJdi<7BD=zDASxIA|84u(@1P9Olq0Khw_g>oIkQkMI)r$DKCmj?l!V6WJ-QDTR1{i zd|hkx3}0rDVVhl&$31P#J}l0ml_qZ0^Yr{$E3J#cCb&dd<0;Md9s__RW$V~)zAk|J zCv8MxXc3?=KQiQAC6_TSHOJxnF2;$ZL{davN8e|aBHKo~nrqX5D|b4~!PiUQA6j1M z(sGh#dMK+V;QO6i8lQjDy1G5Y+gX)kG$Z7;@uMoa6SagA%a|gx`JAX#SDd(i1wPl2 z5NOUH^M|HkJC&bvHBI@JF7CF^*}T5=>p}!xK5-9cNvu+zGsM7mizxVs^#r|qVn<}Y z3{7%%lJZL*c5C|<+w~<73G!hHaV6o02Jd*y|82DnCo$5ZR{_L7iNx6AV{VH?o z*Xo@zd+O)M80AH={3?si(%jn=8DJHy zt1B>T62uYrUA3mOMN3X{Evzqg1&Co0%=_IRUf;CY7uC1C5KzeSd#ld z3mQip{uVX#efh;r0##;#*W|fNYn~G$V*t+CGSCSOwR#8yy(Brj#zqR!thuKDGNMKABRveEd+2# zzhic&{=z^8e!X%L471xntMFY#C7yVNz_-RgC=`{(8hiX+ILhwV8(8?3w^g06;Psn;Tm9wPvapz9Clt&veFin`P*&stH!A5S5{-V)!|nK zE32!%wJHRU?}0l9jf13`3PyI7HhV5;a6^R(IjO{LK-^Y~#{vq#Pdf`c3HYL{y-ceZ z;ih|p4b&l-X7#%I6QlQ5b8F{gNvX0-r1GKaYJoZjudzpLT#XSyOaV|ukJ4%AmKA$r zYqv?cN&7t8(ir{>Qj)es${Gol3p#Ya3HnhK^;tz)P!UBjn8|FMP@AI>GQW!`QQr6# ze|iYM>6^pG(^Zj>!VP}Vc$Y1GH^SX?5Q3mnk4_c7LJ8khg1=1md37vi%~)DO&?l&c z)ioKu?AIz)OhQkrDM-ITJhX@Cq9agAMe2FgU6G zCa_fdI;*b)hy&AhdgF&4jeH3lmwtnpEWaPQf_aQc8mIU3i8w-d6h;Q#rY?Wu0@c&6 zb%zZ=&(i+l(psQV$9x1%)Bydu-QoFe(pD6GxQEn4nYS{iy1iO{azqZ?>=M5%Z<)4g zMHXpMrx1vSlTE4ApjRT$MbAfaF(&I)Eu78*+1)wLQYZnWPZ9Hb&5~2_4}?-G9PXEF zsyN(V5K5oi+C)DfwCmttQKMD~dfovUTR-OeI!B%~%V`1;%1oGbIo>Ek=-)dtO zz#3!LTVDg*`UJvTm3HH$wuVIK50ToA3qG!JLB#yTszBAJB3^evO#9=%3@X*kQ5Uj_e5Mv6ma} z&h|)pI6G3eD!_#pl{swG&gAB(N!qI_GQ%yb|2f+t4wQ($ch~G2jYrsDeb4 zyjc*(=Ne-v+!nafkP{J#r?Z9Qqb4 zcrHU>o6|x_Jv?!fe@zuRUZX}SV4gU(EI(Cx%zrFja(dPVPbCGEd(({gz#*!VCnth} z4PJ)VO)y`fkqyaiv#((KgOP(+i172KIr+E-ptA`WcFNZHk5&e=?){06Hl1Lx#mxq) z&O%y6_CyUnXcGbwXxUMt(blDWu(qpFM5pt4GfyB#8-)K|vKSR9A_4VGp^Tc8i z+!9}LR1vXmVNHY*LpmhFPuhqjjKCo27&_XhxZd1h8SD03o^p{ta(=`u+ag{a4C9ua zpGw*1l!@p1*)neB9}REZRHt`6YnRgnqBbPH-0?9x&kVl~Ih8RlHIEXgKEEth zR|6yMO;(wTeQCutSY@d4=3E6bRW_J+R(PSE1w_5}q%87yXd)Wke^olmTykTWUGmV3 zbXAic-t);z>Wl+3Dl;VMhw`|kzJAV* za*+@3_U;Sw-ERU$wo1nqG#1vUo4k= zm2BnCOO*SX-}oEhYdYNG;AYCpn)rFmQ)|?&#T_EEcE3-%>)60=f-OP-^F`vI%-ksw z-(tlFspxGlA*OT4G%|fM{DuICooYbr)Kt0-{cc;Z^3rXoeIn?&QBP%GuZ-ERg*EQ* zn+~OfQ46aY|K+cWo7b6J*HAfqE2qo*M2#Y*5I7;)I`dv@(U28f#bc3A=M!T%^X(|^ zj*U8yNnyALtZu)$6AR8s6=s5pi<1ZPDw$Iy8a>CJe%C6n#1XZR#B!7lF&%tURh0?L zFRAvI-1PxY^jOtU*fL^@)ptgT7HUxSSO?pQl&FA^Nz#&Pn7{8|Pq5I#?bZg1tG~-S z_SJD4>|lh)25WPT_MyJ>Cw1nuM#NH0#mZ$>>qS&rdUpa#+CkU0>qseI;<)w30PQMN z_e|8NP2$HDS-XJDDUT6AVXr6nKNT9>5oqM?z%LMehE*}QlEezc>=|Nih` z2KE@s+0ky!cxxU=k{kH_=#K2@QQVqXgu#OQtOs zg1A9eM#<^yUM}CcabzU*^F7=HWj7<>C4>44#$t$C6bA1JBK~jbQUdzXva)qv*kBD% zh??}GC|7kzrRna`+5(SnqxX|R#xsRJ+IFd(%Do{|<>hjKwx}jN#+mC9w*LNIwDP@6 z8Z3AxTIP=vT*9A)LtlSs+G2GaEFxt1mIg2XHZTq(Dct8$BkfqnT4tv=(R0hfPk^h z&_D+y$lFs?&NeV)+djxIs%*-WR???Ib&3I)3*q}27rlzah8m(wv^t9_MG@io5xJfg zf)oDNCNe;tl7_?-=ypaT);&YR9%f*$>UGXPryIqy|&L2V%N|@6T!==Oq8`v=r-@a4O zR4wZ_ZehKi-rM({7j&Y|;P58WuOjEbiui*)aoN{T;qCa+F_&e#**Wwn6SHb8 z1{{d2ASx?{lnZ*2-t79#6dvn+<0og;8a92pmbA7OF%7NVs11Uj zAvyHH?(%3VZ^}8qx$#_b$pKTei06oFliae|+LgA@!AL9qf$b;5pw>=XGqo1hRLvUi zsEJiCA-T(IKOU{%S4g$2A;}!5($Hy6&X5U!6GY3%CGa+&08d2}e*4LsInaXgEMSNy z!$%Dm`ANN@JRSp!Qw(KSO~4=2uc9rd`M6WQKl?3KhMlAI&7p#~l_HDi_g8qN(`vIw zx7R45^K9AYyIQR?ze`rBP3Ux*CJBUPCAm5Z8w%`B(6uyDa65 zigfLVFpqJdA@|)?kfvs5*`ih?g5!sC_5#Ft8l3ZL%R zSSsF{4dy0Z^u!#*YLH%zMU^@XiS9t@t;hGIZi58vBZL%H+|mbZ7Uf6>ioh2OO>0QW z|Hc(DA2Yh1dk_V7mLV^=I})$ z$Dl3)bJ5Cd7K4V2RQ3vy6EJX6ZRWa9u^m8!e_?*CwZ4#PF&tHw?y!X5RY+=`A{IO8 z+sSZ9O^Vun16e7=FRT9!A`Bl+=<)B!#~zUt5TtrTSUPslx{OIlQI|N4Q`!RwWJe+& zRYjng@U5vEoPX^wg^|`W9MDVv=F*F5?c|}YM~_Fca+)RXf42m&N<;p}!1N7BZlyNT z*5);|(|c48XVOdh&c2l;-?n*~4`x)&1^vok^M0T%P0sypd|EsQr9Trz@-4w4E_{b^ z*V>`~6;C~|_)nf%@6os+P^$8w$w`&f%v$DTI|=WOQj<6|hAv`z$T%l5oIgiau9Idd zcPqz(i47S9o9rm61Z88$kpMCo;s+f>mye>Z@D~OwuYa0wj+u56^iy&VvT36E7QYcf zSp-cD`(W#KWBz+rCXDSi>;yH0y)?v-ag#oK11o?fHn7gLE3ss5TS?Qzf`;<~txH^7 z*|yCA-2@;RIdA)Yc$L_f*681R3so?2mzInnI9jbUB;>$$;y3T%8#7?7dA@?$&|9vMOIzoT)y(v7T5L{9$Tv z{(7df!_{s*`iF;{626r3>)-$aCLuf`=on4UO{AOdcC8`F{J&C@2uXB5L%t!i%&Zjj{@2UC+R~nb7VKhZ`49n(>v2{a`jNZQL}fTCG>Yo`EZ? zCMT7zB;^A;wRvte2|Tkm9$wMrDt@9@8~eA;x#9D{bEGvmU`$g&3vHgkJ?~jbV`MMI z0fs;Uyt{T*uQ znwqav)}RB+hYM1-*NgBs%JUYSB*e^zyj2i*KCE##ig;e<`lvq9_ezt6b!&Zg3OQ!j zQTiJ{qm`l&n2}fydD-Zdf^$eIFsNMjTJ6d&@YGuyC4u`#($@ebbSCJz=3A>+hq5*Y ze5w6mn$h~Sr>6^N)~Rn2jC@IXvLHZfV!>3qzSqxrdHwkQieoO&6$Uv+dnIq|#J{WL zmHhWMXwG1U<}fkb`)DIlj|l-0@N-zH_HKs+^Ip?!)oG8-f9j+WWx$bA*61ZBcmL96 zi&gZ4l4CEY*YU?U6Pj1ZS}HFUAd9;J-#~19Q~W23GcCve@5{Na7G(|9?Bn-)mrh6_ zdMfv7Wr6=1J}+>=+_d7M+t^rAFC0=hm~(u9hu%S_o|7)<179lF3XwtqJQ8_D$73g* zrYu{uGjybC-2fz$>4ilb?5Mf|U-G&Zu0~x-{GLA!_pa4_k7+s@!5ymC?@ynrYnYZ! z{hqtO9}M+42m8ma;?dwxCS%f?e1|th#4heY;xoxY*#!vuIzhXgPN=xOIjR6@p?y;Za=hvLT1>SVLBDnuXv@ne|mHkx1Ev z0>8Q~ij=;kukp)6=k%>puc9$b10+RaxbB}NC5-t}w8x)fHT5fPU+~yc17*Xtpd567 zw*xsx|HPDH+jjcX;VZw0*5c$mN1 zFo;43(cdYP7=k*#>%Fr(anWOZ_{qMPdAracY}=`i_|QbQQ>r7eC0QYRa$nuOMi za5j_t{vu#s!hPU4dPe^t)7h;OX+>urSOpHrq--2=@(6#hw4tNu5o&u6-$f{w_l?LOj8WERy(gU;%XZ2B)6q4t$cpLjmj*nLIUh=Y|BfG4s>I7}v)5hKs~vkEX)a&ac>bw4mgJ3Iw~}VP8%lL3t9D*(nB<9VHLNf|6Cc7^tdZv zZ2kdt-kJWhJ$NzO_J3a*GT`xM*R8j~z5A9Q`>S###ON^6d7v8^cPE!Csp6cfc$;sa zMY8U9cXPg~|JT{df=Sh(A{yv%r{*jRvuF+xHYTd=BOw%DW0r%x)I+604D5A+Yqufo zBt`i8=|U0+(d$6-Yaj=@i8I26TToLz0bKuE4i6ToMc;vc(PI4dbknmRyy-@l45 zlcQNRgCRPNX%!Tl)fKprfHU<9uE-#Rnqm{o?6v;pBXYlE=fAy@|Mg_-< zWjM_;<=YPmJb#({4o67NXL0Gv16pZb{YS@_h`|J|Pcz61si2}7>lsS!mCE1J#Vs3+@$@<4Q-_8K- zTs}_#{+umCb+?vM4GTJ(`E~EiO_$2fsRj>%_5#T?IJ=_ycba23x3*z}I?mO5v|dDa z{}xtkHm#X0K@sCZTWXSzW$W(G)ImJ28)!t0Kg5RAAg6qy=`-Tu?hk`Q$RX&dn)@C~ z^{r;G=gu$St)GPoA~(1ahGI~mn(V`Mlwq8rCO;@hw@)v?eFg1?vt4WMZe=x%ddB}B zR=2Dl3um$pq11o)@M>iSP$Pu&4T7AVP~7CWT_tZJ^w+$@tf#$y0W8W_1Oc8XZW9NR z09N>JU{^_v%&AA=C*p}$W?2L%1av?o)|M@+o2-Fe3zXiO7 z@lR5Fll9|f1uLBuD!J0xSD`)fNc1V?I?nLG+@P`=%dK>c7rkb%z^6{GNoWeyBQp+R z@Tb|DK|SN9H2UV{yG!~*H#Zy-F{0TC3j~VYC^QLVdcjZVyoYLik5BxiE&|?=3RQvL z^NtEemJg)p@kcVY-sH5rL{dVyCQ{-m?ipYAJmr`>4(tnpF(GfBIRvGg?sH(y!cx1X zARDSJuHqj9oMBenrN<}b=Q9(&lBR9ZOOcZE=^RDX4%9}E(#O8Oe@|$)-~jYZdXtx6 zoclnoM6lbcskhwSuD&(uae!?2HD~GLi(b=eWFN6*zKySN1steRE#Nh4jfKF589%hb z)VjgyeYwSRkw{;W(F(`kCKl)&3(KF+m=k{3$7on&yL#1rmJ{CtqZIq@L?T&X{1q<# z9h`l++2(gzmo%}g6x26#AzY`K4Xmy&0n(3~52ByJ3Z6RiYF1&Z-}%tA(OuZb99v98bDURt0fZDIVQo-@I<|mFn7e-VK(OjYAOL(+pV^S}F{;R5 z=;S7_n~IsFAg9HBLEC|P;v=q-o92{zdNEb6fatR%CC@=lo2;6){Vr0+GGt?e?Q4w(JV3GIFNYz;tY6d20zN==_TUV351*@Q z%ytxchyXrp8Rg+b!#~xTFRWfT=!1vB9Yn)E08q*i*BX?Z3Bz2hf-?ah9qV_EQ|kB| z4~#1kaGaey45%}|n|OGw_Hl7{BpzpyS55;f0S&o}*yC~GN6uAdfVLq%VnSF_=A`2} z0je(xDh0SBfY+S&kRzZfjb*-1{>7y?BSJU1*Qjq#yhH zpV_L3^RDNo`-@nk4j0Phf|=W337*U_b53?dCyXe5ggFcow12(5!gK9Qo;HR+OaSCm zbO4f){ir~SYiXbczI&!(VZCb|9PJG^hcsmj>8F@oF5X8mZ)5{ZV9kemfq`J_cm>h$e|NlT5KDNC*q0Ck+0c6h+3;COTTl7@M-9r)}~B0qEvUa+_-PSY%$Z}L!Q zMD>Shyuyl=c{#IiD3x8(?%65^#*Mn=p4G(1w5Mx!sh~NdDWUwztJIt6V5-u+BKge^ zRm%nM%a|9}uf!*frpn5vtju9x*R}xMRuh0Z*gz&7-O*821%(`DbZ;3TerDd8_Dxg= zz7tKDgSa*x^LVMIl5ksdtZ~UYuO=mM|cPYs&YjM$=wYqjtn7@ie{dcTCqhLKh%8HB;Pm1r)==vV9!Vj5zmd`E` zF=A90Mn?#3GhZBrGvR?AgG>tGa4z`YO}c0_N^h;VkKM=Cr)##VoK~Vfu&QK z139P!CD+A1z$Ci*m~FcmV((!cW|puoDl>bX6DYrJt~B>Dmi!1=EGD`nuckurRp6Pn z_AV1@p#fd&MpMjsr2BjjUg5%DOjKNr5$Jnu!Jem&kL!vaM*-UD^d(ur{4@^u{f*hR z%LX4E{=S13(N2kEF;jo+AG^^ER}e7l5GsQJg$%J`jR*IMpCctvIG7J0QD{1SO;Wjb4`FN5oQg4Gi-Z*@*trx zBMc}MszopX$ z@_6_Aga@h_L6Bxk^0g}YK970wUYZs#ndqv6FpAzy1OZ-8NB9oRtti(|f_EE12lpEv z9=7NXz6MftJmsDCM5ip|_;6=JyzpR7<` zaQX;#Tt_SEaUUdRVb*%(&Q*i)S|J3e=!Qm7x!+ zYTe|O0Wd$Ju6BUV5G?wax(S;a@(!}J5kT7^xc>8MLiXl%5(sccJlUf6Y)){3&Ov+U zPpPwd1QuyOOQ+K~z@6+1CETa_W=6oeSkR-|9MiV~v$?ypGlGo>u&C=#9&p|LDF++i zTs|w}P$AG-TNGB~8+x)&dUPxB3qQ1hxx)QoB9ilg?mabo;LC0K{V%S2;R( zD^DGxe;Sl%#!=G7ex)6z(rh*!GupZncLl$%5aR}mpC}968Cy!e#Fz%c!r%ncz9{}T zT|#>esdS;+Ykyt6A6{r#ugs4>fsR(Z(y2E7nCY(Zu#tckc>nRDXi<*1H~`iFgm@)b zyWU4CeGl}&9T4+G`dw%Ynb`khxtSPN2dfc4-Z-!d2U}att*rVlJRXU+DMd{yI>Q@P^L3h8c_?$3m^_j=&R2`|TB5Mq$=s96~5{O~&W?%zT9b zJB12nEW{uOC!PSa^~4^5;D0DRo=|7q*j86~K6;$g{fe2<>J&vLDpc;!Vj>3B#DKx&Bo%A4Dt`m}=RoOig(qn zh-=U3 z!)H!SG%}eobPV+U4a*RZ_<5*qcB*+UQ!Kst)xSMn#w|!aM0JJf)^-NZ^S!JZZ(bhP zu5W|$b1g_RR+qR_SIoLm5?2Pwy3HytlQk8Mb68@JP-zQ5j2N@gd3`%sR+h| z?*i{EN_^#;!lB=-dsb&DZL^9s(}m!O%4s;Q2^?i-J-ULam>IP`nDVPz)2d|7ulO4rBkv4#u>z z0Oe4fl4grCW*r0{-=?y|MaKr68F14mD?l+-A7oU3?XZ0t43`B5i26Jgcr4U#)INKH zgEzhF+2*TkE4}oqmhB?30+%hsy?LNDh@2P3hUYdxa{56+hl6#0?btBuiS6@V>liF1 zY+SJuL(2KjAG)k!*Hg3WUjRI^$&K*H9pL^`%PK_EpR5|6%l@~;ogQh9;=iW4?xUZv zYaZJhNl6N0`xj*XkzEvDW4oFxvt>2LcwROel#5KsIKqVfLw*bh4lLFxZ$zNr)9unv zJgRsZG=72{Z*AAY@=Ra)iu`BjX`Ve@GFY^P_XwbHy};%($Tp(VA~?$`Nt%k0*eEcz zS-&^H7n(Oq8I=Aj6n8ZGCNnOlQ2W7sI2O174au}Cr_m>04AiV--H4U>3T-qxcHNFZ z{!QCBqGGGOETWZkKv!n2QvA@0w5MlzLwW-9+J(Rm6C&(GJ-@TMJT%u{mLOyEz~Br9 z%`C?WkQ;m_2FC@(4+mJdQZ}!95GdTW?m~g7DOX0{4@FtwxLl>Ce zw-!oQOq9P9C@cw|C%fYtTl|m)#R>k3MarKUwYN6}ev(1kbT-XA^)z}=8kCNQo^o@R z?8>JffdD6Cc&}ALpX5f<#v*qQLt+#Ie#=)3r1Cmrtt=vcBP|2=oEJ3M-BCXpWoA=# z;cU8c#LmZr+Q*Nq1dM_yiDxPLc#glB(6}% zJUldh_X{Wmro%VqSINCorqLO;?8Jf73?^l{h!GA#Vq$i4noj4ps4lf9JPX{TpUT#j zY*pH;9WW8pVq)5`%{d6Wd*(V10d!y*7?Qp4Tfetf1r}<`KAa+qWbqMt#}_1apZsuX ze-fhez`c7ubb1L-`jNoL{bAT+6lOe*9emEzdL2prJ#rFXYrAc%vyG%4cyWkNn9%g)oRMhJb8B#a!T8BQfe{T=&5CA4YOyCw5R* zc0}n@2JCm$!?J}}KJwMO&G0g^_fu5ZyKt*=RM;%h9ZW*b1A72F31>(~hZllX`zfy< z>s(au^YM--ndK59BP+6`nC->EH(?r(5kLf`{a!kf9GL$VcF`S zIBAq+3IsPueBQZfDj_Ji&+9D(ErdOl0bs(G%YC%3K9r%OH8ROg6gJdaKjz6c<(kHy=D|02C^qop;cfO@EED}4dAQF{pw6QG!; zU~3kkKHJ{jB}dfkN)8D2Uq4G{wX<@@%8tNmGg>5mq4WCCf|^rp`A!tKX%~r6TwsPaiE)+$dmt2EB`*A{`CaRB8Yz` z>LzI5b`-bEdT&p@mRY~nH;j$2Oyw(P)}DcE-A!&rrgv-zkBni+2F|ML!*9OGuu%^8 zl^aykigl>SM|+tIj31}P!?Kv96~GYJC68Q*Ue1Y0bk~$A24CXY+PHa-*a)osrp{>e=ZbEu^MHiiu9ql-99+QBGeUPs@cc`$3M+>$I)&+I zc%7e5D`Sl^U0_;`A{VuGmrb50rWXpZFohFRYo>ZZ<&O=Rw3Q1Z3%vq9Ut3#(w#%`* z+$K4VWpu;Z*}i*?mUt*)N6^`|5E_~g`|+v$4&(-2|1Bly2olBMva!M}C6Ph>^RoaN z-LJ%DbCdLvkif}-`O1eO%s8jO@+FV@MwCzPt4(fPqyS}&p?xmNbLG4u1tL<%3hJ*{ zw!a_cUuKMwBzND~6zX1-N(FqzvAGNA-eo7Q>iuPAQ8p}VDbpXROCWl1n&fT3UV-3} zHJ0o!_d}2Y-?#ghM$e6nu{#WN0P6dYIxLF>5CQ1|+T(#cZW``sY+`tF=fd|{wN8x-yu_kliJw`K8ORIRvOXi=Wmv*)(h?SB3qIlZs>r?Nv}12L5*Ng z7Ja}!0v;FlNMy|qF@Trk@k*N6{}A~j1s`HUIm17@$BAK!7dvX-dvzy!y@)&CO8DWL z4{4m{3Auf~d@Zm$H&B9UIbjUHI`Pi*jCT1S5n~^?%<1>&$GWrfoc3tX+<#+o^7+1F z-`!ggrb<-I-AJuP;3jevw@hJZXE$B*wWO3K1|yb5DDx|=2@M(2o4Br<`(zv88F&6a zO!GL8y9?`|KE(uZVk3zAJqVz=7}TW-tkXwGOu+y#yx}n3?T$c@iYE)XHgkN-u($j{ zW(0S!1`yB=<14(`F>KG`xnlZF;^fpT5AF~#s{njtqBIQ^?y`{nKt-rhScQescfKSC zQp&tLfeQgONl_jv{_`sL@r(2u#ast@u?vhbn-T8Z9;|O)uICs($ML|beKwk#MEKlk4=_fk7M$KA$@zY)Dgww z;yyHV1CWUdl>3$!X8l(;YM$uDO|RxZ6G-lh%v;FD$r+<{kp>b$t$h$Cq_@_=Lf7zFd7YwsWK50l4gIcZ7EN_>RmG4dHB#XEkz z#K2J5t#3?irq++etd*D)MY6b@GNFUTtY{?Y5vOW6Eoenv;qo5mmHA=^Ew@%ChwqlePOU&2rM@Z_B)Q*dMy5?UXji$k>j`jYu5;e^5RkzpuU#bi~MT(qdNBX1MFA#-L$3}EOeTA|8 zd~Dr(k0Snay0oU(XpT5S%_vgndPQ|F7z|t)3V5x_7XkfmP!~+8`RnIj+=p?n_Ujq* zgDM1scD)Qve<8St)M9};0vqATfXj~fv*6)vYE0usS#i5aLLbNDlh*H~pK(PVa(_qQ zUmES)vP2YW4v8ev=luD;;=^zJUWq${{B;LBkVBJ4*E$lIYsS>cmM!q{y8H*Tu~vaX z0QV4>ci+Xzm;{M}Zp7tWm~hhq`D%iiBqS4&e~J!#r+YSakk@=Cj>)I!A{FK$cepkmoo5PuId5&C~L?KJyYMj|q`M_t3 z@U}*O7RS?}8hgX6>s!!#hcK|}E$nT!H~AiPFtSKvxvs}?mPh!`9GiD;tIhR{5Z1c+ zFRq8ko=06h3x`7T3Gl3jr%0e(6rVrbGNGx_>$eGBuQ}?L4Fq(p%sWiu1b6@H9j8g$ z;1)WtD`H@7TQ4WzlOltdwyQf-8~>^;#C)>`8No3_(}+1JrHA|c;zyM-A$1o%!%=F1~@ z|Fr5hVf@*aef47&PCWE&<4=cKTC&pkLg!oe%s4EWH+XH-zf#p}TZv9QJ%qtLZnDl1 zm-e{Jt!(s&T&=9JlPP|R37Cu}G4bpY(aWw!gzG-QG0BV{i{F?^BXSyodxyK8yWxOt z2|1)IWjzf0rhQeR0Z@EjW^#+(x0$Zgg1e`^l&dP~wF1Q+oM5UljZTg@O&b(gb4R-c z>JM-ew7W=&9Z`>b`U^i-q9uSQH7~kV;bgT;{X2=ilj|W<>2crQOF-2^A=ftH1_8`P zBaVagxSN-I5q>Jtfyx(~jPiIkyGizR6Bek#^m|O_A`fNuyd@z6V(!mncld>t6x63v zh;X!uqsWm(CqxrWEqIhc> zYi$6&XcETbB3omm%ja*(V?C7GY340CLdDj{{M}*vYR!vj`>{WX0_n!i+D`hXN|+}13`Glx0G3u@=TG-1Gm`7FPb-BP z+ye9uPm#V!r?ZY$yRjUcV{5>lf-Ea8cK%F0PpZ$lKBVhVisjeLEIpwrxvIOF-yq8F zkoP6)0{|H$KRyYWYwj)1|DowCquThsu7kTnfnvc6#i3YncbDQV#VJ;xg(3;Ag#g9f zf)yw(MJu>#ad(#>fsi-9|GSf0i}DpQX}{G`Yg&QodvgcwHT`&;MVH{6SJk*l}T zTN<*2^g*^U)8h=3jt~)~U%AzzRi2=2mW|IQasN%%C9}ey-ZU&fO0Uqi{^r-^s_nlj zJ=SDF^#Zo38A&AOuKU0JpBDhX!0r2qqu0~kR`}gwf+2w_hQ6Rv0$3(nfo+0^ysTfD zNoj{0CU#oNm^-s$=YaYvaHe*e4IEab@csYH;-*}TfMAR+SG*& zS?FHPmrCa61LDFNtj;d#c&GyWkKlpD=wd;=KZ09EaSv}^jLijw>6zVL0ZuHMMeJy5 z13n7pb)GQ+CiKv;<$jYov8-il1|r?VMZQ@r2s;a=)!d=~CnW3vG!oGN3;wx{wS-_< zmH)EPucf!W@6URXgF0F;<+I)oaafkM)_3-|r!;$>B7}}*v1S8*NKQ`SyMK^_^zv%r z*8%N38+LzgW6oT4?gUhy2=)Dxrak|NP`Y;I83n1$-J-ITheR%=I4Zs;N7jvo_SuT+ zwD#@>Y>JLIjlw^1XZB!6LgIAS1tLGuS#Xa5lm6ol={|UEN;FBVtk0dkUo&G&kTDRO zkbOme9u&+#5&B-5(IC+YJ&a19`QP%+jV@{5!NS`grzUY$p2$4mWToQXN$So^BEx;Nac$hJP@0BZob&| zcjU3Ql$}WCoT*A2$r-)W9bv%74O_n5j<-DkNff+94L*90`qkOU5^EHZ{GNXCgxfq{ z{P}}=;C0PHmnA|3yic!G{j*j+koL^V1db{n#NPuxdjE2D;;U67f5m?y%0dc;AG`?! zHDOqps34+em}KsQ2_I-M7^s}-(8a>{^3>yWV*zt*$T=V`sxpv%xb^9O6ny^!^iLR2 z^>_M@58gteK~S~{fQQj-@)%~ilU8*-VNA&qNDrxD!*TJAoVEmcJS`|$E_!eeK>IC#_C}z0Y7Hq+8oXw6(j%n)EBI&b^FbQzLczlN)4|aU zK{xIhW7vOO>xyu_vlae7qXsL zwKaz{@&4e8J&#IUkq6g#Sc-K|%<-C?_fr-H)>rD@!CmC5SJN#L`V)4Ok_{8W zGMwDc+@1yO`iG1TV&~D&_4xv`$XsJOr~f@rrpG;ra>$L4^#XN9!U6<{B9c<5z&f9J zCLUjfeC1hO>nqAivE8wWmjtV9{!P@ff47RFdzb~JoR|v;=&bVd>_qDBxgWIN$uWYD z53Gq%QYcy}rNkQ5$5!wqhx8N6bN+$cSqboeUJlgHFjQTIq76X;0zQk2SbmC<6}b2e zjnNMM6mO*&pDG$}z@~D|75rvOyry`K#QU1Zc*GZDv}n}wExevx6WnB2Y}OW?7Ere) zgz+Edy66SY=`H?XTZD3gB9!di3@#Lp1Bg%$#q%JqRzQXnn4miM3U|a;*WKNZH@guH zRa`Vp1Cwq>V5okPe5ifJf9cK5y)wl5q>o`kz#2IS;Q0wZh;-sY0q5XsqBSPT3A^kV zmj$%R=zKERu%La<^Ct9B82Z*jevOERH;Yf?fN)%=--Y8d-BB|6uk0VgUqlRD5!FsJ ztWgGBD2S()zx7sfXECs9=Uu>Ojs(V22gC@)8t$+sM$ud?P%0IF+5Nswue3L;ov4ho zQ~Jx?8)Fxf2I1LE*MNF>7lCX4?#_J`iz)l8og}tpajPomwHJTV!umxQx2V)CzI4l= z0+Ifrkkw3`wxK*=af{jGuTY9(pAuXXdLJ`*NQrL7hw*!WPX!^QdJu+t=R#WZW@M;6 z=Qqu`cXch@WBxHFDMRqGu(Ow9_>f;0FIVr!b|E`}5z79JDsr?x=I20Oz~$WOlqn!L%y64J7h7C?JD! zHuK3scqH{8v+smlPai6qgA8T?jf zM0{cmZtu3_c#5{(;jOJ8YnOOa%Q+24sFhIn61>JDS!b%Fv-=`mOCMtQY)oWOWS#9L zHh31wHDL2qtd%hNF}3Hyaae>mp6U9VK%fL&QB$`ztFc> zHv1Gz^R@gUFdFAYLwc>v8znuDl%CVs%Wvm;8n2)R-bOa?Lmdb-mTTED<+`#< zh3C4r$qz6g&qVDlIq=`UV%uPyO?>Hoq-E$S)H);*q4SiM4gIlx_lPBkLGjqUbF?qU z8PUGjKdadCF;Nn|^{C2*DyH`M_hHK^z`C12Y~<cysqi7otY<)Kh1N}92KOaF3MUJVcbo!|%2+B34XtqT$Hx_Os@K%wJKj%R&S6qG3W4sMz~M7hl7G$$f*ZA5t9R=`eL)j6d|7}a@ts8I)o0d#Mgb-T2{f|h^)tk zj`i=fa+Ig;g6A<@f&O*gYRFmj-OD+T3@}zeKCu#d%;Tt3Fgjn?x%0CA16h2A0D9RY z6mQ=5^iTL|7FsDLqubrV^+D*a$kWCdC_F#cyV!B+PynxhuKW}!dHWM!hY6dcmulEr z_QnFl`{{E?bHMm*cIVl=ePor}8w&0!K3wOk*}V7Q*P#^|m>wCr-Lij}rJ6CF;6*YZ z&y+D?qF4t6we7IWj>V+PJRq)1AF)d_2}MPb-&HC6J_L8|wWraKzfi7vW)*jt;CIO~ z=wc7wHdu$6~)X~&7xZ%=v~%1b7&OiC?b|nc*t{IG`Wp}@SWeuHjiv5rfQ*ofTLCo~ryn!>m%eVJZBRf8 zV17wMK1A(Foode($#Gp-CYJ!$mz(`=aPu!7Z~x(LV6h~uk|bD zqR3{Fbnmdh01OD=G!SN7*V07AkY9zB^uGrl;Mx`Sp1&JImzv>M`08^hD<51B&>hEe z$45eQ_byrwV!F^Oz7O~%fSOg({)&g^WEPFMaa~tJI`AdipCfpkuL{~JHz>YsOAdKu z1bAYR0>+;GTBD>lAdRLA_D1CY$W$(6Ji&j939{3C6cQ|jlL^9e6Jms3giJ4GaUY5q zPCfhPw3|!`PtEoCc!(vN%Af9FBfDIy9g)V>@vY191-RWG=C_@GUApy>#;)7w9tY<+ z8s%%7AgTZh3$H+9Dsi%H{AJ(2{V}LZX?6TVNmwO`q1=})bcuFM)%~YyZr*Dp!Pu{T zA5slZLLZD_YEs{kh*y&f$0e&*;1=3Y>G(Js3EbTRo)Bw53`%Xe*cL7oK(4xlN!5d5 zYcE9ZuM}&HW{yM1??5QNpNarg>Zo+qIdX9oO}$( z-oWHS1+v=cbL9a}A!8hb01&SrL6s@UDDYuvP4wn$kzE|`u}RP%5dL%+KMLl3*%vEo zIi0h;r0T1e`>s(|0d+S%;i@LQF5Y(VbV9 z!R=40y8VkxWH1mW1L7bn!=0wa?ZTXqqnybArb>fGP%(tNn5Ix5t3+CMnBIsB9DSXx zt}L&&pYmoO?j3?XP5IdRF)04Z2>a49HFx-EoaDY;)L_T$a6BW3a#>a%d8>OJ<=7Cc z%`@he{Wye_V|j<%4QgOh^?v8AC;P|nLs_EqLD8y+GB?%N#fkjWd3*mZlZr$-EknY& zw4YevY$rV7YVhSWHQb=g`MoIT4|Lbw7A(xC1Qp9Z38mdLOuKtsN($$qCDVCJjX}S~ zYk&__aQGFRXXpo0!$H|Y(3m_3v41jqR%Xedo3W#Uu=)4&`CH`bxckTI_eiA%BGhd12oSx{HJFYxGofBv$Hv>)Ou8|jOnstklneIHx6 zR8knxW&5*C3A593jmJmOo*3;M;vDOH zh?HcfyNX|h%fQc`3_u)jz8_kY$;_C@>DXy|)0(gb<%df;jA_pozTy$~l&S4Dn$TwK zfB2AnaKD4F#FxOa#{;+V?eGd~d$l;nzE5JBX3zW&3aESD0+8rH zGzqF1mubo{0HLkhaEXVHH}=_sfFoTreC_9H;B`0Cr5EyGJW=t36%p7N%H=YHM7z%WeJi*JKv!UX|V|6<3PKIX)zh{FgM*ddT{9KT989pRU z6gFN0_>WhMXnV==dN?e7f2Ca~igU6NBw>RHHv0OIB6WK9WttMNm38aI`VN%q)R8L4 z!ua&FA@tV;WEFC`$o>(m{gW*}|iqhn0d{4bk~eMA>pyoek2Gc-AoFqkA_zZUyn)q7XyUtX2>(@=ei z|HTUBy21EI3PlzUQd;Ddt3v)Y2XXEH1*F{zsHa)!|0SEHW*$ZQr94cReu?WOd8zQDBtdS8bV^ zZX>r(uD{8rDW_+{WO!a}2TxO4K@P`!hJ~JGK}jL}%x;i9pU6trX0F-%CB@3uFP>F? z88)Iz&w##&4E(q3mQ`fIYg4nTN5a|=Vs!K@Df<*KRU*^==crD_oBfV0!_h%)R@LHI?bAqWjOv)aDhP6)pPyvu{N!`1ui z^Qc?&a=>}6)apYZJ$A{Z`uy%1YCXbm9CN;D@MdBedU^JFT7cz;Y08JZDn=n=2#Fd% zAdEqm{E%n(AI@Nd`X5v;^ei@(8Tie30tvXH=}u?C*s zUmwvf9oVOZbM1t1D7;Fy)XUth5L^8U9-r6`Wo7$=4=viotP5*oiCaW(i#!^4fUuLf zF0ECm^h^UYKK*?A%I>(0jLTT&@xKbwl-|6D*o&j%H5ylv!QPattBf_Qr63)~c= zf>awdVnhS!XA!i`VMZb?JJx#^nvexgtB}sLPvCDawoV65hI6A7A=i*1ewReXKogMN!&xFA#tX54_)G zJJc8U-To*#F`QRhGx}_RI>iv!-|arDlKYtSD&&ciOipJ1up|O$^Ffk>)ZCP4Z^Q6+ zn&Tzu_i%4-GQ2GuYofQA_O#P9`W2y4_XOGp>BSGsge7o^|I(vqDW)}MR6Jv7M;oWP z0XOOtGGM#ryzbii6! zEpKXueX@b51)@XcV%(`~uNE#uyE(JRCAKo|vux-(_l)+Tl*5#0E!rmEG$m7bV8izY zo-Ju{d?U`K8k|e(eXxk~T$I3znU_?do)kZCLSHP$VcaOsAWsKOkq^vFw@m#jP%ihz zlFSp_67mr#dd!>ff{DasAPb{ z=@F-Gh?*5e_?N9~;Kom>a+TI$%(cI{((FYlg1is#kKe5V|O?=}Q6)NnE_9Y7R#1&4Fc1`VTe?QKxW*+he;^ssN1$C?z zz`YUM4-DddOpFGOtVxVsDFQ zHi+iZFB_PTW9*r5Wd!i}g@|A;B>{qt2ozXe2)WQCBW9)|+!srb59?#w^O;k~5}Hev zed2$sPj6(q3)N;>D-bTj7rx9k^tH{SV%it{1Iw}@LwhnhpEIEu@7N!f_JekC_!W*L z6s$m)U$&-?c4POHP){3`^zqio=Ttl5fo}P38s3{OvulPt2lL7a^SO|DKxdP$9Qm@X znu0>Y{U`+EBaO$_qZBI7h%3&%#=Vp`#oF8O#!LqLl#i1&1v;pml!vh0`Q%O#^Z>76 zb?ur&U2^AQ$Z{lNDe36xv!cwIY>)p)`qg(!Lv2zLSP zx{><$R47;1d-Yf1#;@-hKrvjY-*pCLcKI8mxaWpRl5pR0bR{V@#{x%JNiwFAXD~AF zi{|im-&f!2x4YpgSnipn)&2SgUAI+B4t(`9G32-(jlorm*6hLF_|)K)4#KdyHk2ZR z274|W+WO{YB7eZ2Z|*j^5OgB4YpZh*@x2P#)j)&GK(>4C!eo+P{gV}Foj`j+Xl%pb(^@Lv@I?Qv`SU?>?Y3A0o ztDo+c968=NYAB;s5+*k#Mg_Kt$*&d|AwM)i7rp- zaSS33A_CVZeN8acRRI3{jlF^qr38m!2KkjhJR;b=5bPr>(6Ep+`0ddC`Lo#@V6Z`W zIg)|02)WWcIFIPh@BF5-4YcdQ$drzGTrNyFaH}S)!PgPC_ry$Xc$3s!Ft6CjwL&Nf z`4E(8D^cOx5zQd$a7m}TC-G;xP2?AI*bW3??Rx(}b}4G7*a7|Fy5>sfqKKNKyp><| z+@J$~!CDKU2DO&%W_{@kbt_J0ePX=B(Y>@UVbR+k&a=1^)77`n-uWW>frB3G^i(2L z^13haY1BBBegkoyQr0_Y=dy)9f{N z7ryeJYbVRg-%gP~&2~{d>OC_~xU`zhSHA&~zo}{VBc>j|I-VY8e~;?9O{A(m7Z15+ zEihzen$KSf^UeK|{UL<@+@Y#PM~=9D1rS*&y6mCRzih54$!aK>Q~;BGtHEBV!==X# z!8fF{%cqv-CcEMp&ZwF*{Utq<|JWd8T#{BE65WE7nHCg8zubABCpm{d&@#d5X>@ep zJZIrCwESh>!XPNG3R{P}0jGW(%MP?$373N2oP`9+l?8l9Jr9B0y40B&R zD72Riy%S)gExtkF`J^~Xfnlu*p-(;f)O*hBeRNxy5oEZ}TEC_m9rU z1@)zQ_CwMuFu!Nhz$iJleYEUwJ-a=Hw6P5K;dt(tv8&N9#`9OZoKe8LY9|2Fg;%~R z@|ToNw)NT#wR87~^)gRM%3s$R(258}BX30OQ^ya>PPZm`Vt5qLqYIVpEih24Qp;US za1D|@D;OL!p6md-kQ-d2ENsUpL)MAAOONaqnNz zYZAN*Ib3odP}4++n^cIB37#5tzht)Qp@7VfrhbsE^$N)|twI$HjQ(rO!i2cI!pFA0 z;i4WAj7v!;bb*%ym!H*AdxIW3)Rt`x%_Bcj;VSG6Xu`I)^{LV8*+al=p$|X|U0lV+CXNzN zU9od`dbSX!r6~1#=EFU ze@c5rlwZ;}V2?YBnMz|09w)p1@)lG2uQf2AboP+wS;j(E()@{afo)uUl2TUH; z)mCBxv*BCw7sI_znGGweae#x^nc!jIxS*NM@=P}~Wd7H?>!1seT#~J9@~-mZqg?R( zmo+<0T#1cobv_bLJcCFb%xO0qP7{$T6~asQV-uAjaed8}Jgpu_SqVaCs_7ss1jGQ1 zEh0{Mp98?DAOlXAZ07U^-bo`OiFssC zEy4loJR?!G&aoTQE<63A{DiHzD`g2i(dBk(atU*H*}==2mUJRQ1+Ej|lW;Z0N6(Uw z&&^-N83@z~G1+MMjgHEynh6zb?0ZRuwVf~9CzGLkX#TFHK8sQrozq@^{vjp zUXGr9YL&fpcyKDq(Fx=!b{>UyvstthAz6S@?_6@T;|K~THM@zpJ6=)ki?I-lH!Mn1 z?FW&}G7vSt$^fO!a>Pq*&Vd&%Dm3^0U3+(~e)GrXdWoaFG=)i;Sb1d6KV`ZU1|Auj zsewVcp85{wwWr5+3FgJI@ADYc|2K~5Z;9rKl0-I-Uey@vnB>M{tG|Ib|H*AY& zfse0Kj20+(hxbi}InAdgGmKu~Q=Uuag&4`2Qur~$9P0Tu-3OwuW`D{_pL;ZwaD}|Y zkQW?JjzO*4bGF@(=y-t}Ip&I$j5lYXJms=5+PidW>H%tfdU0MtJ9fXlca5#7qiTe{ zCqIcHL7FBnL+E^NR>VknKq#YUZ>Y2&3(3jmBkmuWC#awtZ|2!D9~Sx~M{aFZ0d3hg zg0;H|TM)H^!a7!K^~1}^FZ0TccG4?8O)EyALxh-_z(#sm%ny^`6hKhL^YbOBe`V=r3N=yvvo#JK^wZP05*w!$*q zK_lAY7tkQJU<|ccYhaEM;r(}6r*`yC-Ge?Bia&0LCr&l9^RfaA-$k@9blGfBGYNWG zK|~@jTaer&NM|#kU=5P1XF;1KzPu{zC4pe@?L@x}`?g(XF?FqYK&h6hZd?}3JJA+o zDIH(an7l%Ey>+FLpG3Sbzf9n`DEuo3YUBsrwp%~J_24eYI_wq0txx2_Ph$KP#;hKT zr>-=F)~0t2k-uY7}t+}NYvd+a~To?O1v$itCt-DK14-(LL7lspT9{)8Vmw1 zb4V0En)3_21dV^IWX|m3qA4(i{WdnaF?`Qw%+C-7>{l?5$=A*9BT-)5iw`BQWyd%N516oDCI4OKch^{GML3;OIjn?qXE6s z0PSdn)x-ik`i6vU41fKlO*68*b~~CKogh|E^K1S2B>N(*DlU8b7+*~mJBTi*TM~wS zK1Rsmo^As!cr$qo{6Tc#@~Ee&eJu_+WB^G8)EBZR&0FvM+xR zrw0-a&_zy(VXD&>6zk3Bujcuu*&jy){%iWJkBwrPhBQwoM$4B=QXX`KK`bL@(*(xt zIf9Td%iTzK!Vq$<-nlN`90f)S;EraWOa0oKI_ETDZRU;W#XZq#>C7%F!;NoaB{-KM zJnP$S*(m%*m1b{QwBo%0Ni0XQ<4+GZXMqpj_+d~Zgigdr@jRZtJJ)_4fx!v(a%yuN zuXE8Tl!zWZ0gh?`JWAJKW??R+Iq={ut|@~bBIG?-t|id9l-C@xY|&okKoyJqZ=i3| z^kcU7Cw$6SSRt9dvFxKsClC@~UX(``yZuuEXORDM5BdA=YgO7xr~BR1NpR0o6i9(@sIO2c87@Msz?k@I^UMt8H zo|Pk8TpyrIX>Cxg9r-YXcAChm$yde|hwZ(|6_O?y(AJlKqTK&i2^7{qO8aV)MTpfK zCr+|%t$vAwgF}DqHU>}u?wkfp;S}mVD_2?I1q-5Q!&`_u4kH_Aqzg0ZtToQZfFQa? zzICmB^UJVaEPM0uX@x5-=e0zxzhB#wDr!M!I3TOEj6}H6d!td25Tvvq2 zL`;iKGKFG~pTSI~@m255-PJSO&6Ykh(eH32bb0W}_Y9IGk$f56C~<1P`7vWG(JkTd z;Ek|;*w4K4H{t=V$)NsKQf~j--6-*G?IxWSwOLQCc1k<>hJ3y7S%HD5XWATjU+=3X z=9%u9FQNwAphmQ=v|Oc_ZSxjWI3?7VM826^d*RR!ZV`u~#lG5#;o09ZOK5(1JKB=C zU;ey0%l}~zG$LHO<|1Lo_R=%}l{s1{rj}<5qK9NB=Cw3%r#W$=;j&B!oAQUm0Rjj; zOw(;D(UFlgxFm40L6b9H-V0Nx`#9hb#I-GVLIspJY_@V!mzBpbC{Yu;Tp|)POOtoD z-?!8<-0Q$Gp!6rX+{yXqICU{Cb>k7xxKcaTVjQ%b8cKk6)=OqbD6Y_BJKLNra`at{ zL37qlGxk{u@35c3iibVqR*^dA&)!3$&^2{hfiI5y%VbX9eSMf1#$DZ<>On@nG#(Jt zpMBe4CodF&fr)XNRKL2NeK0{K>T#P}aVEsive0iE*j_($%rpZC6X3t})e z(F$68{q8l4l8)5>(IH; zrO`yJ0VJ%SiKV1+88x|@ontMG@~_Lcij~?{AVavL#tWe%EWbO7_5t@lb~364>JkJ7 zb){dQHIBG}w@*e&i1Xg~#~dgFMQ%bZ3a_O{{y_H3VR_*Qr>{;~(pccHMxOimS?sr<9d_Yv*+ zYA~m$KtPHi;xi>zCW=p^&$dw3RlO8xJ9b4O?tJ7E$<@==Q72q)d}l8;Kf#6|Glv9U z;DVr}Ld^d1eYs>Cf00GkFReox=d4X4wWbza9d~tukij$J!_Soi9^G4bjE!aPa|24?kQaVpo0+Vh2_t|6JZ*2SyReKOc4A#F9>%wFO34Ou0r7&soj@1WsKxs_g{C8D$KTu=PdhKDi1l3mIQGf*mBt0g(=MDyDQkY zlL~A9(F%`&n#U<7a|Y{VGmlojQ@$q(KT2%5eFOVR9W)!!1{EnZR*=aV(3*`L87Q;K zhDGVrI24?Rtww6WGtLzGpXWkIY_e?Q=?e$fst7)wJ4doH%lSFz)ixiXX6r5DY;MkS z4dfm~6E2sGTwGG)__F{J=!PkYw+$!Gf2TfZeqYBW{8ps+O!KC@+|3~ANXs!~G6E2^ zBBcoxFW%m^R*-u=#Z;V@Ih8(k6yXrT6~=%pZ0>$Fe03bvROy~&o?yxMVxkOlN=$gG zJ%W@=wuPOXC3okRojg=V0r$Io_cUVP*Kamc=K$Zul>)CWI%qBZuLR)( zeTg~aE^N=(rqcVhSQ6X0RD zM#H9+!B*Dm0X&DuM;HjyfxN!*%Kl=#yJhYNPSy3jJlYIVQV5@n#5&9{sh51lNp9;a zOS5KD)y!i%zf*+LNe7DDf^V;jW5VAQKdqU8w`{W2q9ak-C#k`T^Jf)k{)0k04Q!l* zKx^PvjqJ22JgG!W{m2cAE$Cf-gQXRyVlfz$hmB$VR3tT*TJ>>d%oOBT7z^({56T_8 z*gkwht-J#6NsWl|*s}FhpDIiEt@3`NC1KPX4viOn7Y{NT58`9nmr=%Ukmxg-e+-HT zJlkv#-G*NU1KRXv?N0N{?YVI6PK4a`cRZ3WHjH0`0%pj1ZeI&|StpSG&lNBw527)>T!>Vl_o!is z!y`kB|Noz}DEa003ZvWvDB}RV_MMlp@pZF>oDzbG*~W>7FQKLh5RLmb92b8QK*jf* zn;R3!#};g9%+BZP7G%>VPuTdBc-oEo?wy*huG4Khb>;^izGoP@PP_4dU0eJTT(XZ} zLqu>7Fakg{`zw0$t9&ULCPvW;je@3oB8SMgYGp{ADFpSqx9{HD+xN}S#rp;Jq)3Zx zTcKUEdXr7Y>8U{!3P}|1X}&qV{ZzG775x04Gw7*X7QFa7k$Fk<3oK&(0GV$i8qczgFmi}*W?bfpRj{Gy@U;|<`!N2xH#W&bGx%`>**%CzQ)1-@1BWa*X#9j zCdJTJamW4*d+YC9e5cclwI{_-TZd;sB_V_3R8r7(B_HM%yby)@b5&wQtmjUjw8q_=+aej2Dxf~ zvG(p31ZqQFO74JB>9jiI#&!)~{L$f1jXnamkW@}bTnFnM+MJ;KogNc~dBh7+AE4Yz z)nf{wYHO0O{9!jzvxA_kF1HtN-8o#+SGzt8UvacDqwK3RYrIao^YFQO8cKohk_aV5B$G+ zl(|Fqpkw#<=r!^EfBS|s1Z%2Z#$cY>Eya7d3SZYd{@MB!CvxK$t^kPfoLJXV`l^;> zVQbq-7_=ZYER>xR6dEuR_F~Rz#wcG82Z_t}?Bobd>I7+Q6m@f#=dQ)9;ytxojKr zv>*$Oz1l&ShO6TDY7yl~L)LTz3FQqco;;I=*2cdA$wRz=(T_U{K~mS>fPFe7vs2N@~rHywP-?b^y;S?MeIs969Rb7@JBUsSf5(Biic9krX3_8K=sCPTGV) zL0pszAU@pa0Z>5OV>wNk3)nX#ifa8%&?Y^*h}xQjt8(_E6$3%a3oEjNmi_Uk&_cWH_R8`m>7&&5>!Uy%ltY9G2C|{SqML1 z68)l?UN~q=NKq2HwH_IuCzG<0-u`no_U1#6GByqe_~_Nu(qETzM60=@9C;H)<%E0F z3K}f8h6K3QVv*`EH~X$!QnscE3&Q3UM63qn3T9@hmoTwc>;7-=RNJx1bx z%Bl7o>0TzJf5u!B>AkGv;x9d`me=w_r^0vU)Mp%oQ5BZHP=L!{sN*_~QmlNEbMSoj zKs~hKcXC5G@+~2+r`G{N1=Bb>{Q2cZXaw>-I7YQ_b^9W?PYP4w@{DnV&r)#;u8z$0 zC;uc87Po_ph~lTuhkQy%>dXIf-uXu}vnkNZ2Te6G15}7kmDHcPxCn`+rrmHQz6@5) z#mh*E!T^vjeqk}kL8C{1i?)v?fNM~(gr+)M9Q5pkukPpbS~2Z9FmEy9Q+YjhMLnWQI7T_?u44-p7qbaGj5Y{*?*Tmw0kPx zp1B5rw=Qnymzsp=i%}ydje-1Z3)-dMBP%ek&{kXl(>QAahpY{ZAtW7ej}{>xp=9^h zK3I|b-i94&F`NCmLuTz{B^^Y;N4~bdZnw5sQ-{jZX<^;d*xj(UeNcQQ!IJ*KQnxPWSYwp`1kI0V z>R19-juy=9vg80@id3AKs|@MD4pL`E)P}GTyJkAy{;uRHuOBwD%B?&N0+^r#$J(2= zH?H1qf}Py$YG~!M;WQAX)RB@lAP8k)S7A}2Xp&*8SK5wwz;eJB@~60%ot1UbH%(n&oyam!2>kfE*Ig5068`wjY%k_7brs*d?QN`_y z0^uOp;MC#o?Vi_3yQ>B0~|B03@7*2J1&k;#z0XN=l z+f>WAk@H1WSQi=_(GRfj-2uno4=tPE1X#OsLNLk)Wigz z#pR&ntAE>f!mXvn_`XeBFGrrVlGDjg+ZY)hJBcansN~k%K4`2Ht24JWwxJF{TPNFD z62tAWPqTmg^-Ti7XBu{hvYq`&aRnBGm~6v-=si65jLy$DORf!=5s3hJDxK)IPSwXp zX&cfTAm4k2qRnMM)c|*>Y%VLR?WNST5etbXMbx}^6ImynCI(R9rel6o9`}&A4IwDD z?zB`8-j;|_Bwvl;a|4p5L;k0;xeuUJ&%w2vO70P7 zXFQ|b$YgS_cb{A2*A|*tL&Ing}#_)O7p6UF2%VblxsDDO=J`h{2^;IfBy)FCd}xFqblS^ z1J+5BoMBb-IK7Lb2X1lYz7c<_5RJfNb{yh#$EO2l5;s_j~}REHU18Z3yOiP;IopB|KJhy4u6Ccj@- zg&kn{KvA`kwb-LJB>$ydV=djiXVvdoqV{eYS>hnQan5@bmjWTym`-J_?z5+-Y)4}L zCJze{&ex|51HrnqCRF+L~}5xj#=_wwa`VCKJL25gtDHGJ9U`tAw|s7RD&>QP0rbk4FBvkP~n1;2v?e@+)j z{#0d8drhR4FTH}3=#f2!_T}XFk*DkLEhyIz5YLIzZekz?(3KKF-nb}&rTh8UtXLMD z$dkq1IVeNF#}41k1P1Y+eo4X%LFM$9vEJH-87}^GB{6GYkxmM~Z=N;15A+ZvOF8bk zZI`!b8Kbx^9B$rp*UMTq?ig>Ip)dF;=n&ZON?B{)sGX?4!?%Wccg^xKAxjtN=SIx~ zQU|j*?n@ZG+6^d|Ni(v7FepE81q3#@NT5#wWgL9g;o-dss7MU{tWf!77V@W7H7K2BVSMbwPZ-vF zy_h&JU(!lY&lEfRS=cUIq}#rpxh!~B`jm5LHzn0M_Y1-ugMM9G;UiWp+Prq@CR+$U ziMcL!1JoV;nnf^N>){1TU%dr&oyoHJ=U}?ihzxM}S>okPFUAsuVQ-A~hIt)s{02Z8 zSN0Q#I}EIYQ41>qGU`8Fs>;TW>j;uott6*!Z8_))VR@&V4f$DGjy!G-1aF~8p6L?wgp9|g!SRl&ec!3=S5LHysbELrCc33T51OKGx z$X7_lTgGnk(e}(Fj29U|KMkw0c?-@aG2>?0gvv}x=1u*1+1ktR$wG&cM_Zr9_YnQ+ zbnkpram2|m>4o_b&7&O(Gy;TzWtI5e<`#lw8XU*Z_c1+n?MtJP`-D=LEAuDz78ycK z(7L+ui>B{1FQH@02km@x=PyiwndcCNavbpfQd`Ia;3N9}GdqPp!XsPwp{RUDGe5iY zx->W8Yig>kp|f-TTZoJdSQ!#lCTDYbTXMh_R^y2Iot~H(BbkESQIa<+Z%T<1w4+AM zgJ!pw#M#u&VV1@`BUt+SjKM=O*PeD1;MXNxgKdz!YdNZ<;F~JPZ51`^2$@R|z};74 z+q=fFLv~gKr^}J^x!>eEnPHb!6e8c1=ldRKm>d1{%boQcU^1ff^@#8EoVvQ}<=4i! zjr$n)ID_-&#~_mjs|UucGOXXBio1|9~g z;ME`>h7n?ArGNcOJLrpFOCH-RVec6kZ~S6a{U9`;-9?8@^ea+6?078@DIn0@VF~D= zC@n1_4UWj>YXulOp8iRz7qWz<413M$^7SJUEkj??o%LjW{k(q3teCv0xb5+MoRB`V zhZoPA)Q-GFe%k{@TXamE9q?0+JXECkP*rqM$;V!b&!lgwSvH^el7g-Dqc|MeaPbwL zL#ooC3$jQarbx{63gw6F5ggF68pd?@t+6K?oP}_k(VP?x*y*S^XSx$ZMZ@iH*!85B z&~hr%ys#2_91jQBF4Jyyob5WMdiIw}Ep%zthrU}h3UEQ-pDKokgreJs6qd#Ccw!0C!90Tf+r*n%sMn59vBL#+)6?U|k$ciKzLWlbFi>9q zzko8Dz$J^CX6P?sk7kqxzjE=ix;LMXL|Bon{KV|b_g zF4Te^iE@=v0465uNmgEiuymgK^8KNmav^&Cyd%ZKFjX4#VPI%#i7vR?(QDko#I}c zVuj+AK=ES5o#5^im;9IC{qFPKeY!N+WOvV=GxN^OJ9AF(LAyO{PQR?tvy4ME2O62o zF*V7)Yi6&kxyL%JSzGfB-BFXP_a6@RasSPk&VjdH<)(gJOV5Xxh+kk~=5R6{wQ0cD zO|OX!P&jTI{A#vkBKY#E?pmJLyTeCqU%r+-XJ2nxbJt(VPln(;%0)tXD%Q+(imnWT za2*E2{aU1h4x+-XTMg2)1yWhQJ&zm0ZXzBMXafux*#?qS0`Nkf|1osHzsYoik_!>X z2@7XTRm#AX3?@ajsANWKBGZN_uC%}IdaUOhVPi)4ihg?(GPk~f5+pAz?X?kPdu*@r z=|LH>4huvm?$=*^L~w^G7%w=s?+X&OvFi;=#yf)EqG7HGVS}8We=XI4x@6hfXJQwJy*{y_bCk8Mo>IkymJ4E&LC zxZG*b>E+pP((>`?n${tJD-5Un2(Z?0>0PmQYg#w&(~p6;X~T@K*a=VxtLKgOtgKjI zx0^|(4Ygicmpj2wL2{~&F5M1wh_hbQj!SQA0*ZocQ5nuTWq&d5K3~yhNFgKT2!&1O zDgXOmS%#qwa+e-qVUg##ayq-1t=Ob~MBtRjZhosV!?x12H{5e}^^wSpvSX2eN8Fuk zZ+XPg=l&I`A{U3Ww{*gVxX!rb?(1sOHy|;pHz9bWkjMqMwb$O2*+?2lR4o)5rJbJt zRfIk*_AjM>2Z~gdAWzvXPo5C2onDh*d@=YN?Bx%}@RZ)q-o6y}Dxs4xk4Xx=o5cn3EAMQgaTT5x8Y0{DP&e`l1s2&m!yy%jc= zc{;FP6DJWf>|#qE-#+MLrFF< zuf|1^&4Z@9x?n{@%TUt2P`+BT&%-TH?CBcv>;tXQ1pUxBcDILV#LPf-LcRyM@JCn1OW*D8!s(tM zfqvTg^KDug3-AA+1W9x{EWhsnoKG{J8Kn{j>W%bhkh-r+=Hr4AuA2s9gS8|zRo4x3 zhXu>JNFaWuH-|Q2>>4kfOz30xI8pTMl;a8&BUwX^GP;}k`VMdZaDfM66#SL?H@8rE zv41XC;@LOmm8Pg%HwHi=_845-gzMrDb9UllRY8(e>)9gmT2G>zBzPQB+4!w(AkW$p zfhnS6`x&9%L2dl~T`lhu9OS--&G{Jo$Xi*v zV8V9l)kF#4ZCLU;(Z9D~sc5bY^#o=E?opDz=^z)RL>GiSa&{XnZ4`dEe-~VeH++w4 z+WES=aPnSPLP4eig5vVuTcO|L-4INn+D^mb1L=MzT#@dQyXw?#IX1?_UM_ z{-b>rpjW|HOy7VqnVlPW;CvY}32T>@zVNq=j(K?ZC4lbp^<2{n(=gHxiTlLw*g+N=ZMr$@FX2|h>_rX%6&1w=fjX-Q$FSD2DVd^dXS&nbAX zZ-?hP<1f=igG7(--a2H0`9=7uFfb_dk|H z^WCj=x|;0XTfJlU)y;i$C-=-*3kVl?($+|MiISzB-Od70#FFz*B07h%y3lhC%yVuc>TVuP{YdApxuW9LB zI1v3RI}+&Zir4UKQg2`xeDl9q!QQg$h_+crKMPh5iVmbQ@`k@!DEZkw0<2$naZ`z^ zySC5yK>NEl{kG8V`G*>hKe^t5$}3Gsn@w^h>?zbZSU@C(ii;~od6li4Y{3TW@?#7% zkb9l;yBk3?649q39~W)}=k84)P!c9X%XxQARLtqvn)z_cNlhNs`<+5Ol?Gy^%$B?n z!A|ki;J!SL^6i-o^L`kZnDRx4)xn8|beuKo-69n<2m_`b^oq)UfO)C;h9;;OG4EwA zcxIbI;>G|+#o&rjb5k=>vxmo`IL(0Qm1XunxGt4duhrXG>)ojQj`I#^TvAl8;v4Wp$4r_pO(4mJf2H}rsRVfNszW?X!@K75&5S9)zl>*U8$>EDX zW@vf7)b-iUM=hui0>i^)cHM_I0tQe@EC zWt9X?Rx_-$uLs`-~$vVRwU$wU&60#}6}ieB1U zX$OpIy~NM$-zN^S8vH&ER6L4OHby6j06(?x>lgBx(y|;JroxfI2igD}p5?*0eF;VFfdva>Pr_3r8gKYXkM;rNz}N+lSM1XhML$tdAeV9^y$hGG1dF_v}r0c}z%6)SFaUec{j=F?a2fdAa|k@V9(x zZz)8&f7(@7nb+~AVz^yOOtrYU)x0JgLVg=jJdDFccRqB4J-y#(r-h~htrH+&S(c>i zH4R*xNV}-nG0}+rAo&h;+z#rk5p19vE$<9O0v+t52MxXc&NShlP)$Vy+TU8WA2wxf zNY-`$Yg0briNF?IaULA_O)QoBJ&AH>E!$gvWXxL-2NMj+kqF(d%i!o@O8zY7yTNrP zpT8yXg>!o_l*2jCCU81vhm!=gLUZSM?ygamb=8A2Q??Mf$2~nv^eh=@^ShjWw3f>W zVOq;Pxx0VhLo2=tv!ikhA=)2FinqV!Vzec`i%RSarkRzr!@@aCrGV-6z>=#+ z%k8O~CGTbSptoP%(+3d7MAiPVew^*!l!slu(%;8Wctk}A2OVskcyIgidfzzE%>h}p zdM}-i7@#$;4?nI~lkq@Z8ip{8`ifI- zen1DRva-F@q`9kq{@S)}XWQwoKp94{{lIg90>_~pW1!y}Ysy5w=XpGs zK=NmKRh7T@4|s#-K6DeWSbhmzUTcj;7pL;q=XrAoyjpLBWVbaNj}SYrGuIk@9CliJ z<|u3o`KwATPE$^DZiT|=XJ~89(K$P5^7x(*-*(ga2M;At$jtI&Yt7OjxGhv=Adn_7 z6r;WUA(5FA4xtrT0p(5zP(Au=$6gcSG&!TQTSj7`0Q6Gf=d_hh)OF)9_3@o@4F89U z63}u~Uj70PeuoV)51ep&^BlDVZ$tH{mExP;YmJW&w{#cKqR_}`NTO34&dcN7%Gfgd ztgb|3|DsK8N_%aJ^fZRzV8Dw@CX>(v!=HEnJ_gMfb4#3v6`wvrS^MuG`mv@Kae>N+ z4Qik#Io%QI1z|`4LEW~&KE2b9St8!x61v<)hC@4P_$z$(hZ~|$M2nBC@q{@0bQ_+Z zM^lf(>qff8r~BDa?*YXG1Z?qu3iMO>DKA4ygKjY|U|bnDCBfrJ&y9|r( z@NWUrGL+Vm%0M*XG#JyLaF;M8M*v2fmJ) z20!7mJD;f8J($iG^53L-2l%#&+ee`p7cbScJw2rCoW&)^UU}F5#691Lh8CC7hv0M4 z+ASoD(fSzJ&^?WpV*Lhs0p#?Xn~BkkWT3M{#|oKyp#+KWu{Lt&M_VpDzr z=n@i*hJSyQ64TTHU6aWW@fK$Rt;OGY&O`G%3J8IHHs!HIef3r(=6ggm(k9r-5&UNy z>;Q_t(`K{nZVB_c>it+}v@Ed}<|waG2agn1jE*UfR0Ge0Nk;!78Lq>_8fpB^9YTLS z0;uZ?!8a&+IhGKxC|H!%PJmIdIbL2#DLi}8tEGjHagYu(Y&IP<24sVjT7-(Ia{h^r zj)DSfbMIbv{M?cO)j`mf$;s&le+mI$5W<`|%*Iaw2u~NjhV16;iNoWAqt>SPYfL;E z-$WQR=rd-B=+?XM2Hn)gOu?2n*Q8P+?&@E3zeHuCVEdf-syP4fnqj}NfS;9j2E^?1 z+W(+MwFV3x^HyOFZxwL z;WRB5yA}eo;=N-AM#RB}n>mQH$Iyg@++3dSO{&EJ2k+L5l?7|Z^vVFSpj;x2)v(qhNuYf;IX%l8I?t?O2)c zTmeqyh1FcrYPCwEMm=%>-)=yK9 zCbx0NUaX^Vu>C#U82pI3|KbBc2@}!x2EMYrVJt9PoSnM-+q`<>hug1*SBw4Bgan2u zj>LnS3X%5~SXlax;AIf7+|HJL9wmDd@SBd=p0NdVt_z#5gdg{{ng1@`Qvz?_W(Im^ zl6UC&>&F;JW@p`y0dXoCNd7>pKOPAr)O5{}dHbX4pU$V2v9Iud49TxFqWe&zqTjlQRK#?uyNFA28-^br5e}Zk(6Rn zMDI&Rm^6{PMxu_L?6H%EV@db?Eo9$3?|PFcH_lWfG2J`-BLMJIsG5&2qKH0L_F0E0 zT*|;l*(J%R)oymvJPKlpcJ=i2-RgXdQMz`K?m#J7TpRn0DTVlwS&8fG3+_CP?K?U? z`LnJYL^&^Bq1|%t3BU{eHsZ+J@V9vWX}M(%GPHr&fBraW#UIQ)giOmQNEW4xD?ZV# z9FPo5kJcTWBjC0Z{Tb#cs~+{T@@k#OS~~(gn0@cG2ZpnjH2hGgw_QM>?pIOIs&Z{i z3dC(myu$GvD12nib;Fq>0vA{{S}S687Qm?=v~k{F@17f_rA@*Bd`81K)(9oG!yHLgThdE?&i=8QYQaD~voIY8g$j z1mg5VW_e;Rc~{`YvV1Hnp^l>UWDNSwv?3L0h64NQFQfb!B#$ZTeKiooIQOlO9g!g@ zK!G}`BfL;jt=TbO>G|OLm@Bg5111If_X@PBnWj(eo(S!pA2~m3(a(t7YoV_#*K=l^ zwoKm6I$UDVp@#ArO&R|i| znQ?pnM4q$GQFGB7H4s@$j5Lti&zPBnr~Qw++!h%tvtFp&snrZ={5o8 zrJp4O@&{g1Ro8|mGBI^(1$u9^I}uI7+K_5{rfUiAJl3ppMo>I^D%yT@C|k%YtcHGS!gHbaJwE(4wG-a{K>jV26Z zds|*@e%gXI)L|gQAuv|tiuBIH+df-)LHyuarwsr1GisK2UqS)$0)2WxAX?2Wu5r<+ zsJ7->?;k+`Mj${+i5mK&`X zF7m`PA6H$sw_Dbx41X^HfEnzJac*&psuAxMX+8nS=t zfA`+gNcIv;7%Spl+^H0^X>TRK=4M2d57d*|6&1Urx!CaFc<(^~^VE=1fehSEO-n7Y^$^+Qk+%bcJS6i7Z7Oq2pU-|O4F z&mInPLOwi*ufsW2NiIJ_fb_+ld7GPCGn(YQ@xH^xYegW}xP38j**Bdg*2JA_C0sCL}!rXQsZaCKEZar(E@euHiD-#nZ_vKazsbn zZ4U+VV6vpPnzDfxPpqXPeLwKeS!D<;A3q@`Wdw`-*_YP~@d~iEhIS5E+Z`iueTcZM zw4qXCE&#g0?3C>!N8k z#0wiedz*0IrLzA~8)>B2kV}|Io_>wy zC}>QcCNprL9K%}chS zcT-arY?jyKzMoCXthr08vOSL4*fBBp*gsq^xVJP0&8~>pWdQL`R9UCf>pXa;&zXz) z+7qL|Y3r7{`Q5yy{zxi{6mgI|caDQk?P-QC^-7w6+%(Mec%S~VJQJ8ap+=_F4dh0O zFg{U2(Ss|#4*l}{Vt1#{?L`|2^5M@0c-sSc+s`XG^{o zO5dw{A`PSu9-q<-H!i-H!E4mGufTv8CO{l^`?ulBi1OrKRAja92vzY5l9gNMn6k$`AWj(=pt^$-BMr1y?4Z; zf5AFahek6gsBSl*d6NTFQY%bZBr7nKs;@ z{=eGz2o)iMN0m@X74B*6_s%bV;Ir_~qss zoGPDuKhqk2PkOluAW28o2QQ?_tu(_Fx5p+yQk8cp+*LX=EWJ@M#gEE6H-fjO{)w{; zh!}If$%***96O~;6`QSu@Amf>b_eGn4kx1}i-SXUm8Odp#NSMQBX;=CnS0e&GF4zV z#pOm{%(L?=uC^DCy#5677eTAa-#()Monz0zFB*Uj757BsM@Jcj{m9bmU{k!vN1IAfU`1h9` zB!|am+lx9v$^rittQR|X{fq#(1mE7Lfc?5g8=BDO5d;bwx-=yl^A3tZKrWolSDXP= z=z<{8Ec&bHqD;Q;ti3*cH*IF3D6PLwpxj@*pf+f3-mVH;3|0CGLk4Sbv8TNGp)I8SD>V=ucfBur()X+Qj|_k<{$+x1A4nwiMMu(IF`dr{xb3auZrr_?`#E4}$b*cF1I`t1FcpID(8|lWXAT_a*(VhWh|WzUO?;C$xCfxa z5#u42e+gCyxEXN7v#%3r@*zDio(Wc4NBJoGo#(-ihsSc3Ofhor95JY8)Rb|&!DpL_ zGYmdB$h_9GKIKkr3tUx3i7)P-22vp?d9CFRI^nTDI~_Vn(fVudL^tsq9qiQ|=EQaeBnH@zbL(R#;S@Oj-UgVc0@P(a zrcVOvRT=CwL)dECBb?RwR6PI*k@2)F@e-CUPmh8%AgYyF5HNi>5%|oty`!ix+2wz0 z0UUoeZTyP{OAaRpBqv+77n=8d#s%1}rbZZRlv8`^Q{1f9I8Scpw!w%nEbV8C>EX^o z#mvmcY8oNn3Dm9CB)t`18JKF&N`cE=oiz~4(=8Ar$(T7*GX+G?cSb3{RPQk*cdUqceRT#syH1I7v zJp|Cd!84=@CC`szj?6S`MyI3;>^1wdj`kl$VB!umUmH1o;=uaQ7~+Sl(Os>diRiQi zFEBJam-O3H!IQ%yRj!ZIii!a#=%woM)u!3(j8c0jkgWazqyd>fZH9mMcS&MPe2CxY z3c}&zA9_oFx@zy_;yU}U1e8-i;Om{`$PSQ0JmLVS*ie>Lq;eAi9mxFf!NZ@6;nl$T z%1RTSf_w#B#a9=J764zSD8U#X#<}PHhhFpD3oBOy00)?(mS=^gjIviN^6rNnyVuS& zocuhSm7d44IteUirwbmsPZ=6><0A;Vct8JZp&C0m{?MVAQ1&(5v{<2MgNKcc5p3Xk zjU09i)&3I2f8N6Pc;jF_i&>{4aOG4oVr#=+!`g=AtLh*@YoqeYx^ZdaQ>Oto)B~Vh zy=>&ZD?OJV4Y3X!5+-h3XE)QmlUotkeK73f)zN);7j%~uB*~UNXqXXAmnwaU1uklQ zJ>Gd{qP`-@`Ho9(eVXiM?E{b^_T zB!4>`=ybZeAHa`^3o-0PKxTwb9a0|xcIbP@a*n>#=&FVv)?c{jeyHwjLj_K;sNICX zt!Y46`XL^?n~&EXo26+tX5Ivt$r~-l<%TkoporTfLn?m_pLBpCI*)sLFz(;H2BY7~ zsUs%kNc1N>o;w1+lu=2^s6{}qQPOmml%XkCvgW*Xwx7 zeep*CO%$?gimQW$#_a(kg5L?y&*l%yYQ0TuyPzW2i7#k(U}q;|q?gIX{z!C(nT zwowa-Xp5z((C-8!{`_4MpKz@)=7}E+4LHo(MRvqn@=`7-68%2<-XA| zeeY)h8tG}!)xoUkHP^AMygs{lC^!7_E^yf~0adBW<0BPUGnt!- z-_BrC%UP;+-7A--WU7@%Wc6*P9I}|GQ&xdjzBS$?WeD@^K5moKo?><7yHjE8I>55h z#q&w>3$-d9rHdXvu5N@~L2*E|eXGL;W))UwF#?0Z< zmP!$e&bfPTpI}x`5G}2B*rJYb^W}kHHpt})+X(B}X{djYrE2k`)iGQ8*rhbu@jE->-nglzBC-9&Hw1!=DG!Ze(V+u9PmKjdD( zMZ8n&58bUFExM%&#c_cO< zZKg$qdvXQR&6IZMKe^HnyV!*pu19XMd2XsyGIiW+-izAy+pd3s7p8zGbkWf)fhvZK zAE+340nbPU$Cn{|ecueNN{fE~4ctltvMb&D~RDBEpn zU}i|0*FF5(TEU(e7rmp-`d(%_*{RebNKUv|5y|pp=jsYhHw+SjVhN4^QJsJ=<$&A^ zM)gu5rz;{Cd*=nq6H-yTg%eA-aZJ`$Wd&(`DB2mA9NP6|LKP~243c3!-)cT+)zK0y z{MzlKOw`8>PyVY~DW&8|3Cv;~)Jn7oOEVqhK2@)1<6R;jhLfgVpeBmH@L+qq&xtF5 z@Oihc3*PR(@|1s7$l!2i2nzl@p#x$HW63--`4-cttF{!sOrN-z(%-~ih36EMJA7vwBpirCjg1M;}r{HL5DEL zW#?1e((aPnY1HtJfmuD<<=BNOh&Nu--rOZQ8+j4^$snVyGLgIs+&SfrKpZ%sQT?TxteTn0XAC{z) zD%%{Jzg*uF__Ylnh`sykQ+ztoqIR%||mo zj7kg5-)=7nXha^PD-2OFF;*DuJXould~qD|$~_U6YATB{g?`5LSqsn?dK&n=ylwG;NA>scU{Kl&ZYbbC)L zV>%xQN}rw~POd-xCY)y8Kv6);EY}cS)8;7*0|){cn|~FQzy2IlKgX6e>UCc&TWl}9 z3RxfUeB(+><$ZJ%0IxdqFyKot6(=r_X|b{JQ5vZvG`C>`(MmBdj#t&%pMK*|>I}!? zW937#$~$5Fdo(e^-{#dupN&yK6)l^GCZAPVQ8fx@F=?ulhWhkgv*QQNkzgj@sMxL# z^avU5{``z*c;sq)kMoT!d)K?4&VBwYt(wukqk6|$Iyaunj3y(Jz@`s}3dXw5T4*v1;Lp=< z=P7a>L~2j|Y<86SAx7D2H&=XoD0GU=o~KQ0MCDoaan(od5i9ZH*~}kt+bkJjuy--W zf~zK8<}L1EFIB_Uw}tm;T}7UqG~U!2xok7U#f0qNHUrU`V4FLLJ9A|lQaD}}gZ(k7 zHE>r>5<|9?rLuK~WW;HZ0U&l=ogu^!ky3wz3r2CO3;PhJWttfHxA|nliTHc9*3jn7 zpevPvG;Wwl9ddtFy+?U(e)6&3&ibbwvd^fKA4tc_UX8>`0c*eo%f=Cbbud^;oX?KG zY%PJhH}`3zQpkG&p*+W#to;@5w|wEjSrn0VgqnPnm#p{o7Kt;cksVvHR zm;q8raqwiop%|+9;lhQS8ZHw^NL}+Q0a(xUa49;55tef5e48^pQ*gt#j9T?(`=87BfsA*nh%wa3%m)jjE z5gI^p!ERY7G2VmbO=s0lhlP^6GMAq8SB(y{iktO=>&bMeV@OZHjt*kcPOD2{9L~M- zFY3J`XilJYpG1k^cX-N!{aNBCiHd8CptU9bINQGIihuRsr5_uj5_MqL;4S$PO+}`a zgx4BnlXH7Kddde6M5)Cj14aX8f_cr9kofRtOYHeZa{(;SZ3zqicZAF5xYrOt2Uf;H zpiii|E%Q9MuojQmr>EEc*)L7s>HWK&%vKRp@?pL?;dt<4CT)TmQ9`Oz+vY<2P8^w8 zOI0Eb7MG+{PVj|=5kvnjNpZlWRIt6rY)UYGBj|?jVX|E?!K=~g=NZ;`2gb6{$;eG* z>c6)|)h}l?3xE+Nr*A zv1W$+I_yA&*|PXKb_BJ5!N8YzH;kaC?SU(D?H`=!Yw(9}B>OPqcGD4fdOtb76k397 zA9k|l*F;l{NvMQUv@LO$TgvM`m#nA}4`{7!tpT~;h&WgR%z(j$YU~2iKVb+>yxQQ z-*F~CzSw=DON~crmQ=${2kO_9^cxjfSyRm$5Mgp5R{MpA`?@w?d}_MJhsBt^98$~@ zBBysq$>X z{O?wV*9MxN_@9l$Vh>(b_J20ZjKcqW3Mx6+I|D<`U;%@BiC!KAW+C z@|jsm##7U7&h^CnP&?^4-WH;san)Zm*7^45%82tPkiLMHvz_!~dl6Wuu8Vrz8 z*oug0`G8C1)P|cun#t1${Jgd(Q&4;u`V6|@_aE~T zI_}ij0{Q6IeDBT2uJCur#m~oIzw_0v$?jmC!>k>4N7mIoym3Sf9F{0llKfD!-Zjj# zL=ReRj)^|mm}}_`q7a*@F#X9%>U{kk^TM_Gonp(5ObBQB2-98GlVpRG8NX%C8;_ z@xaeg%wz%#tP11MLzk63_f`kQK;97xB@tiX*B2o;_M>oTHq}rFT34At`p5eaSoA2p zKO;-?g2;pkc~35F(fLHU*xD3o$)Rq}m?(T#j21HsSLTkpbP?4DM0i@?C@+jQMNhN8*Yx(0Kf7bk5P&$r|8MnwH4rct}&7%@MDLZk0hXben z91i9xibUR|87TC<6)Li!_llVS@Y!AreadT)PR>{i?N>@$ROE3MPSP@OG;dY>2LS=n z#3ayHjCN*UA5@r#1*bga@0XXl)1<|7+X}v{E6iR8$p?2_>p-8wx({81HTRvCi^HC9 z>8Av0hp$>sK98(W#AN-~Iq^U%SnO#<>OsXf)+$O!mi$6bRI2s{BEOF!50 zXNLxVU}$t^)6;o>nE*+}z=rq4c0Lm}C7bq5*=?pjLi%Jjb&oF3(xzJVSeAhPyo9R~ zG2`z1WXIj_@ueEVZ^o&Q1~QN+)$BDv(I$;!IUF7qMfiJ@wV+p>W=|0`H)0_Qs$yev z)UoF7RL70U?a70=6}YF*+=#@}YzW)%l%&g(ikQ>>M$ zp)iS61nRAv6%RpSxxr`L^)m`ko~X%>*hLDg^ck|a?C9#*aq>b{=lqHJC2Q_gihbE(t@(nleK6-!QkJ=}zw`Hgd{zYf^$^mw91<6zA< zE~Fsx2A#Qt61TZtRjaq}?1z1ELUSNX4yS^0a&wVRx2&KWsvn=fwfC$~jWsT`F=2*Z z$O{Ymt~Th5=E`g)*#DTf#Vwkk;3ED5>IH5K8}-E$V0dGY{+&RqVD>a2`c%FeYWVls zlSO%V1@uhRMe-`BtI{rkY8qiMG-nxsm@5+p_*bf_b8Gq&6CvXMUgr8Oo;tBb^^lug z$c#V&v~2bi+gG3U*U%MXq-YWd_V^Uk)k9V_>une>gGTLzFyr$KT>JK}d(FM$*49~o zsKcb;Q`E-zV!B)}Fm6Q#>BC#@tp{*jhc5aEMuLI0yMp1yW3tjRo2Eo4@EAawYk3gi zp|Nl9a4~3_{qUle;Xob|@!4pZ80*8=_khYnL}CWm4ELRc^3%;FYL@M|4Hl&Livh*f z(tm#qg3B>PN9F~V4cAbrum-=`5VC8KZj0@|@a|rtYqE0N%2Bm?+WUMY4Qlw*^1MDK zTV(np)m5UfcJbRp*)CFuwmV52OvJ81X`U+T5hN!9hX334`3QiGvm{mpwnaPcXNpjv ztaNt?LOUMP_V#xaD>#?|t*nF(j_^{Wp?m?v38!#I3sg~x0qx~hn&}gth1iH6!&pe& zN6^Bw;^O;OkyLAc3;#`Wrriog5UYlQbD~7g{l)w8=eB)*j+oi7ab=Ra;)2DHX^gzB z(!HO4bB-H#SxrklMj2LFoL`ZEjJSv?bsT>@5`x~#Y|bbQ%-lbreHbX@;vUS0z00=$ z@%s||F(8L@972OLzYEkR;383gsB`2p;zIcVY{3njH!oC$qPMRgc6|cCe-kTz5(o8> z6Uu?<+PR7!L$dHh1fC^8f+r#k^jxIF%`tB5)F#BFRj}p|d?&Ndicd2Pz~6Z*se?10 z5Wzc^=sxgHhz5`0t6w2daLT2*qTI0_utdI2skd(JE3<^sffZ=JBj0;NN6UR33<(3>LMNSy8cL2AO!VmrGrO)cgQbMM! z^Ij>*YZ=WbO5sL4qDZw71ZV(Ixme#4!G^pwt6#F+!q@a)_gey{&5pHo*BXiX6zLI) zOZSc)_+4!Yb9Oeu1`0VQo2O@DP}%K0UHd4{oEfM8&2PCa2%M1xUq?7R_L+fL?eM1@ z`PG84sD#HmGR$zw>qp+t)nCJc0e4DtD1O1H@%c;juHoSgq$>iy8oB3tdYD8z0MA@x z@IhWNQ`W+xCQ%6Q%%k=`IPH+46S0Wb`6`l-c)_i4ElL|x4R`qg4R;P8Pzm;z&2zPYqH}VP*NPQ6 z8i?x4`?62On9P9o9fR0^+fd9{b2}tR(NgW$=*m*#MRiPBbEn1D>44!-$05Is=HK}~ z=iiXU0BR#h);lMalI z#{kyh8#H08U?(n}zJC%CyT=TrO&Tn_TY;mK81YmLe%NA`LaQp&7qxK5 zE^vKp0s3pNBmq|@uCTKcI*u8EHvC|^v~~KS9{kDky@yWb&`04VQ*Qh8=dvxBh1#f|FI^=-RApsLFkp3yd-sj_0^SH(Ya?|RIdO=2^%0_ z4FDo}8Z<8*7d_nnX`_g*0047XXOZgUoiME42xk`_e8fR4M7Mb^YAYOGB(vEFoH~0G zRJ4L6Ywi2Sgw&qXU!bkFws>isubKwu%t{zJ_xCiA)dw(Cw;Bo^XtJ-fJ68{aWi;-?z`5mZ_)&2*c@@ymq^X2H@UT2I+^S-kq1|?fy^Zg@3~` z=ZCE5aSZDGM#2BM2yC@$uz1_nzT~88j^I@B8~(HGjs^TC(%>$HRhdvy(!ZxiVK(OU~$! z3?x|HvK1o)-?`8BnFzLCrIXh$_^@J!@z|K_GN8d8*&+u#?LTBLmkpRSDM+kd^_gJU zFwWF~k`g%_QW%%Tt;cCntb2ccuCgkc;HwwFtKc(h@OSclSM2ML(Tn`u-N2CcJSFDa zL=32qu*-zofQ2X&uoea80`opG+s*GuD+pPX8LUwe%WoIwaZu&r(t*Zf#1EJV4l9;^ z0mUP{d);oN=gLmrdBg1Q4@-)xj&%i*baXx3|1f=H#2w6H2WE*8yRAR`k~9d+v>k@u z`vn()5h4t(?#mzSBrHog+ZYG1s452Xn|;xwwKGj!-Gnn05L&ht#Zs6pDq;;3AAMW< zUsAY^!d$J&8$Sn$v6E)Xy&4|Un4dqZQ;HX@Iw}ZTM$Fk`Tb4}jz73n*L)yGL%>8K# zD{c`2breLu%h2*hZJajhKwwDp&$l^OKUEc`SlM2`Rx6ns zZ`1qwWOjIWeE*FtOh@SLTVBGyv&-G9hcQjV-+7kWkFIPYHowhap)mGdLLGVXuYwkY z(hNOw61f~@2Zk#XAqX424eE(G!a)ps!_NH{FykZ+kn4nu z_e27}#FB(jc(4|j8z=iXvHug0dL)oXDW9G!l5#@dj%pxr;5eL@qTaE)RFP$;X#)~E zN4Te569f6go*byEPqi1Mik_j8(D$!`3L|v35u~uny|aFZihSzbV^?}5EG%la)cbg; zGM$l-*F5S?UHjT~+z>DeGQ5cJb70b_5wAXrhnp8HEz^Bp{qj7O@Us*AxMyv8eT@O& zaaE-&z>#9D1!C5ZjlTd)2CS|Rf=e9mIqxq$9iM&e1S&%sm}&Fk{^Mj{P*=9(2Of%J zAjsjhj~Y0AROfE%6u@gm`bvpHqXIYIuwZkXwK~_Vc*tSbv{0&u9f1v3j!@zloCvIk z_Fe@7nEzZyZsn55MuJAvM83KtWz5vD`$IR`a)4wxMFMD@ZNNHHl)_-+?C zQ}$nhH0lq;1*cDR{U?YT(%s;p#YWDkd@(-I_qE9svQ zJ_RWIkD=9UbZZ!ZQ{y@I-~Y^|%|JOh-sD_CMOP5YT_-o)TP^19pQ@$6}t&JF2^(|dkzYOX(U(-Ztj6MfLLwNB?v18{5Q0S&0>p+7EV=Su+aW~|=m zY|wwR|CdN;&(uUlVZifE9GR!_7xq0b;8O&Ll@(ChFTGD!VBoNJX^DR>K8BXDkmg20 zHrlPfs3>s>lZtx@;^9cM~l81ij8|WzxTwO~XTNa3dUs+$Ef)UfFUv)TM*dO^bAq&d3 zJ-u*F=#eLILh|#5nqOz0b;bvTat5yrEFP+U@|8V5{zoh!_k0Z?qLA?v%9{w#@iK1P zbpA>bXOpKcOUL?lUBh7l&9~6TKE6 zhttS^?IEbN8}<;>BM!96h6fqQV7>5KO z)nN&*y??v4|8*s@4=Nu9aC<*qV)9A0SvSKY?d$)?)LTHs(KKzKivPtaywk%Su!TCOgk5^+*fhKTa< zbqCDO&O+$>)|rjXzHwp2m6p=+6&1mP&WCG^Cfl-b5YU?aCkBuUywtU{=-L!0&}o>N z`!c@KXMCou{2{LJ*Q>${RA*c)+6fRU?$ll2lVThb>J0VNQ|1BtWI|3umDAzW;-ZY% zSmwuvN#MipU%wPAtNI7JK7NuMXCD*5Ao^OAYjmips-||+a#mD&|Fpa(^rft{bl)*5 z?!$_tef$UEP9?lU?1M$N4K}$?(L~)UaNR z2QgFS21tpope=i3g&)zPCG*7S9H|u2rG|!v9Cp*pHs|)TV)K4;eLlKiA!{2n?xIVC zA0rfuB(e2G44@|d66-!@rW6^^Zn}P{{~|M#QyfDFS>1Ec+R}3%PzSt=M_-wA6PR9w zgjD;H2j8+01qtDlKN@=~)<383kLeecltjeX#}v-#c`E5zjGKWb@fe}>z*`)p=LZE0yK!twYe7{`~sP@w=3hlwGTv>BkJ z{^Mkd((53-yYVv5FgNCEn2MU3#F)U9+(El`#W(NsPS_XG4z22kgQAP0DCXYXqAW== z0XxTUJn%m2vyveH3G;uk4c4^9`!MB|PG5mgSN@r91!O;6%e8MbPrZi*~fA z@BO^}^A-g!#KFy-SEGEdQeIpw` z2?087yVC=8{B=3X{>F2k-TfJdNoRiSsBy-!NBH&>#^*+@$EZ;Lx1=2|t0>l!nwr|5 z($dJ&R6znT(uW%JQ=Mn3c#zV3AY$Eu+&d{!<*0C@CEsZ=-|R&FI=fI(va*AX2;&b= z!2Nydk40*=Ltf!6ZuzF`a4PHd03J@K$I=N66VnHfHF^Geu9Y5*_|`$0tlER5fMm_rO`_ak?{6ENjDGpOo-|$2G5O*!Y#Pt0OH^hH;mic$5JMO1C_{ z*e}a1XrJpmUZ0{Oul+<7KL2FY4uvK0MwOSBZ@OKy`b?{a)MM#iUrFZfThy zPMTK;OkAfJGtky10A)8f;{lp6uylX;aP=A3h8qxxIQmKu2o;1K1>+xw(&yFjPRFs= zb1^x@u&V}LKzOL-e+Ap6IB(t&IVj20xSi>hqjy(@4A-~J7v#UPYmXqo z>4$2LK(&7B!l@?m=OymT9hA}0L>=l_Zgwh|QyguA%f|e=>PtW^y3x}|;wNBy`{p^L zHvRa}%;PsYoZcrwqjr{+0wB&Npfz(iX!6nw4zbqYXZ5TF?>a{O3}|zl5AS0F>{ab~ z4~eB8#1U3UNSNT*`;zFFcqX2wU>-sh&e~TGUI?X2RMQEgIJkNA2=VIrdMr*(&f%pn z6;Pq{;R8PhXUjl>r0#jX}GiJge#G_&6z;gc)*gI1TF8 z*4h?W&jqU@ywBlcw&K2PzNV@4+G?_aq^ce9IDhSF^$r#3!^FZu#8zKy5RRXIc|~$e z+W9EIX7pAl+NXW>b^$b5K3Nc`Mgz&~?lf7zR_+-qck@=EEcw;_&G-2E_3mQ#x7{tG zu$6_^WWMyD)>cALetKhNWo2ME$*d;~s_4qMGA!VM?*XF*Rq4^BCMf(?w>H7PH@!;< z!g}**vRiJNgUAM)L?G|-8w7xyD>Q3WJqO<3mR+Np=vv!bpJxD)4yM>N$TuU)47>sn z@ruE%746H{tbywbdNs8&0Anb-tP#dd+cq@OqD^Pi%221~TnK%w_m)h{{0%>2-6v#? z$B;y?FRan8-lD`JO@aOyWDKZhs?v+cpN589V2p~6jyAW&c8vdn>NngzVSb#Kl<-dO zx;hMCNct%d4{+eg(#pzg+3T#WxTK`B)?|p{0#*b;*-U0_eP;9$=TP$w)nEu^U25Fw2!K+-jXP0?+qf|2ksG9=A6QP&r-}{j z4o3N6Y2x%wc%To#sLOvnKH5Hwa&O!{A?`jzO6D0q-JZ<1`|xwwtujOiXZ!7Evv~b zIW=Rqnl?_=8rTQS?ffm|$Ns$pgl6O4S==ps+G_x$cuXiK`=;a?J2G!9cUW^)rSV}$vNnQrv$x}IE_0%zau zee1E3P1!*mZ3j3Y(Atlz?;|6k{SSU?z66QtRX-8P+Yc@bR2f3SzDIZzOl_F{arE~X zWmtfhvDtxVW-wN+=?uK^eDshBc|_>ed~m8-YX|@Z>uG#?tZi~ytOm+xLeTkaY;54d zx><0M40zpJ+|HQx*OJXSWHexyF#H@pV00BF&@3Ma5gGOV$VvGH&xwn4|HOT0z=CUE zk~ZFBV&d$eiKjcgl5ue*oeZUM<)}7;SPyFVe7=vgH2@Nn2cP_JI9py;hQxA8^h7fS zt?TMPJUyQBeL_#0K60*%r9cNe;YSNwJMb}AqdIQjczQW8j-efs@UWc9PV7GteLL!f zJ_ph__t5|#;l_jl?TZa#KW}RFQIb3=)kmA6*6h!OyIa(Z3`4L^R@h4tk_o4M+C*x6 z^>E)+U2BsDdh@Xs;2(dlPG|e+R7er?@WeSk|F&tb#5H$m&?WIIu|^b2FN9Hmr&)P? zKo%6DywG61H??DfnTxnl>A%WF4S2aK3PfiQ7!*q?SzPEO8Z@i|LzMNmk?r%Z-^ z7Tkbg|Cw zW5Tg}nSR6|RPO?Kzn59|dG8ru1qZVjlD@#BN(^KHM~Wj<7E%rkJ)mC7?(XK};Q_rk zoXY79UGN?&A#%5E<5m!gP=`rC&O=cGXTz>Oy>5$&)T=5YVl0U;F+aq8gDp(yQMJp_ zx2Bb%t-6b?8oM>2^uCoM=RFxpkehI|-`ffh)ZINo`Mwocn?y}{^zG!J+BopV`kB@c z9>?^U8lCER|Mh+0k8pqPV#OXZ^}byoT0!nhV7|Wf6^^x%TNJim|7*Ga8N>_&f5Asn z;W=b_^@tJidYdTY+IWyrQ;B}|#-ePGFI6!wi6nX*&el!Go(svS)Dbom~$ zk@-#(^4Yem#IWTl9~$-T71c0b(XJONZ$)a%yMiWh_*hs72f@tj_%))>l(^KdeXk`W zRORexAKFsrk6kT4*lR_;UGMN_9}D^^xModXc1Yi4w7ddIWU11c{#cT^rQcUKRn)TuO-y@QMtQgd2paWi>J>XXBU9ShB0RH>QLPG=B^z`(&jsz)22E*9d zVOdo#fn942V2?LB>K4-1PqO@8A3ppPT?7L=Eki&xFcza>-$bGx5KuSEcgmHQgUNPvyKI!!)Z*I zIRgCYOU!y!nL1Rk()PJm+CYj0SxB!^IDXccx_RPDKh?HxX@n36m)#VJNZ424*p(k} zxzAV5d~w!1?+uro#sug8SYU|epaQ4u#k2`Bc|AGu{7@a4AkoCYL$_bZvq7ajmJEIj zp=I5MHnu`!iXH*K{mdG-QsVoC*BZ6J8Z=J}?z;0SxxZG?b_1l%gtgC5{dD-oP`yT4 zZI7w_bV?meKZWl^|9Fa!rvT6I98Jkj^xZ1s%W|y>KU`S1w)RQejNzUIB+N~ZC`sijdA$FOWypYW7ch&F2`jXkiy@b0=us1J z$d%iRp;5Jlb?iG~0+eVlBl@;_l2oPu;~%!TsO8?KH$5{$$$*XMb2FnJ&0xmxyDL_( z&UAvC=^5QN?TJyRao-E%zlZaNH^=x$Om(tE5fb3BE4UJx^?Y>-AzF28fVpBca=&*t zqhY_|B7H%<`a{Wt60{DO{_Slv0W=!p&Y%VBpF&_@*vW6zFG66}p4h%16}hyZg$ZgAn^~?}6De$~wQPsOh~?P1Ow*Iu|?HDNqjKMH14z z7ed4MBC0$g|Md9iTlEX>(>5(=46@k9fyZ}vi39^#@v;B=MJ!9&YtOM?M%?U3$8nhv ztD11}bBfMi0Iu)R;;Kfq;Hygbsn*YT0N_wS{^l24hg{~HQkR$23^6tH>q4`dl^aKD zF@YS&a{UGHGV{GD8G-md&;}Ni?zZaTSCq7f5fNMhXvJh?Bti+wS_~0?7AyxgUK4`JbF`VBEUVV0Bk?seSQBd01m{ zq)3HjL50gsiE6;Y!sLL0|4UbsfP8) z@#<rJgcTHB|Qh}K;q?ibSL*|0T$cGy2hK? zoa+q0e_);hI+BU=CR~}$zxWCGhR~zOAD@wL&rNk35_02a(#um|Z-3X1c#)961hk8X-5>u2!~;(z3~3*(f{%*gfe(@h-HgRDUjAzc)v$a`4U*pIa~ks_ zK@}(Q=QQu+^xt0ijg7non}cfWey1ykF~=$wMbhO9vTruv_fEZzCYD#^LMx5}Z-nVw zKMkAm`98ZtLqb@u{KazG8x5JUgaMW7G^0-y$_I5C_>b*%w;~DFN2+z`3)-(w*oGOY zHg>aG)=xbYoNAQ+dG|_zoTXmc!1W7Qn<3&qOqUXR|7zic8S?&jTAbL1_~uW+obfZz zbv;i8yHm5h>6&rquaEK095CO#T&Oee* zb!K94CWiAX>}H$KYi~HNF69!JfDt19g9m;Y-NC+Kl}LN2Rf$$ z0l2*zlnCQFtnFRYLKNWHFHB$$4W&H3qyP~6J2w3hFIK$M_xF^?+O^0!1ZW7fj<|VC zC$*7v^aaxI16dYq!P{l39En_vWJOWmmY=l)4>1rK$GnU7sXO5o+q@$E83AHN!O%@< zL6S8|uJmLW|4>xa0gw5VAM@0n@U;2E!;ttnmNj;|wP=S2SD>kq%+|6Mg1@|za@-h{ zSyln^j_^q6eL0miYCE0lSUNl@o$7J>HAZJ1uNl>==Zx0j>tza>PBWpluucp~uxRRs zbz03oJ6=qN=*1@NrUsn;nqOi_RW%nBuTOxI>&)_IKfWR^$BjPlTB9AwY^83L8Wo0Z zGSS_FS=I)(*X?>lgWpE2`L5p^Cd@k2)15v7DEEFSRLE6MXftY|3hiGO`O9nn*GFbl z$6nSjBOhHBcTAD^Uz@S<^5(K9%m>yO$1cnUhU@fp59A1(V%h$eSBl*9(OPowA)%`7 zrdOKZB%V#^PB{jl2yOqX0bgGo>RHIttTP`!>Ol$oe3{h!*^ktB_hHVlojqJo_xT{b zxL@q$_yxfAQp$Ddu{NG1a~d~VmBNRICiPaGAfjeE%znY~77ZJFo-h_UJxBzInearswNN-_EY+J3|GVZ`51qTOZf37f*q~u?$in(f; zK)vdia59|g*XkJ+88)mxTHdesuVHE1>)0F|ivUjG}Dhusxn zl1>X!Q28h^5AR|>=a@m#vg5M?fc7{SETFblR3R!0|3!rV5P7!i0{+9*!)IsKJiI_a zxdzUAt<6(SYN7+=tur-)+BwnLO!5LARdR7lU+#eT^= z>kXr0Z&oiiiD@k&T{Gax$_$j5qs*eDnDHubsI|G&QJhUY9c1vlGC>@w+8P_`?G&=J zCM;Lh`eA`@AoB1 zVC?e2Z(-W~QuFg4{6wI)qXRMjUv)1};qMXWD_WtO3@r&#D2+U&!v9qezt<2amfZgy z9ZB}C%}E1I7gheRW>`7vz?3~1F*Z>%Jl&jTWli-7Yf+YG>bvp@uN4&tVg*q{N#O8~ zc$(K^-~CPC;=6mKDW-EI9iYIZGMpd4Z|u-2BP)EIbCO{_On8v^CdMv(w&Yf(BBD zNKSEBup*Oy`QW+7%-3v99cKkBS6AJviL2v%%WNXu#;KUfrJFrJ1c#@|2t2{D9@(LT z%>wrK*UerPd26)+uZ6emuSLT?xv{=8?s<(rxLG>EGujNlB8*+%JX$W7MVjx2u2+#l zRboiaAkr;r##KH1pC9FdzxP7gha`^gFGo2X1;ZDYmWoPC!Ww8~ChBhWw>ow$4GXT%)!P#O8(1tG*=dS^!hC&5D-i8(wjQ6kn=>MdZ}}9GomcjG z%E~x5CZZE~Zi~Jr>72QV8IcKAynS5vTH>d{iHBm@}kt-UMi` zv6&f*%(LMBpa|UFz7a02fq@jv2giWUy~2_VKd$))6|4*-E^JCWO{T2`{Ws^jv{`M2 zKdaw!s6yaO3t@nr0jw{#*59Mr1a6k8i~bOzw@jP>Ik>?)Y05_x_}(949j0|@3Ryxx zAs3`}qiqimt3iM^>~XE;DtrD|OaT~3HGu4hHzUr4WbwI=iyu{sx5kcOnuo%=6elLl zaV4MC&|C_D4)G%lz)ZB)hrg6j41V`PO*3xHavzRqK>=J-q)rx=1yK#Uc7#pXZ?S-~ zYg;8|o|rtY`1}W*NT~T+DvNBJ5=E;VVShqu%x^%^F~`rUXFfH(K69?$7GNA~A-ZAs zM?5=i5By&(K`w;u|>7*EP=aGw*(_8g%tVe+~fl(fkzxA?YQF-eT??e8{{RO&esq>Ht)S*GBCIQWs)9ijA_t$*mL+$+@ zJ8fxC^vQC}=HH+ruJ6a`hzUo{tgM|{QrK_aR3kG&%(Y>W&Ko`9_dX}lJsk9}abEQ* zA-u`Z`gBzWOu6*Q=O*O#zvYJed(ysn1TMJa)DZs1p1x*|s0uNy;}+ zZEG8WWX!+K1*7WxI_SN0CuESp%3qgMb~E6^T&1pg={=IVFxW%NFQE4a-Y4C-vAv_c zXaN@~&piPb;%Se=^$U)i${K}h1O)QlDLHdpBcZRc4tgRS5U3$~x}QpL#Kx8cqEQKh z0!^~<&N(1mMqYYzKa{}yq6rUSwK5gfz68Gwp0D!i7oeOXb9)n&t!EyGqU2F-)Ya_> z@Re+|rJr26`m2GUbN0%v1sl-A&OrVlM2P`19k3+J_E7T>&T=2<+^z|t@bl5l6G%UB z)Mqh1tiGw9uQmtG=;AKv#RQ!Yu)2;)5&n~szF&UL3Kn{Ob9{TgaP^M{ZrZs2`Y~Sy zNpNje2(9=7axS8gGO_{pIPlNviXDSxoJ_WKAny3IZ-cSdTk^jo?<}~2mw#D5L&zOj zQ*1QU5SiBj3p^dASE&lgqQ8-Hz}gJg**QA$FKc-Thk9W}k}@Dw24t!RT?-I5M+vUQ z^+eRdf))rkl(e)Wbz58^K$!vtr_>z?1DmyMe5S*=T3^2g_0;tlJl|iu!*%WVJb6L)US&chiHlmvYNW`pW`bD(F(XII8&+rlSg ziiigAS!48pP~wnKxFgB7__CXMg|8y}ozQo9!ylH$TJI%%4c^Fc<^QccHGbWVxKevu z?=|e);__hg#(ha82rKYz^X~a#^01X(`|P0Nak>SaoFb(s?A8~v4ZyD>>Bv-TlwKNyq%^nLc!0#QoEQ+@OF1Y*`Bn_7|AgrF3|WKh;q` zdX#DPnMp2SK~dPYr2oB6*F=y#)Nvx2C!y&tGNXav>BtoPdpC<|kg4g2v*;U{Go)~Uaqyj? zKwA*)HMWX=DB4ewgw|`}5{TS!J+fw#H8g$myg2y`DgzA;ocz=zp_N)%3KPDn=!NEC zmbX(_V4BWL5<7jq_+4`Hm|J z9Mm)%gn0hI&)z3%Z@m<2WOBc`K7v?m7CGcDiMrZ-o*eOtET8N4aBokRU;+L*jq<_< zh=71$R{|(OppyTUbQ5-VLqjQ)g#wJmt}VKkzL#pFFd-2_vAC`_(@k3bMf5Bsk1Drh+@7zHX?ILzpLJ?68o-v^sd_tuCWElFfu$W?uAgbghi!LwN*x?{G2LP%~ipSkc&g1 zg7kp+CG$suC-zqes=HAQgpJfTxs=Tq0kgrjXl#Tq2HCzWMg9rv=+^-+mW998eJmPB zSRg4>HWBBGK2xJF?M%r$NwH=u%=%no;8_7}O*3+Fv16FMN0BJfO%QQOFmC{O`pO^IaJiOqb z6x4GO(Op5OMWW9cPoPv6D8}d>y1{e_+&Au$I5x$RQrd-N%H^;#h4xjw1j1=j)!uE?s)ScC$O$eERkM45t}(;HVOa{X#`^ zRg~{9esPtN+T@lRd=ou$d{^~A5F4+P={*a6s(>cyw`A0|=u>_W>oLCvumC|8A`d=j z{S+1YNOy-3XchBkx4PylkAoP4)B$L`20^w4>Qsi68LfTW{i<4Dlj$34l6kx6%x5VV=U3eVY`PN_ z+*UERI5mc(kup;VFVN*r5Fn$akn^K}5Z(9YcMXj*1y#kG+Ha%XAzN4*9w8mlbq6kX z4YMNTOwFvHh$}C7HEl+s1_84|CFncT!jACy3evfng=y$+OX5rLBt+CA%}wi82#MF& zKN7DICG>!jN=_`9Ob%Z;c+t4H5WcVV!vp<@DW(mv&N*()eTvfMMQx@NP&9rcTHtdD zBDwhs^0>BLvHqYD@`O26d+k}9Y_B;Fhm|o~TB-RIJKC$~G2br`>%+YDsV*0Uz(~=B z^Vayf@ow=!*#M>svS06jI9_f}%;!r%Po$F1rKF^!VPxzHfP!TK@*+t;e{ODsk@N!o zdz=)-dBsXgO>qmbb8%xprm&f5fasc>d$@<4i%2b{oUS7`ig=Zw?Pe4f%e!|k;L_Fn zZ!^-k6DEm1Xk(y-j`!;mu`S3YlW(RpHxY*L1<~;E2*2hdamQ9bQ6-u=wge4Eq01#Z zD_XI_@67yj)T>px0ApEP?#564gG9XQAL<}OGj!*^x`k<ujt%^7D6|21>DhA0qsK-s$nGIS|LA>U|e2nHozLnof0$=}h0ZbhOhrV znpz3nuZ0wxE&*jhh{g??abHZ>GHTG#EgbnD{N<~4G=av2A0aq+4A)j@Aqv4N8ahnS z;(eiMs20C}sa47FI=6<6nWB1s@ri&2eMVxlBV~qms(@CQ(MI*Bctl_3n?+I5`;$8@ zNv)mKn~NEvFn7nYgkaEYpV;Ug?{$6uvKibVWwH2;MH4Haf1zbG>Kr_~>l9hOP9Up) zSEns?uWwc3mVt9~b93*~g0}V;279;c6swv>h#ZE790n_h!=E)N1eEbi9=RONN_)f# zm&O<^HQ1!SPFlIYnt}5G!HGZBIV6LN@RZgF-yHiC%qTb_?_WgAd;wbx8R|(!s5K`= zF+qu~1Lt}VmGE8e9G#0ii^ZAliMVEx2k+7JJ4%AhhL6!{4`I5`L^1B89(lMh2c!nM zr^u1`1a(LeC5nkkdg)wVJbXlf!78QlvkRP|>{^VPNMC8|KN3<*7H4NpCGKU>{*(x& znsw3YZWIRE-en?NP~sJWSWzvr`@O4uj-6B+YMRZ)%XWGcZ>mqD#sNcpLrJSRs$VM7 zIy#(3s4d{dGEuln5zDv=PajY82miw`@bJ&Qx5DZA2|H&4y~w>w2_&KY4S^7u4}0gk z?QfdD{{j&^k=;aGRDML;FvGI2R=syBFwBk{=P`5|F@6DiRdKjEHK-AVbYZdZ5%Tl1 zA-O*y={8;rreIL{+lK9c*uZHR{$^|htd~Uz#jAT#S4{Kv>cAD;4zWlB3#&OhZvNf# zk?P(MCS_+mFFvKrCJL%nH%*A?Lsl~>bKpS!0lS^B+G%bAV}YK(Kj~u9s=XmfX+xEcW%Jt%lJ*lNy{ zO5v*qFf8!``umdjE611Sa;1=?5> z%7Eej7q?H;5#zhcc(*P47?SJp`6mUK&VcfXfqFvl0exVqAHnecya}bfRlCFfw!rIn ziOdw|+avTuA6=Z=aT65iXJp?a9kp zVS#C1lzau#V#sD{rhtG*9+Mr45stV+ZgHQ6Ril8Nd0j;f$Bg_>9efZw88!2|L2_G= zJXW6)y5CgAEX3FT9W2OM1if=wcsfdEg0nO0Yh9)`oTqX%90lPxMa(eWx$6Js*)r+Hw;)zF~7YMZwYkn11C5_ ztf`^Vw%2*rDto&M1#&P&mQ&cRDFN+Cc*)UJOJV=c{)C5)<+K&NEW(OeCW#`{>_gj! z64sL@_0LP0mZRdQXa|w4#fL=iUe@(TR?X{bgt{z-isgV1(7jM_J5jr@p&_T)mkqB~ zO0P2re;#&ND#z90=Xk9_hGlu+$!9iuZ;hp#C%TxrZcTDDI6cn?PGos~dFV#P$(N%f z?hxh63Q+C6nmK}`g|=|*Us7p2H9{5?GmBTF|9gIvO8!M=hV-Fh8kz4@qO`e5U9_GM z8KJMQ1O>grC8I^giUUEtRc2&*phyotf#>$;huSvS1REIsX9m)s5R1ACk-|gDe*JEP z@60PNBgRMqtp-K_a=Q^W=}HB?z}1{`5sc|CP$F7-B}z7MbSqwt!oN}kg{sy0Tum2A zjRLq{t}R3W^fgjU#=*P@fRgX%WWJ^Xu1sCVxe>ng^8=!&p=*ri^pwqaA0Wjwtt|LhvTlw}Jac;PL6+Vg?G#$aLa8?A;Z{u}ZMyO_z0qe;tT-mt6 zIIB0RFC`Db-=Ro?sfH1I2sug~*r@KFN^Ym^8E|6Z8APso4X=%Co6ZbYd1whgZWDzn zSb@8v3zGR+^a-Kjtf3MGR5DndomUjns$bRAq1t2xsIw9W8r%R|Tz@7^ib=qrMZ;m( zEa{74`~d1)a35EIn_gI<&dwe9QR^8o$DYTVVJb%8A@n3DW5I=8! zXHLE!QiG=H4t3mK<@2x;{!|btpS#0oFz=zE2UHvte&Jm2cU4j`?u04m&-9>Aa4=p@bX zp>gSBP^Z5VO>kl47*IF}m;2Rs8NVfC5Qj@r?O)dXFY)3g-7dAX+p)2)EjZcfd=yv5 z?iWRbk!oP-Ok*%|?j2)VnL2Yr09pv?G)A`cMsvj)uV%7Cp0%#eV|##RhgN*kM!Q&X zQ(JHu+eubdkt?$ZukHVCf*CoJ`+gI24Y-;cM36IxzK4q?5cjL1|78!Ao5Nl?X4wyq zD*Cc{g*k2(0uA~Ez=2fB*}R3U9Q@M1tVKVHctJ&lFw>_XlN{!cY13_qb8AtdC3pWQ7f)z%_*Zc1* zP4gc!LvlNoi@q?WD=eeSEezCPQtio;tmrmpwSOg!AFoc_;E?p{hY~GAQD@<_GWlt6 z{5qu9A%;It+HFwQ;DU@fDbp9M3xSkz&;7;L#T@t*%eIl=9j5@`yCea>5@_90osL$q zE@Dy5dF9-gA(yQlNpLPS*2XT(EeChN4WxD8mn)@XgWG~uk?5{UYDl89tS`W&g-7Agxx1eSx~7rkUA0FL80G6$dQ-h?WA~;eQ24L@~V#_IySQ~2D@U=X9jc{ zeZS}7mxcx;8cB^JdfTr^R_pn{btsRB)dVf1TtZ$UwIEZLw0d5<2YL(A z5!J($$^(5k&?~ws#Ufas`phdqhRLeWAh<58_UXHr5Z!t-ze@+&oh~eL%ravzfNtfg z&AZST^4bkR21l!0K#{^#*#WoIm{%jXpe9LCVbUQJt&zEf(S8Wi4f~}kf#m3*Y{jN* z$3Ue9&wkGvc!k$(Aj&}`;}QN4nzeHmR0X}e1kUGU!cmD>b1tTY_F&GQw34JFE8ady zZ1jgvU`5GZET*J#3X+$gx;me^=#m+J*uuw>t5vkvbXj#gz8HcEDwoX?%pfg4oObEnyXT-Aw`}6e#2Sm+-$GnAl_%JnpsxKBWt3M zA7q|bG1Lf0fwR3e2t$>*P24VVclF+q6%Ie4GNY z3*;o~g>u}#X|uXv^O08u&ETbHAStz8YNJGdiE1+aV(^PEAez-)oD@f>7xD;YCVwo0C zy7@xZ$NC&yX`%C8-Nr#(19`6UxV~(y6JRj@xX#&gzAquG$z_Tu|&W$T86JpPj@Jy1%`#<(%vj z@}|nyD3|`&)`tDRueXQtAU4YU($3d0@^(bHdrU<&=<;xCCQpjk?+$P8vofUkAk1PtH|F33lUs=$+b$BA-E z%hTHw6if&h=FSu)U`Raux1ewMQ;=|_PxL;c3IotREv_5s2c6rm^q9&C6lwuK>fS!n zM;{3Jyd(>ON}zkd9M~U{h}Ijyk(a8tkvfB4NLRVsd2<+%hrFNF_r| zZ%43tzDE-ElagOJ=w}h^UwGP86_FPZ<8VM+XvgA|4A;x+8MFOxrq^@vx=H&av-yQo zwCI!TGk5z6Y6rv*XL56vX%X>p)Z!d?1?Vl?sL$^GeM!F}!YA%@piCxI71drdhC0C;hSe*vTb1j+tark|Ln`XkdRIh|4=?82o9G2 z9k}1^eL&z;qh2ehAUO>+mG70*P(hyq2_pA>+Z$TT%@@BLu*7Ykcj&vhA&NnM4D1?g zZ|{(U(ld5claAmJXZQ3r6K|gOiOu`yFe5yDuIhj1lyhG`r_2QAIz)PirEVdo{GdTUe_eT^cPvvJs@dKrUIT(!f1@68c#r>q_K~+%_NdNa+e|SQwF=^GUxfA2W(77XFw|lQy{3WFu<` zmh+!u0jgtiQdhBGNRBwA8+cay=J{`nws)mm)vCJ)<-qsznxfu$LG0~+!ub)e zPyADB=f4LF_I~3*o3p`%s7n2bEXEK~LNe7wU0$e7E z<4^c9$#3pI&vu}StrE%nIzOu|m9`80C4unDYfx{oYsbAgRhE0ns!#Ro)JS@>q8$`w zh0$-i81{Yg@kpgqMXX}oPfxK0Shn2+1+}owfxn9cxKZ59;gG)rc>DNZ97wN=3BHmSVN8|%JqdQajf zDD%o%fqTTh_@L^dBAmUu>#lp~4^aSt+addYJbnv-QGh(S(;(@*I$xKp#!CmXY z0KUeH7=(p#$I3vuKOZORc%sOS-y$~>xKlLYJAQDG^{X#mpcJ%1SQe!`xKCD=RqNrz z8fC}MN&?b}uZ6X!Zs{v82MrQk^HSn<+q-y5%nSLK*19X0aRYhrMihTBXoz({R>WeH zc)&$-;;^v6>LBZ*#7$!f$WIAdned-6y5QqdN2b4k?%P(jN<=ShdXoN{vUI*y6WPh( zM;H2hfd=VNNE*3GK!VN{3En9D*D;&aR3aNltYOztTUW5)RjI)k?z%V;6E6*T?w=Up z-gyuho{a;q`WYd6^oNdA_iJE=2)Uy#j>&9VG@?aRfZslxM&-nNcb?+gcr}TIv=cEz z8(xqQx+U6tUiz`p`~&QVJH&o*IApW*eN;p+rr+zHMd{k!;2=f3AREC|?d3=G2gNLOrnJx*PB<68D~qttuJ<3i zcp8_UHio6i<*BFe(mn+im4>C?+f+!U_OHj)6cx>>y@A%h47Jk<3oj=KYu&1GOUPlK z?B6$G5Rtg$e!tTODwzQZygfQw-&ebF&r{{Ez}t>kpcGwIQX$t)6DC3{tA?8$#K_3S zLg!=%R3DLW&s}*Kdcojj6@*hxqBG#ysl}~PfqN*}VIOzcGG4AHlc+siv=^r+RJ4cJ zz%9{q*SzdD;+cMoziqTQ_Ar#|cwOiHnteLS#B z+XWCo=ZjvjQ@&Abl*2o+yIYr(SFE>+XB)rlMxa1{8obR_J3y>0;!@;>oT&3}pY8B9 zH`W0Ag*44ky_dp7_T(f zhudsO5x7#%q6FS#)XS65`w$eBmD>2KWFMcdC^$!xv7sMjvLD4L;uo`*s4d5N%IRon zX;?z2!Au{%YfoB0ftX(ZK_9>E(1X@rDeax?<4C726=QrDnjnGs%<}KtY3CVRy%Yx53GW}{W-i} zu7i#?QuG?7b)XJN5&z*__5*zK+5?S@g7)9~lAr)yqqF zt&Kh`afq*b!_*WFN4GuLe*@>244(M&XPQ4TAa`Almed z)CQ@=0(rS>4Oa<~BxoHhSRyV0#Z17CcnM?PFXS#a>0{F)*@pwrhn7l$O-PuyeY;UhSjf>uU?T8cSz$yM75Rvnv(}y})i0_J_kc*Y ztq(`m{8&`#U212*g?ovE6#jhP@loZCjnZ;7B%eqsDIX>}&W;T2A5;W-V=K>ejef=< zI+$;UvPtHP>s#SX`HGX4An9?b0?+@bpfcvGYRPiefVt_gayG@ZnD)2j+gFniX7AFOhXr`(DuCLUkGDS+3wv@OVchGnHFiG9nJ=;xo)C zBB|?nvMNk?PPm*cZCH4zDys1#8%vc9O;z{_`lFAG3y-NTXNTC$)h9|8GI8+QLye`T zZ?+^vnM~#>a~PS|gunOQtjkR}0l=F)DaJW2*ybYt4W2j}=})fQ09%!E10t+#E2Ioe zR@?fCY{BT1+3QKX87oWll$FQD<5d$hCcehu(k_wb;y7WkPP2l^`CQ zoqmff^v&?>@ATVSqdg;&5S|msF0I93cHxove|Y)|s5qJ?+GTMGP9V6u1%f89Xwcvq zJUGE6xI4k!A-Dw#?i$=J!DaE_y679e|GhWo>;cXWJF{I?w{G3;>0+#hR|-!w&h{>= zQsno&pg@=P7B>|Qx7sm<02%uU0GW!if59vJsnK?fOmQ^v-lFG=R|i!F|1|LV)d?{0 zW&~SjW`(H>tRDLtK62J?|0$T_zY1o`z9)P5&5H3nrXT5XV_~v&AOmurHjh9-njXrO z1*6twMWb@zre*}StF)CAt#wC`#A7`dQ+wPxz2KYlr7IO(;rRCl6ID1De`*~TT%uPD zLXqslZl(q~e~3k5gJj2VpRMY+V-;E~3{=?Wo-TYmafGY9OIY=J*IXUk)6~LwH5KPN zpkLW{gSI9C+YGNg8FU1k^;XD-B1MNAq=(NZV=33%v;8TgV?Wz6VI@4}iT0n3U?9A@ zE-Y-P+Pvv$Sl|RwqS4)&?)Qb&_hA>qvU)t@K96Moe90^xFV#R@FuQ-aEo;6FR-Q3xMf=E=z`lga=S<|*&xwR{2p((1%JFMPLxq*CPV{d zttH_GyI7Zd|Id&|gU3hhz2gs2#?SKscLR;^hgSm&kdFVjrSeEImGWCwwn7Ch?-3$| z^VV$gAC*r(o)iHHyb5#@En+l$T2eZ{YV{X7CH(a5^-y$~Ej4X{7Y;0S_3u$76pmkl zM)kPUnlj+3TvabXe#D%6t{mG%ITT3U0m2WyT~um^EgnGUVuzM*r?qN5g|;JgF~@xM z3iW#Lc3L{1;!lISk%QxMU-`Q4F4c5-?!Wx0>V&6k+cO||DJ5Cky;|g+1ZCyy#~ODw zCM`)Qyw365lZNI5?w&@XX9A@0)^GW7VfmSXLDvS>uAQ3M${XneRq5VunZI>zv#avm zjBaox*ljM!moClBe2-YM+bH`>2yZWcynGY4VA=T;eVF3@!e%4L>nSoHU_9ump9!+V z(oj;Z@-oApx~W8=8>*-~_r`ME?DxrRi@Z8|YU2P=c&Pg+_3~2kW%@ZfHfOrH9B6fr z{B>kx*_j=m^1`zf`4aN@plEuGnz*v<9P<28k~#3}N& zspB8b^3&nYhSnv_#H7uxd$K?Es7+tRpN)?VI6n&4m%>*e>``{qRwXVF%873iXwJZ}f6zwy79gw$6bFsB2iFzQAmSqGErg zuMaQVbhFbUqOE5M+vRf~$C&d?YeSp-v|GvJC@(vv(H=#!EZVyK<&B)`Sa$Hv#@1B- z1bv`V+jSOdsEE*Ejl3?s{bn(e7IyeF?0$-WlpW{%p9GWe*Q90yEa{u@Oz?W(vA#T9 zwMuhm3Q#+DD%+3z@>Wq2NW3`(kl4Mgl~9c#PDnqRojlSB0ZnYE z&aUHX@`eNJ7c`{*#hjn`b@x!wFk==d-i4`6QhQun=~pr4^djiAlq9@jI#Vk-`>j-VSWnwpQ@NvTvU=5OhX7s$8RB}t%lYxxpS zS29cq`{)tZ1-OA6b#qxyG0+>MK;l?d0o$Bmc zHXY0tT;P>F{O$1Z@jE~xHDdB(_NO{0END(!RDgc{Y|gjpehB}N5PuPi2NBzzxZa4Y ziuwJ9KPsFr8`WW+@!@X6dnkYb?&Rp|Z9tX7sg zJW;E)wbe_RA#ZxXUA_*;NdJA-HKh(fNJ2P2fnp7M!=uyrGlyTup5TTYxB|wHj>k>8 zyxzcM>aP#y61cj^>Asb-vfsn{dE2Seh}v=TYei_&PT0Gq4azYwP)i|1=aY-=f3hoW zXj_@VII)+I+H%6U+TMbMtPfdwv>7LPuZw%P{`};G3R=l3o?4g(D?G8M@(&B`Jhxr= ztZs?>cu9mbH7hr+ZN9`r-E0Ewezdl_3N;q3Y;|Qh1KZJ1WduSrb>TG|fEY%|kl1ON zzJLE#^<95{QK9oK!e%EX>2YWX7*f8x*?`aNNT{OmuL`Z8`G)Vzom3xwK%Mjsg^M3R z^V))$Z;#8&6D9VjYuhqkzy;Kjfv4OfK@@EFWwg`WKB>Xt#WpF1XWwpv7xk&73oM>2 z{%URmNm*Xbvo}AdSs*oR@5Q6GX5-Z0-WTineP8<%$R{iJ((i1`$qkScUsAf}O2xk; zr;+s?^MItww@@p_b?ol%khgHpYw*v^&W}@9f6*nNZnCdc3bWt;-A?z0J>gNV>@9hL zU#Tg*vsE|cxb~eyuR<}*I#1$o#%W9&zN8KjZRoXYE?d;Jcn<*md)v%NWjoicNXz20 zj2v%he1{dtMjEHcAhSUaOjP8aoKnT?sNYT1oTvwcd^N;6^x>2U&<*+sOVyJm&v?u? z^IT){UX5GPb;ABi4JMbLj`Xs^f=MPM?(w9QU#&;U zXe5;z-ckD@@U(xwYb8X54!Fqe+oF2}V+XVxbF5)P32`2B9eWx*Qj-p3{aig~24ZKs zvk1M3L8n7Pc14dq$txM^0uQ0TrfIN!J*R&U*5YQ~Lf=I`%-Dju+FYoV| zSxa{2bcc~uB*G8wA5Igu+)d9{i}uW^gEMcN@3WQto&E^?Wuh|!o;J#YWVcM*6NJBW zQKt*|K!hYhjPr2Bq+>tR7L8&Skd75INNEreg)br)f?`Ou^AWQHpKM*C(Q$e|DTFSX zK*Txd-P*NVS^@Xmo7cB0)_5#}(Jn3+@B;&3Ln8h@2ac$6aKQ{iIPS{ecluR)|HT z@=H6&KjHYf0!7jWupHe_yyQjMmN`=L#vUpd9m*~1aKJ5DqL5BoV*#Mx5Fz%XUvqdW zewUXhbc7}S>gF3(5vNmutOg^fK#3rBaSAOw+*nS?38#`+n@U}bnD(K>PqZu+mPn!@ z!5i1bvFt|gbHObYM?GVVKh?+*96Ps`vz=<3aEPO-ccbfAS#TA0VHqgf28iRto(ACb zYchuscO?{eFg{e){3j3T``I>PVUb6AUv56*OPVYLPD| zZluHMb9%3O+owh?wy3*^d?YPfE-&n0;NM-JSnnsFae2pO$)r*H@neOiD z>=r(G+Z_lvHoCC0KmMZybshVQK;|U_I#pQ*YO=Amp!`aVsW)WS;pGS3L zv0NTdSQ$9{W4-h^n_~ITiD#q=7+=@yx+%23if{#M1|(B~PQrUvw7Q}Rae$mwz|(*L zu{p%iHOd$4q4cxzc&)N_i}t7Njc%y!@1BW{g7I@+zxrO5pYp=%J`M&C^CtgbH~)#F z-y|`)975udLLOFLY;dGV>M}QQ%@Ez<6AojJ)i2t5nK{v)kjpB~NZ^1-a4gw*Wyt=k zO@QhRz^-WkbvQ@8Hqa`Gdf=KgqlW^!RZApT&{2U_)^*+96PMW5a<3FL?v3#J>N zmuNW1Eep&9y{>JjHZUnuT+ryEYO~7ja%#O75hWH(u;aB)ICXvv>K!Sz`TLtEMR;EX z;S^8^F7-}_-sSunUKK7;F0xW+=M*XWMC~{6?JA5z9W%jH4518k-WBdO_%q$M-<8@T z=l)Q{h7C%JodzbY?UlilgdRwzmVx30_;YwcrQ4I4pjg|IZP=^YLFBUM6?pIIS0bBJ z?H?pD{WH4JU-?lz%VBnGhHJLEwO*9wz{EK|cMG{G0zWVEW3(jB*=?rF5#|FDKfpxpVt*Q+{t zNuJLWY(VQi43gCfLz#aZ((o|OIUs*Ssu~-bI|A5@e>V-(MZO7y+^@r*4jNGhNR5*m zrW0f}j8zT8lxU#0ncM0GAC@#44QjXxz80^DR)8X4{&uA9BO?9$z%e*NF1>r(KxL z$o7Mjxr*{X#g&BP6N{i;4VOf5U2nt+B&R}T9{8nUg2lf`p51Ck==^{Qt&m#wN{XPr z&x`}fD7m(5`s$V=5{_teCI!xOBJ05H5Fw*XRKBcO789eyqr!cVa%T=chv>Xwk!Chh zaG*2_oyAj0%Tj_h{vu`<6~sXHbKA>g;-~xQu)hgGZ4W}`ozWx=TRFT>OxSY?Qj_2( z`4Izhv!NFBGQFO`$J<&&zf-Qg_jAC8PjK&7tuE9<*yI0}A0Yz$kszvFVd>=bKo4n3 z`~4JpB=)DLP7jvqg zGGX&4Nweu)bAl`1z)|p%kg#4mPkvZ|ap{L7kVid(Dg^u%&Rpdr>{J<{y5-fNjXOU_ zA;(}M2R_32V+*9Hb{&c;G=!lqzZMi6!L{uB$v$r@wH^3JUy0{ClSE z`E*m1O#{ck*jo;aT{sE0<7UE)z4nUdpQ~Rnr)f~c^IG+Yk$?IRCQZRrS+z5m-U5Fc zw0l_}9z%=!AelV6uf@RX;F6CucQW^R;_PUKu?U04L~;)rTv~=M-b;=?KvFK>+MCJh{uPw#kXG``H927U)nI3iR(tftIm#)1+bIWQ+5XE&JNBps=M&O9_9Ek6KV%B0|A48YmW^MZwP)`zAG^OKxCpaFIr8lI!9hmSd4R)f!E&iBJVMQ_J)MC` zr)mO*Z;b_WozL6PJ*Kjp!y_6@Eq8wBxa(g)D|k{HKy}m6^rKB)KlXvVuc;IvvY2s5 z3T`xUkq!-!Q^(yQ?T3@-A8$$mZ2Qq}Qe{avcxfH?pacjdq*Ea9X)=xxjh*sYq?5K< zX)`Ywhp>A_l&(3G-|1=^%Rj#s1!}OT?jx-SUdIOdbfyLa(%j82ErN7Aj<5!}N0|ix zP74h32%L3LjCLUywb_}dxw5MfQKN`(*-dE)^NZC+dm~4W?xfJBqGuq{^rL!8BW)*xMJDnkqyAlE%W==PRU2d^`@d}aS~nLZ8Y;fz)-#m z$$e{=MoJcRI~Ry9Cb&BTNWcqa4WtbC8oaUr7xMG zTdBTCcwQ`iB#~+TBHfw_nb;1o5HWFTDqm~u(5*7x5@X=rj}vQmXqXQ3-VG4>`fYZJ zEpN{CJv*%~jJlC_rM(t;++)MqM*!vGYDw#LP8LPCC^ zEqEfrbk_3bq1yBtGmScfi$rQ6{5K9CLWDJ-6_?KZPK>`cs5-Hf zJw{98g3q|+Y@T+^S1t+-pG2OWKCtP*o>yz$>|%$4g8ao~g%#o7y&nJ6Vrus7`C4FO z&C}=H|9)Qk z2@4)1Wu6At%>8W)>_$7q330pLG95ZQff_N0ZgTCh7uq##)jGRkorqKIs`-u;K0a+W z4Ke$@F0JdO^yuU1#soa*o#-2WEF)p6(2dBS!WM1^Z)~4 zK=#{0L$$80*uj(eN?^Dgh$dR(8L{RW1NgU^EhS(_Z-L1#DqZ-|nbTd?)fIEj+(Ne6 z8H(Uvf`t_Vs$paf>HaK!$xR1*VT4$p=QsFgl!yufN4bqsgDC1N%-+k~M!^{LKcs$` za6UOR7ss~%uC%2xFH?}$GlXxm6SRJ&HNCj&VlZHotY@wr%9a2wqJ$QJ&Pg6f8oVFZ z{$4ksQGMRxf`@$39t(MRr5B54sMfXFWekiQVBM5N9;3ogN@V-M(>SIsE22rqP@5Q< zc!K)jkJ=!RR4@`LU2Iq>u;eLUZkTxGSN8FJZeVvU)7|SyN3r3StBLfGY@|00`g(eP2Q!-D*P`}fG@_-Gk8Pjce}q3N7qs$Lenxd zV2|YH$B-T%4k+mQF#Tt*zI`4h=B7Z1(XnauDZqa3JmJxD;%-HsdwO_v*x=1j=>6k9 zE5*IsW+7#OQKUbZa@QZO6&FR4E(2xVZPG-0tk{3?{TK4*tK|B>w7yXkfDtaFROY98 z`9}%BZtFvUzsO$!Mi^`F3hK7Sjo>;BIj;KByylWSCjv5T!v5L+=XW=*Q*7a`*A6@a#)ZQEQU@`EF|wu>hI!7N2GtByYM5wQ2T9(ziqQ5IS2MR8q37z zuY6KRnIhgfS9%HHPq(~EazPe=1FrQy`MwhyxMZY)^P)9f`8*=nHeZVw`d6x@Gve=9 zzz!9h6dVQ@cb7;6rL8ori8wV*THdd&hN@1U(qUvh-nfhoG|<3~6UgD?QChW(Qf8@z>JpwfGZIdWStGxFy! z(kYKZQOaS)0qZ8VW?VFwUa%$jYi)(u@J+Gj#`gqDeu93ib;gi zj0QaeWdvrmw<3Hv$U*{D_<4+vh)B~qcZOZyrH&?Mrl3ay#sv>Kjizz+M4mk$e# z6o42=M#LUKLU>O-3TD?w&q7(B58R6pwOtn+g z8&rnvfh&=NpE;`-d7ocL%TH#h%m+Pc^iWun$+(=UaZTvX4pSCx@dF_(XYEPqz2_Bl z)}?CaaYg?9Fgve4Z0-nv@9fqPRv-yUftQ>d2sfZNb%{Jc=1{(P^%}3l&Y`(a$+n~9 zK()$ArEl*!HzkaP9vu{m(Ls<`-`3^w2e}T6QovBe{_z7jm%vV+U6d)AZAxvW-f#;~ zvPA(!OM>^?G@02!NrL{_d4B}qjq{VjF3}E7uf&m_Qyx+E!YUwT zQj$wwI?BVh8W-FhJZtfic@=;D0e z%BBw3Sy(;{C35IL(VF%)bepb_?fzut-G3=I6fSTjsV=r!x2|-JDeY zcaZqn=uVXBZ`2{m3BAD$dY$}l@Ox+0O@4t&ILlu{*>^R1$7DO% z3@IS(0bk9C6(eU?%B!z7{jtuNbA4baOyn28mvb(Ud%ixfm~Wczr&u^PhH;dk%4*v= zHtq&1BIZZar|Sr$@tvE*kz4F3Fe#UF#1&-RGm_d@Qsn3bKaGbNuZ_g&(Dx1xFi+`&pZ%9 zy=5rR8#yN&Ccc9{W?i-aS&BpT86?B0V_)L_vDIaj6ci z4`)%NC2;+wajZ`kFWB_6K~K@Qw=(9*;H!3MYe5AnGa}-ruC(cjQ)FWBPOWYQ2Xfb5;`5#`709FY+HC!cY8+D;@@Fd;E1Fk48QkZl;?<+!1i~$uY}K82&*`_6ZM825^pL0N2 zgK;>Jm>ju3{58MwpsKe4u(~(_j;cQ|z;swq8hFw;>MoDQ;jccnfIDmQ(_!p>VfCbd ze*lz&_nnSrSZ22aJ9(T#^@HqR*qLu?>-+&FdNgv>9hn}D1+GG)<2g{-fG*@8f zsnfZ~)aZtR)+KQT=4(=nDeJ9<2cf#vtF`HbKr%NJ_H#fAKtNR>3OLW%D$}X#W2K*oC4j4+<-%YIDe#e1MB<%Z3+TAbPF=6D;rL*SK z`ucH~veg_p0NhRJ#%5@ns=B+Dx4a+>%)0kU+ZCg*2neFE>J_V{tF+&_AO7m|6!tS2 zzTUpnIlMjdF$HL;#(m98j$qT~@D3}%loJesk3Qe67wrA{&&@Hh_#LxfehHazH)h@P zCL`6i<+x0&cUw3a6w5E^7S;OZ&L$E2eKcK4Sib3I8~%qX&+y`m=H7+@Wp8~^Mu&g| zHL?<{;5KZP^uidefF1t9oMC};RKJ7Qo21!X2l78{Pj>~wwZMZ)=V}NM z4&Clqo9?>9ExGdFfJpi!G3+&jGvG~8H}S&&ai)A#cfhaen+R5J1cp^aiVWdo#!s%R zf%2b%;2-+C@MB2eROWSD!5?##;;zN!@& zT%{M5tU2b=8Bp+3>OErRaU^E>&3@>VIkTL@>ry_4vqMLS_3jul(^xgs&OoR4lX!{{ z1tXCya5!(n$3s=aDR`4g&&WZM z%2)#!p8~*Gk*1OHeG#lk`Jz1CA2hBe8uXI6s>8%tokm(j77~ic|6^Ko0V|oq+Gl2iLts3Gi~=(8?N!nsWuqR`14Do=j~soO$MA-RD~&` zRg@*1FJCDK$t*4=gCeI%EcW}L`rgCf&(Z@sBQ0$-YQHpjG3CJNN{rWzePg4u3|Y7q z*c4m>xl$`gx%^=kiH!7IWz^F3vvOHVIF0vXA|mVvV=)<0x*Yy3gVxjm%7we(@4>0m z#=Z1@i8h8N5*&tq)mjHw%LQ~=m^z(AS4AnI7FrlkEPF5;65iWsHYZo4>a060c~t38 z=GT9}wYU6Jo6Qx8X*!7E7JmYe*dP)(m;5&kyvj%0Uq>F0iwY{=zj5CM`EdVK;xh4Q z{YxAm9x@6XB&RDwBE{XSH!&c}^~>8J7v(oH{$aC#+`bu#xh?XY;!3E*l&C#yB|kaA zs|CGeY{z5Mm7UYl5D667nd6U%4}B{iHs1tR;Ywo-0rzOEM3!l`O%|rX<)u|M3zqKi zMjDfcZ3(Ub{sc)pXAy0;Ab2kwjxmkwIf*SI9*+@1ycr=ePiHbtx5y@q|Le^kLwj+a z=a1W=B#nnMZ`%`3r5CRP)$W5Bq>h#fLEwmgsii%)*sBY z#}0WUyf^~}ZIpaMf<%qMyquh2uN^XUE#R(y8~_C#WOFb{OMbsNPyZ=yVF_8D@!j*9 z(tsa>Um%rsssDe6=$YY)1{L8%9QA!RJRxEgBB?nV28bVSl)2%GD3qAIrea5IL5`QG z2@n*Ju5}7t{t4U(wOi46Yq;APfI`WZfyW28_1$~mlXNJxpz$UA+b}E$g@DSF7gQRk zD5Rc}NpCWZIqPa{%VQ4$eJSza0-g89s}_8e%Y#Jq%@J|Bf`NjH43HTV%rA{ZzWe>6 z#jIzlY`{=IMVM2jK4x705nYwZPu1bLDPc_?A0i?4#J`VaYKYBq8|cfJiXMvldLr)2 z87Wh39Gl=Sd=kJR;P+hpkE%sSHYMs2qW%3v(Euc~X3lM1d$lRXUNC{(=l|V$mp#Hs z4uN~`aI6trqN<|+Utete?imM;45^OjoX`2J>FxbM1pgq#dYc<@3RYnCy5{3qpcksx zR?#KzJ6l|p72a9wqrv^QMBiE0~q z@6H*=PpY{hem0XR{SIih$vd!uS^w$N4sqDgFL10wW4G5RL&e16b5KF&L$B}m&6!iX z*h|#bs^)(wmaGBf6vEeDx;?_r2LhT)>n@+5o>?X&a(X1^WETPXep^97c%VEdl-*&! zGXfS;KnHMQP`ZzzKCda@?ceaV0Jay1oT#|UH6`QirbIFdU|}lgnQSO|>`b1RIMN?c zXBsVX-cM|lH~vwU4U0|?d^&6pWVYC%r(!9;yhnCXC{b9&e9~KR&1#;v^W-YcXmL=w zIa5h*KbXh>@d8|niRo(y`V?`}eiEKQ83ibsg|-@CwThr$d(Tap)V?2Jf(=n|y2p*|y*oLIdGgCo?`3r#Z89Jqr++2hukaw~$k8>RtJ zTBU_+>+L%mtSCF+j@~b}-;C|Bq?`zBN+_|7#FUE^bzEHJ<0{-Kc<(IGKNjg{w0xZ! zq0Mx~Mlq!+zLMtCnm=F+*GMqsp-8D!0OzhIP^L0z~yqF?2r%enWy0N>j2;bX-2$$WahI1?_VHr1XnW>J?^KR10(8rsYW3EDemN^qAYX1kcmC@A$a%S7Sf^-?ATW zfC3w&Ag9eeOSp##|DqM~$jmjS4(5b|qOtmM{l6Z&28wN%3PR0z=P-(wa#E5?vvqUR z?c3EvviA8XHlz7vRl>kK0P}C_8+2M3$ zD%$=XV=}((H;lt;FQr=Q^bQdbegJZ@hHTQU!{sJ|>|3sPT(`hY#;S!9e#`d$z=2y5 zFbh%0<0>_jz()U>vVc{PvcHWy_y{L(uKqmBYrl7=5ELVg%n)Hk;rJ7hqsE*TrY(G= zbU3aNt;s1{DN4CaIQf0hJ1`4SswAg@V8$I-e*OTRh;Y zzNopnxHFaMkfmJ7BVaRTA~^Pl^hG3O3^Ple_D5Jk7Szw;Vgb6`4DkkNMfJe;noGG78i`i?r=*feDDX90}p zjSXXIc<{{(%S^7_nM$opVGtuC|$3oc545 z)u4uOz1{D#UwW!8m8aCcmy=LvjQH+t)yP0HhuZl7Jd*SMPOENay0OBmj&(ErE~A&0m+HIs!{@hswx2lu!d`2*^D0g|`0Za6Mif}4+>O7W35&lj{%z$xo-2c!tqRH*4;#>c)tqrZ#6`m&V5TYX zxCG(7sMRm3t+C2HFyp`vyXS8flqK4KzgSp7LroMsT>HBg6QWXJ#kv8=pv7VPUL%9M ze*k^X9Z*|*Si8=&EtbBF4<+OgRo=*B?{#v;iW(^m8R%%*5#wx?84>}6G~hkpuJtbS z4cXxhmHL{G`6nOh?SLlAot{7ynS#fMyTAYl-|G1Dc|aF%sNmZ%MUQF5aII2wCygYMQ%6P3&k zA>;6|@sM#czP&KgmjXMy@0glPLPU?o`O<@m2PB{r6fn~ll!Cl~K(wAyE95FA*1u2xWpHw%jW!BPf&Sn(xn3H{pjsVYDmwShU+5lM4k#bq^NNJpX){SX(3(ra=Zbil73bBjw>rxyFkVBwFWfs(gsZDvmvK!2xyV2aHW03ycY{8<9WAF=q>Obig6 z%&6sGl+s@b_YQsgS})=$AVRkL03IC;IB%RK{;9@k8@W#vs z_yv0#L61REJK-xVu|<-Hd&Y{89lFqrnCXu`zfaE7)(M-uF=kX0TqS9duFm zfuhP6(CX0(26G8->*akrv)b0+&%VUK9iVpsmnlBfZ?}WF7t~PpcM^%(lBVfv$sFxo zhzj2Xjz5&qXu;C;ocuo{*Z)-Fu9JP|EJ{|!RF^O0DJ;lw#h3!j{f>3%n;9k1-n~LP zqyEs+;21wZ69{K_#iWT>J&rLplqPH2)U0nle67=YtW{-*xvFt>E4FTGwj;_P958%L zh>%BveLw;g;Vy)>n3WulX{+M_AdtmS$cmiDgIZpOP@fc_HmF8n!etE!iv3Mp>~A3I7`KI5vKTE=r;;sT18t zpNC^-`mx+WB0id3M_ny{$^%!ih9vFU(u6npe#pdAGyWW=$R>QdvA$GnY`Z)Tj=_|} zq~QkC_nR15f#efBUKrIH zYnSo^qvR{mlrnl|d~uItK;G4+biLxp@!0ziTY8;AZsky!>zB?gMqQ26otv6GK#IX} z=+OOLYw!BPWBu+d2R)Fege3q$yCH>IcFDQ>wSJjphs(K5S(>(FtORQU?t$cWFSW1L zqnde|I}_6mC_ zAtq=d-&nV$H)r43 ztu0e}2~U)r#VZMuV8e{bhKA6Dj^UlO~a0K|(}2 zlsq?Rl>bBknKfm|M`}lTt!ft14f60KUra%}ZL*7Nq%I&QY{13mdAR0QedoY#yeUcF zE8V!M-l&-)kVotDcd_`X=&LzInrVz-VgjhyF0e-atKGQQp4_Nw1pl>YGT?@mu7=`; z@63hw8FjD?Puxj-anjwT9B&yL@Y;O%kO`D^%q$5GD>s2hzpf!vFxMwvfF|EheXAe! zTAVwzyW47OK;}V8yDK>)T;rH|YHk=P|0J52bCT+owadArY(e7EDY-h?eMvPf`3!lD z^MrE zLoWIPd7SVBo<3agfj0iPC*vy1?U;o1YCoTB%i{sW3|w^@D`+CRx#4gy zcl8%>5@%Y@J-XVLPeUS+9lTL&T#hid_*7i zEN&WjN82oefl1M<%Lj1|@7XzJF z#LcBTZeXMgx?d%9VzcFNAf|;+5WgWst*9V=2wE~+?{0%)=vDlgL~;z>uzlMs()#-J z9L9uOQhCDn^`G4|eb4Vtr3lk4_4hrQ?{XG}UV}J+9f=1=$5?plnj?De2%J`qlvl%m z@oxq$eC4vx=W)@PV@<#zOflwI0-Uq~+yTfhXO){w& zTVChWwzs`<<=giTMkjl|PWZXmi)X{{QPNN6{|ddVoL3Fv$yd!wDAAGb=kIoc}l%Aec81)z|}NrOi9!4O1D)D0+yRS6m! zRav;9$`xHa#M*MXHydPU@N49;vIE9y{ReC%PVclK0>Z%{HU@-dhoX}@1F2SH`j|5B zcMYz5sM^}w-a}$CmI6{vdn9=MjF_O;byXMNIw$@kwaR?<{>*=5i3VfihlA zVN~hc;tnjtQzsdm_5J{vxs<`Xmaots-XOn08OnO9h`W&VXZM=G<3O)nK}GOjcYZ*- ze5;qI8XV>J_V(uZ^VB}Gzp~Kf7NxIlRG|;=iQD)Q$0vkl3A^1uzzZBNZ$E=dzsHbA z8fCgB&7J@w^D(BXe@dJUC##~On;=xX=@|~OxcxX00SvP+P%6upwIx|OPZ)0^~57*e)ZQwK5y)N zw5ccvs+<^RHe8vvP#hxATnlF+9Pb*tIUeqCGKvMq5TOHwG8PS&3U^QjDaWvv zmSTApqf7nCHuYL`(Z{Inhm}Os!?BA89=_i@Jhe#|`2C%$m*}=|UA<#u3;?Tic-K=p5eIme&4>P%NZ95#&b1QRT|E;KSM4`6AtoGc~nxXRS zuyi3v?J&rj$4x*7V5R|_XfXvLf9&GF@BqM#-Ulj?w}$}NAGpPI&%=KVwRMq~8$1zGJ-r=8w{UvZ8;`^zotnoab+ zjKGW{hvHJz7VCXPp)WktL|1CUzEC6%NP(l{d_MV<|D}sz5}r3OyOgK zMB`+kWZcccj@FdxvCFFOe{YvY?&hnG%|v;g{}TIJHQnyFhm|8@_O1!BH*Ahx>~>lm zh>ASp{jWwEoBBe>1=32w>s||9za*D<qe+qk0lh zB(tbt8{xbUr)j*Ti@VqaDnt9LqlK91;>3Ic?1an9u9r&RJy-BFtSx$h(Q4g-ho0c& zi*FUpdLi@Q%-s%k{qXKW|HQ=gr)^6BXZE4E_r;Mt4Lv%aW_ZqRmnbB>S9rKe4h=2y zVs>8R|I@12S*GewV zFFU;E>f)H5YVFQ6@Lnu+0;Wjg*X)-dLiy-VLW`4+%!HF0{jFUl(taVK6-*;6_>wv_ zb-fwLJuIl0Sy+I!Q2tAH1~G&=22lhgi@GY3?q}LmiXla zAa(tV_jh8@57BJ2!3aihR4=b(zNkm$_lXeI_mt?c%tXx}SomVp`?|v5EzlE8S;*_) zurf|<7qCKc+$2e|ox{N1^k2T_8%bdsngj-+W%W(PDv{I;X(a>MO=vDfi`PFmb79z)LMZ5*a6{m`=6dUb!0t8xRqUu(0YNG`Kp3U1 zg@ec!kt_7(J6B(FDd0oXwQl9AzSnZxn4o$vehl$!37~JI(c+iUxPTFqPj>muwDZyiXu12C<3qgjyR{_^Rkvi(+XZ4({H3h2l0oK%v&Ik4^tsxG=1TIN)-D> z;x`^rt>R#gEN|7t6a0617wV(PN$Qx*G`@0ovADPM93-4RwN4X3-k4$bGcMIW!CO!E z7wxU!w}J6PDZ0!rAOYl%mK(gZ!2QCnj}gtbN=Qrzo@>k6ll9VOuGBtiH@8FkTbTTP zTRWbvKimhLj&=LIje9S(w{Uhv4(>=I-5QUu@*Yjf0YbpMM;b$JaF~5hn7;D`_^e77 z*16JMo=fac|L56>|%UPEpnA{JlJ5{qVDd^lq&UiYb?4dSIvJffX?OZmBcU9Zf|dre8O(fOXP`8P)$Q4ueNsjs`+lE zp%@6m4Wyk4-)3-P@!PdK_w4uohp(>=i>mv=9l9Io4nZ138U_@kQ$jif0qO1rDe0CJ zQIG~fy1P51h8S8Hx|z9$@BZ$;*XJ1?7|)#9vG!W;`>uV~KK|hS)Pm3vEQ&-etWb>) zfS1}~#ztl+K~3cpkj2MlMW#LaMUL6rl>qR*nRvmAeIFPldBj4>qf#2D>Lb2nW=W-u1Hy3TUxE` z5G!p<1=i4qHxn!V6>1#bqNFE+>I$q!9veuHue10u!=GyeqWnU* znRZq)YlNgO^`n3l(pmz>Dg}jTdeIge6$f`{C!!FzFaq^MR4K&#NvHsI$|e)8#Ls`(D1B=tF-M#!@)uUnKvlIq`Ybz45E%A`H-8hY~_ zSqYmIL$U`#hlQp zc8M0;A29#G?L$O}9|(sTLK8dVuVxJqPu}9zq?p?-LzKY$k_P&c{vg$fE@bpsCt&2C zsyh5n26FLl4{f~K5hq#N1q%SXKn6~4r^?!LY8qfPRHoaj3fw+tssm7Y(8_)Z*M)$b z0~7I}&TUI}IJJ-R(K<9~cZfwma?&lFI4XRqzTi9#zXh(6UvR+SDj(Xb6Z@wzJY_ae z4fVTH^!e&xsZ5Bkrp1G0!J{Q-@a#iAum3&BH%Ypk7*h{^gGZeT)=ib6=%Wbl=6?z! zK;WtNFb+G6l@CuKBt_CCF`c<7lL{6@?_9_1UXNnNv|4L@J2X~CYIeGMc;OH=Opxdg z@(5vT{A`#FMd}kBd{&$<5UWRI^&CMbwERe%8hp(0>^5NDZqaf)5XqzKJ!Vy zG4_+Soaa%_`tgF6C`&3OCY9PBRHX0)au|YnlzNx;k`p0F7wew3wH1bXXdE%S< zX~q7h`6}82cry>94}dza<(@!gVuMBdvh8F-_R%arAwW+W$=T3sn1_jf;cy?dF#BC5 zaHHFFzs;nz7|A*O$g`{_((fNx}sSp^FhQ&y9>UP!{19^9~$vtnx}LE zn6?y~D^XyA1c;}raf5B2rqWyKn=jH;Ip}`$ZzO#KXuL;N08A`v*yN#I>z z#JJ#1cm&cKNySfZ64qN;g&M^I(2xOo!S%30pnZm6$&ciQc(y9HEr)#Tvf^&A7omuH z5;;-#qoSXP90^bzM#Z|Y4k>eA1a@n`LPgoF?l!v z2>7Ap&W~|jmnFAZ9vXlB&bT6iP}WcTq%*AKU8nP8tYUIFGXKucSQ7J{b!~nYOom9c zznXJI46AI3S8RP8C9U>i`E~4=1u+0sGXgNs@W{vqzw_Ap?(e<7HP`%If{7WdwSosR zO3icO`*oEEri283#M?f&Xx8 zeQInx7#DLz{e@|S$z{ZrrTn8ZOCr-x@GItRUZucyw?=HYCWaB?Sf2_ zOL^@6HVVbFoiV#q7edo#n#l=`osW`(v+@OzU^&aaAH#B3bMz@r1osB(;ZA@Pqzumz zCTT?QvjvgTyl!{8;9D=#nnYYoCyul!VN(c)l%Dgv2rv2!z_I=(f_;liRwzvt`WiF( zm~!J;TZ@1DhnVMbiDd!irU`wo;kbopr-ZfLc-r93R$XMx^V(m+q8*w#L7fZ`jVFNp zM(2@J2-lOighTohDODB{#yQ0v;et=GuOcJPcf8U&`5j#*^A#@Dsjg3TTm;jDX%CM{ z+g@{Wi^%(MQ-Ffa@t{y{#}Jt_yrU9W+G+Um%`=E99Hpu?4CM$u?Ds;%BU*^TcwFm@$nJGU@iWqQUX5;yv;Fzip;ieLS=ysFTZakDwe+n(1)!| z0aTQ3|F~W~^MliP$CJJ)qrr#Dhj9~7{W%G!B@OI}aP_gt*9__gRa_)u0TN+V60P9qt?)WS?KJ@AkVFnO zsevxuL@)+R$sAJL`!s&O1zjogeW8Evd?KE1p4?${$hRAGB6G>@06^|^iOC%}0{CET z4C+^MqOh*;kU+_*Exb*{woxt0WT-R#&4x1u4V6RUJ11u z{a_3hHG6P4#fa@n)m$y=lA;7^Erqvj8zXk{j^GSVMpRxK)j+7#%i*7qx1~- zQvZM zQolFZUZ5<9NoAh-bM({eQ44C<~hW*-Ax34tw2*z0fO%%!ZMfk6OZSXe2`W?oYNvm;3F^6t2~;>B+P zUQ^bnJ|ST=8RT1$#DiTcJnYvlI^W(t@;azI(*I!~{4@NFbd#a@FIQ;9pJy4FUnED9URY&hX?$0kLr9+C#BdKA;oWZ6X^v`_|a-yDx)V zsMr4!e7qRuu8l@?OgD9EdnV9A2I+~ca+T618Yf+HZUR2NMeJ(4KgVyIC9a8LCQLrq zF0e~6Vkopp(UUZvuSyoZ6bGKmw<+JF8k?`wc-GmKp81qcjqeyPz1cqdwo^cjHt*oU z#Jgo5mVXCx9B%(uBjX&^eVrhkBBly20-Z*7ja`dDVRH`D#>le(9Rbv~D=YMQeLj&> zR4tZbmy|?6wjTyk1+1V9_s>7@lWe^JzrWDy2Q>db&FW%iqz~ZZ-2mbjsYY0V27wCx ziJS6UBLV#4OSH9*fR-%?xPJhAJc<3Nw@PcPEG!BA0 z-TJ?nJ)iiNcUSkDyYK_6OJ#YZ0-t0@x@ca5#Wc!^0H{0lhXYg-#Qv#waUYZVQ z+lEV<@cq&vq`t@{#VxRLiRAfBz4SHGWQUW?gruzHUNiHi@};#_Qxpxx6uu7L&szp; zIrr0?S;>L4_hvE=GChf(1qT)t19u> z5cdm1;6@Sw>xBxh+W-m*Xab$1*}7)q7Q1gAb9`p7L7hO_=q!}CVi2e#!m+d|s&(RK zqMuf}`^2*Q=Daq6?i$Y#DWF9rzGBDZr1-&L2&9{y6x}B&`5KaZw_IHy#;vM9Ss3Lz zK1471$y8cQcy{5Q%tyY9L=>kvZiPUQqr;!cH>)ss4)JJ&;zQC2=z4s>5I$)ZPvq9f zIXx+CqL`^z}GvtOftsj+w zYtLbMqTQSrVKg4ZFKSDGJ}D3+SP6i2eL$PEUpviNkHG}ZE*LYU0{Y?VnPA{Jr=B{Lzp#POGU{(w9Gdx>bczUuPOU1&Rj)!+)u%Q-vN zeCW_s-6SmbXJO2&l79Fp^l58R#TLZ^^GCz_=peh-UZWy)lgK_jqZ+rX)0@qErb!hV zu_0E{zS~bK0kNNoKd9IuqngktVCoM7AG4ZQv&n#X!}&NA&TWktl|p! z5Q;^^b?y(*Zyxl4`DCXGf|vu_ofL2wQrco2PN`szZ9Z+$j!mT z)boOnU3g$vb=*&&EWmc#&y_yv6?}Ot#LBSTIMXmh3?Y`{ja%*{netmaFRhmt2;ZWL z*>xT*pk|x5^H+ZhxiDVn@Z0f%QZ+c>W1-BUG)euU)$)P0?stENq-No4OKi~ zRq_(B3~m@>>eeU}vRXX;IN|2M!{4lbUPJqs{PAUc#qm25X;6s=SMF`FLf+6yZUks} zLWB{@vs358BA27qg~65KbBI5)DU-|1gEaa(KDlVj3%1QTVid^&w;a+BygHz?=wgG@ zOTi@*3{lVDKTP>CftkaWUH0(|siG(l0aTPx?l}#m{A*Db8xgo8|Axv$K&VC^w-v1G3j?UpRvbQfyTYZvr!4#Gdc z@>)K+gL*T<7EqELIbv7Puu-YC;9Jhp0!`zh(F#f+EX@hczxLwl#tCvR%kNT+Y|qfB zW|C?r5&BCK``L%N*KZiwd2Zc!uo%$gCBO#?spacroqVBKq;Ei5sacq2biPT)(bbR_ znp|`~^OA%ea6`Px@wHTzSoeUTKE3;eOPFJ(zn3GH0=?JyiS!Yd>!Rh>u@I94LXh-5 zYcwYEB}F~gT|v#b`y*=uveH>!G!|kd?NvC5>K&q0CvITF`EXAiu4l}qDKMy*eJw0i z^GA_J)RR9*6Obv> zAfX{-frCMklnBAnNAmr?%~&t}1jXs3Sed_MmcIIueCFZH7rAw$U&qnw(psi>LBxMK zhnvYGM1C$vC`zyNXM6sT_i=tF^%%G0V1=!)YYW=&{q9BQ#?C179_M34Y+UAAaWy)0o)01SaR;p& zV9Z)E)$;SvB+3^YzaF=UE0PdF+J%X}V6jkwCbWdN+#_4i=+W0D3dKcVuaNyi4s`fO z==d=Dj^VmNf<7rlh@tgyRfzCQNRjdy#M^HNnr(>oqY||Kmn~GR;B@YCGrZ-;_KoTM z4QTZEWjNPkeoLBzNxML|(~YK_^i3nXRjD9SIn^faPoF-}b4FH0^njW5=Ma>u9yZn& z{7L+x3a9wp)V!)x{so(mk(UMDc|x4w`+r3+nJI))I!0&a%tk8cQAx6XtJeJt)BbKY zll?^|rDMWx@^_NiukY0i`$gf2m~>5k!j6!*Ttnn*-h_H4;%d*;kN=kDU~^*WcRXZO zwWAN%0wlGK-=ce`5G$)n=|Z;K%o&1&g!l{$v_^1|bUw8kc09+SgYvoa4d?_JMpiwy z(%Ew?wmB36#lo9`>OO4>5g#EU=|IX5nif^dNJG#TSM}EGbai4ko;UNY$-}(}FK(1E zdF_4o(^=-hx2-JnKIQ(m!_%^S-!Dd%i(=2tA%kbTwn*E(E3;&Z@g;nC*0tE|u+iF*f|@Cn1B0 zNDOgjCWG8SwBIPRE@vecm=~vriS8^WZfqoCi+IK0&_GQM{$01Z^1MER5)@b2FR=}x zLTOg-XRt6^w5wJ)B_XO+(^y%O@nvh^H!-ek-RzlJ!5z`M`{Y2De@?vx^#&L3zz zitOrid}*v)EL;SK-?4t?b{kce@Vf@)b&s)XY{ef)_~dq3X9ufvC?6cZYm{4Q<`7rS zprFYL(2nNJ95mJBQ~l^Kurz<@x5xdKOsz4n!%GN2_n*wKWzb`2?~^^UvxZWxa_x87d7rYX-> zB|}&9*moCoHJzu=t$C5fCZ;FNwwVQ-bFvigHAM2WHnY3n1{T9ml6-SIvFS|28Z27y zZ%Ay^;+qB#O|Y1qEIxjku}YMo`Uh(|>Q2dj_CkhsdR0iGATl7RZL^bKmialH5) zN~lc?;`>G6bPT5RFL* z7)5^3bdPSlG!?pQKFk={P4b*|I%`FfPX@#F=c(y83p&^uh` z<|$re?Na&|-RF0lF~jC*)k7dn%GB~_=tENrM}E{n*E+ZLFDWayrCY!b{*B#U@D_{ZPJslxKA0_QN3!i#3>^ zXrZ)6Z=Z)q*tlIwt1-ku`X$~~r7(if{?aMi*$BV;VQq|k@Z~R~;3c;lfoC2Bf1)u- z(Mr#qB-$4DWiw}g%qy*ZuCCRhC6(M6{_eRa*(df{^04$+WuJ749{OIxV?sga8!F%P z(%Pk{nMq@(HYblvcTtgP3RD8pmzYE6=tDo4gY;lT32Sb4ErugryTI+ZrOEer-ooxmt35B?2wY zz+fGiN;|Uj2*fNa`<-j)>^F;eF1jzSPvDOGI&W82lR;2@;d!Jj)36p?WF2FM3~$DT zTP|1qJ=tEn2D$CntJOLtn-6M4+0vwLD8Be+$l4q6tL$3lVhJxCn{6Fe5-piWv6&}W zlb7eWe`_|xXtYmrd~CkSfjE3x(j2bRP2N2kvi9*&*@mXL5;+PSqo+six@JN7iD}HY z*<^`ilY1_GA~YSA+&`dnd2)Usrjs+_%N_fvp-lvsMFF;BGCT3X0fWtqT0`|4DN(E; zS5RrI-uv`d(P=S;MK_g-BuML#Yg#_HZsA2%o4)J^>lW~iUk^XSO090OTq>%3=%gJD zv@^LXroYa#Q>Rv-9Zkq5RfnjXp#41*jTRy#;FT-(qNYYtrtG30GhpA+QS;(Lj9}Gam;& z5^&p6A(xa%M93ze@1F%57C_SjM1wbd6}jzP(`HflqKY$JYFz!B!G z1GSM${pR=8`)dH22)RZ&&d)4kup8DA!jQzBQ(>y*Zu=W#OyXJ?4+%ANHCD&K<5c{a zhX6Z))qb8SewB@};5jNEdBJ0cM-nu>K;q0{2ah564RYo+gNTS0cr)bpW9?YA)h^_K z-S12XN7{vgf@g>Lo`pd;wU8!tm97qvfx~1fHvmextjPkZOeKPrNV_U5^=DwPQ^~+! zhrhWUUv5z3n1}xb>(suT@R-bs*P(L8_#9^D%!;%vb01_Ec42BMzHZV{E2^N|%M|=) zv86G>OJ7uiJJ8IT^4T{|#HWJ4;@_C4pspJwuiIuq>#%F;}y zM>z>M<<9KK&@0$7O*Z*$VAb1>)hp|6|D|EDE7RzW)yh;Ew5mR7_tF~snV_DInE43s) z+YZj}HzB*=s^09xFfE`8D?JAB5C9WO{`@;m9L6mD`5AHek=UQ3*pk{Lb|Iu9q(xLw zOxM1NIk&SC3B$zFH#dpbl%%z&<9?;4s)$b4&X@GaeVlhPeaDIchwW4Ik%Ns}w)0=1vjf=D{XBUY-2eOSAI(t=*Xb(QMSC+cgNeFu>_km>+ zZ%ktnW=UmQoVv6XomPIN$x}0nFoNC3y>^D)ZtHQ(v9Dim$-Gsm%Z?jgGv zv`D`{TOeW36%SawBvFP6#HkH%)>A=lWTQGA+o9cTqegxn2a_Z+=@cfP5Qi3vn13KQ z^I*3)5l+(A^JY3rL}S#J3o-p>f6EIp^En9MG|khzWGN($BSH9R^c0JZ0Fa6FnXaswBN?9^vQ(iwi zkdNo}NeOR1?iU|A4=?kZ{VgFbLYyf2?*0{#q+ZR`5~3_Y;81=ix4~mEHGd@lw4nr&&7;;l4+`h1$+PAyVtC1B%@ zy$U))xX3uP?Qt?XTxPw+-`9G+=ss}&!lk+zGIK5Q2#iv!15#0^auZT-Z;WWnQqoJ{ z)ER;K={^pT5&U66AGR!;8^psy(YV3-l5j=!S2S0%f3RQl#*7t6M)Y+`We1{e(#C7m zL(vEE3#KOGJx!b}PQ5SQq^mMn$}Ecs-tz@ekrY}g+JzLK8W>PdH`Wa@cRHz6%iMQd zA?gY|_4|=S4pK8XqiH0xV|l&1FO*PI`mr`Yng^s#vl7t8WkhoYYa$QLebD42Z`b1R zeP)*2r?Xz{a5*MyL~4G@-W|%W_b~QnNgaE6ILmOf$K6=&Fc{cury-WmI`DQR8Y6vM z%}>7Z1+Cd1k1p+T31Rw1s+mSPt>Isf;NYtu@$Nev%JaabK*u*L0*iOPTC}+F-t8}u zF$FmaORzVnX-lgqd;2O4)rxG%>FF7e&Ka`UL{Vz9o1QsJ1NE|?x5k{MlKNy#ekpe* zSq{H3ncn!EG<*Fen~pbkxvcykFI4vlQ8lgRY!H=JW40k4_S-eC7q$8me}Ilya)@wD ztL{fRygb*wyldLn7--2fKfO-oY#9SeAJfjNd?S!y=qmT+BT|vOoQ!$wP#XAW8SSEq zlETLGEA2fzFi?xJRFGlvlvxM#LL4^!J{7+I9&fGj_Bn&xZOLon6CIx{cDG2@1_`oP zl;64 z(l%X4vE^#m%Mc??e@Yq+NsM5qJXEUt$UHOu?B4tq0?C~h+6%WjVrsDuzbU&45?wgs zRER}y>KLhvt+P==es2Y7d96um5HK}W9#;8!1G!=i5pqYNaiL}t2nu*<2%1AH*I)+_ zN8v9G&&4^TD6lqiCXtnJx9;1&)>@xdIqUG)Nn<|By=x8@9ri?d^&8QVB~w-r=dK(6Lt5rAt zLcLZ3X^a+iWpol=1vGbmN|3CR!{9ws*O?W$kLf^4b|LZFBtA}eOKMyfuw39)&Ny*M zqnRDe0R{xK$HSiBKVo%H4b_#c_^=ODz|8a&y}X$bB$Fm7U3abN3p$-BwQ0-5VOOq_ zK-bg+pa*cR0H4U_?aa)~kIO@V5x2RG8%NY13JE8671xU__Mu*% z7!?w#hf)qboO{n>zuMe42UPw3N#d9FUwemNn>N5y)zmC}eV6Fz>3Qwx00Hk304hz6 zTUV>z`+bk^TO8dEF21INw7AIhEn+gisG^9X1*xmevLVs2{TxJZ-w2~>-}jQk*tqt% z&pU>510nkvwp`Xt|4b|rD3*+y!#<>8yIt>Ne|oN=(5QdjJobBAWD22@cat7d)JT|? zXoayQzqD+KCv`gf78U5~NfyGnI4Z^ss)@o4gGi4H9!Ftu8-c$Xj!T$mJrh$2=gt@IoT@!8imM;`KGEwS$hw z0IfA#C(VT?bO{xxO4Z`JAFmg97^RX=k2CYh!(^7W@xSgq;|GYRm#3$Nt7~l+Ue3Ux z0?!&SBU?YnuZ8^^9{vH3TD18cBPZJHIdhPoKxNnOm_`)xINioe%Rbp|G$4^4eJ&?v zSF0*{7(~k)s5CkNHYc<%)H5kSw8>ZSY{SaL%C!vHW1s*QQ_GeA76tFPubX-MR!qz@ zAh0X+=TvOrZRc{We-I#zb)nadtF zfi~F?aU9@E9U;a-nC`$y?eTwvT0Q?!ze(AKFTG$7z z&~9quue-6RbAI|Hu2T!4e}^e|1oD&@#b&*6-qLwgKAPTx2Uclm;dTS@=54zHu4@+; zvvTc0UUauCeG2je`H}?wr)@JcZ(!n{_V50lv9D|<$5vedY$qXT!f!eG`p(*eyT{|P zWlA5#vEw7w({KnmLRJa0ue;sU&4AV})|WwSO&hP4kb(e__@oKe8VZ;mFtx;-kUPh6 z;|5A~I&aX^U2rBOL!K5O&`od*=5tS^^TuKzG=JAKX*u0Qz0TNvUXv@iu&}yER%CWs z6b6Q@Bu4rTu?{cA4W07}+?b@hnThZr-a!idLXE!-y5VmH!-B_tkJlqG5OxR*DWO-} zk87t}Z@@NoE$0h3H!|fz=srqhWg93)hW%PJI$g20(wN=bfqQ z-dZquo*!~4mAACc#4d!$v55=>lqqPBNCP^_kWUzI65v2?^z3@e=tS;bga$Zzkp^Db3aylKi(6D-zJIqLzPsd)lKX3T z)^O}vZIKm~sN(BTX#9FG<_vYUrxhT8^IWoOUg`U<9HhwSYCO*Lb5@#)rTQLfG^R~j zb<{DI{!{e$4wy{PoXgi;bJmlwa|u{}+QXRfETEJ=^%dj{EEAWlIIl5#km&A;&SIe3 zI=|goV`LAw@cuvkPwA?mhfV zmgaLaR|ImLi>NV@@KwQWx^}Oe0N^KQ1;lkN+~Z$Y(InQdvE@y97QEME{%`gN;jC1KhfHoB92* z1MYW(h~e^{K9}+=Y-`(Mgmj#j-=3e={QC8C;q-V$joLO}7TM=c#8) ziKOSZQTbi3q=}!tJgwc|w+-5bqy4&{{(_UKa&6fz>|x<5d^$$IA}QmD^L6wlSZxn> z+UC%9Y5l_3Q4YFbHw9YO$Kj%WuBVX26Hy(Kc_F{Ok&gQ=A_DJgD*1xpnl<0g5Zg!* zjQV`8Fa%Wg12sSvxZCOyo7FkPjucqmt-jsYHQ0Kg8eRF!<4jm+$-4~A>$g_GG|XX_ z(RIP)fY_q?~m*C&7-^Y3QuS1}y?-|`Zi$c|RD|L7msg^bXLbR77s_sDC}>F-hj zX$T%eR1nf_%V7(S^QxZ-S|Shb@Oc3EkL_CBQk<({1l}i29!aV_6(6A)Q1Yy*Z7p$T zd5sln&&b_QN}IdwHtRc0YYnAAF$KTY$QP?3j!TW}^Svy!ih6dl=PpA2;Z13(6LyFN zc$GrJ1n>Lxj)sb(>=`z-oSKcnq~q3evCaF&JK>Jost%Jz=fLaP*$ksy&HC>_Q7A~4 zoPT3#K}rDlh4;_NPpz%xi9vj%CpGu~ptOs9mzJ%?NB+%CC~;%VWDmmh`&=Hbl_#>V zi}zr8A|fAlg5+U8t5$9MdZQ*&E*P5Zx(J^@S;5w_{Odqc9qZnM{FoBF6k7oc*Z-nW zB}gW#y7|=Dw4sk^Gr(dtO~McIxhPqXeC6S=1|(`Nn~xE}z;+wq1_v@uh$W|E z(9KR%4Eh*u57!2tw0=Jr@CbAnru>+so}A(EF6;_n3E-B@vc-TUTjq&7xQ@I(eTUbB z_lSd76Lhoe@#7yj(kL>;6>}|SZ>~S72TM(-^We>Jb=|GgSzf`=>o=zcq$?A~@jP7m zF3r56ZGufQXOQ0!^w(VmPUU={YhRf8m0?S@rZ6bC5X;<1&nsuTn*^D z>5dxM2URW$H5&ibxNK|p@CEI zBn<*YAXWzJ|Mx3aLCeN7HzXy{GeAP*XOppZ=OB&wtKdOcM~7Vo+#se^CrDOj6KS`y9V>DF>gJin+ZuKbyze2sHoo67^3#fOa(r#}7%e90rb#!fG2#LKmQ z7`R;%CR1SUt92kDZ)S0@t-obtG-9SJYYZOxfZ`#ct4;e0IDslonWudT0b~?8b5Xyd zqssaAvZfeDO62nt>H)o2SpWR_39cZY*}P9h^2I{_v_E4L-R5j)3_7^Wa)LQL}IUcl5rg^*dicmC@RU)6-wA z8@V?X111AcmjRatCJC?`U92EBNOj)YBP(#y zFzh9!kc6-vFWF&yLQE=NTs;Gt2S3 zK^Bbd577~7Z8EYFO%i^-%Q9P#W~VBLL__0_n2$35KA3r*91gB~N<5*ixq4h6Og_;z z6p)Fp3;2I96t7@S@pmZ6(ErH8hx@T7NJ>4q+JNS@=5F4jRQ7M|g->vml(=1IJiOq` zhwmYr^ExXd@o--QS@f!}aAvc<1`r5CmnMfXAd=0b4@mXHBlED%j1fGDPHv1R`P0wK zf6=r7?xAvfYfoVSn4i=AWEv*&+t- zv&G$gsn>1}q@D)ros{$NUD_h_K4P%u=bui9``=|3;El|?g@u}bCoZk0a{(gmzJ_^! z$CJ&MBP)CJz$>ww9j-`MzyxLEl!p}~Za9Meg(p<{&~%HMq6w>~o8q zUdQzxR)QN~N5)%gyvAcm>L==CowwX%g#s`G$v33ajDAawF**7Bub9@^Oy%r3=hln;P02@bRCEeTfF(uL z*rA=g@weM?qgupYAtvln_|C&k>*!ixiPUhb~LQY`@ zK~`axSQv0Tz)%MS$SL1f1H*d}2>tzgaQx(s^Rx+q03Of}x>KxlaQM5i%HQ`()n07qIrLp=L>)pN2J_ zIq^#Go^-tyVomD1j=ye0NeFyk_;YJ_dJ)s+^U*eSBPPUFMGf`Q%?*K6076#jy`Fk? z|53m9tb5T$<86Ty+@AK#|IQxJlL^4J)$m|*8ii#ZoAU2+UVzYWdL=A6wFvKj8wNRr zyc1gq1F}_U-%y>m4!%>+(_eQ0LuhXlKzej^w03jT2>JULi@^p;tw;Y#N}1&ZAaQC| zF>Gf~T-G|^iBmtZN|2Dnwjm_$rMhWohRI68`1sgj;~o3)-7&H~JnZ{RS0PRjq~ef7 z-9Z4JLIVEbe~ClSpRxp@qD(HbJ3IS{+o!yqEl?nP+l~zp(}v)&=|Mp!oz3R~7pMqz zHE%fWBY`<299Hol8yPfVJ&%IfjUEUeP7uHgzkY;fyq^=IZ;6CsJNbLi|MV~DK_P<= zQGssXL)nk&=3zJ=73yQ(;TRLSR zyICMWndlIF^?N_GzhvAX;6bH@y+D;la1H%~xj0>$74IFO4tZ|rz&D~zkpLaYFO)yS zqF9uuNPwM4`)R7G0m0<(-@gmiU%rU61!T-|%jRS9l=)pR$G^c(>jEIeNlJ}RGZDA! z^-7_Z7I!iTmB;_r4TZ9haT`D#fZ2hMKmG@(<*coXA!}=EskFxgCih~2 zmy>Vc8T~@*F#&eYH`yKCQ2G4an#QLorT13Z{p4>%jlNH^3eQcZ{XkE=7mzZJDant{e(O#6 z1_Cn27Ywidt|t{i7?2j96N`w7Mgxg??|$OBwY6hzgF2g?08_6?YxT;;X-hCpwvfXa z()yYoY^;rh0M}1yDR`(RrMHX>mxEsF5#Rs(q!AbSy<@R}#>9YZNba6fE&Jyz4fE ztGjn6qUiy*wRyQh{9Qd%f~a2O5bRbK`SN2i~)Ig@{48LuW+tZX)fny z$!>ZMt9tjy=`(NrhY2fd$+aHx5)GL$a}Z5)Qv~K!5F3w#zE7iR~PiA+hE@j6L`ViFeNv8@PR{5JOdx5lLM~i!Hl6fPhn))hH1fi}LlBF-I0T+D5CrDvq}MNe6n` z_xbL`!N5CjHvn-D0lOd`uebWCoqBzCb0e+u1IVr+K|wq$la?M^1B54U)V3K*Nc~)| zGA4Rr=>y0v{FEl3zEQ67Con4s+@y}7XtRPHU72JnSEkJJezlxV;36TN(MbRR(Zm0} z_TLyDsXkL*5VCJ)SlH?Y>xY@b|0%ZKPM&9;1gzXUA&zr!Ct2Q~OXSoBvIgGMl5fOS z9iwO@gnS=kziuOa|8a;Gs)f%G719c0>&U4IU%Q5nxOi{sEy5RZnoGWN{jMhdmTYuk7TLp5Q3=hy65ZoO(Jg^NQn@8XlSZyV5ek3YX8Lx zMs5XA3jIw7Z|3E#(^^h{G2+s?XeLz`CHZI?e**_!dauQe#MAnfja(3nKefdJu{%|&e1WJ&+qB!nA1mfc1bzM`RFV)$m1i{*_ zk-3;GXMU=}Lr^fPogh+NCapIYfCuhTjNT%sY+8hP&5+>9CWcAD%F!yZ7^-_cDlpMi zVz!xCu%dRX5iS;N5H~G_nkZnQwzT`uIWC@mfF-50gr(pIqf+?~yhS;DP9(_`YWdiF z4S~}}syU5}(Y8DhAz+0*@d(glBABS>9pcm)2zeMa4wY-pSrUN@$VX978% zeOZlLRrDO;puoGAhc3`5L}xzzO+&XaL`Pa5`dfu^n4z5%gPj`z;6|Xxc>==kqQC5+ zSopY4JpZ1#wfVj{^Cs5%^dCta8+B2d98d7AA0>fw5hJ$Syx8i#Yx3%K4T#-SpYvmhzVr6KfWT2Pav?7!CX_Qfbm}uRQ)~>q zPiRpAGr`)AfBotzJW~!Ux=RSa{UVXFpJM8VE#AP@qi;M?{kWs&Jl<5MHEa%*-4KJ_#W(1LomoI-?zxDHOEslLxz(5^`7ykEHY6gOTx? z`1{Y5>Nu!NoQ8MU&OCp(836a+?&c?iVW5yJQk`LdG6Hv9obopcG^yNgPWc{0(yy;E zPQ4oNyrtMe6p;&6p-E1H8|hLpM6C`C@9R-ILtag6qNBP3b%ndo*as1s60;|wO}^)@ zEv|%r^#Lky?r(jvh|>kh^EBeGCg6QWdZMZ;Umyu92Z4&=TN5V}LEeNS)qHmYZiH5Z z?X^}63w}fblbQ7u3)h}OmKBi4Vmp_z&g0QP316o;6U%&3PA2zR4i0ZX9O|Ir zKE=6z=dWl%5k#H)By5!+4O`?)ZA7$j z=WGeaXGsJ#3iU??NLDeg3-LNVnorRvE4k^B(@Hz_ETi$xwoe}7psdPbs!;AGBj}dg z^>Ny(09M(!8S@KxK>T6n=5(u=*Qn7M4u0qX2X7MTRTy||&c0K>?6_Zr{Q<%vX5Q{t zE!|Qlcc6b_(|WeuB)}m7rnBtK`+VI5Ly*GFj-g_BU()oM>1`U$$u+$QCj1Laaz!W; zPl+io+=#wr&XZ~R>+Ky^phWT2g9pSU79cE!3V|{6=uII%wu3H6!040Sv)J6k1i5RU z!I0bjFTjq}WH0pMq=++UB-Bkg-*zTy-(J|d;_^wh=w;9Y(<{P8{r zzT!5~<^X@VwQj%N$wmOIrVxyBGVgP~GxubbBQGZ;!eV)vG1aARS^5VCT)NQ6FL+Jc z{SUrH(%sRsMVs4;-hP^cBIo6RD*w{jqbFq)Wlt+$OJ!V5>u%DQvUZVgaF&X#Qw=j6t08>;{LL{7=!no+cOjA9ah7?On6(YyMO6iE*yC zw^=0(c!I~6KPQZvLRl@pa)D@7yHnm z-)|nW&db^BoRyWmznO358>+(A*0+O0rN(cxPrkE3L1-(O#lL+sQH2LUAG``kYF9iEc^Hhpwo9DP2RJ zT4|PyV~3jNTdznR#88iq6sD_%!Fv=Pw_WsjlF#% z|M2v%=I?iy=2N)+XKgHH$e|->4=1t4vM2N zV73LcL`^Yp=(Pk9)hdN@?oqJk#X?Tvg>gIKBu}2w`F_fV`Zh87C>f`GS%%y8*T0*1 z%96xunck7j7;jS;I=xey2gqo>tAGPS<6uLR2Q-o=CI9z=7D8a^-)5=?6`Bj)T;j^ zcT&ZpGvCsqaU*DzgbkTFUUMp%vqLS`yY(x3Jcyz-%zojd zBc?=YPQ&K56<7_vv0=-5noC{WK?h=^uv?ZfXpG7qeZc(jq3!qa?c>h&i-#w5yF+CT z5P>@Fi3hQ_Pl0JSQ}$=V6wbHVo4~3`q0m*=mluTj%s~>)2j<>H30yZK@4VX%vKU3C z+aHy;V3!nKMq!Oa)z*Y97}~k)d`(I17vOEioZA5u)+j+^fHSFS7V|mJEz@)W;A=&q zAeqZx3D-O3AQWHqC+02R(KKaokCM>FjCVK*;OX}? z;zqPxf&&mbY_Jz9jt?=KmBN&K{K1194Zx zP{q9?fF7RYs(?M+)O{(`mtUzZ`cE5jX)89LcqyOc+pX0asbC5q7BU*Je8yG(6_>R~l#29`%Wbn;oHcDEi(t6;mq0FDl@QH-GqDr^EO?Y8Rww(R% zOl??Q1reA&O8PWH@|qYEY8a!8c#7${)zf7N#e1h+Qb=K0LI5(flf2wBozYU3PFlN!UyhRS!A$Tic@$o}zqB3aYqXF^y|aNt$aR%B=7?XrTvem- zqR~2wZa!L^PsCF-3Pb+y9B^FXop!gWbfQms@wNNs0QUJ-xL@smb9M-IABC1hrcX~l_Agsg%XlMmGbA9^M6g9_i!%||aKdGW0=IfKfMyAGUWCrH_drnfw8X`-FP zIssCmCcTfFQ9R}C<)qfYGt2IPFN^8=(F~&bD!Xfn7Gv}%o<3!9R#wJl-~Ya5zxeWVP$%EnJJ}3YFu?wIAcQ3R4cthT_>pB4CIVfXKgca67If6!!tY1}4$Dkz%g~ubYU$>~155azxc_+g^ ze;v9zvUbJ1uUdXh^`yJRe_ywm5c1knZt)|TcvejL>B!USHpsNyjg_Wym8%7}yay14 zenvaI_LPTDosJI50sA}=&ICGa}Kt>5QdKbt^k{Z?vCcGaaz@op~SdEX) zj*i352h<~ayYaEKXor01^_2nw*;67jmoEG-y^(V&>wd3kp%!?0O6$HAO&O8hB9r9p ze`S9SW+S?e&U`2aUbs|dOp8Bm5l&C$>_~_V_L?|{!knNz^T8xUJublcfq@;>-DI0@BAH=X7iUy(G(Q_G~N9E{F4lYG>x%f)J%s_YJ*LpWYlI|Z~Npi$)puUENlc7b!S+^R6H^)iuiI%_X(m_o2C zz$M&&lV|w{4hQsT<1bu=HiL8OH`+BXkh5gNFj8J6`y8kNI-o!FW9Cm0-QR)p({_HZ z=WkBI{bv*ZWK+@#_x5fp!$?&IE2=|-emjW#`oPas+bwqqtFBwuT?E!JRWh2OXmNQl zO;7^+C9wLVEZL-0Q?`QrBA(Q1Dw51);?B<&;L)kZ>FoC)ev7h2wLWf*ImNZ5qm+Mj z*d4fV_}2!vPpR$e1kKF?3%fH)xv|7+(Y6U+eJCFkR9!6PQj2Fl|lA*`i4vfmA ztiYZcQu@5{Zal_7xQPjZDtSEqCPnmOx!+uEd7x!|-PIL;=9=sjhoU1I1Zh})Bd zm#+pZLt7cMknwg8>OO@x_?VypF{}qkC1O7G*k|-|isX-@u)%F@lgqDN1J7tTqMhJA z#OFDIA@6ySSF1%Kt$S{vMv3MLWeu_&Nh|{+$sr#Mi~GTMc~j@W-GHI1hyB4z9+TlH zqJllectoi)4>X4PWni>fDM>{!YQaLdKt1{J|AWiTL7{Uk8vkH&5@!>0mX_aQf*#@d z^RpfbJf1&|S-t3|Kw}^O3{ZXXfJbQLA6{`Efj>9h@v#ZRYfnd|wCl46Ps8tWDL80{ z-(xXL=jo|ayp_FIe>fK9XS#1)f<(L&45q5DOEWXArp#NZ((+bMd7dGwNLJjO2Ryd? zcjB32?}D_3nMEtibwc5bW1K{7CZnqdfinFibJsh7-LzI_D2= zO#7m2yT&eg?}?Y`%-#+e-bi9s9EmsiBApJr$aH!%bUB(%EwyLV7yb$n@duw-A+fLU zm1L@j4czx4+dhYB{)&hF0tRWVzj#i!{!3X6=ozen{8KllzP{j@bGg}+>lnPP)EndR z(Kl=+{@SiwZc*IUUjxcHp!FxG?_DqRC@h4i&`h>$8zKU`IpD*!1T~O^YDA^_%PqZ= z$=?+Lf^FKqqhB8LHJQK#@6cxwm|_6X5Eaf__lQX>1l1e4;V;I;$T*k+*l0@J&B)aZ zKQkm1?6P;lCho*4?)serWpIB(z1IkdGQ;-GADM6*y1qP9XucSX{&8q%cTY69CmvX@ z^@J%hMN-H-SI*J_=r+7U%k+!|%|_#+2MWJu<(u%SI6ix^FZ|wkiToXVi;LA7GMZQr z=#(q>szr1Ej8f$ih7!CYcWA0*Aa~2bY){|I7Bh&;U%?ZL58#23pXZGv^irc3kx^~t z5>ZLDUYk|EWFV(oQ{=lIsx&&pnet^w$Y~+OsGmC+9ut?I2IJXi?>*{YUh%Y2OYnk~ zVZtj@XGDIhuJrI%*4}gg&sa>q{@pC%0v9tfjum?$P>g?{%P6k{QFlfnxPoMD`1ioZ z2{sgbBqmcv-n+tk>TDC@<+I$74`^jV6&H%TiL!dBZ|4E{)&4Z0N!cAjAH2c=G;pb- zh;C%hLEYt1pcC^sQn%qin@tpAP&_JNu5rx-Dyuhdiz!I;xZuJ*Bis7G0ER5A5l$B1 zIXNMBc+Vm_)DNQaEuvQOMd#(-{OFKYf3!r@Hnr;5XDN#dz8V2Ihc6-D~{)J|%9;NYyGfAUhy))fd7y!kg?sl&@<@T&trmoj;J zvv1`IR(qF-lxez9H9lL~_aE|?yCQ$r*mKxVh3wKX^JDt-! zi-@Y)*6Acu^vW#RME!kpc9QD_?_nP0Op0LaATXH8GzECXBvNC>!hiJ6ALKi^Ih%xm ztFl3WGetswf-;_?!tPAr>&4`LqK3d+@2t;}M|xeVU|0PbWH*0$8Pj zlsF9IIV(s{aw0t%joCdTejM05dh>^HJS|p9b`2zf@|!8J+H<&9A|=!tb|Y69gnu4; zj;ki4r(q9+GVRY2;TJpaqBIG8x#b1HAC_%-9T>9B2M^1MzM>b?ScE+p5tR4ROTh(9 zRJ6C?0n}IuU!tPoaslh>+GvwL!sV(1x73r018we+4AQHx+uFNLxyB)?)B1PDv16=? zb&n>Uv7l~jZOBKK2OL7SFRs~%KsROj&vBq!36a`4?u7k?k7Q{!gLqmBO;K*h)$%b* zV}M9e{Uoe}bL#vrg^|D;B}!LC;WC&F`V0erb)6y~D`5Quqqo03Y1S6G1INctxZ_)@ zBbo0iZ5kKJaM|V+<_Oe%V#et>c)ZJue=-b{J!&7J8&DbK)1{J0sc3QjDPmB{VV|jJ z5u-$l8!{HP7r(|GQj!fQ`m9m@i7xD}fq>$QZTUy?E5l;)lMNW?iV@Y4S?GDN0o|MK z-*@L2bGV(}Evimjr*Gt&#Ta%+NhSeN(<*e_*K+kAkf6A-r`{9QEwYcSif{f%ua_sI zeGB7g+BI^pskZlWL0$!jhmD6Al=Ub~6JH7=-*S^E>a=_(kxgKuPF;%b zZDzHv^-P0H-*K7(=^_9F6Dh@jtEbupaZ4+vLHB&rjSw4lD_7&=ymhyj>uN)sa`P&X z*`2VpH~zX$(!SRwD$DI8BT{54NF{0IqzL~r*X+-nI#zO~(b1pd`)vgDJJ(=p?pa~x zW15~03#UD1dhHaqO`PS}i8c+#cTD_bbJi=y47>XzO$BQ^hm-j}M;C_434&upbk|)f zU4dr15vUT!XU!Y8Iq@1QQxl%0UMegqqlo{KpZ>jyc6qrvr_TN0t!LLWL4Jb7bt~8i zU&z_Y%`XO=P&FUO?}F~I{jfYf;+x3$59Vdzt#^hgJ8+_f6^l4~<}L**Zue2_LFJes zgtDRbd`+Atj}|^m8b) zT*~)c&Hp!;Pvlk`YNxG1Tvn|0k~1&SxtcppzbP|bU8sA(u+3@PTULB1v6d5;>?Y~p zCoW&OuO!~%itUMa9RXYs;t=Mqey3{~@~XRkdeMMRqgUiNICzd063_CUe#Y@J&GK_e31z=2noV%s8ho7a zwe;?S5FqYpkBVUkd0=2pTzB9fs=AI>E^`)p$@v+R$0&23H(dTbx zyf@%B`}~&@eBoS|ff*r=!mo%emH`gG?g_DX1P19}=Fn)gQvOcKokHr4U0pVSse#MP z?)p9RGt6SsSH3hd*kF+CyeO=XMf{@L_h5QllGMCk;rrLDVBAdA@lJ5n)7}(ARoAR& z2ga{halSz3%g=;bk{Tp_!ozU`H0vM)0>Y_=Z|EAvhwL$Bhxs~&qo@l;mZg4fhHp+O z`<1)A!p57`c{-VJBh|d~1Pd&@Pp!2}&QZ9OH`h_4a{pxsPM4!#N#vnL-^-xJ` z?nPu~Aaw^5z}!077_A*E-#Zj(zE-E6fv8D5hd8YeGj>fq4He-wmpv(hkZie!kod*r za-wlFe*)ZzlZzw_6tlF`$}Zbz2i=`G4q2N|zn^wdV;G%JYxpzD{>2FXQ2^h4CeD?n zKRd4I&WXw}!0{K8eqLGtnLS|1=(#xZH|m{S^)>7?DqyaMTFDa2?8F+K7uOiWTfx=d zwsRolhZ5GA6$AvCh0p{^{G0}{eMJ8rAS))vPHB|($KUABZJvdSH2UAg2A=l$`ka34 zif*D>hF+JIPdNFBm)PNnGmBCPy%ai_@nm7OnN(VeSk1OuK`nd%Q(o2~0gVTe%SqpX zLAg#=TDh@thAin)l4bLpVDo1&Y-g=WkRFexX?j8W{wPn_N7z?kgY|i-yObA{d9^Pm z==hBg?jga$?b;1{tnq^Hsgwlx5uxGGg5hDeX?N-2RUbzc2gX>0n8BmFHc^>u13Vms z6H3-O{xm9$&xY}g6G6WS${Y`;S1tFm)L-OjdaXCj+>)zm3tjLlA~Y!e)g6;6z&&t& z7VJNeF~&$NAd1)DE6>4ISx z>KZ1m9cg!`>BptNjajop% ztcQhzvm&=FA-|hz-W*Mq)M7gEeei-o{d5R{W1h)JqOneM8NdU-#j_2of9mh`i5!1i+Rk<==srt-ylDC6_ z??%A@KEsg`Cv-PgLM>v+FZ3YPhF(fQ&a_%o;&OQQ$)uq>zXQJ6AtcIV!^hZ4Md%um zs|X{q_IkhMK)P`OHI2_V)u7IHhG}kBt~bZVNB`Y*X`(Tu)2_}PGiY<)d4jxY*pe4Y z4f*Pm`G@ocL#+(zrK)G45-9tDxv`wVc&hqsPtnC!CGqP>lK10>Hd>ZGrr-l_so2ym z!ODLeNXTKk5r@w8tlH4QH`c5l0;jRzo?MpxUv#5n^SPAs+3!#Bi(mE>D5cg?80sR> zJ@G}~s5&>)vKMlL2TJfoOI~lk{lxR0cGD^L3Sp&vFMGT__>nfaJ5TXy?StlvZIUoYoDH=<5*N6rAf5<=#W$gI;3tcD*+_6IJvwG-rT8Q?44)?Zrap!L;rPr`E zwJiJulWuo4_mJahpaAMlRO*4SfqH54kiO%vS6^x_98Y6X4X3W(PKisn;)(3m63JrY8Co<$&T!e&JJncQb6d=el)fypMtIrf8luZU1&M>adD!g zd6qDp{dWG8z-WEaixp^6CJU7iL=5aiuDcR0gA){M-jAb}5-=$ea90FK_kaNsYNz{M zvH$fyiSc%hM`NW7tRlI(m9FpsjwM^`4}Gn}s`06|BKF zxG7HJbB6mvvmvre3jb-n5}>p*3qqwhGWK#E2F6|5XT{&2`&~eoULy+?375MFySq#; ziCD~Sb_?wrY%g2Fyly_KQ_Sh8%G1<-c&sVrl<&|X4;yOwMJQp41jNhXQxMOwKLUFW z@jtg_SNs`^WG$K$&tveC*-xnr_bunM^Wx^UJbSOc&B<44Y+aTzIrV>(%6lH-LESt$y?P(Yv;6Jrc%Y;->VT1jCe%E{M{+FNemXfE}N+Wg@E;vCfc zzFmTX@3&-l8nFO9y=6mqx%U!tJ(ba4Hf0_E-~zB2A|?WF#O0dCt9Zr1F~-?xzSAyn zKj1VE$8V@N(&wA&Rc()V|Kx^zS3sK-)$a8U!195m6{o1*IR1$NR9+?LFkISiqM=|~ zBv58b=jRqMx(9YN3oBFM8ow@&i8a9i+A+lR%uuQ%7Ds`3qh+S)P`B&Wg4zFQ9BmU7 zkZUH%zK(vtkSb!bZRfL-Hhz%tz{Ktkgw-a?AjwHA;vQNiWg`wz6Kc1k$NIJIZx*I< z>P z`%NFHM6+#x076bp2XnPwhjUGJqJcI{ZuCfrG$O z%7*qyZapb+3zi`r?iYvnP3#7nPl4mjLx-eI=Z8IJRz*FKz7IkcHGLD)lrcQ_@|RZb zhWHs@a+_z%kt(=-gH1+fR=#^llpt}nD(O#%;1 zMv}NoSc?~EiFC<-2sqgzcunXVTs!!Nh;FBLzvN1PY{Z|AZ+!$*9a2^8xyn8xUREiI zN%67~iQ#Fj&EMNUrM^@s?ij6nCzl68XSnXjK1Nd9hTYLEJ&awsmZF*kZ9A_umEZar z{g6JjxIlh_Sx*@pwLAYg3)>h!V*E3FHoeO>H|$ExCl^rW@U-fxr;A;{j(Olilm&snE%#4;$^T2}z$w_Uc2|bvPA=kE?+!`M{dE29#{F zrr(gbnh6>rA26ct`qG2a0e_o4Z7>(&`N4jb=hiiAv0EI}!wt)hmxovD;w`ZrXWD(T z&xLNKrJy$*4_({xmo{87CC$jPA`Tgru?8I((7{ohzKP4am7@&~O=`?hJ}6aq3w_hI zo~VK|pIQCdw&?hw6Y>oskeSRf+ZSU{y`kNX#8Dp2S+?BhXXT_TwE5!SEw-D`ef4yC z>lyo*_*OX@H^N4GmFg($wCO7bVcUjwpQVHI8u-u{1`PNsVJu?UcruvmY-PBAb&$~z zaDr4WEq3DM2RlbW;!^&Gwnk1PIos_H!@YkJodk)&_xDM?(v(8RV6wa8oUEkhqp)Lj R|1K5f12!rMpX7X(<6|aOv(?k?uz6M!H*CT0lTx>6Vu6dXN9-dA__K z`0bu^_UyTLX6~75u4@QaQ<2BPq`(9K07p?lMgss4VgLTnQNc6VqeBb;fQ04!PS;h& z!o|!P>gWn}um=FojN~uM_LN-M!Lyevs6(x?girO94iU(*BtyigNlb5KczZv|xqn&k z;Hspg47;hV`!qhzD5d1vYUeNU=;aN4o|XM4R820WV~%&^Na9bOz$G7Fx}}puc3~IS z^zMjmNr>gtq9ab`2>qj__?baJcriK?U}5WBd{^m%ddY(5JK$c89;kdyeR)nNyog zphl7&DcQy3hFmj;j%@Hw{#RBk1NzcA+HP~B`!bZM{G4F*U%ilzrbG>in3S?8v!=mUrm}}2c`x2iXz5E`Rpu;dJ8o$V3bB}Ho-c|R z=EB6qJXCccIr368`8o0GzlImp~`a$=rjq`B##ceuapHOXvjBnVVoF*gyeiTe6J*`oM; z5Wa(+o!UPzX2f<1c7B(LqzMq#ygz(ZK1|S^d$-aAT z&#(#rw1A?F)H~0NgG{e4gjzFColW*kT8d0TxcUM(O9wWeDcteq@?ePe8~jzm!W&@> zx0KY>$xfRWeY4RMo_ZzuO%JGbreRE?VDW zxTEDU%VxC0rwy@Z2{8rhG1PT>AN<8%aVcLexPLu}D66bZs&l7(2sTLIF@82Q*Fq^Y zevUY{`?+_`Q81MsLH5Q*QvDBNm#BLEcI5hJ9NVXH@SIM<11068c<9tSJYW?&EE;AW zj^|H}a?`n?W=rg04ojQPBC5A}bDFMr5X#=Y$^yXOR1$e4cCcO2ngZ7mKoe)&tUcPx z=*L64c8|jIsDD2?ksu{}{Z$3_21`}Z)@Wiu8!D2IyV4}Q5LZ6u(}Aju1(~WRpWTqC zVyiRf@uG^NaP{vs&m6h~9oY_ulJW#eF_Zz2d_h&{t}BZzs14ko3CiTJ$1F8E9L?F? zH6BzhG<8lw2VxKb`0HDD6Ha*o-F*aGF3HVG+q*F`W6pkE`=buctMf50t`-{9(_Z@o z7x~W_)SxdM_kxpEwr9U4jX9-RMztDnc*-~p8uULBn;oQ_>mKZl=3N^`90nvS?iytj zm1v~yo5ey%#w=`|qG}Gn>(`d*zAut5#|I4hD{p`9E+$xuWD8~L|KWDmDm`>$e})Vw zn632X<*bNEYA=|i+jQ+T#%&6Yd91Qe788DMnM0&hhRH5D>OW=KrlSCb=!wD7N3+VN zxQxbk9v25o>qq8zOK-dh0A}>T!{Q-EAEXSL{}%meB8|U3Oru3IWo2;cLJDXUL~j|B zQ$R%!XE&@_|Gq+gVH}`~U#Rhk)hN4o-wvVP9dEK*Zg3lUkj=2h)ad1*j;y5ma~HhH zKDoiQcMG-n&TuJ(R9K#9inV@5(X)~-DBr(qHnSOLV`wNyh3xLAdsE(BXB5PVF}8{Lt`wnmeNsOUM^XvMA!hVgCdg6(dMN=9J1{4y5odX1@`+gR<&q7R1B4Zx7!e z^!8&;Jt(PcsA4NHyqJ9RW(Ro+uT}=HHwYc8r*R6#gFThlbGH6({bK7_!P*T3K{}Un zhffeH@q2k>vVdVu{vgPM68C6D2~mL4olzq}kk{S8rQ_Q1S|$ePWs*r!2qapmX!j%f z3F%e7MlNyQyXU54vKQ=+0IVkQHFiEkro@0STQK9yDF!$gYt$cgx^1oh1OK%=Bv&6l z#G~@wdlZp-C*wz)y=^F81~s=_9mjBfz?q^EBJI=y6%A>qf_Dk3W<7Z)Go!S7t^mTZ z7t5CiY_)`W&5eJH_QO|88k2)U9g1nc={8s&j+@p%Gu@U%e)9It1^%k|bl~BP85pcp zrt-i_;?r4IX@$+B%%hJ-VW*@nscsLz)I(~7ryB|Q3HXIFS|!QM;BUDVB?=I1eQwl_ zo>h3a$##EVL8K;X3}PteU0c~r``#j;AJ9GTpDlEYIT6+nqvl*~!E>rVRjUGjUAWeL zkW-Vs+3egsPwq(F5niFA>Erz`t(9<)h)|Ie_O1m+9NzFR{QjwXu!UN^VreSqTTXB% z^tA?l`EH>qN?JW5(Vh(FJ!UbNt#jJ*9)pC}5YfNAoLd|iEYH@i#7|yhxClP7iX1!h zgdB$c3koi^{e;ue<&Xpm-f-Sh>!T14(8#BvDH;;*WdC)|zYDeSOwz-%`>a^V#xhozfj+~#$1&s#G@)ye0nMAO8 zI)mLFN~pDsWF|-kMD*h>7Y7@^8p4ZH7b#rdP{lL=c;}vftyyUTpO5!S#ab!++Stwb zcor;egwz$}c%9yV8ky+*LYDqXiNHryr}p6)&Jpo;?dKW-JZ>fhg(_HHJ&KtKCA905p$kPYO6~nCpwGsjvW`1P6-)Xg$MITMQe9lR@Bx;0Z?7i!{h^+= zfT^j8PIL0v&2QpJnua zZQRJ-b1`VS>p+IFob(wGSWkncR{%kZbI)Oi=3vD@;|^9D#bgdA2?}LEr>}2E(~poe zU<1KegYncl&rgFTP{rzb!p01BL5isTR^*2XTMg@` zu!BV*mm`Qw>}UMI1L6+zRtfmfm>@Zl@y6s{_@R&&M?Be^zS<|vh?Cg>S8$i;5bW-d z^Jqo!Ws_4)0_!)D;nQc~ou8kNa{yhWn4^f*OefyKc|WUE@1S|t7GMOtvn8{O!09D9 z_xyg-s^XXXt0re)0|iF85lFjp^8KL5l^8%Kvat2LjnBzNag+sPCn{)Z*w?!BZG=pi z?BK0z?N1UxDkvEJyVpGWj3ZA1EChOsaB+S{96uZ|nj%SuPM@^CKbF*bO!Sh`IIR|B z^zkpS181|1wqCa6g;VodPuFK?hd3>8D|PBE)D|MrR>LiQO2rS6B;(?o*p=Kmi%{J9 zf57t2(O_PAg3`o6pWnzjRT)h!BhYOpp$pRlqD({~lp@T$MSG8h_mXYg8Pzr3Kfzxq zc7qelN3b33=JgM6GgWVYD%;QD2plLxW=RWv`&{|A%Uy;%=#A;M0A0>vQl%1l#%02J zr{q`klVIt(Q@4i>urB4pIV(B%qjIHUw@E=GJNeyI|J=Q2hOKp|ee5*Sk~l5fLokB8 zdkfNP_ zbB%UEslgogs9+=&t9m?7J~5J45nPt(Bf8A75bNJtw+9g)&ttzPCEzowxJJWmi2e&NV_PPk}z+QDp4H2zsSU-hm)gf z4|cI)4dS5-6{p?RR{H&jO8m2F${|EZcdZ1$_oroaKX|G0>po~R?uOB7J1ZkYXb#Vv zH`MLIH{r}{9S$ag{hp3!TvN2jyXqq?U?(}r&Nse}W9Q`OaoL_2m=aiWSSN|jJxNF@ z`_TYNV2Kn{Y)fa_XZ>yz(NW8wc{&`H=So!!ecHkb&Qi5*^T}nkQbrFQh2<&Wk8p#V zVJK&S0aYyPQS!!dhXlCrLZUBmco%iegzV_IP^M60g3ZPswg2jxmtn3cg#O=SBi5y= zAmTeZ)8ibzGD{|1n1BFJ4ui$d0rXw;RXms+X)n&`4~5Moxn|TlfXXz;wIJ%|g&h6S zf6j8=oX76D{7~8WNsD)HPu%`j>BGZDU8P|-QKD$A2@A4<4Q>W>Od7;yXAD4f z+-4X*hK@(dU=*CZIp#B)7{=+4ovnUF2>N9l)l9Tqm8SZ{4dZr(z|$X!OLDcOk`L;l z=t)?eZ2<2TxSdi2scbBy1VLN+{L5mPg;JfR%bIJ~G5%U&YN=-mVQD|`wlzXG{84=u zX6z*lY{^VIOVi#^;nq|v{RQ_Ub7D-(OS<<$C3H9K7?5EfrXr!eKMDngr3ZZsuqN(R zDa4;OFezkD+8Qw~(qm`ST-K)&x+*Dp3^ai3_-}Ol;J79!%>!W2bRfICLc-67*q;t(i4lal6 zSoaqa6W*=sOnd7cvMMNq#MT6AsaR1E2hn84^nKGLBK;dF=dj1BIJf+fx7UhH0)bBT zQ;oIi00BUYw0Sk!?M_3_`sV0)n?UixOr5yQ!1f>Rrn=22jwj<>OUxFwGm+<7vGaQD zLl_4yghn0A7jW2yXMTLYMscaF|3lk{xq2PvT6HoX=SCcWvF5?Eph6J4{H^603Fs{C zz|QeqJ8VW5Y5%dNOR0*^1r`NtB?YJ7wUdN*C}LS{;IZMq`_hNb78s>;dFiN@^=!!u z?@O&wiDa#9n$m$ZG@`A{0yBzt_h7 zd_0G|%G3joWgocth~tIxuhs(nXbQPJe&HZ9c*zzF|XL^2eDU;$^$n;q-BZM&r zlKH9D0vW-$aO%d*Eq2;X>Qk*XX$5j_pLkol6^OmrFgVx2CIUl!Fa9kL za(@w`*@Pl-ome>viS6xBYKR5#rjpG$ep5o$YIpfDE)uGh`wesK5+;Ceb`@ z?=Yi;R|!Il0f1IH;eB=vZ~4A=JCni<*(-E!Q9D-Y{^oaXCA8>wxO?7bV+r+BWzZJ& zRZeuTmKW>K6y9Tb3hcK3dCTJxRo3vua=tu;{}V|Bm)K^4McL>~1$I!}=njh}UK3$h zn3^g6H!l2sKE#8zwraZ@AMXn<4uSqk>umW)U5egD0{E4Gz-dTQPeFWLu59%2QSi#G<-lCn~1Xnmu zI?zC;zkHFy_#pXBXWi)b3HU|bWgm&hVPVSxGeFJwN)&F8(C}?fTJ+_-@vLz?Yo{X2 z5@<~eT6EMD^nICp`LZSe3C47i+R5Cdg38O>MV1&xgB68?cs#d7hV#e3fYn`)o0}n? zByZ%R7h}X*&e+!E%~aH8`k&7m*c)HdE=kprn!cy~fy8a?qJ*4iptU_1RuvI%0iTtS z*9O?$y12d^WB8hw^a!`pqijTCj?5hUgXU)V6R$6yJYJ#Bw79OqNK2r2^6|?4D!R>0 zOn}!^2CddwOO8j1Q$Nj8KNk94y#GT9G+=A4d1>z1Y!YTvvfP(h^g4Z?Cw&O5RG4kRArfA?Sp{qIKouw*G9|8s|XY)6Wt@DYb{QARjC6) zoNun$ASq_>ed%yoq-iW_tr1HC?c&NiTNI+;YpvRkSymriz7)Pl)NBU^N{0M&L`*LBb0LSO$|l7r-bBnE%~~jl zmD;Vhr26CgDfWlbTZInRs-Iyp_E(rap+Xbi4#OBL=Hzyl!)VK&5pZAiwExbcr8}e# ztoEfWl#fwJ$RLc4_#pK$9zQ&4EY(7%w9iOV-J7DY&?hs{5xq>?tM>4cEz`|!igQXd ziw%8tx@f%a2YHKgEL7$T$#e<9bX;Z1>IcG}?KWrUESszeJwYUb@SdXQC@FGu-ZF!1 z5l*)lEDr zks60mUnEWhfMn>DQ1UB~MilPbtdK&TeD+*JSP7{U_?5B(rd3{JGJ zRAfOr{PpM~7nOKN+~RIpb4;>V2r$InLG)-cr(SivEI(nAyVO69oSL)QsH>&Qv(%8$ zQ-n;>Kw9O71-Dp8%wMat{F(PNTH^hCV!K@AG-mSPQI3BRi?>Y8$I_(_>-fmU&vK|C zY)XZ809eq*eD&A|!(=Ag1CNzecqv5a6(jfQVdDfa1|2SKYn@nGSDO|RlQML=Vl(v_ zCFADl;}rjTpzSSEaZE$s*J+aTM%dQDC$jynz~a`r3MK$=I;vW>B0nuMSxx4gN3d66 zlE8(Op3ACA-}mu3a9-Js!6c96qvL5v^Sb-tb?(*1*KTZxDoE7siLO)$UrXoeeNd;; z%boj(zA*G-oLo}RoCt>*hOkA;4nwi*;-n}mh=J%$0xEJbLC3FWK zIZ3y`6a)Gf>!tzGJWn%2M@ykg3m(QgSBDD@50qvz zID+LVv?6a!4y|Zov!u4`BBWx)nm?D|SI9WfB@M!hS5P^%M}=ULdgmNMdji>;)ii2; z__}%poIk3ED)Do(&BW-FTIbbaWZ9u8OPS zeH(~2i-g9~;3a!P2W0xfG#NILWbtBr*%bXKd;Dp%+*nh#20^=B=dV=@^y@CPqOU4# zZ(9U-aPk`;d5EBGIryAfHa-;T!!Jb$7s$+P$@D4f@Ostnk3IQ2VsfQ}9IOUn{;VxZ zx38RC>3#cj{f1LQJSzSE+uxdYC;N2;)7_ZX7eR~__a{;)6Y9{D10sS7IG!3&ZVe`b zKs^v6FGXpw+awd7d0l;l0VeM{5D~S(*K}!C#$;)k3(=#ZQR1*xBRw@Ku-XtO545N9U_6J&3RFcUAmG)3fYt>BPe}?+E4BB~<*X;L^_m(3T z`qzbf1}n;MYqoyIead$`O~G8UJzIgvfH3^LDgBSpecFppHD)UPM6uB46co|^i5w9u zRVa52j9(*YgZQL7u9Bngz4qu~C;((9Tao{2*Gz=l^_?ir>KRsJ!u6iL|Qjbk03%v*W zj%?wpL!B}ke$aqek&v*`uA~F6aDGFje16K-5N{NPd>Ic8Lns0+0w+R7lz@X%zp2>l z(5e1~4`OniN{W$3zbV^sHa>?TK!#-dH6;FYIwwRfU-tRb?~EunG&9O!6h}dWe8gWE zK|+j)zNrg6b~@2flfS-N+}&NOuFSTW6>iM66jW8mo-_Fe5=j-BBTKKB|O|an<*m@bKFtO))aHi;B;|p zj7sbk>~lm$@eNXm#@FPjwE81UHhE5|PLl24#^e?7{ZM*`U5y1Gso^=yuSfNH&ooN( zko7XxH|diMmCo#LCP`KZWU}9C#p*k-^#?p%>6z{VClh4n(Wvlx9z0Q);~;`pKrWG! z8+7(hj>n2l4ev)=H1E&nmRCF>-9K`&KNd3UoQrt>hDWmR^f;3bLJ%8EmFOCo#gD4^ z`_egNOg&rp2T(!0Q!D){zt-ES1SGA@Z>4kZF+1WzzF>K@s7+mQt1~3XBM4F97C&M@ zlz2Le)Pdpp@^X`@vr}Y(q&<5AP_lX5)&iYnKaG8K@rEN^Uaf5@S3!28`>|7pRqJozsmEQ zkeM79E_0!RS{*QcCX$(IBKaaU8Ok3zO8olwYe_R~Z*`BxSK1RL5iS?j4D);R=VS5~ z(q*|pG~4UJD@gw&wD*BQqD{1~$}Y~of0s|37iV)9{zo^hXxd5SK*Xzx9)1ky(j$gL z=jJpWgk2#AX5}icV&7p&n*)=eMaqh{xBM`YFpO!;1ZIjv5CD7g75Q_{rM&*1ZaK$r zi~B{EuR1C9c0Mz{0$8qP2=2kuzaR>qki9>0zDP>=a(I`(vuQD9L-Qr$M8tdP@>pvH zt>L@^U}?qL1NKx?xdwar;anIBDkxF2k+@l{-BMz!7Z(~g-n4J zsR?BAwgr{%s`@YgiEM((sh}-;)%eGKH$ju5t=nPQ3%l-cfD5Jv!>dCu;F*=C9YS;J zW*iMIyp5rVcVJgd_?4g)`y%4xcD6u`-F;-7%N(9s5=d&;4N`>tr{4blYKm{*IHLpJO}EwAjDI(0w05Hy zvkelZRMe zx8GFquA4u{vGYsg3N#u;D}rjE&9{AHhRtg5B!a9L>vZFP&xe*Cb93^68&6P`TrQPY znL*w{kDWIv3#{|vAC&I|m3BMmiiW!2L;aUL)5v1ai#doU$DqvSYQvRC|GyOXZynnP zp2*dx*V1$q$+Uu3bB7!xxHON1h(Cob$hz?gYt7RlDWvaFFuXjIAw{FfjI-HxjVVVT zJeHzen07xOE&YAZhH6MzO7NaeX^SpIJt<)yd^GrmDDPcmxa$8{Z!B0IumQ3Ahs|#0$9ah)k86oJxTa zygr_rl#3D2O65jc<9fMF(_lZ1+F8nOx5p1=o6uh9%VTt791t*Cb3a(TZjg zMlXBHB-A#l3yagEQ&RSXhS6p$%R$e>7?c0Vvl@! zP5sWIQN5QDp{KGZbDPRwlM7xGV^>l|!`Rh3YE0Cn9nk^4)z9qaIC|mtP>dhvQ`llbqTBmbuP3d-paC#Q+UEhz zEu7garEhDtVs`zHj4}5i7qS7cju*QIr)!uMGd|E65jmiO)kmj+JF0gCf>UlccZv-g zG)=E~?Kf8$7CEWWSyX`u89v^;^i}t@FM&J<#iaRnb1JK|^$l-iPaHcS;;DUpQd8Lxj^?h~pdVSp1Ff;kXh^hbh%BK)omka2g@e0h*m5d9f}TQx!0laFnF zm{S;B^clGL*MNIL&s@YYWgM6@G+s-p`-5NVWv}kbY+6SgE$EbI^`h`MG;KvabwAV1 z{VvjlJe|tyVCY=;EgLc}O2(Mg0+%~t(A&~Fq@Z)#0eCkUM;dg;p5CnPFZC4^fC!XHUrDk!<^@!JpjoLNDQ1s z5o__ER#5aE&tJSSbYrCx>vRL*3wXVr8{3b(ux$pEk66LqjE6$kF3WrC7-I4rCua!F zFO8m$0ESR}))d?|bFLfpgRIS&-KfGTozDAm4M?3JFgt)2vU&r*NMbFf4M?em>Xh$YQ4YPlJsi!erb8smViy=L*Jh79S zXHgL?A0d>A2in75nQ~#AQy70$fM42~Do7Vd+uFVTfv9&$qP|C70rhfbeNi~LQnxBV z8`|6Qd#-eUzkl~uL`u4duaSfJI@CT*m91{UyXGkYR;M;?Dp&C9wo(NEiGafIerdDr46OZLRE7M_ai3 zHhL*LXqk=)7$3+E@#=>{l;QRW05~AhSb=Qv73>8N0cgVSTjWB0SHtm&hp##+zc!$j z_>-U;4azR`+( zALI)Dn$f+fMde~uN)VzvA1!v(bM}!`Uq*z1{M7FO_;46xxta6Ti2i}=-w3Nn7j^_| zEi_JrK^{7#V0xw4tQyu~x#*Y2p&NEqo0R zi}e*h+@8j{r_iJkqA0>M6OgdU<zwBZKD;b~o}MovWy{;;KKB>fZkcT!J-tS%1$_keeRgp=L^`tEv=B z1KRmgJA6Iy`BVYO@7kgJNJ(ems$0i!N6l*3*`$n2Z_sH?W8k44ODqs=bxBQ$CXt6n zkr-CifE-Uj7hF|8?N5yF6z{;-KlNbN!vdCv_he^+eAPvp!?>Vv7VT;Wt`YuP51m-l zV8}c*aZt1i{DhM>;h%22?cH%KnXl?8evBlWLe-lo0XgUvBP|bY_@i2p$#>1A$A3oG z$E&2YOdAl{zb&$D^TX1vI2A-$i&KB!Dv$$lQ|>z=XWSI(ESk6|Y6-`mWSQcvdU&6b z4bZtXwisxVicmd)_89;v?Rd=)E}P`3xvFGn2QQ<<(~7^c&060194zlxdMHEAq^6e+ zhNoeySMye?*|e$hiC=k2p%S{+lK0WZ_DPVG6xww($$Lor5muG)@55L8 z@Wtl=?U+ELdaD3E`aa>;?h>&69f#50J5d(;Y&6ayNXjufD|fJ32?Sk(?m5S-k_Wm# z?)D2CdOO&VNHx-)KetRnOZ59TJkWZoshl35Kr}#Abl!nSM|k_qTHBIwvQaXn_-N*W z8GQWnm*|~|$~>%ikXhrp-Cq-Up7P(g>4adrFVz>YFU-vO_!4y6AhlaD$jQA zl<$kYA>P8#n=Qmvs=`*7Y;%|X&|FksKhyh+O2uvh`4bV`_77DXH5-D%CzJ0H>iM|T zhHcs^P31Ldy%TVDXLfFB2033R*TeZ0y&7E!;ErM;`)uOVWVyJcwzEE^bk+wOy-k&V zjg+u$Guy+^q}D2uAaHV#%>gaKE~%(+*q+;8D^q*z!Ww|f?e@D$tDs?g-7`DbdUuP* zXl_lZem@{3?R>{{qm~@&CRb0v>(4%^=he@{oK!Jhu8d(bU?9m%gocv~)tu$lVhelfeML7F?XD zt95_#_Onn14@k>hP!}hM1mqdC> zrr*H%>(DI3V|jp$SK3{W+{YrAwUey2{9}#9Qn-4)c0rY)zPaAaH!$?W_1@pA)l4Zq zl)iUx`vwlTN`+A&3%Bn&Zg!UMcP_9iVx74@tYBZuqP4Z(`1fA-exCT489?nK7>!8h zA|3ShSXX;NX3Dw3aTf@*eCQtu}o1Ggod z)g$@KJKBe1a`ak>`2!pJN76{Xu=ZgPM1B)BJaYRC6?ag(-I9{NG^p4g|8PB+R-;GM zxo?#Q*15d^OM)JL&DMr&69cc31<yzi!{vi`n56kfd!2eN!z1(fd!UG*GuMW!#kfdQtKo* z^dnLH{Q~+f6*qQ^A+Ptx?4@NfWgb+8zU7mjc%pUw9sEzd4<4l@|uQO7I@%hEqPa1{2r)R-Kf;=L_2GGbT=vH0@;yu1k*z>T! zlwJntbUw$)gTp3mro~gOs(8|rGA9h6h{s2W-0*p6+24q_)z*j6*|QpYyB%)Y(3=fT zEfN}$TONTekQIg86IIv5ByX%I-{Hnsf~yb6qxSXDFn>)cx&f=;ACHuR72ZY;EiSfK z`@3&@2TfqT^aT(veRsywzruR{ue3l}%)4ZdW_GAHjyk;lt$h0O>>NDSJv(EI$LDel5N>6LpzXSzcicmEjHZB;6n%4O>>JiEB z1&LNG5d{!3nk!i;T2C7$TplJB9D!YWb;qHLhI|F`D&N|%!(q`)jM3El&owwI{jEN4 zH7O~gwY@cGfe&sH!cR<`%22hdZmI_!<^p6U4<)jqN&6Ghi z6CAp_yGDyqax2g9gfiZ5=x7l}`6a0gmN5m=dc8f{0%u?EONF7|iwvjXk6za~+=G+Pc?%qf2LD3T9^C@g2$n72WWze)n)qF>5y9 za}et}mpcRSc4X|i(8I4>HXzTKRU;c$8_ORF?9tyO@u_Sdw!J-L$f6!=Nz&bLE{Uxa z=r?`l@ho(z`Fev_D=_FS5=={_*dcmk+AE%M2^Xl7J+VTNog*dct7ZCxUgG3*Wj%jH z&~)^E!&wNdKVO<3?vNr*7jhuN>zDfm>7~MqV^5|gm5j*`2`Up8+m7t~yuA=Lrrpr) zqPfqJoo^B;0(4bDXY>rf^T0|Xz|aB=W8IpoMRZhy1wwqCurQh20^d{iqx0ezizWP+X|B^z_lEagL2`h`5%SJ3V>55 z!Sct0S7Rph5goXu5(l}h!UK2eTFi;289Hvq< zg?8n5RJDy|zlg}+Rw8)Q`UtXAE<Zg1NIR=8P1%0_y#m5|b5V#$3QGm_ zX}r;81(w5nT&YzR38qNIegxAN&nNwSKDhclBpG};qQni=w9yu(y5~W*SmzL0_nBEg5uem7LMwUso9=Ov(k>vA)1FijZj!)64R&&2~MeGIA;*cMY?~ zHRHdYj+$KX!GFH^EKt-jI1_L~e7Ak(Q2Tjfz)Z{x63dO>1JHIFN!YsL_R2HOrA8@~ zVoVDaGa;dJ0)hvwMfdmP+vAj)M&+{*<63lIT`k4+cq;004m!_{$5JI>p==J~{M6)& zkx&?idg(3VcCQar&H>Wg)1K$g$KIx$noT_M-6l%;H~whAvBw>vSPE5-Ze!%iD^l|N zr`z>)kmL=J_)9Xp&UDBZ4OmQcuDI@p{M3^`K~?EC2}P2w`Y^ay&th>j4I0ml3Ax3I zZeHzmU2=FOgF{D*Pk=beD+}`cUK3~duK8i_+UYEdQxIOGMhe0zE9KDR^o+X&Vo6?? z((;kCT?y@+N?+%zMy=w`k(Y?gdqwHGP9`RaYTy43Q7Tx(_FqQ2IB}Y6$klrP9FQEV zny@n!`04LUReRMDBY*ila#6L(>BIxyY+txiwDst6X%_z1V8-@Pu;Bj4$m$uQ8p)RM zforW*RIS!iQIr=d@XPOQ@eadHu=RP3~U#*@Rl9Q*`1!D^-@kQZ*Pett+ zS^FQidY^NQ@+6CThgn?Ope^ncjgzLywdS1b^eGcgV0A1jA3jq1bNS1yX+zZ;*@<^t z6B~B2CLBUk2lWW&9J}r6HcLkXRm{H`aR zGDcwIiqH7ZGc6q@*f(O$%+Gb5(IbQLmbtO69|GbvxP55r+^Es!GW}I*NsCRsk!ij8 z?yr}kN00f1@@YB4st#0gqWi`ctn6gfYdOMq9497SU48ATQbg}{0N6&1J=x9}idyH@ z@IOx-Ewvf^#x=aP@%8IHdb!lJ(J*WJ#AlD~x?Obc&-PU;uEIanq^C$(A*|bch9^WS z$k^}xfxO)o1vQ#Vn=Rm_-1tjEm0~umPDO7H&94v*r?93X(^_GFLlXS1ggKM#s9Y4T3>24=^G!y5o~?a5g?=iNXt8#kD{y5;>H|{ zfidIJug(~P!^4>B&}wm*47p6EUa;=2JY^j2llT7qcwWBWel=p;a9e4;!+UaTqQz9q zR_42MhSQLx`fXa~ht^x^mS2yh(5#KC;E$(>oF}nJz|q{{7yRfC$32WOHEz@c%p*o} zoA%35i=*l3zwefuCg`~*PFJrbvif93G?)Dkx<0*d%Od5;zTeYfC5fz2^}l%KKg!`u zpx5EIa%}{3eMal-qm@3cWi;6^TgYL{hyv3R?E2SH7t8hEd7F_~)tIy5Ic^su#(!=!rZ*jg@^9Wa)z=ecCq7r+i}Yq) zkeyk%B8qw1(DPOCt~Nu%t>&i|IUUqMI^G+MKUnz6b8=@>)z`#h#os8Bffa{mN1X5e zSz&I(;WBBp>qmH3$k%3zc^S~7G-GS*Zy)=Toar>QI{7XvhF}Qg?M3mRF@-BwN@lps z{2w^V{hJOpYzkRtl{_n51$CRMI(i1ziNWvqvhHq{H5$^(ko9Bz>4B@MoYld_@*HLK*yOdM4iTF&n$H>u_Tvt- zqeMNv2Nt4#YSVMT@nA}o10JB2$A*7`1p5;RTM6nd$oo=ChEsmDwz>&1mdz!##5U>A zQH!AOg{)+Gs)$#WhBTzt18?uGe_?i@0fNl!niT>Atmr*2#j-S31TV%h%9X5hnYGeVB&DWByJ&M==v_%*z-c4NJ_+s&eTF7#ta1$+TVGp!J!IbJTgby>dX5eK zU^rGkQ3!zE`gGPmXElmtTLm?@W_0d8lUU)jH|;R0#S^j9+ZNqR4{A5>PQmlX__R%n zj4Q2XPUeW`tc_gFjjub`!Vd*wu;`U}GqVG&rPReATt|w~EwS60fB6cuobLLO%-zoR zEdr(G%tsX^dPFkP0A+4r{**&{Fe0zr2XGf%#>JFRsW|xW9X^DU??1xmrti72MQ^DA z{gj1VASVAy2K=hHw$IiKu||+x`E%=!UdZ!j~)L)6Cx|PYe1;p^`mifgX50QSY?V% z{d9Ff;tLtS84!f#ZT#mujfu+)H9W%&Ekj_e|J3KvfZu}&3Sag0Z8JjyqYFv--F=_Q zX=)u;vks`4Z`7KC_TcoNAiD88iEe3en`kjMiD(_(Ca-DA zp>8ZBm5w%_#lxrQUc8YmHcd%ii60gJ)oSd1`^<5b=qD>niSL+E#*YRl4esn4@(d94 z-G~mJDG$A`xqbE4sqGWa(^pHbLOmYsDX+Mpo>z2_X;{)NaZ2Mu-SJ1A65GwCN`t@O zp=)dZWvXGLJD>_mitJ9wLr0@S=LrE{gD2|}q}X{mPHORB;TBV+Z2_iUd}Dpx`=j&K zI+f|_kB@E!^&n}yLfKR>wKE_$m03bN`KUT z^_+6CjI_VjP}%;`h~U6w63Nbx-Su#`iY0O}GA8KDS*Mpp!{t*5o~YZ!#@2+S%0?WO z;*_(qB#*D7<#}+{-HqPeZcBFlhRepVgw=eLjgA8!kh##5`i#ZF*Ot=X@2V5X@kJ+r z5K0hlqt8tH_ieNhXo!FJUJbU`>Ya#B=&1`S05=tthih4rH|!NP?ua5>JWj>Y`R6j%%!I zrQbZ?_L(ITiYG7xV5sYwlR+ZnnO*;!~F4T(Q*-d zf4%zf?6~`mCW*#lcFDtJ@z;sx)|`gz{d&azM^j;7}YwaZ4b{%XiRIYwIb3O>XEZQ2)IF9iAM>t-a`^f+8h)y`L)#GxmBJ zN&Ph56@0z{lX5f#)V%zD4qZcx*PL6Z$a);muAmlcxaiyaz-9?T#m;R_>d@U!DI+-N zVIU#g+z|M)-$aZSOMe0q!nm8PN1DvaZ+nHUXSeLdJJq&P@V~{U(;xGK?ZZVD@5AEN zKCP@Bei7nI6CwYC90lexcrX|Cq_iPpY^!3COp>9$!qEx6pvCdDp-yCDFL=1DRIWix)&tiJSQAz z_j_X8>wGhN^$CbVqJsjsIow9*Qv7erx>g;Y_>4nIP3`Gh+0p+bW}~2QQq_AHMyR z`KY0D<<4Pe$eq~x3$hnN0oOlxpNwg_&@>HIr~7tOM-ka@f!ev5WW2QT;#hd`zl_ni zZnv1SC&#IN%4CKEV1jq68E%#_L;Q}|PXms*f-ev_4}VMw#>;{L?j;Y$SEXCg+nR9$ zdu`XR0GXO!1*m}zA?JyP0?}#X``L6+|7B*>>qQ&=muvTl^RPG067-$>_x*>(a>?3H zs%5BpGQ-f3{rPt(vXE*if&AtA5UHfSBO@R6I{G|;)eHhHi_T!_1}iT6I)5xhqfVN` zs`p~2Z&8Ph9$K5aOkbh#|yK1Uyx>c(VuaDmtfcJac z3ajg`7lK~)>YVHdK8x(!Pf)Ox?>D^?5D6d-z5L~7!z`(=F~7TPz8Qx4FC8%`M0grZ zj9lGHwX-OWwg|Nj{cW7^{d|Dl$LHbNBn(e*-i@xcA|WAZvA(pLuUTOcfA1E3YS-l& z`*DmApDn=tP8d0bSDhUGTa4<0?;1_$MP0k{vsZ`mR{=@#ZM+k=1S~daPbUEu!%?|9zi1SE=u)7Usn_N+n*6D0 z^Vq6ZYYQG7Pc*$pJ*_nT-5u=tl9EaspmmRvtY=66)?*O=6tvCxwtkjCpx%f6H|zJJ zfc?;5pRqS$)O=li2i~4mX*0$jbQDx??<9zbcUCveN8I?j8vsu=t1c=}T64qWJe+c;ADIP2|Ge0J=Ckn#8$e4H9aXbZpA z%xcgk0n1CpRV3hFxDoev42Zlc@zO>cQD+idi(>|Fyg{&v(YTYIuC!_*&WCAslVX`P znC6DCCOz+$@xE`bcpTcQv5@r|+?yub5O+VbkUOsdr0ruP{_6@WIb=1H)nS^ z5Y?mmqa5>K&As04NLbi2E`eSF)^M`MfH@B7+f*OL`}(q53pn@QLI1fDrGath&kro< z?xSP_giyhY;N6ehIv~dk$&(Y^HYb-KpBXt0qz~dd>~Pm}UXW)VTI%q{xG{yHbiQP( zpKrhaWj5EluPCI?nD}K~}@&EMn+o^xXSyH{iCFIK}$NtTo z_2c6f318~#bP6>(;*o!lC27S?b)wn5<< znI)W7F6TF>QtV;xyL`4$ulM+rQI4X{)4>xYs$&-!!rP3%DF_XJ@3$Vi+Ycp8>DpGS zaaHi*8g+R;^7l}<7!S31%s5PM1=`w98xfoBKWlXO(&xSq5R>9RVLJ6u0aUw`uU^ZQ^V?Ls}z z10J;Zxc1uk+#J0pBUBq)ARqcXI200f@;2MaCK8jY!(>9m?NI1;Kxj|tpA`8!nS3`u zvG~rt&V~nbMNfG~U{Tn$Fn~RrS8r}%iU2EG4(PGM#1#*FQqKw*XgzjaIDrFY#)ECZ9Yea&3+aNXmR5BW2wpB+s8F^I4edmSfkPe(x^MNc`Q8 zwfNm`Y%z#Y@ZAb^pUn!Gd%sumNXAsmmu|WUCekMc!DLYQ=g)9`?Q6Q)&WMUqy=4Ls z=Mqouo3iR&bYb`XZo{eafiZ4>PNW3GCDKmAkjvQsUF_R#>41a%)DSK7fy;iqSE*w# z1HOBwoR@)lY^MS|owd$41!`NHKb08X>+M7A_eU<L2Bt<6N+k(OUMMP-L z#fe;jfb0}C0l;pqgC5;?J62FFmO)RRoe$HPjym~%j{9U+E#3WzL&6U!8egFroc0^A z_raGd6rjf%eQ$FgD)eEDlaBs{Cc7i}g22uZ2U{zc1MPy^8?fl8O3d+f6~2y zp2s4I&lxH~U@Xs;n;7@UGtHK;fVk5(uj^m}rri`yq4K-Ptb5NQRSKP6HA!uJmti$+ ztvH0*&DY1uSs6o$Y>!%Mys{7ekWV}BF3R_1Cbp>}gWey6!0hfaANVF*|9)j<^+c6g zP3K9C+w4%JQbJ>jZd4xW9<`s z>Bqx`I(O-1!%!3cM+@VCXa-~|^T6l+!uSt;zF`iUpbrpR>B~op-<;gh`LFnr+sCiQPlG39;-Mmyr_lf|wX_lz=k<=aMPUdiv38Xz zBQBUzmd=f-674s}7 z1fK2?wh$%|B`1$Xp;XqLF6Fu^m%@0zYZj=hd^_d}ZOT2e)EmjDaVW!(eiP;>;*7V= z`FQ^ldeB)04_BVS&wEljMLjlsVznSC2viIGf#2z>X$p3{l$K9=LxUE6)Aee-P(rpwpxMdT3{ zVmxltZjtg>Z~AZk&^2UA|NHz^1*+B4?A&}~!Z*#v zkbv(w&|YujI<4>feDJB6!!z2^tgV3GatIE%MHhlZ5BsUVOKZQ z@9mp2Dcf(1D{atSWFIRfEK`@)g*M>HYAYB18XiOw?hDX{1x1=mVh`M~oixA24d{c& zOaVtL&nRTtv~ksCFgB%M06L7@wIAz9fhpJ`=qFFB(P@kqXL@z1TUYMs%vi&Hh#@$F z`2v|o>_CqU! zT$vYoEeI?X-D>8y3Ik1&5puoZL0ht1r*K+Ib>!oO&}$@40@@yCBJN_-@7JBRjc=Do z2o3L3`MFYUJ>?#nTo8Sx9M732F-Z^w6#WD*Wf)*n_m}KpF&rtAzGmO)6brZ_U4WyM zJxYhx+UNy|DhOPwcxLWoE2Tyj@wlnBU(EXnKN5m2OoXEM8ubK$qdtL(A8j9#BLYdM z{LDU}FBJFD?zy#+dJ4`T25%q?k;+%r0=f#GgL7z>sD4rfqyf$rJX0|nbhlz@y6Wa} zd@Nj}RQvRsV{-!jIg<={PRzu-vq1j!MHcYx@);xU&UnIXQ!UHZetT2e4)_7DPRc{k9^hq;%Ls`;Q$w%;5z{a1)y=&N)x+4r~M zvAPJ0qq<9yeOx5{ra#vDE=-4@#KoAx^|HIVZ0NGNDPKjf4li?P0sChDCnk58ptiO$ zE<<|PW&-|=zQ0*pY2(|^%%Qc8tb`hfhk_SIHx3Ps^OB4uu9eun3}O5{;!Y`}7V=L# z*%?Zs79gi>ayfUvN|cbx_uBD~aFYfbFC*r`C*FrXRB&u0LWG~#G>y+OH@&K7-w|E& zDKt~U63ff~QWJvR-U)LFXbc?{SCnIkIPJs3pKHe}x=nzD{eZ}90E(8@4m<0_$OnL| z95a!-U;#oXUwd##4>(L}9jORCQy?ywj-vhSV)U)w1@)3Gd>9GRT6Eq5MsG?*3N zNO5%#xK1%?VXyA6df#u^&bPiwTbl7UI}~Ew1B6pLvFo&#F^^$1{fMk+ooRbRn)jTz z9gnr91mRq7bCm4*J9L-|WAQ6;psZvw=k8=b1hmAM(Qb;XZW~i?!5+Pi_d@Eh8GyAI z&`CNM5jZg0l?@y<_K*6jRbgOQ69?sTyc2AdHo)yPt~cR}K8@@`o|Kx3_4JA?&3H~o z`tUB^O77>t5X?gN7V@=Jd^)G-HkK_!p>J!`YGTsPBRtnGA00YLJ)_NYKskr_l@K$u z{S&d77dkbxfc3BOvC*Q$;sjL0mqad(Y>6xQE)kJS^GU^t=m`l$7$q5O4Gu=n!>z}7eP&{@p$A59q5$f_yd-kFaT=PzJ_!Qzy74u9Z>s(n{x zQJxdRx3`jSPaeZMHo`i+LkOyc^_yI{VW$&<)k^#7l^>jlvThw?5aNRbcl8k;{z>D$ z!hNlj{$9wft!8I_r`o1tz^Blt4q{sSL-RbUOY+EETWKQ|!xGjf(H5VeEe}0gGNpCL zL`Bwy@8J_`a!IcpO5xgtRAMzy3|IkPpSVQ*4h=s9rqC;yby?W}q=qD{B$ zM;`NBJ4|t{iFWj(BwWzw!s)#GrfoArIl^d~wiMmw+?uv{w&^Y=n^`!l3rRhhvmVn& zs$ybRzK0%;-iJ|Cr_z<0GR6Fo&3TV-??mi(A*IKCkYvtOq=54;Xg-_tEqWIWOR7D| zEM3Cn&?62M~I0yUx}_xKTpAU5@mEyiG!oe8KvX zc*dz>yh~Qj{r;!dFkt0*jFr;!&;uAt^fX79Ra4~J4Lwy!oZzrbN=#Sh zS}8U?9d28rjn{DK9v!Yf6)f2qw1KyHZUG*d+kO*>eqtqJ(eEfk12q4R439Ci4mdC> z%UR_5G%cVM#Zh?AQyEk`z4}qg-4mlSBIMhjey0~u!Zx|P!6jX|Ad{rD^hsB6_Az9gI2?{$0j|jT!)t*Mgc~)(W!WICp z94coFj&tepEG1u_tpV*~{XTBMcfihSur1{(n8J4~k>YRvEVEU`s)?B<1=a+7+itBa zHP!H%gtrvpIMYl30Rk-T+bbW@GbY-7-9?(U{!v<^mE+vWlz zqkmbluxv5EngA?(8SremqxLlKMAmqI!P=E@14lE;#YXGO;Rx^3AQFGllnXad~< zF(c@0ClSk&ziXG8URp{{SO`UbA-q-e$G99WaR-WHf818U-z>0dCT+qisu8W`O!|QMX`jNViv&C1`TMf_)Q|9&<{I2I z(B=>?%69@?M!20cCrY5GQj+sTGw^Xt;1P!TPfJB2|0fd3NSAI-phaGkLJ1RBJ;ZKp zTLP6eH0rma21hNLN9z<+RidT?&}B6>3)+?!oZ$9d)uFbO-cClg5onZSEKtV4AgYBB zU&RBvU{=NQ+R#b>`Ivx)Jro?K7_NQ2h5(Li{_hG z!U}RD@Ho2#&CGq9#DBzINc^o<8I-vrQq%e*-X!*Yj85a;ec=NN^h^M8beU5lyXyXd z?y-kEZh@SKXTQ@xZY?+^wfL=|oPKK7JtqHyO*7E1G)0aEQc00*G8wTN@avnwtdK^l z_?pN`B=)U7Nu^TuxfgBEPe1xk)YDiC7!f9lG?@Ol7fPN#tmH~@Cdmz`pjbVK!;-z| zc0do#iJ&Mx87s{fbpQ`TxEiU^n1g%K)J?%Lj2mNbFc>@`zV+$UmP3)K+GSP4Ahz_Z zZ*h>nh)&;EdY>c~Vln+#T=wOjIW{1e&Rk9kzu`RAGjq|QmjoC9#4fR}AW?QdjbO{C zbbI|x6;@L8L**k40hQko%Nh|5W@=D#ME9aJ&rJlZAWr01$?iShvV3lL9Yx)zm_ZiV zojKf@ngx>jt$H854zhn3JmA_DeM9t|o3LY;0*D-!j7#AP#}D!K}aX)tc(mKnKJd63{wIu zEO-rf{$};HE1b7CltXu_UGLMT?W$WeU6Pgog)oR-U&1X4me{=r5Wa54`6xoC*w!6_ zs!bHK0*clH-g>k6u?yGyA+}`Doy?SONPpQ7BPaWnx|C}roKB@G8bHN{I)r}sbA-Pp zNw!I-bUo6&0~v9(9u~SUgxk}$%H|Rx&G0cT3#6Ye-y2f2^bOyf@B?Wr_4s~pOpWOj z`3Ve#oVOzBj>fuVCiLn?#dXOQV_uyDC;qOpXRR@VTrU#MsF)O82gpFXXp7?o{{qj3 z)}qtiR%n>8X4Pb_)<$%J>t;iA^rckKz2ZHPZ`HGS4hv930!+c3_2_JTob}9{4@a5P z>Ot3|jd%5FKrjZ1FNNcS5xZg^X>u3t9I1L4(zY|x^OUI0#+xanA;2Q1760@H>pX&v zWm0m_jesg{6X1i|zz7?{%$NU-O&>Aw;-y+C3RE4+;BE_p8qKoCiT&NIz2$vInJo2B zloGJ}lWW5U4Xve&4sc#1o*K3=f=IBMbOaZ}9-Pdw|NP!?hguRuhA|fLr&KV}hbNGg z4ty{;SHP~W?|_J(_!R%EcFY6ZwgqLm26aJX_CmkZ3C?6iE5@UT9$xEYSfoJS@POe8 z3}*^O09A0N#r%XB_!-)*R$1;2T4h87HXr2k=oWtI3B@PYuvr(RwlMNlJ5l9D0axXr z8wTaEDSx!-Ue`2d9i)fwmH%2&XgOwSFzQ$ifw}1WH=z5+;m;Qf%5d%zpT`#$0-*5R za7v$|b)gWUYg4etb~d9)6`mi7ZrF`-K)D1i>-pmSv8jPkuW_6!9kL= zR70ncG!(d%u_ACK2ho#6>!uWUev356t*_)iU!rin@}0PaELpgQyOv*X6Rj?3H~C5G zGkf&2l6|(xCVGy7@izjLd>6sb=Y>x@3j+0&+)4BXb>!G1)N;+4z5&{jrbNO2xd9rIt7(bBChy7dwr>jEnsvy*qIv0 z^bLGn)zwvk9m%3H;1+%}p(f5OW$Wn{j*r>*`B(z26Gu^D#hyWf^T}!aExm4RvVGaM z*W9NN+6;m$Y|!|x-K8uZqY9-lHQxQ)YuFlS{E<@13G08o0RI8;Q1D?0D2mxgj)yi> zT-FV@1Y3PB7ytcvYyw51D04?ALIrSm;=&)}ISj|!obcVBHhbg7=TY%!AW}z`V1rX-QLX0LF>claGPj>RTI14EECX zeia09Nkd?GsH-_Ky?Rmx;T+pSi+S>I8GQf!C<}te=Cdf6@~o(~2J>F(Vf#$5WYBMn z{;qd*OMZZAWI#7#8^+aWg`_2nA)1YvASO*SpE!#_F+^lu&nR!fZ{7^-s4AXT;8Rhv zo-PME9D!U+`D7OeI+P$!NJ$3YjSC)yU~&&OiujBXL9>^UFWpR=$0vbc=yu zv_~>3)J@Jwu}n?jkVv#Q+Ab&H%xU`IDbF@))@$F^u%b^nOVp}XY3Y_A=2_xO-ZXQk zl&+9~m6VZA^XXSUDq|R96qH07uiX?kkrinsMov23;Z#dYV2{(uygz^MKqM9EXeG+u z_`Z#gEN5cdJ3TVLD%$R-8c`#y2+rs&Z{%@;ljr6r&s?AC8O!V$V_H7 z<}CkT>VIT+tvXkw3=l7qTI<%Y;3>Srx5D>ui?hen9RT$DV`N%+> z(9i3d=rr*#(KN;(Bc2>uVJw=Cx@)el*(=Z2rVg9RV0p4n;cde&9*4=<6kM6-H{Ra}3SG^SuLGd-D4IYYm>_PmZ^WPM@Br{4Iy zIAYi*2Ni^Gst+-3N2vZVrkzGi@wVj}`8Cnx9#IgP^uSw2Ts zr2&8KrztShg-M@>)k!MQl-%4ihnc7A*_D!drjuTM+~CHz(C7!5ZtvG=U>?VM;;DLM zLSrxi=7Rcz)?o89cAcyF$-0+6cHu*}$;N@-jcjT3%~^YRhxz^v>)j1$zRTM`XcJZC ze5H=0=|{%?0vsg#EbCBUf{c)T5GdNZ480~DVHLxjJT+$tq9%>}L6{T}yxt`UmL$=p z_fZTx=rTXf>o~-o&VG7}`yg9muPANR)z)%BPFr((E*0qxAJ~b;ZECA6?doDxh3>RpN%PYk$At4$JUqldbt&-);03A1*((rhUegx zI}3tfp1v<8s)^PJJO;MWlv95M^lDaKG154qGl7$2C1y*Q51YB;ruRb2Ly2B)iK*5g z6#jUZ$$?l^aQ@mEzE>~**5$@)lZ)gI_pi0GO1lYrK+Ld(cdF%f)-4-#v<=R5dN&)f z?amH;3f7m+e0r6SUk4)n`^djDHjeJe9r+87PQ;A>J26lDyXWyttj=H2 zaIJkD(uCb-V!*Ez~aWYmM5g&QlZapzAF7y)(wcv zNaWeP0_Z*{;q>fGdUPtmy~R*5)CzuHfOTpxQct_D|73eukeGM#cMauE!<02>NM43^ z25M>ppxYGp!6n0(!YrB?ICf;{m&PO-5x`AsyiU=bD?7IgEUu5w9p1k-bh2lN3X$HY zNoYV3f15~Dj(pnN?{3p|@vElM1#K2p9gIfC^3cx@|g;PnE3u^EZDr<6!18q!Bb=SZ?(>#svgBG4xfi@5pgw&wqKtA zy?W*f%X)l&ssLOs{wwitIa6&_u4x*=;79+h%X~l0A_1cCaH zF)etE+%8rWi`Y}<%@F>SxsDmj^(jizqoZs+L{|&CkJ7UKq?xv3;+@9D{3p99vQ7$6 z;BAJe)rFySv`t<$T+9Ebr?LEG{p6mxhPvnfYH88GdWneQTdR^9Zo`0pt>L&b{J{13 zhb;29_DnpK=X(f^w307sxWFEVs+!EF?k^qfrAkF>i#}>GN<9=XB;zYU?EJROj7M$P z!;e&o1rjKXJtqL~x`j+P*V9sJfl$DppV9`u91|}g*^eAg9Ov$@$n2U(_jgsQ>$;lE z{nR;K;;LxGu zzR_TP@i{9gtj>DA%U+ET6xqe#Sc{T2v))NkbnfMvv}49fi~_BQ4ZpF(h>NV*K8}5l zC`>u*kHt`94keB`IRev!LaHn}Z^xFtt0Qrg*HI)Uz_aP?c*IvDTt{|m-T0uwnLFU# zpQf!W(F1QW)nU$cRgyKBPvA!`g;_$(7*es%+wwGc&I?_be>(G)c@}=%D7M6J5ujx+3eC>m2wmhPeec)kDPAEs0GfBo{l)%uelA}-O zuQ&TM1u_}#CB#QVFfgRrYbKuQ85y-)UwECTRM#?mP2EDMBUM%R5W?jH*1Xj68v-VoasNnVS79=|DF^&H1kEn7SBZb#Wg<)PrV-+rkjNfA{ zdtDQY?_GeS?AwJ9tqKcW$%bRZH;G&)qxMFZ@(CEZ5%4JZKg3T7JX?aiT$V40PAf<# zAvvEYxVd`GYAYFjy&Rl&@Z6D-#B|dGVE(-A-)kuvI62tIm;PVh*R{4W0q)PO`|aAe z($oWOun3b})Y+d*H}7Wdu3`BSThhwlh7-3QiOs%j=M zC$94Zjos#3O}7Ixg(y$^-7Eo**w_OWW(&XOmz&GG%cSE_kB}gcuY99Hp|*ZZYt*IeyAdYu0*<;=lt7(J$W&^Je6qX_k<6vQ)B0S5fPKp z?`0WWxM^%zWtN-NyoNVCuF^@=k%y{{Fa>Tjac1+-oO-Ij{*Fx1$=H`Alw8t}mdtSu zk30ZBd{zkCXax>580>Sh61a&|@yfg66%Cu!O^|?zTjqborldgb@DiK$BN@IE+TPErGCuyFyKPTRQZ6|~ z4N5R2QVx%BZwVjPciOPrp^rKBm|Cbz@~RFoqYiK(NmBwOCMg7DBihJ*NiqH6U$OK} zZ~KLYSn7WZqW+qXY98)BU61rvCa#EG2owq{KzNREA@dX;$eM?mWe_bL&TzCJL*_r`nJOQ5MZrG$O^E+K&;t8h z*$KufQHA#_8NnX3d;W;>4C6KbE4b-h!Lt;mR64<)t@jZhi%+)2!csUxdo2oB#90L4 zsq@FAnSsEEfTnnhJ`PeHOp+ssF7ESlTS9lZk3m|-$49XSOz)alRRR2ardfWw*UmLOR@!B%d&&E_LVL4C31im-tF z{SC@S=~uk5Hp`;T&*JxN)znl;KzZHR24n1&olV6Q-jt`_{`BE&?Aj@IfPyQ|A*s4{ z5+BB$U*4Wi3c~d?Dwg_-;u!yZ$v}{#cEA)`2>c^_i8h81dtQlooc;x*SNQ+zU*c{H zv6id2Lbg~I25t%+t!`UhLKHZI6xHWQFh#HvlF0c=)_@(D%aR1bU&qZ z_sC+O1`wnF7f1e=GeZ9N*!`+IfkG04FWuN$O?B9tEJQvyIWZnH-oe^Mp7l&or<;XX zww2C%!}|p&gF%w&EX-<976g zrJDNet%dSrpqRGxYE}LH*Ofv4^n6Xf?4_nzPuzTcj-uE58*V+i!>@0x3fdm}9FMkX za%nNWlky4gxF}bqJ{Tp>vkc&P_oFQ^1n;J)y2_z5`%l@K&~rV*tBG|)+lM$)3!8gJ zud+-S$xAv5F?za4#^WiZWTpn|%QsJzBjr$6gj-O(KF~<}ajsuSfdR7zM~OK+^Y+dp z2|k2LJRfD#OX`WaP|}QZqV#6ZnkIa>E*BSAi8EW4JNC|}HAVXo)p#XqG-#AlOdHob zE&3TnF5n>z&L|isK6wuVt36BaNP@p~bZHF~B0BF=*h~BIw!rbJjk99;zd^{Mg?FoT zdqB^j#YHQuyZ}f{Ic6VM!@Eb_j);w zXQ0P(o9>*W*#zppc5f6|qJtHBPEY^MMb<4BoJQ>Dn?)KWKXq9Cr`5zcOA|NK6rhHElr{Cj!oYaSvMNR7d{bP)=xou2YZK=Yk>L3D(BQs#3 zB-1WX!4y!f6nv{l6lw-I=;W)il7DP#{e$@m6R@AM8NVI%*VA6E+z!tUx{kH|5^XhJ z3?S!VvPBL|iRhwXsCl_(XUQ5m$D z^ar1vk|V^Idtu^J^vN}9V4xeIrRvb$Wb*v0+mYA4LMqiVr2;`HE8RLrjoCyA zO$N^)8TR^#IBMpvMblV6M>l7%eLl(zju_43{jOIzi^DeQVar}1WWa)izE$vHSmO7`lqXcn9yXK^SZ1JXh{fu1>;Pdf(9y7*i+=OUIMZLjN(mI;P36yk+xR zym8`|bPv;`)mM%fI86S|*&x$3v)1d$|6^F8?^}I`LLmYrgugV6@tZN4#E?BK$Dl&e zE1w4v^sI<4GiHUFcWl~*s*OH9pDZcKAHqqmoXg%+P8GCdpE&!vNaC?3zD2js4$VJ~ zQ7v~R=X=?WcLG~b9RA{|X{alT2!Sh9M|0#@SU{-<=ZQ!VRrN83bcnlqfuy3~Jg?;JHFS>Lyx?i9Ed&i;s6>qV# zds&ZDfv=P)RHA)Qru5_AbOI49VfC+X>e<10f<{qM0{DRx?iwU_$gE@N#iCm1+#=-HijW<^m^0LC<9FK|vEGd<-4UqCK)!~=+a@_dVo z(~>KBY(+nT)q!%#0=keVoaVuDL32)eGT>2ny4sU6Az6PMw>h2rgk3p#9wlSI#8@2S$ z%@|Dl<54F>$ZDo|C?^fzzaNHOipx@h=x0(3!`G?v3v#>eg-)AnR0#QBOz?Ui1}G`fIS2swkw?Up1&D zN~+&Sw4OaW#yuv6b5vQUn804<)*n%9GJ0f44{aD5{TB61`1i~Zhu$z(7=t=;WDBWJ zP=cqUrBA@Rg@V%zmDU|9{+k%LzAyux#AkMdOG-q4PQKId}bvkm&Y0cL2SRTFVsNz zCs=#N22;a9eUPa!`do-4^MhhPGatWH3SBg+zVK5VURgTwecT?F&EWsi{j2j^7JKp9 zI(ENJ2g;Rw@2L4C^rM~tr8-*c(?S^_F=^}B(?8rOi_rb^n_A?i1uQ*dd>y3sHg9T_ zaVZbb52%NS2MJV#Q#9Wb6SwCwf3X}lnx&Q9%j_&GZ%5wvvM%w^J0DJt;cQ9rJZ~rz23Sl`cXGpF18oYV>o5LCOx)4{1YFer zOYPREtg45VBKAVVRQb)4UEl<_JL7y?VEZDnysS}%z zwG=%;Anj4w;b{w>m7_EHvBXsKUAtZl7;1F8gqNMJ>Jf$VV>N>)D*lYV2_NiG4|r=& zXBkfjBkSJ>j`p8z%5faq6zz`Qf1B@XWr+Wkj_||ZUsVnFO7L_&Xbn}Yl!*#4CK+$z z+-ZEfCG7T9s@XNoB>yH*5f{qMwdJk-nBK@@$emS_yB+5ez7~_Z?DX%`EoeKSZd^WrVDJQfIh=F8C6AcITEEt~y`cLH4l|d$NIx!{WEQ)H71?aTX>L zofWR(Y}0%44Dk**MsuZP3Aj_DtE1U@WZZF>S2AUA(0$(&6+P7x76S;gf#L*d_QUR7 zD@LF?cMU^thbO-sYnS^3w_CvkX3z2js?#0unb5>3aM_QoJkI}!T9QQ0*s;c=(^nBf zA`^jH@oE5H&jSAE1Juensd3A-Z(5Rb#V<8oN3*5g;$|RH`;lHb5&8eBrP5qLVb&Vg zZe&1|^Q$HO;slK;I#98mnvXtLZ5tqKkT0DWM}#tJ9xF+tkG(Ngp(6RKhZ-zyw> z)owxCjwE<G9V_2*+KpA0{?c8C|s z7Tr3^Rc-%wljpgiy*fqa(<0l;Mof^MDwDWv;bC>;-z;$|z1Wqy>VIR9e;!UORE|RW zN`V=AL_P{<;9@@IR4LpeOk3~`hAy)AYi<>(?ENeX_s5Pe%$`ft7B{a*`+V%}n0)QO zM`ElhCUK+fzaQYqYLHLt#f59EI&lzAD+%3|@nlq^9-E=rqLO$Po|zE5H?)M!P2Ur& zA-|$DiZi_T=Pvl$yB)uFDgphE6H7q4!&CHFDuJb*~H$ zG(3Cle>Eg#Fhwh0F}%?-<~+PadPzxHHbXiZRNhNXImYCyF7M2<;w*K!p-+mxto zv6}?lG3DQ@W=)#N1|1y(-oQMu`Jb~X|vo% zWd%Qe1ncKFG}xsdjJr(ul$An6mNjweHtbhj`pOVg0^cE%Y(GPrCDfBmxe#3=jj_r5n0lEZCA_(EL!@CI)q;%na{!0 z?c*xhAB+pN1~d78PpGi&4NaExwwJQ<6Q^?9<}LB)$nJ1#w%HY&q3HN?WRKCn`cxMP zHvr?&xTH+;f4u;iTeVv{K_zh%Q-F6>3RD*#mH)kN*bWvOUA_w!6U=H$vP4;fJ(`(j zH__c|ATnFvUn9a%dFumW`7fFXe4A*ow!k?R#5@zLrlmW4yuTX>#`$zpPYrvhOEY}F z+M;JtH88D2ox5~R>G;35x>X!Dt@G8BwPx4#SImRCg`QnL#w4&pVn3L1N*)XOyMm=e zg}q8&RW8q6uY|nTUw&OF6XG$xR*uKjZoSE_!sRt`KD>j*x_2En15+!}a#pC}>n!2y zk%=jP!;CLHr92a9>M`aq0=T+cy$K*ipxY50bg8t$Vit!@nN@2o3}<~V=6TNywF+Jg z9fUShZMAZeVMbWo@i3QbUmfTEpyNOr;GnlR356Yw=MiD_PrlDQ+S8P8D15)L+>J_Z zYyXF)uYii9Y1&=f-Q6J&oCJ3X5-dP)cXxLU?!hfMB)Ge~2X~j??kwEl{r)@W>|u9y zhv})RE_u4D`Ym9jD^R#6%nA000*W=Y&#JZL#A>P#Hodw@JU4vW{aBle7EcbD~CAfZe2A zq9kUN3x5FvGt_XH{U`NvQd>AfCH_!h;;D9^F3a_jFalQJm+3$9t45iU2Mz{#8Fd;JNGXywYu!$eji-HjV%iF6$^J{{ zDoU?T%-TugAt`boX~{GL|7G`Tv4*=7)TG;Y5zSv0lqLR>)^HHo^t0N3Zb7O*7HN-5 z7U75O?@*P@x_JDJOt&P5<5mxQ3B&h$gG#Ntj$f^o3VIO%$h5ga87&FLt59*zBM;Zl zcAf?2`IjLgeQhJ@2%);k$)r*A_K!o&wSvj<5XbLd-4}R9ZX4p0wQ*~=zP$Rc@-9u# zAV2Orv;3`)_}x8t&oqw&8kZPf!04t>v#uT@Q*3$ib;v`{0>g4STExQy@Bb(~HO+$` zCy}ktUtVCW%Rn<#Eo2hjn4RJO;f#_1LQfLLj&N#isd)+s`>}K&F78NS4Y98+_0;JO zCJP4vMND=xWWvpUcz|k)e!UUFD4Fy8RTkiA6f-{ep=RUPI3st0Rg1wR+o@u(LDtYj zRDFFCTJ!!BjiNS*8+f|fpHijh4{zB^kfQQQI~)V^IbeO2at$G86eTJSS}Jx#b>M1A zIFLRqJdSZW*JJ$l(45x>ih+tY*)5`EEIhswj(C~k6)<{YDLJeE6GV?v7e=_1mnIB{opQFFeNhfs4?kr{G$?g zvhbb{gz>B=L-6okcGqCCV&=fhWG7R+cjT;T3;bF0xC2VvWE(qyZ@rsS+0PA66UR)f z*K~lzVX@G{r_3{B_T=IjN1ymfmLaqD`H+cc`S!Lt(At>bPA6B<4AAW8d4N6h4Je#z zD44mbFqpazou*q5_!coq2qykmzq-5QBw%S(TOqbG6rUit-{IYEqT)drCngg3 zjPC=A{=2W^xz+=^3jBvv5FMgfO@#U^gAl zy@|@)VbgH3XbVou^@gw1@0#N9EjR2ZG$yVC%CaxDT~nOUuR1_gP{6mR@*>04sFjUv z10|)wp-dN@+AYBn_@dup7*$rBz0PT=!9v(H)$i-(|E-BT=4;bPVSXUC1nXfU=?99T zd42qt$Q22!qti6`;Dd8gfZ{VEo$Y~Kals!{sP*s38zB=ZspJp_H(kQke$+zj&5bom zwBofl?v^*^7Fx`qsCx;1C0o<@Z<8U0sy;r=-=#qMe|C@~-`4H_?qr2g;C2N=(|*7u zW!fC~5m8nay&FNM)G9t*JLdoFS=Z*Z%I&ed-cCaU>lRByCmp-ri6>+LHRr)RL682#Qr zGZkvyfgivv!DYT$B$D!ABb~Ad{ zwCnw)eYKk)o6bJVR8W|0A%`^S);}mX*1fKPo}V)42mpma7h&^}rPybrT+Cu4G7=rS zvW2Yed64;}7Tv4Qy1gZmnyiJDEDkVu2nwnyQcs`=_dP0iks%G{6S-oamHSADy2GDw zoe%n&D>2%97Vr=&FZTlTKKa{=X4&0lcCY+`*Tb=tE+$M$#baGbqw>Tx8`~-}wl2id zxI=yH_{cb*vP8=qU`6@@A?Zi&YR=*7p8_{)? zy)R%5BPwo$g44a(*yBw}UL=})1b)$5eK9C`&nMJO=*@7Kqv^@?e;P2y6Fj8C{K-6) z`JA6&wdf|h=d(BTk9T?8cea@{cri$=&AWQ9(iV5g5Qq9eK#IuT2@yUh&Zd1-5^{W_ z&dv~m|5F^x`s5e%@UEo`l+!04n?Cp`t_G4*qsLaZq#iClzRU3mdA(7Cz#jdC)Y#8_vrQ@q^&PUH*Y=E2!W z4p=?Pg?)^sKG6R2XSRADsr9%rWfs~prrNJP-rFB2H(EP@^wT*o&^SMVK!Q%+Gobp+ z0{En5%z#G$VRw5~_+M(n`SUcFCTf|^G|h7h*HPhYZm zu&5?8!<+BhfkZ$NZ}YkN+T+{ErG}j^pen3(ZQGR(?(+`p&^I^TBBAhWpMjPb>wwYW zv+av>7w_=?{WJWQg*KDA@EYJw$Lw54K-T2eqS?>FazMBX_LMe%HykeVI~eYBVYIWj zxIhU1_(=;7Yen%7SZgN09Mb6l5=^9K5EqryQc5%BY>n1c6M)|Al2g=C(#w{{P;}wD zX95}VJe2N5w{cjVM9QVq98E*+ZIvuWU?~5y(2Zm#$>@YNw9YJg3}r+C*VFZAomMxa zSt=%wztsd$EI78JH>W~9V0@V}m7H|!cS&5Mn(By9l{+t`YColVzT3I$D>;o|7rXno zX0RRjJBl8^U_9208Ht&?Cd9P{b0}2He z9seyT*;c6%g{AF6)DR{Lqn3ezI=%{x8`bx1B!ID|Cq?pnoy1Ce6B(50jG30N>Hibi zv84eWGU6uwMY)jC3Udfx+Z9@QW4vj{#CemW5g=L*W8ZCb4{^Y2*B8B@2+0=US-k;K zBWph^8{?I~0~7>;%S;gpPZ54g+X}il19vun5iai?W8I(U!ql|vQR(Hw!4eBm4l#N8 z+G=ZA;8TVd1li;$1w9$qnV5)#)3-g`+LJeYCm{j(`|<1{xmyBd!*P$a_HOo>?+HCPV&kRYj@GoXMg`jv2u6T-yq<{oxLTxt~b%PCw?60*Q&a_9OQ5aKzKxo>2iX&UKHk_ zjcfHt+>I5(Q${5o>N{gHw{^l!*6#@`cb(h0Z zyFhLN+jK4Jt2{G$wO3vP?t+^eAJM?Vhz&>{&0aQlzLD-D!)|SiQC8@~+`6vy@#*-9 z*~s=TOBt!k(+^DjArxO9<;1pZj1AdV*&n6HWf6!=gxgDfu{nTTXfd_u@v_Fvb&5kO zkP$mq*jXl!*=LSbmj?w+06z@JuYeox5b4wtIA-)1i}mB5Wyj|*ABf!$TnGIV$Buy` zBCHBKRF~CRx2ckcNkKbsb>RULV+?2`rW(A62#vLe$ueJbCY3saNF_HAwxQz5vYSNa zJGDd7d*kYuK7ZDbroz^ef_C^SCs)+&s6J?GVdwV#YD$VJ`VAPG5p-ord%&ZE8aI)B z#t10jbYEF*k@Cbo75_|ne%$+R*b}^LVf|&t))rrVPo8^D3?nCd-scZxE~x4psrJ%c zkL=aCKY|g-gyLek$-**-TQG%>9j00$2DL9bIWoh?&7}(t1v%gCom}cO zmp9Ih_c3M5LaX&f0KOKsuX)sU=w2Ac^>;7`0x|(IE^ShsDo}3L@2? zudrk7xqkOPW*0&MW05fM=5Y0OnBKXgKtb@B>{e3HP|D`A0m2yLRJ$GrssBIk&i{V$ z8x4N;N+XNdtGwW&@r~bkOJ4t5S`*;oKCX87;Ct-Lg1TNM7fj#}!A`V>3ukNG`9-up zC883kJ0C2jj(D>FmK=jKXEONP{suMWjM z`BjyJI=V$8TS^p4d|Ccek&|_UJP?IJC zzB&lUsy3SsY0}@PQEfldX#7Gt-$J2mSd9Io_Gq)Yr~82le~8w}_;iOluCmw&aTq$= z^Fn|A{Fsj~ixIPgk6sM-`I)1W=draT7h*y3yCKjjSx%IhX?ycLv^^;aGdUpPgq`yW ztB=O|D|Ry=_Hi;=$(R2EAmG@jrR|%GNKG3!HsdQema4_o$FC0#P9+~+?s6O4SG+eQ zkB99IlN*lPL*ChCi9F|hc-w|eT>kI|T7J}Mm+xiXgrQn`k8c4Vx z$zU&@)lfl|#9eTizSj79ADd}rV|SP46O&@ti>}LyIj=B=QFg3MT58EU&lUZy(T+W% zv2=Mred4cxwH8NZA#Oy+4f4;TE`;JltNJd~VHa*NGKs!jd@c+$b9;F_%GnI8oP;pd zH57OS-gNJWV>z6#q|cquMJeJPuR7BH=SYsV`0d+K`WYOcO@tmR)AQ7KZY*gR^8DVB zqVyoZED;jF(k0-*%=q)i&~Ol8QBaKH#mCn2@zs_& z0Zu`tcKzE`0Q@{)Do~q~V+HNWsaUK74!!XOSU0Ca-(azGd4aHCi;Q=o2+nSlT6@1m z`+2b;ja{z2WYXpUGvp;+B5G*j$SG!Eh{G)JG4N0I+g}$@L<-ny`^;g-7%;4SVz29E z6$8_9E0@3=bw8}DrK*=!<)RGmr<4^>2jT2U?Z#T7Vy-uN$eVh|@@7?k;ncJL{6%0o zA+6{Ph*FI!PK?tBY$IqBfY3?g8b%FDk=c#(dC26<&sm3-+3C!u(nRJa^`LuLPqC3T z>HAhlYPkP6>s?kr?l6VJ>=p;YKHwtnX5KOBHP{Gh%uWDt=tRhhR~Ay^Jukswdc{IpuN?|xj?V`_3uC*JJSI3l`?3z^3W z+1hX{;8D`y$-3FGl}Bfe?ei4_QRH!vT%N6l#(LjmCmE+;ZLS?s! z%e2yS_Z1*`&_7^0$g^FpYXcK~anr-ALJ-0n!V+@_3TMUS(V-9mDgCg#ye?&JY)ses z*4Lvx$HA}7zWUOQUJdHB$52(;nRngl=%g)nA8%}Fh}z9Aj23Ar4BS_GQ`DYWaQ<2~ z@~AxrTC*K!*RHjcqhD};B47C}uJPyH33U9688|`GR#*gU=IUmaK#Ke6vvkd?O(--XWaBJiz_Fzh`pq6S@jiQDe@MS)aZB~ zsZy%S^_{V=;M{Qq*g-7ceB=VOiy;CNzKv4pi=`i5ll3)W2YVxPZme>CIL!2zowWjvvXb`h-pNb{qjELj}=4eYwX8j9T#n>G6n-NBoly@9>sI% zj4^O125+>Y0{TAW$nTjmThjsN-J7O`tpOASgiWay;AazXeQF*WmXY4QsZLMNo#)Ql zdVZi{A~2MDHwzu!8&>bmxP~KRP9D z!|rzXsiD5l(qF0>{b>UzuJDRm)0_{C@9`8~aC6u!NlnAZs4OHIoA3_n6XOP$Wp!OC z8DhC%MvMO73G!d!Y&N$B(F6TM{f9dteid~P0THSHX&0V0VkqO11pk(+jdZD#9PcV*?cF3Y3-W#s#Y@Lt*= zj~%}F=1?58DHyNwLw^^jh#&mPm+x(6@#>$Daf8nF;v6Z$TFn>8cN=wM_eRhC$anoy znSGG>ZR3rknWag>b|e65^X$utZ|wZS=)#w%3mWMLqdQeqnHfl_;LtKZe@g!T22es_ z;*XttG~%JL?=OpC82GU#1=zel=*-&&Oj&bx@wNQEl~DyuhFVj({&eODITWu6L+uxV z9fp*0ur-=KMBd8y6OOQH5;1^bmW%{o2u$HOne3L>|9OH{O{5|QM_+5x;v{OHw;K0i zv%RQCA%|*nn)y=0{sD$*;${Xwu+qS9j|a!q%`Jqh?Z_pmy?~qX4iuVbuK=MehmHL` zM?hInozNB_X_qX;-VnDlsBYE=Mto*M=YfM@a(#!L7WPish@92&>4>(sp+%c(aNhZWktU}I1c7L zz~R6Ii{q{&!AJgnCsitap-X)wYfqtRgM+;GK2N^H2 z6S%R9)#{`x0h9d+^ZO9*BIn))1Ssd>e5Iy=Y-uKO!Ew>64@2Y1Zmkv1==Yz?`NMJd z^F&~wHK)Vqqi@wA+{1Ir1|+D6>810%pK^CaWA*FD`^~(!CJ>(AsUWCpw?ps+%ij(F zp(mC#XU|p%o+i5^u`)C&ygAWzq2l266}R^fAZa0`j3X2Kst&e7e-#?r$`-O0MCxNQ zAAKBI-0O?EhY8SnbN8BswOg=`9Wqypv{wJh*o;E}JbhsuawzekT)7J$Suua3Sn7oxl4;y5$(@MzbHA0=wsP=k z|E6X(mjb_)0w6axG;UjAC{8|;(PaTFekVp(TL+ChK}K(=gTO+_i~bDSg^=9~G#T&J z^}~DbXqJP_pDx50-Hq~g1M^H=TYNq~+*jcy@62^kPT9H$g1dD6j>GI@NWjc}t(CTO zrp`;s$K}~aQ}%g^nzJEFg_3GDeUM505uO}FG7;oRDQ;Xo1vzC9`P~VRnXc~}dL6PX zbLuW@R6onVW+7nFVpUrw8o|kS0-coOtQ;FU4iMw84|Gx?=v~@Z<{q~^l4c2vPn~Wg zAc+zHUYAcG1vZ?H+*R5)o~r9`z%*YWyI4I3^hT5{NCP^xHEb9XA4hz_JQME!=K^%R z)M#k6wq8o_=dukW()eRr!cYsm!;9Xl@Ee-JUNaUJnA6-CeTewQIP5a5{UbxPnC^Qu zSPsYE8A|-MV+)5m3Y!}A_%Bz+y!)t+-&-VqB6Gkdk==ILU6yt?%<7wE(rR;6Z{}g} zKXq$EX;AtsHZi$KC!3+cOHg>psgO=B#4|&{9yubd#M{BFPo%-YRu8N?ovsfQ2wNw@P$-do>J@yLU%00$}WLna!J5RK$*s zk0%uHPuTaesbqc>lFjk71G&8psyje z_Qvzk2%^lKo47tl1CqZSwtV8?Y=S842#%5=^96!5KDX)f8E!{ysdR$Xv~$w3a32d9 z5E@1BK!ru8E{)9ov_j;~Aob{2IPTt6nA8ly&x`d+-RR>u-ivb;!x00Ybf#Sk_*0r-;VVM!5 z$LxVSX|rOQ6CVUXk#ex5uv_s~bo6+o4T2pGm&vl)hAKz}Imb-^>U~4RQeI*Er6Ul% z-Fu~Go}iC8=g->gnrjTuD3X|e0uBF&bYFZb3N8u|4|}e&+cH{onkb+?eKrU#>EnYK zS&vF@R7NE7x{zTov_Bc?{Wnlon}Wim^>hC{GYrUkf5UdN=E#PS7}`H7>B9H)het@W zV+;{-UkYFdHGVz;&Ff7k4&J-Ahi$G4HSQF5J|pO^Ieiv4k&}=p!|f_o-xkMqv`W@O(1hpx_sSVp5uy!6soXVX zJyUpln_#y5q*2nu#~p#{&qb0h13C;|${rUWEZ&QL6ZElXP4w?Gj2GQLyr!Mn8E<+b+Jh4iC(i7hC!5lIq)xSXE?F1D~xH zufywb5c0?2NGL1d@J-0ejC8}<=k0QV>v8{uv*2d~J*34q=tC89`V@bE)ou@zRf@2y z45w2?uFQyqpEeUvz$TB*QU@>Lln*QW7a;x;;XQ0=P%Ndp{a3NC7UoW5IU8gf-W}lm zl>+JXeD#jWK`Pou-Sf%&xVEPbK_|Q3V?A4JN0@tL;*Te_W}E7=Z>C6j453t9R&PxX zqWG?F50}QL!GA7}hq(so^e8R7ATB)o3&l3J1pFy;??=seUUr!ASRP#YH$-0k68EY& zK@^_q`I|#XU4u(N*m&a3`!GK}U;WJkQf%z>_!CY)f5@sXkaeE;Bxz^x6)CXh(m1tM7c+ql?)#cs7dku({?oztJlV1(gYppxRq80JzkAxrN! zU0y*s?LkCIGI)4y_n(y+jU8;Xb8}W#eY}=vpidJqnRgs!X zqi4Nz`E~ZCZdngkw8~kFFdNKCIZ}fG8I$yf4#mNB&bO^-9{bSQZF&#;QpIDMGRAn2 z3OC1D&y&9t6vdT2F+oK|u{qJ^wrx5!4Y08}D9zBpS1^r8%-s87Os?diulv*iR)pw;$2Et@4Mf+m7Z>Y04|F$L z12DE965L;3FLw~S@J#w@C$*nS6w$ZwpW)A%wuBxg0sC-01a*}uAIc{{x|)y^tEQ=$ zcjv>*-mnt&#XOeGtj*^+!CCy53P|RUdZNWMW~2(ge;T%bmd8^cPxSP)ylF&z`ipmh z?5k1Db6*WTX^OMpp1N~C$A|3SQJjoLDB*TWAL1gXSR@Gd$G-o2v=&{4Pp=WKq{C`o zFA&$E?dhr>NV2F-r0=t_|L3I!V?Y}_hg0$k60|l6YxFbVP5GxPgxkHd)z1>e-?osO zuO(l1GzA=~a|uQ6Yr6yK*p@neR96fh#ZwLQ8PipmFyuwbU`FNF`Y4gas=S58rr|)q z_f-($;)NKCfn0G2VR0k7h(hIQdr_@>vjdDS0dc(SYkSncZ-)TEqc%e*4_vPc9N#9s zpX6ScCEMVQL0nM`4#fDD+AK!a6^4)fzw6adPornV%JBJ2Fgw=GL(gYW?8|hBO#BAl zUSZv2BEDtM98M9U_Wn}b^aPPc!UO?Z`DM=>4=2S>rZw3rLD1TMo5n%YH!Ih1+=7sG zZaYI1D;8~-4Df`25F}=#Rr}s0+zKi%l5t5!O6%*x{8rcGzYj zLY+IZJ!Kf4+mjJ-oF&Tbg)s{gq-%ciGI;&+QtuFfRkL;Y)zw;9@^8K8u2e$V)X0tc zhov*WRB1kXB;itbzL`F4T68X3+{k*m`sI>HlMZL*b)KG36$^8B-9z)X*S#;k&qHW? zj3Ieq=bcTW=-#^I5{&b@>4I4x|L695kTAOMr1bLNRnt$9Al0Znv7sG>O#jCWyS$!` z=fPOILquTncXji6+cML^;VGS&Ruf0!*^JcEYpHwprKX}!bW?b!JLyuIV$3k)dnUDM zVPai1aI8MOSZdpMENNwybs9AZR4zV%M^ZN?(~QS$fE1T|iuWc7zoY~PYC zo;J;#{>O~0`06mBgY*f{OCPc}6ZXTuYX)kE&XzS7qbS9QNYb>+kwZ7gEi*`qS&(&f z7bR;rVGiN0k$K1N+{_4VGNF<^nPT9Xa0p`#i)ih{MZ{e z51mzGvh@HqO)`EpJG?&&M(os}pLn78?>>oNYiL0;I2xsAodBDsTb!{WKtUy3ie)=} z*Nh{XOJ(f%LkvLyvRHCEjr>AFM_v{2o=?VGbnh2m`;aq1H0c&o-O%Wy#0+Ux&cwSv z4_=*>lky~J*E-R;)@7r$v9cTO{9+6r^Nh3FWu-*By^yoAF)6BVVE=;*Tf;Au!#Fuf zr)_L|XuT4150=I8HcL=b`2rmKWBFfwK&6|lC;1W}|Fv@_iEFH92=Rl1y^)!H-)A-P zjeEl_uRmZD{NHZkdkDJwm#pQ;VuF7yl`%uU%E$~6heCaor5&>{=ce*InS?F*>L@nGhjd3ZK_QrvpKa>k2%!=;^m=`n$1gX;NX0hv9dAQGe}0w`YWq z=-=2;5M*vc%h8P9QvS1p*euTDv+aX>%N`G-Cdg#1&`*Z)CKFq~8Bwgy@rI04;f`3+ z8jl7e`AdQ#98nCDZEy=+wEO+(6B015N>np0Qe!RarEL}nRP3cTCZQc^UO!|ZWU6mh ze$1WHU}6$Y)i`l*2IxZCbcX47dDhAJYCQ4f}bGg zvqSP5)k=dGLm)_Y)+yHW4b-)=3<5PBOz4TXS9acHr#?@EcgnG9OH#tMz2*JJQa?i> zRd}b@u_J5P@6GH^eUy~CuIc5z8NqN|p9ZS~=XxALsccrTr0Q-$xGxnbIo_!TlBH@rd&C&WBs$FhsS+n%7Wu6 zI!Mxrr-ECn!HUQB)I9dUJ#)@$eb&-1n`uQL4V6N_lobm}NTypX$f3LG7{it?0PNLZ za8XsQxQnwh%4Fv<1oM*;_vf?=Ag##3tnUPRClu%+hwmdgelOA}-2B?4*CVBD`z}LU zp7Roq(0DIX;~MG0myc&j z9E)CPFGX0oiYrQkL5Oehd;vD2_-Qp5`@`p^T%J;fmS&@ts0qxCO0Le~Or z@pZ|X`7Fdg69=GT{~}q{>+M$eTp3g)^GASp{P;BI&>`~_5S}`j6szw{gF29#$ucR& zYIf$IjDM+mJ^RKU*l|69tyPgZ##}*2x@x6_w86b8_eiiILc*3jXMr+}E82e+oM3G4 zQ*cG^Oihpletv+!|C-r8&zo4&6~C}{yyuFb*7TQi1Ht>8QD$jI?0s`*6NaBD-Ap9MwKBZqD$Wha zU2g+OOQ@xpCr&oS41e(K?XHr4c%l0<2aUWMzM#j*!&mSxYZe;c!j{_6Bgg(R^mEz- zL{yR<-XC(RCGXCPux^g-Q3l%e$C*iyWEdi3(H6O)Dx&D9{=<{md~+^BvPSN#&e1xX zv@^POFkWP5nA$~2|DkpQ%ySA9_Y^U540Kh#ze(2Mi|<=KsY1q@Ib#)f)_9&xjx{Rm zvs#Nb7a)B<0V0BBV-Kv2l2pBBf2m}*mR4QZME0`zD>Ixk*tZIC|57yq2<+v=>fVQk z`qomZ2`&O|az!y%-m*<>l_MlZcm$&&!^3TUsP?cFP{9A@^ zESCxc|0j3WJD*D!SJ?-u|I`3M1e?#axm4sA%<#$7xsE(^Rvi``Ps9CZ?;f*D*PB*y z#Ka58fveYWhX!{CqG25&vFfQ&)h)@g)rJYcv1}l-Vhj(~H#20LZ&B$p$@3l{UwMV& z!tob&74QRQcK*2XX=VdTtVWTWo>^C)ig4^UI)x*s6fk|*HEu$~llm$!|X zW4({6r5!cgS$^m&dgU|pm6z_K^~8fXRb}(r&e_swZkdXdwA79bRb(5FO>pL04y4+zX9QxG@)bl@I z-C~vFrg*fgSI%v>6+TxxKFYj@NhiKgq=fwHi>Kk>XEyz@-gkwJ$j^0Qqi_CK3bS0V zqzei}2wSubD11Pz!d)2XT85s{>EhXKxKk=JpaWLUZH(w9QMq^`%)3i=T0?oyJug-_ zXhPiJcVP9$h0huHl-U>8;jbHo9sy}3foD-ngySab_783;aF8ibU9ialg{lm8afqU= ze@g&)-?EMpDSB4_qlAG{C5U(5nY;t5+M*3dJ!;x4nj2ej?}@hHm^na%%CX?iuiN?; zNLsda;B{M$9v}b#Qz-d+i?%`$$B)`H%^0Ge#VYHc_iqmQBu3AaIL2<070m;6bGx_% z^+r7ipt+8xz6{77riDJ3RUD(xURxaACrb8$^>U&KWA zZTV?3*_m#T=^E0LQmF(Zwq;*AYZyWasZ69cBT_iAOrP#*CirX z!8RJG?g!@9+$cLyJ7cZGatAW(=$rm-Egr)2UnAG#H#lK*Kk{HU5Uc+^h`DK-K3Hb- zQtnot|H57O=fiR1uBrjh+=Q%mWbb1&n1zDaa}WN!ohn%R%L_sdRjy7SJdrYlBwz~b zV>N0}aNLy?a_wL6`;Iv70dC-vQG64+n|-ETYp8XSO>*zyNCLMyA|LYfr-P|*oqfu- zLsk0qc#jKL3bdM;YywHXzCd_~IF|8uIad=!1BOsVLNEsoq#3e(DQ9`B2O(UpvW{*g zr15f#TyWp1{zr#+=hg4S8VlBa=ky-0J{O^xq6i$Q!(P467=Oa{(>?^e?#`vV+Oabu zD8K)3m44YLnDKRbpRT<7SAy=_ke5gH=w}fKYr%i_JN(i6wUCWO5Wohd#pD!T8b36? zjRM^aESpp-8!^a*Sn!EqMdt$yd=H?0EE5zJ@Z!HjpoDnp99;8UYge?f_P)&9eu}9A zxFAsP87PE(1hv_GqtJOUBLa%(?YIHQ=(a;&(%n7vi~77`gTgQaZc^Do@NpDBt;)bt z;e4O(eG3H)$K?;15F;nuo@+8@;ZB-H#O=zB1g*=d&2D$|3;mJ?mY(7blD%svf*<1T zydv70@g*BM>hR2LX;bj=3#>KS%i4zQ2#4|3Kl7P2skjH{+#8|48E35aZ?6zLuD6lSwwhcXzmsTR_?-2iefz>!c3D zD`*`m_3U$4NdF-+$}p~w$J;L>;4S*H+D{}+$Ga{h;xpa z`^5FU(B!~u(?vgZ(xW}e8CL;j(%rXGb5>Nq4KRTiwSD+fzCOch(BlrYhe$G{_RxTw*1X=wY5d>XCYx>B? zi(X~}@&E&B|D3-4rO+{DFimlO`Z4_?D|rK5VhXi(xrfHvb_u2mk(3p?a@F;o{Iul8w@y zuvMkqe$oO?EW{+w5Z$7Xh3W2Bn1J86X9<4KXeOp#5|oC0JqZ>02HWli`VKKVc~g`) z*me5U@%E#xiw_&^UWrc2q7Tdp2xgIVhca90JG{z-L~hAwADEX3@D;cHBhdOyw+SPW zbhKp(r(nY>@FoK(J5-m@0}UyKUe&P|ft7Cr8Ge7o~%MKZpf3$8PTp zq~7FB3nF)3MFohH`wFE8_Ozb(%FTH|Q};>*4V=T^olv`|=)57tXMDrDZ>s(sX~aBZ z8Dei;smHJ>_*z;e|3Uy7cu@_<2$*Ra+c7w^5a=djsi}m>qEZ1zh!djg^ilZg0kW^# zNybO~VPq1ogR7xVKc*Ms6eEh5gW!_RH}<u+p;jdTKi!Y!V$ zaNx~KV#XUbTS9U)ek&`S-fMYGRgLV>J@11I*_MJBofuR8&<4t8(O*JXs7JhFKb~I4026A}9%sYjvLlLEPK^;T?!kR|72`0C2zq8bE{R?H&gJXcM z{l>(27bcxzrt~mnHNSncDL?&phelUOG$&N&tf6VeWsd5@>8)f+|24c!N|C-#d4Dk223h4WOM%Ghy%2n0&s2YRF7;Tk?)3gHFXu zOIuqgT|>RVU5h43$KP`W?pk%;wh9%(fsfciCuHz1IaP56Uwj7~+F2~Ep2;(S@DPDW zL|Kp)I-knm%X0c2Y7oR^W5agVaYb)EnnE{8iVzSoQlM`(KAXq0@=4VgGG_avD}1

m|SwEA;WwXiah^}0+&N?;FMO2w2VqC*+2^@ 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

{fllYULSgfnO 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%0Ay6dNHl{LvnKFGov-EU|Mj& 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

&COzHR!vpZ}s(4_tqCAlm(xJK3Am7_0{f%!> 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 Y6phMgD}iqMp3&Oj_rk3cZD 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

&2`@3`PU6>!F$oU^jwJ6KO{j5VZfSSkeJHl` zcqAX}?TC{L_=Bx~NMQ-D+JtKYc6tduQonQQ0+zQ2W>^ryBrK(k(vGS}JD7B5mo=c~ z&rUb&LSBj!8lRj*sUqW7W}#%xuy4CMM$z5?d;g0w%3pWQd9kHy|u2vay5nGnytoXWf>cM3ffO4p~9q5u9McguZg$x}BlJRK~^=xy#?kI&IiHRO5g zn}k?rm159C&BZ=yjLSGf?Mt$C;pya`P0nWmFLD&6=10e+(oF; zRVf3XXadwzz-~MmVC%r|uQS5hb%-84^1zOE*%Ch)GbvA&5h|c*e4l(D02`WNrousX zB7D6sKs%!IOg^!G1_}t#xkgp&l;i8>{x* ziP%ui?LBz=`%_|;VOX-09MD&Pld+SeMVxM}?f@;Slmo#rdE6mv+A=7ySWRSK6D=@A zxF=nRb4art)o6HfpO{tXIg@_te8ouji^SNfg=jEH82kYEg8|S;2MMbwD{4f{>iwu< z;KZiLeyi?&#v2d-V+;z>vSy20kB6%ebo5cqLJz0K&RmZs&=q@ML%|$5bV_RDdUjE? zO1%HD_F0UKx|C3oh2Vu=pNI&i!G50!zNPP9q%k3A;`*rE zl-oQYANo)!n&~>o#hD|ppsmnTX71sGR(W3Yrhpn}v>*7jW+lJ0#-&1;L3S!Bil*Ir zfMIGOU<@_J@Tb%m-ivLgKCiSbTvXAQX}t9;^stu=%30u=jY39No`L`5WU{vPQdT$d zXY=SQzLqNjKOpookhw1WRHvh_GVN<^S`Tm|c{N9Nh1ZR2O)?w?Q%&dhu=gSH18+of z-SBkdV&qSXo99zTRHo7}E8%_-2csEG-t{DpY~Q`g;Jyst4YHIr*2x>oOtnXki*UCq zv1i-Dkd^0dNGCA?$rJc@lX&oZE#`NxJFa$bQ|Sa8`BDbOrtWbFxCs7CwB17kTr>b4 z2f{(zF)j7nRGfCeQjlGB+#B!4#z<9}It;3+lrpJD8zmF##z(L3#Pp|UIe31S2U0_< z2cG}H*BkQRJ7gWrLt2GT+ zv9Imi2h06p9z9be6D$u*Xv!q?y2!@VIk>OoCmJtQrcPr|^T5?Ml41y=s1zl9|ATWX z-PV%qy{gdVPS$8ZPfYVI4^Ag{UW>M0pR|L-nY*L#OV z0;E;>g-t_7?DX6HOV$;4-M}g*-~NRZ8+Ns5^@?u#l?r9ToB||~K|$(A9$HIBdKZZN zVU-fv-m6W29AYZIUwvfJYyZjf*2T>RJl6vWw|@TUpn4U3ezH!Q zw@!bao#L)h-oVM-Hq&}H%H}g$OZ#`WW{HL9U_dfUu$Xku$mJou(GY=b+L&4x+yhek zbWE3dSk+xMcxwQmFzLYQK%7{2*t?QXkh%X#xL}W(+ugi%LD=snAZ;tWV$s+-4^>(J z@=kdk`x)O&jIGm+eIK?ZENs7I$TU^gTK=E-nWzcKycAx87=N>t%ChLRsL94EHj12HRl| z_`)X~$FZq9UO!x!Lx6qb_mll_2)C+yJ zNA@S!&Bq5Gq@WXLq}dxR&1k~gCQs|aWtW6+e^QP(znAK#O4SUi=2|>fb!}EglkKp0 zzf%XQ0qjNUZYhfnBkS8!ynvXGv{c<_SfH5q~IK zk-Zh#`;t=K4M1``Z&1xtI7UXAu{V%MLW8OnFy^fxA+|$OqaB_+^1UZQo~tLnWRT*J z-sCxwBYpB_jd{Z;?3gd-(3ZTX~M|LiatC8b>)1-GL zj5Q{rw)t_zP1Xi!yeTongNce2}x&a?tb-4l2(rMT;P~U%l zW1$>vB%}0)&-3?DQ!&wu!ZmL8l=oXRkGb^&CWr62Ej-=RN4B@%P#}~Q&krH{`VK;p z#lL|GT!|*=Kt0|8{y7sgqFV*pY~BW}ZQI2cOmvUhSP=Z8g+KuPcV82{_6K&(qySh7 z+@kN*wXEX_$;4LF#+SpXlcGw3WoP;`uV*xeVR{E%UEhoMT3(8vg>0;)+bY;$T%~`8 z4sbX_ca2@lB^nZj&f@DSuY*c(rDY=HS{EPQ!ez0}280}C<<2&ApkKFYY+!ZBA~fC- zR?#QL++|Bdq{*j;(-~oa18paJ_3k;4esYz{9V;JEsR8 zte;!oWZIjk2(Z`HP7p^rC9u~&=)`Cx|8NtX1MHQ*70EfJS841=Je<|QVpdch&M7#B zz?+ip5WJfWw2!y0lX+1yvdUza^`cUU=Fy>4~=R-jlif66TR3-2(eTH=(s!K^ptIZ01|BSxZ8qFzX25+b~vIq%kOIDktUQQP>J-s&( zK)h_qW7`2rPJ9?FWgoqX+< z(`?R=B)n#_J+tnfMZgbP^=_-TaM@ku;Ps(&qQh|)-_WabnD0eO15dPYvk7Tlw&9nY8fcf|$5>aqEl@??9RlO~A*>^)66@I&-5~$-Y%zGopImIx7MmkN$6rGfBj4ja#6u!LvQZcj~M+Kit;Po z69_hY%&g-=J2BsK-f1~=AsTtlEl%M-botSRls9YBzkPR?jP{2KM+g)>M2*0nt=j0b zmF1xfF4r)))r~>neLn6qIvTOdDHp^@8%ylfQv2>KK-dnL!Ti$)@M`(T{iV4ZDJbNf zJi|Qqsx1;F2CKInbIf7ap-;GRdMDp5iu#w(Yu0v>r8H~#-=8>@e6PEw70=^tJuh?s znH0RDb+^v@mDF3X#@xa8Q6CSbWvoj2iG(C~#l} z5(mh6d_e6Mm9PEw3Zy`I#Gkc6TR5_TG@sa!9WzLCifiFQ30FcNn^-el6v`P$VWka7 zeu`D}DvCCFs$W<7dB+Lt*-^IP;+3%XR~EMxDZcMaAzuWomp4EZjY; zbB*%27i!ObmS+OK%+S1G*oYn}!uO^rqN-+rXImVWDjiX4Yftg~jK^3KdO0!A_1~ zwF|NqcL)(KP~1&+O6C}JrM$Yb`%PcL0r2hG} z^89Eqes=KLK*~h1LGgrup|p>1L1zDv76dFPU9#C2&}Rs92;{`hrd@LHt5TN#m9t}M zllSRjO7nU=rQZW$){LVH92}Bco(eMBfLcAC`1V60!?wMI^|e6{vFl&y_&&Nv5O2Cs z(L@-4*wFPQHf8=~T%N`=zH8rWYpy1jeSA4FI*l()4d7``{dT#!N*Ys_34MT1>(vIF zDfdN{5u|X7izx(Y1x(k{N|HR2hdb0x18lgsL#Yxi2{2#zZN$xh_@ zN%`8em2hpRo$-90O?Sa&!Wf;4`^W*dK~h5W8AspuCDtB$KJP^O+~!A0o2*&Z&^sL5 zowpmPKK!{hjlMif$Ps@sjrTpCax$@-ZCe!m{xb#rQ-V)Za?+Ef4U2qK3-}H6hlYqs z82^y-_jB-=(ihO_e5`4V^ZuupufaEYldoX?IrRn5kH1% zPpuh#I%k~+iL^@Xzf|I%oDaNZxs<*lX>y@2>e>92%$TX(=iMe;^MQRI1n2K{mE8>6TPYfe=?m9NfHXj9 z2Xz|%F0*u)oh_~$ki<9&IRW@!uxPtz=)cxXORzeOv8CtQ#W*PrpygRhbcaI0RI2&R z^jtF^m9BaBYH$Z~p5~kQFE7|QGD;nLN|9>NF#`p z1{&0HW4nR{0o(`-m+U>$d#w^bo4NR@&e5B%!2Hc>bBUUaF%S-!Mcl#POTVw+!2K#( zfhvFYN^ssTaAAOq4K7UDfax)vo)5Z-5+s;WSy1Q0PXcGZr}GL!lvR97?O=v@zK#)t ze4O$E>x97Yv;1wUdso<047pxpl4IvrvYOqDqG=?R;eEQ_RDNWh&M|84vqJZFud}wU ze_D60AJTaY>oK2j9V0#>exZfhCA}h7iR5!yQxK_u(EMl4=76DnV~fwSOm8z;xFeYO#|g*)O&@IH$d+7U^r zcNtQgV%d%zQtjni{ZhfDm2$pY7Bqgcx%2rlhE0!uWX)UstRMDlFz~ZOI5pe*s*o)} zX&hSHfQIgme@pJmAI=P|1{G6$^M<6WfHDt6w1`;aw7LJh0>Z)+Bq#a%H!Q&b(WPr8 zqzD=X7mwOLOtTYOun9}`%4g9@F791gaB%a3L^RQZDHyM_&%Rl#A;18W84` zMy@6kR@os?YY|@yj~<3u11rmb3l;0U<(DGB3%OW-Xs5K_b^gY$vanh;VqA*FLk}9K z@)qrU!02a&-l`$Be70bg?`=*va`_FB~riHph(?FH$-O&5mFWHUTZu)v9VR>)(H0 zTO%59CIolxOKfkos_>eQGUH0jhwf}ac2$F*#zDDunjbfds!Mtf3{=^kL_hIWGz~MFd!L#659kv_BY~whPe#FPelXO6vo0C zY%B8TW4z7#p}L?&jBW3Ly~j4yR73e27xh3@nW;&RtFH45E^ee-LH~3m`&nFGH_dqx z%;z-7U4o-X_WHvGT@ucU`bgg7#MSff$LVac3p(rJVw6O03A(-S8l@mn{792*ybJ70O1}c_;j9+VQc89yJ9O3s|y_qs)_sha$UMaojLsb78ZgG(HAad%1ayA2BbK-x48VP*Ioc6oY8q!lNh zmHD!1}30D2FjptvA)sAlH ztpGReOK9F7l9~~h?Ec6WfJ}Yh6q}y&=Xw37=%Qtpg&AIwfeOhDqT5k%QR~i80FTuE zh&i$~+Y~#`F0m6QA401Z1-3JFgE=G4lb!|is~HYBALa&&SnhoVT>0=SX%a#|DhE_$ zRK-R6#5o)CX3{PG>fu1g`eE=y`+74DH5444C6suiC`Ykq_#x>cKnq6$0bIjfUHz>Q zUM=|7)1j&y$!93F$VF@V&LE$t3DA(Ki&%m+yj_P_0?w-_=BaF?B#2U;!Gq7JcmLsP zrskq{?ofVw!uaX&Y|jSC4zPu8|77HQozbH~a0$0DfNmZExc{DP2zrsJ8M}r6_I7mZpz0hZl$k&LqpbjrBzJ@y5vF1=7q|{j&UPXg6otEup7jGh&`L2QKuv zG)kQU?nP1ke7LIv)Nk#0TytkuR@crJB?-gNqUF!t*OJ9M$BIyuw-?9?EPy)Q-qx#j z@;uW+S`~m$%ZB}vGKmAQ9t;#OlIqv`i2?|->9)!7P^B1Gt`db`ch3>{P^SduM}Ld($)5RNLmvWB&yuMn z*J)*K#PpM^S;-dzkX8`hLu+6;5 zqoM&%GW5Q<4AWY1VNSY6@OIa$$?G*FdiO2uiAVjyBsAN z)dIdl4UAN&Qb8%sOPy%m@={n=Tk@atrr3t-j(5>ewn(D0+8o*MS(^?d1|XwYz7I@o z;yKCUCU5Y>xa?-0 z5ha2@O9RI@#IhpC={mkaIfnUQ2jl4Lpm&R5>Iy_MS|Q3e!zrWd@7#~|yU#0UjpLy{ z?WRw1&&9h#{6T?p^dOhPCi@Ei_-?4sPc6K=H)A%a9KUO+{$p@UQFG@dDJb|Ts~IIk zAOk+qe1y6Z)yq-XNUDxJ|0?8Zx?FEqex^o--bm%Pt$tdI5Ca|eD*v`)-D5B?=PYg%~smMsB9(w z*hmA29kp)zWD(9IPjom7eV3#`liH|{wEmrXHI6YJISwe#4+>XHECb8t2?xW%)Z$5> zaMK~`hRcp|QnP!{z)>j@Ek1_-D4V(%Mg7DvSgErGi06$)unfO>P)#FR)A|*BlLi6+ zb6xHIw5?G@#;M?jh_gOC$SZSs*2y_eZt_k&ghoCCQ{SHP+#ZX{Vb}340KVb=Si2T? zVE(H1<`eNIE#uqG1nNTn`EZt#cBwhjsEmb9BE3^ zp&h-FH4k;(VExKs8sRY$=zS<0_-kj?gnAT$!4krCBHNjKsVoLTdv3btA=D--ZCc9d2sUbL7u2%MBK&QXd{c5jA-E6Eru?^Ra^Ao!$noVkcp zjsjinTK`tUj#MBbv;dduFl$3`{S(d$r&@TMWkGUg)#Gx$mV0%kZ?C;=H(7t`$5h`G zF2W#GZ7>xnQD0J}`YjYvLvJs<+Qn#7NLC8?53>&m7r`x7E^r}UP6|%O1GFi1mqEpC zy>+09lh2cW-CaJ?+omB2?`Pr5L9@244Ih9uaKZ{)sr&hB$C5_&LW^r}JcOAD9k*~y zXw-t)jp??z4InCv^-Hw4`41#*8^PuB??-K1bzUr!FU%)}x!!Pmpsk7X4+NtY{pOJ% z>wuB1b(%IL@Lqp_P|%SJgd<9;@na-Wok7$#@x;jX7UU z$1ngz`JG#-b^L!n=H_2?%;$bS!T%OvO=2SZ{#%MZ?lmlDys&l=YuRnkP)Nf`8V4Zt z`21*ecpVC>Q8L4bQb{xv)PaFV0oxz}>@Jr<&D^xzMSV1s?! zbtNEH9X^hlF9G}Qz*Az#TBKAT-v`6MD5F>l0$|8qZzBMgi_##Cys(+~@tE~guw+eE zx6vC^szydbOJ<$(3*+JmU=mWx)gM6oHsCII(sS<_pajCzO|^Ov;QT2LXrn8N(;obe<`$zHo-@hX6Pd44>&~CL!SRgTK1BH5ho>;IZg-Urk2KDq@6oIZk|L z9iDYm)$2HS0I~>h^F4nPY(+0DbNrA?sWp%$+{hVfaO2OmfVw}jAG5W zT7?o;D+W$;#Yc7C6F(hRB|(hUB-^z4&Oc;%EY9L<7*-LN3aW%!5XBxqp!$3mhDWFC zG+gy!uLr(kcKP~yNVz65+QAUVs{&hzuWK*>X>v#LLUw_tW0frnivcl3#y1q)Op_4< zfS3}Qx7rB~(!{xt-zehi;g~yD`5Jm;VJWU=mbVL6H8&n?3b=Mt`bJ!Q)2< z)4Jh=>GE3C+pECBSZmJCQ7NV_@sp#?)}U>SwMZSo5R&`xX^#V3IW>N`PR2pBqD{db zjNtYey@rNmKTosdzsfNB-icBuQrq>XgXfukRC432v?WgPN}LwwE;)yT10G4_xA7v) zC=lt%8;!4&Ilx0|X=U9x^!P zh2I?lT${@jA4|w!;$WpRX_Hecxu2A;ujezOx_nkoZ}mA~Z}w)@d3>w#qP63^AKm+U zbg)F6A(f1oPlbi;REaAFhz2dI0lja$c5r-joiol9zq8?=SohrfO)QAto6}m%(;xSO z`My1NE%S|1yBziW8|!jOWXuN_|;OAKjfVG#$EL6B9n= zRt7@y@O_0}DByge8|&`gpFY9&9#UutkRCp+{?(!D_lyO% zoz`{B8&Qkav-6c`H?K<D0Gub1$UXzIQO^ zWcIOZq)*RuCbN1Aqo_2A(HBnw6kAWu#&`9$hIz;KIP+!+K?U@1KY%0&Sn0(`x z;gv%*N}Mr(T?|i6zL}^oJPxQm10a=V2N#g}**JQP|3@GJ53d)}8$S@%F#v4%Vk8DWzH2__)aauefq1s&o$IQJSXHV$8g!kvUu3wCd0rN8_-K8 zUxd%n5%_z@f7avMKOCf)58ZyffA1dlew+K}U(bgpSJ>iY(_AlIuxV{= zV01?Qvqqi#$&hMxnuU9=R5Kn6h=n{NyW^Rpm}4NyhgKqFLv@#ub&QoE~DkK=%SLo zh{1)mY;zopv$)M@2P8(sa58r2XM+Jym|$i0*UZu_#4(oU_Jj9~ohNwryk7pV#RQOu zl97uNvo~~>^7|Q@Srcf6U14zW(rSK1EA7ldgJ6!XO45NykkaGHJXcW(SR!&Pz|E)q2Mm@rZW5z$r`S+aiH@% zMXy|HRBjV#Hw=l*{T=(=S8MPRhdXRU3#F_j%IPTt>WPkJ>yQE!Rmk@J#@&x=pL6%f z?Z|+^U`&UQeSND?m0y4$*Ke=0N08iP*~4bk&5YogZzj_3F8>B%@f~Z57878|#;-!) z?;r*JTmU6<54}x+806K)?a$-#tyh{3#a$aD_&%nc&1tL(3a47nei;ZpSUbt_p&Zgy z362=l^uv(=*GU$_&d$e@enpUdw-m}E|&GyT_agNoWAVIUWt<5#Yg4nEmop|2$ zRd;5$m3~K-!KN7D8ZlDx{fQCK0h;`-gfz>L*)N$>&Wk``|Ku_NI~^Ml{RSg==&Qhx z|3UTZ3I#O?VR=q$=G&|o;eA`M@%OtD%R02V9g<}45D)xCVt=LQbe9V{YS4{Hd(?DJ z>ek!h3ks8xJ}2dRTyS%$kyV)mni7Z7qy~13($OwO;k_I~7VE_E_$I*Zs$^sR7Nn{w zGfGi5`Os1G?4dHntBSC|F9Y+s(0Z^|k&S`*Le4~1jBT;|gNy&1OG3R)c<}vHs-Glf zoavTnvtZ+0r32Hd3T#xr-pX}vPYJKhu@;Tt!81>@tT4)G;dQ z2U)kl^4T*CvH3H$T^0n|tuF@lkgKbQE2&y{F9-dJQguEqkpCNcTf0hLi$+% zB#xU(k+yVXqwa0$3Gcook;~`OXX#{9cqxQ~Jk_r{zS@97KU&Og@Q+^7E&BytvEu~9 zipRx&xB?u!Sp4CsJKROT*1C*-fiU@+qdPFbbin&rX&Suuuht7Mrw#KGm!5h@b_w#s zqBSlHU08lMN-rF%m$OH$sA{sbN9!PiqNaP_>HBKVNuZi}PLOEIH}Os(WR6<%ekWn2 z210L|AIxPjS8wP*(Symb*MqxRtx{a^6BMB6=Q60NSE6N~VbKn%#)FoWKah=w5`&vl z(TCg%dpzxOT_Eg2RZ93HmlPq!fIc-go$IQUYw__zonsDm64F00;NWFgW#^-NH7dDA z7*Mrm|Ab5BcgaBlsQP=P+*7yV^S9`5x0a|a(8A<{iE}WSpxdu4UbJVsFbM$UHf#NQ zm-cv%OZJ&D@2^)w{PfN!Q$qr-xrCXtUI??1wja4C*fL!x|1>M)Qc@9mGRh8~SM}<; zM89UyEfv#9usLbFzMLCId)AJURA3v=VdjTtwt+5R4KMeobqKkfi#94kMS|t&ugmfI zQY`lzifrL+UW1DDhp2veH7+pvh9px7QC2Y+jP!QDfcFP+>r{;h^wt2b-y=WGN%=1H z;FM4)9oJxL@Cvn2t|g-)!soBB&^op1G%E3wF*qfyo1Qx(>IK(hl5*tmZ-rS0(T zlBE>J!PRf8La=CzN8R@4@#{Og6&VM#^*l_osnHqd5-`;Afvv7Qj9yIX{Xr$TkF@IN zS&Qc8=YkP8k)wQm?53;4r+P6Xq%*>7;p34&Q_I#4W(Ye7zxB94%N)Q13;i2qGT=88Sq^D&y?he|SC8ydug~3Lw-zmf{oNE{MkMH_4y`~-eTPWmQDGqB6 z2DZ3fRf+BO8yJnAZ3-blSyNOyR#lRP=Ert^aeGM~+1Kb^*ClL_JB*1IS7_Wf8vV z9)iB)b{Gt35`^^Iz24JGoiU^`9D2;kr|(u*+SQLUM}3tpCXm!PXq*mw*ISql}&THB0K&*Rz~w{lXWG13kaJ zXF}b$JwL~9xF`#=Zpd`4>LIuQsUOapRhml30x|)y*%b0C`s>}uH`^~&9m!>Y&!lf% z&I-Q+J$>)kn{@3bM)8bQa*Ocy_R?(ym>&Bmt|J_1E`v*Ed8Se_bFkx2yd83s7cAxt zhokn-<=*S{O1E2768mSTCvMrO+U^tL8%8S4az9 z;s%sH=D@L0{!IArkldBT^#DK+nY?_K1&5wfqv}x1`Qtg0yU*9CsD8H57!Bqp+A%B$ zj3Io76Ln>z&jk>)u|?80?Qs8ZCu-cG9|=G=-e;Ze%+y`I2MWO6Hm=MEo(|9EgZ=ml zNz%-X!1ZEclLPy_4hugQKX$m(AK1aTyjfK26KlpD@pmb}_JqA@1+Sr6xR-s#_>q@8 zH_a6EuBG@=|Nnr}AW+3@Xlc=vS^bG|+$qR@;V{}{?4C)3x)_1Fuz_ym9%A#uY6KD^ zQORZIhB#xe#K#V=Mu7V`57BopY;&ZT8~oh#GIQYnycRjs?JW>3E)ox|li;XNj01iC z&9^^T%2+e9HPy>sMy-gV8F@nquEe*wcb4I=xaWP%PWW8geEK2OVXggtf!0}mxOAB` zYnkWJgGV)zEt5YV6#cp|$IBa~l^|xG3C%%I>97=L|8QrrA*=>?=-MG?f|T9Yhs|i- z{dk2QDm+zXhO@q8dt<{unR6pApjt5*otn_;NRg#lOj87k)JE8!I0I`D==sFZ&eteS z)Z~A`!u|yVb}x|0l`^CDVndLTj)7q_C$}Ei5_Ml(F*w z<$TDARyx``drlWVZe&Tc;HIA`K6$&PBH#6mCLRLZW67xiG`uzAME4A*{|m-DW~s=u z6-xe8J5>}Jyg)Rd#E*%kGwi^d1aA@96R!?upXdvLzToNq8w~#p0vi$^)cpEy55Q&@ zFP|%j8p9UnuY%>Fe%1P=70x+L89EqrX}c<8hYbEkM{dJWBtm{O+ zwdrDLQ}WaA;6q0>%Hpc4j6JsAKlUq+)*Y#PrI|u}8ky&>d~+308|iI*W0)N`M7=Gm zR1fOEcIzKrYSk=p^BNO=!6gGvn87u7@THbi=5vQCzSV6a`)YNAch_Ed;aqU?#>iaS zdQEBPA@@W?V@5o5@U!YMO~-x`cFuuH$r25kVm6&J%HBQ-Irp^?1fqc^+gWp{#DD-3 zbn#SU0>aGD->&Tal=GMnV;D9gx>>_(q`)zf2 znwd?3tD*at(DU7D&nmWMR8joKVD&%ECI9EGHThV7fv->YSgOYu-yG2ReGPYRM_k!n zs@L&hp-B8ZxfNl4hio;GsN=hE58-~!x;gu-thWOvGx_sH0skd-d9qHOmAnMgn#WeARw^_c7_pZmkj%qEoH0+Q`D;F9y+aG0>taoDR0b-^yMmz0u zzI}0ubz6Z%gl~b(fx7a|+lpRqRhe33D};iRj_dqoP0QtxBb?GdgviLH9s5QP{TLNC z1FQ4h{EiW|&r~K`Q5PE3qP<^6`zecaf%^XmRD)@j<|ZcW8%6Bncrow#cl6D>n+XnR z^AEtQ%1I+*4K{BZCEj+P5fr~5aXiKKQHF!M-?0-27m=!iobTe}2LqFZ6B~4iaeGJ! zJ@fTGT8GY!rZeyvb$$A|5fUfaci2s5sJ61TtORJtEi|KB(q1-9b!+|9 z;M{iZzfi>f5GSp5y9MEjK-=_6TWO-dsTaqIk`j8M7IjS@&+U@EHB>t#6C{n)R`ohE zaKG&4*^vVxq$hwE<2%%zps9CTpnQE}o>pMWC0oYl@=pzwU$B?JZko%Y^&!Gtg)|Sn zJr_8#XQ6WdDsc9n#Ly4!^43fJd{XP;pq{%%Oc^~vZm>0)`2TlK)FY3USW@plHzx6Q z#Al6g)uW@gV+uWdHV#Cb*#1sy$o-!O?SlOkU$n;eBDMYd1&fk#3Y;0b({yUSX(Hq( zEwvQp1JKW#QBovDt*k>zg7%Z-6HluYbIU`HPI(H}G-PK|!p61n&k!frC(T)nI0_>CdFT>yn zv_&MN3cRxDZuU>mp$j!U_eubeu>0`BxRnEx^32U7ydY!%GdX)C%>Qr5zkry<*%yzG zJlNKdZ~wA!Ykkc1M5Svmkq4pEiSM=AiMS}Ltq#k*T=XRMlVUL#yIA_4vmLLpwLetL z0!chMXh?Ex3s zs(<`7(8Im;Up>s%JBB$UIJT~J$krwj+HQD&pkr!CpA(VsKx)4^e1}@87&wIs6HKhVAJ@PF8v>Se{(WagDE)N@n zx4plwkiF{F$E#v^-wAcoxPV*Np`BBkEm`*+s!4LuN{5|YsRms}I%Jah7%$ZX(1YGi zEI&=>5w1*fRwxcp>^XrQn7?`8CIz-wfOGbE(+VVZo?X1O8b$;g$xct3Y+C(}aQpup zJhVrv8<;R%2(!h0a5xR-55 ztB0=4>cWTqzfT%oG_;1^m4K0qslt~Q+C~PNEs#OauLK}DSE=*l;?C3E7yf$${zt{l z(ohD?&OO%y3OMxd(SmCr`}L&e$q?cGytqvKd$}he#Zys9M*8tHUb z?M3Rvbpk%q{>ISz(U9EB6M!h=r6G{PftGmCINgmrNMC}zMJ1?Jw5(dBYM<4NX<5DU zF#F!G`x%41l>#S5(XO&XqyIc9+ezZN5rv>7D5tloH&4j)^L_OXC{V-f@4B;jDEjxX z|7IsAd$aiAZ|#21I^P5ncfi@as)g8{IUj`vXjJ?e)jSPBx#*{m_W`uAzT*ekCAr{YlImVyV+4AA$h8rivI{_$cxmfpvKONWd;nu%3 zg`c4c!OaTq|5SW~DugyGe4&av>i>>b1R1zd`WniMj?|t#)~AJcU#iz7c{^SNy{TnK zcOg2;c>Y&)1YlWdRUs~Khd*{OU-(b#4}Y|3+AQo=$R(&gxZ(}JoA?9RJu3Ep)-Qdu z!AOzrB-k0-zkL4+qty8F#y=O1(+>}LjU}JlUXjU8pRZq<+q=^`c(VY+!YTJ`R_gFia%=291yU2 z>0sS|Zn|l>+-z!KR90KFDe_gi+PpN(eCG(=2ws4C)ZDuRz)PE5o2DqiPWp;#_6| z0^C;|Tui4`dRgz%m2?NEPl?w7W-Iv#s(Z=3u&*=Y>(wfT{!y_0yiZ<)G;i(UHe zIgVMzSw26a;UGn<(lb z>1>VG#@M&{+EYduTb35Lqs8A#dAwBI66^AZmSxwYXgsR^$qR$V&L zXZmW-Bjm@+dW{j)-<#7=Bs%_Ao3G^jsKImO6&wDmFSpjyURf6S(XXvu)!KH~U*T&f zq~6u^J^UUve1OmxpL;FWKEK!VyMOGR zGjk?(X70?HbKWzvP8ze7F_AS|E1HX2HkmpUH~SsH-*xKiZ_TlhQl`9YYc@=-u8M7t zld-+pdW0kyuFO4?Dw;3M*-7OuxHCBZn-QUI&Ud&>Scs$GOBng^k7O9u()F@Z{T(&NNOpMvmsF-Zs9` zi=0vT6^5hi7uA~WaxH|uOD=EMnA$%^FxZj(H3`rrx|y!-^j}Y|c^@B8{bj4jU(_w) zC}BK?pkyp|KZ1wos`eN^2D`0T(&H3l^=S=fTgCT$!Z5wJlI5(@3UA-s$ceBlue0-R zOChcOl1JBSH(I9VQx6eLw(s0u>ml_o+3l0^wJkUceQ-`t2`SNh14-DOQUK>K-%d z(g(4WTmE!KxpHvvN7=gGQ_)HjtMBL{$Q-&?aHQ>}tBNXO>q?Db_k3QS= z*AC4VFkQyTnlp~X+1Z9@7vuPYktfp8Ol_4q=5BixEj9WJVe*})cE4UNi6>0;l`BkI zoi9i?Kc>P*J#AEAeyrp7TjdIo=0DCy278q~qm^wk;b!Aqnb8Q&A32fEe|$w0cW(3? z@T$&e{MeWz)KX8q-n!A6LO0=*&tJtq+x5*^-v6b)fNiiB!$R0nn7GiZQ7y=0`=Nsp z#<7|v)vLzymaiGZe!$B8rFUy}<*xz|$>I}|Ys~N!o-6(uWE3>8BYbRX!amjEFFvcE zADLgwVevp@m99fukw)5yq68zwjciUWTuww|LbP5#~m2DAurG zKOD&Pg7CN=)!oQ^vylq}3iube{lJBs_{W^8wmEyP_7n(fdsE^EUL>AP9ems+>WY3v zI(5O23#`D5r#RsYeIRkNs4+W`j6)yVO$*XjviloE+A=x0Die zfMX;-Ka?g0tHG{-6t>W4)7(ix35lGP(-}#!EsX6v{O-#H?BQZy5tr{5dGj}M3&u|x zFPGky+3cG$6Ko|Q8_CNh_7P@dYPq*%1`=f*Mx#vrLG=Gkh%jm1*uTiX%%S@N4dK<& zD|_{>{Gy1&ENSAo&6rC=y=xqOBfhB4q8YW^23d1<-?-OP)_lh2P3XS8!Tj*t%!^ht=23YmY1=VGgTl}vC&%E(yUh7?onrtvZ6qg z%3L{tm_&w>$8=p-+J)L@SeGP)qGe;~*hQ#vFuJS{)@ybzo>CTkluc!zDtYFOSL7)F z#UOSeW&6{rh=C<+qY&*8;iEQDIPN%X?&t?m?jV^lX-riXMUSC_)Qb)-+c;ic`Tn;m zi}(ZrtDv~4)*31KQMoxQstElo(VTh9OcO|6*OTbjLXiV--@vUdzWE%YWW zDbMH2EyyM`3gK)+@R+O6b6?H*$u|tyM=kHd*t{SmILUX)C`)bO3VwHPcI+lF?;XFEhEToL`B$P(_YKZvY@TyR6laU*r;1;fR} z_wtMQ5#QwgQeRf3UoL|tDTxJBppOvLrJnC{E^Rn&-KeVEG(fCl`POeAaguka?0t>p0}>U7;gug=(ieozV+DP8H0BB zvGR#ekju?Xg8_kslI1J+*aJ>)IOxctkNR5AV#OpHWMw(n-u`X z`dDX6#ROa9Tm*rj)c!cb!XoQy&fbY2F>6=616GH+fZC#1vobqT8t;XlJhXe)sF0)K zt4fpF{+0Q213G+oYfXYF!Rtm-Qi8n-zaMr5+jNxBin*ocI~*I3xM$kOpPOTZ?Mz#% zUt4(?Aiy^mW44h!nFF0$3q#x?4}#u-4bz`YDPXdPu*S6_!PJ{o8t*F<(VZad zG;8}%Ek zadRa;a{KB3bDLf;rNGE#Tpp)n@8Z!;w4v%MKZ(ORyu`X;^T@qy4IKRe^*gLc;l@ zmJ@S_sGcnsyq%h%u$yf-cj0R`zUGd6r4Re)t<+RuCNal+(MYT0!iw13>0s)?*=R>y z4^^!DSXsu16f81_uJKE)BO;hzAcnX58;4>H@OZ0SE)2CKo>xh*`FV=11AEN;F1sP> zv-bpXyX71>--TqLd*<@Zvn~!iYyA3%g*$uTfCc}e9x&-}ZR>kz-6f>ZWp_{itSx+W zYGAJGf)jIluO3re(sf%3#Ok$xl7;lQYvMx6$?f0W^bT|6_9AbLNIgdvNpK7J_Z-8{ zX279hb?Ci#A+LLW8@L{qeV%XOR1Yr~VNlUC=elIOz6IwE^Sd9p*M`NbNQI6NPPHgz z^!B_wlcds@cwUss-}8BKv--ovw`JP%6>g4)Y)-A6?d9y@&8q{YZ#MgAMILqYFypK2 zo3=_VJN93<3>w0PGFj%5w%$+IA=y8v(X1H|Eb}VNET=4^RL&;!Ak~O`}(vC*pvJ`6@Wpi zS4#3Co7ck^Ar^z#nq3H?UDVvy6eP?)BS24~|CeL16FKaCGiBsy=70JU7a}3Z?T#~y zgG!Kn4@6c>&`>>_8bf}Av_4@hs$zOGFaDmp{ard~2Uk~c$B zrgHnft*ZVTggCk5Dg7~I%zwt}uB_k5YH^-G)M>q7Bo*aajr@2z&j{KV-sx1?7v2w# z-9zl9rY`)^LrHe;PiI4@{dQttBr%ZX#O_%PeGE#-lQXLpXTQdE=Q!r7KAwcVL8L;p^j)OCgI&B?G|To7?sCILnT_I?dIajf)<>3; zM#eb?U)mchtA6o10bcV#<3+xv8D}~bZlsJEL20Q}8D$e4u8!*!0*eK9Hrn;olUb9z zG0~xft-yYlvmNggc3(lg^I{Hfg|uZ>1PI+1>5%zouk*V$y}T$f^$Xyzy1@Pl8KX+I zXB0G>L*Zf9l$$CZB)2z+e7SffSCLlU%>`cjG`7RS`tptasbYb1_hSQWw?zGj`cj}z z1RAn)F2&+vzJj;u)ccye9lF8oE64OHXxI2Bj5O8X_F9z*CPC@Y_aWcA7XvsS#lPNA zR%@|U7*}A4mEB&jJY{F@FLe%#1z!`sGRm497CdKqA;)~=#NK z3qaV02;Fn-hop6U-915{AU>?TNo3rLbbZ{9w`QKnbx#(yav!CCBG6=_U9e@`dfr+t zOKUcfM^ywWqR(=)JKeM6db4=eCH`<95nuiRy}7&j85lRON06e-OXdf6iao=BWN6E- zcAjZKH4Q%3zAj8<7f_pNuv$GL@IFM51lVyWq2~GDo6Em&myqU$UWme;r@nDXQA-&S z9{lMvn{u|WqI}e|lfpXmS**7w{(Lt3&rV9|&@ZxDR3cu41PwQDEm8_adIBr= z;H&E+PQ+wjFpQ0gB2lPPK<;2UiKDg(Y^2oJc zI;J2i^z=hIaQ_-H&*sLHA%S$%EaEfT^yP29ItVZ0tlkZeO-g_Wf^EbIi^K@$i4ls45iEhasT(C6iH#Bb9%wM#cvcaGseZ zM9)$b4*uG612f@j)oYfEGB~fgKjf*LsD(1w%y(%d)r~Q@Pv=_9`ckW@=2-nu)Np>| z=GJE8-m8_SDZy_>@^%>k_vyTgSuw=$S3@*L`Q|1Ng_#58?=N7ZGt>H0<)pE@oEj5; zZ1ZgDx0vXt?TI&!x#=#|uJEZRk^H4Ov5rUq44hgW?>hWl?vTcZ|4p8t{jD*Lib*A} z!`1S33!Dlm;^i|ba5F_&avc9)n1L2KXLp(^Yd-?w1SaFDSD2J+}#0jKcEsF-D|6JxPbjV#*T8 zUgKHoy{LRwfl7q_uJE(CfG2x~t7HF!li~T7kLSM7Sv)*)l*6XYj?S8J} z(Zqo1zlMPc8Q{G{^oC9(2ITDdweR#~`cF;b=09UganM}Sq#;IgCz)Q_gb+_~VOo_8 z+X#hpvqIEPc)vjFRo1aSE`3hm>@B3)wTn~okG0i%5+M9OtFfb^P)>$^Mtky$p3b)oz1%T43OB9;uS5~IIsQ7bSS~=ZhG=fzO!q+KQxZHSLC-o+%udA z4VvJ9?4xHJX6D#o&4=lOnDI_ij{^F%PjL7)X&F6x4~t2c*Y=eUnYuPFhIY$MpM21h z`gb1{L9gZ!z0eN>R>dJIf`Qnarm)ouc#=t4!4aGhI_w%MHlyf!MdcCUXx4I|VxcyT zKo`T)LytvsDE1-d?ROlVNFlh@Q(mBtkvEvOU8ERO2!3~pZC==2B%o?pUH$JM2U@#} z@>ZcI-RbM-WsH-BXz4B|+dmo2PdUEHsLCIh9G7gD+a>oL2q#_~1^AtlwmcM*}N0kRJnoI2mz3k*ypDK3# z&bi^3SG;IjwIAgV()c<$fBe()!-gYqx7d(Q1J!NH(uuVDpK%t(-iqJV`MDxJ!={jC z8q7;)TZI}@q(=Cj+4_q6V2n@quDSlOtL9F_&wPRUowcO~Iy#6&7=ZKie}HWnbIg=pu_ zt--0mrD4}tKyf|_fsO7yCmHgDgwU}3tih;|Q|!L^#%mgxXvGsAVG}BA1M?Zq{gR8ovhrl z54n_$pTCZhs&O4UrmH;A?=S3gFSQUt-JwEA)J1ZhDACmuQfGxLZT5e8?NMkSd`aDE zkP%-WzIQXP&?f1Pf_`^&W9PiN`+pgfwW^yw>yzK%@cO!5OO>h*-^V=rkNTHN4{hI~ z9=$wMX@M@hW1REq>{ne8$D+6o5B&>+o#LS%MrD!1WqeXApjrdnejCp|J*GKRo}U?AC*I!SMtQdggLdLn_4CgUP zmYPNI%KX>UdZLgENGs^9#2919Q`mugG9RAU@!6@wdol9if8(g^*Dcy6J8_>_o^Q90 z2YqMOs8E=!?@GI^AbUBC!PM=!M6hWWafO5-siZFD7nZkv%DQJ(Ch>z+r(ly!fuKKF28+kJndbls%^R z2k8+}iK#u?0}Gp)9=OabaC{m1sas#2u1IqiDQ0V zy4B%&H)}S(4Vc7?7%=@j1PIzI%Rj2UJ8ccJ5?mg74>FtRhvaXh`X)(ZUmJj3zY^;|a37x8X_~ zs8*6gYNCT&DIk#@R%VOwuZ|wO8H({y|?^Uopf9cKujSP3L3kf80c_!8lweh z#BIycSlK-5kJC}5@65P@G&;-LSPm*8t*4ta3%>JedLtN(iJ zRL_ywb(|L~y?@XZetCYN02u1Oo)SiY5(3Y>qQpvP+8n@^5(#Pmdj`*e{0$4_IZSNv z-%oQq8Q7ci=lS#=Y?%E+!0yd7|LUd(J~gfuu;0QXpiRU9{o0Cc(C>#9hSKhadf>BjqUX0KH2qv%Av8G_pCt2Q+f~d%=IWH$mK~cWQ~GWcke_ zP?&qK*w3Mth3Ok69U*03e@gcn76s$e7`BZwJo4OEnD(&W9k90rWybdG04{i>CH&)P zr7Sf1Q(SuUc+-9?z;Gc$=w4P6EI^YcFuU!fr1_z8ML=ib2gQt(>U!Exc{C5Wu$Ir! z18$lF7#mQsL9k2>B1UV3h%43`zFptle3ucZA)+b>;CWY+f!kcBq;Xo+uv>Y)q>NLn_f}}nM)5)W(u#Y1ZVWOXauFtNx(XU$wwhgTkQhDr=thnJbvo4Ebt>FZS-fYD12Hl?V_tu5{*DF^zXPmpfrt@;9};LS$ndJe1U0DkY4Ti=dsg+HZM>SjDBSJ4ZfC6u~dvb5|b z{Ax9>Wraxw;CG-+2~FXJb_uE{vkm8_Lxk#TrW1Rh(p7~&oB{#AIsY3*Hcz{Wi8f7g zpyvj|=EDZ}vCZd$R(*bge(VXyN!A#tY((hR(z=*KIoemG9eeBr=cSR-r$B}IeS}i} zFful6mWda2q$>&fT|@PfycI_{RGIP+LEI>(tS=75E2bJQpi6lPk1BS2Fq*7SAr8AP zh^mN~(#l3J@z;%?)v1n7=jt^Y-|z!9iMPA_Ux^m{AWJdK5AQvE%KHR zvJv*!Ic(eU>fGs6D7Pa=^Z9<9nAcAG>i%ni?!)-ThkJ*|=5%~7E%o2?-cRB@-b)h^ zhH;5m%zG<^eU{)^ac++Df4> zGd0XrjcM0o+`kUu)esJuSAK`N>{=c$5px)+a#h!jZH)5-iK~z5hk<&460to%4P-Y; zB>;!}u6WYGvihx$r-vfHJ*Af#^I{XXE`F-0M6hta^RZ7#d|Y3-Jt_D5(#|+`|#{rR6@cua*d$<2K`389uIc#Zk`%;9!D>H49>9<>hxdTNW`}L-Pi? zdZ`~!tL8|3>jk?3K4qv#&;x@%o2`eG5aF-l87Lgt7ukLM9#gns3zw`EEH2#D9ng5V zMb^yW+}Ydl(%np8!xm$9SV2$>bnS2r_(EXZ|e~WnCm^J9vv>Q zgn1!fj4xwYMAK2xx7^J*?(jlOp2PNITo)Z;QYTG>5VHk#VeBbOc-6WYx$U{l5@!pA zI#1URx4PF8g}@ybqvpysngD?utN}NwGZpl6<)jgDx5r|aARS|w4~Ns2won-NdfZS~ ziIVa!vl}Zm+rwb!#1uDiP$D7mUtEg^2_ym9Rt;F50L%T^a*Xm z%lLum6~n5NNilachl1g#xi7-63W>6g?XaSSYOu7Sm_DTE`mTVncrV(u^g#b(t+wwn68b|nvD*DrD4xYrf{R>ZCJAg zUi7dQ;gedm3YzP+c$4CM%d2y4T(nR1mGPqZRV&Ab5yy(v{RF%OgX|t%80Yj)3x}6Q zXG9>)*6ergQI}wCg?nH(2RQBeozt0Ai!f&h_VRh0PEQ&~-hukefNb(_=frO~ffLH) zAqm@rIhn)|_wL(f;16W`wf)%ZoMDxgv?s9VV1S3H3p}|dPBbwDH(Q8^jmOUZh+5b| ziQc%xH*yB{Dzk`0p*jb0n_PJfLou?s`r=*VkBc+Q4i%x_hHG)HH`!0|fs_masa9vjf!0Oxil`{c#Sf`iFi zW>YmtrB&%(A-yDytZ`d^JcScBMcD*hk^E}m1fY+eA6rL2rF<=mt%MLlJ`WW3(~x(> zu#F~0-Hj?EwreYf;=Pe^`V}seI}apcuYOhSvmLOfP9a$vcC)>|Cqfb9zI59Jq9+Tj z_u^faDGquoEyGbRZ?KPj;)}QGEBh!fZ`!p6!NnvNJI@J@@9wR(e>r`7;jt>hp*tNz zmgw{p>c{G5@bs`<^pJByRQ4ZLF`JUQtivUhsL#+4{e`24jSWdt zi{Y4l*rAr9q$GI96`|JF9r%~(>#fg&1S!ZKEk6(;71s!58I2-{b+g$rl9U^#?% z=w81D?f!;~tv2qLw{^$No!InOlyMltU56adEgaLixqH#!*$)GTYWjzo#Myx6?4b2% zE{VwHwB`nWR=4oZK-oiQl)xM0$nR5NNBwyhTi}s zNd&O9YhSs?(}Y-DeXQ2PT1p`7lK3h|V*B5vc-GQrkCriErrVt=D@Dzf#vQ~d0_FJe zZvI?|KVo50hZ**j>0nV27`OqqdP|7N+JHM|x=1jpZ*xlYi(%fpE8JA)`$ zlkq#+`+zQ4#(-1eNlEU3{ZT;1x*(|fS?dp&fXqoY*M$Y|sRmHmO_cSCRmLcp(7o0& zGQ_sgs?xx)>SQB;?J)R6R8>_V6{u z0(wslr@UFUD=yBHW&|L8eHg1<^w;GNQvM$%9XW~@Tj zas#wi?JK~wSyLwus394X2@qM*WV}GY&wkPTipzO9icb5E?sqWl3I zHQ(%knJVD$T3=0EXeG!AI=^cyf)-f{&n>ET)Ua-slt2z^uo}-_U7iZ#!p*Q?@MIbQ zsp+5h$u`+vQv~?w&)fh`9Xx&OOA(6QyM*!i+ZzLju0(}A`)dj5P_9^Dqi>8&(JFd@ z_}$yCuPdz!&uV5?5caZs=|S@t?(Ss#apW90AVbrAtp<9bw#>aJK*~}3mH8ppJ9A?j z6ok7UrK=l)8n1l~9Gw6dNYB^AeGSJYKUeX;lNk+46Krv=S*oPxAiMManB-KInvYh6 zC8xGH(!ceN!IeRoFE1jU)t8zQxPIt{q+OXHGfp-q-S zweBQ^3z3f-!R3oO2VU5~mc4SzNU~qam)5sEp60G9(>z2k&O%(VjR(pGXz?>YyFy+2s zyr?!XTNNujEPg8?w;OWeLX^9`kP+$!h#=)HuA8vBX2`U@3Ihw%{= zvv7Cdc|T^N#$n>E+C6P@op$YK*YZ0a4R1mhpUEv;b3+h;+6_-HMu(GKaUz1XzbbU6 z+<%i(+->=LcM8#(Ohh+F4#mx;rJn6IFTT`Etf9!Z9r0y9Z6dxI4Bj>52YQ4H7aHK< zVC$*Y(WS9bT$Y9|E%&DAR{p?S@@Gu>W20+X8ZT+}9Vl{`-a#h9Byi(oCB=PQP|r=> zK1?MTmozCJS~03Wxub*vV;2|MO+k&^H)T9vpjiA19pLAATM7bwt9%9jYp9UvXw0i? z$=vHl5nU2`g3iM0E|*TgHjW>R7_vv4v{XTPvfI4sq(4xaXQeJa$R0ILf@EKkad6#^u{$598AdLkIZ z0TtcI^0$Qt(cxKiFpBSEtm<1=t2e|M7ZX#qvWg+>tIKPeYE^2pk-2;DRXaTyvNCJv z_t%!Kh$vOe#c`K9Svh=?IIfeI4dkW0!q4Z`y3m$pciXiW;%2c|p32fl_UPn+xefsF z_~{SFT#8oXS&HpH7eU(**8yZIy1&YSwj1O1*~48AaV5?wV3NCLJBGu_aIjqh5yeE- zT{@IW!H5JMXmd_~p^qtMK;{IyJJ9CiqVs`}R?4iZ4JO*{qM!TOjH(xNit!JaH>Ew2 z=ALB;>ll@|nf1xgQMk2gT?8kiX`Eiu4DK)yh*MSVL<&9n)k-U0CtlX<=ZoL!lQ|Gi zQhvGk(wYujgF+zkl}nJ5Q$rlR=z*Kh_BaVF#ehU@f40$lAh3vg6v6A{P<+x|`qSkr zMy&TIH?N853MSN64pG)I-=jV}a^X|s%6;ctD_);pT=dSE8*TngA#N3C?9F3}p#{eTLdi>~QROlLk9(3{tZliPxZ0*I@ zDzQ1K+oyH#rA=12a^F;2RT>U55&oJTmFLS1hXc8BT`LoXVHBUvZfpLGEfIlu*W7&K z!jmiKn&Ol?Y7G5$<9~3|i8-t^=`aJyVRow}hi^t(&^eCcc~TXTL!18E-4SA#;(+M8 zoWWU=Diz3OC9q!%`mS4GZaU``2BZ2cbvkBG3nd)U=`C8+=)orHe^rU8b4MxoFU?W0 zy@iup_8Cju%Pz=jzBU5wFd%$odbse^P{d=*ol_pXt1NWB&eL-v!Z3wgIr95t4HeI4 z6oTXWR*aA`V9A4qSK!Dq6-hT``g?PsVu44Twcy)CB&`5iF4ZMhSD0p!r8rnFFrWixt)wZizigT za<^5b3^YBrUXi29mR%Kpe=p*(B{|Ki=|;*>%6`fbcU);&Y2GZM6Dg~-yRhZ^G$>0$ zt(s-MXl{{};yEP2Hy%Lb2swXk0pq@{-Q?TIeD_oS0Cq`f*ZvXbZX>5t1O+VXuHJq< zovbeB*T91}OYfz+xfn~kAmCmnx>HJt-n;Lm3^aef66_tM zyo-tvdxOlW+cqA43Sm9O#hOdD%iuJq3xhE9R=`|E;)VgrvYpHd#0^|eK_4ZXY^}EIp84!HWlctKSesl zFB1Upym}1`NQc3pg0McKe)mBCA4nZl617-s1TNMHbi!KGc^^bBdk&P_4K#Afi9s6s z6d#m2zGO@$CU6`cm1O`>uGoZEho^OgFg%GwZQ2ufsO*V^E_~LoZ9t8`T=kvbX%G`i zBHD~@Imq!1AI3dmwKzx{{B+$GR602eiIApC|MPGBF&h95-2`==h|ppZ*uVeiKR5uB z!LRupAPO{0avRsdfhXXfegF8Uo&pz%`;Q?|M6Kj14>&Wk1)Y{r z>#Wa1$g(hlgHTrliP3*Ofx#A(=l>9}=J-EFZ%!dr3)qV^J+vJt5Gr414;pje(My#O zkHKRkJUNF(1CK9ZkCVh=NhJSjimn0yH=u<&A#kG4BSXaPu0+=%cT>Br6k&*ZmTZ9x z7?Tfja!XM7ae+WY`Pd!)m!agpFwa=LkLgGeAQ1+ztwaAZ;8gIC5zQ68bA;ZMbyHi< zO*6x0KkG11a%tOLuax!4AGiZ7(MRa0T7p~qsc$gMT>s~L7EMXc%V>a$)3g^fF4yEN zEhVlmDkqdis^c5ug462t=gd`!eM%wm^8oL7VrLd-H_?7U=*xq6*2A`y5kNz|IZ$Rv zsMcw!iHx%Wb`2LTUutzAR{;?N+~82F zQxSr?{(bU$y-*hCrj0d-FDn_xBjT5jr`>02k`%Icb=e>`L*>6%gBuMw2`l$U5ADVd z%l}D~Rt5qJ-eS-#n4Ig=A;G`Xn3@ZvD;EJ4*;c1>;BKE2BK}h{aN@@$``Ce>*jJ5j zFp}zD6yZxyB)ni1aRRR|8+u)(0F4pRIZk-CK!`GAKFoBih%7xzpFSfr@oo z8y)thLy;tB@&iyOM-oh+(;A{w++da=PD68<_sX?p@tYzD{6^OGb5CL;NL8Ckffkx& zoj*KD=d>2VA3j1)P0Sv26p>w)d;Z?rEc(2nffpwZH?{4&e5adSC8)VBJ_sfm-CfxM z;!B!b{lJsvs?*4OsX_T>41#C%)(Mh>KqsinZs5(=-!@F%Llk|m|K-Gi0(kF(rz8~4 zPd52}2YGppx=;nJ#z2iy5okZ*aiJ3LhRC`hbZPcy25Z#FS}mqO9eLVqrw_~ne-qHZ zsQ;coVSZe=gxd^zRL-kNiqGxs z!u`<4lihESNa4D4=)LiKF?tD9ei|TAZ1y=mZiM#f{n@11WOwr$`**SPaz0J{x$A*K zHX>~$@%lWN_QBPkN{@xwMB3{9CjA65d|uwk8Khdezb>_R^0V17gc&${yHd{2L^={u zs5$3`I_IZvRNTjG&^yg?5?XG}pKUGtXZ-O6YY$Xu%`vI-z`E*s#K)Q8qv&@rzN8Ba zl)}A>nV$JpV|jW$RkFe|uAItn^7Og$Glni4(Pr`4U*8k`PSbk-u5U+xHS%Sk_H>L0`Dck*ycXdd)HjUeo|0I zwffTRvqHiyf?lKg3|1f)@#_67Tv$Tqk%DECdVFkOzi^5(PqwA{fOkC9oowfxO%d95 z6?xf!H3M<&UnVB%QxSIr^3iQeyDm<|o>S z=eP^~=Q(v-FPEA8XE~oK`sVtt3|^^FL!h%7;6YM?iJS{W(2UY6_2VvXt;W#l|3gP^ z_R~6mqtN0FY4$#mXPCKSYNKg0qwvK@@hMGF|0V#PRJdOB=2Hu{Fx1Ujfq=;egzgw6 z9D7}!3k*UpCc54~p~3LdJ+y{LGNUdO7D4tWfFe9!o7T$){jFcH&N=7VPM!A&ymq7;5P!4Vv zsY=T}sHHmC!D)%lYez3_bPIc&=}xGNtCP`1(#6?x=PbYs3rU2LN4gz;@xrs<{Wg-%7TqKz7hG!)dum{R_79lCv}Pe#Oysdf08l>EJC4 zPp4eVSw=g@1nZA;dxQxxX;vN)O-8=>+%Ft-u`jU>s#Bpi^2oyRy?2)y|G{W3#WwpPUaBMEb=dW#7Us(%3{H1*K+_`vr}Wms%_v>G&$* z|37%V&oPVb=eU`Egd8FblD$AfNq+Dux%ZSr;V+8ldGCq*u?zoXp?u84co%lk<}og{ zh_gQI%s*mNKK_2=KQO1fSRzdrTfU}3xFU?7J7RFw(t0b3H=Tz;aBnsF<-{b^vArJ; zcdg&pBC96PogP(F9WE%}S*W~{Vk(kOd%J^HK9n>ASxQPCcEhTrA= z^BSNuBvt%>l{+?`!vcxjZm%Hc-KBpsW`&uNh8I^JnidDCMSVw4hF87f+1k4f4f(to zv%$=mf7Hn+5^)pSli2D%PQVFzh|_(cVkRn}5-M+TIJ z>|qh>chYd=b>%APt~^abyTqSt*7r0f_DdbH-6`$^wl7v6*TUYzJ zqhI#W&Whq~H0tm|#L{q%cd3Z^w}BLx-<`VppI3hPiE>=X-wj9k82{wF?5{@rQz-`5 zi2dXbMGUKX!%9K(&jurZa|Y5F@+4uSv0>{N&n-6%vCDP0rLDM=SNg?ScX-0}!T$xa z?wQR|m~iD#-RvW0iMJ3;)$(F2_RAN4!ObouFj#H3KZB$`sB;h-3k*WLu>x$ILVL(% zG=FxaQ|?}J(06kKgZ>8=f;I}+SI8I90+U_nx@WUw1p>AUO=}Lh$)LG zF`+*6F3Dw9)AZ(Q#XmXxKu#c~5;8-Ce~2PsdHaRDTM3mehy5 zMHA=xxl@VHWOVm!E1Xnlx!1jUX)lhi(epzy^7~K(-bUBuD-Eg)0r;4EdP8OZq@WohG0X=eJ2G=7~T8F6zzrBSNF6c$Mv}wjbFQ-_#Y2Kej9t$lHMChPJCd1L}zjM~1 zMt(=hPIIgqRdq|Od{Z&86T6o?cMwqc+Rg>tv;FL$$8*bt*a|7l!bI;{G6 z`ih9qw=x6%BJr~)zU>{$8m0iFT+)XwT+EBDy3@QJ3W2c?m4);)HnAHDHRwiiZgDkla- zEG2!onO@M=)`rBP-Lf@IVq=HYOHa<8#T&{@cgS@J?^&8At1PN=#`ecw+UqCC81KfV ztqY~`#^oM49i#zmJP-&Fq%%cMu@vuD3~K(0g+R%koL{r;JvYtuKSYE6599qWqlKsb zE~PqyjEXWvA9;r`Ybt;2)|SEm`2sBZdlMuaYf5@8R_!&4Q|qu@W0H8RwcxJMKm<~gtebwymq07Z8uMfxwk1(RK&$&=WLYz~^z{5OibRmZ*{_kyz?9^*QB@6MxN3Nxk`l_V@AF99Uq3-{w?dQOTQ7TCOs8JQmSGURY9+3%l); zmIp3OaN~aF``)?QK#l#>>{zWE_mwNby>qm#Zf^YKk6s(+=pbZTu9Cv$I%2u_N0U?+ z!ZNv+@OXi@)8EmXb6%D_YP5sFl@%%KWVv9V;eCIR3Bk@o)f=`~kTQ4v0tOOr}B z+gw)r7RL%xUFuY=i4o2G?dItONW2W$FgE1_Y>3}yBo?~p>ao+c%t zpWoZI*~7Z6-R2;OQ0D#ft;&O+BSrl+D=?~~N6WHt&wD35jfZpuj{IrUH}NVS9-v8? zn3%r#Hc(PLf(4%8(YIKcXt@3I?xBaTFMtNOtLBQ4)ku>P$JajXo>U|$!|Ko#M-^XH zy1o1w@|H5=i|xqH(0ccEbDJ(g@zKuC19va47K^KWjO}`a2aN{q5~d~@TJGFmemLEX zHVdJ#B(ccXG`Q|8G@IF|pvW`B!*?>l?*en=hy1~X6lL~{ZW5_F3Dz0>}#K1ayV6!f2{eN)f)8r>Zwb{ceCP0iY;0?ry7a{O;Z*> zytOoakTS~kUB&O_Gv>G=xV`6vpUSu-euK;LO~z#wula&xKSeJrENn`_`45rYi^U#} z`#St77^ae9s@a}byj1une1kA?2XX+OfaHu6Ps+d0X{L~y|saq_c6i{vhgTMWz za@GRXvte@l$q?hu%T&!*h4&Dq_XIe6bYXn>`=V@GNZUFIgkE}=4dvhiOq^}XC)=2!*Urk z@q6K+cDlk&Iot#h#fzO;wPoi>J?8rQ`gS=}eJ!64zpY8pPpz_mM^O(We}k z4!d`oga<*OLqQx{L;KP1&gk90zI^iLcSRT(?T5tEKhkalpZuvrpa@}@ipw_QIk^t~ zxP6a0xZy*qRpA>Nw!j$g&K1sfbfUH@I3L@9guIN2-Lu7goOit0XOW=O6;#&MeY#n^ zYG}AW8eZF(BS(PyFWdxVKyM?(a~4}H#!~k}&`FPz#nHs^pwWh6lYFEZnx!$NjAqO( zSWZK{0E>gKSL=2w(r&gFYxRoy_1;`K&T#YgjmQl16+tSc{nc}&Z1a8-r>kGWUB^rW zV?%L3@cMY)j!)RE?YZY)$LZUvj)-rVE&eZ04?OytZ4QGhho{f!1pNv3ti6$9W#2C( z9Bf`?0mT2^Z?*_H8hD{o#Ues&w`~G|d=WOIT7=le%axCC>0IA{z16xduRJ0eXB3E|6=mdu2VJmUcD?= z=k2l%-D;unHo?ZAV(L#)9*=gJ{sbI{$mEqMTldAXX(p-a+of3-Ma$3;(%C(LiYC;3 zo8>27`Wu6;kCk@;&NW>K9!c>_#;@oo_BwZM%i1#T1H5P-p3i9=QGbRKn%JA@`=zPJ z{O>ozxx>Jz%oVYZ7L|89N9p69roQIj*a$FtH# z+4HnS<*c`l0QWSfMxhE+wVV#eG!RWnXM6Vj&3kF!-1}N>#lQM4wNf}>0|I%5PA8a{ z#en`1%>&zFX&vRxt$x3k@zOe&7WN$&%Kr)uoPK{(;|5krl<8&%GJ%Jcw-u**nb#9= zNQc)1F~$aXGDjkWA5Z?>N`ywPwuZ)BHPnh)!;U{xE6t;3&)UsRbNEghWfkw4K#k%v zvtAn!dGn*iY7=-|K9x&_J6x?$X>&FOdywsj<#E-g!48{2bKZ36c#h)J*M7%BHqm z_deI7LUy&Ctle=qo}|cp;Qpsxp<>qms=)4q5NK4n^T?3l#E}#mddHX`#XL?ZNQMF0 z6v%=sKey8wAq3=ChiWTVgQk=*UknadQe}5~iI4$Lk46JnO-izmua>iN`PCw_RO>9I zjBr502<`_ZUgS7R{F9_IiD*g$V!Q=$8pln~51|i9i;G)w3F^(E1y=9#%#_1%tnTtmVVH1`1^iob8}- z{jf9Ja_2H&hb1D=Fr9Dzk>LUCaVymgOthu+0UsgJnz;y%;ZWuO)++ltB z-a^|=S_O|l7WyPa`*E*yUZTKrcHe<`!WYn^y!6$IX*M7D@%Fr+sN~-wOk4J^lQ5}L z*`4cxKB?FEb2&sM7SD?8Z#Y8w>+`7;O889#gMCf$x0M9(?>Q)#ugxr6ob?^oH7n#VV5OM0%hES1L{k438i$i1n6!>D&idg!6BJjg0=*r% zPqtFoEOmX)-|9ZeQW!(#;jc< zGLBWch#yg@W+e0Qn4&Nu-A)zbaT*@g zY5|iC&wA-OP;odYsfR4;*=nZcTk2PXBkH@GIyiV@_9|Akp{~SrZr$p+rul4<`lmml zH@UY5MSbbbO~`|@nEc>lt|T7D-xCfwxh@$=clIX^Qh?ux>8&;juW0KpAS|Iq(@Ifa zcwCy#&X2Q0HIpMUb5(duJMcDwn?)ag$(i)oA4!QASbsU)R6oN0AD+=z{e_4dcdm5P z9kui9SO&V3E;l;mc|P4*$43a)s=PfEx?CUhMc|ulwEM+F{UVhSj&*M@54>vv+A)H+ zxM|RVX_cL-75m1-1Vkd$a$|;3;NbH+kCfgWMfKl&Ep%xLJm4nY!$L*q!4wrkCsUP^ zjLg-MVssU{aBC}>Bd+tmVC@!zW`xVa29Hfnhs2;&lx(=plb3!QN}?#akdU>mpMqw- zwa?pvbq4wIJd4QJjSt3Yk^4Q_f0toZJ6tfNX5NU9J+n?{fCRu=(C;_$ftwxqsbEBI zY7|C%>6Pnml|2mjM(Iqmt-A+eFR@i^ZL76~nFIZnYKyS%gM1L!)Wq+kWbQt~Pq8QP zET=v`Kg#|=vi3|zrNQa1_c!rJO;?BQk25R|uY+R^0=RGyCwVUi@VMV>%bbI@^mVuxp7-%qdg+33{?>e$_q&wlaTY<|to z?W~JAhjWX0?&BsV*CQxRnH-eG)z3r>e{cw|^I*aQT+ra4hzeq#0?O8WRmk04mgODDxsOfwi=3MrFs z*6B(I`?trtMiaVrr{TbNNcTLqvu#-Ub@ zAeq%=GIh4oHfXAL=cPyG(;*^LsY2+~0^LS&xH~|9n-;(3>jUVAfr*U?+*O@Qvw213 z_e&!PgRBSxhcaXijy@edYLq6u2)xX4aN;>xtWA3tR-AmlgppHktMl$;>9PYy{R4vVRsMzF#UO){Y+I{&k;3>I$G8)w&uqR-<^vc*eEQBWt(ELPTP@K=h!n}5 z7#%rw`cG~f^QVIqU(Tn;gMUwMLi<1k;TD|{?@qt?@k;Y+NSFkAq zBE?xGzz=)?H~TkG{6Jf(^gsOG#J}3P&)LJuE%dl=kJs;s^YfrP_F62O724%s&YBXqQ&aRBO_-| zj=ZRaGe{ydF!I(E_&bw*Qpz|?Cl@Cek_!1j?Laa}Dc;4#ZEt7Tn-C?2<#zXX9<(RE z`@%&G2TrmZied!^XRfmfl5KRb=run)Ptkb*>UQedIt$+8$5pzCfg5w5O8tR(r@d5^Z4vt&DSHCyxj5dwG z0pGEgjEleIU3*`CHR2U7XJqg?yC`fvS!r5i(UkXjWBC5LU5Pxxw}~ZsLtjphDweh9 z!}rju_B-90!7Ug7fq5XsJJ#xQQ8#GaIowJGAuF zH4K_!wy}ff49RVgRa$vOWWbs(G8cI$KzO(&0ZAdzOOwX^O8S_{*-S!A3QZhm?oTX< zmw(y54OB9*D_z56agyo7_4PM&jPzlB(x^ow`446QuP)1npwj3N<( zDculUT#1n|)a0|Qv-E3+^h6!{-yv-K+g@#2LwB+o2D zu{v@nND7t=Ks{KV=s9za(nWn5FZT#n@k1XzlUhRBN8Y@OHh71HeSwG-clr)w58?qe zqJu(uFaD8ra>**pioDMz2`d9o;KRar-aH4Gx1guz75t8t$-<+72idFq#VLjkmOYMm zYL!f!O&Z<~FP_aBddLs`tO^clw31!G!0%7~+fH}w3_{J{HP;e{6hp%}KH*`1_?z?X z|KT&EBD&Ee5>8HR;Smuk+UkK5z_|q|V9ILr;pHZ)g)m4;3Lm(z=3{@%XzHP?+;nYz z9oW0}t*&dk2U@&ITHe|n-a5(O9vB-AE_}9}nfH?DC;q=wU~5%ItI4Qe4lMA zpAi%h;rx$61{{U`E4E|!TeSpxzQs&_Z7FW-8CO=@z&4}` z8rW*>Oxk%Jg)_|g4m}XeE$<;!R39~1R0k6b zOTXN22^;Y75RN^*9|Fml#0rty`7vwDiD)x0Z~-;6Lp}&;A7ZL@n(^p`@H7&|m}o|@ zS^8w>rLN^AP5)fLP9hqA0O1BuV9Ec$1Mvzw8wN>Q$UY7}a)H7@uCN4)HXEmKnB=xd z<07}X1jQT9Dngc@ zS8pNyrjXAnoT1t4^2e5uz|W`u!?yN$;Jl_IEJySqC>!DIf;>j_-`Zgf9O z)k8svc+M*$&(&}G`j-Y7w8Q=*x7;T!n8(*Ng?ro9zs>d%8-+f+W7`qUp`@(LN)UK` zXU0HZj`1XfmSG_DduVswm{py{q}O9)c=%l8VLf&N_uxSNUL{usGjQgoYB{>pb_fc} zZY1yQ+UW5prQU{5iLilJe?8D^O2VmYCk4%(RO_;D9pAEV+W$b(536ckU$r*YXEe37 zZ-eIQxWM?j0w1CRi9pCNFP7+f&dw~1hU&2wu3p=0%n;EOjc0*@P36`!vk}77C-s~i zNSlohnseuQ_{<+4P^(L^aFM2DJ%X^0lC74~1gwqlB1O^{_ZpKsJ3yGkyF_Ld3bAv~ zw&?e;5};y-M&JyH5{KG556ho`c6!^#( z%MhK^pXYVeeQaDg1CXXi-sRJwy3_q-&kv4q>9?A4zSl1ol4K81b@UNzw4c#sG|-56 z2|?FSFQTad;Gdr+r=1bmi%}mF^#vQuXbnA|_(G|INX*c6bu6*Wx)j8guuNu8gFoxW zgRDXZ2md^|M&5h`OBtGj-hX7L*D1AR?#pt55W=(njqIS9o>un@->G|7lr#H4oAduB zJDD7&z&jHtm<0+5A@}Fqal;USu=+oi8vXa2n(6D`Ix)sU4r!F@NV^&Q zVUk&mR}u?ndMyQa!PnQ-8VLz|w)Pv<`6hs)qcUo6Bele@@n;5nb>YdC3&xWZ4-(Wc zh4(~iZt)RL)FUg*L!H?TqY5&am74~8W!;n2{&tFPtOTB&MKiM@Jr@IkAgYBNjLgi#l?dgHZ>LT5(sio!b=gIdmfVDtm#aKXcoFk|7r0!(sIv?@Z`i=k z{#%{kSjLIJFY`S{ZJ&2Z@3Q#)o?zm{0EUr1&3?G4ZATyC?#wO}=+_>@7(S(`>S(>z zZKLZyf#!CFP|Y@!;4sQp_uU&k;xHn1MLnxoLe6L>*w}MMZ!b)m#%oirR$|=)JbR+j zoEWKAu)(|wk&H3JgL)VM_*10|(77=;a}#2v{$Q_fhr8!oZ01=6IN;o#31@jIdMG)x z4VgnumpBfbCo%*svU{~9;&F+}`3f9Tqe^U{luA`r&@3|ZWgT(*tHiBLZwqsNO4wy= zQW5l8!nxnwEIWyx|NblKl@G}$y{7JgF!v;pqPvHlND2*I-!kK$)2@J+U6oT)Uj%b) zebyeVvG8yMk5ch~in@BO^sP>XHkK=2FA<8E8)b2 zFWG-*Ku;vDY=Z|xO>G~iujSJD+)+a|1Omrz)KoD^D_gI_ABGt!Lq(pKCVFSH3U{|S zVIgbh0wwAMLU+T114fk>Q6!HI@d>{ zRgVonP(W*IYs5-BZ4K~;(V*QzZY)b39^UT+48H@&EQRLR)WF)=*=;`d$`D2GP=r%S zssyUj15&I6ffMB7oWn2G|E(kUVcp%^XE;(l=Ik%(-JuxCWBcUGXZarK9gZ+(q-}^Y z+lOZ!TbHprboBH;+h*_ni01>GSYhrdk@^Y(hO1|6e0Ts4?^kYj|8ZG^_2~!hWV;F zjg!bt3iLC_k)AhWJk3wf&&0dPb9(s9wPNof^ambqW|LM$iP2SoC1`2w(!aZQZ+PS+uVbi9}3x+hzOIj)#MIm{%ByH_0a$D z_A^}E#g`}h^s_^lay1Hd;~t(KSjWhZ@~dNaITIGYx{JD&qRCGE{di7saT@`T74E9n ze&Vb7^M(K3=!YYSed~HXElygA4o930=jWVF--Q1i$JCiSH4c%MUyaV#;KwEuBG$|aq*c=M)X|Q$bHjJw(R;Y{ct9)b!Gy$7MKxuV= z{NH-9WAX_#x#c7a@8skHj|MBO@!u7toEp%et)@mjzp%lyZt%v*7Kj*VO<{ffeW@Dm zJ7;)ns~|y?^zPnX8w-OK(HJ@GfHXPAL$FH{lOB8=AO0DsK{jBG{8LndSt}ryuGf^! zvu!>0Ni=6cQYHPie&9zy$BzRqM-m?o%Z44iI$giFS6BpN&I1V?&&w;i^j~e4ULkC( zhtg6~aPMBXHl(Od9TMdFj{oGY7Fg*|R=o?N`zY3C$YZfVVt4ic3z8LoK?{1^zo@Tw zTk|S9T7xfEm`(;Px!yjJ?A?X_9)9+2aiMU=gHq7HLUbv@T@~`?_PyH37Q^XBiK6iI zBT-7{hGiLdZHLC#q?((3oKgA9*}A2NIjmVq3}{OL+q-A z?sP^0`XVW&K6O-a;(Vod0>A6Ff+bvuv2~_BlXwh+j zD7f|xlq5YkBP(W_UQ9k6qe*={hEzu}8;M?6K62%Ll3`6PgB^Di!$x_3xha%Ih38fDt=D5_9H5iU`&Mt+V{#nw&n zT;GU;Y(POE1zCmuHteBx0>!L9?BAP(;r5M7gqd)2zxWY}o6~~__)i zG6I6mOd%h~-9x0V6BI}`#l%AwRq>9o@#M2x!wPI_?j3ArFt~0ZozDfHDC&b@CB8)s znN1Ygr#Lv<`LbUNJAorysQKdUlPBQ%UQ;J*P-rd)2o;r$*WIp~OwQ^Gk2sAfoZv}?>u}nTn_J0v6HkLVtP4*J!2MuW{V7f zxRD3exzl-F&_nJn5D17EX*!MBy3dHSU0pd$X#dd(CQPK6u@-$Wx?qC z+Es9n>IzEhNUu9!WzT)z7H#l8kxuU zB7>$vH2Y$`K41JY@mY=|*!m^e2!Krb7sAL6A%m=3%5ZTifB1NDh1s#k5Mdg9kfSQ- z#xzQWzcONzrt35i1cr~ge$!#xHwyd- zw?RVS*qRv^*P&Oex+h7!H7A#kMHB_k6tW>9^^FEkL!;~BUIJ64M5T0$rmqj}%&r`q z=Fs@`1jQ2;B6gyQES=n5ig~iC=gZVoYUv_Vqg*a8Dua5vQ>DpN>Xab*2^RVcE zB3H5{07(+wNRi-F-`RjmvtF?kJRxe${)f{fhgbQ+TF%{@{{xXUV!$^yR8<8N8Cn=c z?(jy4=OD`c#S)`TU`6zbermNJ&gP1jr|J^9&J-3>&;WXN@Wum}CYjgn@3jmKyw~i= zH3k#lRW@I)v`0r-BPFR4PPM)yLnkn7&_p!rQZ5)mvBM##cz5|vg?ZwH_JL*if=5R< zFVm*0Ek^4PM5}PIi=iH6;#to}50C93o@b{mM}hYHzHi!>4oW@Prd8%%Xg^~ywYejq zF9EMr0#pOZ95iQNn6JVI-b^THll+V4YzFt7K}a=+X5`O{>CC(Wf7sX>=h{k3U;DPX>z!jI^?rB6WiYSOHQ@|FK+ z14_BeddOe@-6%OX)u#H0Jj*;z1MZaSTruxo9 z9kh&Z;`2>)>9~hUCT-Tn4&WrRn*@pyvaJYronfE}k$B{evbJ`pkk6fHx#k60$S)Kw zBE_k##2q8uDpN0^gDcXLBf`Urqa$3+1@(-`y1V{ZP4uShB9b*bOU_)((!B&C0Y>#H3o9#Nl}iB5-eJ%6)2Ra60g2` z6zNcIbv?SK)y;T?PsM6qkw|H<{fxRa)-P;r|E2VxZ2?7w!whv_zm8G_U#tQ4(9eyj7Z(;H{^lI&GMtB%#lTLIG)pJgsusaFkvRU?Q4_TXTQY~J94jrUSa+{FnKk~;MYL*DZ0a6zeCZk%wgf@m3#4aX|m5szxo~u%tX4;EfR`kwrrSb+Tczy`W-`OZKD}Fo+=Thw>`gt2$G{ss5DYGLy52=iKsJga73`#m>~ zBg(rs+2*^c`@2r#agCK5msr{ZW+E1$UlJp^K&(|BVnJzv#hg=g6sIcA+P-UZtWD>C zE3ILrM{nR!iB7fWmrSVj-rl)$*_cg&|kv9cw@2sxmfqRbf6w3{zgYsx& zC}m3dOOjN}k@Kr57i^Z;Pn}g`=}@B0+FC_x$YMgiEwK{lLZoD5CRF04WOWz|J~0D$ z5*`jfrTp(M`>BiD{*-}d*FD%B(l=o{oyap@nqAHE$FgqSii9H6bw`CzJncx!&#CT+ zKaF=AdH=FE#l*@kTcbf%_2 zY}jgr=)}=JNk(<$s>Pah%^`r}<__$kNZ_M;uS!IT>3Vs6RZFCl?^F$a-~BM&aDnwL z+i_+s@qx?Y5EqzieaZ_P!Wd(hK{QVyZe} zEVXrF%+sFR4IM#!`q5ma3pv#bKk&W1FEboAXe#tOET+#|PAXa~ZY2zl**O6aK8o@Q z_$gvZW(E}08?8+F5%~y@DpsWmF^s7rj*t?Tdcf{sU|hlHKNSd664gxN68?v3KU^#o zI)*vyL--FPOuEcqPZc97fwJ-8XH@o%VyBL5`V(niM$`-|5(1N;y@6lz&}&1rkS z8=$8zjjWaQJKgO11z)FYVA_D6S8V-88J_4rW2%zDrDr$5&+ntV$4TV5`K{2!Gew=M zoh{K~Z#rS1XTXR%3*AI1U&G0EB!zkHT6JV;TVFmiVuz>{FOfV_GB*ob>Tqp+GfjoN zKJvh=>Qy z`%I=iINhTw&(3NSFR>gU0<&Kohlhtv1vVyqsu6v&yLX-^<$$K18Poy7K58MfNOjbl zq2AD>bhyoe~w{Zzx2AL86_OA!k3R~hWH5{fkmMBubu|UFs>j`T(}Br)g)Ackb^7znSVUX z(^A`P6imeQIF(~E5r}Ls!D&wXfP*;_=!n7TQ4;V>~bV(rc2|c{ty>*r}^Ox!C zMBLSLw_YdVSG{RXY_%g8bzb;iF|PYVCOr38SaRFS(HOMmO*ITi+n--9sCREg{WgUl zTf5c|`u239J!dItX)t5zFvkM|?tQVz5ZVPtcj_wKhc6%f0SQp9EDnfF)U@T&{bS-T zU2M?;;H>i$DH@h{JOYO&s!kE)hAFBd3K;PS zo|`;CV9>M4=d5md4BX~|-ySDJggI&UF+hN0m1mOf=ODS_Mr07wy4&qp35*#A6VOp_ zF$VXl_w>^f1F5>lGldu4it743#l*Uxy&-c8BAbxapTmDL#5<$vx3Z^Cz;7d-Zq$rg zu%HivbYX#f7m=zc0&S$Y9@u)NNr*_Pk0nW$A$0*zR zS?HzA8p*WUT!Q$@dLeCW%b7FvPa(;xqQ4wJ`qo0%EeV+=|#u94-4{K1Pah;rcl z^@?%4sKGT`R)Tf#^(_9cE@LyrvFe>I*}qff?0d6zi=YEzz=M_K`NDBfsobc;-;HzF zzdtccFIU;tK@$a%m`x`!y5w@>Ij~7(d7tt5-#*u8osGEI_8OMOB%=%#%Oc>HP18q; zSXu2TO&>-co`#WJjkhm_nimU0DY)#x!xKYQ=hptuN*`*zF3g;V-JvP`c#Jdu&HZXn zJ159B$W|zqSh>N%m5h#W_}tfjtmJ#vs@>`=7p`cD4P{6!hkzzH_=pcYPMnRNsPbAB zqD#3!R@QuhNk*RNh3E~P77RddH=Ks2oQ(w8Hm^q+iqaQ5?Z#|mZavDcr1o7SEP^44 zi4t@M%1CmUT@mjX;k>ll?P=!AiZhN_X%%etm6Vh)K)%_ax*_wQL+0J;EGWc7*_fcv z|D>}Zg7=r70@^@dDPyCyq;o$->_7!3Rk0`k>1wZGL!mN2Zo_C{fLhBb??}zb3Z_v? zm`r|VK>cXK6%sewvAunO)qy}bAQIQUKEa;!|LLP%r!Ou;nZ^{YtnIs}X%grd#zLf} zsBw^~9=+vVu%AdXi(hHKtLLktBU~ui1eD-3)!Y0MS8A#gFcjn0IDu)x- z)U&yWk%?s&RNfhp)&cTJDBnDFPFiVibpM!S_;Q8M9afG2G*V0~R?Hpw8)#Z3tk}T` zAdr0BS+27+w6JQna2&j8PQhpak7F*^hV) zFrB~*hMk&0o0Fp7>BCAA}yY6`XqT>F8aOjoOO2@ z*G))7Y`}%`W4JB44TI)!nMIyGeIoEJH!rVdtZO(AG`X@OKzri*hsOA`Rf6vK#&e?9 z+7sMW6;)I%lh3ACymut4D5>zPWEl2kbg&>vLb6a=l3KdBMO?ic<;~uuI7jbv%=f^D z^$HjqS@TB2%3rV4}8vc zQ7BO!>!cDYSrCL3c8ZA(s+())O9{7wO8rhHaxp9Kop19pU+FmUdh&0jV!g83DH5)r zya=w^f8uT>={LE^jYBqXuQ7^#ptO=z4mO8iz^DKk)n$J%c2SO64qm)L%%E%)w8}=n zW7ZFKIT-ibOxMltUN87O0e|bHi{`ctYEU0HIVCfG6618}#27^IG7kqR?-{)}e zDkzipEzY=M;9mDj*jcQx5`!(99)PsTAtbc+)?_|}RZ{Qn20Ku-XE_d}gC%w|V}d38 zGYmVjt$w_G;6r1@TzPJ#l+0b_VE_Db5_WjacISaRGS7K?G+a3p*4W_g1{RF7WcVJ5 z46#FQI$anW8}s>^!B0HOGFX@~ZX#B0fu78?@Am6gw36R(98ZwP#kxUd5*rT!<(pfO z;#=`~G;;$jfnWV{fmc63k4vmiz6g3H-^GpRgdDarJ)B|~afY<;>v6K5wbd?PMr!80 zUQR0CMsyiZLVF!fJq5|M1Pn5z#%SWr41Sf!K*_!ZLsXt3v`IMTc%`;o{pc7pPqiYD2(y@n39ol?_*&$D17tUx}oN8 z;BNJnWyz?2J-9i4yew)6%a(-gygbnBR-ewaMT;7dS%lxG$L z8w16xipsk7II{AtA#khpgW-XJIGlBLn`1mi1JeTMy$@gTTF+#qofPQ%m8y-8NIkZp zM`YCWP)N!R2u#M`&zy8DGxw%xQt4-Jf9_P2-hK16Tz*&^y*w{{gbYHFY%s;4W@RFdr-rt&b z2O>3s6Z>|sf>GDeH;HxONmCN;ykuk!5~3S-@45~RoXShs$U(y+BY^)oB>&CkyG`Hi z(To~9M~I)@b}tf!`QQBUs2G#Y$gn+P{^oIi|MTH)(LD@M8DwsQuhaG9JZrTlnkW^x zGwR`pYj=Jet~;)s>3eM{s7*xtXh%0} znl&oVbe(C9tX(n^-nf12nlhvP`m*qQH%CJ6gg%|xu~Y~Sj> zpI%%FRxpq!&SJIo+Ufd*aAX;Wfr={{@ri6)nFz+=Bho$&s5ABtRyw~zlkN5b*;E_eSLH~APX!=e(| zNXS1JoirRugMm65opyd_WB_NysMmFj3aw0oG$ulh8jh|_A{UVHMqD<~s3X|asomAY z17CmaM+=D8u=(H0<8;tkh9lDm;X8^?lRlJDMs9q+kT~0^!#u2T$>EIv)+>a4N2l8MjnDHiD-Re0)Vtl!a>&ka5+uFtp^#q#zr`MP4%1cVv z>lzwxBS+;*k+>`3029qM&gc2FZ)j`!SY}U0$(;M+5lNL>50;j%9e2@p8-Mc)+C_Za z*W;{_oa#qSdQvUN)A@?(@{1`gSCivE3|)EDdeo91S(tw3uuqMgBK)G+-c)~WYI%ys zRV9?blc#n@Tgp!srAS6Jv$k2%{$)fKC~hg`Sle>^%8tRF0T5)w-QZ^qWT$XgymqV` z9+0bsp!z$xpQGx1(?DZ3YP~&6|Ewk~UY;cI|MOIwTIDuD7?Ncq|*qiQ_ zt$@GFkf}R2YKz<4kB-)d-K`URbS3+W3d8le)qqkoJL*3+BM5vY(IQK(o8TqObsw+p z{Qc;2lbUnS9Y9^tMN~1%Z+A-1PVSipbeZS;*7)YYl0K}U6lH<%)4;wLOGVb!?eIWk{8@RbC;68{Xlt^_4f1=UQFSTj4GuK=W z0kN_(oS`<axIXzI7ORu>K|32<5N&e`H7jb~QcZ3qkj>6shr zQ)Vaj#ZNbv56MCY4}l@G{pT5uBkeaA!Xr`RDGxJF)J&Fd;Ft#KbuM7uUS{++>b`Ch z7lZA#4>X$AXOe}~wN<#UPyX$7x%$+s9TbpH18B;a^>u9W&+RDR->hsgfvS5ARXYggoM zMG#20+xpTUVUxsS$nFq^G=`#lQJZt$l<>!u94*MJuNHk}c9PSJ0?&rI*pn+tqJCR2wC3i`5VR>N6&#pT*XlajRq@-x3a+ou z6`~;o#gu4c6Y28*o}T(KVks;$K@5m#DAs*Q+Q+XNy{fB~X9R3)Y@QfVZ0+r(O--p% z)6%Bq=7ONw=*{jR6rlMlGOWJCd{933d5j&%1{!1q7)222g!_2d{Trdi*!u9{e9@*} z#W!5(>a%cP;lm4M`@i?7AosU3q1)SAQ+sh(Z*Om>T!@R11i8JvwZs6Jd3KH`yS+Wf zht*rj@^1bnA)(I7?xJ_F%p^37tsI`!pfsC0xX`_xbN00v*y{e^aujA3=N#9vPAXt} z*iqrZmpMxxjKwqtX0Y62%Ea-x%gf3-k9_&&R~cq9fTr8wD&FlH7e9IY?XH_iU>RAmbi2cG=sOaQ`kWyce_bIa~H6`-QG4egeWh|oIMhxjTPuP%e_~d zGn1s5yvTf_+0a=CNDW7ZWEZ0gaTMg*n&S;uYHST3WKlDH!h4q4qj2%$zrN6oUNBk; zizcH5$ezZD790HSL&BW-;@h70{3P==gnE3-kzz@3Hsw#U>qUH*of0ns&4j?(ZXmTg zrZ?&TQ`c8ORn>HVU*OUz_tGWZ-6<*E-7TdctdQ2eCW#l@{WU=#@bmY!x38^%Nu2?*>t16$xCpzlj#K=sAM+tD)zywUgr{tk zGKtT3N%M)fqReI}ZVY|32mYJljBPM`&vP6f(~xmLwy~z;HQ@Qjw|T4oiAVHi<3Zs= z?(2j1uKwGYuNaE%zne@J`Uv{DaSnm~zLy+<2RrZh-hbOB7i;{(2~7I=DTtTj_40@S z4f)rSm%)JLu48@YkmaG;TKG!+-h;=JEs7@T@u5TI^R*Ac%B>1WK4zst;<2ruW}I-7 z#jWqt(44Jchvym%hp;Ue!*FIge?r#VZY;~F)Iee)BA+Z0>N@vj1w!!W2|Ejm)|C(J z3!@b{QJ>EilywFmHPaNSjlRY;`7rH|NoK}H$$zh9OU{OhJ=~mxXtGl#3 zI<{OEv?=OAh(s!<{Th2ioTXUZM-xLd155^h#u*`uDhwoN@WVl4M}u|k zbDL^;a&e*9=8bNcfC2ILKIXI-k=XyBUR|GWGMo;MKMN4jV{Ym=bce+8E*GWstZ>=? z_QkxN2;8?kjD0VHuwY)u06OLa2lIY^DdaGlSXlp2X7nlfMPPm9;_EZylQv#kt*h~< zbq&VoA%OgPXc157Hm5M`);QCrYlN!{@4PK*_{;P6oGo#g=(19J`((pBiA5`wue0^$1iNYA z$=5fHWk6J_WnoeG+~?&9;hiN$qliuVrj(J48Nh+;Cz0c!(<0i)ua%UKW*$;lF|epC zFifJ9e0fjg<cqK#dJqk4Lw~rK#uM-Yt%Ef1d zx0p#+=T7uP15$^~-Ifof_D=kELvss>iFaEsT@*?%P?OQ)s-Dj_zQ}UrSgc=Lv+wHZ z$ph-@CY^v!q;yzx-p)c4PxR1X?#tY*A4mSt^@Q2rFx?@W@Q9s9*71!@KCGy?65jhS7~KW1}UoT-*5zriT!#rY?(Ha!T+XX z(JiMm_vOuYzb zPlp|RZgxr?mdq0LxOY1IF|{?|qWWE>VIH8nOFbn;Ex3{=}G|dUmRsR z*pJjcxJCH6-aqa9dXBBkN)6&Yo0FA#LRQnMtrtmC@MX^@Vy3Agob>#O822Mf*Oy=E z8ydDn770m=(|XC7EIz6G{V8x(EP8kt1EMJ(=S^1P4Y+s5b=x4r^STgFh;)EH5%)(z z{LujHG#cNo5XFz=N{#BfA|U_`R;PEgbEoqPzQA7#ODJWA1Wky4GiFvTZ)?_fx|5H2 zO<}#=-M3!}3B=9P92UJq&QjLi;6U(rqcXV=y;v$Mp2s_{ zY-x(zrJ^FCIK}HBuw@?t{Zaa4iI)P&L(NE16Z~#f1QPrzHz52)silCDk_45EU6|>xU9rh{wwmP-y`9NB8r6nbO<)XUvQw^RD*)EF=09Hu2T&zj4D=*zHhv~U*q^rMwejqlXCNlTm zcHhZMp!f3Q)CVeTu*vBAqh}030&*pdpMLLTt*I^+<>Umha&fJN9)~ah;f@O>FD^7Y z$y`$^u2Ko5JeHVgnqO0k0}Cym)0QYGZs`%P3Qsu`w+qjDdH|szWSc6Ip6$lO8Q1Bm zf~DZDLPaJ2PEsYv)1ay&)pnat3o7!V*5~1jS_1vq`9C-D-p~(&RKAR)_CbCOyVt*$4mb(n02!r|#Yn7KKFQNNd==(V7UDFXWcNqLYa9GOmsp_Ii6vu7v zkf4^-*H6XU585DZq$04ftA6hU6uH3xuv`AUghxH64ReSDO*oox1hU!DHmz0OV9s;wQAOZnV z|HvLlF5UQ;tP6s!`e^Gs-(LA$Mxj$EpAKt0B^?zfo3kuT$rm`jN-!NKK1OBvf!xkL zT8GCHELB*vkP}CRmVpBJpK|UoXc@yDL)8UxPN+)E8;MJXct2-rw+}X;eyEDTSlN~N zflEVkgxpT)PdZ=E0wgz{JzT7RFaGKPf=b>-g*`a=-;yqH7e9(&7dph6DAUztS8fCM zR;c8Xe&{@|FZO0tp(XMuf$RI=T%I>-6t3r)K%Vjjnv2|w-KW@}IUEUNcv3(l^K6-f zhzOk^_HPqI!XdJo>C2iwo#m~w18T}XYA5PltK)3O{(wNO2(NJ1i}oZtggywNzcN~> zdbMZ4y-6Q!iMir;qy)b>wgqBHgJUR!m%u9Y9#T+0k|D&>cWu0Lz|UA7)u;`V$R2BIXv8{PH4+NiblZILj;;N@(?`xLOMor+AI9Dl z1!slULWej5t3XdoPv79#=V)a%v$dhj2;k@ghdwGMR>0N8+enU)fYiM@QU6&&|!*vDf8(|CN*$>*(^6xHUJs#6-Apm;xsT@2}>afqP9 z+E7sOvxx3E$H>%m(FV__qJh^c^5~%Avab7mcWEfgu-wo6XRy%x!{dN`!7?)r3)vm( zdfR zo<9JRz8EE}W4Jb4VN|u#{XJJ7(+IVvx27Fg{eD8$=0J4B8E!{3nwga@~qI3GSM$i%$;mQpKcGA2vJW&I{qK{}v$B2Tg?*3LtBp*L#qd;o9r>Ow{E7bSo3e+=KQyy+=9|Lq1Rhxzrg4&3hh-&9* zJBa}yhV|$pNy%I*e91fOF}pl_t|;uhuS8(|IrXT$Y(NE+-%gjh{IbvEd-yyJo>+v0 zggn%NXSu}*hoAzQ4wMe2%lzt6=cmqwE9{Xp>_3b5x3PCZz{wlY21|K~oj*HSX&P1u zd^8CKi`RP8G5lT}WrlS2qrjJIa4^zfF#!jUN&7AI^j1V&X|N`QAk78%3x17hSsy_4 z6tw-zpwc1+w8Du{y8p@+sw}B^8&RkQo=s4DcuHvmHJjES6ozQURMTJjT3YQ``E$59 zI95`gJ%?i?6v8fY`gVoDNb4h=MS?#%rQk-NcQ&31N#FIV7t55J%9=H!UY3oQ76oJ^ zC_3QQq>D6GfH@jXxtqateayKSRX#mFKp`$RKa5MpiEkd5skJn4>6 zri=87pphK;%+Y0o?WVtc^?Z_RB+x{K%zZDrRJW+zrH+Eh0$fpXr;4U20fe6op}^bd z|FkRIQFdE}R>o#S&|K}lZ$~jSAoI+ zdb~X#*Ud^xr2Q1b6icA&_rT!^?p(BB96K>LhSD?}D_=K9o~)-M`%72Rti$$`QK!i@ zT77{5NF%or4d5=RqObK=FkxtLKs7bGjBq^3s?709e;(?QU6U+DYp8c_)L2l@Ie=ZZ z)iNHp_&A08Ivq8M~fdPVVf99K_TRQ&Ia76Kg!(2ypCy}Y}NsXL3 zb(WUzv7B~|l5SLTXY z(B%Qm<;hqZf7{8@8;*(t73nty#d&Aiq}l&+hqT_2mgdI*re&fME^mQ?Jvx2!Q5hmK z9H$&M|7jh$RT#^yTo6I3Lth;Nx1iON?bkplFZ%#>d(!0xDj$LmB_(Aaj`S9>lDZK% zG%cagHFSNB0D{pP9UWZ_j8C$&-r9x7CkhomfWA5&k%XKD%2&6Ib6wKAHM-T#(BqcIi&KPg~R2>{6k{N$d~iXlxSA-PTVf_-0_+A(*t#wpWA+F`9E2v;LK)`?3aqvyc;=V z>I~{gu>Ev-OA3#pTW{fl-Ky$b7%PKQ&R?paY@j-$o~=R|k+^+?h)ZCw$DkVrisodA z;%w^zcH`=zBuVIUqwSbW2qd%Ob`IC~8#eE&*%u^j4kJ_wjp}FqBUuvB-qeet$jR~LfalEN zHxSd-W6PPN+B&lLnDCZ*UkI5Qs$DYFs=^t&TUb(328KqGVnnZy7^=0u#2x;#)PlmaPKU{k+?VvGon`8 z1kvw(=sJ(vTZ*fk9sW=n+1;B>{+-{lo9N*(SQYcGQ&V2=THNKGTW2R zhn9Fhn!j+c{|e(j$%whKNH$O)yS@z}F7bJ8eDdaMK_vAo9w$LMLLr!Lg>tJ_5#OV- zV#O!BlinzTo|qLaw^Kng*&<)M{0oD=v^5D&g2~hT7m`bdPgxraDvfja!cqd@sI77u z4Db09twwHFiJO7TI*!1z9PgsW^5B+Dr-_*}zs=jyo8g34lM7R(^EQ!@9c|{26)ALq zTT=fHlB6`LF0Y)UJ*ObAi}!D|)VnGLe!JzM&L=3>Ew74upo%E!4 zPbc(Lkf;)s8O^KEU<0U*@z?44V_HLMRxB<&;4F$_UsPV|)oZv3_!5z+Z|fJ6+*%%N zXv>njkc(fAO{vtWU1ZGwwFGuUYQj1u5%AyyA7pBHLXwQirGh~1x?*l|Cn6-wf&Ve} zuU=tiO@(P(RV}|<;vp!$^fl}yvXivg%qUh@ob&3!jECS0nmagOu6ANiQw|$`M~&Dl zEIw?g{FS$Tna)FaOeC!{O|Vgyj$>S~u9GUw{;bC6B~hgGeyT$bKK&2I=i}bKfD(&D zY5=;4c7FG%4apS zQ@H{HO0Pz^EFYwVePZH&Y!_+Zum5YK)^>n8SBc!x=b8I`5Ot79&^S%Rp|X}jN`@R6 zr-+c&6)~NP#+{K`H)TZTmC(=vf++0)5KnjzK|3F0LP_a)&x^o zd$HVh7QQ~jZD$&W=vpWC`$TadXRR*^P|}d2V>2^mJ(dbs^yL;py?ks!{>V z4rSkJmlZ>@^;?AYcS*rEUbC_(M1^v-y# zv|Vh%bu?;!yT^>E7)+kMH=J$C{tx25;> zbrNRMOylf~p25!E0{_y9uM{g*bYjWA!izdQx)iOk5vdYO6e$e~MZ+cv{ zTHG|U+*kVRSo%^SN9mH!u!z-nA@MaX=<5T|u|9OH}R>Ao+A^1cmC(3hY6WaIzN zSBCM#zHJB)DTC>3 zUg3`2+0aHoL9!&BVbrv6WmX4mQ*@4uNBFCTmt5$F6OT+roJJ{Ju3GGz=gQcME(*xL z77Mz?s8x)K!Y{to7H3-6n!J)69`{dg@ZYcx+^hVazNLIzH6$?xv@R?%hxwn)a7CL7 ze&2W$v5{K|(J9-4U-u1t2UifvgM?oVkh7c8%_^2}k$1y)uGMfh)$i{1lfRTS#eb&B z)IBvo|I0PA4JwRsrWWOW{Z`9wjWjf|U@Pf1xT@fZ$TM^epfXyUjx>Q_0KdsCj&hRD z0{ECQRt~^rfN;3sZNZ49f>;>}L;j64JH)#z1QAde0NhhC6|Pq(!a;s7A9eI%k`p-> z;0I74G!E!4v$xj$-fBxYl-xWV$hZLi*ciYUG&T-{gT`Wll!%+4ufDe9#U^(S&T^UHL5n%oOj@;Ik#! zs0w$k8$4)hAhV;#VC~3QNKl$R6oXAghvipU2;pjqEOnk^lVqpS502{$P)?r#<-<#d zDG`vMp$`v4dTVT^X8aaPrYDQ3mFQV=~lH$S2Ck(??+2L{VmvhZH~ z5nH6r9xPLFBM`SdxWE)mA6!382O*Sxp|X@Q%(lTYGgpm^9X<9CEX>I9f#X}l?Ddk) z{&$iset9)Ici6%)ZRF2wdVmfOIbNyED!hUR`C(xGwQ6;Hf#s4wE!FI;^irU7Cz2rm z3`sBWCs48WCH@6g67pEwS5h7uPbWU=pUmxIN=AZ+%T){f*^?*Tb4ni9-fPv2S$0X7 z7m+No;{M7HfBNPddsInyUkP!hr1yp52R-~VSHzR|jwTOVv=pEh4(6D`DZbHReGEhR z7KA7?6RJ%y2?P=kW`km$kS>T{ZxE3-n3zkslQI!@IpJa`D{vg2$s^bV>3lxl{Kts_Fu_XGvJn>ELmQl<(s^*h9%S44 z(Dt45_qg#YI(7%I5`n}d5)YlIB1CAaq=$mc03tH;M?#W`fS6>ncRv{!Sw2yuZU=*h zYB{TeiiBtLN@S+9HeJ`AO0Dk4sq?uBo-Fug0#j`sp>;Z3+%oW}fin2d?{y;?N_5st z$4(*{pyaVxI{n8hxRL+7y4#OGkC_yFzcgH2MF}9^#eTNFxYKgNW3KOeRJ(#hP1Q zY`kIE1p;FS!(7&wCm26b-{w3J_0&AN$Gh%b1f(|@>ouL4%^a@{jtBgn3d^QESo9nL zD1!-x!8l6xkJc(4ELXL?*%tL!XY;iQD?x>~ZHU~nqe+}3X>Ab6dMoLHwp&?f$Xs{z z3^MA_<)3Uwex5(Vmwz6RO2yhS>_81I*0i|Eu@D)%@30&TrOzzr4EJ4vA^21#L}YIP zYQ=AoT`PfTedul#_?v>4T7C=U=?^=zMP zk*rgG@2{qe2oADQ=MR>>dIGn8PLX{An1tMK2tP`!3P7qNICamqNP54{i5oP!F6Bsh z4jma5=b4ueUErBum4p*Y2dR35Q?Rag0M&M!o4Ws?YoW{a=oXd1k@kZoOZsDZx-ahM zs!{iMoV=y{JXk5vNuTTW;UjIh^ro(M!Dx7T_`Q-axC}Im#sy^U>eC|*J>cq|sW>X+ zZp=g4y;#W}{5iaEd^t$n;5n#{O<(i++d}V?kt~crdw=oIYgZwaVpoPmR{^-Pdsk>{b!cD_HOKCCxq@i;NmONvrS2Y!?PWYv=NDrj%q3t$d7D4 z#CgeNg!-kLcT;=q-g`wL_=7CLVb^nwf=oX|i{4AjJ3sj~cf~yX6Dn4`fQ5nMmk){) zQ8kHqQu>o}1QzOZjh+Q)ZLpXP)h0_Zv@Z8MyNjlKS*Ff@jvKX6twa;;6;p#d8U zX&cA{*I)Cnx)^(&Jg|?Oni2pZx0bAF1_ZY+ zQL3y$xBJoA+rj9j=Z8(_+oUKD!w>G)QuUX|@;tTPd$>Kd+~1#dP9#NT?9D!UtF98h zD0!n-&BjRA382HkXp+}0ye3ODAw?4iWwZ0oe+d+DZ3Hzu zbTG`$Hqg{{gruE~cq=hSVXx;FT3OT4{=Yu#{Ww}W9GTIoUdyc2D-ABS|HDzg`i2+c zgIqOU+uhX#AVGJ&e4`l;-=&yqAgn0WB1>NgDM>|s%uMGZjaovzV2r_N{6Jox9StqT zPIV=vRC}ZVC8U$DR;$<}^j-LNdbM-_fg_ziqDhB^66t6{#tXxi8~8I_9pB08DuG!Ho2p_JU-!qTJuu%>H&#P>QZg=HYq zDwY@a#eci4e$&a7Uo1}PwM5IZ0P(F`<Zy=4wtt$1**uLd<{KoO~yblAChv`K8*;i6Nx;z{OUdfuPArv zA`)US3weAZm@6qK7Y@}e1fJaJJ~X+xcrG$%= z6X^zwM=yRS2faaqxF?;I@g|- zs`CYKj*m6!D8++E(dM92Hr@HaL+hgYbIgKyJc*+!&y-d};W62-WBP|3>dq)$d_0l# znZ=}TW7?KT0K07mFws8`XLq{zoyb-C2R_da&~d_SEu#`!53n(1D{aS}`rpokpE$~I zQf=ygD)6${dMxJ{QE6wo6ab;=o+V&892fsg(B`#y{x~KQEyT&T3?|irgTj%ByOvhv zwlXUya`Lk-Ezf2jjNr~SQNBrGSnhW-tl{xKWVya14`R~?AdtQ5HDh~qI}R0a+rQ#^ zapd%GcHW&VVX~-WH2j*l{7pxWwsH7s1+q3DC3*I7yMJTS%jj_Tv<)2 z?vz=XFj^@Ir#fggfitJ2Wz@4@A4rfw9rt5Qk-bS7f2s^LRmyoMM3QeN@|1SLTZvO% z3*MAWtT$YD<6=G2d*t>nR0Fj(Axdh*@RtF|v_4am>}j-je`TNUanjVPBo6|iJ{0Ob z%=mMho{!$4&nrh(JPbZ`zJSy{x>m`)cJ&d%o(!I`)4cAu@(o}T{@JqEdnt3EC1_5gy?B2 z!dM_ruaNF7$#rQ4V{)O_v(%yE;!AlsjGGjMa<}@g%EnINpArM)L1%*noILG$zsQx-^d&CJTRRGLWrQS%uG_0F>KezhE^7O!yS#04|Sj8530OMDoFu zBx*!j0s?GIHKG46`eI~nGQoVmJvuCQZEcNjtpJ+D^WZ%V9ocMed)Vg!HIS~*`mwTx zPvj9W^=rc)uz~AIS!qW)mm1$|{eMyX&4 z(3^2oW|+OT8Y}zsi9CJ6vN)Tpv zRB`lZQiWYsDmf)kxiG%QxF(Tjyo}YWONfo>h(4eb_lolq9)DZ?Y{aKeOs!8b_d9M; zNnVMbGrBV|J?X@qi8qcTea|FQB7cel(17!pHdZ!W0)iEzPNj*N8)Ny2%!%PY2BEIjA)JRkjbHD_7O zKasR$o$i+x(D7CC!TElJIcd|gqA?$Qgb68C^Vs{q2c(qQJn=VLjIwuu@-r;p6zfze zC?yE4!lHhj`1?WM={1r$D!G*@+^XTl?WyT)%YIu@%XBRKYMjEl{Kn87^vy06 zt9Y6#+ckndUyrW#%Va+lw_|06DDP-5EXWJUQ2TFg1w2>_9R`PiG1c6$aaPsS2B#*^ z5MDC4^^@JmhW4MbUDWQ%**^qb&a1y2UxE6{_-Et96vMx{4|gpREkO;(ivD$&4+*N2 z%o@HIfaU)+0xx~Ba8R3K8^XVsIkpM^^^Yc)k}(ac2)!yL=>XKG9xz?LgFu-4_(#pL z)*CRbO&Ykemz@Qy|7U&}H5Z45jt5_dAZUDbXrJsDG6ZQ|ottxZv_QDHW&e34AS@h! zY19;x-uNIq8x8czAZ`KC*=XN?yl7_+i@O`JcTO`#F}V8@$go^o199=6&m4Nm--D;k z+&k%=-n{#-ur34ZkR_6qv${v+OWH^AAel?ij5Tes9$)Qm-4JHS?BaIGh*ih#r_FhL%K6? zmiwMuR2Y%|I%SREdwmhq=v$qcQDMP!*~w)tN6FlYX~LIN$8u?&NLb84|Fc^1_nkp+ zpfEV0GkJFCR+9a_?4Rv|e6M_R1ZRZ-(D+aB5FB_)Kr>=li0mL$D})C> zrS_20A-8A*DzkCnn)?qO2@&iml2NnNQt;=vhE%AH7Hw)&I>==rOK$9ff0|;u6j?ap zaoYPz?l*XVThPZz?xZliEAQ?}Rn*dds7SA05?-vHp^l6E63UK;VqR&Nm(G#-bynBMKf-_ldcBACWRj6^T+q} zlx|>9TA0E)zwS|x<2wgxpv4zej?J7H%_#cOOelC!(3NOXnZQscxmRfWsJqWR-pb_W z(O4re<$gc9JlmcipwZdKp4-|hnVS#au828H^``y09@ppW zElX;;kB5RwgXDhSxz6Dvyh5VwK7(>H$OFzr2lZ@ZpDWxV zJ2uW1r9%;8rmf+212)=f-VzA^=0hywF0eyYwI5pIUMZ7qa9eiqb?Y84<4gU9I1@0$ z$H$4p#mfU~U{4ZGAZ!1AA6dWUU` zuhgfQsn|!yg!<7ka_dZPg`f(8AGqn&pDO#fC>U$0xWPw1yE(dNLzod%e2eXU*)Ns= zAo^P{7FsLgy__ij1UKNZv(jpu9`tEk?j(2VhBlGqG8>INc0Q;U7T^>g(+b^Mu3rUk z4LruX*Al2KA6IrpZivFFLb}0X$q+uT#?1lM%2@XeXBd@DU#@8%-A>gzDv7LgCyLKQ z1jio8hZs4l4H8`MaVJWDw~hUd`nb|kXDpvhQXfSgQ-%|T02fGGThq4=pkH_ zXJ-ee4d{}K45tfsq!$)8tjm(+aGEXaZB?-O5aiQb(BP9zD~iP%Dg{AY&Qnh+`bBKd zOZq8`cxpxROW*7-a9Sfy=Pw3GXm@RnO0TB30;QD^8wp`B=FCZIR-_$6v})@HhZUlX zM0-^;Yh7xx8}MTbE|3VW8Ag+ys+7`M@&nJ9LVvS%&}}Y3zuQ0`ju&^;?izXX;)c-S5L`BS7eDdeQp7przxlq-eVe(`nil z^Y+|(bLh^Tw%ogO-49Byg_>-wqxBA;pIr;A3Y^#K)p3W`e&6qx34bcIcW@z=`AKy6 zbNjJtww=sBJwbE3uLU;!$eqUe=$PW6WwJEu7qWz)4$^?@o*oit^t)?o&33Ek*1-H_ zK(*_zzp7W5Jil^&<4mrv3&YRK*mxQ>W!8QJ>j3Drq<67RS4K5AD_1$#a!MvkC6P&boloa-5;}irCG)o!f$m=9AlTA!i5-#1YA> z*xxnnQ&jgBIsFVT(7l6_=M{;ZG4@=7Hno2Yn*V-JQ1j?bxK?a)6Ncrv`=drYB2=di zVHcDt;;U6zh$*i2#i^joj;h=}Kw;23AJ`4!56n3=d2;Tla&*q@(oa_*J-xh4`kYnY z+dIDy%6oJn`n%{9Erwf^Nw4eG>BD*kT$NAi9Ml8;l=-ZME{pU6!NmR4ye2BJ$CdM- zaa7DfGWH@=-ftY{yD1a5Gg3j%-C%P+WTZ}9U#ngzt;CUX&L2_uUJKy@uS7=A5}(Mf zA~p_H|GrCeUAGTCTDE0fIG=AjQsA#SG42bUcs4F<+CZ$|Z{zM0&mYJ;U=x6bj49{L z#A;D!BD|HbAd-f*3(vY~{8L9BizR|d$yX%}t3HqyrF#-p`4~Kt0s8OfvGgqFAr6Z|21a0bK~t+SyRAY??i8Z`=~6#M%@hl0-@!`H@&dNb}*bJI7+NaJL3c$u$v!IR!q*AN!RKSNKy;g1{dOR z<~2`+S?Y+pP!HqFA3Np7flwLf0IRp=m&By|y*bZU2Ytp^j-R**$^bWVM_=Y@DThq2 zHW;n%jFSk+X~v`$+hr%SbNV8}xr(Ay+pj2&rsq2JvLjv1|dK+YZD&o#aelo8An%Hmg87T

`uk^*y)%HmglVwh1L{@7HlE7D>&D05TEDRezH`t};c=%1RK~+-I-`}k zAgzj-*{C%H+&3So~BX33*R7epS~l*o^%5c~+z_S2zHI@01u zy2y8!V}u;SoqO0eWJ`?JUVV@Ic_v=kEIEl#pYgr-u8}J!B$} z*b41R9-?TnGCpc4{8Sn}e&X4EQEEDGC5Sw2mO^*m>-_|BqSH``TLrG4Lm7*3F>y6b z&*i=2b38qsUIajJ=PY;3Vp`YDMqGkH-h1Y`F1-`96;3}Q-q&B^VICbXsRB^YvGMZ# zgkVx63ze@cy$RL8jR67ZSzGLF2T3bQultu;a4zrY1ze7ywQ1fjBPwo|0|DzHU|2O{4SWjyUL; zSz}2!doycl>-10gPSO|GI1S#)G!NNE+VWThj1RTpPg^9NwubfBE=_M*tM$BsC?>Zw0*nPvvBzX=)$Ja4^F6R}F= zhy*&C+I)yX9oek)3Dr5&kNlgENaLh#Xe6%CCp(-qj?1h|$>+-yb%cCRw-;M2f4iN{ z&U@~#7NgCk(qKJF2#4W`8Mc&^wqt|TEM3rJM_?gyJSUF`6%Fk zK1<{zReJQL>laj~Iuuh}dNdXKpZUkbv==4&c#Z7?PG(ZpFGs zh|RC14U@61Xr+yQ4Bn8-NAQB#Fg>!UECW_yKS-=B+-c)aANa1tty6sAe)8s(WqU`+ z!g7q9&*75A2mcGy{>av<5AWASaF>CR_7ldt5Z%U#*6n5S z00e?!b9bsi9}SQwiAErUk#K}f^`EN3zbJIeZB#{(^w7MFpR{G~inxJ|>F#D22)=lz zWcDxK0p=f;-f=u>3>y~QA;@<;<$fd*|LVy>S8P7B^39QDz2=EHxH!HQ?Za%3nmK0I z2#O_=6jCqQGZOrCOKjooS4B@xPcqPL07zf!GW`pOfPd+tjle`s)G!LbmCP@*Quf6j z%3WL;6PKybjgU-!`xfa89-pTL$+?83Wi~+C$RK!L)E?^P55g2pmJgbsSBI k{(}d>#-M`1LMgY@Cr9!bMBgpgAmBe`c@4RbvQ{Dg3xMQNCjbBd delta 299058 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

  • 0}Z3rtr-X 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

    1NMPR&~VBk%Fh0~(8;ZdWs)j*S=D)!IY% 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 literal 0 HcmV?d00001 diff --git a/icons/obj/chemical.dmi b/icons/obj/chemical.dmi index 97f450831fa05817cd812201440bad949c80721a..626b4a8d6cd201a8b2ddef575b1aaa9ac40b14cb 100644 GIT binary patch delta 18741 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 delta 19141 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 diff --git a/tgstation.dme b/tgstation.dme index 3498b295a39..9c761d2c1c2 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -136,11 +136,13 @@ #include "code\controllers\failsafe.dm" #include "code\controllers\master.dm" #include "code\controllers\subsystem.dm" +#include "code\controllers\subsystem\acid.dm" #include "code\controllers\subsystem\air.dm" #include "code\controllers\subsystem\assets.dm" #include "code\controllers\subsystem\augury.dm" #include "code\controllers\subsystem\diseases.dm" #include "code\controllers\subsystem\events.dm" +#include "code\controllers\subsystem\fire_burning.dm" #include "code\controllers\subsystem\garbage.dm" #include "code\controllers\subsystem\icon_smooth.dm" #include "code\controllers\subsystem\ipintel.dm" @@ -549,6 +551,7 @@ #include "code\game\objects\empulse.dm" #include "code\game\objects\explosion.dm" #include "code\game\objects\items.dm" +#include "code\game\objects\obj_defense.dm" #include "code\game\objects\objs.dm" #include "code\game\objects\radiation.dm" #include "code\game\objects\structures.dm" @@ -764,6 +767,7 @@ #include "code\game\objects\structures\grille.dm" #include "code\game\objects\structures\guncase.dm" #include "code\game\objects\structures\hivebot.dm" +#include "code\game\objects\structures\holosign.dm" #include "code\game\objects\structures\janicart.dm" #include "code\game\objects\structures\kitchen_spike.dm" #include "code\game\objects\structures\ladders.dm"

  • Pf2A1exbCZN&L_)Z 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 ts5x;1O$JnhMaRgv3I+2wR>z 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�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≧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