From f213d6c6068ceea9a832e7fbf02aa91a32cd0296 Mon Sep 17 00:00:00 2001 From: FalloutFalcon <86381784+FalloutFalcon@users.noreply.github.com> Date: Mon, 23 Sep 2024 11:48:43 -0500 Subject: [PATCH] Melee Code Cleanup (#2932) ## About The Pull Request Mostly cleaning up paths and de parenting some items like kitchen knife, clay more, or null rod, sprite and code organization. adds some stuff for scrap weapons and a cargo machete but nothing player facing besides a minor buff to scrap armour (rare drop from hostile rn). I'll work on implementing them in a second pr ## Why It's Good For The Game Makes it easier to work on melee code by making everything a lot clearer ## Changelog :cl: code: bunch of code organization related to melee refactor: cleaned up a bunch of melee items to have better inheritance and paths /:cl: --------- Signed-off-by: FalloutFalcon <86381784+FalloutFalcon@users.noreply.github.com> --- .../BeachRuins/beach_ancient_ruin.dmm | 2 +- .../BeachRuins/beach_crashed_engineer.dmm | 2 +- .../BeachRuins/beach_fishing_hut.dmm | 9 +- .../BeachRuins/beach_float_resort.dmm | 2 +- .../BeachRuins/beach_ocean_town.dmm | 4 +- .../BeachRuins/beach_pirate_crash.dmm | 4 +- .../IceRuins/icemoon_crashed_holemaker.dmm | 2 +- .../icemoon_underground_abandoned_village.dmm | 4 +- .../icemoon_underground_brazillianlab.dmm | 28 +- .../JungleRuins/jungle_paradise.dmm | 2 +- .../JungleRuins/jungle_syndicate.dmm | 4 +- .../lavaland_abandonedlisteningpost.dmm | 2 +- .../LavaRuins/lavaland_crashed_starwalker.dmm | 2 +- .../lavaland_surface_biodome_winter.dmm | 2 +- .../lavaland_surface_buried_shrine.dmm | 4 +- .../lavaland_surface_elephant_graveyard.dmm | 2 +- .../lavaland_surface_lava_canyon.dmm | 10 +- .../lavaland_surface_wrecked_factory.dmm | 12 +- _maps/RandomRuins/ReebeRuins/reebe_arena.dmm | 50 +- .../ReebeRuins/reebe_decayed_sm.dmm | 38 +- .../whitesands_surface_camp_combination.dmm | 4 +- _maps/RandomRuins/SpaceRuins/spacemall.dmm | 6 +- .../WasteRuins/wasteplanet_pandora.dmm | 18 +- _maps/map_files/generic/CentCom.dmm | 39 +- _maps/outpost/nanotrasen_asteroid.dmm | 6 +- .../independent/independent_beluga.dmm | 2 +- .../independent/independent_dwayne.dmm | 2 +- .../independent/independent_junker.dmm | 4 +- .../shuttles/independent/independent_kilo.dmm | 2 +- .../independent/independent_lagoon.dmm | 7 +- .../independent/independent_mudskipper.dmm | 4 +- .../independent/independent_rigger.dmm | 2 +- .../independent/independent_schmiedeberg.dmm | 6 +- .../independent/independent_shetland.dmm | 8 +- .../independent/independent_sunskipper.dmm | 6 +- .../independent/independent_tranquility.dmm | 2 +- _maps/shuttles/inteq/inteq_colossus.dmm | 8 +- _maps/shuttles/inteq/inteq_talos.dmm | 6 +- _maps/shuttles/inteq/inteq_valor.dmm | 4 +- _maps/shuttles/inteq/inteq_vaquero.dmm | 6 +- .../shuttles/nanotrasen/nanotrasen_heron.dmm | 12 +- _maps/shuttles/nanotrasen/nanotrasen_meta.dmm | 2 +- .../shuttles/nanotrasen/nanotrasen_mimir.dmm | 12 +- .../shuttles/nanotrasen/nanotrasen_osprey.dmm | 2 +- .../shuttles/nanotrasen/nanotrasen_ranger.dmm | 6 +- .../nanotrasen/nanotrasen_skipper.dmm | 4 +- _maps/shuttles/pgf/pgf_crying_sun.dmm | 16 +- _maps/shuttles/pirate/pirate_libertatia.dmm | 6 +- _maps/shuttles/pirate/pirate_tortuga.dmm | 12 +- _maps/shuttles/roumain/srm_elder.dmm | 16 +- _maps/shuttles/solgov/solgov_chronicle.dmm | 4 +- _maps/shuttles/solgov/solgov_inkwell.dmm | 18 +- _maps/shuttles/solgov/solgov_paracelsus.dmm | 6 +- .../subshuttles/independent_sugarcube.dmm | 2 +- .../syndicate/syndicate_cybersun_kansatsu.dmm | 12 +- .../shuttles/syndicate/syndicate_panacea.dmm | 2 +- .../syndicate/syndicate_twinkleshine.dmm | 10 +- _maps/templates/shelter_2.dmm | 2 +- check_regex.yaml | 2 +- code/__DEFINES/inventory.dm | 2 +- code/_globalvars/lists/maintenance_loot.dm | 4 +- code/controllers/subsystem/traumas.dm | 11 +- code/datums/action.dm | 38 - code/datums/actions/ninja.dm | 4 +- .../components/crafting/recipes/misc.dm | 2 +- .../components/crafting/recipes/weapon.dm | 8 +- code/datums/components/riding.dm | 2 +- .../components/storage/concrete/pockets.dm | 4 +- code/datums/martial/sleeping_carp.dm | 93 -- code/game/gamemodes/clown_ops/clown_ops.dm | 2 +- code/game/gamemodes/nuclear/nuclear.dm | 4 +- code/game/machinery/cryopod.dm | 1 - code/game/machinery/doors/airlock.dm | 4 +- code/game/machinery/doors/door.dm | 2 +- .../game/objects/effects/spawners/lootdrop.dm | 6 +- code/game/objects/items.dm | 7 +- code/game/objects/items/blueprints.dm | 8 +- code/game/objects/items/clown_items.dm | 4 +- code/game/objects/items/cosmetics.dm | 4 +- code/game/objects/items/courtroom.dm | 4 +- code/game/objects/items/dna_injector.dm | 2 +- code/game/objects/items/door_seal.dm | 2 +- code/game/objects/items/gift.dm | 4 +- code/game/objects/items/handcuffs.dm | 6 +- code/game/objects/items/holy_weapons.dm | 522 ---------- .../objects/items/implants/implantcase.dm | 1 - code/game/objects/items/implants/implanter.dm | 2 +- .../game/objects/items/implants/implantpad.dm | 2 +- code/game/objects/items/kitchen.dm | 227 ----- .../objects/items/{ => melee}/chainsaw.dm | 1 + .../objects/items/{ => melee}/dualsaber.dm | 2 +- code/game/objects/items/melee/energy.dm | 3 +- .../items/{ => melee}/energyhalberd.dm | 3 +- .../game/objects/items/{ => melee}/fireaxe.dm | 50 +- code/game/objects/items/melee/knife.dm | 208 ++++ code/game/objects/items/melee/misc.dm | 927 +++--------------- .../objects/items/{ => melee}/powerfist.dm | 0 code/game/objects/items/melee/spear.dm | 137 +++ .../objects/items/{ => melee}/stunbaton.dm | 232 ++++- code/game/objects/items/melee/sword.dm | 539 ++++++++++ .../objects/items/{ => melee}/teleprod.dm | 0 code/game/objects/items/melee/weaponry.dm | 119 +++ code/game/objects/items/miscellaneous.dm | 296 +++++- code/game/objects/items/paint.dm | 1 - code/game/objects/items/pitchfork.dm | 102 -- code/game/objects/items/religion.dm | 12 - code/game/objects/items/singularityhammer.dm | 145 --- code/game/objects/items/spear.dm | 283 ------ code/game/objects/items/stacks/medical.dm | 2 +- .../game/objects/items/stacks/sheets/glass.dm | 2 +- .../objects/items/stacks/sheets/mineral.dm | 1 - .../items/stacks/sheets/sheet_types.dm | 3 +- code/game/objects/items/storage/belt.dm | 26 +- .../game/objects/items/storage/uplink_kits.dm | 27 +- code/game/objects/items/tanks/jetpack.dm | 2 +- code/game/objects/items/toys.dm | 6 +- code/game/objects/items/weaponry.dm | 759 -------------- .../crates_lockers/closets/job_closets.dm | 1 - code/game/objects/structures/fireaxe.dm | 6 +- code/game/objects/structures/girders.dm | 7 +- code/game/objects/structures/headpike.dm | 6 +- code/game/objects/structures/manned_turret.dm | 2 +- code/game/objects/structures/tables_racks.dm | 1 - code/game/objects/structures/watercloset.dm | 2 +- code/game/turfs/closed/wall/mineral_walls.dm | 2 +- .../blood_contract/blood_contract.dm | 2 +- code/modules/antagonists/cult/blood_magic.dm | 50 +- code/modules/antagonists/cult/cult.dm | 6 +- code/modules/antagonists/cult/cult_items.dm | 373 +------ .../antagonists/cult/cult_structures.dm | 7 - code/modules/antagonists/cult/ritual.dm | 155 --- code/modules/antagonists/cult/runes.dm | 17 - code/modules/antagonists/devil/devil.dm | 7 - .../nukeop/equipment/nuclearbomb.dm | 14 - .../antagonists/wizard/equipment/artefact.dm | 4 +- .../antagonists/wizard/equipment/spellbook.dm | 10 - .../awaymissions/mission_code/snowdin.dm | 6 +- .../blackmarket/blackmarket_items/weapons.dm | 4 +- code/modules/cargo/bounties/assistant.dm | 4 +- code/modules/cargo/bounties/mining.dm | 4 +- code/modules/cargo/exports/lavaland.dm | 4 - code/modules/cargo/exports/weapons.dm | 2 +- code/modules/cargo/packs/costumes_toys.dm | 2 +- code/modules/cargo/packs/sec_supply.dm | 19 +- .../clothing/outfits/ert/frontiersmen_ert.dm | 10 +- .../modules/clothing/outfits/ert/indie_ert.dm | 2 +- .../modules/clothing/outfits/ert/inteq_ert.dm | 2 +- .../clothing/outfits/ert/minutemen_ert.dm | 2 +- .../clothing/outfits/ert/nanotrasen_ert.dm | 6 +- .../clothing/outfits/ert/syndicate_ert.dm | 6 +- .../clothing/outfits/factions/frontiersmen.dm | 4 +- .../clothing/outfits/factions/independent.dm | 10 +- .../clothing/outfits/factions/nanotrasen.dm | 8 +- .../clothing/outfits/factions/solgov.dm | 4 +- .../clothing/outfits/factions/syndicate.dm | 16 +- code/modules/clothing/outfits/standard.dm | 1 - .../clothing/spacesuits/miscellaneous.dm | 8 +- code/modules/clothing/suits/armor.dm | 9 +- code/modules/clothing/suits/bio.dm | 2 +- code/modules/clothing/suits/chaplainsuits.dm | 4 +- code/modules/clothing/suits/cloaks.dm | 4 +- code/modules/clothing/suits/jobs.dm | 2 +- code/modules/clothing/suits/miscellaneous.dm | 2 +- code/modules/clothing/under/accessories.dm | 2 - code/modules/events/wizard/curseditems.dm | 60 -- code/modules/flufftext/Hallucination.dm | 4 +- .../food_and_drinks/drinks/drinks/bottle.dm | 2 +- .../recipes/tablecraft/recipes_misc.dm | 2 +- code/modules/holodeck/items.dm | 4 +- code/modules/hydroponics/grown/nettle.dm | 2 +- code/modules/hydroponics/grown/root.dm | 2 +- code/modules/hydroponics/hydroitemdefines.dm | 4 +- code/modules/jobs/job_types/chaplain.dm | 14 - code/modules/jobs/job_types/shaft_miner.dm | 2 +- code/modules/library/lib_items.dm | 2 +- code/modules/library/lib_machines.dm | 1 - code/modules/mapping/mapping_helpers.dm | 2 +- code/modules/mining/abandoned_crates.dm | 7 +- .../modules/mining/equipment/explorer_gear.dm | 34 + code/modules/mining/equipment/survival_pod.dm | 7 +- code/modules/mining/lavaland/ash_flora.dm | 2 +- .../mining/lavaland/necropolis_chests.dm | 103 +- code/modules/mining/machine_vending.dm | 2 +- .../mob/living/simple_animal/bot/cleanbot.dm | 2 +- .../mob/living/simple_animal/hostile/bear.dm | 2 +- .../hostile/human/frontiersman.dm | 2 +- .../simple_animal/hostile/human/skeleton.dm | 2 +- .../simple_animal/hostile/human/survivors.dm | 8 +- .../hostile/megafauna/codename_claw.dm | 2 +- .../hostile/megafauna/cult_templar.dm | 25 +- .../hostile/mining_mobs/hivelord_outfits.dm | 6 +- code/modules/mod/modules/modules_ninja.dm | 2 +- code/modules/ninja/energy_katana.dm | 25 +- code/modules/ninja/outfit.dm | 2 +- code/modules/ninja/suit/suit.dm | 2 +- code/modules/photography/_pictures.dm | 2 +- code/modules/photography/camera/camera.dm | 1 - code/modules/photography/camera/film.dm | 1 - code/modules/photography/photos/album.dm | 2 +- code/modules/photography/photos/photo.dm | 2 +- code/modules/power/supermatter/supermatter.dm | 2 +- .../reagents/reagent_containers/spray.dm | 2 +- .../research/designs/autolathe_designs.dm | 6 +- code/modules/research/designs/misc_designs.dm | 2 +- .../xenobiology/crossbreeding/_weapons.dm | 29 - .../xenobiology/crossbreeding/burning.dm | 8 - .../ruins/objects_and_mobs/sin_ruins.dm | 31 - code/modules/ruins/rockplanet_ruin_code.dm | 2 +- code/modules/shuttle/emergency.dm | 2 +- code/modules/spells/spell_types/conjure.dm | 2 +- code/modules/spells/spell_types/devil.dm | 22 - code/modules/spells/spell_types/godhand.dm | 2 +- code/modules/surgery/advanced/lobotomy.dm | 2 +- code/modules/surgery/amputation.dm | 4 +- code/modules/surgery/coronary_bypass.dm | 2 +- .../surgery/experimental_dissection.dm | 2 +- code/modules/surgery/gastrectomy.dm | 2 +- code/modules/surgery/hepatectomy.dm | 2 +- code/modules/surgery/lobectomy.dm | 2 +- code/modules/surgery/mechanic_steps.dm | 4 +- code/modules/surgery/organic_steps.dm | 10 +- code/modules/surgery/organs/augments_arms.dm | 4 +- code/modules/surgery/plastic_surgery.dm | 2 +- code/modules/surgery/tools.dm | 2 +- code/modules/uplink/uplink_items.dm | 2 +- code/modules/vehicles/scooter.dm | 8 +- code/modules/vending/drinnerware.dm | 6 +- code/modules/vending/games.dm | 4 +- code/modules/vending/sustenance.dm | 2 +- code/modules/vending/wardrobes.dm | 3 +- icons/mob/inhands/weapons/swords_lefthand.dmi | Bin 28291 -> 30216 bytes .../mob/inhands/weapons/swords_righthand.dmi | Bin 31883 -> 31326 bytes icons/obj/improvised.dmi | Bin 856 -> 1315 bytes icons/obj/items.dmi | Bin 0 -> 61369 bytes icons/obj/items_and_weapons.dmi | Bin 114846 -> 0 bytes icons/obj/mysterybox.dmi | Bin 12483 -> 0 bytes icons/obj/transforming_energy.dmi | Bin 12888 -> 0 bytes icons/obj/weapon/axe.dmi | Bin 0 -> 3273 bytes icons/obj/weapon/baton.dmi | Bin 0 -> 5584 bytes icons/obj/weapon/blunt.dmi | Bin 0 -> 4469 bytes icons/obj/weapon/energy.dmi | Bin 0 -> 13302 bytes icons/obj/{item => weapon}/knife.dmi | Bin icons/obj/weapon/misc.dmi | Bin 0 -> 2364 bytes icons/obj/weapon/spear.dmi | Bin 0 -> 2045 bytes icons/obj/weapon/sword.dmi | Bin 0 -> 15674 bytes shiptest.dme | 25 +- tools/UpdatePaths/Scripts/2776_cultbegone.txt | 12 +- tools/UpdatePaths/Scripts/2932_melee.txt | 17 + 248 files changed, 2208 insertions(+), 4527 deletions(-) delete mode 100644 code/game/objects/items/holy_weapons.dm rename code/game/objects/items/{ => melee}/chainsaw.dm (98%) rename code/game/objects/items/{ => melee}/dualsaber.dm (99%) rename code/game/objects/items/{ => melee}/energyhalberd.dm (98%) rename code/game/objects/items/{ => melee}/fireaxe.dm (72%) create mode 100644 code/game/objects/items/melee/knife.dm rename code/game/objects/items/{ => melee}/powerfist.dm (100%) create mode 100644 code/game/objects/items/melee/spear.dm rename code/game/objects/items/{ => melee}/stunbaton.dm (59%) create mode 100644 code/game/objects/items/melee/sword.dm rename code/game/objects/items/{ => melee}/teleprod.dm (100%) create mode 100644 code/game/objects/items/melee/weaponry.dm delete mode 100644 code/game/objects/items/pitchfork.dm delete mode 100644 code/game/objects/items/singularityhammer.dm delete mode 100644 code/game/objects/items/spear.dm delete mode 100644 code/game/objects/items/weaponry.dm delete mode 100644 code/modules/antagonists/cult/ritual.dm delete mode 100644 code/modules/events/wizard/curseditems.dm create mode 100644 icons/obj/items.dmi delete mode 100644 icons/obj/items_and_weapons.dmi delete mode 100644 icons/obj/mysterybox.dmi delete mode 100644 icons/obj/transforming_energy.dmi create mode 100644 icons/obj/weapon/axe.dmi create mode 100644 icons/obj/weapon/baton.dmi create mode 100644 icons/obj/weapon/blunt.dmi create mode 100644 icons/obj/weapon/energy.dmi rename icons/obj/{item => weapon}/knife.dmi (100%) create mode 100644 icons/obj/weapon/misc.dmi create mode 100644 icons/obj/weapon/spear.dmi create mode 100644 icons/obj/weapon/sword.dmi create mode 100644 tools/UpdatePaths/Scripts/2932_melee.txt diff --git a/_maps/RandomRuins/BeachRuins/beach_ancient_ruin.dmm b/_maps/RandomRuins/BeachRuins/beach_ancient_ruin.dmm index 77df46175bc6..cfe522aeb415 100644 --- a/_maps/RandomRuins/BeachRuins/beach_ancient_ruin.dmm +++ b/_maps/RandomRuins/BeachRuins/beach_ancient_ruin.dmm @@ -1458,7 +1458,7 @@ /turf/open/floor/plasteel/mono, /area/ruin/beach/complex) "wV" = ( -/obj/item/kitchen/knife/hunting{ +/obj/item/melee/knife/hunting{ name = "machete"; pixel_y = 8; desc = "Space vines HATE this one simple trick!" diff --git a/_maps/RandomRuins/BeachRuins/beach_crashed_engineer.dmm b/_maps/RandomRuins/BeachRuins/beach_crashed_engineer.dmm index 998e43b9085a..971fde63cb03 100644 --- a/_maps/RandomRuins/BeachRuins/beach_crashed_engineer.dmm +++ b/_maps/RandomRuins/BeachRuins/beach_crashed_engineer.dmm @@ -1232,7 +1232,7 @@ /obj/machinery/atmospherics/components/unary/passive_vent{ dir = 1 }, -/obj/item/fireaxe{ +/obj/item/melee/axe/fire{ name = "rusty fire axe" }, /turf/open/floor/engine/airless, diff --git a/_maps/RandomRuins/BeachRuins/beach_fishing_hut.dmm b/_maps/RandomRuins/BeachRuins/beach_fishing_hut.dmm index ab5a6bb58d84..ed6c353d26d7 100644 --- a/_maps/RandomRuins/BeachRuins/beach_fishing_hut.dmm +++ b/_maps/RandomRuins/BeachRuins/beach_fishing_hut.dmm @@ -204,7 +204,7 @@ /obj/structure/closet/cabinet, /obj/item/pneumatic_cannon/speargun, /obj/item/storage/backpack/magspear_quiver, -/obj/item/kitchen/knife/hunting, +/obj/item/melee/knife/hunting, /turf/open/floor/wood, /area/ruin/beach) "kr" = ( @@ -529,7 +529,7 @@ dir = 6 }, /obj/structure/table/reinforced, -/obj/item/kitchen/knife/butcher, +/obj/item/melee/knife/butcher, /turf/open/floor/plastic, /area/ruin/beach) "wg" = ( @@ -1032,7 +1032,7 @@ "Os" = ( /obj/structure/table/wood/reinforced, /obj/effect/turf_decal/corner/opaque/pink/diagonal, -/obj/item/kitchen/knife{ +/obj/item/melee/knife/kitchen{ pixel_y = 12; pixel_x = 9 }, @@ -1052,7 +1052,7 @@ /obj/structure/closet/cabinet, /obj/item/pneumatic_cannon/speargun, /obj/item/storage/backpack/magspear_quiver, -/obj/item/kitchen/knife/hunting, +/obj/item/melee/knife/hunting, /obj/machinery/light/small/directional/east{ light_color = "#d8b1b1" }, @@ -1244,7 +1244,6 @@ /turf/open/water/beach/deep, /area/overmap_encounter/planetoid/beachplanet/explored) "Vt" = ( -/obj/item/nullrod/carp, /obj/structure/bed/dogbed, /obj/effect/decal/cleanable/dirt, /turf/open/floor/wood/walnut, diff --git a/_maps/RandomRuins/BeachRuins/beach_float_resort.dmm b/_maps/RandomRuins/BeachRuins/beach_float_resort.dmm index 29ad64707d84..bf43f3ee9f94 100644 --- a/_maps/RandomRuins/BeachRuins/beach_float_resort.dmm +++ b/_maps/RandomRuins/BeachRuins/beach_float_resort.dmm @@ -193,7 +193,7 @@ /turf/open/water/beach, /area/overmap_encounter/planetoid/beachplanet/explored) "eZ" = ( -/obj/item/melee/roastingstick, +/obj/item/roastingstick, /turf/open/floor/wood{ light_range = 2 }, diff --git a/_maps/RandomRuins/BeachRuins/beach_ocean_town.dmm b/_maps/RandomRuins/BeachRuins/beach_ocean_town.dmm index a751740c08a2..d1a3ff05cf04 100644 --- a/_maps/RandomRuins/BeachRuins/beach_ocean_town.dmm +++ b/_maps/RandomRuins/BeachRuins/beach_ocean_town.dmm @@ -1628,7 +1628,7 @@ /obj/effect/turf_decal/weather/sand{ dir = 5 }, -/obj/item/melee/roastingstick, +/obj/item/roastingstick, /obj/item/reagent_containers/food/snacks/sausage, /turf/open/floor/plating/dirt{ light_range = 2 @@ -2304,7 +2304,7 @@ /obj/effect/turf_decal/weather/sand{ dir = 8 }, -/obj/item/melee/roastingstick, +/obj/item/roastingstick, /turf/open/floor/plating/dirt{ light_range = 2 }, diff --git a/_maps/RandomRuins/BeachRuins/beach_pirate_crash.dmm b/_maps/RandomRuins/BeachRuins/beach_pirate_crash.dmm index 2b2479ffe0fb..67ac69292603 100644 --- a/_maps/RandomRuins/BeachRuins/beach_pirate_crash.dmm +++ b/_maps/RandomRuins/BeachRuins/beach_pirate_crash.dmm @@ -16,7 +16,7 @@ /area/ruin/beach/piratecrash/storage) "af" = ( /obj/structure/table/wood, -/obj/item/kitchen/knife, +/obj/item/melee/knife/kitchen, /obj/effect/turf_decal/corner/opaque/black/diagonal, /obj/effect/turf_decal/siding/wood{ dir = 1 @@ -37,7 +37,7 @@ }, /obj/structure/table/wood, /obj/item/reagent_containers/food/snacks/fishfry, -/obj/item/kitchen/knife/shiv{ +/obj/item/melee/knife/shiv{ pixel_x = -6; pixel_y = 5 }, diff --git a/_maps/RandomRuins/IceRuins/icemoon_crashed_holemaker.dmm b/_maps/RandomRuins/IceRuins/icemoon_crashed_holemaker.dmm index 82c054f8fabf..707be4573d13 100644 --- a/_maps/RandomRuins/IceRuins/icemoon_crashed_holemaker.dmm +++ b/_maps/RandomRuins/IceRuins/icemoon_crashed_holemaker.dmm @@ -887,7 +887,7 @@ /area/ruin/unpowered/crashed_holemaker) "oC" = ( /obj/effect/decal/cleanable/dirt/dust, -/obj/item/kitchen/knife, +/obj/item/melee/knife/kitchen, /turf/open/floor/wood{ icon_state = "wood-broken7" }, diff --git a/_maps/RandomRuins/IceRuins/icemoon_underground_abandoned_village.dmm b/_maps/RandomRuins/IceRuins/icemoon_underground_abandoned_village.dmm index 06d6a8e9fd27..d26f9458a943 100644 --- a/_maps/RandomRuins/IceRuins/icemoon_underground_abandoned_village.dmm +++ b/_maps/RandomRuins/IceRuins/icemoon_underground_abandoned_village.dmm @@ -332,7 +332,7 @@ /obj/item/restraints/legcuffs/beartrap, /obj/item/reagent_containers/glass/bottle/venom, /obj/item/reagent_containers/glass/bottle/curare, -/obj/item/kitchen/knife/combat/survival, +/obj/item/melee/knife/survival, /obj/effect/decal/cleanable/dirt, /obj/item/reagent_containers/food/snacks/meat/slab/human, /obj/item/reagent_containers/food/snacks/meat/slab/human, @@ -384,7 +384,7 @@ /obj/effect/decal/cleanable/blood/gibs/torso, /obj/structure/safe, /obj/item/ammo_box/a12g/slug, -/obj/item/kitchen/knife/combat, +/obj/item/melee/knife/combat, /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, /turf/open/floor/wood, diff --git a/_maps/RandomRuins/IceRuins/icemoon_underground_brazillianlab.dmm b/_maps/RandomRuins/IceRuins/icemoon_underground_brazillianlab.dmm index 4954a9a5aaf4..d560e98b2f20 100644 --- a/_maps/RandomRuins/IceRuins/icemoon_underground_brazillianlab.dmm +++ b/_maps/RandomRuins/IceRuins/icemoon_underground_brazillianlab.dmm @@ -367,23 +367,6 @@ initial_gas_mix = "ICEMOON_ATMOS" }, /area/ruin/unpowered) -"sf" = ( -/obj/structure/table/wood, -/obj/item/nullrod{ - block_chance = 50; - desc = "This massive chart appears to be the layout of a SolGov outpost. It's covered in marks, scribbles in a language you don't recognize, and several stains. It's unusually sturdy."; - icon_state = "blueprints"; - item_state = "blueprints"; - lefthand_file = 'icons/mob/inhands/items_lefthand.dmi'; - name = "facility blueprints"; - pixel_y = 10; - righthand_file = 'icons/mob/inhands/items_righthand.dmi'; - w_class = 5 - }, -/turf/open/floor/wood{ - initial_gas_mix = "ICEMOON_ATMOS" - }, -/area/ruin/unpowered) "si" = ( /obj/structure/flora/rock/jungle, /obj/structure/flora/grass/jungle/b, @@ -1248,13 +1231,6 @@ }, /turf/open/floor/plating/snowed/smoothed/icemoon, /area/ruin/unpowered) -"Zs" = ( -/obj/structure/table/wood, -/obj/item/banhammer, -/turf/open/floor/wood{ - initial_gas_mix = "ICEMOON_ATMOS" - }, -/area/ruin/unpowered) (1,1,1) = {" aW @@ -2252,7 +2228,7 @@ Hb aW WH jy -Zs +ib WH WH WH @@ -2284,7 +2260,7 @@ Hb aW Br ib -sf +ib WH WH fB diff --git a/_maps/RandomRuins/JungleRuins/jungle_paradise.dmm b/_maps/RandomRuins/JungleRuins/jungle_paradise.dmm index 86e2ac4e5477..39d17f372342 100644 --- a/_maps/RandomRuins/JungleRuins/jungle_paradise.dmm +++ b/_maps/RandomRuins/JungleRuins/jungle_paradise.dmm @@ -798,7 +798,7 @@ /area/ruin/jungle/paradise/construction) "eY" = ( /obj/structure/table/reinforced, -/obj/item/kitchen/knife/butcher, +/obj/item/melee/knife/butcher, /obj/item/clothing/gloves/butchering, /turf/open/floor/pod/dark, /area/overmap_encounter/planetoid/cave/explored) diff --git a/_maps/RandomRuins/JungleRuins/jungle_syndicate.dmm b/_maps/RandomRuins/JungleRuins/jungle_syndicate.dmm index 3d00a493af05..2eba13537777 100644 --- a/_maps/RandomRuins/JungleRuins/jungle_syndicate.dmm +++ b/_maps/RandomRuins/JungleRuins/jungle_syndicate.dmm @@ -308,7 +308,7 @@ /turf/open/floor/plating/rust, /area/ruin/jungle/syndifort/jerry) "ik" = ( -/obj/item/kitchen/knife/combat{ +/obj/item/melee/knife/combat{ name = "bushcutter"; force = 18 }, @@ -627,7 +627,7 @@ /area/ruin/jungle/syndifort/jerry) "ud" = ( /obj/structure/table, -/obj/item/kitchen/knife/combat{ +/obj/item/melee/knife/combat{ name = "bushcutter"; force = 18 }, diff --git a/_maps/RandomRuins/LavaRuins/lavaland_abandonedlisteningpost.dmm b/_maps/RandomRuins/LavaRuins/lavaland_abandonedlisteningpost.dmm index 444f4ec52509..483580cf70dd 100644 --- a/_maps/RandomRuins/LavaRuins/lavaland_abandonedlisteningpost.dmm +++ b/_maps/RandomRuins/LavaRuins/lavaland_abandonedlisteningpost.dmm @@ -1324,7 +1324,7 @@ /obj/item/cutting_board{ anchored = 1 }, -/obj/item/kitchen/knife, +/obj/item/melee/knife/kitchen, /obj/effect/turf_decal/siding/thinplating/dark, /turf/open/floor/plasteel/patterned/cargo_one, /area/ruin/unpowered/listening_post/canteen) diff --git a/_maps/RandomRuins/LavaRuins/lavaland_crashed_starwalker.dmm b/_maps/RandomRuins/LavaRuins/lavaland_crashed_starwalker.dmm index 935a852fac76..f9be78af5b89 100644 --- a/_maps/RandomRuins/LavaRuins/lavaland_crashed_starwalker.dmm +++ b/_maps/RandomRuins/LavaRuins/lavaland_crashed_starwalker.dmm @@ -637,7 +637,7 @@ /obj/structure/table, /obj/effect/decal/cleanable/dirt, /obj/machinery/light/small/directional/east, -/obj/item/kitchen/knife{ +/obj/item/melee/knife/kitchen{ pixel_x = 7; pixel_y = 10 }, diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_biodome_winter.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_biodome_winter.dmm index 739e427fc008..a53bebe1ff01 100644 --- a/_maps/RandomRuins/LavaRuins/lavaland_surface_biodome_winter.dmm +++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_biodome_winter.dmm @@ -1072,7 +1072,7 @@ "qj" = ( /obj/effect/turf_decal/corner/opaque/solgovblue/diagonal, /obj/structure/table/wood, -/obj/item/kitchen/knife, +/obj/item/melee/knife/kitchen, /turf/open/floor/plasteel/white, /area/ruin/unpowered/winter_biodome/living_quarters) "qr" = ( diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_buried_shrine.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_buried_shrine.dmm index 9937cbeb46bb..17094a2d2bff 100644 --- a/_maps/RandomRuins/LavaRuins/lavaland_surface_buried_shrine.dmm +++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_buried_shrine.dmm @@ -1807,7 +1807,7 @@ /area/ruin/unpowered/buried_shrine) "UF" = ( /obj/structure/stone_tile/block, -/obj/item/claymore/bone{ +/obj/item/melee/sword/bone{ pixel_x = 8; pixel_y = 21 }, @@ -1823,7 +1823,7 @@ /area/ruin/unpowered/buried_shrine) "VG" = ( /obj/structure/table/wood, -/obj/item/kitchen/knife/combat/bone, +/obj/item/melee/knife/bone, /turf/open/floor/plating/asteroid/basalt/lava_land_surface, /area/ruin/unpowered/buried_shrine) "Wd" = ( diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_elephant_graveyard.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_elephant_graveyard.dmm index 9babc1631c8f..911b6cf6f4e5 100644 --- a/_maps/RandomRuins/LavaRuins/lavaland_surface_elephant_graveyard.dmm +++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_elephant_graveyard.dmm @@ -254,7 +254,7 @@ /turf/open/floor/plating/asteroid/basalt/wasteland, /area/ruin/unpowered/elephant_graveyard) "bk" = ( -/obj/item/kitchen/knife/combat/bone, +/obj/item/melee/knife/bone, /obj/item/organ/tongue, /obj/effect/decal/cleanable/blood/old, /turf/open/floor/plating/asteroid/basalt/wasteland, diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_lava_canyon.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_lava_canyon.dmm index 3efc7429d803..a5547c39e8fd 100644 --- a/_maps/RandomRuins/LavaRuins/lavaland_surface_lava_canyon.dmm +++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_lava_canyon.dmm @@ -345,7 +345,7 @@ /obj/effect/mob_spawn/human/corpse{ mob_species = /datum/species/lizard/ashwalker }, -/obj/item/spear/bonespear{ +/obj/item/melee/spear/bone{ pixel_x = 10; pixel_y = -2 }, @@ -611,7 +611,7 @@ /turf/open/floor/plating/asteroid/basalt/lava_land_surface/lit, /area/overmap_encounter/planetoid/lava/explored) "pX" = ( -/obj/item/claymore/bone{ +/obj/item/melee/sword/bone{ pixel_x = -12; pixel_y = 11 }, @@ -1101,7 +1101,7 @@ pixel_y = -11; pixel_x = -7 }, -/obj/item/kitchen/knife/combat/bone{ +/obj/item/melee/knife/bone{ pixel_x = 10; pixel_y = -10 }, @@ -1474,7 +1474,7 @@ /turf/closed/mineral/random/volcanic, /area/overmap_encounter/planetoid/cave/explored) "PP" = ( -/obj/item/kitchen/knife/combat/bone{ +/obj/item/melee/knife/bone{ pixel_x = -2; pixel_y = 4 }, @@ -1706,7 +1706,7 @@ pixel_x = -2; pixel_y = 1 }, -/obj/item/spear/bonespear{ +/obj/item/melee/spear/bone{ pixel_x = 8; pixel_y = 14 }, diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_wrecked_factory.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_wrecked_factory.dmm index 2c84843cf776..c4a3a0397508 100644 --- a/_maps/RandomRuins/LavaRuins/lavaland_surface_wrecked_factory.dmm +++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_wrecked_factory.dmm @@ -1098,7 +1098,7 @@ /obj/effect/decal/cleanable/blood{ icon_state = "drip1" }, -/obj/item/spear, +/obj/item/melee/spear, /obj/item/bodypart/l_arm, /turf/open/floor/plasteel/dark, /area/ruin/lavaland/factory/dorms) @@ -2691,8 +2691,8 @@ /turf/open/floor/carpet/blue, /area/ruin/lavaland/factory/manager_office) "zl" = ( -/obj/item/kitchen/knife/combat/survival, -/obj/item/kitchen/knife/combat/survival, +/obj/item/melee/knife/survival, +/obj/item/melee/knife/survival, /obj/structure/closet/crate/secure/gear, /turf/open/floor/plasteel/mono, /area/ruin/lavaland/factory/warehouse) @@ -2982,7 +2982,7 @@ dir = 1 }, /obj/machinery/light/directional/west, -/obj/item/kitchen/knife/hunting, +/obj/item/melee/knife/hunting, /obj/item/clothing/suit/hooded/cloak/goliath, /obj/effect/spawner/lootdrop/maintenance, /turf/open/floor/plasteel/white, @@ -3828,7 +3828,7 @@ /obj/structure/cable/yellow{ icon_state = "4-8" }, -/obj/item/kitchen/knife/shiv, +/obj/item/melee/knife/shiv, /turf/open/floor/plasteel/white, /area/ruin/lavaland/factory/adminstrative) "LX" = ( @@ -4302,7 +4302,7 @@ "QM" = ( /obj/structure/table/wood, /obj/item/cutting_board, -/obj/item/kitchen/knife, +/obj/item/melee/knife/kitchen, /turf/open/floor/wood, /area/ruin/lavaland/factory/adminstrative) "QR" = ( diff --git a/_maps/RandomRuins/ReebeRuins/reebe_arena.dmm b/_maps/RandomRuins/ReebeRuins/reebe_arena.dmm index 448690c0e77a..6e7e5131b640 100644 --- a/_maps/RandomRuins/ReebeRuins/reebe_arena.dmm +++ b/_maps/RandomRuins/ReebeRuins/reebe_arena.dmm @@ -45,10 +45,6 @@ "pm" = ( /turf/open/floor/bronze, /area/ruin/reebe) -"pW" = ( -/obj/item/nullrod/spear, -/turf/open/floor/bronze, -/area/ruin/reebe) "qj" = ( /mob/living/simple_animal/hostile/asteroid/goliath/beast/ancient/crystal, /obj/structure/fans/tiny/invisible, @@ -56,7 +52,6 @@ /area/ruin/reebe) "qC" = ( /obj/structure/chair/comfy/shuttle/bronze, -/obj/item/nullrod/spear, /turf/open/floor/bronze, /area/ruin/reebe) "vz" = ( @@ -91,7 +86,6 @@ /area/ruin/reebe) "Ag" = ( /obj/structure/table/bronze, -/obj/item/nullrod/spear, /turf/open/floor/bronze, /area/ruin/reebe) "AT" = ( @@ -220,17 +214,13 @@ /turf/open/floor/bronze, /area/ruin/reebe) "Ux" = ( -/obj/item/spear, +/obj/item/melee/spear, /obj/item/grenade/c4, /turf/open/floor/bronze, /area/ruin/reebe) "UU" = ( /turf/open/chasm/reebe_void, /area/ruin/reebe) -"VT" = ( -/obj/structure/table/bronze, -/turf/open/floor/bronze, -/area/ruin/reebe) "Xr" = ( /obj/machinery/door/airlock/bronze/seethru{ name = "Summoning Chamber" @@ -2127,7 +2117,7 @@ Cj Cj Fz pm -VT +Ag Ib Cj FD @@ -2186,7 +2176,7 @@ IC IC Cj Cj -VT +Ag Fz pm pm @@ -2251,7 +2241,7 @@ la la pm pm -pW +pm pm xy pm @@ -2505,7 +2495,7 @@ pm pm pm Cj -VT +Ag pm pm pm @@ -2559,7 +2549,7 @@ pm Cj pm pm -pW +pm JC pm JC @@ -2567,7 +2557,7 @@ pm JC pm De -VT +Ag pm pm pm @@ -2815,7 +2805,7 @@ pm JC pm De -VT +Ag pm pm pm @@ -2877,7 +2867,7 @@ pm pm pm Cj -VT +Ag pm pm pm @@ -2996,11 +2986,11 @@ JC pm pm Rc -VT +Ag Cj Ag -VT -VT +Ag +Ag pm pm pm @@ -3053,7 +3043,7 @@ IC IC IC De -VT +Ag pm pm pm @@ -3127,7 +3117,7 @@ pm pm pm pm -VT +Ag Cj pm pm @@ -3178,7 +3168,7 @@ IC IC Cj Cj -VT +Ag hO pm hO @@ -3188,7 +3178,7 @@ pm pm pm pm -VT +Ag Cj Cj pm @@ -3242,14 +3232,14 @@ IC Cj Cj Pn -VT +Ag Pn -VT +Ag Cj -VT +Ag pm pm -VT +Ag Cj Cj pm diff --git a/_maps/RandomRuins/ReebeRuins/reebe_decayed_sm.dmm b/_maps/RandomRuins/ReebeRuins/reebe_decayed_sm.dmm index c768b54fe0ab..e1b0f36f687c 100644 --- a/_maps/RandomRuins/ReebeRuins/reebe_decayed_sm.dmm +++ b/_maps/RandomRuins/ReebeRuins/reebe_decayed_sm.dmm @@ -7,7 +7,6 @@ /turf/open/floor/bronze, /area/ruin/reebe) "d" = ( -/obj/item/nullrod/spear, /turf/open/floor/bronze, /area/ruin/reebe) "e" = ( @@ -57,9 +56,6 @@ "O" = ( /turf/closed/wall/mineral/bronze, /area/ruin/reebe) -"Y" = ( -/turf/open/floor/bronze, -/area/ruin/reebe) "Z" = ( /obj/effect/decal/remains/human, /turf/open/floor/bronze, @@ -78,8 +74,8 @@ a a "} (2,1,1) = {" -Y -Y +d +d C C x @@ -102,19 +98,19 @@ a o "} (4,1,1) = {" -Y +d O e C C O -Y +d O -Y +d E "} (5,1,1) = {" -Y +d B e C @@ -122,23 +118,23 @@ M v Z v -Y +d a "} (6,1,1) = {" -Y +d O C e e O -Y +d O -Y +d a "} (7,1,1) = {" -Y +d C y C @@ -154,19 +150,19 @@ E C C C -Y -Y -Y +d +d +d E a a "} (9,1,1) = {" -Y -Y +d +d E E -Y +d E a a diff --git a/_maps/RandomRuins/SandRuins/whitesands_surface_camp_combination.dmm b/_maps/RandomRuins/SandRuins/whitesands_surface_camp_combination.dmm index 485303fb66c3..d6238dcf237b 100644 --- a/_maps/RandomRuins/SandRuins/whitesands_surface_camp_combination.dmm +++ b/_maps/RandomRuins/SandRuins/whitesands_surface_camp_combination.dmm @@ -223,7 +223,7 @@ /area/overmap_encounter/planetoid/sand/explored) "iL" = ( /obj/structure/statue/snow/snowman, -/obj/item/kitchen/knife/shiv/carrot, +/obj/item/melee/knife/shiv/carrot, /turf/open/floor/plating/asteroid/snow/lit/whitesands, /area/overmap_encounter/planetoid/sand/explored) "iQ" = ( @@ -652,7 +652,7 @@ /turf/open/floor/wood, /area/ruin) "yZ" = ( -/obj/item/spear, +/obj/item/melee/spear, /obj/effect/mob_spawn/human/corpse/damaged/whitesands/survivor, /turf/open/floor/plating/asteroid/whitesands/dried{ light_range = 2 diff --git a/_maps/RandomRuins/SpaceRuins/spacemall.dmm b/_maps/RandomRuins/SpaceRuins/spacemall.dmm index eb48bcae1626..251b40fb4443 100644 --- a/_maps/RandomRuins/SpaceRuins/spacemall.dmm +++ b/_maps/RandomRuins/SpaceRuins/spacemall.dmm @@ -1106,7 +1106,7 @@ "el" = ( /obj/structure/table/glass, /obj/item/toy/plush/lizardplushie, -/obj/item/kitchen/knife, +/obj/item/melee/knife/kitchen, /turf/open/floor/light, /area/ruin/space/has_grav/spacemall/shop2) "eo" = ( @@ -2138,7 +2138,7 @@ /area/ruin/space/has_grav/spacemall) "ip" = ( /obj/effect/turf_decal/corner/transparent/black/diagonal, -/obj/item/kitchen/knife, +/obj/item/melee/knife/kitchen, /obj/structure/table, /turf/open/floor/plasteel/white, /area/ruin/space/has_grav/spacemall/dorms) @@ -13759,7 +13759,7 @@ /obj/effect/turf_decal/siding/wideplating/dark{ dir = 1 }, -/obj/item/kitchen/knife/plastic{ +/obj/item/melee/knife/plastic{ pixel_x = 10 }, /obj/structure/disposalpipe/segment{ diff --git a/_maps/RandomRuins/WasteRuins/wasteplanet_pandora.dmm b/_maps/RandomRuins/WasteRuins/wasteplanet_pandora.dmm index f422e4ef1eb8..934b648c0bd6 100644 --- a/_maps/RandomRuins/WasteRuins/wasteplanet_pandora.dmm +++ b/_maps/RandomRuins/WasteRuins/wasteplanet_pandora.dmm @@ -70,7 +70,7 @@ /area/ruin/wasteplanet) "df" = ( /obj/structure/table/wood, -/obj/item/kitchen/knife/combat/bone, +/obj/item/melee/knife/bone, /obj/item/flashlight/flare/torch, /turf/open/floor/wood/waste, /area/ruin/wasteplanet) @@ -107,7 +107,7 @@ /area/ruin/wasteplanet) "ge" = ( /obj/structure/table/wood, -/obj/item/kitchen/knife/combat/bone{ +/obj/item/melee/knife/bone{ pixel_x = -20 }, /obj/item/reagent_containers/food/snacks/salad/edensalad, @@ -120,7 +120,7 @@ "gm" = ( /obj/structure/closet/cabinet, /obj/item/clothing/suit/hooded/cloak/bone, -/obj/item/claymore/bone, +/obj/item/melee/sword/bone, /turf/open/floor/wood/waste, /area/ruin/wasteplanet) "gr" = ( @@ -423,7 +423,7 @@ /area/ruin/wasteplanet) "qo" = ( /obj/structure/closet/cabinet, -/obj/item/spear/bonespear, +/obj/item/melee/spear/bone, /obj/item/clothing/suit/armor/witchhunter, /obj/item/reagent_containers/food/snacks/grown/berries/death, /turf/open/floor/wood/waste, @@ -491,7 +491,7 @@ /area/ruin/wasteplanet) "sV" = ( /obj/structure/closet/cabinet, -/obj/item/claymore/bone, +/obj/item/melee/sword/bone, /obj/item/clothing/suit/armor/witchhunter, /turf/open/floor/wood/waste, /area/ruin/wasteplanet) @@ -578,7 +578,7 @@ /area/ruin/wasteplanet) "xk" = ( /obj/structure/table/wood, -/obj/item/spear/bonespear, +/obj/item/melee/spear/bone, /turf/open/floor/wood/waste, /area/ruin/wasteplanet) "xu" = ( @@ -813,7 +813,7 @@ /turf/open/indestructible/hierophant/two/waste, /area/ruin/wasteplanet) "FP" = ( -/obj/item/kitchen/knife/combat/bone{ +/obj/item/melee/knife/bone{ pixel_x = 15 }, /turf/open/floor/wood/waste, @@ -960,7 +960,7 @@ "Li" = ( /obj/structure/closet/cabinet, /obj/item/clothing/suit/armor/bone, -/obj/item/fireaxe/boneaxe, +/obj/item/melee/axe/bone, /turf/open/floor/wood/waste, /area/ruin/wasteplanet) "Lj" = ( @@ -1233,7 +1233,7 @@ /area/ruin/wasteplanet) "RT" = ( /obj/structure/table/wood, -/obj/item/spear/bonespear, +/obj/item/melee/spear/bone, /obj/item/stack/sheet/sinew, /turf/open/floor/wood/waste, /area/ruin/wasteplanet) diff --git a/_maps/map_files/generic/CentCom.dmm b/_maps/map_files/generic/CentCom.dmm index fdfae529865d..e25bceb1dd44 100644 --- a/_maps/map_files/generic/CentCom.dmm +++ b/_maps/map_files/generic/CentCom.dmm @@ -1686,7 +1686,7 @@ /area/centcom/evac) "atW" = ( /obj/structure/rack, -/obj/item/nullrod/claymore{ +/obj/item/melee/sword/claymore{ damtype = "stamina"; force = 30 }, @@ -1908,7 +1908,7 @@ /area/wizard_station) "avt" = ( /obj/structure/rack, -/obj/item/nullrod/claymore/katana{ +/obj/item/melee/sword/katana{ damtype = "stamina"; force = 30 }, @@ -2467,7 +2467,7 @@ /turf/open/floor/plasteel, /area/wizard_station) "azO" = ( -/obj/item/kitchen/knife/ritual, +/obj/item/melee/knife/kitchen, /turf/open/floor/plasteel, /area/wizard_station) "azP" = ( @@ -3309,7 +3309,6 @@ /area/tdome/tdomeobserve) "aHq" = ( /obj/structure/closet/cardboard, -/obj/item/banhammer, /obj/effect/turf_decal/industrial/warning, /turf/open/floor/plasteel, /area/wizard_station) @@ -4051,7 +4050,7 @@ "aMx" = ( /obj/machinery/light/directional/east, /obj/structure/rack, -/obj/item/nullrod/claymore/saber/red{ +/obj/item/melee/sword/claymore{ damtype = "stamina"; force = 30 }, @@ -4979,7 +4978,7 @@ "aRS" = ( /obj/machinery/light/directional/west, /obj/structure/rack, -/obj/item/nullrod/claymore/glowing{ +/obj/item/melee/sword/claymore{ damtype = "stamina"; force = 30 }, @@ -5284,15 +5283,6 @@ /obj/item/reagent_containers/glass/beaker, /turf/open/floor/plasteel, /area/centcom/holding) -"aUh" = ( -/obj/machinery/light/directional/east, -/obj/structure/rack, -/obj/item/nullrod/claymore/darkblade{ - damtype = "stamina"; - force = 30 - }, -/turf/open/floor/wood, -/area/centcom/holding) "aUj" = ( /obj/item/coin/antagtoken, /obj/effect/turf_decal/industrial/outline/yellow, @@ -5493,7 +5483,7 @@ /area/wizard_station) "aVF" = ( /obj/structure/rack, -/obj/item/nullrod/scythe/vibro{ +/obj/item/scythe{ damtype = "stamina"; force = 30 }, @@ -5963,15 +5953,6 @@ /obj/effect/turf_decal/industrial/outline/yellow, /turf/open/floor/plasteel, /area/centcom/control) -"aYV" = ( -/obj/machinery/light/directional/west, -/obj/structure/rack, -/obj/item/nullrod/claymore/saber{ - damtype = "stamina"; - force = 30 - }, -/turf/open/floor/wood, -/area/centcom/holding) "aYW" = ( /obj/effect/landmark/thunderdome/one, /obj/effect/turf_decal/industrial/warning{ @@ -10982,7 +10963,7 @@ /obj/item/reagent_containers/food/condiment/peppermill{ pixel_x = -8 }, -/obj/item/kitchen/knife, +/obj/item/melee/knife/kitchen, /obj/effect/turf_decal/corner/transparent/neutral{ dir = 1 }, @@ -15510,7 +15491,7 @@ pixel_x = 7; pixel_y = -2 }, -/obj/item/kitchen/knife{ +/obj/item/melee/knife/kitchen{ pixel_y = -5; pixel_x = -5 }, @@ -43310,7 +43291,7 @@ aCT aCT aNT avt -aYV +aRS aOU aOU aRS @@ -45883,7 +45864,7 @@ avt aMx aQg aTb -aUh +aMx atW aWO aaa diff --git a/_maps/outpost/nanotrasen_asteroid.dmm b/_maps/outpost/nanotrasen_asteroid.dmm index 08f1322e7c60..cc6986e98b8d 100644 --- a/_maps/outpost/nanotrasen_asteroid.dmm +++ b/_maps/outpost/nanotrasen_asteroid.dmm @@ -1774,7 +1774,7 @@ /area/outpost/crew/cryo) "gF" = ( /obj/structure/table/reinforced, -/obj/item/kitchen/knife{ +/obj/item/melee/knife/kitchen{ pixel_y = 6; pixel_x = 9 }, @@ -11369,7 +11369,7 @@ "NP" = ( /obj/effect/turf_decal/siding/wood, /obj/structure/table/reinforced, -/obj/item/kitchen/knife{ +/obj/item/melee/knife/kitchen{ pixel_x = -6; pixel_y = 2 }, @@ -13063,7 +13063,7 @@ pixel_x = -4; pixel_y = 6 }, -/obj/item/kitchen/knife{ +/obj/item/melee/knife/kitchen{ pixel_y = 6; pixel_x = 9 }, diff --git a/_maps/shuttles/independent/independent_beluga.dmm b/_maps/shuttles/independent/independent_beluga.dmm index c8ef49a3b35e..6158b206d67c 100644 --- a/_maps/shuttles/independent/independent_beluga.dmm +++ b/_maps/shuttles/independent/independent_beluga.dmm @@ -2742,7 +2742,7 @@ pixel_y = 1 }, /obj/structure/table, -/obj/item/kitchen/knife{ +/obj/item/melee/knife/kitchen{ pixel_x = 11; pixel_y = 7 }, diff --git a/_maps/shuttles/independent/independent_dwayne.dmm b/_maps/shuttles/independent/independent_dwayne.dmm index 533709f94692..a0383e507ec1 100644 --- a/_maps/shuttles/independent/independent_dwayne.dmm +++ b/_maps/shuttles/independent/independent_dwayne.dmm @@ -1477,7 +1477,7 @@ /obj/item/cutting_board{ anchored = 1 }, -/obj/item/kitchen/knife, +/obj/item/melee/knife/kitchen, /obj/machinery/power/apc/auto_name/directional/west, /obj/structure/cable/cyan{ icon_state = "0-5" diff --git a/_maps/shuttles/independent/independent_junker.dmm b/_maps/shuttles/independent/independent_junker.dmm index 136e6e6e17fb..7819d04ec1c2 100644 --- a/_maps/shuttles/independent/independent_junker.dmm +++ b/_maps/shuttles/independent/independent_junker.dmm @@ -91,7 +91,7 @@ pixel_x = 4; pixel_y = 9 }, -/obj/item/kitchen/knife{ +/obj/item/melee/knife/kitchen{ pixel_y = -3; pixel_x = 10 }, @@ -1790,7 +1790,7 @@ /obj/structure/cable{ icon_state = "5-10" }, -/obj/item/kitchen/knife{ +/obj/item/melee/knife/kitchen{ pixel_y = 1; pixel_x = 8 }, diff --git a/_maps/shuttles/independent/independent_kilo.dmm b/_maps/shuttles/independent/independent_kilo.dmm index 4577678b7f21..0dad29cb9f9b 100644 --- a/_maps/shuttles/independent/independent_kilo.dmm +++ b/_maps/shuttles/independent/independent_kilo.dmm @@ -1765,7 +1765,7 @@ /obj/item/cutting_board{ anchored = 1 }, -/obj/item/kitchen/knife, +/obj/item/melee/knife/kitchen, /obj/effect/turf_decal/corner/transparent/beige/full, /obj/effect/turf_decal/corner/transparent/brown/diagonal, /turf/open/floor/plasteel, diff --git a/_maps/shuttles/independent/independent_lagoon.dmm b/_maps/shuttles/independent/independent_lagoon.dmm index 248ee9240efd..16f3ad2cbfa1 100644 --- a/_maps/shuttles/independent/independent_lagoon.dmm +++ b/_maps/shuttles/independent/independent_lagoon.dmm @@ -1361,7 +1361,7 @@ "iR" = ( /obj/structure/table/reinforced, /obj/item/storage/bag/tray, -/obj/item/kitchen/knife, +/obj/item/melee/knife/kitchen, /obj/structure/cable{ icon_state = "2-4" }, @@ -4751,7 +4751,7 @@ /obj/structure/table/wood, /obj/item/paper_bin, /obj/item/pen/fountain, -/obj/item/kitchen/knife/letter_opener, +/obj/item/melee/knife/letter_opener, /obj/item/pen, /turf/open/floor/carpet/black, /area/ship/crew/library) @@ -5617,7 +5617,6 @@ /area/ship/hallway/starboard) "Mz" = ( /obj/structure/table/wood, -/obj/item/nullrod, /turf/open/floor/wood, /area/ship/crew/chapel) "MD" = ( @@ -6724,7 +6723,7 @@ pixel_x = 4; pixel_y = 9 }, -/obj/item/melee/skateboard/hoverboard{ +/obj/item/skateboard/hoverboard{ pixel_x = -4 }, /turf/open/floor/eighties, diff --git a/_maps/shuttles/independent/independent_mudskipper.dmm b/_maps/shuttles/independent/independent_mudskipper.dmm index 64275521c4e0..ac2be582662a 100644 --- a/_maps/shuttles/independent/independent_mudskipper.dmm +++ b/_maps/shuttles/independent/independent_mudskipper.dmm @@ -2261,8 +2261,8 @@ /obj/item/gps/mining{ gpstag = "SCAV1" }, -/obj/item/kitchen/knife/combat/survival, -/obj/item/kitchen/knife/combat/survival, +/obj/item/melee/knife/survival, +/obj/item/melee/knife/survival, /obj/item/flashlight/seclite, /obj/item/flashlight/seclite, /turf/open/floor/plasteel/patterned/grid, diff --git a/_maps/shuttles/independent/independent_rigger.dmm b/_maps/shuttles/independent/independent_rigger.dmm index 15265d30016b..da493fcdf548 100644 --- a/_maps/shuttles/independent/independent_rigger.dmm +++ b/_maps/shuttles/independent/independent_rigger.dmm @@ -1179,7 +1179,7 @@ "pv" = ( /obj/effect/turf_decal/corner/opaque/yellow/diagonal, /obj/structure/table, -/obj/item/kitchen/knife, +/obj/item/melee/knife/kitchen, /turf/open/floor/plasteel/white, /area/ship/crew/canteen) "pD" = ( diff --git a/_maps/shuttles/independent/independent_schmiedeberg.dmm b/_maps/shuttles/independent/independent_schmiedeberg.dmm index ce7b407a4731..891e3bd2ce9a 100644 --- a/_maps/shuttles/independent/independent_schmiedeberg.dmm +++ b/_maps/shuttles/independent/independent_schmiedeberg.dmm @@ -69,7 +69,7 @@ /obj/structure/table, /obj/item/storage/bag/tray, /obj/item/reagent_containers/food/condiment/enzyme, -/obj/item/kitchen/knife, +/obj/item/melee/knife/kitchen, /obj/item/reagent_containers/food/condiment/saltshaker{ pixel_x = -5; pixel_y = 10 @@ -2063,8 +2063,8 @@ /obj/item/flashlight/seclite, /obj/item/flashlight/seclite, /obj/item/flashlight/seclite, -/obj/item/kitchen/knife/combat/survival, -/obj/item/kitchen/knife/combat/survival, +/obj/item/melee/knife/survival, +/obj/item/melee/knife/survival, /obj/structure/sign/poster/retro/lasergun_new{ pixel_x = -32 }, diff --git a/_maps/shuttles/independent/independent_shetland.dmm b/_maps/shuttles/independent/independent_shetland.dmm index 4fb22e45c7c2..256e9bc75c88 100644 --- a/_maps/shuttles/independent/independent_shetland.dmm +++ b/_maps/shuttles/independent/independent_shetland.dmm @@ -84,7 +84,7 @@ "aR" = ( /obj/effect/turf_decal/corner/opaque/neutral/half, /obj/item/cutting_board, -/obj/item/kitchen/knife, +/obj/item/melee/knife/kitchen, /obj/structure/table/reinforced, /turf/open/floor/plasteel/dark, /area/ship/crew/canteen) @@ -1010,7 +1010,7 @@ /obj/effect/turf_decal/corner/transparent/beige/full, /obj/effect/turf_decal/corner/transparent/brown/diagonal, /obj/item/toy/redbutton, -/obj/item/kitchen/knife/plastic, +/obj/item/melee/knife/plastic, /obj/item/kitchen/fork/plastic{ pixel_x = 5 }, @@ -1550,7 +1550,7 @@ /obj/item/kitchen/fork/plastic{ pixel_x = 5 }, -/obj/item/kitchen/knife/plastic, +/obj/item/melee/knife/plastic, /turf/open/floor/plasteel, /area/ship/crew/canteen) "nt" = ( @@ -5973,7 +5973,7 @@ /obj/item/kitchen/fork/plastic{ pixel_x = 5 }, -/obj/item/kitchen/knife/plastic, +/obj/item/melee/knife/plastic, /turf/open/floor/plasteel, /area/ship/crew/canteen) "Yp" = ( diff --git a/_maps/shuttles/independent/independent_sunskipper.dmm b/_maps/shuttles/independent/independent_sunskipper.dmm index de92179a11f7..a5fcf740be59 100644 --- a/_maps/shuttles/independent/independent_sunskipper.dmm +++ b/_maps/shuttles/independent/independent_sunskipper.dmm @@ -441,7 +441,7 @@ pixel_y = 5; anchored = 1 }, -/obj/item/kitchen/knife{ +/obj/item/melee/knife/kitchen{ pixel_x = -11; pixel_y = 9 }, @@ -873,8 +873,8 @@ }, /obj/item/pickaxe, /obj/item/pickaxe, -/obj/item/kitchen/knife/hunting, -/obj/item/kitchen/knife/hunting, +/obj/item/melee/knife/hunting, +/obj/item/melee/knife/hunting, /obj/item/clothing/suit/hazardvest, /obj/item/clothing/suit/hazardvest, /obj/item/clothing/head/hardhat/mining, diff --git a/_maps/shuttles/independent/independent_tranquility.dmm b/_maps/shuttles/independent/independent_tranquility.dmm index d526a2a79b85..6a26f5e7b264 100644 --- a/_maps/shuttles/independent/independent_tranquility.dmm +++ b/_maps/shuttles/independent/independent_tranquility.dmm @@ -1687,7 +1687,7 @@ /obj/effect/turf_decal/corner/transparent/bar, /obj/structure/table/reinforced, /obj/machinery/light/directional/south, -/obj/item/kitchen/knife/butcher{ +/obj/item/melee/knife/butcher{ pixel_x = -6; pixel_y = 7 }, diff --git a/_maps/shuttles/inteq/inteq_colossus.dmm b/_maps/shuttles/inteq/inteq_colossus.dmm index e1cad73bdb2e..f19c734f9d83 100644 --- a/_maps/shuttles/inteq/inteq_colossus.dmm +++ b/_maps/shuttles/inteq/inteq_colossus.dmm @@ -4338,10 +4338,10 @@ /obj/item/reagent_containers/spray/pepper, /obj/item/reagent_containers/spray/pepper, /obj/item/reagent_containers/spray/pepper, -/obj/item/kitchen/knife/combat/survival, -/obj/item/kitchen/knife/combat/survival, -/obj/item/kitchen/knife/combat/survival, -/obj/item/kitchen/knife/combat/survival, +/obj/item/melee/knife/survival, +/obj/item/melee/knife/survival, +/obj/item/melee/knife/survival, +/obj/item/melee/knife/survival, /turf/open/floor/plasteel/tech/grid, /area/ship/security/armory) "WG" = ( diff --git a/_maps/shuttles/inteq/inteq_talos.dmm b/_maps/shuttles/inteq/inteq_talos.dmm index 906f803d7c9a..195852c9fd5c 100644 --- a/_maps/shuttles/inteq/inteq_talos.dmm +++ b/_maps/shuttles/inteq/inteq_talos.dmm @@ -5610,9 +5610,9 @@ pixel_x = -1; pixel_y = 3 }, -/obj/item/kitchen/knife/combat/survival, -/obj/item/kitchen/knife/combat/survival, -/obj/item/kitchen/knife/combat/survival, +/obj/item/melee/knife/survival, +/obj/item/melee/knife/survival, +/obj/item/melee/knife/survival, /turf/open/floor/plasteel/tech/grid, /area/ship/security/armory) "JT" = ( diff --git a/_maps/shuttles/inteq/inteq_valor.dmm b/_maps/shuttles/inteq/inteq_valor.dmm index 7cb5896b71ad..737e424096fd 100644 --- a/_maps/shuttles/inteq/inteq_valor.dmm +++ b/_maps/shuttles/inteq/inteq_valor.dmm @@ -500,8 +500,8 @@ /obj/item/megaphone/sec, /obj/item/clothing/suit/armor/vest, /obj/item/clothing/suit/armor/vest, -/obj/item/kitchen/knife/combat/survival, -/obj/item/kitchen/knife/combat/survival, +/obj/item/melee/knife/survival, +/obj/item/melee/knife/survival, /obj/machinery/recharger{ pixel_x = -16; pixel_y = 5 diff --git a/_maps/shuttles/inteq/inteq_vaquero.dmm b/_maps/shuttles/inteq/inteq_vaquero.dmm index 04e3e5684ba7..336bf5792208 100644 --- a/_maps/shuttles/inteq/inteq_vaquero.dmm +++ b/_maps/shuttles/inteq/inteq_vaquero.dmm @@ -2175,9 +2175,9 @@ pixel_y = 23 }, /obj/effect/decal/cleanable/dirt/dust, -/obj/item/kitchen/knife/combat/survival, -/obj/item/kitchen/knife/combat/survival, -/obj/item/kitchen/knife/combat/survival, +/obj/item/melee/knife/survival, +/obj/item/melee/knife/survival, +/obj/item/melee/knife/survival, /turf/open/floor/plasteel/tech/grid, /area/ship/security) "HN" = ( diff --git a/_maps/shuttles/nanotrasen/nanotrasen_heron.dmm b/_maps/shuttles/nanotrasen/nanotrasen_heron.dmm index 96bd414525c0..b469bbaa0984 100644 --- a/_maps/shuttles/nanotrasen/nanotrasen_heron.dmm +++ b/_maps/shuttles/nanotrasen/nanotrasen_heron.dmm @@ -4853,11 +4853,11 @@ pixel_x = 2; pixel_y = 3 }, -/obj/item/kitchen/knife/plastic{ +/obj/item/melee/knife/plastic{ pixel_x = 2 }, -/obj/item/kitchen/knife/plastic, -/obj/item/kitchen/knife/plastic{ +/obj/item/melee/knife/plastic, +/obj/item/melee/knife/plastic{ pixel_x = 5; pixel_y = 2 }, @@ -6113,7 +6113,7 @@ /obj/item/storage/pill_bottle/aranesp, /obj/item/taperecorder, /obj/item/t_scanner, -/obj/item/kitchen/knife/switchblade, +/obj/item/melee/knife/switchblade, /obj/item/trash/candy, /obj/structure/filingcabinet/double, /obj/item/radio/intercom/directional/south, @@ -13018,10 +13018,10 @@ /obj/item/reagent_containers/food/snacks/dough, /obj/item/reagent_containers/food/snacks/dough, /obj/item/kitchen/rollingpin, -/obj/item/kitchen/knife/butcher{ +/obj/item/melee/knife/butcher{ pixel_x = 13 }, -/obj/item/kitchen/knife, +/obj/item/melee/knife/kitchen, /obj/effect/turf_decal/industrial/warning{ dir = 1 }, diff --git a/_maps/shuttles/nanotrasen/nanotrasen_meta.dmm b/_maps/shuttles/nanotrasen/nanotrasen_meta.dmm index 1bcf7707a157..1f645758f3cb 100644 --- a/_maps/shuttles/nanotrasen/nanotrasen_meta.dmm +++ b/_maps/shuttles/nanotrasen/nanotrasen_meta.dmm @@ -2393,7 +2393,7 @@ /obj/structure/table, /obj/item/cutting_board, /obj/item/kitchen/rollingpin, -/obj/item/kitchen/knife, +/obj/item/melee/knife/kitchen, /obj/effect/turf_decal/corner/opaque/white/diagonal, /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/plasteel, diff --git a/_maps/shuttles/nanotrasen/nanotrasen_mimir.dmm b/_maps/shuttles/nanotrasen/nanotrasen_mimir.dmm index 928fc6bd90ee..708933a2287a 100644 --- a/_maps/shuttles/nanotrasen/nanotrasen_mimir.dmm +++ b/_maps/shuttles/nanotrasen/nanotrasen_mimir.dmm @@ -2005,7 +2005,7 @@ /obj/machinery/door/window{ dir = 4 }, -/obj/item/kitchen/knife/shiv, +/obj/item/melee/knife/shiv, /turf/open/floor/plating, /area/ship/crew/canteen) "lc" = ( @@ -4049,11 +4049,11 @@ /area/ship/crew/dorm) "ye" = ( /obj/structure/closet/crate, -/obj/item/kitchen/knife/plastic, -/obj/item/kitchen/knife/plastic, -/obj/item/kitchen/knife/plastic, -/obj/item/kitchen/knife/plastic, -/obj/item/kitchen/knife/plastic, +/obj/item/melee/knife/plastic, +/obj/item/melee/knife/plastic, +/obj/item/melee/knife/plastic, +/obj/item/melee/knife/plastic, +/obj/item/melee/knife/plastic, /obj/item/kitchen/spoon/plastic, /obj/item/kitchen/spoon/plastic, /obj/item/kitchen/spoon/plastic, diff --git a/_maps/shuttles/nanotrasen/nanotrasen_osprey.dmm b/_maps/shuttles/nanotrasen/nanotrasen_osprey.dmm index 564cf0733f9f..a44e00c41303 100644 --- a/_maps/shuttles/nanotrasen/nanotrasen_osprey.dmm +++ b/_maps/shuttles/nanotrasen/nanotrasen_osprey.dmm @@ -7644,7 +7644,7 @@ /area/ship/engineering) "XE" = ( /obj/structure/table/reinforced, -/obj/item/kitchen/knife, +/obj/item/melee/knife/kitchen, /obj/item/kitchen/rollingpin, /obj/item/reagent_containers/food/condiment/sugar, /obj/item/reagent_containers/food/condiment/rice, diff --git a/_maps/shuttles/nanotrasen/nanotrasen_ranger.dmm b/_maps/shuttles/nanotrasen/nanotrasen_ranger.dmm index d2ccfdcfe910..fcd049fb153f 100644 --- a/_maps/shuttles/nanotrasen/nanotrasen_ranger.dmm +++ b/_maps/shuttles/nanotrasen/nanotrasen_ranger.dmm @@ -176,7 +176,7 @@ /obj/item/clothing/glasses/sunglasses/gar, /obj/item/melee/classic_baton/telescopic, /obj/item/flashlight/seclite, -/obj/item/kitchen/knife/combat/survival, +/obj/item/melee/knife/survival, /obj/item/holosign_creator/security, /obj/item/storage/box/handcuffs, /obj/item/restraints/legcuffs/bola/energy, @@ -1544,7 +1544,7 @@ pixel_y = 9; pixel_x = -12 }, -/obj/item/kitchen/knife/combat/survival{ +/obj/item/melee/knife/survival{ pixel_y = 6; pixel_x = 5 }, @@ -3117,7 +3117,7 @@ /obj/structure/closet/secure_closet/lp/lieutenant, /obj/item/stock_parts/cell/gun, /obj/item/melee/classic_baton/telescopic, -/obj/item/kitchen/knife/combat/survival, +/obj/item/melee/knife/survival, /obj/item/gps, /obj/item/screwdriver, /obj/effect/turf_decal/siding/wood{ diff --git a/_maps/shuttles/nanotrasen/nanotrasen_skipper.dmm b/_maps/shuttles/nanotrasen/nanotrasen_skipper.dmm index 802756c19d04..e69aa1de47ca 100644 --- a/_maps/shuttles/nanotrasen/nanotrasen_skipper.dmm +++ b/_maps/shuttles/nanotrasen/nanotrasen_skipper.dmm @@ -1734,7 +1734,7 @@ pixel_x = 1; pixel_y = 5 }, -/obj/item/kitchen/knife/letter_opener{ +/obj/item/melee/knife/letter_opener{ desc = "A military combat utility survival knife, imported from Earth. An expensive paperweight indeed."; pixel_x = 4; pixel_y = 5 @@ -2607,7 +2607,7 @@ dir = 10 }, /obj/structure/table/reinforced, -/obj/item/kitchen/knife, +/obj/item/melee/knife/kitchen, /obj/item/cutting_board, /obj/effect/turf_decal/corner/opaque/green/mono, /turf/open/floor/plasteel, diff --git a/_maps/shuttles/pgf/pgf_crying_sun.dmm b/_maps/shuttles/pgf/pgf_crying_sun.dmm index bbfb109c6c36..eb5211a95ac9 100644 --- a/_maps/shuttles/pgf/pgf_crying_sun.dmm +++ b/_maps/shuttles/pgf/pgf_crying_sun.dmm @@ -3358,19 +3358,19 @@ pixel_x = 3; pixel_y = 5 }, -/obj/item/kitchen/knife/plastic{ +/obj/item/melee/knife/plastic{ pixel_y = 5; pixel_x = -1 }, -/obj/item/kitchen/knife/plastic{ +/obj/item/melee/knife/plastic{ pixel_y = 5; pixel_x = -3 }, -/obj/item/kitchen/knife/plastic{ +/obj/item/melee/knife/plastic{ pixel_y = 5; pixel_x = -5 }, -/obj/item/kitchen/knife/plastic{ +/obj/item/melee/knife/plastic{ pixel_y = 5; pixel_x = -7 }, @@ -5479,19 +5479,19 @@ /area/ship/bridge) "Qq" = ( /obj/structure/rack, -/obj/item/kitchen/knife/combat/survival{ +/obj/item/melee/knife/survival{ pixel_x = -7; pixel_y = 4 }, -/obj/item/kitchen/knife/combat/survival{ +/obj/item/melee/knife/survival{ pixel_x = -2; pixel_y = 4 }, -/obj/item/kitchen/knife/combat/survival{ +/obj/item/melee/knife/survival{ pixel_y = 4; pixel_x = 3 }, -/obj/item/kitchen/knife/combat/survival{ +/obj/item/melee/knife/survival{ pixel_y = 4; pixel_x = 8 }, diff --git a/_maps/shuttles/pirate/pirate_libertatia.dmm b/_maps/shuttles/pirate/pirate_libertatia.dmm index 2fe2cd9ddb20..b1bf098571c0 100644 --- a/_maps/shuttles/pirate/pirate_libertatia.dmm +++ b/_maps/shuttles/pirate/pirate_libertatia.dmm @@ -566,11 +566,11 @@ /area/ship/security) "sI" = ( /obj/machinery/firealarm/directional/south, -/obj/item/kitchen/knife/hunting{ +/obj/item/melee/knife/hunting{ pixel_y = 5 }, -/obj/item/kitchen/knife/hunting, -/obj/item/kitchen/knife/hunting{ +/obj/item/melee/knife/hunting, +/obj/item/melee/knife/hunting{ pixel_y = -5 }, /obj/item/storage/belt/security/webbing, diff --git a/_maps/shuttles/pirate/pirate_tortuga.dmm b/_maps/shuttles/pirate/pirate_tortuga.dmm index 4bc354b31b5c..fc08d44db510 100644 --- a/_maps/shuttles/pirate/pirate_tortuga.dmm +++ b/_maps/shuttles/pirate/pirate_tortuga.dmm @@ -753,7 +753,7 @@ /obj/structure/closet/crate{ icon_state = "o2crate" }, -/obj/item/spear/explosive, +/obj/item/melee/spear/explosive, /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating/airless, /area/ship/maintenance) @@ -2375,19 +2375,19 @@ /area/ship/cargo) "FB" = ( /obj/structure/rack, -/obj/item/kitchen/knife/combat/survival{ +/obj/item/melee/knife/survival{ pixel_y = 8; pixel_x = -9 }, -/obj/item/kitchen/knife/combat/survival{ +/obj/item/melee/knife/survival{ pixel_y = 7; pixel_x = 5 }, -/obj/item/kitchen/knife/combat/survival{ +/obj/item/melee/knife/survival{ pixel_y = 7; pixel_x = -4 }, -/obj/item/kitchen/knife/combat/survival{ +/obj/item/melee/knife/survival{ pixel_y = 7; pixel_x = 1 }, @@ -3403,7 +3403,7 @@ /turf/open/floor/plating, /area/ship/cargo) "RV" = ( -/obj/item/kitchen/knife/plastic{ +/obj/item/melee/knife/plastic{ pixel_x = 8 }, /obj/item/reagent_containers/food/snacks/grown/potato{ diff --git a/_maps/shuttles/roumain/srm_elder.dmm b/_maps/shuttles/roumain/srm_elder.dmm index 5ef138ad19db..0e501c62ed57 100644 --- a/_maps/shuttles/roumain/srm_elder.dmm +++ b/_maps/shuttles/roumain/srm_elder.dmm @@ -1533,7 +1533,7 @@ /obj/item/clothing/shoes/cowboy, /obj/item/clothing/shoes/cowboy/black, /obj/item/clothing/shoes/combat, -/obj/item/kitchen/knife/hunting, +/obj/item/melee/knife/hunting, /obj/item/gps{ pixel_x = -7 }, @@ -2017,7 +2017,7 @@ pixel_x = -2; pixel_y = 2 }, -/obj/item/kitchen/knife/combat, +/obj/item/melee/knife/combat, /obj/effect/turf_decal/spline/fancy/wood{ dir = 5 }, @@ -2462,15 +2462,15 @@ /area/ship/roumain) "Eh" = ( /obj/structure/table/wood, -/obj/item/spear/bonespear{ +/obj/item/melee/spear/bone{ pixel_y = -3; pixel_x = 2 }, -/obj/item/spear/bonespear{ +/obj/item/melee/spear/bone{ pixel_y = 1; pixel_x = 2 }, -/obj/item/spear/bonespear{ +/obj/item/melee/spear/bone{ pixel_y = 5; pixel_x = 2 }, @@ -2643,7 +2643,7 @@ /obj/item/clothing/shoes/cowboy/black, /obj/item/clothing/shoes/cowboy, /obj/item/clothing/shoes/combat, -/obj/item/kitchen/knife/combat/survival, +/obj/item/melee/knife/survival, /obj/item/gps{ pixel_x = -7 }, @@ -2687,7 +2687,7 @@ pixel_x = -2; pixel_y = 2 }, -/obj/item/kitchen/knife/combat, +/obj/item/melee/knife/combat, /obj/effect/turf_decal/spline/fancy/wood{ dir = 5 }, @@ -3656,7 +3656,7 @@ /obj/item/clothing/shoes/cowboy, /obj/item/clothing/shoes/cowboy/black, /obj/item/clothing/shoes/combat, -/obj/item/kitchen/knife/hunting, +/obj/item/melee/knife/hunting, /obj/item/gps{ pixel_x = -7 }, diff --git a/_maps/shuttles/solgov/solgov_chronicle.dmm b/_maps/shuttles/solgov/solgov_chronicle.dmm index 56cbecce667b..e8af1166a200 100644 --- a/_maps/shuttles/solgov/solgov_chronicle.dmm +++ b/_maps/shuttles/solgov/solgov_chronicle.dmm @@ -569,7 +569,7 @@ /obj/item/clothing/suit/hazardvest/solgov, /obj/item/clothing/accessory/armband/cargo, /obj/item/clothing/shoes/workboots, -/obj/item/kitchen/knife/combat/survival, +/obj/item/melee/knife/survival, /obj/item/clothing/gloves/combat, /obj/item/storage/backpack, /obj/machinery/light/small/directional/north, @@ -4427,7 +4427,7 @@ "RX" = ( /obj/structure/table/wood, /obj/item/cutting_board, -/obj/item/kitchen/knife, +/obj/item/melee/knife/kitchen, /obj/machinery/newscaster/directional/north, /obj/structure/sink{ layer = 2.79; diff --git a/_maps/shuttles/solgov/solgov_inkwell.dmm b/_maps/shuttles/solgov/solgov_inkwell.dmm index cb52200b4aa9..5d2c0fbe0ccc 100644 --- a/_maps/shuttles/solgov/solgov_inkwell.dmm +++ b/_maps/shuttles/solgov/solgov_inkwell.dmm @@ -2571,7 +2571,7 @@ /area/ship/crew/canteen) "qE" = ( /obj/structure/table/wood, -/obj/item/kitchen/knife/letter_opener{ +/obj/item/melee/knife/letter_opener{ icon_state = "letter_opener_b"; name = "boxcutter"; pixel_x = -13; @@ -2711,7 +2711,7 @@ dir = 4 }, /obj/item/clothing/glasses/meson/prescription, -/obj/item/kitchen/knife/letter_opener, +/obj/item/melee/knife/letter_opener, /obj/item/clothing/glasses/meson, /obj/machinery/light/directional/north, /obj/item/storage/bag/ore, @@ -3057,7 +3057,7 @@ /obj/structure/window/reinforced{ dir = 8 }, -/obj/item/kitchen/knife/letter_opener, +/obj/item/melee/knife/letter_opener, /obj/item/clothing/glasses/meson, /obj/structure/sign/poster/solgov/random{ pixel_y = 32 @@ -3342,7 +3342,7 @@ "uS" = ( /obj/structure/table/wood, /obj/item/cutting_board, -/obj/item/kitchen/knife, +/obj/item/melee/knife/kitchen, /obj/item/reagent_containers/food/condiment/saltshaker{ pixel_x = -17 }, @@ -3634,7 +3634,7 @@ /obj/item/stamp/solgov, /obj/item/clothing/suit/armor/solgov_trenchcoat, /obj/item/storage/backpack/satchel, -/obj/item/kitchen/knife/letter_opener, +/obj/item/melee/knife/letter_opener, /obj/structure/closet/secure_closet/quartermaster{ anchored = 1; name = "\proper logistics deck officer's locker"; @@ -5461,13 +5461,13 @@ }, /obj/structure/rack, /obj/structure/window/reinforced, -/obj/item/kitchen/knife/letter_opener{ +/obj/item/melee/knife/letter_opener{ pixel_x = -2 }, -/obj/item/kitchen/knife/letter_opener{ +/obj/item/melee/knife/letter_opener{ pixel_x = 1 }, -/obj/item/kitchen/knife/letter_opener{ +/obj/item/melee/knife/letter_opener{ pixel_x = 4 }, /obj/effect/turf_decal/corner/opaque/solgovblue{ @@ -6959,7 +6959,7 @@ }, /obj/effect/turf_decal/industrial/outline/red, /obj/item/clothing/glasses/meson/prescription, -/obj/item/kitchen/knife/letter_opener, +/obj/item/melee/knife/letter_opener, /obj/item/clothing/glasses/meson, /obj/item/storage/bag/ore, /turf/open/floor/plasteel/white, diff --git a/_maps/shuttles/solgov/solgov_paracelsus.dmm b/_maps/shuttles/solgov/solgov_paracelsus.dmm index b235794d6cd4..ef642488ef50 100644 --- a/_maps/shuttles/solgov/solgov_paracelsus.dmm +++ b/_maps/shuttles/solgov/solgov_paracelsus.dmm @@ -803,7 +803,7 @@ /obj/effect/turf_decal/siding/yellow{ dir = 4 }, -/obj/item/kitchen/knife/combat/survival, +/obj/item/melee/knife/survival, /obj/item/clothing/gloves/combat, /obj/item/clothing/suit/hazardvest/solgov, /obj/item/clothing/head/hardhat/solgov, @@ -1652,7 +1652,7 @@ /obj/effect/turf_decal/siding/yellow{ dir = 4 }, -/obj/item/kitchen/knife/combat/survival, +/obj/item/melee/knife/survival, /obj/item/clothing/gloves/combat, /obj/item/clothing/suit/hazardvest/solgov, /obj/item/clothing/head/hardhat/solgov, @@ -4715,7 +4715,7 @@ /obj/effect/decal/cleanable/dirt/dust, /obj/structure/table/wood, /obj/item/cutting_board, -/obj/item/kitchen/knife, +/obj/item/melee/knife/kitchen, /obj/item/kitchen/rollingpin, /turf/open/floor/wood/ebony, /area/ship/crew/canteen) diff --git a/_maps/shuttles/subshuttles/independent_sugarcube.dmm b/_maps/shuttles/subshuttles/independent_sugarcube.dmm index 11a8de916cd6..0504142f55b3 100644 --- a/_maps/shuttles/subshuttles/independent_sugarcube.dmm +++ b/_maps/shuttles/subshuttles/independent_sugarcube.dmm @@ -235,7 +235,7 @@ /obj/effect/decal/cleanable/glass, /obj/item/shard, /obj/item/shard, -/obj/item/kitchen/knife/shiv, +/obj/item/melee/knife/shiv, /turf/open/floor/plating, /area/ship/storage) "B" = ( diff --git a/_maps/shuttles/syndicate/syndicate_cybersun_kansatsu.dmm b/_maps/shuttles/syndicate/syndicate_cybersun_kansatsu.dmm index 67eaf609e080..253a82277fdf 100644 --- a/_maps/shuttles/syndicate/syndicate_cybersun_kansatsu.dmm +++ b/_maps/shuttles/syndicate/syndicate_cybersun_kansatsu.dmm @@ -549,7 +549,7 @@ dir = 4 }, /obj/item/storage/box/rxglasses/spyglasskit, -/obj/item/kitchen/knife/letter_opener, +/obj/item/melee/knife/letter_opener, /turf/open/floor/plasteel/dark, /area/ship/crew/office) "nF" = ( @@ -1844,7 +1844,7 @@ /obj/item/implanter/stealth, /obj/item/modular_computer/laptop/preset/civilian, /obj/item/clothing/mask/chameleon, -/obj/item/kitchen/knife/combat, +/obj/item/melee/knife/combat, /obj/item/reagent_containers/pill/cyanide, /obj/item/reagent_containers/pill/cyanide, /obj/item/reagent_containers/pill/cyanide, @@ -1948,10 +1948,10 @@ layer = 2.91 }, /obj/effect/turf_decal/box, -/obj/item/kitchen/knife/combat/survival, -/obj/item/kitchen/knife/combat/survival, -/obj/item/kitchen/knife/combat/survival, -/obj/item/kitchen/knife/combat/survival, +/obj/item/melee/knife/survival, +/obj/item/melee/knife/survival, +/obj/item/melee/knife/survival, +/obj/item/melee/knife/survival, /obj/item/pickaxe, /obj/item/pickaxe, /obj/item/pickaxe, diff --git a/_maps/shuttles/syndicate/syndicate_panacea.dmm b/_maps/shuttles/syndicate/syndicate_panacea.dmm index 24334160f64b..71526c69198f 100644 --- a/_maps/shuttles/syndicate/syndicate_panacea.dmm +++ b/_maps/shuttles/syndicate/syndicate_panacea.dmm @@ -7344,7 +7344,7 @@ /obj/item/cutting_board{ pixel_y = 3 }, -/obj/item/kitchen/knife/butcher{ +/obj/item/melee/knife/butcher{ pixel_y = 4; pixel_x = 4 }, diff --git a/_maps/shuttles/syndicate/syndicate_twinkleshine.dmm b/_maps/shuttles/syndicate/syndicate_twinkleshine.dmm index 30ce8ed19013..ca7bd7705efd 100644 --- a/_maps/shuttles/syndicate/syndicate_twinkleshine.dmm +++ b/_maps/shuttles/syndicate/syndicate_twinkleshine.dmm @@ -120,7 +120,7 @@ /area/ship/security/armory) "aG" = ( /obj/structure/closet/secure_closet/wall/directional/east, -/obj/item/kitchen/knife, +/obj/item/melee/knife/kitchen, /obj/item/cutting_board, /obj/item/clothing/under/suit/waiter/syndicate, /obj/item/clothing/suit/hazardvest/donk, @@ -1845,7 +1845,7 @@ /obj/item/clothing/gloves/color/black, /obj/machinery/light/directional/west, /obj/item/flashlight/seclite, -/obj/item/kitchen/knife/combat, +/obj/item/melee/knife/combat, /turf/open/floor/mineral/plastitanium, /area/ship/security) "ky" = ( @@ -2117,7 +2117,7 @@ /obj/item/clothing/head/soft/black, /obj/item/clothing/glasses/sunglasses, /obj/item/flashlight/seclite, -/obj/item/kitchen/knife/combat, +/obj/item/melee/knife/combat, /turf/open/floor/mineral/plastitanium, /area/ship/security) "ma" = ( @@ -3326,7 +3326,7 @@ /obj/machinery/light/directional/east, /obj/item/clothing/head/beret/black, /obj/item/flashlight/seclite, -/obj/item/kitchen/knife/combat, +/obj/item/melee/knife/combat, /turf/open/floor/mineral/plastitanium, /area/ship/security) "sW" = ( @@ -7138,7 +7138,7 @@ /obj/item/clothing/gloves/color/black, /obj/machinery/light/directional/east, /obj/item/flashlight/seclite, -/obj/item/kitchen/knife/combat, +/obj/item/melee/knife/combat, /turf/open/floor/mineral/plastitanium, /area/ship/security) "Pn" = ( diff --git a/_maps/templates/shelter_2.dmm b/_maps/templates/shelter_2.dmm index 9c2571e6f5a5..c12d8dd837da 100644 --- a/_maps/templates/shelter_2.dmm +++ b/_maps/templates/shelter_2.dmm @@ -39,7 +39,7 @@ /area/survivalpod) "i" = ( /obj/structure/toilet/secret{ - secret_type = /obj/item/kitchen/knife/combat/survival + secret_type = /obj/item/melee/knife/survival }, /turf/open/floor/pod, /area/survivalpod) diff --git a/check_regex.yaml b/check_regex.yaml index 3b5e13a650e5..eadd642f0676 100644 --- a/check_regex.yaml +++ b/check_regex.yaml @@ -29,7 +29,7 @@ standards: - exactly: [1, "/area text paths", '"/area'] - exactly: [17, "/datum text paths", '"/datum'] - exactly: [4, "/mob text paths", '"/mob'] - - exactly: [43, "/obj text paths", '"/obj'] + - exactly: [42, "/obj text paths", '"/obj'] - exactly: [0, "/turf text paths", '"/turf'] - exactly: [117, "text2path uses", "text2path"] diff --git a/code/__DEFINES/inventory.dm b/code/__DEFINES/inventory.dm index 6cad7078b6ec..5b99546fed97 100644 --- a/code/__DEFINES/inventory.dm +++ b/code/__DEFINES/inventory.dm @@ -150,7 +150,7 @@ GLOBAL_LIST_INIT(security_vest_allowed, typecacheof(list( /obj/item/gun/energy, /obj/item/gun/grenadelauncher, /obj/item/flamethrower, - /obj/item/kitchen/knife/combat, + /obj/item/melee/knife/combat, /obj/item/melee/baton, /obj/item/melee/classic_baton/telescopic, /obj/item/reagent_containers/spray/pepper, diff --git a/code/_globalvars/lists/maintenance_loot.dm b/code/_globalvars/lists/maintenance_loot.dm index 532ed3f888d7..9c9f0b85e48d 100644 --- a/code/_globalvars/lists/maintenance_loot.dm +++ b/code/_globalvars/lists/maintenance_loot.dm @@ -164,7 +164,7 @@ GLOBAL_LIST_INIT(uncommon_loot, list(//uncommon: useful items /obj/item/roller = 1, /obj/item/restraints/legcuffs/bola = 1, /obj/item/restraints/handcuffs/cable = 1, - /obj/item/spear = 1, + /obj/item/melee/spear = 1, /obj/item/shield/riot/buckler = 1, /obj/item/grenade/iedcasing/spawned = 1, /obj/item/melee/baton/cattleprod = 1, @@ -253,7 +253,7 @@ GLOBAL_LIST_INIT(oddity_loot, list(//oddity: strange or crazy items /obj/item/clothing/shoes/jackboots/fast = 1, /obj/item/clothing/suit/armor/reactive/table = 1, /obj/item/storage/box/donkpockets/donkpocketgondola = 1, - /obj/item/melee/greykingsword = 1 //WS - Meth Sword + /obj/item/melee/sword/greyking = 1 //WS - Meth Sword )) //Maintenance loot spawner pools diff --git a/code/controllers/subsystem/traumas.dm b/code/controllers/subsystem/traumas.dm index 25ae750eb0d3..333dee323e87 100644 --- a/code/controllers/subsystem/traumas.dm +++ b/code/controllers/subsystem/traumas.dm @@ -75,7 +75,7 @@ SUBSYSTEM_DEF(traumas) "greytide" = typecacheof(list( /obj/item/clothing/under/color/grey, /obj/item/melee/baton/cattleprod, - /obj/item/spear, /obj/item/clothing/mask/gas)), + /obj/item/melee/spear, /obj/item/clothing/mask/gas)), "lizards" = typecacheof(list( /obj/item/toy/plush/lizardplushie, /obj/item/organ/tail/lizard, @@ -125,14 +125,13 @@ SUBSYSTEM_DEF(traumas) "the supernatural" = typecacheof(list( /obj/structure/destructible/cult, /obj/item/tome, - /obj/item/melee/cultblade, /obj/item/cult_bastard, /obj/item/restraints/legcuffs/bola/cult, /obj/item/clothing/suit/space/hardsuit/cult, /obj/item/clothing/suit/hooded/cultrobes, /obj/item/clothing/head/hooded/cult_hoodie, /obj/effect/rune, /obj/machinery/door/airlock/cult, /obj/singularity/narsie, /obj/item/soulstone, /obj/item/clothing/suit/wizrobe, /obj/item/clothing/head/wizard, /obj/item/spellbook, /obj/item/staff, /obj/item/clothing/suit/space/hardsuit/shielded/wizard, /obj/item/clothing/suit/space/hardsuit/wizard, - /obj/item/nullrod, /obj/item/clothing/under/rank/civilian/chaplain)), + /obj/item/clothing/under/rank/civilian/chaplain)), "aliens" = typecacheof(list( /obj/item/clothing/mask/facehugger_item, /obj/item/organ/body_egg/alien_embryo, @@ -151,13 +150,13 @@ SUBSYSTEM_DEF(traumas) /obj/item/clothing/suit/toggle/owlwings, /obj/item/clothing/under/costume/owl, /obj/item/clothing/mask/gas/owl_mask)), "anime" = typecacheof(list( - /obj/item/clothing/under/costume/schoolgirl, /obj/item/katana, /obj/item/reagent_containers/food/snacks/sashimi, + /obj/item/clothing/under/costume/schoolgirl, /obj/item/reagent_containers/food/snacks/sashimi, /obj/item/reagent_containers/food/snacks/chawanmushi, /obj/item/reagent_containers/food/drinks/bottle/sake, /obj/item/throwing_star, /obj/item/clothing/suit/space/space_ninja, /obj/item/clothing/mask/gas/space_ninja, /obj/item/clothing/shoes/space_ninja, /obj/item/clothing/gloves/space_ninja, - /obj/item/vibro_weapon, /obj/item/nullrod/scythe/vibro, /obj/item/energy_katana, /obj/item/toy/katana, - /obj/item/nullrod/claymore/katana, /obj/structure/window/paperframe, /obj/structure/mineral_door/paperframe)) + /obj/item/melee/sword/vibro, /obj/item/melee/sword/energy_katana, /obj/item/toy/katana, + /obj/item/melee/sword/katana, /obj/structure/window/paperframe, /obj/structure/mineral_door/paperframe)) ) phobia_turfs = list( diff --git a/code/datums/action.dm b/code/datums/action.dm index e8d0ea303888..fb2d8b5e967f 100644 --- a/code/datums/action.dm +++ b/code/datums/action.dm @@ -470,44 +470,6 @@ name = "Use [target.name]" button.name = name -/datum/action/item_action/cult_dagger - name = "Draw Blood Rune" - desc = "Use the ritual dagger to create a powerful blood rune" - icon_icon = 'icons/mob/actions/actions_cult.dmi' - button_icon_state = "draw" - buttontooltipstyle = "cult" - background_icon_state = "bg_demon" - -/datum/action/item_action/cult_dagger/Grant(mob/M) - if(iscultist(M)) - ..() - button.screen_loc = "6:157,4:-2" - button.moved = "6:157,4:-2" - else - Remove(owner) - - -/datum/action/item_action/cult_dagger/Trigger() - for(var/obj/item/H in owner.held_items) //In case we were already holding another dagger - if(istype(H, /obj/item/melee/cultblade/dagger)) - H.attack_self(owner) - return - var/obj/item/I = target - if(owner.can_equip(I, ITEM_SLOT_HANDS)) - owner.temporarilyRemoveItemFromInventory(I) - owner.put_in_hands(I) - I.attack_self(owner) - return - if(!isliving(owner)) - to_chat(owner, "You lack the necessary living force for this action.") - return - var/mob/living/living_owner = owner - if (living_owner.usable_hands <= 0) - to_chat(living_owner, "You dont have any usable hands!") - else - to_chat(living_owner, "Your hands are full!") - - ///MGS BOX! /datum/action/item_action/agent_box name = "Deploy Box" diff --git a/code/datums/actions/ninja.dm b/code/datums/actions/ninja.dm index b655078349dc..974e4cfa74bc 100644 --- a/code/datums/actions/ninja.dm +++ b/code/datums/actions/ninja.dm @@ -24,7 +24,7 @@ name = "Create Throwing Stars (1E)" desc = "Creates some throwing stars" button_icon_state = "throwingstar" - icon_icon = 'icons/obj/items_and_weapons.dmi' + icon_icon = 'icons/obj/items.dmi' /datum/action/item_action/ninjanet name = "Energy Net (20E)" @@ -36,7 +36,7 @@ name = "Recall Energy Katana (Variable Cost)" desc = "Teleports the Energy Katana linked to this suit to its wearer, cost based on distance." button_icon_state = "energy_katana" - icon_icon = 'icons/obj/items_and_weapons.dmi' + icon_icon = 'icons/obj/items.dmi' /datum/action/item_action/ninja_stealth name = "Toggle Stealth" diff --git a/code/datums/components/crafting/recipes/misc.dm b/code/datums/components/crafting/recipes/misc.dm index e76641789157..fd89bd141ea8 100644 --- a/code/datums/components/crafting/recipes/misc.dm +++ b/code/datums/components/crafting/recipes/misc.dm @@ -115,7 +115,7 @@ name = "Improvised Pickaxe" reqs = list( /obj/item/crowbar = 1, - /obj/item/kitchen/knife = 1, + /obj/item/melee/knife/kitchen = 1, /obj/item/stack/tape = 1) result = /obj/item/pickaxe/improvised category = CAT_MISC diff --git a/code/datums/components/crafting/recipes/weapon.dm b/code/datums/components/crafting/recipes/weapon.dm index 65983b06df23..6783c60c6c6b 100644 --- a/code/datums/components/crafting/recipes/weapon.dm +++ b/code/datums/components/crafting/recipes/weapon.dm @@ -161,7 +161,7 @@ /datum/crafting_recipe/spear name = "Spear" - result = /obj/item/spear + result = /obj/item/melee/spear reqs = list(/obj/item/restraints/handcuffs/cable = 1, /obj/item/shard = 1, /obj/item/stack/rods = 1) @@ -261,7 +261,7 @@ /datum/crafting_recipe/bonespear name = "Bone Spear" - result = /obj/item/spear/bonespear + result = /obj/item/melee/spear/bone time = 30 reqs = list(/obj/item/stack/sheet/bone = 4, /obj/item/stack/sheet/sinew = 1) @@ -270,7 +270,7 @@ /datum/crafting_recipe/boneaxe name = "Bone Axe" - result = /obj/item/fireaxe/boneaxe + result = /obj/item/melee/axe/bone time = 50 reqs = list(/obj/item/stack/sheet/bone = 6, /obj/item/stack/sheet/sinew = 3) @@ -279,7 +279,7 @@ /datum/crafting_recipe/bonesword name = "Bone Sword" - result = /obj/item/claymore/bone + result = /obj/item/melee/sword/bone time = 40 reqs = list(/obj/item/stack/sheet/bone = 3, /obj/item/stack/sheet/sinew = 2) diff --git a/code/datums/components/riding.dm b/code/datums/components/riding.dm index 7d3bf028d796..f4ff07423c52 100644 --- a/code/datums/components/riding.dm +++ b/code/datums/components/riding.dm @@ -369,7 +369,7 @@ /obj/item/riding_offhand name = "offhand" - icon = 'icons/obj/items_and_weapons.dmi' + icon = 'icons/obj/items.dmi' icon_state = "offhand" w_class = WEIGHT_CLASS_HUGE item_flags = ABSTRACT | DROPDEL | NOBLUDGEON diff --git a/code/datums/components/storage/concrete/pockets.dm b/code/datums/components/storage/concrete/pockets.dm index 44470e5ca989..e00c40e116f8 100644 --- a/code/datums/components/storage/concrete/pockets.dm +++ b/code/datums/components/storage/concrete/pockets.dm @@ -35,8 +35,8 @@ /datum/component/storage/concrete/pockets/small/fedora/Initialize() . = ..() var/static/list/exception_cache = typecacheof(list( - /obj/item/katana, /obj/item/toy/katana, /obj/item/nullrod/claymore/katana, - /obj/item/energy_katana, /obj/item/gun/ballistic/automatic/smg/firestorm/pan + /obj/item/toy/katana, /obj/item/melee/sword/katana, + /obj/item/melee/sword/energy_katana, /obj/item/gun/ballistic/automatic/smg/firestorm/pan )) exception_hold = exception_cache diff --git a/code/datums/martial/sleeping_carp.dm b/code/datums/martial/sleeping_carp.dm index 72d26cf74367..e4e3ef90ebc7 100644 --- a/code/datums/martial/sleeping_carp.dm +++ b/code/datums/martial/sleeping_carp.dm @@ -169,96 +169,3 @@ to_chat(usr, "Crashing Wave Kick: Harm Disarm. Launch people brutally across rooms, and away from you.") to_chat(usr, "Keelhaul: Harm Grab. Kick opponents to the floor. Against prone targets, deal additional stamina damage and disarm them.") to_chat(usr, "In addition, your body has become incredibly resilient to most forms of attack. Weapons cannot readily pierce your hardened skin, and you are highly resistant to stuns and knockdowns, and can block all projectiles in Throw Mode. However, you are not invincible, and sustained damage will take it's toll. Avoid heat at all costs!") - -/obj/item/staff/bostaff - name = "bo staff" - desc = "A long, tall staff made of polished wood. Traditionally used in ancient old-Earth martial arts. Can be wielded to both kill and incapacitate." - force = 10 - w_class = WEIGHT_CLASS_BULKY - slot_flags = ITEM_SLOT_BACK - throwforce = 20 - throw_speed = 2 - attack_verb = list("smashed", "slammed", "whacked", "thwacked") - icon = 'icons/obj/items_and_weapons.dmi' - icon_state = "bostaff0" - base_icon_state = "bostaff" - lefthand_file = 'icons/mob/inhands/weapons/staves_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/staves_righthand.dmi' - block_chance = 50 - var/wielded = FALSE // track wielded status on item - -/obj/item/staff/bostaff/Initialize() - . = ..() - RegisterSignal(src, COMSIG_TWOHANDED_WIELD, PROC_REF(on_wield)) - RegisterSignal(src, COMSIG_TWOHANDED_UNWIELD, PROC_REF(on_unwield)) - -/obj/item/staff/bostaff/ComponentInitialize() - . = ..() - AddComponent(/datum/component/two_handed, force_unwielded=10, force_wielded=24, icon_wielded="[base_icon_state]1") - -/// triggered on wield of two handed item -/obj/item/staff/bostaff/proc/on_wield(obj/item/source, mob/user) - SIGNAL_HANDLER - - wielded = TRUE - -/// triggered on unwield of two handed item -/obj/item/staff/bostaff/proc/on_unwield(obj/item/source, mob/user) - SIGNAL_HANDLER - - wielded = FALSE - -/obj/item/staff/bostaff/update_icon_state() - icon_state = "[base_icon_state]0" - return ..() - -/obj/item/staff/bostaff/attack(mob/target, mob/living/user) - add_fingerprint(user) - if((HAS_TRAIT(user, TRAIT_CLUMSY)) && prob(50)) - to_chat(user, "You club yourself over the head with [src].") - user.Paralyze(60) - if(ishuman(user)) - var/mob/living/carbon/human/H = user - H.apply_damage(2*force, BRUTE, BODY_ZONE_HEAD) - else - user.take_bodypart_damage(2*force) - return - if(iscyborg(target)) - return ..() - if(!isliving(target)) - return ..() - var/mob/living/carbon/C = target - if(C.stat) - to_chat(user, "It would be dishonorable to attack a foe while they cannot retaliate.") - return - if(user.a_intent == INTENT_DISARM) - if(!wielded) - return ..() - if(!ishuman(target)) - return ..() - var/mob/living/carbon/human/H = target - var/list/fluffmessages = list("club", "smack", "broadside", "beat", "slam") - H.visible_message("[user] [pick(fluffmessages)]s [H] with [src]!", \ - "[user] [pick(fluffmessages)]s you with [src]!", "You hear a sickening sound of flesh hitting flesh!", null, user) - to_chat(user, "You [pick(fluffmessages)] [H] with [src]!") - playsound(get_turf(user), 'sound/effects/woodhit.ogg', 75, TRUE, -1) - H.adjustStaminaLoss(rand(13,20)) - if(prob(10)) - H.visible_message("[H] collapses!", \ - "Your legs give out!") - H.Paralyze(80) - if(H.staminaloss && !H.IsSleeping()) - var/total_health = (H.health - H.staminaloss) - if(total_health <= HEALTH_THRESHOLD_CRIT && !H.stat) - H.visible_message("[user] delivers a heavy hit to [H]'s head, knocking [H.p_them()] out cold!", \ - "You're knocked unconscious by [user]!", "You hear a sickening sound of flesh hitting flesh!", null, user) - to_chat(user, "You deliver a heavy hit to [H]'s head, knocking [H.p_them()] out cold!") - H.SetSleeping(600) - H.adjustOrganLoss(ORGAN_SLOT_BRAIN, 15, 150) - else - return ..() - -/obj/item/staff/bostaff/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK) - if(!wielded) - return ..() - return FALSE diff --git a/code/game/gamemodes/clown_ops/clown_ops.dm b/code/game/gamemodes/clown_ops/clown_ops.dm index 74e391ef5510..1db631f18aa7 100644 --- a/code/game/gamemodes/clown_ops/clown_ops.dm +++ b/code/game/gamemodes/clown_ops/clown_ops.dm @@ -38,7 +38,7 @@ r_pocket = /obj/item/bikehorn id = /obj/item/card/id/syndicate backpack_contents = list(/obj/item/storage/box/survival/syndie=1,\ - /obj/item/kitchen/knife/combat/survival, + /obj/item/melee/knife/survival, /obj/item/dnainjector/clumsymut, //in case you want to be clumsy for the memes /obj/item/reagent_containers/spray/waterflower/lube) implants = list(/obj/item/implant/sad_trombone) diff --git a/code/game/gamemodes/nuclear/nuclear.dm b/code/game/gamemodes/nuclear/nuclear.dm index 675d5e7e5407..db73b7b797b9 100644 --- a/code/game/gamemodes/nuclear/nuclear.dm +++ b/code/game/gamemodes/nuclear/nuclear.dm @@ -120,7 +120,7 @@ id = /obj/item/card/id/syndicate belt = /obj/item/gun/ballistic/automatic/pistol/ringneck backpack_contents = list(/obj/item/storage/box/survival/syndie=1,\ - /obj/item/kitchen/knife/combat/survival) + /obj/item/melee/knife/survival) var/tc = 25 var/command_radio = FALSE @@ -169,7 +169,7 @@ backpack_contents = list(/obj/item/storage/box/survival/syndie=1,\ /obj/item/tank/jetpack/oxygen/harness=1,\ /obj/item/gun/ballistic/automatic/pistol/ringneck=1,\ - /obj/item/kitchen/knife/combat/survival) + /obj/item/melee/knife/survival) /datum/game_mode/nuclear/generate_credit_text() diff --git a/code/game/machinery/cryopod.dm b/code/game/machinery/cryopod.dm index 6b63a3ae83b8..9bad37507a35 100644 --- a/code/game/machinery/cryopod.dm +++ b/code/game/machinery/cryopod.dm @@ -151,7 +151,6 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/computer/cryopod/retro, 17) /obj/item/reagent_containers/hypospray/CMO, /obj/item/clothing/accessory/medal/gold/captain, /obj/item/clothing/gloves/krav_maga, - /obj/item/nullrod, /obj/item/tank/jetpack, /obj/item/documents, /obj/item/nuke_core_container diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm index 121c93a07353..e70edb721788 100644 --- a/code/game/machinery/doors/airlock.dm +++ b/code/game/machinery/doors/airlock.dm @@ -1236,8 +1236,8 @@ return if(!operating) - if(istype(I, /obj/item/fireaxe)) //being fireaxe'd - var/obj/item/fireaxe/axe = I + if(istype(I, /obj/item/melee/axe/fire)) //being fireaxe'd + var/obj/item/melee/axe/fire/axe = I if(axe && !axe.wielded) to_chat(user, "You need to be wielding \the [axe] to do that!") return diff --git a/code/game/machinery/doors/door.dm b/code/game/machinery/doors/door.dm index eb23f1060be3..737bacbb650f 100644 --- a/code/game/machinery/doors/door.dm +++ b/code/game/machinery/doors/door.dm @@ -253,7 +253,7 @@ return max_moles - min_moles > 20 /obj/machinery/door/attackby(obj/item/I, mob/user, params) - if(user.a_intent != INTENT_HARM && (I.tool_behaviour == TOOL_CROWBAR || istype(I, /obj/item/fireaxe))) + if(user.a_intent != INTENT_HARM && (I.tool_behaviour == TOOL_CROWBAR || istype(I, /obj/item/melee/axe/fire))) var/forced_open = FALSE if(istype(I, /obj/item/crowbar)) var/obj/item/crowbar/C = I diff --git a/code/game/objects/effects/spawners/lootdrop.dm b/code/game/objects/effects/spawners/lootdrop.dm index 325712274633..2caecd950a9f 100644 --- a/code/game/objects/effects/spawners/lootdrop.dm +++ b/code/game/objects/effects/spawners/lootdrop.dm @@ -105,9 +105,9 @@ /obj/item/paper/fluff/jobs/prisoner/letter = 1, /obj/item/grenade/smokebomb = 1, /obj/item/flashlight/seclite = 1, - /obj/item/kitchen/knife/shiv = 4, - /obj/item/kitchen/knife/shiv/carrot = 1, - /obj/item/kitchen/knife = 1, + /obj/item/melee/knife/shiv = 4, + /obj/item/melee/knife/shiv/carrot = 1, + /obj/item/melee/knife/kitchen = 1, /obj/item/storage/wallet/random = 1, /obj/item/pda = 1 ) diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index 376d1ba16d11..17d6cf96b21a 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -13,7 +13,7 @@ GLOBAL_VAR_INIT(embedpocalypse, FALSE) // if true, all items will be able to emb /obj/item name = "item" - icon = 'icons/obj/items_and_weapons.dmi' + icon = 'icons/obj/items.dmi' blocks_emissive = EMISSIVE_BLOCK_GENERIC ///icon state name for inhand overlays var/item_state = null @@ -1183,6 +1183,11 @@ GLOBAL_VAR_INIT(embedpocalypse, FALSE) // if true, all items will be able to emb /obj/item/proc/get_writing_implement_details() return null +/obj/item/proc/can_trigger_gun(mob/living/user) + if(!user.can_use_guns(src)) + return FALSE + return TRUE + /// Whether or not this item can be put into a storage item through attackby /obj/item/proc/attackby_storage_insert(datum/storage, atom/storage_holder, mob/user) return TRUE diff --git a/code/game/objects/items/blueprints.dm b/code/game/objects/items/blueprints.dm index d410dfef0d7d..d2ce379274dc 100644 --- a/code/game/objects/items/blueprints.dm +++ b/code/game/objects/items/blueprints.dm @@ -5,7 +5,7 @@ /obj/item/areaeditor name = "area modification item" - icon = 'icons/obj/items_and_weapons.dmi' + icon = 'icons/obj/items.dmi' icon_state = "blueprints" attack_verb = list("attacked", "bapped", "hit") var/fluffnotice = "Nobody's gonna read this stuff!" @@ -46,7 +46,7 @@ /obj/item/areaeditor/blueprints name = "station blueprints" desc = "Blueprints of what appear to be an experimental station design, with a large spinal weapon mounted to the front. There is a \"Classified\" stamp and several coffee stains on it." - icon = 'icons/obj/items_and_weapons.dmi' + icon = 'icons/obj/items.dmi' icon_state = "blueprints" fluffnotice = "Property of Nanotrasen. For heads of staff only. Store in high-secure storage." resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ACID_PROOF @@ -204,7 +204,7 @@ /obj/item/areaeditor/blueprints/cyborg name = "construction schematics" desc = "A digital copy of the local blueprints and zoning permits stored in your memory." - icon = 'icons/obj/items_and_weapons.dmi' + icon = 'icons/obj/items.dmi' icon_state = "blueprints" fluffnotice = "Intellectual Property of Nanotrasen. For use in engineering cyborgs only. Wipe from memory upon departure from company ownership." @@ -235,7 +235,7 @@ /obj/item/areaeditor/shuttle name = "shuttle expansion permit" desc = "A set of paperwork which is used to expand flyable shuttles." - icon = 'icons/obj/items_and_weapons.dmi' + icon = 'icons/obj/items.dmi' icon_state = "blueprints" color = COLOR_ASSEMBLY_WHITE fluffnotice = "Not to be used for non-sanctioned shuttle construction and maintenance." diff --git a/code/game/objects/items/clown_items.dm b/code/game/objects/items/clown_items.dm index 9c6809cf3dbc..631eb7d2fc8f 100644 --- a/code/game/objects/items/clown_items.dm +++ b/code/game/objects/items/clown_items.dm @@ -14,7 +14,7 @@ name = "soap" desc = "A cheap bar of soap. Doesn't smell." gender = PLURAL - icon = 'icons/obj/items_and_weapons.dmi' + icon = 'icons/obj/items.dmi' icon_state = "soap" lefthand_file = 'icons/mob/inhands/equipment/custodial_lefthand.dmi' righthand_file = 'icons/mob/inhands/equipment/custodial_righthand.dmi' @@ -150,7 +150,7 @@ /obj/item/bikehorn name = "bike horn" desc = "A horn off of a bicycle." - icon = 'icons/obj/items_and_weapons.dmi' + icon = 'icons/obj/items.dmi' icon_state = "bike_horn" item_state = "bike_horn" lefthand_file = 'icons/mob/inhands/equipment/horns_lefthand.dmi' diff --git a/code/game/objects/items/cosmetics.dm b/code/game/objects/items/cosmetics.dm index d451f258bd78..b08adc216135 100644 --- a/code/game/objects/items/cosmetics.dm +++ b/code/game/objects/items/cosmetics.dm @@ -2,7 +2,7 @@ gender = PLURAL name = "red lipstick" desc = "A generic brand of lipstick." - icon = 'icons/obj/items_and_weapons.dmi' + icon = 'icons/obj/items.dmi' icon_state = "lipstick" w_class = WEIGHT_CLASS_TINY var/colour = "red" @@ -101,7 +101,7 @@ /obj/item/razor name = "electric razor" desc = "The latest and greatest power razor born from the science of shaving." - icon = 'icons/obj/items_and_weapons.dmi' + icon = 'icons/obj/items.dmi' icon_state = "razor" flags_1 = CONDUCT_1 w_class = WEIGHT_CLASS_TINY diff --git a/code/game/objects/items/courtroom.dm b/code/game/objects/items/courtroom.dm index 78d599ee4d9c..a1750a26493e 100644 --- a/code/game/objects/items/courtroom.dm +++ b/code/game/objects/items/courtroom.dm @@ -5,7 +5,7 @@ /obj/item/gavelhammer name = "gavel hammer" desc = "Order, order! No bombs in my courthouse." - icon = 'icons/obj/items_and_weapons.dmi' + icon = 'icons/obj/items.dmi' icon_state = "gavelhammer" force = 5 throwforce = 6 @@ -16,7 +16,7 @@ /obj/item/gavelblock name = "gavel block" desc = "Smack it with a gavel hammer when the assistants get rowdy." - icon = 'icons/obj/items_and_weapons.dmi' + icon = 'icons/obj/items.dmi' icon_state = "gavelblock" force = 2 throwforce = 2 diff --git a/code/game/objects/items/dna_injector.dm b/code/game/objects/items/dna_injector.dm index 113a72fb8d8d..3e0823761520 100644 --- a/code/game/objects/items/dna_injector.dm +++ b/code/game/objects/items/dna_injector.dm @@ -1,7 +1,7 @@ /obj/item/dnainjector name = "\improper DNA injector" desc = "This injects the person with DNA." - icon = 'icons/obj/items_and_weapons.dmi' + icon = 'icons/obj/items.dmi' icon_state = "dnainjector" lefthand_file = 'icons/mob/inhands/equipment/medical_lefthand.dmi' righthand_file = 'icons/mob/inhands/equipment/medical_righthand.dmi' diff --git a/code/game/objects/items/door_seal.dm b/code/game/objects/items/door_seal.dm index 64f7ca4fd92c..76b406f3c9ab 100644 --- a/code/game/objects/items/door_seal.dm +++ b/code/game/objects/items/door_seal.dm @@ -1,7 +1,7 @@ /obj/item/door_seal name = "pneumatic seal" desc = "A brace used to seal and reinforce an airlock. Useful for making areas inaccessible to those without opposable thumbs." - icon = 'icons/obj/items_and_weapons.dmi' + icon = 'icons/obj/items.dmi' icon_state = "pneumatic_seal" lefthand_file = 'icons/mob/inhands/items_lefthand.dmi' righthand_file = 'icons/mob/inhands/items_righthand.dmi' diff --git a/code/game/objects/items/gift.dm b/code/game/objects/items/gift.dm index 8ec4353d1ca2..31ac7d44ecff 100644 --- a/code/game/objects/items/gift.dm +++ b/code/game/objects/items/gift.dm @@ -47,8 +47,7 @@ GLOBAL_LIST_EMPTY(possible_gifts) I.add_fingerprint(M) /obj/item/a_gift/proc/get_gift_type() - var/gift_type_list = list(/obj/item/sord, - /obj/item/storage/wallet, + var/gift_type_list = list(/obj/item/storage/wallet, /obj/item/storage/photo_album, /obj/item/storage/box/snappops, /obj/item/storage/crayons, @@ -67,7 +66,6 @@ GLOBAL_LIST_EMPTY(possible_gifts) /obj/item/bikehorn, /obj/item/toy/beach_ball, /obj/item/toy/beach_ball/holoball, - /obj/item/banhammer, /obj/item/reagent_containers/food/snacks/grown/ambrosia/deus, /obj/item/reagent_containers/food/snacks/grown/ambrosia/vulgaris, /obj/item/paicard, diff --git a/code/game/objects/items/handcuffs.dm b/code/game/objects/items/handcuffs.dm index 9fece4feedd4..f36c27bb244d 100644 --- a/code/game/objects/items/handcuffs.dm +++ b/code/game/objects/items/handcuffs.dm @@ -20,7 +20,7 @@ name = "handcuffs" desc = "Use this to keep prisoners in line." gender = PLURAL - icon = 'icons/obj/items_and_weapons.dmi' + icon = 'icons/obj/items.dmi' icon_state = "handcuff" lefthand_file = 'icons/mob/inhands/equipment/security_lefthand.dmi' righthand_file = 'icons/mob/inhands/equipment/security_righthand.dmi' @@ -217,7 +217,7 @@ name = "leg cuffs" desc = "Use this to keep prisoners in line." gender = PLURAL - icon = 'icons/obj/items_and_weapons.dmi' + icon = 'icons/obj/items.dmi' icon_state = "handcuff" lefthand_file = 'icons/mob/inhands/equipment/security_lefthand.dmi' righthand_file = 'icons/mob/inhands/equipment/security_righthand.dmi' @@ -426,6 +426,6 @@ /obj/item/restraints/legcuffs/bola/watcher //tribal bola for tribal lizards name = "watcher Bola" desc = "A Bola made from the stretchy sinew of fallen watchers." - icon = 'icons/obj/items_and_weapons.dmi' + icon = 'icons/obj/items.dmi' icon_state = "bola_watcher" breakouttime = 45 diff --git a/code/game/objects/items/holy_weapons.dm b/code/game/objects/items/holy_weapons.dm deleted file mode 100644 index 5b91f6b7bd87..000000000000 --- a/code/game/objects/items/holy_weapons.dm +++ /dev/null @@ -1,522 +0,0 @@ -// CHAPLAIN CUSTOM ARMORS // - -/obj/item/storage/box/holy - name = "Witchhunter Kit" - -/obj/item/storage/box/holy/PopulateContents() - new /obj/item/clothing/head/witchunter(src) - new /obj/item/clothing/suit/armor/witchhunter(src) - - -/obj/item/storage/box/holy/follower - name = "Followers of the Chaplain Kit" - -/obj/item/storage/box/holy/follower/PopulateContents() - new /obj/item/clothing/suit/hooded/chaplain_hoodie/leader(src) - new /obj/item/clothing/suit/hooded/chaplain_hoodie(src) - new /obj/item/clothing/suit/hooded/chaplain_hoodie(src) - new /obj/item/clothing/suit/hooded/chaplain_hoodie(src) - new /obj/item/clothing/suit/hooded/chaplain_hoodie(src) - -/obj/item/clothing/suit/hooded/chaplain_hoodie - name = "follower hoodie" - desc = "Hoodie made for acolytes of the chaplain." - icon_state = "chaplain_hoodie" - item_state = "chaplain_hoodie" - body_parts_covered = CHEST|GROIN|LEGS|ARMS - allowed = list(/obj/item/storage/book/bible, /obj/item/nullrod, /obj/item/reagent_containers/food/drinks/bottle/holywater, /obj/item/storage/fancy/candle_box, /obj/item/candle, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman) - hoodtype = /obj/item/clothing/head/hooded/chaplain_hood - -/obj/item/clothing/head/hooded/chaplain_hood - name = "follower hood" - desc = "Hood made for acolytes of the chaplain." - icon_state = "chaplain_hood" - body_parts_covered = HEAD - flags_inv = HIDEHAIR|HIDEFACE|HIDEEARS - -/obj/item/clothing/suit/hooded/chaplain_hoodie/leader - name = "leader hoodie" - desc = "Now you're ready for some 50 dollar bling water." - icon_state = "chaplain_hoodie_leader" - item_state = "chaplain_hoodie_leader" - hoodtype = /obj/item/clothing/head/hooded/chaplain_hood/leader - -/obj/item/clothing/head/hooded/chaplain_hood/leader - name = "leader hood" - desc = "I mean, you don't /have/ to seek bling water. I just think you should." - icon_state = "chaplain_hood_leader" - - -// CHAPLAIN NULLROD AND CUSTOM WEAPONS // - -/obj/item/nullrod - name = "null rod" - desc = "A rod of pure obsidian; its very presence disrupts and dampens the powers of Nar'Sie's followers." - icon_state = "nullrod" - item_state = "nullrod" - lefthand_file = 'icons/mob/inhands/weapons/melee_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/melee_righthand.dmi' - force = 18 - throw_speed = 3 - throw_range = 4 - throwforce = 10 - w_class = WEIGHT_CLASS_TINY - obj_flags = UNIQUE_RENAME - var/reskinned = FALSE - var/chaplain_spawnable = TRUE - -/obj/item/nullrod/godhand - icon_state = "disintegrate" - item_state = "disintegrate" - lefthand_file = 'icons/mob/inhands/misc/touchspell_lefthand.dmi' - righthand_file = 'icons/mob/inhands/misc/touchspell_righthand.dmi' - name = "god hand" - desc = "This hand of yours glows with an awesome power!" - item_flags = ABSTRACT | DROPDEL - w_class = WEIGHT_CLASS_HUGE - hitsound = 'sound/weapons/sear.ogg' - damtype = BURN - attack_verb = list("punched", "cross countered", "pummeled") - -/obj/item/nullrod/godhand/Initialize() - . = ..() - ADD_TRAIT(src, TRAIT_NODROP, HAND_REPLACEMENT_TRAIT) - -/obj/item/nullrod/staff - icon_state = "godstaff-red" - item_state = "godstaff-red" - lefthand_file = 'icons/mob/inhands/weapons/staves_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/staves_righthand.dmi' - name = "red holy staff" - desc = "It has a mysterious, protective aura." - w_class = WEIGHT_CLASS_HUGE - force = 5 - slot_flags = ITEM_SLOT_BACK - block_chance = 40 - var/shield_icon = "shield-red" - -/obj/item/nullrod/staff/worn_overlays(isinhands) - . = ..() - if(isinhands) - . += mutable_appearance('icons/effects/effects.dmi', shield_icon, MOB_LAYER + 0.01) - -/obj/item/nullrod/staff/blue - name = "blue holy staff" - icon_state = "godstaff-blue" - item_state = "godstaff-blue" - shield_icon = "shield-old" - -/obj/item/nullrod/claymore - icon_state = "claymore_gold" - item_state = "claymore_gold" - lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi' - pickup_sound = 'sound/items/handling/knife2_pickup.ogg' - drop_sound = 'sound/items/handling/metal_drop.ogg' - name = "holy claymore" - desc = "A weapon fit for a crusade!" - w_class = WEIGHT_CLASS_HUGE - slot_flags = ITEM_SLOT_BACK|ITEM_SLOT_BELT - block_chance = 30 - sharpness = IS_SHARP - hitsound = 'sound/weapons/bladeslice.ogg' - attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") - -/obj/item/nullrod/claymore/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK) - if(attack_type == PROJECTILE_ATTACK) - final_block_chance = 0 //Don't bring a sword to a gunfight - return ..() - -/obj/item/nullrod/claymore/darkblade - icon_state = "cultblade" - item_state = "cultblade" - lefthand_file = 'icons/mob/inhands/64x64_lefthand.dmi' - righthand_file = 'icons/mob/inhands/64x64_righthand.dmi' - inhand_x_dimension = 64 - inhand_y_dimension = 64 - name = "dark blade" - desc = "Spread the glory of the dark gods!" - slot_flags = ITEM_SLOT_BELT - hitsound = 'sound/hallucinations/growl1.ogg' - -/obj/item/nullrod/claymore/chainsaw_sword - icon_state = "chainswordon" - item_state = "chainswordon" - name = "sacred chainsaw sword" - desc = "Suffer not a heretic to live." - slot_flags = ITEM_SLOT_BELT - attack_verb = list("sawed", "torn", "cut", "chopped", "diced") - hitsound = 'sound/weapons/chainsawhit.ogg' - tool_behaviour = TOOL_SAW - toolspeed = 1.5 //slower than a real saw - -/obj/item/nullrod/claymore/glowing - icon_state = "swordon" - item_state = "swordon" - name = "force weapon" - desc = "The blade glows with the power of faith. Or possibly a battery." - slot_flags = ITEM_SLOT_BELT - -/obj/item/nullrod/claymore/katana - name = "\improper Hanzo steel" - desc = "Capable of cutting clean through a holy claymore." - icon_state = "katana" - item_state = "katana" - slot_flags = ITEM_SLOT_BELT | ITEM_SLOT_BACK - supports_variations = VOX_VARIATION - -/obj/item/nullrod/claymore/multiverse - name = "extradimensional blade" - desc = "Once the harbinger of an interdimensional war, its sharpness fluctuates wildly." - icon_state = "multiverse" - item_state = "multiverse" - slot_flags = ITEM_SLOT_BELT - -/obj/item/nullrod/claymore/multiverse/attack(mob/living/carbon/M, mob/living/carbon/user) - force = rand(1, 30) - ..() - -/obj/item/nullrod/claymore/saber - name = "light energy sword" - hitsound = 'sound/weapons/blade1.ogg' - icon = 'icons/obj/transforming_energy.dmi' - icon_state = "swordblue" - item_state = "swordblue" - desc = "If you strike me down, I shall become more robust than you can possibly imagine." - slot_flags = ITEM_SLOT_BELT - -/obj/item/nullrod/claymore/saber/red - name = "dark energy sword" - icon_state = "swordred" - item_state = "swordred" - desc = "Woefully ineffective when used on steep terrain." - -/obj/item/nullrod/claymore/saber/pirate - name = "nautical energy sword" - icon_state = "cutlassred" - item_state = "cutlassred" - desc = "Convincing HR that your religion involved piracy was no mean feat." - -/obj/item/nullrod/sord - name = "\improper UNREAL SORD" - desc = "This thing is so unspeakably HOLY you are having a hard time even holding it." - icon_state = "sord" - item_state = "sord" - lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi' - slot_flags = ITEM_SLOT_BELT - force = 4.13 - throwforce = 1 - hitsound = 'sound/weapons/bladeslice.ogg' - attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") - -/obj/item/nullrod/scythe - icon_state = "scythe1" - item_state = "scythe1" - lefthand_file = 'icons/mob/inhands/weapons/polearms_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/polearms_righthand.dmi' - name = "reaper scythe" - desc = "Ask not for whom the bell tolls..." - w_class = WEIGHT_CLASS_BULKY - armour_penetration = 35 - slot_flags = ITEM_SLOT_BACK - sharpness = IS_SHARP - attack_verb = list("chopped", "sliced", "cut", "reaped") - -/obj/item/nullrod/scythe/Initialize() - . = ..() - AddComponent(/datum/component/butchering, 70, 110) //the harvest gives a high bonus chance - -/obj/item/nullrod/scythe/vibro - icon_state = "hfrequency0" - item_state = "hfrequency1" - lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi' - name = "high frequency blade" - desc = "Bad references are the DNA of the soul." - attack_verb = list("chopped", "sliced", "cut", "zandatsu'd") - hitsound = 'sound/weapons/rapierhit.ogg' - -/obj/item/nullrod/scythe/spellblade - icon_state = "spellblade" - item_state = "spellblade" - lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi' - icon = 'icons/obj/guns/magic.dmi' - name = "dormant spellblade" - desc = "The blade grants the wielder nearly limitless power...if they can figure out how to turn it on, that is." - hitsound = 'sound/weapons/rapierhit.ogg' - -/obj/item/nullrod/scythe/talking - icon_state = "talking_sword" - item_state = "talking_sword" - lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi' - name = "possessed blade" - desc = "When the world falls into chaos, it's nice to have a friend by your side." - attack_verb = list("chopped", "sliced", "cut") - hitsound = 'sound/weapons/rapierhit.ogg' - var/possessed = FALSE - -/obj/item/nullrod/scythe/talking/relaymove(mob/living/user, direction) - return //stops buckled message spam for the ghost. - -/obj/item/nullrod/scythe/talking/attack_self(mob/living/user) - if(possessed) - return - - to_chat(user, "You attempt to wake the spirit of the blade...") - - possessed = TRUE - - var/list/mob/dead/observer/candidates = pollGhostCandidates("Do you want to play as the spirit of [user.real_name]'s blade?", ROLE_PAI, null, FALSE, 100, POLL_IGNORE_POSSESSED_BLADE) - - if(LAZYLEN(candidates)) - var/mob/dead/observer/C = pick(candidates) - var/mob/living/simple_animal/shade/S = new(src) - S.ckey = C.ckey - S.fully_replace_character_name(null, "The spirit of [name]") - S.status_flags |= GODMODE - S.copy_languages(user, LANGUAGE_MASTER) //Make sure the sword can understand and communicate with the user. - S.update_atom_languages() - grant_all_languages(FALSE, FALSE, TRUE) //Grants omnitongue - var/input = sanitize_name(stripped_input(S,"What are you named?", ,"", MAX_NAME_LEN)) - - if(src && input) - name = input - S.fully_replace_character_name(null, "The spirit of [input]") - else - to_chat(user, "The blade is dormant. Maybe you can try again later.") - possessed = FALSE - -/obj/item/nullrod/scythe/talking/Destroy() - for(var/mob/living/simple_animal/shade/S in contents) - to_chat(S, "You were destroyed!") - qdel(S) - return ..() - -/obj/item/nullrod/scythe/talking/chainsword - icon_state = "chainswordon" - item_state = "chainswordon" - name = "possessed chainsaw sword" - desc = "Suffer not a heretic to live." - chaplain_spawnable = FALSE - force = 30 - slot_flags = ITEM_SLOT_BELT - attack_verb = list("sawed", "torn", "cut", "chopped", "diced") - hitsound = 'sound/weapons/chainsawhit.ogg' - tool_behaviour = TOOL_SAW - toolspeed = 0.5 //faster than normal saw - -/obj/item/nullrod/scythe/talking/necro - desc = "An ancient weapon flush with the souls of the fallen. The blood of the necropolis has suffused it over time immemorial, granting a toothy bite." - force = 35 - block_chance = 35 - hitsound = 'sound/weapons/pierce_slow.ogg' - armour_penetration = 20// lower ap than the original possessed sword, go figure. The justification is that this has a serrated blade - chaplain_spawnable = FALSE - attack_verb = list("gnawed", "munched on", "chewed", "rended", "chomped") - name = "possessed greatsword" - var/bleed_stacks_per_hit = 2 //this effect has rapid scaling and is an instant down pretty much, I'll crib it since it can trigger on non-fauna - resistance_flags = FIRE_PROOF | ACID_PROOF - -/obj/item/nullrod/scythe/talking/necro/examine(mob/user) - . = ..() - . += "This weapon applies a growing blood curse on attack. Though it slowly fades, fully manifesting it causes your target's blood to violently explode, creating a lethal burst of damage." - -/obj/item/nullrod/scythe/talking/necro/attack(mob/living/target) - ..() - var/datum/status_effect/stacking/saw_bleed/B = target.has_status_effect(STATUS_EFFECT_SAWBLEED) - if(!B) - target.apply_status_effect(STATUS_EFFECT_SAWBLEED,bleed_stacks_per_hit) - else - B.add_stacks(bleed_stacks_per_hit) - -/obj/item/nullrod/hammmer - icon_state = "hammeron" - item_state = "hammeron" - lefthand_file = 'icons/mob/inhands/weapons/hammers_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/hammers_righthand.dmi' - name = "relic war hammer" - desc = "This war hammer cost the chaplain forty thousand space dollars." - slot_flags = ITEM_SLOT_BELT - w_class = WEIGHT_CLASS_HUGE - attack_verb = list("smashed", "bashed", "hammered", "crunched") - -/obj/item/nullrod/chainsaw - name = "chainsaw hand" - desc = "Good? Bad? You're the guy with the chainsaw hand." - icon_state = "chainsaw_on" - item_state = "mounted_chainsaw" - lefthand_file = 'icons/mob/inhands/weapons/chainsaw_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/chainsaw_righthand.dmi' - w_class = WEIGHT_CLASS_HUGE - item_flags = ABSTRACT - sharpness = IS_SHARP - attack_verb = list("sawed", "torn", "cut", "chopped", "diced") - hitsound = 'sound/weapons/chainsawhit.ogg' - tool_behaviour = TOOL_SAW - toolspeed = 2 //slower than a real saw - -/obj/item/nullrod/chainsaw/Initialize() - . = ..() - ADD_TRAIT(src, TRAIT_NODROP, HAND_REPLACEMENT_TRAIT) - AddComponent(/datum/component/butchering, 30, 100, 0, hitsound) - -/obj/item/nullrod/clown - icon = 'icons/obj/wizard.dmi' - icon_state = "clownrender" - item_state = "render" - name = "clown dagger" - desc = "Used for absolutely hilarious sacrifices." - hitsound = 'sound/items/bikehorn.ogg' - sharpness = IS_SHARP - attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") - -/obj/item/nullrod/pride_hammer - icon_state = "pride" - name = "Pride-struck Hammer" - desc = "It resonates an aura of Pride." - force = 16 - throwforce = 15 - w_class = 4 - slot_flags = ITEM_SLOT_BACK - attack_verb = list("attacked", "smashed", "crushed", "splattered", "cracked") - hitsound = 'sound/weapons/blade1.ogg' - -/obj/item/nullrod/pride_hammer/afterattack(atom/A as mob|obj|turf|area, mob/user, proximity) - . = ..() - if(!proximity) - return - if(prob(30) && ishuman(A)) - var/mob/living/carbon/human/H = A - user.reagents.trans_to(H, user.reagents.total_volume, 1, 1, 0, transfered_by = user) - to_chat(user, "Your pride reflects on [H].") - to_chat(H, "You feel insecure, taking on [user]'s burden.") - -/obj/item/nullrod/whip - name = "holy whip" - desc = "What a terrible night to be on Space Station 13."//very classic, it stays - icon_state = "chain" - item_state = "chain" - lefthand_file = 'icons/mob/inhands/weapons/melee_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/melee_righthand.dmi' - slot_flags = ITEM_SLOT_BELT - attack_verb = list("whipped", "lashed") - hitsound = 'sound/weapons/chainhit.ogg' - -/obj/item/nullrod/fedora - name = "atheist's fedora" - desc = "The brim of the hat is as sharp as your wit. The edge would hurt almost as much as disproving the existence of God." - icon_state = "fedora" - item_state = "fedora" - slot_flags = ITEM_SLOT_HEAD - icon = 'icons/obj/clothing/hats.dmi' - force = 0 - throw_speed = 4 - throw_range = 7 - throwforce = 30 - sharpness = IS_SHARP - attack_verb = list("enlightened", "redpilled") - -/obj/item/nullrod/armblade - name = "dark blessing" - desc = "Particularly twisted deities grant gifts of dubious value." - icon = 'icons/obj/changeling_items.dmi' - icon_state = "arm_blade" - item_state = "arm_blade" - lefthand_file = 'icons/mob/inhands/antag/changeling_lefthand.dmi' - righthand_file = 'icons/mob/inhands/antag/changeling_righthand.dmi' - item_flags = ABSTRACT - w_class = WEIGHT_CLASS_HUGE - sharpness = IS_SHARP - -/obj/item/nullrod/armblade/Initialize() - . = ..() - ADD_TRAIT(src, TRAIT_NODROP, HAND_REPLACEMENT_TRAIT) - AddComponent(/datum/component/butchering, 80, 70) - -/obj/item/nullrod/armblade/tentacle - name = "unholy blessing" - icon_state = "tentacle" - item_state = "tentacle" - -/obj/item/nullrod/carp - name = "carp-sie plushie" - desc = "An adorable stuffed toy that resembles the god of all carp. The teeth look pretty sharp. Activate it to receive the blessing of Carp-Sie." - icon = 'icons/obj/plushes.dmi' - icon_state = "carpplush" - item_state = "carp_plushie" - lefthand_file = 'icons/mob/inhands/items_lefthand.dmi' - righthand_file = 'icons/mob/inhands/items_righthand.dmi' - force = 15 - attack_verb = list("bitten", "eaten", "fin slapped") - hitsound = 'sound/weapons/bite.ogg' - var/used_blessing = FALSE - -/obj/item/nullrod/claymore/bostaff //May as well make it a "claymore" and inherit the blocking - name = "monk's staff" - desc = "A long, tall staff made of polished wood. Traditionally used in ancient old-Earth martial arts, it is now used to harass the clown." - w_class = WEIGHT_CLASS_BULKY - force = 15 - block_chance = 40 - slot_flags = ITEM_SLOT_BACK - sharpness = IS_BLUNT - hitsound = "swing_hit" - attack_verb = list("smashed", "slammed", "whacked", "thwacked") - icon = 'icons/obj/items_and_weapons.dmi' - icon_state = "bostaff0" - item_state = "bostaff0" - lefthand_file = 'icons/mob/inhands/weapons/staves_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/staves_righthand.dmi' - -/obj/item/nullrod/pitchfork - icon_state = "pitchfork0" - lefthand_file = 'icons/mob/inhands/weapons/polearms_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/polearms_righthand.dmi' - name = "unholy pitchfork" - w_class = WEIGHT_CLASS_NORMAL - desc = "Holding this makes you look absolutely devilish." - attack_verb = list("poked", "impaled", "pierced", "jabbed") - hitsound = 'sound/weapons/bladeslice.ogg' - sharpness = IS_SHARP - -/obj/item/nullrod/egyptian - name = "egyptian staff" - desc = "A tutorial in mummification is carved into the staff. You could probably craft the wraps if you had some cloth." - icon = 'icons/obj/guns/magic.dmi' - icon_state = "pharoah_sceptre" - item_state = "pharoah_sceptre" - lefthand_file = 'icons/mob/inhands/weapons/staves_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/staves_righthand.dmi' - w_class = WEIGHT_CLASS_NORMAL - attack_verb = list("bashes", "smacks", "whacks") - -/obj/item/nullrod/hypertool - icon = 'icons/obj/device.dmi' - icon_state = "hypertool" - item_state = "hypertool" - lefthand_file = 'icons/mob/inhands/equipment/tools_lefthand.dmi' - righthand_file = 'icons/mob/inhands/equipment/tools_righthand.dmi' - slot_flags = ITEM_SLOT_BELT - name = "hypertool" - desc = "A tool so powerful even you cannot perfectly use it." - armour_penetration = 35 - damtype = BRAIN - attack_verb = list("pulsed", "mended", "cut") - hitsound = 'sound/effects/sparks4.ogg' - -/obj/item/nullrod/spear - name = "ancient spear" - desc = "An ancient spear made of brass, I mean gold, I mean bronze." - icon_state = "ratvarian_spear" - item_state = "ratvarian_spear" - lefthand_file = 'icons/mob/inhands/antag/clockwork_lefthand.dmi' - righthand_file = 'icons/mob/inhands/antag/clockwork_righthand.dmi' - icon = 'icons/obj/clockwork_objects.dmi' - slot_flags = ITEM_SLOT_BELT - armour_penetration = 10 - sharpness = IS_SHARP_ACCURATE - w_class = WEIGHT_CLASS_BULKY - attack_verb = list("stabbed", "poked", "slashed", "clocked") - hitsound = 'sound/weapons/bladeslice.ogg' diff --git a/code/game/objects/items/implants/implantcase.dm b/code/game/objects/items/implants/implantcase.dm index 23f7aec9b199..ef8aeefd0517 100644 --- a/code/game/objects/items/implants/implantcase.dm +++ b/code/game/objects/items/implants/implantcase.dm @@ -1,7 +1,6 @@ /obj/item/implantcase name = "implant case" desc = "A glass case containing an implant." - icon = 'icons/obj/items_and_weapons.dmi' icon_state = "implantcase-0" item_state = "implantcase" lefthand_file = 'icons/mob/inhands/equipment/medical_lefthand.dmi' diff --git a/code/game/objects/items/implants/implanter.dm b/code/game/objects/items/implants/implanter.dm index 6de461954cb2..8f95ef9942d7 100644 --- a/code/game/objects/items/implants/implanter.dm +++ b/code/game/objects/items/implants/implanter.dm @@ -1,7 +1,7 @@ /obj/item/implanter name = "implanter" desc = "A sterile automatic implant injector." - icon = 'icons/obj/items_and_weapons.dmi' + icon = 'icons/obj/items.dmi' icon_state = "implanter0" item_state = "syringe_0" lefthand_file = 'icons/mob/inhands/equipment/medical_lefthand.dmi' diff --git a/code/game/objects/items/implants/implantpad.dm b/code/game/objects/items/implants/implantpad.dm index 37667786262f..ccbda83067a2 100644 --- a/code/game/objects/items/implants/implantpad.dm +++ b/code/game/objects/items/implants/implantpad.dm @@ -1,7 +1,7 @@ /obj/item/implantpad name = "implant pad" desc = "Used to modify implants." - icon = 'icons/obj/items_and_weapons.dmi' + icon = 'icons/obj/items.dmi' icon_state = "implantpad-0" item_state = "electronic" lefthand_file = 'icons/mob/inhands/misc/devices_lefthand.dmi' diff --git a/code/game/objects/items/kitchen.dm b/code/game/objects/items/kitchen.dm index 4186e500ab98..f7ff9c187a9c 100644 --- a/code/game/objects/items/kitchen.dm +++ b/code/game/objects/items/kitchen.dm @@ -1,10 +1,7 @@ /* Kitchen tools * Contains: * Fork - * Kitchen knives - * Ritual Knife * Butcher's cleaver - * Combat Knife * Rolling Pins * Plastic Utensils */ @@ -64,222 +61,6 @@ user.visible_message("[user]'s fork snaps into tiny pieces in their hand.") qdel(src) -/obj/item/kitchen/knife - name = "kitchen knife" - icon = 'icons/obj/item/knife.dmi' - lefthand_file = 'icons/mob/inhands/weapons/knifes_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/knifes_righthand.dmi' - icon_state = "kitchenknife" - item_state = "kitchenknife" - desc = "A general purpose Chef's Knife made by SpaceCook Incorporated. Guaranteed to stay sharp for years to come." - pickup_sound = 'sound/items/handling/knife1_pickup.ogg' - drop_sound = 'sound/items/handling/knife3_drop.ogg' - flags_1 = CONDUCT_1 - force = 10 - w_class = WEIGHT_CLASS_SMALL - throwforce = 10 - hitsound = 'sound/weapons/bladeslice.ogg' - throw_speed = 3 - throw_range = 6 - custom_materials = list(/datum/material/iron=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) - item_flags = EYE_STAB - var/bayonet = FALSE //Can this be attached to a gun? - custom_price = 250 - tool_behaviour = TOOL_KNIFE - -/obj/item/kitchen/knife/ComponentInitialize() - . = ..() - set_butchering() - -///Adds the butchering component, used to override stats for special cases -/obj/item/kitchen/knife/proc/set_butchering() - AddComponent(/datum/component/butchering, 80 - force, 100, force - 10) //bonus chance increases depending on force - -/obj/item/kitchen/knife/plastic - name = "plastic knife" - icon_state = "plastic_knife" - desc = "A very safe, barely sharp knife made of plastic. Good for cutting food and not much else." - force = 0 - w_class = WEIGHT_CLASS_TINY - throwforce = 0 - throw_range = 5 - custom_materials = list(/datum/material/plastic = 100) - attack_verb = list("prodded", "whiffed","scratched", "poked") - sharpness = IS_SHARP - custom_price = 50 - var/break_chance = 25 - -/obj/item/kitchen/knife/plastic/afterattack(mob/living/carbon/user) - .=..() - if(prob(break_chance)) - user.visible_message("[user]'s knife snaps into tiny pieces in their hand.") - qdel(src) - -/obj/item/kitchen/knife/pizza_cutter - name = "pizza cutter" - icon_state = "pizza_cutter" - desc = "A knife edge bent around a circle using the power of science. Perfect for safely cutting pizza." - force = 1 - w_class = WEIGHT_CLASS_SMALL - throwforce = 1 - throw_range = 6 - custom_materials = list(/datum/material/iron=4000) - attack_verb = list("prodded", "whiffed","rolled", "poked") - sharpness = IS_SHARP - -/obj/item/kitchen/knife/ritual - name = "ritual knife" - desc = "The unearthly energies that once powered this blade are now dormant." - icon = 'icons/obj/wizard.dmi' - icon_state = "render" - lefthand_file = 'icons/mob/inhands/equipment/kitchen_lefthand.dmi' - righthand_file = 'icons/mob/inhands/equipment/kitchen_righthand.dmi' - w_class = WEIGHT_CLASS_NORMAL - -/obj/item/kitchen/knife/bloodletter - name = "bloodletter" - desc = "An occult looking dagger that is cold to the touch. Somehow, the flawless orb on the pommel is made entirely of liquid blood." - icon = 'icons/obj/ice_moon/artifacts.dmi' - icon_state = "bloodletter" - w_class = WEIGHT_CLASS_NORMAL - var/bleed_stacks_per_hit = 3 - -/obj/item/kitchen/knife/bloodletter/attack(mob/living/M, mob/living/carbon/user) - . =..() - if(istype(M) && (M.mob_biotypes & MOB_ORGANIC)) - var/datum/status_effect/stacking/saw_bleed/bloodletting/B = M.has_status_effect(/datum/status_effect/stacking/saw_bleed/bloodletting) - if(!B) - M.apply_status_effect(/datum/status_effect/stacking/saw_bleed/bloodletting, bleed_stacks_per_hit) - else - B.add_stacks(bleed_stacks_per_hit) - -/obj/item/kitchen/knife/butcher - name = "butcher's cleaver" - icon_state = "cleaver" - item_state = "cleaver" - desc = "A huge thing used for chopping and chopping up meat." - flags_1 = CONDUCT_1 - force = 15 - throwforce = 10 - custom_materials = list(/datum/material/iron=18000) - attack_verb = list("cleaved", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") - w_class = WEIGHT_CLASS_NORMAL - custom_price = 600 - -/obj/item/kitchen/knife/hunting - name = "hunting knife" - desc = "Despite its name, it's mainly used for cutting meat from dead prey rather than actual hunting." - item_state = "huntingknife" - icon_state = "huntingknife" - -/obj/item/kitchen/knife/hunting/set_butchering() - AddComponent(/datum/component/butchering, 80 - force, 100, force + 10) - -/obj/item/kitchen/knife/switchblade - name = "switchblade" - icon_state = "switchblade" - lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi' - desc = "A sharp, concealable, spring-loaded knife." - flags_1 = CONDUCT_1 - force = 3 - w_class = WEIGHT_CLASS_SMALL - throwforce = 5 - custom_materials = list(/datum/material/iron=12000) - hitsound = 'sound/weapons/genhit.ogg' - attack_verb = list("stubbed", "poked") - resistance_flags = FIRE_PROOF - var/extended = 0 - -/obj/item/kitchen/knife/switchblade/attack_self(mob/user) - extended = !extended - playsound(src.loc, 'sound/weapons/batonextend.ogg', 50, TRUE) - if(extended) - force = 20 - w_class = WEIGHT_CLASS_NORMAL - throwforce = 23 - icon_state = "switchblade_ext" - attack_verb = list("slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") - hitsound = 'sound/weapons/bladeslice.ogg' - sharpness = IS_SHARP - else - force = 3 - w_class = WEIGHT_CLASS_SMALL - throwforce = 5 - icon_state = "switchblade" - attack_verb = list("stubbed", "poked") - hitsound = 'sound/weapons/genhit.ogg' - sharpness = IS_BLUNT - -/obj/item/kitchen/knife/combat - name = "combat knife" - icon = 'icons/obj/world/melee.dmi' - icon_state = "combatknife" - item_state = "combatknife" - desc = "A military combat utility survival knife." - embedding = list("pain_mult" = 4, "embed_chance" = 65, "fall_chance" = 10, "ignore_throwspeed_threshold" = TRUE) - force = 20 - throwforce = 20 - attack_verb = list("slashed", "stabbed", "sliced", "torn", "ripped", "cut") - bayonet = TRUE - -/obj/item/kitchen/knife/combat/Initialize() - . = ..() - AddElement(/datum/element/world_icon, null, icon, 'icons/obj/item/knife.dmi') - -/obj/item/kitchen/knife/combat/survival - name = "survival knife" - icon_state = "survivalknife" - item_state = "survivalknife" - embedding = list("pain_mult" = 4, "embed_chance" = 35, "fall_chance" = 10) - desc = "A hunting grade survival knife." - force = 15 - throwforce = 15 - bayonet = TRUE - -/obj/item/kitchen/knife/combat/bone - name = "bone dagger" - item_state = "bone_dagger" - icon_state = "bone_dagger" - lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi' - desc = "A sharpened bone. The bare minimum in survival." - embedding = list("pain_mult" = 4, "embed_chance" = 35, "fall_chance" = 10) - force = 15 - throwforce = 15 - custom_materials = null - -/obj/item/kitchen/knife/combat/cyborg - name = "cyborg knife" - icon = 'icons/obj/items_cyborg.dmi' - icon_state = "knife_cyborg" - desc = "A cyborg-mounted plasteel knife. Extremely sharp and durable." - -/obj/item/kitchen/knife/shiv - name = "glass shiv" - icon = 'icons/obj/shards.dmi' - icon_state = "shiv" - item_state = "shiv" - lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi' - desc = "A makeshift glass shiv." - force = 8 - throwforce = 12 - 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) - custom_materials = list(/datum/material/glass=400) - -/obj/item/kitchen/knife/shiv/carrot - name = "carrot shiv" - icon_state = "carrotshiv" - item_state = "carrotshiv" - icon = 'icons/obj/kitchen.dmi' - desc = "Unlike other carrots, you should probably keep this far away from your eyes." - custom_materials = null - /obj/item/kitchen/rollingpin name = "rolling pin" desc = "Used to knock out the Bartender." @@ -293,8 +74,6 @@ attack_verb = list("bashed", "battered", "bludgeoned", "thrashed", "whacked") custom_price = 200 -/* Trays moved to /obj/item/storage/bag */ - /obj/item/kitchen/spoon/plastic name = "plastic spoon" desc = "Just be careful your food doesn't melt the spoon first." @@ -305,9 +84,3 @@ custom_materials = list(/datum/material/plastic=120) custom_price = 50 var/break_chance = 25 - -/obj/item/kitchen/knife/plastic/afterattack(mob/living/carbon/user) - .=..() - if(prob(break_chance)) - user.visible_message("[user]'s spoon snaps into tiny pieces in their hand.") - qdel(src) diff --git a/code/game/objects/items/chainsaw.dm b/code/game/objects/items/melee/chainsaw.dm similarity index 98% rename from code/game/objects/items/chainsaw.dm rename to code/game/objects/items/melee/chainsaw.dm index f9181ef3ac6a..494ec65cdb5a 100644 --- a/code/game/objects/items/chainsaw.dm +++ b/code/game/objects/items/melee/chainsaw.dm @@ -4,6 +4,7 @@ name = "chainsaw" desc = "A versatile power tool. Useful for limbing trees and delimbing humans." icon_state = "chainsaw_off" + icon = 'icons/obj/weapon/axe.dmi' lefthand_file = 'icons/mob/inhands/weapons/chainsaw_lefthand.dmi' righthand_file = 'icons/mob/inhands/weapons/chainsaw_righthand.dmi' flags_1 = CONDUCT_1 diff --git a/code/game/objects/items/dualsaber.dm b/code/game/objects/items/melee/dualsaber.dm similarity index 99% rename from code/game/objects/items/dualsaber.dm rename to code/game/objects/items/melee/dualsaber.dm index 7ddb02035927..965979db215a 100644 --- a/code/game/objects/items/dualsaber.dm +++ b/code/game/objects/items/melee/dualsaber.dm @@ -2,7 +2,7 @@ * Double-Bladed Energy Swords - Cheridan */ /obj/item/dualsaber - icon = 'icons/obj/transforming_energy.dmi' + icon = 'icons/obj/weapon/energy.dmi' icon_state = "dualsaber" lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi' righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi' diff --git a/code/game/objects/items/melee/energy.dm b/code/game/objects/items/melee/energy.dm index b500eadca2f2..34219662e53d 100644 --- a/code/game/objects/items/melee/energy.dm +++ b/code/game/objects/items/melee/energy.dm @@ -1,5 +1,5 @@ /obj/item/melee/transforming/energy - icon = 'icons/obj/transforming_energy.dmi' + icon = 'icons/obj/weapon/energy.dmi' hitsound_on = 'sound/weapons/blade1.ogg' heat = 3500 max_integrity = 200 @@ -255,7 +255,6 @@ /obj/item/melee/transforming/energy/ctf name = "energy sword" desc = "That cable over there, I'm going to cut it." - icon = 'icons/obj/items_and_weapons.dmi' icon_state = "plasmasword0" lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi' righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi' diff --git a/code/game/objects/items/energyhalberd.dm b/code/game/objects/items/melee/energyhalberd.dm similarity index 98% rename from code/game/objects/items/energyhalberd.dm rename to code/game/objects/items/melee/energyhalberd.dm index 416964bbfded..62c6f5de6020 100644 --- a/code/game/objects/items/energyhalberd.dm +++ b/code/game/objects/items/melee/energyhalberd.dm @@ -3,8 +3,9 @@ * Copied mostly from dualsaber.dm to avoid inhertance issues */ /obj/item/energyhalberd - icon = 'icons/obj/transforming_energy.dmi' + icon = 'icons/obj/weapon/energy.dmi' icon_state = "halberd" + icon = 'icons/obj/weapon/energy.dmi' lefthand_file = 'icons/mob/inhands/weapons/polearms_lefthand.dmi' righthand_file = 'icons/mob/inhands/weapons/polearms_righthand.dmi' name = "energy halberd" diff --git a/code/game/objects/items/fireaxe.dm b/code/game/objects/items/melee/fireaxe.dm similarity index 72% rename from code/game/objects/items/fireaxe.dm rename to code/game/objects/items/melee/fireaxe.dm index b2e5534a92b0..bfbed0fe361b 100644 --- a/code/game/objects/items/fireaxe.dm +++ b/code/game/objects/items/melee/fireaxe.dm @@ -1,13 +1,7 @@ -/* - * Fireaxe - */ -/obj/item/fireaxe // DEM AXES MAN, marker -Agouri - icon_state = "fireaxe0" - base_icon_state = "fireaxe" +/obj/item/melee/axe + icon = 'icons/obj/weapon/axe.dmi' lefthand_file = 'icons/mob/inhands/weapons/axes_lefthand.dmi' righthand_file = 'icons/mob/inhands/weapons/axes_righthand.dmi' - name = "fire axe" - desc = "Truly, the weapon of a madman. Who would think to fight fire with an axe?" force = 5 throwforce = 15 w_class = WEIGHT_CLASS_BULKY @@ -21,52 +15,58 @@ species_exception = list(/datum/species/kepori) var/wielded = FALSE // track wielded status on item -/obj/item/fireaxe/Initialize() +/obj/item/melee/axe/Initialize() . = ..() RegisterSignal(src, COMSIG_TWOHANDED_WIELD, PROC_REF(on_wield)) RegisterSignal(src, COMSIG_TWOHANDED_UNWIELD, PROC_REF(on_unwield)) -/obj/item/fireaxe/ComponentInitialize() +/obj/item/melee/axe/ComponentInitialize() . = ..() AddComponent(/datum/component/butchering, 100, 80, 0 , hitsound) //axes are not known for being precision butchering tools AddComponent(/datum/component/two_handed, force_unwielded=5, force_wielded=24, icon_wielded="[base_icon_state]1") /// triggered on wield of two handed item -/obj/item/fireaxe/proc/on_wield(obj/item/source, mob/user) +/obj/item/melee/axe/proc/on_wield(obj/item/source, mob/user) SIGNAL_HANDLER wielded = TRUE /// triggered on unwield of two handed item -/obj/item/fireaxe/proc/on_unwield(obj/item/source, mob/user) +/obj/item/melee/axe/proc/on_unwield(obj/item/source, mob/user) SIGNAL_HANDLER wielded = FALSE -/obj/item/fireaxe/update_icon_state() +/obj/item/melee/axe/update_icon_state() icon_state = "[base_icon_state]0" return ..() -/obj/item/fireaxe/afterattack(atom/A, mob/user, proximity) +/obj/item/melee/axe/afterattack(atom/A, mob/user, proximity) . = ..() if(!proximity) return if(wielded) //destroys windows and grilles in one hit if(istype(A, /obj/structure/window) || istype(A, /obj/structure/grille)) var/obj/structure/W = A - W.obj_destruction("fireaxe") + W.obj_destruction("axe") -/* - * Bone Axe - */ -/obj/item/fireaxe/boneaxe // Blatant imitation of the fireaxe, but made out of bone. - icon_state = "bone_axe0" - base_icon_state = "bone_axe" +/obj/item/melee/axe/fire // DEM AXES MAN, marker -Agouri + name = "fire axe" + desc = "Truly, the weapon of a madman. Who would think to fight fire with an axe?" + icon_state = "fireaxe0" + base_icon_state = "fireaxe" + +/obj/item/melee/axe/bone // Blatant imitation of the fireaxe, but made out of bone. name = "bone axe" desc = "A large, vicious axe crafted out of several sharpened bone plates and crudely tied together. Made of monsters, by killing monsters, for killing monsters." - icon = 'icons/obj/items_and_weapons.dmi' + icon_state = "bone_axe0" + base_icon_state = "bone_axe" -/obj/item/fireaxe/boneaxe/ComponentInitialize() - . = ..() - AddComponent(/datum/component/two_handed, force_unwielded=5, force_wielded=23, icon_wielded="[base_icon_state]1") +/obj/item/melee/axe/scrap + name = "scrap axe" + desc = "Oversided and with a pretty dull blade, its decent against armour" + armour_penetration = 10 +/obj/item/melee/axe/scrap/ComponentInitialize() + . = ..() + AddComponent(/datum/component/two_handed, force_unwielded=5, force_wielded=22, icon_wielded="[base_icon_state]1") diff --git a/code/game/objects/items/melee/knife.dm b/code/game/objects/items/melee/knife.dm new file mode 100644 index 000000000000..83022e7125ff --- /dev/null +++ b/code/game/objects/items/melee/knife.dm @@ -0,0 +1,208 @@ +/obj/item/melee/knife + icon_state = "kitchenknife" + item_state = "kitchenknife" + icon = 'icons/obj/weapon/knife.dmi' + lefthand_file = 'icons/mob/inhands/weapons/knifes_lefthand.dmi' + righthand_file = 'icons/mob/inhands/weapons/knifes_righthand.dmi' + pickup_sound = 'sound/items/handling/knife1_pickup.ogg' + drop_sound = 'sound/items/handling/knife3_drop.ogg' + flags_1 = CONDUCT_1 + force = 10 + w_class = WEIGHT_CLASS_SMALL + throwforce = 10 + hitsound = 'sound/weapons/bladeslice.ogg' + throw_speed = 3 + throw_range = 6 + custom_materials = list(/datum/material/iron=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) + item_flags = EYE_STAB + tool_behaviour = TOOL_KNIFE + + +/obj/item/melee/knife/ComponentInitialize() + . = ..() + set_butchering() + +///Adds the butchering component, used to override stats for special cases +/obj/item/melee/knife/proc/set_butchering() + AddComponent(/datum/component/butchering, 80 - force, 100, force - 10) //bonus chance increases depending on force + +/obj/item/melee/knife/kitchen + name = "kitchen knife" + icon_state = "kitchenknife" + item_state = "kitchenknife" + desc = "A general purpose Chef's Knife made by SpaceCook Incorporated. Guaranteed to stay sharp for years to come." + +/obj/item/melee/knife/plastic + name = "plastic knife" + icon_state = "plastic_knife" + desc = "A very safe, barely sharp knife made of plastic. Good for cutting food and not much else." + force = 0 + w_class = WEIGHT_CLASS_TINY + throwforce = 0 + throw_range = 5 + custom_materials = list(/datum/material/plastic = 100) + attack_verb = list("prodded", "whiffed","scratched", "poked") + sharpness = IS_SHARP + custom_price = 50 + var/break_chance = 25 + +/obj/item/melee/knife/plastic/afterattack(mob/living/carbon/user) + .=..() + if(prob(break_chance)) + user.visible_message("[user]'s spoon snaps into tiny pieces in their hand.") + qdel(src) + + +/obj/item/melee/knife/plastic/afterattack(mob/living/carbon/user) + .=..() + if(prob(break_chance)) + user.visible_message("[user]'s knife snaps into tiny pieces in their hand.") + qdel(src) + +/obj/item/melee/knife/pizza_cutter + name = "pizza cutter" + icon_state = "pizza_cutter" + desc = "A knife edge bent around a circle using the power of science. Perfect for safely cutting pizza." + force = 1 + w_class = WEIGHT_CLASS_SMALL + throwforce = 1 + throw_range = 6 + custom_materials = list(/datum/material/iron=4000) + attack_verb = list("prodded", "whiffed","rolled", "poked") + sharpness = IS_SHARP + +/obj/item/melee/knife/butcher + name = "butcher's cleaver" + icon_state = "cleaver" + item_state = "cleaver" + desc = "A huge thing used for chopping and chopping up meat." + flags_1 = CONDUCT_1 + force = 15 + throwforce = 10 + custom_materials = list(/datum/material/iron=18000) + attack_verb = list("cleaved", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") + w_class = WEIGHT_CLASS_NORMAL + custom_price = 600 + +/obj/item/melee/knife/hunting + name = "hunting knife" + desc = "Despite its name, it's mainly used for cutting meat from dead prey rather than actual hunting." + item_state = "huntingknife" + icon_state = "huntingknife" + +/obj/item/melee/knife/hunting/set_butchering() + AddComponent(/datum/component/butchering, 80 - force, 100, force + 10) + +/obj/item/melee/knife/combat + name = "combat knife" + icon_state = "combatknife" + item_state = "combatknife" + desc = "A military combat utility survival knife." + embedding = list("pain_mult" = 4, "embed_chance" = 65, "fall_chance" = 10, "ignore_throwspeed_threshold" = TRUE) + force = 20 + throwforce = 20 + attack_verb = list("slashed", "stabbed", "sliced", "torn", "ripped", "cut") + +/obj/item/melee/knife/survival + name = "survival knife" + icon_state = "survivalknife" + item_state = "survivalknife" + embedding = list("pain_mult" = 4, "embed_chance" = 35, "fall_chance" = 10) + desc = "A hunting grade survival knife." + force = 15 + throwforce = 15 + attack_verb = list("slashed", "stabbed", "sliced", "torn", "ripped", "cut") + +/obj/item/melee/knife/bone + name = "bone dagger" + item_state = "bone_dagger" + icon_state = "bone_dagger" + lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi' + righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi' + desc = "A sharpened bone. The bare minimum in survival." + embedding = list("pain_mult" = 4, "embed_chance" = 35, "fall_chance" = 10) + force = 15 + throwforce = 15 + custom_materials = null + +/obj/item/melee/knife/combat/cyborg + name = "cyborg knife" + icon = 'icons/obj/items_cyborg.dmi' + icon_state = "knife_cyborg" + desc = "A cyborg-mounted plasteel knife. Extremely sharp and durable." + +/obj/item/melee/knife/shiv + name = "glass shiv" + icon = 'icons/obj/shards.dmi' + icon_state = "shiv" + item_state = "shiv" + lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi' + righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi' + desc = "A makeshift glass shiv." + force = 8 + throwforce = 12 + 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) + custom_materials = list(/datum/material/glass=400) + +/obj/item/melee/knife/shiv/carrot + name = "carrot shiv" + icon_state = "carrotshiv" + item_state = "carrotshiv" + icon = 'icons/obj/kitchen.dmi' + desc = "Unlike other carrots, you should probably keep this far away from your eyes." + custom_materials = null + +/obj/item/melee/knife/switchblade + name = "switchblade" + icon_state = "switchblade" + lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi' + righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi' + desc = "A sharp, concealable, spring-loaded knife." + flags_1 = CONDUCT_1 + force = 3 + w_class = WEIGHT_CLASS_SMALL + throwforce = 5 + throw_speed = 3 + throw_range = 6 + custom_materials = list(/datum/material/iron=12000) + hitsound = 'sound/weapons/genhit.ogg' + attack_verb = list("stubbed", "poked") + resistance_flags = FIRE_PROOF + var/extended = 0 + +/obj/item/melee/knife/switchblade/attack_self(mob/user) + extended = !extended + playsound(src.loc, 'sound/weapons/batonextend.ogg', 50, TRUE) + if(extended) + force = 20 + w_class = WEIGHT_CLASS_NORMAL + throwforce = 23 + icon_state = "switchblade_ext" + attack_verb = list("slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") + hitsound = 'sound/weapons/bladeslice.ogg' + sharpness = IS_SHARP + else + force = 3 + w_class = WEIGHT_CLASS_SMALL + throwforce = 5 + icon_state = "switchblade" + attack_verb = list("stubbed", "poked") + hitsound = 'sound/weapons/genhit.ogg' + sharpness = IS_BLUNT + +/obj/item/melee/knife/letter_opener + name = "letter opener" + icon = 'icons/obj/items.dmi' + icon_state = "letter_opener" + desc = "A military combat utility survival knife." + embedding = list("pain_mult" = 4, "embed_chance" = 65, "fall_chance" = 10, "ignore_throwspeed_threshold" = TRUE) + force = 15 + throwforce = 15 + unique_reskin = list("Traditional" = "letter_opener", + "Boxcutter" = "letter_opener_b", + "Corporate" = "letter_opener_a" + ) diff --git a/code/game/objects/items/melee/misc.dm b/code/game/objects/items/melee/misc.dm index 9d90a1a43373..afb4bfe2ec33 100644 --- a/code/game/objects/items/melee/misc.dm +++ b/code/game/objects/items/melee/misc.dm @@ -1,5 +1,14 @@ /obj/item/melee item_flags = NEEDS_PERMIT + icon = 'icons/obj/weapon/misc.dmi' + lefthand_file = 'icons/mob/inhands/weapons/melee_lefthand.dmi' + righthand_file = 'icons/mob/inhands/weapons/melee_righthand.dmi' + var/projectile_block_chance = 0 + +/obj/item/melee/sword/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK) + if(attack_type == PROJECTILE_ATTACK) + final_block_chance = projectile_block_chance //Don't bring a sword to a gunfight + return ..() /obj/item/melee/proc/check_martial_counter(mob/living/carbon/human/target, mob/living/carbon/human/user) if(target.check_block()) @@ -8,14 +17,11 @@ user.Stun(40) return TRUE - /obj/item/melee/chainofcommand name = "chain of command" desc = "A tool used by great men to placate the frothing masses." icon_state = "chain" item_state = "chain" - lefthand_file = 'icons/mob/inhands/weapons/melee_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/melee_righthand.dmi' flags_1 = CONDUCT_1 slot_flags = ITEM_SLOT_BELT force = 10 @@ -44,487 +50,11 @@ . = ..() AddComponent(/datum/component/butchering, 60, 80) //very imprecise -/obj/item/melee/sabre - name = "officer's sabre" - desc = "An elegant weapon, its monomolecular edge is capable of cutting through flesh and bone with ease." - icon_state = "sabre" - item_state = "sabre" - lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi' - pickup_sound = 'sound/items/unsheath.ogg' - drop_sound = 'sound/items/handling/metal_drop.ogg' - flags_1 = CONDUCT_1 - obj_flags = UNIQUE_RENAME - force = 15 - throwforce = 10 - w_class = WEIGHT_CLASS_BULKY - block_chance = 60 - armour_penetration = 75 - sharpness = IS_SHARP - attack_verb = list("slashed", "cut") - hitsound = 'sound/weapons/rapierhit.ogg' - custom_materials = list(/datum/material/iron = 1000) - -/obj/item/melee/sabre/Initialize() - . = ..() - AddComponent(/datum/component/butchering, 30, 95, 5) //fast and effective, but as a sword, it might damage the results. - -/obj/item/melee/sabre/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK) - if(attack_type == PROJECTILE_ATTACK) - final_block_chance = 0 //Don't bring a sword to a gunfight - return ..() - -/obj/item/melee/sabre/on_enter_storage(datum/component/storage/concrete/S) - var/obj/item/storage/belt/sabre/B = S.real_location() - if(istype(B)) - playsound(B, 'sound/items/sheath.ogg', 25, TRUE) - -/obj/item/melee/sabre/solgov - name = "solarian sabre" - desc = "A refined ceremonial blade often given to soldiers and high ranking officials of SolGov." - icon_state = "sabresolgov" - item_state = "sabresolgov" - -/obj/item/melee/sabre/suns - name = "SUNS sabre" - desc = "A blade of Solarian origin given to SUNS followers." - icon_state = "suns-sabre" - item_state = "suns-sabre" - -/obj/item/melee/sabre/suns/captain - name = "SUNS captain sabre" - desc = "An elegant blade awarded to SUNS captains. Despite its higher craftmanship, it appears to be just as effective as a normal sabre." - icon_state = "suns-capsabre" - item_state = "suns-capsabre" - -/obj/item/melee/sabre/suns/cmo - name = "SUNS stick sabre" - desc = "A thin blade used by SUNS medical instructors." - icon_state = "suns-swordstick" - item_state = "suns-swordstick" - -/obj/item/melee/sabre/suns/telescopic - name = "telescopic sabre" - desc = "A telescopic and retractable blade given to SUNS peacekeepers for easy concealment and carry. It's design makes it slightly less effective than normal sabres sadly, however it is still excelent at piercing armor." - icon_state = "suns-tsword" - item_state = "suns-tsword" - force = 0 - throwforce = 0 - block_chance = 0 - - slot_flags = ITEM_SLOT_BELT - w_class = WEIGHT_CLASS_SMALL - attack_verb = list("smacked", "prodded") - - - var/extended = FALSE - var/extend_sound = 'sound/weapons/batonextend.ogg' - - - - var/on_icon_state = "suns-tsword_ext" - var/on_item_state = "suns-tsword_ext" - var/off_icon_state = "suns-tsword" - var/off_item_state = "suns-tsword" - - var/force_on = 10 - var/on_throwforce = 10 - var/on_blockchance = 40 - - var/force_off = 0 - var/off_throwforce = 0 - var/off_blockchance = 0 - - var/weight_class_on = WEIGHT_CLASS_BULKY - -/obj/item/melee/sabre/suns/telescopic/attack_self(mob/user) - extended = !extended - - if(extended) - to_chat(user, "You extend the [src].") - icon_state = on_icon_state - item_state = on_item_state - slot_flags = 0 - w_class = weight_class_on - force = force_on - throwforce = on_throwforce - block_chance = on_blockchance - attack_verb = list("slashed", "cut") - else - to_chat(user, "You collapse the [src].") - icon_state = off_icon_state - item_state = off_item_state - slot_flags = ITEM_SLOT_BELT - w_class = WEIGHT_CLASS_SMALL - force = force_off - throwforce = off_throwforce - block_chance = off_blockchance - attack_verb = list("smacked", "prodded") - - playsound(get_turf(src), extend_sound, 50, TRUE) - add_fingerprint(user) - -/obj/item/melee/beesword - name = "The Stinger" - desc = "Taken from a giant bee and folded over one thousand times in pure honey. Can sting through anything." - icon = 'icons/obj/items_and_weapons.dmi' - icon_state = "beesword" - item_state = "stinger" - lefthand_file = 'icons/mob/inhands/weapons/melee_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/melee_righthand.dmi' - slot_flags = ITEM_SLOT_BELT - force = 5 - w_class = WEIGHT_CLASS_BULKY - sharpness = IS_SHARP - throwforce = 10 - block_chance = 20 - armour_penetration = 65 - attack_verb = list("slashed", "stung", "prickled", "poked") - hitsound = 'sound/weapons/rapierhit.ogg' - -/obj/item/melee/beesword/afterattack(atom/target, mob/user, proximity) - . = ..() - if(!proximity) - return - user.changeNext_move(CLICK_CD_RAPID) - if(iscarbon(target)) - var/mob/living/carbon/H = target - H.reagents.add_reagent(/datum/reagent/toxin, 4) - -/obj/item/melee/classic_baton - name = "police baton" - desc = "A wooden truncheon for beating criminal scum." - icon = 'icons/obj/items_and_weapons.dmi' - icon_state = "classic_baton" - item_state = "classic_baton" - lefthand_file = 'icons/mob/inhands/equipment/security_lefthand.dmi' - righthand_file = 'icons/mob/inhands/equipment/security_righthand.dmi' - slot_flags = ITEM_SLOT_BELT - force = 12 //9 hit crit - w_class = WEIGHT_CLASS_NORMAL - - var/cooldown_check = 0 // Used interally, you don't want to modify - - var/cooldown = 40 // Default wait time until can stun again. - var/knockdown_time_carbon = (1.5 SECONDS) // Knockdown length for carbons. - var/stun_time_silicon = (5 SECONDS) // If enabled, how long do we stun silicons. - var/stamina_damage = 55 // Do we deal stamina damage. - var/affect_silicon = FALSE // Does it stun silicons. - var/on_sound // "On" sound, played when switching between able to stun or not. - var/on_stun_sound = 'sound/effects/woodhit.ogg' // Default path to sound for when we stun. - var/stun_animation = TRUE // Do we animate the "hit" when stunning. - var/on = TRUE // Are we on or off. - - var/on_icon_state // What is our sprite when turned on - var/off_icon_state // What is our sprite when turned off - var/on_item_state // What is our in-hand sprite when turned on - var/force_on // Damage when on - not stunning - var/force_off // Damage when off - not stunning - var/weight_class_on // What is the new size class when turned on - -// Description for trying to stun when still on cooldown. -/obj/item/melee/classic_baton/proc/get_wait_description() - return - -// Description for when turning their baton "on" -/obj/item/melee/classic_baton/proc/get_on_description() - . = list() - - .["local_on"] = "You extend the baton." - .["local_off"] = "You collapse the baton." - - return . - -// Default message for stunning mob. -/obj/item/melee/classic_baton/proc/get_stun_description(mob/living/target, mob/living/user) - . = list() - - .["visible"] = "[user] knocks [target] down with [src]!" - .["local"] = "[user] knocks you down with [src]!" - - return . - -// Default message for stunning a silicon. -/obj/item/melee/classic_baton/proc/get_silicon_stun_description(mob/living/target, mob/living/user) - . = list() - - .["visible"] = "[user] pulses [target]'s sensors with the baton!" - .["local"] = "You pulse [target]'s sensors with the baton!" - - return . - -// Are we applying any special effects when we stun to carbon -/obj/item/melee/classic_baton/proc/additional_effects_carbon(mob/living/target, mob/living/user) - return - -// Are we applying any special effects when we stun to silicon -/obj/item/melee/classic_baton/proc/additional_effects_silicon(mob/living/target, mob/living/user) - return - -/obj/item/melee/classic_baton/attack(mob/living/target, mob/living/user) - if(!on) - return ..() - - add_fingerprint(user) - if((HAS_TRAIT(user, TRAIT_CLUMSY)) && prob(50)) - to_chat(user, "You hit yourself over the head!") - - user.Paralyze(knockdown_time_carbon * force) - user.apply_damage(stamina_damage, STAMINA, BODY_ZONE_HEAD) - - additional_effects_carbon(user) // user is the target here - if(ishuman(user)) - var/mob/living/carbon/human/H = user - H.apply_damage(2*force, BRUTE, BODY_ZONE_HEAD) - else - user.take_bodypart_damage(2*force) - return - if(iscyborg(target)) - // We don't stun if we're on harm. - if (user.a_intent != INTENT_HARM) - if (affect_silicon) - var/list/desc = get_silicon_stun_description(target, user) - - target.flash_act(affect_silicon = TRUE) - target.Paralyze(stun_time_silicon) - additional_effects_silicon(target, user) - - user.visible_message(desc["visible"], desc["local"]) - playsound(get_turf(src), on_stun_sound, 100, TRUE, -1) - - if (stun_animation) - user.do_attack_animation(target) - else - ..() - else - ..() - return - if(!isliving(target)) - return - if (user.a_intent == INTENT_HARM) - if(!..()) - return - if(!iscyborg(target)) - return - else - if(cooldown_check <= world.time) - if(ishuman(target)) - var/mob/living/carbon/human/H = target - if (H.check_shields(src, 0, "[user]'s [name]", MELEE_ATTACK)) - return - if(check_martial_counter(H, user)) - return - - var/list/desc = get_stun_description(target, user) - - if (stun_animation) - user.do_attack_animation(target) - - playsound(get_turf(src), on_stun_sound, 75, TRUE, -1) - target.Knockdown(knockdown_time_carbon) - target.apply_damage(stamina_damage, STAMINA, BODY_ZONE_CHEST) - additional_effects_carbon(target, user) - - log_combat(user, target, "stunned", src) - add_fingerprint(user) - - target.visible_message(desc["visible"], desc["local"]) - - if(!iscarbon(user)) - target.LAssailant = null - else - target.LAssailant = WEAKREF(user) - cooldown_check = world.time + cooldown - else - var/wait_desc = get_wait_description() - if (wait_desc) - to_chat(user, wait_desc) - -/obj/item/conversion_kit - name = "conversion kit" - desc = "A strange box containing wood working tools and an instruction paper to turn stun batons into something else." - icon = 'icons/obj/storage.dmi' - icon_state = "uk" - custom_price = 450 - -/obj/item/melee/classic_baton/telescopic - name = "telescopic baton" - desc = "A compact yet robust personal defense weapon. Can be concealed when folded." - icon = 'icons/obj/items_and_weapons.dmi' - icon_state = "telebaton_0" - lefthand_file = 'icons/mob/inhands/weapons/melee_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/melee_righthand.dmi' - item_state = null - slot_flags = ITEM_SLOT_BELT - w_class = WEIGHT_CLASS_SMALL - item_flags = NONE - force = 0 - on = FALSE - on_sound = 'sound/weapons/batonextend.ogg' - - on_icon_state = "telebaton_1" - off_icon_state = "telebaton_0" - on_item_state = "nullrod" - force_on = 10 - force_off = 0 - weight_class_on = WEIGHT_CLASS_BULKY - -/obj/item/melee/classic_baton/telescopic/attack_self(mob/user) - on = !on - var/list/desc = get_on_description() - - if(on) - to_chat(user, desc["local_on"]) - icon_state = on_icon_state - item_state = on_item_state - w_class = weight_class_on - force = force_on - attack_verb = list("smacked", "struck", "cracked", "beaten") - else - to_chat(user, desc["local_off"]) - icon_state = off_icon_state - item_state = null //no sprite for concealment even when in hand - slot_flags = ITEM_SLOT_BELT - w_class = WEIGHT_CLASS_SMALL - force = force_off - attack_verb = list("hit", "poked") - - playsound(src.loc, on_sound, 50, TRUE) - add_fingerprint(user) - -/obj/item/melee/classic_baton/telescopic/contractor_baton - name = "contractor baton" - desc = "A compact, specialised baton assigned to Syndicate contractors. Applies light electrical shocks to targets." - icon = 'icons/obj/items_and_weapons.dmi' - icon_state = "contractor_baton_0" - lefthand_file = 'icons/mob/inhands/weapons/melee_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/melee_righthand.dmi' - item_state = null - slot_flags = ITEM_SLOT_BELT - w_class = WEIGHT_CLASS_SMALL - item_flags = NONE - force = 5 - - cooldown = 25 - stamina_damage = 85 - affect_silicon = TRUE - on_sound = 'sound/weapons/contractorbatonextend.ogg' - on_stun_sound = 'sound/effects/contractorbatonhit.ogg' - - on_icon_state = "contractor_baton_1" - off_icon_state = "contractor_baton_0" - on_item_state = "contractor_baton" - force_on = 16 - force_off = 5 - weight_class_on = WEIGHT_CLASS_NORMAL - -/obj/item/melee/classic_baton/telescopic/contractor_baton/get_wait_description() - return "The baton is still charging!" - -/obj/item/melee/classic_baton/telescopic/contractor_baton/additional_effects_carbon(mob/living/target, mob/living/user) - target.Jitter(20) - target.stuttering += 20 - -/obj/item/melee/supermatter_sword - name = "supermatter sword" - desc = "In a universe full of bad ideas, this might just be the worst." - icon = 'icons/obj/items_and_weapons.dmi' - icon_state = "supermatter_sword" - item_state = "supermatter_sword" - lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi' - slot_flags = null - w_class = WEIGHT_CLASS_BULKY - force = 0.001 - armour_penetration = 1000 - var/obj/machinery/power/supermatter_crystal/shard - var/balanced = 1 - force_string = "INFINITE" - -/obj/item/melee/supermatter_sword/Initialize() - . = ..() - shard = new /obj/machinery/power/supermatter_crystal(src) - qdel(shard.countdown) - shard.countdown = null - START_PROCESSING(SSobj, src) - visible_message("[src] appears, balanced ever so perfectly on its hilt. This isn't ominous at all.") - -/obj/item/melee/supermatter_sword/process() - if(balanced || throwing || ismob(src.loc) || isnull(src.loc)) - return - if(!isturf(src.loc)) - var/atom/target = src.loc - forceMove(target.loc) - consume_everything(target) - else - var/turf/T = get_turf(src) - if(!isspaceturf(T)) - consume_turf(T) - -/obj/item/melee/supermatter_sword/afterattack(target, mob/user, proximity_flag) - . = ..() - if(user && target == user) - user.dropItemToGround(src) - if(proximity_flag) - consume_everything(target) - -/obj/item/melee/supermatter_sword/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum) - ..() - if(ismob(hit_atom)) - var/mob/M = hit_atom - if(src.loc == M) - M.dropItemToGround(src) - consume_everything(hit_atom) - -/obj/item/melee/supermatter_sword/pickup(user) - ..() - balanced = 0 - -/obj/item/melee/supermatter_sword/ex_act(severity, target) - visible_message("The blast wave smacks into [src] and rapidly flashes to ash.",\ - "You hear a loud crack as you are washed with a wave of heat.") - consume_everything() - -/obj/item/melee/supermatter_sword/acid_act() - visible_message("The acid smacks into [src] and rapidly flashes to ash.",\ - "You hear a loud crack as you are washed with a wave of heat.") - consume_everything() - -/obj/item/melee/supermatter_sword/bullet_act(obj/projectile/P) - visible_message("[P] smacks into [src] and rapidly flashes to ash.",\ - "You hear a loud crack as you are washed with a wave of heat.") - consume_everything(P) - return BULLET_ACT_HIT - - -/obj/item/melee/supermatter_sword/proc/consume_everything(target) - if(isnull(target)) - shard.Consume() - else if(!isturf(target)) - shard.Bumped(target) - else - consume_turf(target) - -/obj/item/melee/supermatter_sword/proc/consume_turf(turf/T) - var/oldtype = T.type - var/turf/newT = T.ScrapeAway(flags = CHANGETURF_INHERIT_AIR) - if(newT.type == oldtype) - return - playsound(T, 'sound/effects/supermatter.ogg', 50, TRUE) - T.visible_message("[T] smacks into [src] and rapidly flashes to ash.",\ - "You hear a loud crack as you are washed with a wave of heat.") - shard.Consume() - -/obj/item/melee/supermatter_sword/add_blood_DNA(list/blood_dna) - return FALSE - /obj/item/melee/curator_whip name = "curator's whip" desc = "Somewhat eccentric and outdated, it still stings like hell to be hit by." icon_state = "whip" item_state = "chain" - lefthand_file = 'icons/mob/inhands/weapons/melee_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/melee_righthand.dmi' slot_flags = ITEM_SLOT_BELT force = 15 w_class = WEIGHT_CLASS_NORMAL @@ -538,345 +68,128 @@ H.drop_all_held_items() H.visible_message("[user] disarms [H]!", "[user] disarmed you!") -/obj/item/melee/roastingstick - name = "advanced roasting stick" - desc = "A telescopic roasting stick with a miniature shield generator designed to ensure entry into various high-tech shielded cooking ovens and firepits." - icon_state = "roastingstick_0" - item_state = "null" +/obj/item/melee/cleric_mace + name = "cleric mace" + desc = "The grandson of the club, yet the grandfather of the baseball bat. Most notably used by holy orders in days past." + icon_state = "mace_greyscale" + item_state = "mace_greyscale" + material_flags = MATERIAL_ADD_PREFIX | MATERIAL_COLOR | MATERIAL_AFFECT_STATISTICS //Material type changes the prefix as well as the color. + custom_materials = list(/datum/material/iron = 12000) //Defaults to an Iron Mace. slot_flags = ITEM_SLOT_BELT - w_class = WEIGHT_CLASS_SMALL - item_flags = NONE - force = 0 - attack_verb = list("hit", "poked") - var/obj/item/reagent_containers/food/snacks/sausage/held_sausage - var/static/list/ovens - var/on = FALSE - var/datum/beam/beam - -/obj/item/melee/roastingstick/Initialize() - . = ..() - if (!ovens) - ovens = typecacheof(list(/obj/singularity, /obj/machinery/power/supermatter_crystal, /obj/structure/bonfire)) - -/obj/item/melee/roastingstick/attack_self(mob/user) - on = !on - if(on) - extend(user) - else - if (held_sausage) - to_chat(user, "You can't retract [src] while [held_sausage] is attached!") - return - retract(user) - - playsound(src.loc, 'sound/weapons/batonextend.ogg', 50, TRUE) - add_fingerprint(user) - -/obj/item/melee/roastingstick/attackby(atom/target, mob/user) - ..() - if (istype(target, /obj/item/reagent_containers/food/snacks/sausage)) - if (!on) - to_chat(user, "You must extend [src] to attach anything to it!") - return - if (held_sausage) - to_chat(user, "[held_sausage] is already attached to [src]!") - return - if (user.transferItemToLoc(target, src)) - held_sausage = target - else - to_chat(user, "[target] doesn't seem to want to get on [src]!") - update_appearance() - -/obj/item/melee/roastingstick/attack_hand(mob/user) - ..() - if (held_sausage) - user.put_in_hands(held_sausage) - held_sausage = null - update_appearance() - -/obj/item/melee/roastingstick/update_overlays() - . = ..() - if (held_sausage) - . += mutable_appearance(icon, "roastingstick_sausage") - -/obj/item/melee/roastingstick/proc/extend(user) - to_chat(user, "You extend [src].") - icon_state = "roastingstick_1" - item_state = "nullrod" + force = 14 w_class = WEIGHT_CLASS_BULKY - -/obj/item/melee/roastingstick/proc/retract(user) - to_chat(user, "You collapse [src].") - icon_state = "roastingstick_0" - item_state = null - w_class = WEIGHT_CLASS_SMALL - -/obj/item/melee/roastingstick/handle_atom_del(atom/target) - if (target == held_sausage) - held_sausage = null - update_appearance() - -/obj/item/melee/roastingstick/afterattack(atom/target, mob/user, proximity) - . = ..() - if (!on) - return - if (is_type_in_typecache(target, ovens)) - if (held_sausage && held_sausage.roasted) - to_chat(src, "Your [held_sausage] has already been cooked!") - return - if (istype(target, /obj/singularity) && get_dist(user, target) < 10) - to_chat(user, "You send [held_sausage] towards [target].") - playsound(src, 'sound/items/rped.ogg', 50, TRUE) - beam = user.Beam(target,icon_state="rped_upgrade",time=100) - else if (user.Adjacent(target)) - to_chat(user, "You extend [src] towards [target].") - playsound(src.loc, 'sound/weapons/batonextend.ogg', 50, TRUE) - else - return - if(do_after(user, 100, target = user)) - finish_roasting(user, target) - else - QDEL_NULL(beam) - playsound(src, 'sound/weapons/batonextend.ogg', 50, TRUE) - -/obj/item/melee/roastingstick/proc/finish_roasting(user, atom/target) - to_chat(user, "You finish roasting [held_sausage].") - playsound(src,'sound/items/welder2.ogg',50,TRUE) - held_sausage.add_atom_colour(rgb(103,63,24), FIXED_COLOUR_PRIORITY) - held_sausage.name = "[target.name]-roasted [held_sausage.name]" - held_sausage.desc = "[held_sausage.desc] It has been cooked to perfection on \a [target]." - update_appearance() - -/obj/item/melee/greykingsword - name = "blade of the grey-king" - desc = "A legendary sword made with 3 replica katanas nailed together and dipped in heavy narcotics." - icon = 'icons/obj/items_and_weapons.dmi' - icon_state = "grey_sword" - item_state = "swordoff" - lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi' - flags_1 = CONDUCT_1 - slot_flags = ITEM_SLOT_BACK - force = 15 throwforce = 8 - w_class = WEIGHT_CLASS_NORMAL - block_chance = 30 - attack_verb = list("struck", "slashed", "mall-ninjad", "tided", "multi-shanked", "shredded") - custom_materials = list(/datum/material/iron = 1420) - sharpness = IS_SHARP - - var/prick_chance = 50 - var/prick_chems = list( - /datum/reagent/toxin = 10, - /datum/reagent/toxin/mindbreaker = 10, - /datum/reagent/drug/space_drugs = 10, - /datum/reagent/drug/crank = 5, - /datum/reagent/drug/methamphetamine = 5, - /datum/reagent/drug/bath_salts = 5, - /datum/reagent/drug/aranesp = 5, - /datum/reagent/drug/pumpup = 10, - /datum/reagent/medicine/omnizine = 10, - /datum/reagent/medicine/earthsblood = 15, - /datum/reagent/medicine/omnizine/protozine = 15 - ) - -/obj/item/melee/greykingsword/afterattack(atom/target, mob/user, proximity_flag, click_parameters) - if (iscarbon(target) && prob(prick_chance)) - var/mob/living/carbon/C = target - var/datum/reagent/R = pick(prick_chems) - C.reagents.add_reagent(R, prick_chems[R]) - C.visible_message("[user] is pricked!", \ - "You've been pricked by the [src]!") - log_combat(user, C, "pricked", src.name, "with [prick_chems[R]]u of [R]") - return ..() - - -/obj/item/melee/greykingsword/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text, final_block_chance, damage, attack_type) - if(attack_type == PROJECTILE_ATTACK) - final_block_chance = 1 //Still not like your Japaniese animes though. - return ..() - -/obj/item/kitchen/knife/letter_opener - name = "letter opener" - icon = 'icons/obj/items_and_weapons.dmi' - icon_state = "letter_opener" - desc = "A military combat utility survival knife." - embedding = list("pain_mult" = 4, "embed_chance" = 65, "fall_chance" = 10, "ignore_throwspeed_threshold" = TRUE) - force = 15 - throwforce = 15 - unique_reskin = list("Traditional" = "letter_opener", - "Boxcutter" = "letter_opener_b", - "Corporate" = "letter_opener_a" - ) -/obj/item/melee/weebstick - name = "Weeb Stick" - desc = "Glorious nippon steel, folded 1000 times." - icon = 'icons/obj/items_and_weapons.dmi' - icon_state = "weeb_blade" - item_state = "weeb_blade" - lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi' - pickup_sound = 'sound/items/handling/knife2_pickup.ogg' - drop_sound = 'sound/items/handling/metal_drop.ogg' - flags_1 = CONDUCT_1 - obj_flags = UNIQUE_RENAME - w_class = WEIGHT_CLASS_BULKY - slot_flags = ITEM_SLOT_BACK - sharpness = IS_SHARP_ACCURATE - force = 25 - throw_speed = 4 - throw_range = 5 - throwforce = 12 - block_chance = 20 armour_penetration = 50 - hitsound = 'sound/weapons/anime_slash.ogg' - attack_verb = list("attacked", "slashed", "stabbed", "sliced", "diced", "cut") + attack_verb = list("smacked", "struck", "cracked", "beaten") + var/overlay_state = "mace_handle" + var/mutable_appearance/overlay -/obj/item/melee/weebstick/Initialize() +/obj/item/melee/cleric_mace/Initialize() . = ..() - AddComponent(/datum/component/butchering, 25, 90, 5) //Not made for scalping victims, but will work nonetheless - -/obj/item/melee/weebstick/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK) - if(attack_type == PROJECTILE_ATTACK) - final_block_chance = block_chance / 2 //Pretty good... - return ..() - -/obj/item/melee/weebstick/on_exit_storage(datum/component/storage/concrete/S) - var/obj/item/storage/belt/weebstick/B = S.real_location() - if(istype(B)) - playsound(B, 'sound/items/unsheath.ogg', 25, TRUE) - -/obj/item/melee/weebstick/on_enter_storage(datum/component/storage/concrete/S) - var/obj/item/storage/belt/weebstick/B = S.real_location() - if(istype(B)) - playsound(B, 'sound/items/sheath.ogg', 25, TRUE) - -/obj/item/storage/belt/weebstick - name = "nanoforged blade sheath" - desc = "It yearns to bath in the blood of your enemies... but you hold it back!" - icon = 'icons/obj/items_and_weapons.dmi' - icon_state = "weeb_sheath" - item_state = "sheath" - w_class = WEIGHT_CLASS_BULKY - force = 3 - var/primed = FALSE //Prerequisite to anime bullshit - // ##The anime bullshit## - Mostly stolen from action/innate/dash - var/dash_sound = 'sound/weapons/unsheathed_blade.ogg' - var/beam_effect = "blood_beam" - var/phasein = /obj/effect/temp_visual/dir_setting/cult/phase - var/phaseout = /obj/effect/temp_visual/dir_setting/cult/phase - -/obj/item/storage/belt/weebstick/ComponentInitialize() - . = ..() - AddElement(/datum/element/update_icon_updates_onmob) - var/datum/component/storage/STR = GetComponent(/datum/component/storage) - STR.max_items = 1 - STR.use_sound = null - STR.max_w_class = WEIGHT_CLASS_BULKY - STR.set_holdable(list( - /obj/item/melee/weebstick - )) + overlay = mutable_appearance(icon, overlay_state) + overlay.appearance_flags = RESET_COLOR + add_overlay(overlay) + +/obj/item/melee/baseball_bat + name = "baseball bat" + desc = "There ain't a skull in the league that can withstand a swatter." + icon = 'icons/obj/weapon/blunt.dmi' + icon_state = "baseball_bat" + item_state = "baseball_bat" + force = 12 + throwforce = 12 + attack_verb = list("beat", "smacked") + custom_materials = list(/datum/material/wood = MINERAL_MATERIAL_AMOUNT * 3.5) + w_class = WEIGHT_CLASS_HUGE + var/homerun_ready = 0 + var/homerun_able = 0 -/obj/item/storage/belt/weebstick/examine(mob/user) - . = ..() - if(length(contents)) - . += "Use [src] in-hand to prime for an opening strike." - . += "Alt-click it to quickly draw the blade." +/obj/item/melee/baseball_bat/homerun + name = "home run bat" + desc = "This thing looks dangerous... Dangerously good at baseball, that is." + homerun_able = 1 -/obj/item/storage/belt/weebstick/AltClick(mob/user) - if(!iscarbon(user) || !user.canUseTopic(src, BE_CLOSE, ismonkey(user)) || primed) +/obj/item/melee/baseball_bat/attack_self(mob/user) + if(!homerun_able) + ..() return - if(length(contents)) - var/obj/item/I = contents[1] - playsound(user, dash_sound, 25, TRUE) - user.visible_message("[user] swiftly draws \the [I].", "You draw \the [I].") - user.put_in_hands(I) - update_appearance() - else - to_chat(user, "[src] is empty!") - -/obj/item/storage/belt/weebstick/attack_self(mob/user) - if(!iscarbon(user) || !user.canUseTopic(src, BE_CLOSE, ismonkey(user))) + if(homerun_ready) + to_chat(user, "You're already ready to do a home run!") + ..() return - if(length(contents)) - var/datum/component/storage/CP = GetComponent(/datum/component/storage) - if(primed) - CP.locked = FALSE - playsound(user, 'sound/items/sheath.ogg', 25, TRUE) - to_chat(user, "You return your stance.") - primed = FALSE - update_appearance() - else - CP.locked = TRUE //Prevents normal removal of the blade while primed - playsound(user, 'sound/items/unsheath.ogg', 25, TRUE) - user.visible_message("[user] grips the blade within [src] and primes to attack.", "You take an opening stance...", "You hear a weapon being drawn...") - primed = TRUE - update_appearance() - else - to_chat(user, "[src] is empty!") + to_chat(user, "You begin gathering strength...") + playsound(get_turf(src), 'sound/magic/lightning_chargeup.ogg', 65, TRUE) + if(do_after(user, 90, target = src)) + to_chat(user, "You gather power! Time for a home run!") + homerun_ready = 1 + ..() -/obj/item/storage/belt/weebstick/afterattack(atom/A, mob/living/user, proximity_flag, params) +/obj/item/melee/baseball_bat/attack(mob/living/target, mob/living/user) . = ..() - if(primed && length(contents)) - if(!(A in view(user.client.view, user))) - return - var/obj/item/I = contents[1] - if(!user.put_in_inactive_hand(I)) - to_chat(user, "You need a free hand!") - return - var/datum/component/storage/CP = GetComponent(/datum/component/storage) - CP.locked = FALSE - primed = FALSE - update_appearance() - primed_attack(A, user) - if(CanReach(A, I)) - I.melee_attack_chain(user, A, params) - user.swap_hand() - -/obj/item/storage/belt/weebstick/proc/primed_attack(atom/target, mob/living/user) - var/turf/end = get_turf(user) - var/turf/start = get_turf(user) - var/obj/spot1 = new phaseout(start, user.dir) - var/halt = FALSE - // Stolen dash code - for(var/T in getline(start, get_turf(target))) - var/turf/tile = T - for(var/mob/living/victim in tile) - if(victim != user) - playsound(victim, 'sound/weapons/anime_slash.ogg', 10, TRUE) - victim.take_bodypart_damage(15) - // Unlike actual ninjas, we stop noclip-dashing here. - if(isclosedturf(T)) - halt = TRUE - for(var/obj/O in tile) - // We ignore mobs as we are cutting through them - if(!O.CanPass(user, tile)) - halt = TRUE - if(halt) - break - else - end = T - user.forceMove(end) // YEET - playsound(start, dash_sound, 35, TRUE) - var/obj/spot2 = new phasein(end, user.dir) - spot1.Beam(spot2, beam_effect, time=20) - user.visible_message("In a flash of red, [user] draws [user.p_their()] blade!", "You dash forward while drawing your weapon!", "You hear a blade slice through the air at impossible speeds!") + var/atom/throw_target = get_edge_target_turf(target, user.dir) + if(homerun_ready) + user.visible_message("It's a home run!") + target.throw_at(throw_target, rand(8,10), 14, user) + SSexplosions.medturf += throw_target + playsound(get_turf(src), 'sound/weapons/homerun.ogg', 100, TRUE) + homerun_ready = 0 + return + else if(!target.anchored) + target.throw_at(throw_target, rand(1,2), 2, user, gentle = TRUE) + +/obj/item/melee/baseball_bat/ablative + name = "metal baseball bat" + desc = "This bat is made of highly reflective, highly armored material." + icon_state = "baseball_bat_metal" + item_state = "baseball_bat_metal" + force = 12 + throwforce = 15 -/obj/item/storage/belt/weebstick/update_icon_state() - icon_state = "weeb_sheath" - item_state = "sheath" - if(contents.len) - if(primed) - icon_state += "-primed" - else - icon_state += "-blade" - item_state += "-sabre" - return ..() +/obj/item/melee/baseball_bat/bone + name = "bone club" + desc = "A long and hard shaft of rock solid bone." // I am the master of comedy + icon_state = "baseball_bat_bone" + item_state = "baseball_bat_bone" + +/obj/item/melee/baseball_bat/ablative/IsReflect()//some day this will reflect thrown items instead of lasers + var/picksound = rand(1,2) + var/turf = get_turf(src) + if(picksound == 1) + playsound(turf, 'sound/weapons/effects/batreflect1.ogg', 50, TRUE) + if(picksound == 2) + playsound(turf, 'sound/weapons/effects/batreflect2.ogg', 50, TRUE) + return 1 + +/obj/item/melee/flyswatter + name = "flyswatter" + desc = "Useful for killing insects of all sizes." + icon_state = "flyswatter" + item_state = "flyswatter" + force = 1 + throwforce = 1 + attack_verb = list("swatted", "smacked") + hitsound = 'sound/effects/snap.ogg' + w_class = WEIGHT_CLASS_SMALL + //Things in this list will be instantly splatted. Flyman weakness is handled in the flyman species weakness proc. + var/list/strong_against -/obj/item/storage/belt/weebstick/PopulateContents() - //Time to generate names now that we have the sword - var/n_title = pick(GLOB.ninja_titles) - var/n_name = pick(GLOB.ninja_names) - var/obj/item/melee/weebstick/sword = new /obj/item/melee/weebstick(src) - sword.name = "[n_title] blade of clan [n_name]" - name = "[n_title] scabbard of clan [n_name]" - update_appearance() +/obj/item/melee/flyswatter/Initialize() + . = ..() + strong_against = typecacheof(list( + /mob/living/simple_animal/hostile/poison/bees/, + /mob/living/simple_animal/butterfly, + /mob/living/simple_animal/hostile/cockroach, + /obj/item/queen_bee + )) + +/obj/item/melee/flyswatter/afterattack(atom/target, mob/user, proximity_flag) + . = ..() + if(proximity_flag) + if(is_type_in_typecache(target, strong_against)) + new /obj/effect/decal/cleanable/insectguts(target.drop_location()) + to_chat(user, "You easily splat the [target].") + if(istype(target, /mob/living/)) + var/mob/living/bug = target + bug.death(1) + else + qdel(target) diff --git a/code/game/objects/items/powerfist.dm b/code/game/objects/items/melee/powerfist.dm similarity index 100% rename from code/game/objects/items/powerfist.dm rename to code/game/objects/items/melee/powerfist.dm diff --git a/code/game/objects/items/melee/spear.dm b/code/game/objects/items/melee/spear.dm new file mode 100644 index 000000000000..42717117fd8e --- /dev/null +++ b/code/game/objects/items/melee/spear.dm @@ -0,0 +1,137 @@ +//spears +/obj/item/melee/spear + icon_state = "spearglass0" + icon = 'icons/obj/weapon/spear.dmi' + lefthand_file = 'icons/mob/inhands/weapons/polearms_lefthand.dmi' + righthand_file = 'icons/mob/inhands/weapons/polearms_righthand.dmi' + name = "spear" + desc = "A haphazardly-constructed yet still deadly weapon of ancient design." + force = 10 + w_class = WEIGHT_CLASS_BULKY + slot_flags = ITEM_SLOT_BACK + throwforce = 20 + throw_speed = 4 + embedding = list("impact_pain_mult" = 3) + armour_penetration = 10 + custom_materials = list(/datum/material/iron=1150, /datum/material/glass=2075) + hitsound = 'sound/weapons/bladeslice.ogg' + attack_verb = list("attacked", "poked", "jabbed", "torn", "gored") + sharpness = IS_SHARP + max_integrity = 200 + armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 30) + species_exception = list(/datum/species/kepori) + var/icon_prefix = "spearglass" + +/obj/item/melee/spear/ComponentInitialize() + . = ..() + AddComponent(/datum/component/butchering, 100, 70) //decent in a pinch, but pretty bad. + AddComponent(/datum/component/jousting) + AddComponent(/datum/component/two_handed, force_unwielded=10, force_wielded=18, icon_wielded="[icon_prefix]1") + +/obj/item/melee/spear/update_icon_state() + icon_state = "[icon_prefix]0" + return ..() + +/obj/item/melee/spear/CheckParts(list/parts_list) + var/obj/item/shard/tip = locate() in parts_list + if (istype(tip, /obj/item/shard/plasma)) + throwforce = 21 + icon_prefix = "spearplasma" + AddComponent(/datum/component/two_handed, force_unwielded=11, force_wielded=19, icon_wielded="[icon_prefix]1") + update_appearance() + qdel(tip) + ..() + +/* + * Bone Spear + */ +/obj/item/melee/spear/bone //Blatant imitation of spear, but made out of bone. Not valid for explosive modification. + icon_state = "bone_spear0" + name = "bone spear" + base_icon_state = "bone_spear0" + icon_prefix = "bone_spear" + desc = "A haphazardly-constructed yet still deadly weapon. The pinnacle of modern technology." + //this should be a plasma spear or worse. + force = 11 + throwforce = 21 + +/obj/item/melee/spear/bone/ComponentInitialize() + . = ..() + AddComponent(/datum/component/two_handed, force_unwielded=11, force_wielded=19, icon_wielded="[icon_prefix]1") + +/obj/item/melee/spear/explosive + name = "explosive lance" + icon_state = "spearbomb0" + base_icon_state = "spearbomb" + icon_prefix = "spearbomb" + var/obj/item/grenade/explosive = null + var/war_cry = "AAAAARGH!!!" + var/wielded = FALSE // track wielded status on item + +/obj/item/melee/spear/explosive/Initialize(mapload) + . = ..() + RegisterSignal(src, COMSIG_TWOHANDED_WIELD, PROC_REF(on_wield)) + RegisterSignal(src, COMSIG_TWOHANDED_UNWIELD, PROC_REF(on_unwield)) + set_explosive(new /obj/item/grenade/iedcasing/spawned()) //For admin-spawned explosive lances + +/obj/item/melee/spear/explosive/ComponentInitialize() + . = ..() + AddComponent(/datum/component/two_handed, force_unwielded=10, force_wielded=18, icon_wielded="[icon_prefix]1") + +/// triggered on wield of two handed item +/obj/item/melee/spear/explosive/proc/on_wield(obj/item/source, mob/user) + SIGNAL_HANDLER + + wielded = TRUE + +/// triggered on unwield of two handed item +/obj/item/melee/spear/explosive/proc/on_unwield(obj/item/source, mob/user) + SIGNAL_HANDLER + + wielded = FALSE + +/obj/item/melee/spear/explosive/proc/set_explosive(obj/item/grenade/G) + if(explosive) + QDEL_NULL(explosive) + G.forceMove(src) + explosive = G + desc = "A makeshift spear with [G] attached to it" + +/obj/item/melee/spear/explosive/CheckParts(list/parts_list) + var/obj/item/grenade/G = locate() in parts_list + if(G) + var/obj/item/melee/spear/lancePart = locate() in parts_list + var/datum/component/two_handed/comp_twohand = lancePart.GetComponent(/datum/component/two_handed) + if(comp_twohand) + var/lance_wielded = comp_twohand.force_wielded + var/lance_unwielded = comp_twohand.force_unwielded + AddComponent(/datum/component/two_handed, force_unwielded=lance_unwielded, force_wielded=lance_wielded) + throwforce = lancePart.throwforce + icon_prefix = lancePart.icon_prefix + parts_list -= G + parts_list -= lancePart + set_explosive(G) + qdel(lancePart) + ..() + +/obj/item/melee/spear/explosive/examine(mob/user) + . = ..() + . += "Alt-click to set your war cry." + +/obj/item/melee/spear/explosive/AltClick(mob/user) + if(user.canUseTopic(src, BE_CLOSE)) + ..() + if(istype(user) && loc == user) + var/input = stripped_input(user,"What do you want your war cry to be? You will shout it when you hit someone in melee.", ,"", 50) + if(input) + src.war_cry = input + +/obj/item/melee/spear/explosive/afterattack(atom/movable/AM, mob/user, proximity) + . = ..() + if(!proximity) + return + if(wielded) + user.say("[war_cry]", forced="spear warcry") + explosive.forceMove(AM) + explosive.prime() + qdel(src) diff --git a/code/game/objects/items/stunbaton.dm b/code/game/objects/items/melee/stunbaton.dm similarity index 59% rename from code/game/objects/items/stunbaton.dm rename to code/game/objects/items/melee/stunbaton.dm index 3265b36a3b41..05225d80cff8 100644 --- a/code/game/objects/items/stunbaton.dm +++ b/code/game/objects/items/melee/stunbaton.dm @@ -1,7 +1,7 @@ /obj/item/melee/baton name = "stun baton" desc = "A stun baton for incapacitating people with." - + icon = 'icons/obj/weapon/baton.dmi' icon_state = "stunbaton" item_state = "baton" lefthand_file = 'icons/mob/inhands/equipment/security_lefthand.dmi' @@ -333,3 +333,233 @@ /obj/item/melee/baton/boomerang/loaded //Same as above, comes with a cell. preload_cell_type = /obj/item/stock_parts/cell/high + +/obj/item/melee/classic_baton + name = "police baton" + desc = "A wooden truncheon for beating criminal scum." + icon = 'icons/obj/weapon/baton.dmi' + icon_state = "classic_baton" + item_state = "classic_baton" + lefthand_file = 'icons/mob/inhands/equipment/security_lefthand.dmi' + righthand_file = 'icons/mob/inhands/equipment/security_righthand.dmi' + slot_flags = ITEM_SLOT_BELT + force = 12 //9 hit crit + w_class = WEIGHT_CLASS_NORMAL + + var/cooldown_check = 0 // Used interally, you don't want to modify + + var/cooldown = 40 // Default wait time until can stun again. + var/knockdown_time_carbon = (1.5 SECONDS) // Knockdown length for carbons. + var/stun_time_silicon = (5 SECONDS) // If enabled, how long do we stun silicons. + var/stamina_damage = 55 // Do we deal stamina damage. + var/affect_silicon = FALSE // Does it stun silicons. + var/on_sound // "On" sound, played when switching between able to stun or not. + var/on_stun_sound = 'sound/effects/woodhit.ogg' // Default path to sound for when we stun. + var/stun_animation = TRUE // Do we animate the "hit" when stunning. + var/on = TRUE // Are we on or off. + + var/on_icon_state // What is our sprite when turned on + var/off_icon_state // What is our sprite when turned off + var/on_item_state // What is our in-hand sprite when turned on + var/force_on // Damage when on - not stunning + var/force_off // Damage when off - not stunning + var/weight_class_on // What is the new size class when turned on + +// Description for trying to stun when still on cooldown. +/obj/item/melee/classic_baton/proc/get_wait_description() + return + +// Description for when turning their baton "on" +/obj/item/melee/classic_baton/proc/get_on_description() + . = list() + + .["local_on"] = "You extend the baton." + .["local_off"] = "You collapse the baton." + + return . + +// Default message for stunning mob. +/obj/item/melee/classic_baton/proc/get_stun_description(mob/living/target, mob/living/user) + . = list() + + .["visible"] = "[user] knocks [target] down with [src]!" + .["local"] = "[user] knocks you down with [src]!" + + return . + +// Default message for stunning a silicon. +/obj/item/melee/classic_baton/proc/get_silicon_stun_description(mob/living/target, mob/living/user) + . = list() + + .["visible"] = "[user] pulses [target]'s sensors with the baton!" + .["local"] = "You pulse [target]'s sensors with the baton!" + + return . + +// Are we applying any special effects when we stun to carbon +/obj/item/melee/classic_baton/proc/additional_effects_carbon(mob/living/target, mob/living/user) + return + +// Are we applying any special effects when we stun to silicon +/obj/item/melee/classic_baton/proc/additional_effects_silicon(mob/living/target, mob/living/user) + return + +/obj/item/melee/classic_baton/attack(mob/living/target, mob/living/user) + if(!on) + return ..() + + add_fingerprint(user) + if((HAS_TRAIT(user, TRAIT_CLUMSY)) && prob(50)) + to_chat(user, "You hit yourself over the head!") + + user.Paralyze(knockdown_time_carbon * force) + user.apply_damage(stamina_damage, STAMINA, BODY_ZONE_HEAD) + + additional_effects_carbon(user) // user is the target here + if(ishuman(user)) + var/mob/living/carbon/human/H = user + H.apply_damage(2*force, BRUTE, BODY_ZONE_HEAD) + else + user.take_bodypart_damage(2*force) + return + if(iscyborg(target)) + // We don't stun if we're on harm. + if (user.a_intent != INTENT_HARM) + if (affect_silicon) + var/list/desc = get_silicon_stun_description(target, user) + + target.flash_act(affect_silicon = TRUE) + target.Paralyze(stun_time_silicon) + additional_effects_silicon(target, user) + + user.visible_message(desc["visible"], desc["local"]) + playsound(get_turf(src), on_stun_sound, 100, TRUE, -1) + + if (stun_animation) + user.do_attack_animation(target) + else + ..() + else + ..() + return + if(!isliving(target)) + return + if (user.a_intent == INTENT_HARM) + if(!..()) + return + if(!iscyborg(target)) + return + else + if(cooldown_check <= world.time) + if(ishuman(target)) + var/mob/living/carbon/human/H = target + if (H.check_shields(src, 0, "[user]'s [name]", MELEE_ATTACK)) + return + if(check_martial_counter(H, user)) + return + + var/list/desc = get_stun_description(target, user) + + if (stun_animation) + user.do_attack_animation(target) + + playsound(get_turf(src), on_stun_sound, 75, TRUE, -1) + target.Knockdown(knockdown_time_carbon) + target.apply_damage(stamina_damage, STAMINA, BODY_ZONE_CHEST) + additional_effects_carbon(target, user) + + log_combat(user, target, "stunned", src) + add_fingerprint(user) + + target.visible_message(desc["visible"], desc["local"]) + + if(!iscarbon(user)) + target.LAssailant = null + else + target.LAssailant = WEAKREF(user) + cooldown_check = world.time + cooldown + else + var/wait_desc = get_wait_description() + if (wait_desc) + to_chat(user, wait_desc) + +/obj/item/conversion_kit + name = "conversion kit" + desc = "A strange box containing wood working tools and an instruction paper to turn stun batons into something else." + icon = 'icons/obj/storage.dmi' + icon_state = "uk" + custom_price = 450 + +/obj/item/melee/classic_baton/telescopic + name = "telescopic baton" + desc = "A compact yet robust personal defense weapon. Can be concealed when folded." + icon_state = "telebaton_0" + lefthand_file = 'icons/mob/inhands/weapons/melee_lefthand.dmi' + righthand_file = 'icons/mob/inhands/weapons/melee_righthand.dmi' + item_state = null + slot_flags = ITEM_SLOT_BELT + w_class = WEIGHT_CLASS_SMALL + item_flags = NONE + force = 0 + on = FALSE + on_sound = 'sound/weapons/batonextend.ogg' + + on_icon_state = "telebaton_1" + off_icon_state = "telebaton_0" + on_item_state = "nullrod" + force_on = 10 + force_off = 0 + weight_class_on = WEIGHT_CLASS_BULKY + +/obj/item/melee/classic_baton/telescopic/attack_self(mob/user) + on = !on + var/list/desc = get_on_description() + + if(on) + to_chat(user, desc["local_on"]) + icon_state = on_icon_state + item_state = on_item_state + w_class = weight_class_on + force = force_on + attack_verb = list("smacked", "struck", "cracked", "beaten") + else + to_chat(user, desc["local_off"]) + icon_state = off_icon_state + item_state = null //no sprite for concealment even when in hand + slot_flags = ITEM_SLOT_BELT + w_class = WEIGHT_CLASS_SMALL + force = force_off + attack_verb = list("hit", "poked") + + playsound(src.loc, on_sound, 50, TRUE) + add_fingerprint(user) + +/obj/item/melee/classic_baton/telescopic/contractor_baton + name = "contractor baton" + desc = "A compact, specialised baton assigned to Syndicate contractors. Applies light electrical shocks to targets." + icon_state = "contractor_baton_0" + item_state = null + slot_flags = ITEM_SLOT_BELT + w_class = WEIGHT_CLASS_SMALL + item_flags = NONE + force = 5 + + cooldown = 25 + stamina_damage = 85 + affect_silicon = TRUE + on_sound = 'sound/weapons/contractorbatonextend.ogg' + on_stun_sound = 'sound/effects/contractorbatonhit.ogg' + + on_icon_state = "contractor_baton_1" + off_icon_state = "contractor_baton_0" + on_item_state = "contractor_baton" + force_on = 16 + force_off = 5 + weight_class_on = WEIGHT_CLASS_NORMAL + +/obj/item/melee/classic_baton/telescopic/contractor_baton/get_wait_description() + return "The baton is still charging!" + +/obj/item/melee/classic_baton/telescopic/contractor_baton/additional_effects_carbon(mob/living/target, mob/living/user) + target.Jitter(20) + target.stuttering += 20 diff --git a/code/game/objects/items/melee/sword.dm b/code/game/objects/items/melee/sword.dm new file mode 100644 index 000000000000..21bde05c0dd3 --- /dev/null +++ b/code/game/objects/items/melee/sword.dm @@ -0,0 +1,539 @@ +/obj/item/melee/sword + icon = 'icons/obj/weapon/sword.dmi' + lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi' + righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi' + pickup_sound = 'sound/items/unsheath.ogg' + drop_sound = 'sound/items/handling/metal_drop.ogg' + hitsound = 'sound/weapons/bladeslice.ogg' + flags_1 = CONDUCT_1 + slot_flags = ITEM_SLOT_BELT | ITEM_SLOT_BACK + w_class = WEIGHT_CLASS_BULKY + obj_flags = UNIQUE_RENAME + block_chance = 25 + attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") + sharpness = IS_SHARP + 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/melee/sword/claymore + name = "claymore" + desc = "What are you standing around staring at this for? Get to killing!" + icon_state = "claymore" + item_state = "claymore" + force = 30 + throwforce = 10 + block_chance = 40 + max_integrity = 200 + +/obj/item/melee/sword/claymore/Initialize() + . = ..() + AddComponent(/datum/component/butchering, 40, 105) + +/obj/item/melee/sword/bone + name = "bone sword" + desc = "Jagged pieces of bone are tied to what looks like a goliaths femur." + icon_state = "bone_sword" + item_state = "bone_sword" + force = 15 + throwforce = 10 + armour_penetration = 15 + +/obj/item/melee/sword/scrap + name = "scrap sword" + desc = "A jagged and painful weapon only effective on targets without an armour" + icon_state = "machete0" + force = 24 + throwforce = 10 + armour_penetration = -35 + max_integrity = 100 + +/obj/item/melee/sword/mass + name = "mass produced machete" + desc = "A middle ground between a machete and a short sword. A simple construction of stamped steel but its so cheap its hard to complain. Its right between being a one hand and two handed weapon" + icon_state = "machete0" + base_icon_state = "machete" + force = 20 + throwforce = 15 + max_integrity = 50 + +/obj/item/melee/sword/mass/ComponentInitialize() + . = ..() + AddComponent(/datum/component/two_handed, force_unwielded=20, force_wielded=22, icon_wielded="[base_icon_state]1") + +/obj/item/melee/sword/katana + name = "katana" + desc = "Woefully underpowered in D20." + icon_state = "katana" + item_state = "katana" + slot_flags = ITEM_SLOT_BELT | ITEM_SLOT_BACK + force = 30 + throwforce = 10 + w_class = WEIGHT_CLASS_HUGE + block_chance = 10 + max_integrity = 200 + +/obj/item/melee/sword/chainsaw + name = "sacred chainsaw sword" + desc = "Suffer not a heretic to live." + icon_state = "chainswordon" + item_state = "chainswordon" + force = 15 + throwforce = 10 + armour_penetration = 25 + slot_flags = ITEM_SLOT_BELT + attack_verb = list("sawed", "torn", "cut", "chopped", "diced") + hitsound = 'sound/weapons/chainsawhit.ogg' + tool_behaviour = TOOL_SAW + toolspeed = 1.5 //slower than a real saw + +/obj/item/melee/sword/sabre + name = "officer's sabre" + desc = "An elegant weapon, its monomolecular edge is capable of cutting through flesh and bone with ease." + icon_state = "sabre" + item_state = "sabre" + force = 15 + throwforce = 10 + block_chance = 60 + armour_penetration = 75 + attack_verb = list("slashed", "cut") + hitsound = 'sound/weapons/rapierhit.ogg' + custom_materials = list(/datum/material/iron = 1000) + +/obj/item/melee/sword/sabre/Initialize() + . = ..() + AddComponent(/datum/component/butchering, 30, 95, 5) //fast and effective, but as a sword, it might damage the results. + +/obj/item/melee/sword/sabre/on_enter_storage(datum/component/storage/concrete/S) + var/obj/item/storage/belt/sabre/B = S.real_location() + if(istype(B)) + playsound(B, 'sound/items/sheath.ogg', 25, TRUE) + +/obj/item/melee/sword/sabre/solgov + name = "solarian sabre" + desc = "A refined ceremonial blade often given to soldiers and high ranking officials of SolGov." + icon_state = "sabresolgov" + item_state = "sabresolgov" + +/obj/item/melee/sword/sabre/suns + name = "SUNS sabre" + desc = "A blade of Solarian origin given to SUNS followers." + icon_state = "suns-sabre" + item_state = "suns-sabre" + +/obj/item/melee/sword/sabre/suns/captain + name = "SUNS captain sabre" + desc = "An elegant blade awarded to SUNS captains. Despite its higher craftmanship, it appears to be just as effective as a normal sabre." + icon_state = "suns-capsabre" + item_state = "suns-capsabre" + +/obj/item/melee/sword/sabre/suns/cmo + name = "SUNS stick sabre" + desc = "A thin blade used by SUNS medical instructors." + icon_state = "suns-swordstick" + item_state = "suns-swordstick" + +/obj/item/melee/sword/sabre/suns/telescopic + name = "telescopic sabre" + desc = "A telescopic and retractable blade given to SUNS peacekeepers for easy concealment and carry. It's design makes it slightly less effective than normal sabres sadly, however it is still excelent at piercing armor." + icon_state = "suns-tsword" + item_state = "suns-tsword" + force = 0 + throwforce = 0 + block_chance = 0 + + slot_flags = ITEM_SLOT_BELT + w_class = WEIGHT_CLASS_SMALL + attack_verb = list("smacked", "prodded") + + var/extended = FALSE + var/extend_sound = 'sound/weapons/batonextend.ogg' + + var/on_icon_state = "suns-tsword_ext" + var/on_item_state = "suns-tsword_ext" + var/off_icon_state = "suns-tsword" + var/off_item_state = "suns-tsword" + + var/force_on = 10 + var/on_throwforce = 10 + var/on_blockchance = 40 + + var/force_off = 0 + var/off_throwforce = 0 + var/off_blockchance = 0 + + var/weight_class_on = WEIGHT_CLASS_BULKY + +/obj/item/melee/sword/sabre/suns/telescopic/attack_self(mob/user) + extended = !extended + + if(extended) + to_chat(user, "You extend the [src].") + icon_state = on_icon_state + item_state = on_item_state + slot_flags = 0 + w_class = weight_class_on + force = force_on + throwforce = on_throwforce + block_chance = on_blockchance + attack_verb = list("slashed", "cut") + else + to_chat(user, "You collapse the [src].") + icon_state = off_icon_state + item_state = off_item_state + slot_flags = ITEM_SLOT_BELT + w_class = WEIGHT_CLASS_SMALL + force = force_off + throwforce = off_throwforce + block_chance = off_blockchance + attack_verb = list("smacked", "prodded") + + playsound(get_turf(src), extend_sound, 50, TRUE) + add_fingerprint(user) + +/obj/item/melee/sword/supermatter + name = "supermatter sword" + desc = "In a universe full of bad ideas, this might just be the worst." + icon_state = "supermatter_sword" + item_state = "supermatter_sword" + slot_flags = null + force = 0.001 + armour_penetration = 1000 + var/obj/machinery/power/supermatter_crystal/shard + var/balanced = 1 + force_string = "INFINITE" + +/obj/item/melee/sword/supermatter/Initialize() + . = ..() + shard = new /obj/machinery/power/supermatter_crystal(src) + qdel(shard.countdown) + shard.countdown = null + START_PROCESSING(SSobj, src) + visible_message("[src] appears, balanced ever so perfectly on its hilt. This isn't ominous at all.") + +/obj/item/melee/sword/supermatter/process() + if(balanced || throwing || ismob(src.loc) || isnull(src.loc)) + return + if(!isturf(src.loc)) + var/atom/target = src.loc + forceMove(target.loc) + consume_everything(target) + else + var/turf/T = get_turf(src) + if(!isspaceturf(T)) + consume_turf(T) + +/obj/item/melee/sword/supermatter/afterattack(target, mob/user, proximity_flag) + . = ..() + if(user && target == user) + user.dropItemToGround(src) + if(proximity_flag) + consume_everything(target) + +/obj/item/melee/sword/supermatter/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum) + ..() + if(ismob(hit_atom)) + var/mob/M = hit_atom + if(src.loc == M) + M.dropItemToGround(src) + consume_everything(hit_atom) + +/obj/item/melee/sword/supermatter/pickup(user) + ..() + balanced = 0 + +/obj/item/melee/sword/supermatter/ex_act(severity, target) + visible_message("The blast wave smacks into [src] and rapidly flashes to ash.",\ + "You hear a loud crack as you are washed with a wave of heat.") + consume_everything() + +/obj/item/melee/sword/supermatter/acid_act() + visible_message("The acid smacks into [src] and rapidly flashes to ash.",\ + "You hear a loud crack as you are washed with a wave of heat.") + consume_everything() + +/obj/item/melee/sword/supermatter/bullet_act(obj/projectile/P) + visible_message("[P] smacks into [src] and rapidly flashes to ash.",\ + "You hear a loud crack as you are washed with a wave of heat.") + consume_everything(P) + return BULLET_ACT_HIT + + +/obj/item/melee/sword/supermatter/proc/consume_everything(target) + if(isnull(target)) + shard.Consume() + else if(!isturf(target)) + shard.Bumped(target) + else + consume_turf(target) + +/obj/item/melee/sword/supermatter/proc/consume_turf(turf/T) + var/oldtype = T.type + var/turf/newT = T.ScrapeAway(flags = CHANGETURF_INHERIT_AIR) + if(newT.type == oldtype) + return + playsound(T, 'sound/effects/supermatter.ogg', 50, TRUE) + T.visible_message("[T] smacks into [src] and rapidly flashes to ash.",\ + "You hear a loud crack as you are washed with a wave of heat.") + shard.Consume() + +/obj/item/melee/sword/supermatter/add_blood_DNA(list/blood_dna) + return FALSE + +/obj/item/melee/sword/greyking + name = "blade of the grey-king" + desc = "A legendary sword made with 3 replica katanas nailed together and dipped in heavy narcotics." + icon_state = "grey_sword" + item_state = "swordoff" + slot_flags = ITEM_SLOT_BACK + force = 15 + throwforce = 8 + block_chance = 30 + attack_verb = list("struck", "slashed", "mall-ninjad", "tided", "multi-shanked", "shredded") + + var/prick_chance = 50 + var/prick_chems = list( + /datum/reagent/toxin = 10, + /datum/reagent/toxin/mindbreaker = 10, + /datum/reagent/drug/space_drugs = 10, + /datum/reagent/drug/crank = 5, + /datum/reagent/drug/methamphetamine = 5, + /datum/reagent/drug/bath_salts = 5, + /datum/reagent/drug/aranesp = 5, + /datum/reagent/drug/pumpup = 10, + /datum/reagent/medicine/omnizine = 10, + /datum/reagent/medicine/earthsblood = 15, + /datum/reagent/medicine/omnizine/protozine = 15 + ) + +/obj/item/melee/sword/greyking/afterattack(atom/target, mob/user, proximity_flag, click_parameters) + if (iscarbon(target) && prob(prick_chance)) + var/mob/living/carbon/C = target + var/datum/reagent/R = pick(prick_chems) + C.reagents.add_reagent(R, prick_chems[R]) + C.visible_message("[user] is pricked!", \ + "You've been pricked by the [src]!") + log_combat(user, C, "pricked", src.name, "with [prick_chems[R]]u of [R]") + return ..() + +//HF blade +/obj/item/melee/sword/vibro + icon_state = "hfrequency0" + base_icon_state = "hfrequency" + lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi' + righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi' + name = "vibro sword" + desc = "A potent weapon capable of cutting through nearly anything. Wielding it in two hands will allow you to deflect gunfire." + armour_penetration = 100 + block_chance = 30 + force = 20 + throwforce = 20 + throw_speed = 4 + sharpness = IS_SHARP + attack_verb = list("cut", "sliced", "diced") + slot_flags = ITEM_SLOT_BACK + hitsound = 'sound/weapons/bladeslice.ogg' + var/wielded = FALSE // track wielded status on item + +/obj/item/melee/sword/vibro/Initialize() + . = ..() + RegisterSignal(src, COMSIG_TWOHANDED_WIELD, PROC_REF(on_wield)) + RegisterSignal(src, COMSIG_TWOHANDED_UNWIELD, PROC_REF(on_unwield)) + +/obj/item/melee/sword/vibro/ComponentInitialize() + . = ..() + AddComponent(/datum/component/butchering, 20, 105) + AddComponent(/datum/component/two_handed, force_multiplier=2, icon_wielded="[base_icon_state]1") + +/// triggered on wield of two handed item +/obj/item/melee/sword/vibro/proc/on_wield(obj/item/source, mob/user) + SIGNAL_HANDLER + + wielded = TRUE + +/// triggered on unwield of two handed item +/obj/item/melee/sword/vibro/proc/on_unwield(obj/item/source, mob/user) + SIGNAL_HANDLER + + wielded = FALSE + +/obj/item/melee/sword/vibro/update_icon_state() + icon_state = "[base_icon_state]0" + return ..() + +/obj/item/melee/sword/vibro/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK) + if(wielded) + final_block_chance *= 2 + if(wielded || attack_type != PROJECTILE_ATTACK) + if(prob(final_block_chance)) + if(attack_type == PROJECTILE_ATTACK) + owner.visible_message("[owner] deflects [attack_text] with [src]!") + playsound(src, pick('sound/weapons/bulletflyby.ogg', 'sound/weapons/bulletflyby2.ogg', 'sound/weapons/bulletflyby3.ogg'), 75, TRUE) + return 1 + else + owner.visible_message("[owner] parries [attack_text] with [src]!") + return 1 + return 0 + +/obj/item/melee/sword/weebstick + name = "Weeb Stick" + desc = "Glorious nippon steel, folded 1000 times." + icon_state = "weeb_blade" + item_state = "weeb_blade" + slot_flags = ITEM_SLOT_BACK + sharpness = IS_SHARP_ACCURATE + force = 25 + throw_speed = 4 + throw_range = 5 + throwforce = 12 + block_chance = 20 + armour_penetration = 50 + hitsound = 'sound/weapons/anime_slash.ogg' + +/obj/item/melee/sword/weebstick/Initialize() + . = ..() + AddComponent(/datum/component/butchering, 25, 90, 5) //Not made for scalping victims, but will work nonetheless + +/obj/item/melee/sword/weebstick/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK) + if(attack_type == PROJECTILE_ATTACK) + final_block_chance = block_chance / 2 //Pretty good... + return ..() + +/obj/item/melee/sword/weebstick/on_exit_storage(datum/component/storage/concrete/S) + var/obj/item/storage/belt/weebstick/B = S.real_location() + if(istype(B)) + playsound(B, 'sound/items/unsheath.ogg', 25, TRUE) + +/obj/item/melee/sword/weebstick/on_enter_storage(datum/component/storage/concrete/S) + var/obj/item/storage/belt/weebstick/B = S.real_location() + if(istype(B)) + playsound(B, 'sound/items/sheath.ogg', 25, TRUE) + +/obj/item/storage/belt/weebstick + name = "nanoforged blade sheath" + desc = "It yearns to bath in the blood of your enemies... but you hold it back!" + icon = 'icons/obj/weapon/sword.dmi' + icon_state = "weeb_sheath" + item_state = "sheath" + force = 3 + var/primed = FALSE //Prerequisite to anime bullshit + // ##The anime bullshit## - Mostly stolen from action/innate/dash + var/dash_sound = 'sound/weapons/unsheathed_blade.ogg' + var/beam_effect = "blood_beam" + var/phasein = /obj/effect/temp_visual/dir_setting/cult/phase + var/phaseout = /obj/effect/temp_visual/dir_setting/cult/phase + +/obj/item/storage/belt/weebstick/ComponentInitialize() + . = ..() + AddElement(/datum/element/update_icon_updates_onmob) + var/datum/component/storage/STR = GetComponent(/datum/component/storage) + STR.max_items = 1 + STR.use_sound = null + STR.max_w_class = WEIGHT_CLASS_BULKY + STR.set_holdable(list( + /obj/item/melee/sword/weebstick + )) + +/obj/item/storage/belt/weebstick/examine(mob/user) + . = ..() + if(length(contents)) + . += "Use [src] in-hand to prime for an opening strike." + . += "Alt-click it to quickly draw the blade." + +/obj/item/storage/belt/weebstick/AltClick(mob/user) + if(!iscarbon(user) || !user.canUseTopic(src, BE_CLOSE, ismonkey(user)) || primed) + return + if(length(contents)) + var/obj/item/I = contents[1] + playsound(user, dash_sound, 25, TRUE) + user.visible_message("[user] swiftly draws \the [I].", "You draw \the [I].") + user.put_in_hands(I) + update_appearance() + else + to_chat(user, "[src] is empty!") + +/obj/item/storage/belt/weebstick/attack_self(mob/user) + if(!iscarbon(user) || !user.canUseTopic(src, BE_CLOSE, ismonkey(user))) + return + if(length(contents)) + var/datum/component/storage/CP = GetComponent(/datum/component/storage) + if(primed) + CP.locked = FALSE + playsound(user, 'sound/items/sheath.ogg', 25, TRUE) + to_chat(user, "You return your stance.") + primed = FALSE + update_appearance() + else + CP.locked = TRUE //Prevents normal removal of the blade while primed + playsound(user, 'sound/items/unsheath.ogg', 25, TRUE) + user.visible_message("[user] grips the blade within [src] and primes to attack.", "You take an opening stance...", "You hear a weapon being drawn...") + primed = TRUE + update_appearance() + else + to_chat(user, "[src] is empty!") + +/obj/item/storage/belt/weebstick/afterattack(atom/A, mob/living/user, proximity_flag, params) + . = ..() + if(primed && length(contents)) + if(!(A in view(user.client.view, user))) + return + var/obj/item/I = contents[1] + if(!user.put_in_inactive_hand(I)) + to_chat(user, "You need a free hand!") + return + var/datum/component/storage/CP = GetComponent(/datum/component/storage) + CP.locked = FALSE + primed = FALSE + update_appearance() + primed_attack(A, user) + if(CanReach(A, I)) + I.melee_attack_chain(user, A, params) + user.swap_hand() + +/obj/item/storage/belt/weebstick/proc/primed_attack(atom/target, mob/living/user) + var/turf/end = get_turf(user) + var/turf/start = get_turf(user) + var/obj/spot1 = new phaseout(start, user.dir) + var/halt = FALSE + // Stolen dash code + for(var/T in getline(start, get_turf(target))) + var/turf/tile = T + for(var/mob/living/victim in tile) + if(victim != user) + playsound(victim, 'sound/weapons/anime_slash.ogg', 10, TRUE) + victim.take_bodypart_damage(15) + // Unlike actual ninjas, we stop noclip-dashing here. + if(isclosedturf(T)) + halt = TRUE + for(var/obj/O in tile) + // We ignore mobs as we are cutting through them + if(!O.CanPass(user, tile)) + halt = TRUE + if(halt) + break + else + end = T + user.forceMove(end) // YEET + playsound(start, dash_sound, 35, TRUE) + var/obj/spot2 = new phasein(end, user.dir) + spot1.Beam(spot2, beam_effect, time=20) + user.visible_message("In a flash of red, [user] draws [user.p_their()] blade!", "You dash forward while drawing your weapon!", "You hear a blade slice through the air at impossible speeds!") + +/obj/item/storage/belt/weebstick/update_icon_state() + icon_state = "weeb_sheath" + item_state = "sheath" + if(contents.len) + if(primed) + icon_state += "-primed" + else + icon_state += "-blade" + item_state += "-sabre" + return ..() + +/obj/item/storage/belt/weebstick/PopulateContents() + //Time to generate names now that we have the sword + var/n_title = pick(GLOB.ninja_titles) + var/n_name = pick(GLOB.ninja_names) + var/obj/item/melee/sword/weebstick/sword = new /obj/item/melee/sword/weebstick(src) + sword.name = "[n_title] blade of clan [n_name]" + name = "[n_title] scabbard of clan [n_name]" + update_appearance() diff --git a/code/game/objects/items/teleprod.dm b/code/game/objects/items/melee/teleprod.dm similarity index 100% rename from code/game/objects/items/teleprod.dm rename to code/game/objects/items/melee/teleprod.dm diff --git a/code/game/objects/items/melee/weaponry.dm b/code/game/objects/items/melee/weaponry.dm new file mode 100644 index 000000000000..11c1b118570b --- /dev/null +++ b/code/game/objects/items/melee/weaponry.dm @@ -0,0 +1,119 @@ + + +/obj/item/wirerod + name = "wired rod" + desc = "A rod with some wire wrapped around the top. It'd be easy to attach something to the top bit." + icon = 'icons/obj/weapon/spear.dmi' + icon_state = "wiredrod" + item_state = "rods" + flags_1 = CONDUCT_1 + force = 9 + throwforce = 10 + w_class = WEIGHT_CLASS_NORMAL + custom_materials = list(/datum/material/iron=1150, /datum/material/glass=75) + attack_verb = list("hit", "bludgeoned", "whacked", "bonked") + +/obj/item/wirerod/attackby(obj/item/I, mob/user, params) + if(istype(I, /obj/item/shard)) + var/obj/item/melee/spear/S = new /obj/item/melee/spear + + remove_item_from_storage(user) + if (!user.transferItemToLoc(I, S)) + return + S.CheckParts(list(I)) + qdel(src) + + user.put_in_hands(S) + to_chat(user, "You fasten the glass shard to the top of the rod with the cable.") + + else if(istype(I, /obj/item/assembly/igniter) && !(HAS_TRAIT(I, TRAIT_NODROP))) + var/obj/item/melee/baton/cattleprod/P = new /obj/item/melee/baton/cattleprod + + remove_item_from_storage(user) + + to_chat(user, "You fasten [I] to the top of the rod with the cable.") + + qdel(I) + qdel(src) + + user.put_in_hands(P) + else + return ..() + +/obj/item/throwing_star + name = "throwing star" + desc = "An ancient weapon still used to this day, due to its ease of lodging itself into its victim's body parts." + icon_state = "throwingstar" + item_state = "eshield0" + lefthand_file = 'icons/mob/inhands/equipment/shields_lefthand.dmi' + righthand_file = 'icons/mob/inhands/equipment/shields_righthand.dmi' + force = 2 + throwforce = 20 //20 + 2 (WEIGHT_CLASS_SMALL) * 4 (EMBEDDED_IMPACT_PAIN_MULTIPLIER) = 28 damage on hit due to guaranteed embedding + throw_speed = 4 + embedding = list("pain_mult" = 4, "embed_chance" = 100, "fall_chance" = 0, "embed_chance_turf_mod" = 15) + armour_penetration = 40 + + w_class = WEIGHT_CLASS_SMALL + sharpness = IS_SHARP + custom_materials = list(/datum/material/iron=500, /datum/material/glass=500) + resistance_flags = FIRE_PROOF + +/obj/item/throwing_star/stamina + name = "shock throwing star" + desc = "An aerodynamic disc designed to cause excruciating pain when stuck inside fleeing targets, hopefully without causing fatal harm." + throwforce = 5 + embedding = list("pain_chance" = 5, "embed_chance" = 100, "fall_chance" = 0, "jostle_chance" = 10, "pain_stam_pct" = 0.8, "jostle_pain_mult" = 3) + +/obj/item/throwing_star/toy + name = "toy throwing star" + desc = "An aerodynamic disc strapped with adhesive for sticking to people, good for playing pranks and getting yourself killed by security." + sharpness = IS_BLUNT + force = 0 + throwforce = 0 + embedding = list("pain_mult" = 0, "jostle_pain_mult" = 0, "embed_chance" = 100, "fall_chance" = 0) + +/obj/item/throwing_star/magspear + name = "magnetic spear" + desc = "A reusable spear that is typically loaded into kinetic spearguns." + icon = 'icons/obj/ammo_bullets.dmi' + icon_state = "magspear" + throwforce = 25 //kills regular carps in one hit + force = 10 + throw_range = 0 //throwing these invalidates the speargun + attack_verb = list("stabbed", "ripped", "gored", "impaled") + embedding = list("pain_mult" = 8, "embed_chance" = 100, "fall_chance" = 0, "impact_pain_mult" = 15) //55 damage+embed on hit + +/obj/item/mounted_chainsaw + name = "mounted chainsaw" + desc = "A chainsaw that has replaced your arm." + icon_state = "chainsaw_on" + item_state = "mounted_chainsaw" + lefthand_file = 'icons/mob/inhands/weapons/chainsaw_lefthand.dmi' + righthand_file = 'icons/mob/inhands/weapons/chainsaw_righthand.dmi' + item_flags = ABSTRACT | DROPDEL + w_class = WEIGHT_CLASS_HUGE + force = 24 + throwforce = 0 + throw_range = 0 + throw_speed = 0 + sharpness = IS_SHARP + attack_verb = list("sawed", "torn", "cut", "chopped", "diced") + hitsound = 'sound/weapons/chainsawhit.ogg' + tool_behaviour = TOOL_SAW + toolspeed = 1 + +/obj/item/mounted_chainsaw/Initialize() + . = ..() + ADD_TRAIT(src, TRAIT_NODROP, HAND_REPLACEMENT_TRAIT) + +/obj/item/mounted_chainsaw/Destroy() + var/obj/item/bodypart/part + new /obj/item/chainsaw(get_turf(src)) + if(iscarbon(loc)) + var/mob/living/carbon/holder = loc + var/index = holder.get_held_index_of_item(src) + if(index) + part = holder.hand_bodyparts[index] + . = ..() + if(part) + part.drop_limb() diff --git a/code/game/objects/items/miscellaneous.dm b/code/game/objects/items/miscellaneous.dm index 619ebf3eb0e9..f32230a732ba 100644 --- a/code/game/objects/items/miscellaneous.dm +++ b/code/game/objects/items/miscellaneous.dm @@ -94,7 +94,7 @@ /obj/item/storage/box/hero/scottish/PopulateContents() new /obj/item/clothing/under/costume/kilt(src) - new /obj/item/claymore/weak/ceremonial(src) + new /obj/item/melee/sword/claymore(src) new /obj/item/toy/crayon/spraycan(src) new /obj/item/clothing/shoes/sandal(src) @@ -105,7 +105,7 @@ /obj/item/storage/box/hero/carphunter/PopulateContents() new /obj/item/clothing/suit/space/hardsuit/carp/old(src) new /obj/item/clothing/mask/gas/carp(src) - new /obj/item/kitchen/knife/hunting(src) + new /obj/item/melee/knife/hunting(src) new /obj/item/storage/box/papersack/meat(src) new /obj/item/fishing_rod(src) new /obj/item/fishing_line(src) @@ -149,7 +149,6 @@ /obj/item/skub desc = "It's skub." name = "skub" - icon = 'icons/obj/items_and_weapons.dmi' icon_state = "skub" w_class = WEIGHT_CLASS_BULKY attack_verb = list("skubbed") @@ -217,17 +216,6 @@ ouija_spaghetti_list[initial(A.name)] = A return ouija_spaghetti_list -/obj/structure/legionpike - name = "legion on a spear" - desc = "EXTREME interior decorating. You can feel it watching you." - icon = 'icons/obj/structures.dmi' - icon_state = "headpike-legion" - density = FALSE - anchored = TRUE - light_color = "#8B0000" - light_power = 2 - light_range = 2 - //rare and valulable gems- designed to eventually be used for archeology, or to be given as opposed to money as loot. Auctioned off at export, or kept as a trophy. /obj/item/gem/rupee name = "\improper Ruperium Crystal" @@ -282,3 +270,283 @@ light_power = 1 light_color = "#4785a4" w_class = WEIGHT_CLASS_SMALL + +/obj/item/phone + name = "red phone" + desc = "Should anything ever go wrong..." + icon_state = "red_phone" + force = 3 + throwforce = 2 + throw_speed = 3 + throw_range = 4 + w_class = WEIGHT_CLASS_SMALL + attack_verb = list("called", "rang") + hitsound = 'sound/weapons/ring.ogg' + +/obj/item/roastingstick + name = "advanced roasting stick" + desc = "A telescopic roasting stick with a miniature shield generator designed to ensure entry into various high-tech shielded cooking ovens and firepits." + icon_state = "roastingstick_0" + item_state = "null" + slot_flags = ITEM_SLOT_BELT + w_class = WEIGHT_CLASS_SMALL + item_flags = NONE + force = 0 + attack_verb = list("hit", "poked") + var/obj/item/reagent_containers/food/snacks/sausage/held_sausage + var/static/list/ovens + var/on = FALSE + var/datum/beam/beam + +/obj/item/roastingstick/Initialize() + . = ..() + if (!ovens) + ovens = typecacheof(list(/obj/singularity, /obj/machinery/power/supermatter_crystal, /obj/structure/bonfire)) + +/obj/item/roastingstick/attack_self(mob/user) + on = !on + if(on) + extend(user) + else + if (held_sausage) + to_chat(user, "You can't retract [src] while [held_sausage] is attached!") + return + retract(user) + + playsound(src.loc, 'sound/weapons/batonextend.ogg', 50, TRUE) + add_fingerprint(user) + +/obj/item/roastingstick/attackby(atom/target, mob/user) + ..() + if (istype(target, /obj/item/reagent_containers/food/snacks/sausage)) + if (!on) + to_chat(user, "You must extend [src] to attach anything to it!") + return + if (held_sausage) + to_chat(user, "[held_sausage] is already attached to [src]!") + return + if (user.transferItemToLoc(target, src)) + held_sausage = target + else + to_chat(user, "[target] doesn't seem to want to get on [src]!") + update_appearance() + +/obj/item/roastingstick/attack_hand(mob/user) + ..() + if (held_sausage) + user.put_in_hands(held_sausage) + held_sausage = null + update_appearance() + +/obj/item/roastingstick/update_overlays() + . = ..() + if (held_sausage) + . += mutable_appearance(icon, "roastingstick_sausage") + +/obj/item/roastingstick/proc/extend(user) + to_chat(user, "You extend [src].") + icon_state = "roastingstick_1" + item_state = "nullrod" + w_class = WEIGHT_CLASS_BULKY + +/obj/item/roastingstick/proc/retract(user) + to_chat(user, "You collapse [src].") + icon_state = "roastingstick_0" + item_state = null + w_class = WEIGHT_CLASS_SMALL + +/obj/item/roastingstick/handle_atom_del(atom/target) + if (target == held_sausage) + held_sausage = null + update_appearance() + +/obj/item/roastingstick/afterattack(atom/target, mob/user, proximity) + . = ..() + if (!on) + return + if (is_type_in_typecache(target, ovens)) + if (held_sausage && held_sausage.roasted) + to_chat(src, "Your [held_sausage] has already been cooked!") + return + if (istype(target, /obj/singularity) && get_dist(user, target) < 10) + to_chat(user, "You send [held_sausage] towards [target].") + playsound(src, 'sound/items/rped.ogg', 50, TRUE) + beam = user.Beam(target,icon_state="rped_upgrade",time=100) + else if (user.Adjacent(target)) + to_chat(user, "You extend [src] towards [target].") + playsound(src.loc, 'sound/weapons/batonextend.ogg', 50, TRUE) + else + return + if(do_after(user, 100, target = user)) + finish_roasting(user, target) + else + QDEL_NULL(beam) + playsound(src, 'sound/weapons/batonextend.ogg', 50, TRUE) + +/obj/item/roastingstick/proc/finish_roasting(user, atom/target) + to_chat(user, "You finish roasting [held_sausage].") + playsound(src,'sound/items/welder2.ogg',50,TRUE) + held_sausage.add_atom_colour(rgb(103,63,24), FIXED_COLOUR_PRIORITY) + held_sausage.name = "[target.name]-roasted [held_sausage.name]" + held_sausage.desc = "[held_sausage.desc] It has been cooked to perfection on \a [target]." + update_appearance() + +/obj/item/skateboard + name = "improvised skateboard" + desc = "A skateboard. It can be placed on its wheels and ridden, or used as a strong weapon." + icon_state = "skateboard" + item_state = "skateboard" + force = 12 + throwforce = 4 + w_class = WEIGHT_CLASS_NORMAL + attack_verb = list("smacked", "whacked", "slammed", "smashed") + ///The vehicle counterpart for the board + var/board_item_type = /obj/vehicle/ridden/scooter/skateboard + +/obj/item/skateboard/attack_self(mob/user) + var/obj/vehicle/ridden/scooter/skateboard/S = new board_item_type(get_turf(user))//this probably has fucky interactions with telekinesis but for the record it wasnt my fault + S.buckle_mob(user) + qdel(src) + +/obj/item/skateboard/pro + name = "skateboard" + desc = "A RaDSTORMz brand professional skateboard. It looks sturdy and well made." + icon_state = "skateboard2" + item_state = "skateboard2" + board_item_type = /obj/vehicle/ridden/scooter/skateboard/pro + custom_premium_price = 500 + +/obj/item/skateboard/hoverboard + name = "hoverboard" + desc = "A blast from the past, so retro!" + icon_state = "hoverboard_red" + item_state = "hoverboard_red" + board_item_type = /obj/vehicle/ridden/scooter/skateboard/hoverboard + custom_premium_price = 2015 + +/obj/item/skateboard/hoverboard/admin + name = "\improper Board Of Directors" + desc = "The engineering complexity of a spaceship concentrated inside of a board. Just as expensive, too." + icon_state = "hoverboard_nt" + item_state = "hoverboard_nt" + board_item_type = /obj/vehicle/ridden/scooter/skateboard/hoverboard/admin + +/obj/item/statuebust + name = "bust" + desc = "A priceless ancient marble bust, the kind that belongs in a museum." //or you can hit people with it + icon = 'icons/obj/statue.dmi' + icon_state = "bust" + force = 15 + throwforce = 10 + throw_speed = 5 + throw_range = 2 + attack_verb = list("busted") + var/impressiveness = 45 + +/obj/item/statuebust/Initialize() + . = ..() + AddComponent(/datum/component/art, impressiveness) + AddElement(/datum/element/beauty, 1000) + +/obj/item/statuebust/hippocratic + name = "hippocrates bust" + desc = "A bust of the famous Greek physician Hippocrates of Kos, often referred to as the father of western medicine." + icon_state = "hippocratic" + impressiveness = 50 + +/obj/item/extendohand + name = "extendo-hand" + desc = "Futuristic tech has allowed these classic spring-boxing toys to essentially act as a fully functional hand-operated hand prosthetic." + icon_state = "extendohand" + item_state = "extendohand" + lefthand_file = 'icons/mob/inhands/weapons/melee_lefthand.dmi' + righthand_file = 'icons/mob/inhands/weapons/melee_righthand.dmi' + force = 0 + throwforce = 5 + reach = 2 + var/min_reach = 2 + +/obj/item/extendohand/acme + name = "\improper ACME Extendo-Hand" + desc = "A novelty extendo-hand produced by the ACME corporation. Originally designed to knock out roadrunners." + +/obj/item/extendohand/attack(atom/M, mob/living/carbon/human/user) + var/dist = get_dist(M, user) + if(dist < min_reach) + to_chat(user, "[M] is too close to use [src] on.") + return + M.attack_hand(user) + +/obj/item/gohei + name = "gohei" + desc = "A wooden stick with white streamers at the end. Originally used by shrine maidens to purify things." + force = 5 + throwforce = 5 + hitsound = "swing_hit" + attack_verb = list("whacked", "thwacked", "walloped", "socked") + icon_state = "gohei" + item_state = "gohei" + lefthand_file = 'icons/mob/inhands/weapons/staves_lefthand.dmi' + righthand_file = 'icons/mob/inhands/weapons/staves_righthand.dmi' + +/obj/item/ectoplasm + name = "ectoplasm" + desc = "Spooky." + gender = PLURAL + icon = 'icons/obj/wizard.dmi' + icon_state = "ectoplasm" + +/obj/item/ectoplasm/angelic + icon = 'icons/obj/wizard.dmi' + icon_state = "angelplasm" + +/obj/item/cane + name = "cane" + desc = "A cane used by a true gentleman." + icon = 'icons/obj/items.dmi' + icon_state = "cane" + item_state = "stick" + lefthand_file = 'icons/mob/inhands/weapons/melee_lefthand.dmi' + righthand_file = 'icons/mob/inhands/weapons/melee_righthand.dmi' + force = 5 + throwforce = 5 + w_class = WEIGHT_CLASS_SMALL + custom_materials = list(/datum/material/iron=50) + attack_verb = list("bludgeoned", "whacked", "disciplined", "thrashed") + +/obj/item/staff + name = "wizard staff" + desc = "Apparently a staff used by the wizard." + icon = 'icons/obj/wizard.dmi' + icon_state = "staff" + lefthand_file = 'icons/mob/inhands/weapons/staves_lefthand.dmi' + righthand_file = 'icons/mob/inhands/weapons/staves_righthand.dmi' + force = 3 + throwforce = 5 + throw_speed = 2 + throw_range = 5 + w_class = WEIGHT_CLASS_SMALL + armour_penetration = 100 + attack_verb = list("bludgeoned", "whacked", "disciplined") + resistance_flags = FLAMMABLE + +/obj/item/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 = FLAMMABLE + +/obj/item/staff/stick + name = "stick" + desc = "A great tool to drag someone else's drinks across the bar." + icon = 'icons/obj/items.dmi' + icon_state = "cane" + item_state = "stick" + lefthand_file = 'icons/mob/inhands/weapons/melee_lefthand.dmi' + righthand_file = 'icons/mob/inhands/weapons/melee_righthand.dmi' + force = 3 + throwforce = 5 + throw_speed = 2 + throw_range = 5 + w_class = WEIGHT_CLASS_SMALL diff --git a/code/game/objects/items/paint.dm b/code/game/objects/items/paint.dm index 5aff78b5561d..9e314d848e3e 100644 --- a/code/game/objects/items/paint.dm +++ b/code/game/objects/items/paint.dm @@ -5,7 +5,6 @@ gender= PLURAL name = "paint" desc = "Used to recolor floors and walls. Can be removed by the janitor." - icon = 'icons/obj/items_and_weapons.dmi' icon_state = "paint_neutral" var/paint_color = "FFFFFF" item_state = "paintcan" diff --git a/code/game/objects/items/pitchfork.dm b/code/game/objects/items/pitchfork.dm deleted file mode 100644 index 05183ed479db..000000000000 --- a/code/game/objects/items/pitchfork.dm +++ /dev/null @@ -1,102 +0,0 @@ -/obj/item/pitchfork - icon_state = "pitchfork0" - base_icon_state = "pitchfork" - lefthand_file = 'icons/mob/inhands/weapons/polearms_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/polearms_righthand.dmi' - name = "pitchfork" - desc = "A simple tool used for moving hay." - force = 7 - throwforce = 15 - w_class = WEIGHT_CLASS_BULKY - attack_verb = list("attacked", "impaled", "pierced") - hitsound = 'sound/weapons/bladeslice.ogg' - sharpness = IS_SHARP - 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/wielded = FALSE // track wielded status on item - -/obj/item/pitchfork/Initialize() - . = ..() - RegisterSignal(src, COMSIG_TWOHANDED_WIELD, PROC_REF(on_wield)) - RegisterSignal(src, COMSIG_TWOHANDED_UNWIELD, PROC_REF(on_unwield)) - -/obj/item/pitchfork/ComponentInitialize() - . = ..() - AddComponent(/datum/component/two_handed, force_unwielded=7, force_wielded=15, icon_wielded="[base_icon_state]1") - -/// triggered on wield of two handed item -/obj/item/pitchfork/proc/on_wield(obj/item/source, mob/user) - SIGNAL_HANDLER - - wielded = TRUE - -/// triggered on unwield of two handed item -/obj/item/pitchfork/proc/on_unwield(obj/item/source, mob/user) - SIGNAL_HANDLER - - wielded = FALSE - -/obj/item/pitchfork/update_icon_state() - icon_state = "[base_icon_state]0" - return ..() - -/obj/item/pitchfork/demonic - name = "demonic pitchfork" - desc = "A red pitchfork, it looks like the work of the devil." - force = 19 - throwforce = 24 - light_system = MOVABLE_LIGHT - light_range = 3 - light_power = 6 - light_color = COLOR_SOFT_RED - - -/obj/item/pitchfork/demonic/ComponentInitialize() - . = ..() - AddComponent(/datum/component/two_handed, force_unwielded=19, force_wielded=25) - -/obj/item/pitchfork/demonic/greater - force = 24 - throwforce = 50 - -/obj/item/pitchfork/demonic/greater/ComponentInitialize() - . = ..() - AddComponent(/datum/component/two_handed, force_unwielded=24, force_wielded=34) - -/obj/item/pitchfork/demonic/ascended - force = 100 - throwforce = 100 - -/obj/item/pitchfork/demonic/ascended/ComponentInitialize() - . = ..() - AddComponent(/datum/component/two_handed, force_unwielded=100, force_wielded=500000) // Kills you DEAD - -/obj/item/pitchfork/demonic/pickup(mob/living/user) - . = ..() - if(isliving(user) && user.mind && user.owns_soul() && !is_devil(user)) - var/mob/living/U = user - U.visible_message("As [U] picks [src] up, [U]'s arms briefly catch fire.", \ - "\"As you pick up [src] your arms ignite, reminding you of all your past sins.\"") - if(ishuman(U)) - var/mob/living/carbon/human/H = U - H.apply_damage(rand(force/2, force), BURN, pick(BODY_ZONE_L_ARM, BODY_ZONE_R_ARM)) - else - U.adjustFireLoss(rand(force/2,force)) - -/obj/item/pitchfork/demonic/attack(mob/target, mob/living/carbon/human/user) - if(user.mind && user.owns_soul() && !is_devil(user)) - to_chat(user, "[src] burns in your hands.") - user.apply_damage(rand(force/2, force), BURN, pick(BODY_ZONE_L_ARM, BODY_ZONE_R_ARM)) - ..() - -/obj/item/pitchfork/demonic/ascended/afterattack(atom/target, mob/user, proximity) - . = ..() - if(!proximity || !wielded) - return - if(iswallturf(target)) - var/turf/closed/wall/W = target - user.visible_message("[user] blasts \the [target] with \the [src]!") - playsound(target, 'sound/magic/disintegrate.ogg', 100, TRUE) - W.dismantle_wall(devastated = FALSE) - return diff --git a/code/game/objects/items/religion.dm b/code/game/objects/items/religion.dm index 704a388d97f1..f54aa4f6447b 100644 --- a/code/game/objects/items/religion.dm +++ b/code/game/objects/items/religion.dm @@ -281,15 +281,3 @@ new /obj/item/clothing/head/helmet/plate/crusader/red(src) new /obj/item/clothing/gloves/plate/red(src) new /obj/item/clothing/shoes/plate/red(src) - - -/obj/item/claymore/weak - desc = "This one is rusted." - force = 30 - armour_penetration = 15 - -/obj/item/claymore/weak/ceremonial - desc = "A rusted claymore, once at the heart of a powerful scottish clan struck down and oppressed by tyrants, it has been passed down the ages as a symbol of defiance." - force = 15 - block_chance = 30 - armour_penetration = 5 diff --git a/code/game/objects/items/singularityhammer.dm b/code/game/objects/items/singularityhammer.dm deleted file mode 100644 index 04d7629623b5..000000000000 --- a/code/game/objects/items/singularityhammer.dm +++ /dev/null @@ -1,145 +0,0 @@ -/obj/item/singularityhammer - name = "singularity hammer" - desc = "The pinnacle of close combat technology, the hammer harnesses the power of a miniaturized singularity to deal crushing blows." - icon_state = "singularity0" - base_icon_state = "singularity_hammer" - lefthand_file = 'icons/mob/inhands/weapons/hammers_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/hammers_righthand.dmi' - flags_1 = CONDUCT_1 - slot_flags = ITEM_SLOT_BACK - force = 5 - throwforce = 15 - throw_range = 1 - w_class = WEIGHT_CLASS_HUGE - 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 - force_string = "LORD SINGULOTH HIMSELF" - var/charged = 5 - var/wielded = FALSE // track wielded status on item - -/obj/item/singularityhammer/Initialize() - . = ..() - RegisterSignal(src, COMSIG_TWOHANDED_WIELD, PROC_REF(on_wield)) - RegisterSignal(src, COMSIG_TWOHANDED_UNWIELD, PROC_REF(on_unwield)) - START_PROCESSING(SSobj, src) - -/obj/item/singularityhammer/ComponentInitialize() - . = ..() - AddComponent(/datum/component/two_handed, force_multiplier=4, icon_wielded="[base_icon_state]1") - -/// triggered on wield of two handed item -/obj/item/singularityhammer/proc/on_wield(obj/item/source, mob/user) - SIGNAL_HANDLER - - wielded = TRUE - -/// triggered on unwield of two handed item -/obj/item/singularityhammer/proc/on_unwield(obj/item/source, mob/user) - SIGNAL_HANDLER - - wielded = FALSE - -/obj/item/singularityhammer/update_icon_state() - icon_state = "[base_icon_state]0" - return ..() - -/obj/item/singularityhammer/Destroy() - STOP_PROCESSING(SSobj, src) - return ..() - -/obj/item/singularityhammer/process() - if(charged < 5) - charged++ - -/obj/item/singularityhammer/proc/vortex(turf/pull, mob/wielder) - for(var/atom/X in orange(5,pull)) - if(ismovable(X)) - var/atom/movable/A = X - if(A == wielder) - continue - if(A && !A.anchored && !ishuman(X) && !isobserver(X)) - step_towards(A,pull) - step_towards(A,pull) - step_towards(A,pull) - else if(ishuman(X)) - var/mob/living/carbon/human/H = X - if(istype(H.shoes, /obj/item/clothing/shoes/magboots)) - var/obj/item/clothing/shoes/magboots/M = H.shoes - if(M.magpulse) - continue - H.apply_effect(20, EFFECT_PARALYZE, 0) - step_towards(H,pull) - step_towards(H,pull) - step_towards(H,pull) - -/obj/item/singularityhammer/afterattack(atom/A as mob|obj|turf|area, mob/user, proximity) - . = ..() - if(!proximity) - return - if(wielded) - if(charged == 5) - charged = 0 - if(istype(A, /mob/living/)) - var/mob/living/Z = A - Z.take_bodypart_damage(20,0) - playsound(user, 'sound/weapons/marauder.ogg', 50, TRUE) - var/turf/target = get_turf(A) - vortex(target,user) - -/obj/item/mjollnir - name = "Mjolnir" - desc = "A weapon worthy of a god, able to strike with the force of a lightning bolt. It crackles with barely contained energy." - icon_state = "mjollnir0" - base_icon_state = "mjollnir" - lefthand_file = 'icons/mob/inhands/weapons/hammers_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/hammers_righthand.dmi' - flags_1 = CONDUCT_1 - slot_flags = ITEM_SLOT_BACK - force = 5 - throwforce = 30 - throw_range = 7 - w_class = WEIGHT_CLASS_HUGE - var/wielded = FALSE // track wielded status on item - -/obj/item/mjollnir/Initialize() - . = ..() - RegisterSignal(src, COMSIG_TWOHANDED_WIELD, PROC_REF(on_wield)) - RegisterSignal(src, COMSIG_TWOHANDED_UNWIELD, PROC_REF(on_unwield)) - -/obj/item/mjollnir/ComponentInitialize() - . = ..() - AddComponent(/datum/component/two_handed, force_multiplier=5, icon_wielded="[base_icon_state]1", attacksound="sparks") - -/// triggered on wield of two handed item -/obj/item/mjollnir/proc/on_wield(obj/item/source, mob/user) - wielded = TRUE - -/// triggered on unwield of two handed item -/obj/item/mjollnir/proc/on_unwield(obj/item/source, mob/user) - wielded = FALSE - -/obj/item/mjollnir/update_icon_state() - icon_state = "[base_icon_state]0" - return ..() - -/obj/item/mjollnir/proc/shock(mob/living/target) - target.Stun(60) - var/datum/effect_system/lightning_spread/s = new /datum/effect_system/lightning_spread - s.set_up(5, 1, target.loc) - s.start() - target.visible_message("[target.name] is shocked by [src]!", \ - "You feel a powerful shock course through your body sending you flying!", \ - "You hear a heavy electrical crack!") - var/atom/throw_target = get_edge_target_turf(target, get_dir(src, get_step_away(target, src))) - target.throw_at(throw_target, 200, 4) - return - -/obj/item/mjollnir/attack(mob/living/M, mob/user) - ..() - if(wielded) - shock(M) - -/obj/item/mjollnir/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum) - . = ..() - if(isliving(hit_atom)) - shock(hit_atom) diff --git a/code/game/objects/items/spear.dm b/code/game/objects/items/spear.dm deleted file mode 100644 index be6b9d3a5a14..000000000000 --- a/code/game/objects/items/spear.dm +++ /dev/null @@ -1,283 +0,0 @@ -//spears -/obj/item/spear - icon_state = "spearglass0" - lefthand_file = 'icons/mob/inhands/weapons/polearms_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/polearms_righthand.dmi' - name = "spear" - desc = "A haphazardly-constructed yet still deadly weapon of ancient design." - force = 10 - w_class = WEIGHT_CLASS_BULKY - slot_flags = ITEM_SLOT_BACK - throwforce = 20 - throw_speed = 4 - embedding = list("impact_pain_mult" = 3) - armour_penetration = 10 - custom_materials = list(/datum/material/iron=1150, /datum/material/glass=2075) - hitsound = 'sound/weapons/bladeslice.ogg' - attack_verb = list("attacked", "poked", "jabbed", "torn", "gored") - sharpness = IS_SHARP - max_integrity = 200 - armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 30) - species_exception = list(/datum/species/kepori) - var/war_cry = "AAAAARGH!!!" - var/icon_prefix = "spearglass" - -/obj/item/spear/ComponentInitialize() - . = ..() - AddComponent(/datum/component/butchering, 100, 70) //decent in a pinch, but pretty bad. - AddComponent(/datum/component/jousting) - AddComponent(/datum/component/two_handed, force_unwielded=10, force_wielded=18, icon_wielded="[icon_prefix]1") - -/obj/item/spear/update_icon_state() - icon_state = "[icon_prefix]0" - return ..() - -/obj/item/spear/CheckParts(list/parts_list) - var/obj/item/shard/tip = locate() in parts_list - if (istype(tip, /obj/item/shard/plasma)) - throwforce = 21 - icon_prefix = "spearplasma" - AddComponent(/datum/component/two_handed, force_unwielded=11, force_wielded=19, icon_wielded="[icon_prefix]1") - update_appearance() - qdel(tip) - ..() - -/obj/item/spear/explosive - name = "explosive lance" - icon_state = "spearbomb0" - base_icon_state = "spearbomb" - icon_prefix = "spearbomb" - var/obj/item/grenade/explosive = null - var/wielded = FALSE // track wielded status on item - -/obj/item/spear/explosive/Initialize(mapload) - . = ..() - RegisterSignal(src, COMSIG_TWOHANDED_WIELD, PROC_REF(on_wield)) - RegisterSignal(src, COMSIG_TWOHANDED_UNWIELD, PROC_REF(on_unwield)) - set_explosive(new /obj/item/grenade/iedcasing/spawned()) //For admin-spawned explosive lances - -/obj/item/spear/explosive/ComponentInitialize() - . = ..() - AddComponent(/datum/component/two_handed, force_unwielded=10, force_wielded=18, icon_wielded="[icon_prefix]1") - -/// triggered on wield of two handed item -/obj/item/spear/explosive/proc/on_wield(obj/item/source, mob/user) - SIGNAL_HANDLER - - wielded = TRUE - -/// triggered on unwield of two handed item -/obj/item/spear/explosive/proc/on_unwield(obj/item/source, mob/user) - SIGNAL_HANDLER - - wielded = FALSE - -/obj/item/spear/explosive/proc/set_explosive(obj/item/grenade/G) - if(explosive) - QDEL_NULL(explosive) - G.forceMove(src) - explosive = G - desc = "A makeshift spear with [G] attached to it" - -/obj/item/spear/explosive/CheckParts(list/parts_list) - var/obj/item/grenade/G = locate() in parts_list - if(G) - var/obj/item/spear/lancePart = locate() in parts_list - var/datum/component/two_handed/comp_twohand = lancePart.GetComponent(/datum/component/two_handed) - if(comp_twohand) - var/lance_wielded = comp_twohand.force_wielded - var/lance_unwielded = comp_twohand.force_unwielded - AddComponent(/datum/component/two_handed, force_unwielded=lance_unwielded, force_wielded=lance_wielded) - throwforce = lancePart.throwforce - icon_prefix = lancePart.icon_prefix - parts_list -= G - parts_list -= lancePart - set_explosive(G) - qdel(lancePart) - ..() - -/obj/item/spear/explosive/examine(mob/user) - . = ..() - . += "Alt-click to set your war cry." - -/obj/item/spear/explosive/AltClick(mob/user) - if(user.canUseTopic(src, BE_CLOSE)) - ..() - if(istype(user) && loc == user) - var/input = stripped_input(user,"What do you want your war cry to be? You will shout it when you hit someone in melee.", ,"", 50) - if(input) - src.war_cry = input - -/obj/item/spear/explosive/afterattack(atom/movable/AM, mob/user, proximity) - . = ..() - if(!proximity) - return - if(wielded) - user.say("[war_cry]", forced="spear warcry") - explosive.forceMove(AM) - explosive.prime() - qdel(src) - -//GREY TIDE -/obj/item/spear/grey_tide - name = "\improper Grey Tide" - desc = "Recovered from the aftermath of a revolt aboard Defense Outpost Theta Aegis, in which a seemingly endless tide of Assistants caused heavy casualities among Nanotrasen military forces." - attack_verb = list("gored") - force=15 - -/obj/item/spear/grey_tide/ComponentInitialize() - . = ..() - AddComponent(/datum/component/two_handed, force_unwielded=15, force_wielded=25, icon_wielded="[icon_prefix]1") - -/obj/item/spear/grey_tide/afterattack(atom/movable/AM, mob/living/user, proximity) - . = ..() - if(!proximity) - return - user.faction |= "greytide([REF(user)])" - if(isliving(AM)) - var/mob/living/L = AM - if(istype (L, /mob/living/simple_animal/hostile/illusion)) - return - if(!L.stat && prob(50)) - var/mob/living/simple_animal/hostile/illusion/M = new(user.loc) - M.faction = user.faction.Copy() - M.Copy_Parent(user, 100, user.health/2.5, 12, 30) - M.GiveTarget(L) - -/* - * Bone Spear - */ -/obj/item/spear/bonespear //Blatant imitation of spear, but made out of bone. Not valid for explosive modification. - icon_state = "bone_spear0" - name = "bone spear" - base_icon_state = "bone_spear0" - icon_prefix = "bone_spear" - desc = "A haphazardly-constructed yet still deadly weapon. The pinnacle of modern technology." - icon = 'icons/obj/items_and_weapons.dmi' - lefthand_file = 'icons/mob/inhands/weapons/polearms_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/polearms_righthand.dmi' - mob_overlay_icon = 'icons/mob/clothing/back.dmi' - force = 12 - throwforce = 22 - armour_penetration = 15 //Enhanced armor piercing - -/obj/item/spear/bonespear/ComponentInitialize() - . = ..() - AddComponent(/datum/component/two_handed, force_unwielded=12, force_wielded=20, icon_wielded="[icon_prefix]1") -/obj/item/spear/dragonspear//version of the bone spear crafted from the trophy dropped by the Ash Drake. High damage, high ap, burns. - name = "dragonslayer's spear" - desc = "A bone spear crafted from the leading spine of a fully-grown drake, razor-sharp and hotter then magma. Wielded by the deranged, pyromaniacs, and champions of lavaland." - icon = 'icons/obj/items_and_weapons.dmi' - lefthand_file = 'icons/mob/inhands/weapons/polearms_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/polearms_righthand.dmi' - mob_overlay_icon = 'icons/mob/clothing/back.dmi' - force = 20 - throwforce = 25 - block_chance = 15//lol,lmao - armour_penetration = 30 - embedding = list("impact_pain_mult" = 5) - icon_prefix = "dragonspear" - base_icon_state = "dragonspear0" - icon_state = "dragonspear0" - var/list/nemesis_factions = list("mining", "boss") - var/faction_bonus_force = 25 - attack_verb = list("seared", "braided", "impaled", "smote", "gored") - hitsound = 'sound/weapons/sear.ogg' - var/cooldown_time = 0 SECONDS - COOLDOWN_DECLARE(freeze_cooldown) - -/obj/item/spear/dragonspear/attack(mob/living/target, mob/living/carbon/human/user) - var/nemesis_faction = FALSE - if(LAZYLEN(nemesis_factions)) - for(var/F in target.faction) - if(F in nemesis_factions) - nemesis_faction = TRUE - force += faction_bonus_force - throwforce += faction_bonus_force - nemesis_effects(user, target) - break - . = ..() - if(nemesis_faction) - force -= faction_bonus_force - throwforce -= faction_bonus_force - -/obj/item/spear/dragonspear/proc/nemesis_effects(mob/living/user, mob/living/target) - return - -/obj/item/spear/dragonspear/ComponentInitialize() - . = ..() - AddComponent(/datum/component/two_handed, force_unwielded=20, force_wielded=25, icon_wielded="[icon_prefix]1") - AddComponent(/datum/component/butchering, 60, 150) - -/obj/item/spear/dragonspear/attack(atom/target, blocked = FALSE) - if(iscarbon(target)) - var/mob/living/carbon/M = target - M.adjust_fire_stacks(3) - M.IgniteMob() - M.apply_damage(5, BURN) - M.adjust_bodytemperature(150) - if(isanimal(target)) - var/mob/living/simple_animal/M = target - M.apply_damage(15, BURN) - ..() - -//crystal spear -/obj/item/spear/crystal - icon_state = "crystal_spear0" - name = "crystal spear" - desc = "While more 'sharp stick' than spear, this thing is extremely dangerous neverless. Crafted out of the mysterous crystals, it can hit for very high damage, although it will break with repeated use." - icon = 'icons/obj/items_and_weapons.dmi' - base_icon_state = "crystal_spear" - icon_prefix = "crystal_spear" - lefthand_file = 'icons/mob/inhands/weapons/polearms_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/polearms_righthand.dmi' - mob_overlay_icon = 'icons/mob/clothing/back.dmi' - force = 12 - throwforce = 40 - armour_penetration = 20 - max_integrity = 300 //you can repair this with duct tape - var/damage_to_take_on_hit = 25 //every time we hit something, deal how much damage? - -/obj/item/spear/crystal/ComponentInitialize() - . = ..() - AddComponent(/datum/component/two_handed, force_unwielded=12, force_wielded=30, icon_wielded="[icon_prefix]1") //4 hit crit - -/obj/item/spear/crystal/examine(mob/user) - . = ..() - . += "You can throw it for very high damage and stuns fauna, though this will shatter it instantly." - var/healthpercent = (obj_integrity/max_integrity) * 100 - switch(healthpercent) - if(50 to 99) - . += "It looks slightly damaged." - if(25 to 50) - . += "It appears heavily damaged." - if(0 to 25) - . += "It's falling apart!" - -/obj/item/spear/crystal/attack(mob/living/M, mob/living/user) - . = ..() - take_damage(damage_to_take_on_hit) - -/obj/item/spear/crystal/attack_obj(obj/O, mob/living/user) - . = ..() - take_damage(damage_to_take_on_hit) - -/obj/item/spear/crystal/obj_destruction(damage_flag) - visible_message("[src] shatters into a million pieces!") - playsound(src,"shatter", 70) - new /obj/effect/decal/cleanable/glass/strange(get_turf(src)) - return ..() - -/obj/item/spear/crystal/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum) //destroyes when thrown - . = ..() - if(ishostile(hit_atom)) - var/mob/living/simple_animal/hostile/hostile_target = hit_atom - var/hostile_ai_status = hostile_target.AIStatus - hostile_target.AIStatus = AI_OFF - addtimer(VARSET_CALLBACK(hostile_target, AIStatus, hostile_ai_status), 5 SECONDS) - - new /obj/effect/temp_visual/goliath_tentacle/crystal/visual_only(get_turf(src)) - visible_message("[src] shatters into a million pieces!") - playsound(src,"shatter", 70) - new /obj/effect/decal/cleanable/glass/strange(get_turf(src)) - qdel(src) diff --git a/code/game/objects/items/stacks/medical.dm b/code/game/objects/items/stacks/medical.dm index 264ab12646ea..10eb8c1e2cf8 100644 --- a/code/game/objects/items/stacks/medical.dm +++ b/code/game/objects/items/stacks/medical.dm @@ -382,7 +382,7 @@ desc = "Used to secure limbs following a fracture." gender = PLURAL singular_name = "splint" - icon = 'icons/obj/items_and_weapons.dmi' + icon = 'icons/obj/items.dmi' icon_state = "splint" apply_sounds = list('sound/effects/rip1.ogg', 'sound/effects/rip2.ogg') self_delay = 40 diff --git a/code/game/objects/items/stacks/sheets/glass.dm b/code/game/objects/items/stacks/sheets/glass.dm index da08c87a5a35..23a8c8d5e5f0 100644 --- a/code/game/objects/items/stacks/sheets/glass.dm +++ b/code/game/objects/items/stacks/sheets/glass.dm @@ -339,7 +339,7 @@ GLOBAL_LIST_INIT(plastitaniumglass_recipes, list( var/obj/item/stack/sheet/cotton/cloth/C = I to_chat(user, "You begin to wrap the [C] around the [src]...") if(do_after(user, 35, target = src)) - var/obj/item/kitchen/knife/shiv/S = new /obj/item/kitchen/knife/shiv + var/obj/item/melee/knife/shiv/S = new /obj/item/melee/knife/shiv C.use(1) to_chat(user, "You wrap the [C] around the [src] forming a makeshift weapon.") remove_item_from_storage(src) diff --git a/code/game/objects/items/stacks/sheets/mineral.dm b/code/game/objects/items/stacks/sheets/mineral.dm index 9fc6fa808a46..560031fa03da 100644 --- a/code/game/objects/items/stacks/sheets/mineral.dm +++ b/code/game/objects/items/stacks/sheets/mineral.dm @@ -74,7 +74,6 @@ GLOBAL_LIST_INIT(sandbag_recipes, list ( \ /obj/item/emptysandbag name = "empty sandbag" desc = "A bag to be filled with sand." - icon = 'icons/obj/items_and_weapons.dmi' icon_state = "sandbag" w_class = WEIGHT_CLASS_TINY diff --git a/code/game/objects/items/stacks/sheets/sheet_types.dm b/code/game/objects/items/stacks/sheets/sheet_types.dm index 4443218e4385..5dde37c0b90d 100644 --- a/code/game/objects/items/stacks/sheets/sheet_types.dm +++ b/code/game/objects/items/stacks/sheets/sheet_types.dm @@ -519,7 +519,8 @@ GLOBAL_LIST_INIT(bronze_recipes, list ( \ GLOBAL_LIST_INIT(bone_recipes, list( \ new /datum/stack_recipe("mortar", /obj/item/reagent_containers/glass/mortar/bone, 3), \ - new /datum/stack_recipe("bone dagger", /obj/item/kitchen/knife/combat/bone, 2))) + new /datum/stack_recipe("bone dagger", /obj/item/melee/knife/bone, 2))) + /obj/item/stack/sheet/bone name = "bones" icon = 'icons/obj/mining.dmi' diff --git a/code/game/objects/items/storage/belt.dm b/code/game/objects/items/storage/belt.dm index fb56a7a15886..c2679adf8ae9 100644 --- a/code/game/objects/items/storage/belt.dm +++ b/code/game/objects/items/storage/belt.dm @@ -291,7 +291,7 @@ /obj/item/ammo_box/a762_stripper, /obj/item/ammo_box/amagpellet_claris, //that's the last of the clips /obj/item/reagent_containers/food/snacks/donut, - /obj/item/kitchen/knife/combat, + /obj/item/melee/knife/combat, /obj/item/flashlight/seclite, /obj/item/melee/classic_baton/telescopic, /obj/item/radio, @@ -367,7 +367,7 @@ /obj/item/storage/fancy/cigarettes, /obj/item/reagent_containers/food/drinks/bottle, /obj/item/stack/medical, - /obj/item/kitchen/knife, + /obj/item/melee/knife/kitchen, /obj/item/reagent_containers/hypospray, /obj/item/gps, /obj/item/storage/bag/ore, @@ -382,7 +382,7 @@ /obj/item/storage/bag/plants, /obj/item/stack/marker_beacon, /obj/item/restraints/legcuffs/bola/watcher, - /obj/item/claymore/bone, + /obj/item/melee/sword/bone, /obj/item/key/lasso )) @@ -786,7 +786,7 @@ STR.use_sound = null //if youre wondering why this is null, its so you can look in your sheath to prepare to draw, without letting anyone know youre preparing to draw it STR.max_w_class = WEIGHT_CLASS_BULKY STR.set_holdable(list( - /obj/item/melee/sabre + /obj/item/melee/sword/sabre )) /obj/item/storage/belt/sabre/examine(mob/user) @@ -814,7 +814,7 @@ return ..() /obj/item/storage/belt/sabre/PopulateContents() - new /obj/item/melee/sabre(src) + new /obj/item/melee/sword/sabre(src) update_appearance() /obj/item/storage/belt/sabre/solgov @@ -833,11 +833,11 @@ STR.use_sound = null STR.max_w_class = WEIGHT_CLASS_BULKY STR.set_holdable(list( - /obj/item/melee/sabre/solgov + /obj/item/melee/sword/sabre/solgov )) /obj/item/storage/belt/sabre/solgov/PopulateContents() - new /obj/item/melee/sabre/solgov(src) + new /obj/item/melee/sword/sabre/solgov(src) update_appearance() /obj/item/storage/belt/sabre/suns @@ -862,11 +862,11 @@ STR.use_sound = null STR.max_w_class = WEIGHT_CLASS_BULKY STR.set_holdable(list( - /obj/item/melee/sabre/suns + /obj/item/melee/sword/sabre/suns )) /obj/item/storage/belt/sabre/suns/PopulateContents() - new /obj/item/melee/sabre/suns(src) + new /obj/item/melee/sword/sabre/suns(src) update_appearance() @@ -887,11 +887,11 @@ STR.use_sound = null STR.max_w_class = WEIGHT_CLASS_BULKY STR.set_holdable(list( - /obj/item/melee/sabre/suns/captain + /obj/item/melee/sword/sabre/suns/captain )) /obj/item/storage/belt/sabre/suns/captain/PopulateContents() - new /obj/item/melee/sabre/suns/captain(src) + new /obj/item/melee/sword/sabre/suns/captain(src) update_appearance() /obj/item/storage/belt/sabre/suns/cmo @@ -917,11 +917,11 @@ STR.use_sound = null STR.max_w_class = WEIGHT_CLASS_BULKY STR.set_holdable(list( - /obj/item/melee/sabre/suns/cmo + /obj/item/melee/sword/sabre/suns/cmo )) /obj/item/storage/belt/sabre/suns/cmo/PopulateContents() - new /obj/item/melee/sabre/suns/cmo(src) + new /obj/item/melee/sword/sabre/suns/cmo(src) update_appearance() /obj/item/storage/belt/security/webbing/inteq diff --git a/code/game/objects/items/storage/uplink_kits.dm b/code/game/objects/items/storage/uplink_kits.dm index 4bb91fe95726..39e533f2a4a3 100644 --- a/code/game/objects/items/storage/uplink_kits.dm +++ b/code/game/objects/items/storage/uplink_kits.dm @@ -22,7 +22,7 @@ new /obj/item/multitool/ai_detect(src) // 1 tc new /obj/item/encryptionkey/syndicate(src) // 2 tc new /obj/item/reagent_containers/syringe/mulligan(src) // 4 tc - new /obj/item/kitchen/knife/switchblade(src) //I'll count this as 2 tc + new /obj/item/melee/knife/switchblade(src) //I'll count this as 2 tc new /obj/item/storage/fancy/cigarettes/cigpack_syndicate (src) // 2 tc this shit heals new /obj/item/flashlight/emp(src) // 2 tc new /obj/item/chameleon(src) // 7 tc @@ -117,7 +117,7 @@ new /obj/item/card/emag(src) // 6 tc /obj/item/storage/box/syndicate/bundle_B/PopulateContents() - switch (pickweight(list( "bond" = 2, "ninja" = 1, "darklord" = 1, "white_whale_holy_grail" = 2, "mad_scientist" = 2, "bee" = 1, "mr_freeze" = 2, "made_man"= 1))) + switch (pickweight(list( "bond" = 2, "ninja" = 1, "darklord" = 1, "white_whale_holy_grail" = 2, "mad_scientist" = 2, "mr_freeze" = 2, "made_man"= 1))) if("bond") new /obj/item/gun/ballistic/automatic/pistol/ringneck(src) new /obj/item/attachment/silencer(src) @@ -129,7 +129,7 @@ new /obj/item/reagent_containers/glass/rag(src) if("ninja") - new /obj/item/katana(src) // Unique , hard to tell how much tc this is worth. 8 tc? + new /obj/item/melee/sword/katana(src) new /obj/item/implanter/adrenalin(src) // 8 tc for(var/i in 1 to 6) new /obj/item/throwing_star(src) // ~5 tc for all 6 @@ -140,7 +140,6 @@ if("darklord") new /obj/item/dualsaber(src) new /obj/item/dnainjector/telemut/darkbundle(src) - new /obj/item/clothing/suit/hooded/chaplain_hoodie(src) new /obj/item/card/id/syndicate(src) new /obj/item/clothing/shoes/chameleon/noslip(src) //because slipping while being a dark lord sucks new /obj/item/book/granter/spell/summonitem(src) @@ -167,16 +166,6 @@ new /obj/item/pen/edagger(src) new /obj/item/gun/energy/decloner(src) - if("bee") - new /obj/item/paper/fluff/bee_objectives(src) // 0 tc (motivation) - new /obj/item/clothing/suit/hooded/bee_costume(src) // 0 tc - new /obj/item/clothing/mask/rat/bee(src) // 0 tc - new /obj/item/storage/belt/fannypack/yellow(src) // 0 tc - new /obj/item/grenade/spawnergrenade/buzzkill(src) - new /obj/item/grenade/spawnergrenade/buzzkill(src) - new /obj/item/reagent_containers/glass/bottle/beesease(src) // 10 tc? - new /obj/item/melee/beesword(src) //priceless - if("mr_freeze") new /obj/item/clothing/glasses/cold(src) new /obj/item/clothing/gloves/color/black(src) @@ -195,7 +184,7 @@ if("made_man") new /obj/effect/spawner/lootdrop/mafia_outfit(src) // 0 TC, just an outfit for the new 'don of this family new /obj/item/gun/ballistic/automatic/smg/firestorm/pan(src) // 20 TC, a gun with 50 .45 bullets on a three round burst is kinda outstanding - new /obj/item/kitchen/knife/switchblade(src) // 3 TC? It's nice, but it's really a stealth/oh fuck I'm out of ammo weapon + new /obj/item/melee/knife/switchblade(src) // 3 TC? It's nice, but it's really a stealth/oh fuck I'm out of ammo weapon new /obj/item/reagent_containers/food/drinks/bottle/vodka (src) // 5 TC, free molotov assemblies new /obj/item/reagent_containers/food/drinks/bottle/vodka (src) new /obj/item/reagent_containers/food/drinks/bottle/vodka (src) @@ -209,14 +198,6 @@ new /obj/item/reagent_containers/food/drinks/flask (src) // 1 TC, I can't believe I forgot about the booze flask AAAAAAA new /obj/item/storage/secure/briefcase/syndie (src) // 1TC, for bribing the bartender to let you set up shop... amongst other actions. - -/obj/item/paper/fluff/bee_objectives - name = "Objectives of a Bee Liberation Front Operative" - default_raw_text = "Objective #1. Liberate all bees on the NT transport vessel 2416/B. Success!
Objective #2. Escape alive. Failed." - - - - /obj/item/storage/box/syndicate/contract_kit name = "Contract Kit" desc = "Supplied to Syndicate contractors." diff --git a/code/game/objects/items/tanks/jetpack.dm b/code/game/objects/items/tanks/jetpack.dm index b8f4451a9660..deca5b57397e 100644 --- a/code/game/objects/items/tanks/jetpack.dm +++ b/code/game/objects/items/tanks/jetpack.dm @@ -173,7 +173,7 @@ /obj/item/tank/jetpack/suit name = "hardsuit jetpack upgrade" desc = "A modular, compact set of thrusters designed to integrate with a hardsuit. It is fueled by a tank inserted into the suit's storage compartment." - icon = 'icons/obj/items_and_weapons.dmi' + icon = 'icons/obj/items.dmi' icon_state = "jetpack_upgrade" item_state = "jetpack-black" w_class = WEIGHT_CLASS_NORMAL diff --git a/code/game/objects/items/toys.dm b/code/game/objects/items/toys.dm index 5ce082d79dc9..f1ce47a8f8fd 100644 --- a/code/game/objects/items/toys.dm +++ b/code/game/objects/items/toys.dm @@ -265,7 +265,7 @@ /obj/item/toy/sword name = "toy sword" desc = "A cheap, plastic replica of an energy sword. Realistic sounds! Ages 8 and up." - icon = 'icons/obj/transforming_energy.dmi' + icon = 'icons/obj/weapon/energy.dmi' icon_state = "sword" item_state = "sword" lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi' @@ -348,7 +348,7 @@ lefthand_file = 'icons/mob/inhands/equipment/toolbox_lefthand.dmi' righthand_file = 'icons/mob/inhands/equipment/toolbox_righthand.dmi' var/active = FALSE - icon = 'icons/obj/items_and_weapons.dmi' + icon = 'icons/obj/items.dmi' hitsound = 'sound/weapons/smash.ogg' attack_verb = list("robusted") @@ -407,7 +407,7 @@ /obj/item/toy/katana name = "replica katana" desc = "Woefully underpowered in D20." - icon = 'icons/obj/items_and_weapons.dmi' + icon = 'icons/obj/weapon/sword.dmi' icon_state = "katana" item_state = "katana" lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi' diff --git a/code/game/objects/items/weaponry.dm b/code/game/objects/items/weaponry.dm deleted file mode 100644 index 89eb9b0019e4..000000000000 --- a/code/game/objects/items/weaponry.dm +++ /dev/null @@ -1,759 +0,0 @@ -/obj/item/banhammer - desc = "A banhammer." - name = "banhammer" - icon = 'icons/obj/items_and_weapons.dmi' - icon_state = "toyhammer" - slot_flags = ITEM_SLOT_BELT - throwforce = 0 - force = 1 - w_class = WEIGHT_CLASS_TINY - throw_speed = 3 - throw_range = 7 - attack_verb = list("banned") - 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 - -/* -oranges says: This is a meme relating to the english translation of the ss13 russian wiki page on lurkmore. -mrdoombringer sez: and remember kids, if you try and PR a fix for this item's grammar, you are admitting that you are, indeed, a newfriend. -for further reading, please see: https://github.com/tgstation/tgstation/pull/30173 and https://translate.google.com/translate?sl=auto&tl=en&js=y&prev=_t&hl=en&ie=UTF-8&u=%2F%2Flurkmore.to%2FSS13&edit-text=&act=url -*/ -/obj/item/banhammer/attack(mob/M, mob/user) - if(user.zone_selected == BODY_ZONE_HEAD) - M.visible_message("[user] is stroking the head of [M] with a banhammer.", "[user] is stroking your head with a banhammer.", "You hear a banhammer stroking a head.") - else - M.visible_message("[M] has been banned FOR NO REISIN by [user]!", "You have been banned FOR NO REISIN by [user]!", "You hear a banhammer banning someone.") - playsound(loc, 'sound/effects/adminhelp.ogg', 15) //keep it at 15% volume so people don't jump out of their skin too much - if(user.a_intent != INTENT_HELP) - return ..(M, user) - -/obj/item/sord - name = "\improper SORD" - desc = "This thing is so unspeakably shitty you are having a hard time even holding it." - icon_state = "sord" - item_state = "sord" - lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi' - slot_flags = ITEM_SLOT_BELT - force = 2 - throwforce = 1 - w_class = WEIGHT_CLASS_NORMAL - hitsound = 'sound/weapons/bladeslice.ogg' - attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") - -/obj/item/claymore - name = "claymore" - desc = "What are you standing around staring at this for? Get to killing!" - icon_state = "claymore" - item_state = "claymore" - lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi' - pickup_sound = 'sound/items/handling/knife2_pickup.ogg' - drop_sound = 'sound/items/handling/metal_drop.ogg' - hitsound = 'sound/weapons/bladeslice.ogg' - flags_1 = CONDUCT_1 - slot_flags = ITEM_SLOT_BELT | ITEM_SLOT_BACK - force = 40 - throwforce = 10 - w_class = WEIGHT_CLASS_NORMAL - attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") - block_chance = 40 - sharpness = IS_SHARP - 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/claymore/Initialize() - . = ..() - AddComponent(/datum/component/butchering, 40, 105) - -/obj/item/claymore/highlander //ALL COMMENTS MADE REGARDING THIS SWORD MUST BE MADE IN ALL CAPS - desc = "THERE CAN BE ONLY ONE, AND IT WILL BE YOU!!!\nActivate it in your hand to point to the nearest victim." - flags_1 = CONDUCT_1 - item_flags = DROPDEL //WOW BRO YOU LOST AN ARM, GUESS WHAT YOU DONT GET YOUR SWORD ANYMORE //I CANT BELIEVE SPOOKYDONUT WOULD BREAK THE REQUIREMENTS - slot_flags = null - block_chance = 0 //RNG WON'T HELP YOU NOW, PANSY - light_range = 3 - attack_verb = list("brutalized", "eviscerated", "disemboweled", "hacked", "carved", "cleaved") //ONLY THE MOST VISCERAL ATTACK VERBS - var/notches = 0 //HOW MANY PEOPLE HAVE BEEN SLAIN WITH THIS BLADE - var/obj/item/disk/nuclear/nuke_disk //OUR STORED NUKE DISK - -/obj/item/claymore/highlander/Initialize() - . = ..() - ADD_TRAIT(src, TRAIT_NODROP, HIGHLANDER) - START_PROCESSING(SSobj, src) - -/obj/item/claymore/highlander/Destroy() - if(nuke_disk) - nuke_disk.forceMove(get_turf(src)) - nuke_disk.visible_message("The nuke disk is vulnerable!") - nuke_disk = null - STOP_PROCESSING(SSobj, src) - return ..() - -/obj/item/claymore/highlander/process() - if(ishuman(loc)) - var/mob/living/carbon/human/H = loc - loc.layer = LARGE_MOB_LAYER //NO HIDING BEHIND PLANTS FOR YOU, DICKWEED (HA GET IT, BECAUSE WEEDS ARE PLANTS) - H.bleedsuppress = TRUE //AND WE WON'T BLEED OUT LIKE COWARDS - else - if(!(flags_1 & ADMIN_SPAWNED_1)) - qdel(src) - - -/obj/item/claymore/highlander/pickup(mob/living/user) - . = ..() - to_chat(user, "The power of Scotland protects you! You are shielded from all stuns and knockdowns.") - user.add_stun_absorption("highlander", INFINITY, 1, " is protected by the power of Scotland!", "The power of Scotland absorbs the stun!", " is protected by the power of Scotland!") - user.ignore_slowdown(HIGHLANDER) - -/obj/item/claymore/highlander/dropped(mob/living/user) - . = ..() - user.unignore_slowdown(HIGHLANDER) - -/obj/item/claymore/highlander/examine(mob/user) - . = ..() - . += "It has [!notches ? "nothing" : "[notches] notches"] scratched into the blade." - if(nuke_disk) - . += "It's holding the nuke disk!" - -/obj/item/claymore/highlander/attack(mob/living/target, mob/living/user) - . = ..() - if(!QDELETED(target) && iscarbon(target) && target.stat == DEAD && target.mind && target.mind.special_role == "highlander") - user.fully_heal(admin_revive = FALSE) //STEAL THE LIFE OF OUR FALLEN FOES - add_notch(user) - target.visible_message("[target] crumbles to dust beneath [user]'s blows!", "As you fall, your body crumbles to dust!") - target.dust() - -/obj/item/claymore/highlander/attack_self(mob/living/user) - var/closest_victim - var/closest_distance = 255 - for(var/mob/living/carbon/human/H in GLOB.player_list - user) - if(H.mind.special_role == "highlander" && (!closest_victim || get_dist(user, closest_victim) < closest_distance)) - closest_victim = H - if(!closest_victim) - to_chat(user, "[src] thrums for a moment and falls dark. Perhaps there's nobody nearby.") - return - to_chat(user, "[src] thrums and points to the [dir2text(get_dir(user, closest_victim))].") - -/obj/item/claymore/highlander/IsReflect() - return 1 //YOU THINK YOUR PUNY LASERS CAN STOP ME? - -/obj/item/claymore/highlander/proc/add_notch(mob/living/user) //DYNAMIC CLAYMORE PROGRESSION SYSTEM - THIS IS THE FUTURE - notches++ - force++ - var/new_name = name - switch(notches) - if(1) - to_chat(user, "Your first kill - hopefully one of many. You scratch a notch into [src]'s blade.") - to_chat(user, "You feel your fallen foe's soul entering your blade, restoring your wounds!") - new_name = "notched claymore" - if(2) - to_chat(user, "Another falls before you. Another soul fuses with your own. Another notch in the blade.") - new_name = "double-notched claymore" - add_atom_colour(rgb(255, 235, 235), ADMIN_COLOUR_PRIORITY) - if(3) - to_chat(user, "You're beginning to relish the thrill of battle.") - new_name = "triple-notched claymore" - add_atom_colour(rgb(255, 215, 215), ADMIN_COLOUR_PRIORITY) - if(4) - to_chat(user, "You've lost count of how many you've killed.") - new_name = "many-notched claymore" - add_atom_colour(rgb(255, 195, 195), ADMIN_COLOUR_PRIORITY) - if(5) - to_chat(user, "Five voices now echo in your mind, cheering the slaughter.") - new_name = "battle-tested claymore" - add_atom_colour(rgb(255, 175, 175), ADMIN_COLOUR_PRIORITY) - if(6) - to_chat(user, "Is this what the vikings felt like? Visions of glory fill your head as you slay your sixth foe.") - new_name = "battle-scarred claymore" - add_atom_colour(rgb(255, 155, 155), ADMIN_COLOUR_PRIORITY) - if(7) - to_chat(user, "Kill. Butcher. Conquer.") - new_name = "vicious claymore" - add_atom_colour(rgb(255, 135, 135), ADMIN_COLOUR_PRIORITY) - if(8) - to_chat(user, "IT NEVER GETS OLD. THE SCREAMING. THE BLOOD AS IT SPRAYS ACROSS YOUR FACE.") - new_name = "bloodthirsty claymore" - add_atom_colour(rgb(255, 115, 115), ADMIN_COLOUR_PRIORITY) - if(9) - to_chat(user, "ANOTHER ONE FALLS TO YOUR BLOWS. ANOTHER WEAKLING UNFIT TO LIVE.") - new_name = "gore-stained claymore" - add_atom_colour(rgb(255, 95, 95), ADMIN_COLOUR_PRIORITY) - if(10) - user.visible_message("[user]'s eyes light up with a vengeful fire!", \ - "YOU FEEL THE POWER OF VALHALLA FLOWING THROUGH YOU! THERE CAN BE ONLY ONE!!!") - user.update_icons() - new_name = "GORE-DRENCHED CLAYMORE OF [pick("THE WHIMSICAL SLAUGHTER", "A THOUSAND SLAUGHTERED CATTLE", "GLORY AND VALHALLA", "ANNIHILATION", "OBLITERATION")]" - icon_state = "claymore_gold" - item_state = "cultblade" - remove_atom_colour(ADMIN_COLOUR_PRIORITY) - - name = new_name - playsound(user, 'sound/items/screwdriver2.ogg', 50, TRUE) - -/obj/item/katana - name = "katana" - desc = "Woefully underpowered in D20." - icon_state = "katana" - item_state = "katana" - lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi' - pickup_sound = 'sound/items/handling/knife2_pickup.ogg' - drop_sound = 'sound/items/handling/metal_drop.ogg' - flags_1 = CONDUCT_1 - slot_flags = ITEM_SLOT_BELT | ITEM_SLOT_BACK - force = 40 - throwforce = 10 - w_class = WEIGHT_CLASS_HUGE - hitsound = 'sound/weapons/bladeslice.ogg' - attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") - block_chance = 10 - sharpness = IS_SHARP - 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 - supports_variations = VOX_VARIATION - -/obj/item/katana/cursed - name = "ominous katana" - desc = "A japanese single-edged blade, once used to contain an ancient evil. The being within is grateful for being released, but beware: generosity has a price.
" - icon_state = "ominous_katana" - item_state = "ominous_katana" - icon = 'icons/obj/lavaland/artefacts.dmi' - lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi' - force = 35 - armour_penetration = 30 - max_integrity = 500 - resistance_flags = FIRE_PROOF | ACID_PROOF - var/essence = 0//Used for blade abilities, mainly heals(If I can safely implement this I will nerf the damage slightly, and boost the selfdam) - var/list/nemesis_factions = list("mining", "boss") - var/faction_bonus_force = 25 - - -/obj/item/katana/cursed/examine(mob/user) - . = ..() - . += "To cut into the flesh of your target with this weapon is to feed the gluttonous emptiness within. Burn the blood of your enemies to replenish your own spent essence." - -/obj/item/katana/cursed/attack(mob/living/target, mob/living/user) - . = ..() - if(isliving(target) && target.stat != DEAD) - essence += rand(15, 20) - -/obj/item/katana/cursed/attack(mob/living/target, mob/living/carbon/human/user) - var/nemesis_faction = FALSE - if(LAZYLEN(nemesis_factions)) - for(var/F in target.faction) - if(F in nemesis_factions) - nemesis_faction = TRUE - force += faction_bonus_force - nemesis_effects(user, target) - break - . = ..() - if(nemesis_faction) - force -= faction_bonus_force - -/obj/item/katana/cursed/proc/nemesis_effects(mob/living/user, mob/living/target) - return - -/obj/item/katana/cursed/attack(mob/target, mob/living/carbon/human/user) - if(user.mind && user.owns_soul()) - to_chat(user, "You feel a terrible chill as the emptiness within [src] devours on your life force!") - user.apply_damage(rand(2,3), BURN, pick(BODY_ZONE_L_ARM, BODY_ZONE_R_ARM, BODY_ZONE_CHEST, BODY_ZONE_HEAD, BODY_ZONE_L_LEG, BODY_ZONE_R_LEG, BODY_ZONE_PRECISE_GROIN)) - user.apply_damage(rand(2,3), BURN, pick(BODY_ZONE_L_ARM, BODY_ZONE_R_ARM, BODY_ZONE_CHEST, BODY_ZONE_HEAD, BODY_ZONE_L_LEG, BODY_ZONE_R_LEG, BODY_ZONE_PRECISE_GROIN)) - user.apply_damage(rand(2,3), BURN, pick(BODY_ZONE_L_ARM, BODY_ZONE_R_ARM, BODY_ZONE_CHEST, BODY_ZONE_HEAD, BODY_ZONE_L_LEG, BODY_ZONE_R_LEG, BODY_ZONE_PRECISE_GROIN)) - user.apply_damage(rand(2,3), BURN, pick(BODY_ZONE_L_ARM, BODY_ZONE_R_ARM, BODY_ZONE_CHEST, BODY_ZONE_HEAD, BODY_ZONE_L_LEG, BODY_ZONE_R_LEG, BODY_ZONE_PRECISE_GROIN)) - ..() - -/obj/item/wirerod - name = "wired rod" - desc = "A rod with some wire wrapped around the top. It'd be easy to attach something to the top bit." - icon_state = "wiredrod" - item_state = "rods" - flags_1 = CONDUCT_1 - force = 9 - throwforce = 10 - w_class = WEIGHT_CLASS_NORMAL - custom_materials = list(/datum/material/iron=1150, /datum/material/glass=75) - attack_verb = list("hit", "bludgeoned", "whacked", "bonked") - -/obj/item/wirerod/attackby(obj/item/I, mob/user, params) - if(istype(I, /obj/item/shard)) - var/obj/item/spear/S = new /obj/item/spear - - remove_item_from_storage(user) - if (!user.transferItemToLoc(I, S)) - return - S.CheckParts(list(I)) - qdel(src) - - user.put_in_hands(S) - to_chat(user, "You fasten the glass shard to the top of the rod with the cable.") - - else if(istype(I, /obj/item/assembly/igniter) && !(HAS_TRAIT(I, TRAIT_NODROP))) - var/obj/item/melee/baton/cattleprod/P = new /obj/item/melee/baton/cattleprod - - remove_item_from_storage(user) - - to_chat(user, "You fasten [I] to the top of the rod with the cable.") - - qdel(I) - qdel(src) - - user.put_in_hands(P) - else - return ..() - - -/obj/item/throwing_star - name = "throwing star" - desc = "An ancient weapon still used to this day, due to its ease of lodging itself into its victim's body parts." - icon_state = "throwingstar" - item_state = "eshield0" - lefthand_file = 'icons/mob/inhands/equipment/shields_lefthand.dmi' - righthand_file = 'icons/mob/inhands/equipment/shields_righthand.dmi' - force = 2 - throwforce = 20 //20 + 2 (WEIGHT_CLASS_SMALL) * 4 (EMBEDDED_IMPACT_PAIN_MULTIPLIER) = 28 damage on hit due to guaranteed embedding - throw_speed = 4 - embedding = list("pain_mult" = 4, "embed_chance" = 100, "fall_chance" = 0, "embed_chance_turf_mod" = 15) - armour_penetration = 40 - - w_class = WEIGHT_CLASS_SMALL - sharpness = IS_SHARP - custom_materials = list(/datum/material/iron=500, /datum/material/glass=500) - resistance_flags = FIRE_PROOF - -/obj/item/throwing_star/stamina - name = "shock throwing star" - desc = "An aerodynamic disc designed to cause excruciating pain when stuck inside fleeing targets, hopefully without causing fatal harm." - throwforce = 5 - embedding = list("pain_chance" = 5, "embed_chance" = 100, "fall_chance" = 0, "jostle_chance" = 10, "pain_stam_pct" = 0.8, "jostle_pain_mult" = 3) - -/obj/item/throwing_star/toy - name = "toy throwing star" - desc = "An aerodynamic disc strapped with adhesive for sticking to people, good for playing pranks and getting yourself killed by security." - sharpness = IS_BLUNT - force = 0 - throwforce = 0 - embedding = list("pain_mult" = 0, "jostle_pain_mult" = 0, "embed_chance" = 100, "fall_chance" = 0) - -/obj/item/throwing_star/magspear - name = "magnetic spear" - desc = "A reusable spear that is typically loaded into kinetic spearguns." - icon = 'icons/obj/ammo_bullets.dmi' - icon_state = "magspear" - throwforce = 25 //kills regular carps in one hit - force = 10 - throw_range = 0 //throwing these invalidates the speargun - attack_verb = list("stabbed", "ripped", "gored", "impaled") - embedding = list("pain_mult" = 8, "embed_chance" = 100, "fall_chance" = 0, "impact_pain_mult" = 15) //55 damage+embed on hit - -/obj/item/phone - name = "red phone" - desc = "Should anything ever go wrong..." - icon = 'icons/obj/items_and_weapons.dmi' - icon_state = "red_phone" - force = 3 - throwforce = 2 - throw_speed = 3 - throw_range = 4 - w_class = WEIGHT_CLASS_SMALL - attack_verb = list("called", "rang") - hitsound = 'sound/weapons/ring.ogg' - - -/obj/item/cane - name = "cane" - desc = "A cane used by a true gentleman." - icon = 'icons/obj/items_and_weapons.dmi' - icon_state = "cane" - item_state = "stick" - lefthand_file = 'icons/mob/inhands/weapons/melee_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/melee_righthand.dmi' - force = 5 - throwforce = 5 - w_class = WEIGHT_CLASS_SMALL - custom_materials = list(/datum/material/iron=50) - attack_verb = list("bludgeoned", "whacked", "disciplined", "thrashed") - -/obj/item/staff - name = "wizard staff" - desc = "Apparently a staff used by the wizard." - icon = 'icons/obj/wizard.dmi' - icon_state = "staff" - lefthand_file = 'icons/mob/inhands/weapons/staves_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/staves_righthand.dmi' - force = 3 - throwforce = 5 - throw_speed = 2 - throw_range = 5 - w_class = WEIGHT_CLASS_SMALL - armour_penetration = 100 - attack_verb = list("bludgeoned", "whacked", "disciplined") - resistance_flags = FLAMMABLE - -/obj/item/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 = FLAMMABLE - -/obj/item/staff/stick - name = "stick" - desc = "A great tool to drag someone else's drinks across the bar." - icon = 'icons/obj/items_and_weapons.dmi' - icon_state = "cane" - item_state = "stick" - lefthand_file = 'icons/mob/inhands/weapons/melee_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/melee_righthand.dmi' - force = 3 - throwforce = 5 - throw_speed = 2 - throw_range = 5 - w_class = WEIGHT_CLASS_SMALL - -/obj/item/ectoplasm - name = "ectoplasm" - desc = "Spooky." - gender = PLURAL - icon = 'icons/obj/wizard.dmi' - icon_state = "ectoplasm" - - -/obj/item/ectoplasm/angelic - icon = 'icons/obj/wizard.dmi' - icon_state = "angelplasm" - -/obj/item/mounted_chainsaw - name = "mounted chainsaw" - desc = "A chainsaw that has replaced your arm." - icon_state = "chainsaw_on" - item_state = "mounted_chainsaw" - lefthand_file = 'icons/mob/inhands/weapons/chainsaw_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/chainsaw_righthand.dmi' - item_flags = ABSTRACT | DROPDEL - w_class = WEIGHT_CLASS_HUGE - force = 24 - throwforce = 0 - throw_range = 0 - throw_speed = 0 - sharpness = IS_SHARP - attack_verb = list("sawed", "torn", "cut", "chopped", "diced") - hitsound = 'sound/weapons/chainsawhit.ogg' - tool_behaviour = TOOL_SAW - toolspeed = 1 - -/obj/item/mounted_chainsaw/Initialize() - . = ..() - ADD_TRAIT(src, TRAIT_NODROP, HAND_REPLACEMENT_TRAIT) - -/obj/item/mounted_chainsaw/Destroy() - var/obj/item/bodypart/part - new /obj/item/chainsaw(get_turf(src)) - if(iscarbon(loc)) - var/mob/living/carbon/holder = loc - var/index = holder.get_held_index_of_item(src) - if(index) - part = holder.hand_bodyparts[index] - . = ..() - if(part) - part.drop_limb() - -/obj/item/statuebust - name = "bust" - desc = "A priceless ancient marble bust, the kind that belongs in a museum." //or you can hit people with it - icon = 'icons/obj/statue.dmi' - icon_state = "bust" - force = 15 - throwforce = 10 - throw_speed = 5 - throw_range = 2 - attack_verb = list("busted") - var/impressiveness = 45 - -/obj/item/statuebust/Initialize() - . = ..() - AddComponent(/datum/component/art, impressiveness) - AddElement(/datum/element/beauty, 1000) - -/obj/item/statuebust/hippocratic - name = "hippocrates bust" - desc = "A bust of the famous Greek physician Hippocrates of Kos, often referred to as the father of western medicine." - icon_state = "hippocratic" - impressiveness = 50 - -/obj/item/melee/skateboard - name = "improvised skateboard" - desc = "A skateboard. It can be placed on its wheels and ridden, or used as a strong weapon." - icon_state = "skateboard" - item_state = "skateboard" - force = 12 - throwforce = 4 - w_class = WEIGHT_CLASS_NORMAL - attack_verb = list("smacked", "whacked", "slammed", "smashed") - ///The vehicle counterpart for the board - var/board_item_type = /obj/vehicle/ridden/scooter/skateboard - -/obj/item/melee/skateboard/attack_self(mob/user) - var/obj/vehicle/ridden/scooter/skateboard/S = new board_item_type(get_turf(user))//this probably has fucky interactions with telekinesis but for the record it wasnt my fault - S.buckle_mob(user) - qdel(src) - -/obj/item/melee/skateboard/pro - name = "skateboard" - desc = "A RaDSTORMz brand professional skateboard. It looks sturdy and well made." - icon_state = "skateboard2" - item_state = "skateboard2" - board_item_type = /obj/vehicle/ridden/scooter/skateboard/pro - custom_premium_price = 500 - -/obj/item/melee/skateboard/hoverboard - name = "hoverboard" - desc = "A blast from the past, so retro!" - icon_state = "hoverboard_red" - item_state = "hoverboard_red" - board_item_type = /obj/vehicle/ridden/scooter/skateboard/hoverboard - custom_premium_price = 2015 - -/obj/item/melee/skateboard/hoverboard/admin - name = "\improper Board Of Directors" - desc = "The engineering complexity of a spaceship concentrated inside of a board. Just as expensive, too." - icon_state = "hoverboard_nt" - item_state = "hoverboard_nt" - board_item_type = /obj/vehicle/ridden/scooter/skateboard/hoverboard/admin - -/obj/item/melee/baseball_bat - name = "baseball bat" - desc = "There ain't a skull in the league that can withstand a swatter." - icon = 'icons/obj/items_and_weapons.dmi' - icon_state = "baseball_bat" - item_state = "baseball_bat" - lefthand_file = 'icons/mob/inhands/weapons/melee_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/melee_righthand.dmi' - force = 12 - throwforce = 12 - attack_verb = list("beat", "smacked") - custom_materials = list(/datum/material/wood = MINERAL_MATERIAL_AMOUNT * 3.5) - w_class = WEIGHT_CLASS_HUGE - var/homerun_ready = 0 - var/homerun_able = 0 - -/obj/item/melee/baseball_bat/homerun - name = "home run bat" - desc = "This thing looks dangerous... Dangerously good at baseball, that is." - homerun_able = 1 - -/obj/item/melee/baseball_bat/attack_self(mob/user) - if(!homerun_able) - ..() - return - if(homerun_ready) - to_chat(user, "You're already ready to do a home run!") - ..() - return - to_chat(user, "You begin gathering strength...") - playsound(get_turf(src), 'sound/magic/lightning_chargeup.ogg', 65, TRUE) - if(do_after(user, 90, target = src)) - to_chat(user, "You gather power! Time for a home run!") - homerun_ready = 1 - ..() - -/obj/item/melee/baseball_bat/attack(mob/living/target, mob/living/user) - . = ..() - var/atom/throw_target = get_edge_target_turf(target, user.dir) - if(homerun_ready) - user.visible_message("It's a home run!") - target.throw_at(throw_target, rand(8,10), 14, user) - SSexplosions.medturf += throw_target - playsound(get_turf(src), 'sound/weapons/homerun.ogg', 100, TRUE) - homerun_ready = 0 - return - else if(!target.anchored) - target.throw_at(throw_target, rand(1,2), 2, user, gentle = TRUE) - -/obj/item/melee/baseball_bat/ablative - name = "metal baseball bat" - desc = "This bat is made of highly reflective, highly armored material." - icon_state = "baseball_bat_metal" - item_state = "baseball_bat_metal" - force = 12 - throwforce = 15 - -/obj/item/melee/baseball_bat/bone - name = "bone club" - desc = "A long and hard shaft of rock solid bone." // I am the master of comedy - icon_state = "baseball_bat_bone" - item_state = "baseball_bat_bone" - -/obj/item/melee/baseball_bat/ablative/IsReflect()//some day this will reflect thrown items instead of lasers - var/picksound = rand(1,2) - var/turf = get_turf(src) - if(picksound == 1) - playsound(turf, 'sound/weapons/effects/batreflect1.ogg', 50, TRUE) - if(picksound == 2) - playsound(turf, 'sound/weapons/effects/batreflect2.ogg', 50, TRUE) - return 1 - -/obj/item/melee/flyswatter - name = "flyswatter" - desc = "Useful for killing insects of all sizes." - icon = 'icons/obj/items_and_weapons.dmi' - icon_state = "flyswatter" - item_state = "flyswatter" - lefthand_file = 'icons/mob/inhands/weapons/melee_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/melee_righthand.dmi' - force = 1 - throwforce = 1 - attack_verb = list("swatted", "smacked") - hitsound = 'sound/effects/snap.ogg' - w_class = WEIGHT_CLASS_SMALL - //Things in this list will be instantly splatted. Flyman weakness is handled in the flyman species weakness proc. - var/list/strong_against - -/obj/item/melee/flyswatter/Initialize() - . = ..() - strong_against = typecacheof(list( - /mob/living/simple_animal/hostile/poison/bees/, - /mob/living/simple_animal/butterfly, - /mob/living/simple_animal/hostile/cockroach, - /obj/item/queen_bee - )) - - -/obj/item/melee/flyswatter/afterattack(atom/target, mob/user, proximity_flag) - . = ..() - if(proximity_flag) - if(is_type_in_typecache(target, strong_against)) - new /obj/effect/decal/cleanable/insectguts(target.drop_location()) - to_chat(user, "You easily splat the [target].") - if(istype(target, /mob/living/)) - var/mob/living/bug = target - bug.death(1) - else - qdel(target) - -/obj/item/proc/can_trigger_gun(mob/living/user) - if(!user.can_use_guns(src)) - return FALSE - return TRUE - -/obj/item/extendohand - name = "extendo-hand" - desc = "Futuristic tech has allowed these classic spring-boxing toys to essentially act as a fully functional hand-operated hand prosthetic." - icon = 'icons/obj/items_and_weapons.dmi' - icon_state = "extendohand" - item_state = "extendohand" - lefthand_file = 'icons/mob/inhands/weapons/melee_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/melee_righthand.dmi' - force = 0 - throwforce = 5 - reach = 2 - var/min_reach = 2 - -/obj/item/extendohand/acme - name = "\improper ACME Extendo-Hand" - desc = "A novelty extendo-hand produced by the ACME corporation. Originally designed to knock out roadrunners." - -/obj/item/extendohand/attack(atom/M, mob/living/carbon/human/user) - var/dist = get_dist(M, user) - if(dist < min_reach) - to_chat(user, "[M] is too close to use [src] on.") - return - M.attack_hand(user) - -/obj/item/gohei - name = "gohei" - desc = "A wooden stick with white streamers at the end. Originally used by shrine maidens to purify things. Now used by the station's valued weeaboos." - force = 5 - throwforce = 5 - hitsound = "swing_hit" - attack_verb = list("whacked", "thwacked", "walloped", "socked") - icon = 'icons/obj/items_and_weapons.dmi' - icon_state = "gohei" - item_state = "gohei" - lefthand_file = 'icons/mob/inhands/weapons/staves_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/staves_righthand.dmi' - -//HF blade -/obj/item/vibro_weapon - icon_state = "hfrequency0" - base_icon_state = "hfrequency" - lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi' - name = "vibro sword" - desc = "A potent weapon capable of cutting through nearly anything. Wielding it in two hands will allow you to deflect gunfire." - armour_penetration = 100 - block_chance = 30 - force = 20 - throwforce = 20 - throw_speed = 4 - sharpness = IS_SHARP - attack_verb = list("cut", "sliced", "diced") - w_class = WEIGHT_CLASS_BULKY - slot_flags = ITEM_SLOT_BACK - hitsound = 'sound/weapons/bladeslice.ogg' - var/wielded = FALSE // track wielded status on item - -/obj/item/vibro_weapon/Initialize() - . = ..() - RegisterSignal(src, COMSIG_TWOHANDED_WIELD, PROC_REF(on_wield)) - RegisterSignal(src, COMSIG_TWOHANDED_UNWIELD, PROC_REF(on_unwield)) - -/obj/item/vibro_weapon/ComponentInitialize() - . = ..() - AddComponent(/datum/component/butchering, 20, 105) - AddComponent(/datum/component/two_handed, force_multiplier=2, icon_wielded="[base_icon_state]1") - -/// triggered on wield of two handed item -/obj/item/vibro_weapon/proc/on_wield(obj/item/source, mob/user) - SIGNAL_HANDLER - - wielded = TRUE - -/// triggered on unwield of two handed item -/obj/item/vibro_weapon/proc/on_unwield(obj/item/source, mob/user) - SIGNAL_HANDLER - - wielded = FALSE - -/obj/item/vibro_weapon/update_icon_state() - icon_state = "[base_icon_state]0" - return ..() - -/obj/item/vibro_weapon/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK) - if(wielded) - final_block_chance *= 2 - if(wielded || attack_type != PROJECTILE_ATTACK) - if(prob(final_block_chance)) - if(attack_type == PROJECTILE_ATTACK) - owner.visible_message("[owner] deflects [attack_text] with [src]!") - playsound(src, pick('sound/weapons/bulletflyby.ogg', 'sound/weapons/bulletflyby2.ogg', 'sound/weapons/bulletflyby3.ogg'), 75, TRUE) - return 1 - else - owner.visible_message("[owner] parries [attack_text] with [src]!") - return 1 - return 0 - -/obj/item/claymore/bone - name = "Bone Sword" - desc = "Jagged pieces of bone are tied to what looks like a goliaths femur." - icon_state = "bone_sword" - item_state = "bone_sword" - icon = 'icons/obj/items_and_weapons.dmi' - lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi' - mob_overlay_icon = 'icons/mob/clothing/back.dmi' - force = 15 - throwforce = 10 - armour_penetration = 15 - - -/obj/item/vibro_weapon/weak - armour_penetration = 10 - block_chance = 10 - force = 15 - throwforce = 20 - 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 dac919bb428c..39f65ca53a5b 100644 --- a/code/game/objects/structures/crates_lockers/closets/job_closets.dm +++ b/code/game/objects/structures/crates_lockers/closets/job_closets.dm @@ -98,7 +98,6 @@ icon_door = "black" /obj/structure/closet/wardrobe/chaplain_black/PopulateContents() - new /obj/item/storage/box/holy(src) new /obj/item/clothing/accessory/pocketprotector/cosmetology(src) new /obj/item/clothing/under/rank/civilian/chaplain(src) new /obj/item/clothing/shoes/sneakers/black(src) diff --git a/code/game/objects/structures/fireaxe.dm b/code/game/objects/structures/fireaxe.dm index 24c0f71d322c..a164248a2bdd 100644 --- a/code/game/objects/structures/fireaxe.dm +++ b/code/game/objects/structures/fireaxe.dm @@ -10,7 +10,7 @@ integrity_failure = 0.33 var/locked = TRUE var/open = FALSE - var/obj/item/fireaxe/fireaxe + var/obj/item/melee/axe/fire/fireaxe /obj/structure/fireaxecabinet/Initialize() . = ..() @@ -49,8 +49,8 @@ obj_integrity = max_integrity update_appearance() else if(open || broken) - if(istype(I, /obj/item/fireaxe) && !fireaxe) - var/obj/item/fireaxe/F = I + if(istype(I, /obj/item/melee/axe/fire) && !fireaxe) + var/obj/item/melee/axe/fire/F = I if(F && F.wielded) to_chat(user, "Unwield the [F.name] first.") return diff --git a/code/game/objects/structures/girders.dm b/code/game/objects/structures/girders.dm index 6a3cae5bbd72..362de185e9ba 100644 --- a/code/game/objects/structures/girders.dm +++ b/code/game/objects/structures/girders.dm @@ -362,12 +362,7 @@ /obj/structure/girder/cult/attackby(obj/item/W, mob/user, params) add_fingerprint(user) - if(istype(W, /obj/item/melee/cultblade/dagger) && iscultist(user)) //Cultists can demolish cult girders instantly with their tomes - user.visible_message("[user] strikes [src] with [W]!", "You demolish [src].") - new /obj/item/stack/sheet/mineral/hidden/hellstone(drop_location(), 1) - qdel(src) - - else if(W.tool_behaviour == TOOL_WELDER) + if(W.tool_behaviour == TOOL_WELDER) if(!W.tool_start_check(user, amount=0)) return diff --git a/code/game/objects/structures/headpike.dm b/code/game/objects/structures/headpike.dm index c42983a5e0e5..5dbaa4a1e7c3 100644 --- a/code/game/objects/structures/headpike.dm +++ b/code/game/objects/structures/headpike.dm @@ -6,7 +6,7 @@ density = FALSE anchored = TRUE var/bonespear = FALSE - var/obj/item/spear/spear + var/obj/item/melee/spear/spear var/obj/item/bodypart/head/victim /obj/structure/headpike/bone //for bone spears @@ -24,9 +24,9 @@ victim = new(src) victim.real_name = random_unique_name(prob(50)) - spear = locate(bonespear ? /obj/item/spear/bonespear : /obj/item/spear) in parts_list + spear = locate(bonespear ? /obj/item/melee/spear/bone : /obj/item/melee/spear) in parts_list if(!spear) - spear = bonespear ? new/obj/item/spear/bonespear(src) : new/obj/item/spear(src) + spear = bonespear ? new/obj/item/melee/spear/bone(src) : new/obj/item/melee/spear(src) update_appearance() return ..() diff --git a/code/game/objects/structures/manned_turret.dm b/code/game/objects/structures/manned_turret.dm index e0f6e22f3e7e..637f2deeb515 100644 --- a/code/game/objects/structures/manned_turret.dm +++ b/code/game/objects/structures/manned_turret.dm @@ -214,7 +214,7 @@ /obj/item/gun_control name = "turret controls" - icon = 'icons/obj/items_and_weapons.dmi' + icon = 'icons/obj/items.dmi' icon_state = "offhand" w_class = WEIGHT_CLASS_HUGE item_flags = ABSTRACT | NOBLUDGEON | DROPDEL diff --git a/code/game/objects/structures/tables_racks.dm b/code/game/objects/structures/tables_racks.dm index 4ebd416675b8..a7404ef68a6c 100644 --- a/code/game/objects/structures/tables_racks.dm +++ b/code/game/objects/structures/tables_racks.dm @@ -726,7 +726,6 @@ /obj/item/rack_parts name = "rack parts" desc = "Parts of a rack." - icon = 'icons/obj/items_and_weapons.dmi' icon_state = "rack_parts" flags_1 = CONDUCT_1 custom_materials = list(/datum/material/iron=2000) diff --git a/code/game/objects/structures/watercloset.dm b/code/game/objects/structures/watercloset.dm index c22858ea591d..0d97598a0504 100644 --- a/code/game/objects/structures/watercloset.dm +++ b/code/game/objects/structures/watercloset.dm @@ -218,7 +218,7 @@ /obj/item/reagent_containers/food/snacks/urinalcake name = "urinal cake" desc = "The noble urinal cake, protecting the people's pipes from the people's pee. Edibility is suggested to be low." - icon = 'icons/obj/items_and_weapons.dmi' + icon = 'icons/obj/items.dmi' icon_state = "urinalcake" w_class = WEIGHT_CLASS_TINY list_reagents = list(/datum/reagent/chlorine = 3, /datum/reagent/ammonia = 1) diff --git a/code/game/turfs/closed/wall/mineral_walls.dm b/code/game/turfs/closed/wall/mineral_walls.dm index 04d4bc7895d6..1ca5a1cc527c 100644 --- a/code/game/turfs/closed/wall/mineral_walls.dm +++ b/code/game/turfs/closed/wall/mineral_walls.dm @@ -243,7 +243,7 @@ /turf/closed/wall/mineral/wood/attackby(obj/item/W, mob/user) if(W.get_sharpness() && W.force) var/duration = (48/W.force) * 2 //In seconds, for now. - if(istype(W, /obj/item/hatchet) || istype(W, /obj/item/fireaxe)) + if(istype(W, /obj/item/hatchet) || istype(W, /obj/item/melee/axe/fire)) duration /= 4 //Much better with hatchets and axes. if(do_after(user, duration*10, target=src)) //Into deciseconds. dismantle_wall(devastated = FALSE) diff --git a/code/modules/antagonists/blood_contract/blood_contract.dm b/code/modules/antagonists/blood_contract/blood_contract.dm index edd8aba60422..c56ef47db93a 100644 --- a/code/modules/antagonists/blood_contract/blood_contract.dm +++ b/code/modules/antagonists/blood_contract/blood_contract.dm @@ -36,6 +36,6 @@ continue to_chat(P, "You have an overwhelming desire to kill [H]. [H.p_theyve(TRUE)] been marked red! Whoever [H.p_they()] [H.p_were()], friend or foe, go kill [H.p_them()]!") - var/obj/item/I = new /obj/item/kitchen/knife/butcher(get_turf(P)) + var/obj/item/I = new /obj/item/melee/knife/butcher(get_turf(P)) P.put_in_hands(I, del_on_fail=TRUE) QDEL_IN(I, duration) diff --git a/code/modules/antagonists/cult/blood_magic.dm b/code/modules/antagonists/cult/blood_magic.dm index c9232857a547..b4bfb265386d 100644 --- a/code/modules/antagonists/cult/blood_magic.dm +++ b/code/modules/antagonists/cult/blood_magic.dm @@ -182,34 +182,6 @@ magic_path = "/obj/item/melee/blood_magic/construction" health_cost = 12 -/datum/action/innate/cult/blood_spell/equipment - name = "Summon Equipment" - desc = "Allows you to summon a ritual dagger, or empowers your hand to summon combat gear onto a cultist you touch, including cult armor, a cult bola, and a cult sword." - button_icon_state = "equip" - magic_path = "/obj/item/melee/blood_magic/armor" - -/datum/action/innate/cult/blood_spell/equipment/Activate() - var/choice = alert(owner,"Choose your equipment type",,"Combat Equipment","Ritual Dagger","Cancel") - if(choice == "Ritual Dagger") - var/turf/T = get_turf(owner) - owner.visible_message("[owner]'s hand glows red for a moment.", \ - "Red light begins to shimmer and take form within your hand!") - var/obj/O = new /obj/item/melee/cultblade/dagger(T) - if(owner.put_in_hands(O)) - to_chat(owner, "A ritual dagger appears in your hand!") - else - owner.visible_message( - "A ritual dagger appears at [owner]'s feet!", \ - "A ritual dagger materializes at your feet.") - SEND_SOUND(owner, sound('sound/effects/magic.ogg',0,1,25)) - charges-- - desc = base_desc - desc += "
Has [charges] use\s remaining." - if(charges<=0) - qdel(src) - else if(choice == "Combat Equipment") - ..() - /datum/action/innate/cult/blood_spell/horror name = "Hallucinations" desc = "Gives hallucinations to a target at range. A silent and invisible spell." @@ -339,7 +311,7 @@ /obj/item/melee/blood_magic name = "\improper magical aura" desc = "A sinister looking aura that distorts the flow of reality around it." - icon = 'icons/obj/items_and_weapons.dmi' + icon = 'icons/obj/items.dmi' lefthand_file = 'icons/mob/inhands/misc/touchspell_lefthand.dmi' righthand_file = 'icons/mob/inhands/misc/touchspell_righthand.dmi' icon_state = "disintegrate" @@ -695,7 +667,6 @@ C.equip_to_slot_or_del(new /obj/item/storage/backpack/cultpack(user), ITEM_SLOT_BACK) if(C == user) qdel(src) //Clears the hands - C.put_in_hands(new /obj/item/melee/cultblade(user)) C.put_in_hands(new /obj/item/restraints/legcuffs/bola/cult(user)) ..() @@ -812,29 +783,12 @@ /obj/item/melee/blood_magic/manipulator/attack_self(mob/living/user) if(iscultist(user)) - var/list/options = list("Blood Spear (150)", "Blood Beam (500)") + var/list/options = list("Blood Beam (500)") var/choice = input(user, "Choose a greater blood rite...", "Greater Blood Rites") as null|anything in options if(!choice) to_chat(user, "You decide against conducting a greater blood rite.") return switch(choice) - if("Blood Spear (150)") - if(uses < BLOOD_SPEAR_COST) - to_chat(user, "You need [BLOOD_SPEAR_COST] charges to perform this rite.") - else - uses -= BLOOD_SPEAR_COST - var/turf/T = get_turf(user) - qdel(src) - var/datum/action/innate/cult/spear/S = new(user) - var/obj/item/cult_spear/rite = new(T) - S.Grant(user, rite) - rite.spear_act = S - if(user.put_in_hands(rite)) - to_chat(user, "A [rite.name] appears in your hand!") - else - user.visible_message( - "A [rite.name] appears at [user]'s feet!", \ - "A [rite.name] materializes at your feet.") if("Blood Beam (500)") if(uses < BLOOD_BEAM_COST) to_chat(user, "You need [BLOOD_BEAM_COST] charges to perform this rite.") diff --git a/code/modules/antagonists/cult/cult.dm b/code/modules/antagonists/cult/cult.dm index 406c51956035..d6330b386f29 100644 --- a/code/modules/antagonists/cult/cult.dm +++ b/code/modules/antagonists/cult/cult.dm @@ -73,7 +73,6 @@ var/mob/living/carbon/H = owner.current if(!istype(H)) return - . += cult_give_item(/obj/item/melee/cultblade/dagger, H) to_chat(owner, "These will help you jumpstart a cult of your own in this sector. Use them well, and remember - you are not the only one.
") @@ -168,10 +167,7 @@ to_chat(admin, "Spawning dagger failed!") /datum/antagonist/cult/proc/admin_take_all(mob/admin) - var/mob/living/current = owner.current - for(var/o in current.GetAllContents()) - if(istype(o, /obj/item/melee/cultblade/dagger)) - qdel(o) + return /datum/antagonist/cult/master ignore_implant = TRUE diff --git a/code/modules/antagonists/cult/cult_items.dm b/code/modules/antagonists/cult/cult_items.dm index 69c9248d6fb9..d13e3885a0df 100644 --- a/code/modules/antagonists/cult/cult_items.dm +++ b/code/modules/antagonists/cult/cult_items.dm @@ -6,209 +6,6 @@ throw_range = 5 w_class = WEIGHT_CLASS_SMALL -/obj/item/melee/cultblade/dagger - name = "ritual dagger" - desc = "A strange dagger said to be used by sinister groups for \"preparing\" a corpse before sacrificing it to their dark gods." - icon = 'icons/obj/wizard.dmi' - icon_state = "render" - item_state = "cultdagger" - lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi' - inhand_x_dimension = 32 - inhand_y_dimension = 32 - w_class = WEIGHT_CLASS_SMALL - force = 15 - throwforce = 25 - armour_penetration = 35 - actions_types = list(/datum/action/item_action/cult_dagger) - var/drawing_rune = FALSE - -/obj/item/melee/cultblade/dagger/Initialize() - . = ..() - var/image/I = image(icon = 'icons/effects/blood.dmi' , icon_state = null, loc = src) - I.override = TRUE - add_alt_appearance(/datum/atom_hud/alternate_appearance/basic/cult, "cult_dagger", I) - -/obj/item/melee/cultblade - name = "eldritch longsword" - desc = "A sword humming with unholy energy. It glows with a dim red light." - icon_state = "cultblade" - item_state = "cultblade" - lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi' - flags_1 = CONDUCT_1 - sharpness = IS_SHARP - w_class = WEIGHT_CLASS_BULKY - force = 30 - throwforce = 10 - hitsound = 'sound/weapons/bladeslice.ogg' - attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "rended") - -/obj/item/melee/cultblade/Initialize() - . = ..() - AddComponent(/datum/component/butchering, 40, 100) - -/obj/item/melee/cultblade/attack(mob/living/target, mob/living/carbon/human/user) - if(!iscultist(user)) - user.Paralyze(100) - user.dropItemToGround(src, TRUE) - user.visible_message( - "A powerful force shoves [user] away from [target]!", \ - "\"You shouldn't play with sharp things. You'll poke someone's eye out.\"") - if(ishuman(user)) - var/mob/living/carbon/human/H = user - H.apply_damage(rand(force/2, force), BRUTE, pick(BODY_ZONE_L_ARM, BODY_ZONE_R_ARM)) - else - user.adjustBruteLoss(rand(force/2,force)) - return - ..() - -/obj/item/melee/cultblade/ghost - name = "eldritch sword" - force = 19 //can't break normal airlocks - item_flags = NEEDS_PERMIT | DROPDEL - flags_1 = NONE - -/obj/item/melee/cultblade/ghost/Initialize() - . = ..() - ADD_TRAIT(src, TRAIT_NODROP, CULT_TRAIT) - -/obj/item/melee/cultblade/pickup(mob/living/user) - ..() - if(!iscultist(user)) - to_chat(user, "\"I wouldn't advise that.\"") - -/obj/item/cult_bastard - name = "geometric bastard sword" - desc = "An enormous sword, once used by Nar'Sien cultists to rapidly harvest the souls of non-believers. It still yet hungers to taste inpure blood." - w_class = WEIGHT_CLASS_HUGE - block_chance = 50 - throwforce = 20 - force = 30 - armour_penetration = 45 - throw_speed = 1 - throw_range = 3 - sharpness = IS_SHARP - light_system = MOVABLE_LIGHT - light_range = 4 - light_color = COLOR_RED - attack_verb = list("cleaved", "bisected", "tore", "brutalized", "smashed", "ripped", "diced", "carved") - icon_state = "cultbastard" - item_state = "cultbastard" - hitsound = 'sound/weapons/bladeslice.ogg' - lefthand_file = 'icons/mob/inhands/64x64_lefthand.dmi' - righthand_file = 'icons/mob/inhands/64x64_righthand.dmi' - inhand_x_dimension = 64 - inhand_y_dimension = 64 - actions_types = list() - item_flags = SLOWS_WHILE_IN_HAND - var/datum/action/innate/dash/cult/jaunt - var/datum/action/innate/cult/spin2win/linked_action - var/spinning = FALSE - var/spin_cooldown = 250 - var/dash_toggled = TRUE - var/list/nemesis_factions = list("mining", "boss") - var/faction_bonus_force = 25 - -/obj/item/cult_bastard/Initialize() - . = ..() - jaunt = new(src) - linked_action = new(src) - AddComponent(/datum/component/butchering, 50, 120) - AddComponent(/datum/component/two_handed, require_twohands=TRUE) - -/obj/item/cult_bastard/attack(mob/living/target, mob/living/carbon/human/user) - var/nemesis_faction = FALSE - if(LAZYLEN(nemesis_factions)) - for(var/F in target.faction) - if(F in nemesis_factions) - nemesis_faction = TRUE - force += faction_bonus_force - throwforce += faction_bonus_force - nemesis_effects(user, target) - break - . = ..() - if(nemesis_faction) - force -= faction_bonus_force - throwforce -= faction_bonus_force - -/obj/item/cult_bastard/proc/nemesis_effects(mob/living/user, mob/living/target) - return - -/obj/item/cult_bastard/Destroy() - QDEL_NULL(jaunt) - QDEL_NULL(linked_action) - return ..() - -/obj/item/cult_bastard/examine(mob/user) - . = ..() - . += "This weapon will absorb the souls of unconscious human foes." - if(contents.len) - . += "There are [contents.len] souls trapped within the sword's core." - else - . += "The sword appears to be quite lifeless." - -/obj/item/cult_bastard/can_be_pulled(user) - return FALSE - -/obj/item/cult_bastard/attack_self(mob/user) - dash_toggled = !dash_toggled - if(dash_toggled) - to_chat(loc, "You raise [src] and prepare to jaunt with it.") - else - to_chat(loc, "You lower [src] and prepare to swing it normally.") - -/obj/item/cult_bastard/pickup(mob/living/user) - . = ..() - force = initial(force) - jaunt.Grant(user, src) - linked_action.Grant(user, src) - user.update_icons() - -/obj/item/cult_bastard/dropped(mob/user) - . = ..() - linked_action.Remove(user) - jaunt.Remove(user) - user.update_icons() - -/obj/item/cult_bastard/IsReflect() - if(spinning) - playsound(src, 'sound/weapons/effects/deflect.ogg', 100, TRUE) - return TRUE - else - ..() - -/obj/item/cult_bastard/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK) - if(prob(final_block_chance)) - if(attack_type == PROJECTILE_ATTACK) - owner.visible_message("[owner] deflects [attack_text] with [src]!") - playsound(src, 'sound/weapons/effects/deflect.ogg', 100, TRUE) - return TRUE - else - playsound(src, 'sound/weapons/parry.ogg', 75, TRUE) - owner.visible_message("[owner] parries [attack_text] with [src]!") - return TRUE - return FALSE - -/obj/item/cult_bastard/afterattack(atom/target, mob/user, proximity, click_parameters) - . = ..() - if(dash_toggled && !proximity) - jaunt.Teleport(user, target) - return - if(proximity) - if(ishuman(target)) - var/mob/living/carbon/human/H = target - if(H.stat != CONSCIOUS) - var/obj/item/soulstone/anybody/SS = new /obj/item/soulstone/anybody(src) - SS.attack(H, user) - if(!LAZYLEN(SS.contents)) - qdel(SS) - if(istype(target, /obj/structure/constructshell) && contents.len) - var/obj/item/soulstone/anybody/SS = contents[1] - if(istype(SS)) - SS.transfer_soul("CONSTRUCT",target,user) - qdel(SS) - /datum/action/innate/dash/cult name = "Rend the Veil" desc = "Use the sword to shear open the flimsy fabric of this reality and teleport to your target." @@ -226,45 +23,6 @@ else return FALSE - - -/datum/action/innate/cult/spin2win - name = "Geometer's Fury" - desc = "You draw on the power of the sword's ancient runes, spinning it wildly around you as you become immune to most attacks." - background_icon_state = "bg_demon" - button_icon_state = "sintouch" - var/cooldown = 0 - var/mob/living/carbon/human/holder - var/obj/item/cult_bastard/sword - -/datum/action/innate/cult/spin2win/Grant(mob/user, obj/bastard) - . = ..() - sword = bastard - holder = user - -/datum/action/innate/cult/spin2win/IsAvailable() - if(cooldown <= world.time) - return TRUE - else - return FALSE - -/datum/action/innate/cult/spin2win/Activate() - cooldown = world.time + sword.spin_cooldown - holder.changeNext_move(50) - holder.apply_status_effect(/datum/status_effect/sword_spin) - sword.spinning = TRUE - sword.block_chance = 100 - sword.slowdown += 1.5 - addtimer(CALLBACK(src, PROC_REF(stop_spinning)), 50) - holder.update_action_buttons_icon() - -/datum/action/innate/cult/spin2win/proc/stop_spinning() - sword.spinning = FALSE - sword.block_chance = 50 - sword.slowdown -= 1.5 - sleep(sword.spin_cooldown) - holder.update_action_buttons_icon() - /obj/item/restraints/legcuffs/bola/cult name = "\improper Nar'Sien bola" desc = "A strong bola, bound with dark magic that allows it to pass harmlessly through Nar'Sien cultists. Throw it to trip and slow your victim." @@ -303,7 +61,7 @@ icon_state = "cultrobes" item_state = "cultrobes" body_parts_covered = CHEST|GROIN|LEGS|ARMS - allowed = list(/obj/item/tome, /obj/item/melee/cultblade, /obj/item/tank) + allowed = list(/obj/item/tome, /obj/item/tank) armor = list("melee" = 40, "bullet" = 30, "laser" = 40,"energy" = 40, "bomb" = 25, "bio" = 10, "rad" = 0, "fire" = 10, "acid" = 10) flags_inv = HIDEJUMPSUIT cold_protection = CHEST|GROIN|LEGS|ARMS @@ -349,7 +107,7 @@ icon_state = "magusred" item_state = "magusred" body_parts_covered = CHEST|GROIN|LEGS|ARMS - allowed = list(/obj/item/tome, /obj/item/melee/cultblade) + allowed = list(/obj/item/tome) armor = list("melee" = 50, "bullet" = 30, "laser" = 50,"energy" = 50, "bomb" = 25, "bio" = 10, "rad" = 0, "fire" = 10, "acid" = 10) flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT @@ -369,7 +127,7 @@ item_state = "cult_armor" desc = "A heavily-armored exosuit worn by warriors of the Nar'Sien cult. It can withstand hard vacuum." w_class = WEIGHT_CLASS_BULKY - allowed = list(/obj/item/tome, /obj/item/melee/cultblade, /obj/item/tank/internals/) + allowed = list(/obj/item/tome, /obj/item/tank/internals/) armor = list("melee" = 70, "bullet" = 50, "laser" = 30,"energy" = 40, "bomb" = 30, "bio" = 30, "rad" = 30, "fire" = 40, "acid" = 75) helmettype = /obj/item/clothing/head/helmet/space/hardsuit/cult @@ -430,7 +188,7 @@ /obj/item/clothing/suit/hooded/cultrobes/berserker name = "flagellant's robes" desc = "Blood-soaked robes infused with dark magic; allows the user to move at inhuman speeds, but at the cost of increased damage." - allowed = list(/obj/item/tome, /obj/item/melee/cultblade) + allowed = list(/obj/item/tome) armor = list("melee" = -45, "bullet" = -45, "laser" = -45,"energy" = -55, "bomb" = -45, "bio" = -45, "rad" = -45, "fire" = 0, "acid" = 0) slowdown = -0.6 hoodtype = /obj/item/clothing/head/hooded/cult_hoodie/berserkerhood @@ -581,132 +339,9 @@ ..() to_chat(user, "\The [src] can only transport items!") - -/obj/item/cult_spear - name = "blood halberd" - desc = "A sickening spear composed entirely of crystallized blood." - icon_state = "bloodspear0" - base_icon_state = "occultpoleaxe" - lefthand_file = 'icons/mob/inhands/weapons/polearms_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/polearms_righthand.dmi' - slot_flags = 0 - force = 17 - throwforce = 40 - throw_speed = 2 - armour_penetration = 30 - block_chance = 30 - attack_verb = list("attacked", "impaled", "stabbed", "torn", "gored") - sharpness = IS_SHARP - hitsound = 'sound/weapons/bladeslice.ogg' - var/datum/action/innate/cult/spear/spear_act - var/wielded = FALSE // track wielded status on item - -/obj/item/cult_spear/Initialize() - . = ..() - RegisterSignal(src, COMSIG_TWOHANDED_WIELD, PROC_REF(on_wield)) - RegisterSignal(src, COMSIG_TWOHANDED_UNWIELD, PROC_REF(on_unwield)) - -/obj/item/cult_spear/ComponentInitialize() - . = ..() - AddComponent(/datum/component/butchering, 100, 90) - AddComponent(/datum/component/two_handed, force_unwielded=17, force_wielded=24, icon_wielded="[base_icon_state]1") - -/// triggered on wield of two handed item -/obj/item/cult_spear/proc/on_wield(obj/item/source, mob/user) - SIGNAL_HANDLER - - wielded = TRUE - -/// triggered on unwield of two handed item -/obj/item/cult_spear/proc/on_unwield(obj/item/source, mob/user) - SIGNAL_HANDLER - - wielded = FALSE - -/obj/item/cult_spear/update_icon_state() - icon_state = "[base_icon_state]0" - return ..() - -/obj/item/cult_spear/Destroy() - if(spear_act) - qdel(spear_act) - return ..() - -/obj/item/cult_spear/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum) - var/turf/T = get_turf(hit_atom) - if(isliving(hit_atom)) - var/mob/living/L = hit_atom - if(iscultist(L)) - playsound(src, 'sound/weapons/throwtap.ogg', 50) - if(L.put_in_active_hand(src)) - L.visible_message("[L] catches [src] out of the air!") - else - L.visible_message("[src] bounces off of [L], as if repelled by an unseen force!") - else if(!..()) - if(!L.anti_magic_check()) - L.Paralyze(50) - break_spear(T) - else - ..() - -/obj/item/cult_spear/proc/break_spear(turf/T) - if(src) - if(!T) - T = get_turf(src) - if(T) - T.visible_message("[src] shatters and melts back into blood!") - new /obj/effect/temp_visual/cult/sparks(T) - new /obj/effect/decal/cleanable/blood/splatter(T) - playsound(T, 'sound/effects/glassbr3.ogg', 100) - qdel(src) - -/obj/item/cult_spear/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK) - if(wielded) - final_block_chance *= 2 - if(prob(final_block_chance)) - if(attack_type == PROJECTILE_ATTACK) - owner.visible_message("[owner] deflects [attack_text] with [src]!") - playsound(src, 'sound/weapons/effects/deflect.ogg', 100, TRUE) - return TRUE - else - playsound(src, 'sound/weapons/parry.ogg', 100, TRUE) - owner.visible_message("[owner] parries [attack_text] with [src]!") - return TRUE - return FALSE - -/datum/action/innate/cult/spear - name = "Bloody Bond" - desc = "Call the blood spear back to your hand!" - background_icon_state = "bg_demon" - button_icon_state = "bloodspear" - var/obj/item/cult_spear/spear - var/cooldown = 0 - -/datum/action/innate/cult/spear/Grant(mob/user, obj/blood_spear) - . = ..() - spear = blood_spear - button.screen_loc = "6:157,4:-2" - button.moved = "6:157,4:-2" - -/datum/action/innate/cult/spear/Activate() - if(owner == spear.loc || cooldown > world.time) - return - var/ST = get_turf(spear) - var/OT = get_turf(owner) - if(get_dist(OT, ST) > 10) - to_chat(owner,"The spear is too far away!") - else - cooldown = world.time + 20 - if(isliving(spear.loc)) - var/mob/living/L = spear.loc - L.dropItemToGround(spear) - L.visible_message("An unseen force pulls the blood spear from [L]'s hands!") - spear.throw_at(owner, 10, 2, owner) - /obj/item/blood_beam name = "\improper magical aura" desc = "Sinister looking aura that distorts the flow of reality around it." - icon = 'icons/obj/items_and_weapons.dmi' lefthand_file = 'icons/mob/inhands/misc/touchspell_lefthand.dmi' righthand_file = 'icons/mob/inhands/misc/touchspell_righthand.dmi' icon_state = "disintegrate" diff --git a/code/modules/antagonists/cult/cult_structures.dm b/code/modules/antagonists/cult/cult_structures.dm index 60816a90d45d..27ba86d24bfa 100644 --- a/code/modules/antagonists/cult/cult_structures.dm +++ b/code/modules/antagonists/cult/cult_structures.dm @@ -64,13 +64,6 @@ icon_state = "[initial(icon_state)][anchored ? null : "_off"]" return ..() -/obj/structure/destructible/cult/attackby(obj/I, mob/user, params) - if(istype(I, /obj/item/melee/cultblade/dagger) && iscultist(user)) - set_anchored(!anchored) - to_chat(user, "You [anchored ? "":"un"]secure \the [src] [anchored ? "to":"from"] the floor.") - else - return ..() - /obj/structure/destructible/cult/proc/check_menu(mob/user) if(!istype(user)) return FALSE diff --git a/code/modules/antagonists/cult/ritual.dm b/code/modules/antagonists/cult/ritual.dm deleted file mode 100644 index 1ea84bd83a1f..000000000000 --- a/code/modules/antagonists/cult/ritual.dm +++ /dev/null @@ -1,155 +0,0 @@ -/* - -This file contains the cult dagger and rune list code - -*/ - - -/obj/item/melee/cultblade/dagger/Initialize() - . = ..() - if(!LAZYLEN(GLOB.rune_types)) - GLOB.rune_types = list() - var/static/list/non_revealed_runes = (subtypesof(/obj/effect/rune) - /obj/effect/rune/malformed) - for(var/i_can_do_loops_now_thanks_remie in non_revealed_runes) - var/obj/effect/rune/R = i_can_do_loops_now_thanks_remie - GLOB.rune_types[initial(R.cultist_name)] = R //Uses the cultist name for displaying purposes - -/obj/item/melee/cultblade/dagger/examine(mob/user) - . = ..() - if(iscultist(user) || isobserver(user)) - . += {"The scriptures of the Geometer. Allows the scribing of runes and access to the knowledge archives of the cult of Nar'Sie.\n - Striking a cult structure will unanchor or reanchor it.\n - Striking another cultist with it will purge holy water from them.\n - Striking a noncultist, however, will tear their flesh."} - -/obj/item/melee/cultblade/dagger/attack(mob/living/M, mob/living/user) - if(iscultist(M)) - if(M.reagents && M.reagents.has_reagent(/datum/reagent/water/holywater)) //allows cultists to be rescued from the clutches of ordained religion - to_chat(user, "You remove the taint from [M]." ) - var/holy2unholy = M.reagents.get_reagent_amount(/datum/reagent/water/holywater) - M.reagents.del_reagent(/datum/reagent/water/holywater) - M.reagents.add_reagent(/datum/reagent/fuel/unholywater,holy2unholy) - log_combat(user, M, "smacked", src, " removing the holy water from them") - return FALSE - . = ..() - -/obj/item/melee/cultblade/dagger/attack_self(mob/user) - if(!iscultist(user)) - to_chat(user, "[src] is covered in unintelligible shapes and markings.") - return - scribe_rune(user) - -/obj/item/melee/cultblade/dagger/proc/scribe_rune(mob/living/user) - if(drawing_rune) - return - drawing_rune = TRUE - scribe_rune_attempt(user) - drawing_rune = FALSE - -/obj/item/melee/cultblade/dagger/proc/scribe_rune_attempt(mob/living/user) - var/turf/Turf = get_turf(user) - var/chosen_keyword - var/obj/effect/rune/rune_to_scribe - var/entered_rune_name - var/list/shields = list() - var/area/A = get_area(src) - var/datum/antagonist/cult/user_antag = user.mind.has_antag_datum(/datum/antagonist/cult,TRUE) - if(!user_antag) - return - if(!check_rune_turf(Turf, user)) - return - entered_rune_name = input(user, "Choose a rite to scribe.", "Sigils of Power") as null|anything in GLOB.rune_types - if(!src || QDELETED(src) || !Adjacent(user) || user.incapacitated() || !check_rune_turf(Turf, user)) - return - rune_to_scribe = GLOB.rune_types[entered_rune_name] - if(!rune_to_scribe) - return - if(initial(rune_to_scribe.req_keyword)) - chosen_keyword = stripped_input(user, "Enter a keyword for the new rune.", "Words of Power") - if(!chosen_keyword) - drawing_rune = FALSE - scribe_rune(user) //Go back a menu! - return - Turf = get_turf(user) //we may have moved. adjust as needed... - A = get_area(src) - if(!src || QDELETED(src) || !Adjacent(user) || user.incapacitated() || !check_rune_turf(Turf, user)) - return - if(ispath(rune_to_scribe, /obj/effect/rune/summon) && initial(A.name) == "Space") - to_chat(user, "The veil is not weak enough here to summon a cultist!") - return - if(ispath(rune_to_scribe, /obj/effect/rune/apocalypse)) - if((world.time - SSticker.round_start_time) <= 6000) - var/wait = 6000 - (world.time - SSticker.round_start_time) - to_chat(user, "The veil is not yet weak enough for this rune - it will be available in [DisplayTimeText(wait)].") - return - var/datum/objective/eldergod/summon_objective = locate() in user_antag.cult_team.objectives - if(!(A in summon_objective.summon_spots)) - to_chat(user, "The Apocalypse rune will remove a ritual site (where Nar'Sie can be summoned), it can only be scribed in [english_list(summon_objective.summon_spots)]!") - return - if(summon_objective.summon_spots.len < 2) - to_chat(user, "Only one ritual site remains - it must be reserved for the final summoning!") - return - if(ispath(rune_to_scribe, /obj/effect/rune/narsie)) - var/datum/objective/eldergod/summon_objective = locate() in user_antag.cult_team.objectives - var/datum/objective/sacrifice/sac_objective = locate() in user_antag.cult_team.objectives - if(!summon_objective) - to_chat(user, "Nar'Sie does not wish to be summoned!") - return - if(sac_objective && !sac_objective.check_completion()) - to_chat(user, "The sacrifice is not complete. The portal would lack the power to open if you tried!") - return - if(summon_objective.check_completion()) - to_chat(user, "\"I am already here. There is no need to try to summon me now.\"") - return - if(!(A in summon_objective.summon_spots)) - to_chat(user, "The Geometer can only be summoned where the veil is weak - in [english_list(summon_objective.summon_spots)]!") - return - var/confirm_final = alert(user, "This is the FINAL step to summon Nar'Sie; it is a long, painful ritual and the crew will be alerted to your presence", "Are you prepared for the final battle?", "My life for Nar'Sie!", "No") - if(confirm_final == "No") - to_chat(user, "You decide to prepare further before scribing the rune.") - return - Turf = get_turf(user) - A = get_area(src) - if(!(A in summon_objective.summon_spots)) // Check again to make sure they didn't move - to_chat(user, "The Geometer can only be summoned where the veil is weak - in [english_list(summon_objective.summon_spots)]!") - return - priority_announce("Figments from an eldritch god are being summoned by [user] into [initial(A.name)] from an unknown dimension. Disrupt the ritual at all costs!","Central Command Higher Dimensional Affairs", 'sound/ai/spanomalies.ogg') - for(var/B in spiral_range_turfs(1, user, 1)) - var/obj/structure/emergency_shield/sanguine/N = new(B) - shields += N - user.visible_message( - "[user] [user.blood_volume ? "cuts open [user.p_their()] arm and begins writing in [user.p_their()] own blood":"begins sketching out a strange design"]!", \ - "You [user.blood_volume ? "slice open your arm and ":""]begin drawing a sigil of the Geometer.") - if(user.blood_volume) - user.apply_damage(initial(rune_to_scribe.scribe_damage), BRUTE, pick(BODY_ZONE_L_ARM, BODY_ZONE_R_ARM)) - var/scribe_mod = initial(rune_to_scribe.scribe_delay) - if(istype(get_turf(user), /turf/open/floor/engine/cult) && !(ispath(rune_to_scribe, /obj/effect/rune/narsie))) - scribe_mod *= 0.5 - if(!do_after(user, scribe_mod, target = get_turf(user))) - for(var/V in shields) - var/obj/structure/emergency_shield/sanguine/S = V - if(S && !QDELETED(S)) - qdel(S) - return - if(!check_rune_turf(Turf, user)) - return - user.visible_message( - "[user] creates a strange circle[user.blood_volume ? " in [user.p_their()] own blood":""].", \ - "You finish drawing the arcane markings of the Geometer.") - for(var/V in shields) - 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) - R.add_mob_blood(user) - to_chat(user, "The [lowertext(R.cultist_name)] rune [R.cultist_desc]") - SSblackbox.record_feedback("tally", "cult_runes_scribed", 1, R.cultist_name) - -/obj/item/melee/cultblade/dagger/proc/check_rune_turf(turf/T, mob/user) - if(isspaceturf(T)) - to_chat(user, "You cannot scribe runes in space!") - return FALSE - if(locate(/obj/effect/rune) in T) - to_chat(user, "There is already a rune here.") - return FALSE - return TRUE diff --git a/code/modules/antagonists/cult/runes.dm b/code/modules/antagonists/cult/runes.dm index 5058dc73f081..b0fb446405c2 100644 --- a/code/modules/antagonists/cult/runes.dm +++ b/code/modules/antagonists/cult/runes.dm @@ -55,13 +55,6 @@ Runes can either be invoked by one's self or with many different cultists. Each if(req_keyword && keyword) . += "Keyword: [keyword]" -/obj/effect/rune/attackby(obj/I, mob/user, params) - if(istype(I, /obj/item/melee/cultblade/dagger) && iscultist(user)) - SEND_SOUND(user,'sound/items/sheath.ogg') - if(do_after(user, 15, target = src)) - to_chat(user, "You carefully erase the [lowertext(cultist_name)] rune.") - qdel(src) - /obj/effect/rune/attack_hand(mob/living/user) . = ..() if(.) @@ -241,7 +234,6 @@ structure_check() searches for nearby cultist structures required for the invoca "[convertee] writhes in pain [brutedamage || burndamage ? "even as [convertee.p_their()] wounds heal and close" : "as the markings below [convertee.p_them()] glow a bloody red"]!", // Hello there buddy! Come here often? I hope you were wondering wtf this string was "AAAAAAAAAAAAAA-") SSticker.mode.add_cultist(convertee.mind, 1) - new /obj/item/melee/cultblade/dagger(get_turf(src)) convertee.mind.special_role = ROLE_CULTIST to_chat(convertee, "Your blood pulses. Your head throbs. The world goes red. All at once you are aware of a horrible, horrible, truth. The veil of reality has been ripped away \ and something evil takes root.") @@ -492,15 +484,6 @@ structure_check() searches for nearby cultist structures required for the invoca color = RUNE_COLOR_RED new /obj/singularity/narsie/large/cult(T) //Causes Nar'Sie to spawn even if the rune has been removed -/obj/effect/rune/narsie/attackby(obj/I, mob/user, params) //Since the narsie rune takes a long time to make, add logging to removal. - if((istype(I, /obj/item/melee/cultblade/dagger) && iscultist(user))) - user.visible_message("[user.name] begins erasing [src]...", "You begin erasing [src]...") - if(do_after(user, 50, target = src)) //Prevents accidental erasures. - log_game("Summon Narsie rune erased by [key_name(user)] with [I.name]") - message_admins("[ADMIN_LOOKUPFLW(user)] erased a Narsie rune with [I.name]") - else - ..() - //Rite of Resurrection: Requires a dead or inactive cultist. When reviving the dead, you can only perform one revival for every three sacrifices your cult has carried out. /obj/effect/rune/raise_dead cultist_name = "Revive" diff --git a/code/modules/antagonists/devil/devil.dm b/code/modules/antagonists/devil/devil.dm index ff744ef05840..db087e100e2f 100644 --- a/code/modules/antagonists/devil/devil.dm +++ b/code/modules/antagonists/devil/devil.dm @@ -87,9 +87,6 @@ GLOBAL_LIST_INIT(devil_suffix, list(" the Red", " the Soulless", " the Master", var/form = BASIC_DEVIL var/static/list/devil_spells = typecacheof(list( /obj/effect/proc_holder/spell/aimed/fireball/hellish, - /obj/effect/proc_holder/spell/targeted/conjure_item/summon_pitchfork, - /obj/effect/proc_holder/spell/targeted/conjure_item/summon_pitchfork/greater, - /obj/effect/proc_holder/spell/targeted/conjure_item/summon_pitchfork/ascended, /obj/effect/proc_holder/spell/targeted/infernal_jaunt, /obj/effect/proc_holder/spell/targeted/sintouch, /obj/effect/proc_holder/spell/targeted/sintouch/ascended, @@ -322,21 +319,17 @@ GLOBAL_LIST_INIT(devil_suffix, list(" the Red", " the Soulless", " the Master", /datum/antagonist/devil/proc/give_base_spells() owner.AddSpell(new /obj/effect/proc_holder/spell/aimed/fireball/hellish(null)) - owner.AddSpell(new /obj/effect/proc_holder/spell/targeted/conjure_item/summon_pitchfork(null)) /datum/antagonist/devil/proc/give_blood_spells() - owner.AddSpell(new /obj/effect/proc_holder/spell/targeted/conjure_item/summon_pitchfork(null)) owner.AddSpell(new /obj/effect/proc_holder/spell/aimed/fireball/hellish(null)) owner.AddSpell(new /obj/effect/proc_holder/spell/targeted/infernal_jaunt(null)) /datum/antagonist/devil/proc/give_true_spells() - owner.AddSpell(new /obj/effect/proc_holder/spell/targeted/conjure_item/summon_pitchfork/greater(null)) owner.AddSpell(new /obj/effect/proc_holder/spell/aimed/fireball/hellish(null)) owner.AddSpell(new /obj/effect/proc_holder/spell/targeted/infernal_jaunt(null)) owner.AddSpell(new /obj/effect/proc_holder/spell/targeted/sintouch(null)) /datum/antagonist/devil/proc/give_arch_spells() - owner.AddSpell(new /obj/effect/proc_holder/spell/targeted/conjure_item/summon_pitchfork/ascended(null)) owner.AddSpell(new /obj/effect/proc_holder/spell/targeted/sintouch/ascended(null)) /datum/antagonist/devil/proc/beginResurrectionCheck(mob/living/body) diff --git a/code/modules/antagonists/nukeop/equipment/nuclearbomb.dm b/code/modules/antagonists/nukeop/equipment/nuclearbomb.dm index 920fbbdd557b..26d7321eb813 100644 --- a/code/modules/antagonists/nukeop/equipment/nuclearbomb.dm +++ b/code/modules/antagonists/nukeop/equipment/nuclearbomb.dm @@ -658,20 +658,6 @@ This is here to make the tiles around the station mininuke change when it's arme if(isobserver(user) || HAS_TRAIT(user.mind, TRAIT_DISK_VERIFIER)) . += "The serial numbers on [src] are incorrect." -/obj/item/disk/nuclear/attackby(obj/item/I, mob/living/user, params) - if(istype(I, /obj/item/claymore/highlander) && !fake) - var/obj/item/claymore/highlander/H = I - if(H.nuke_disk) - to_chat(user, "Wait... what?") - qdel(H.nuke_disk) - H.nuke_disk = null - return - user.visible_message("[user] captures [src]!", "You've got the disk! Defend it with your life!") - forceMove(H) - H.nuke_disk = src - return TRUE - return ..() - /obj/item/disk/nuclear/Destroy(force=FALSE) // respawning is handled in /obj/Destroy() if(force) diff --git a/code/modules/antagonists/wizard/equipment/artefact.dm b/code/modules/antagonists/wizard/equipment/artefact.dm index a20b905b590d..ae651cf055e6 100644 --- a/code/modules/antagonists/wizard/equipment/artefact.dm +++ b/code/modules/antagonists/wizard/equipment/artefact.dm @@ -259,8 +259,8 @@ H.equip_to_slot_or_del(new /obj/item/clothing/under/costume/roman(H), ITEM_SLOT_ICLOTHING) H.equip_to_slot_or_del(new /obj/item/clothing/shoes/roman(H), ITEM_SLOT_FEET) H.put_in_hands(new /obj/item/shield/riot/roman(H), TRUE) - H.put_in_hands(new /obj/item/claymore(H), TRUE) - H.equip_to_slot_or_del(new /obj/item/spear(H), ITEM_SLOT_BACK) + H.put_in_hands(new /obj/item/melee/sword/claymore(H), TRUE) + H.equip_to_slot_or_del(new /obj/item/melee/spear(H), ITEM_SLOT_BACK) /obj/item/voodoo diff --git a/code/modules/antagonists/wizard/equipment/spellbook.dm b/code/modules/antagonists/wizard/equipment/spellbook.dm index 69ff4bcfc2f5..9f4349a2bbc8 100644 --- a/code/modules/antagonists/wizard/equipment/spellbook.dm +++ b/code/modules/antagonists/wizard/equipment/spellbook.dm @@ -351,16 +351,6 @@ limit = 3 category = "Assistance" -/datum/spellbook_entry/item/mjolnir - name = "Mjolnir" - desc = "A mighty hammer on loan from Thor, God of Thunder. It crackles with barely contained power." - item_path = /obj/item/mjollnir - -/datum/spellbook_entry/item/singularity_hammer - name = "Singularity Hammer" - desc = "A hammer that creates an intensely powerful field of gravity where it strikes, pulling everything nearby to the point of impact." - item_path = /obj/item/singularityhammer - /datum/spellbook_entry/item/battlemage name = "Battlemage Armour" desc = "An ensorceled suit of armour, protected by a powerful shield. The shield can completely negate sixteen attacks before being permanently depleted." diff --git a/code/modules/awaymissions/mission_code/snowdin.dm b/code/modules/awaymissions/mission_code/snowdin.dm index 3c4537caabab..0f76623f617c 100644 --- a/code/modules/awaymissions/mission_code/snowdin.dm +++ b/code/modules/awaymissions/mission_code/snowdin.dm @@ -507,9 +507,7 @@ /obj/effect/spawner/lootdrop/snowdin/dungeonheavy name = "dungeon heavy" - loot = list(/obj/item/singularityhammer = 25, - /obj/item/mjollnir = 10, - /obj/item/fireaxe = 25, + loot = list(/obj/item/melee/axe/fire = 25, /obj/item/organ/brain/alien = 17, /obj/item/dualsaber = 15, /obj/item/organ/heart/demon = 7, @@ -530,7 +528,7 @@ loot = list(/obj/item/stack/sheet/mineral/snow{amount = 25} = 10, /obj/item/toy/snowball = 15, /obj/item/shovel = 10, - /obj/item/spear = 8, + /obj/item/melee/spear = 8, ) //special items//-- diff --git a/code/modules/cargo/blackmarket/blackmarket_items/weapons.dm b/code/modules/cargo/blackmarket/blackmarket_items/weapons.dm index eb16758b103b..cd0fcf9fd7a9 100644 --- a/code/modules/cargo/blackmarket/blackmarket_items/weapons.dm +++ b/code/modules/cargo/blackmarket/blackmarket_items/weapons.dm @@ -15,7 +15,7 @@ /datum/blackmarket_item/weapon/bone_spear name = "Bone Spear" desc = "Authentic tribal spear, made from real bones! A steal at any price, especially if you're a caveman." - item = /obj/item/spear/bonespear + item = /obj/item/melee/spear/bone price_min = 200 price_max = 300 @@ -25,7 +25,7 @@ /datum/blackmarket_item/weapon/switchblade name = "Switchblade" desc = "Extra shrap switchblades for intimidation AND style. Bandages not included if you cut yourself." - item = /obj/item/kitchen/knife/switchblade + item = /obj/item/melee/knife/switchblade price_min = 500 price_max = 700 diff --git a/code/modules/cargo/bounties/assistant.dm b/code/modules/cargo/bounties/assistant.dm index 3ddc15dfa33b..37507132a865 100644 --- a/code/modules/cargo/bounties/assistant.dm +++ b/code/modules/cargo/bounties/assistant.dm @@ -15,7 +15,7 @@ name = "Skateboard" description = "Nanotrasen has determined walking to be wasteful. Ship a skateboard to CentCom to speed operations up." reward = 900 // the tony hawk - wanted_types = list(/obj/vehicle/ridden/scooter/skateboard, /obj/item/melee/skateboard) + wanted_types = list(/obj/vehicle/ridden/scooter/skateboard, /obj/item/skateboard) /datum/bounty/item/assistant/stunprod name = "Stunprod" @@ -35,7 +35,7 @@ description = "CentCom's security forces are going through budget cuts. You will be paid if you ship a set of spears." reward = 2000 required_count = 5 - wanted_types = list(/obj/item/spear) + wanted_types = list(/obj/item/melee/spear) /datum/bounty/item/assistant/toolbox name = "Toolboxes" diff --git a/code/modules/cargo/bounties/mining.dm b/code/modules/cargo/bounties/mining.dm index 4eb48b09c7cb..6527228f31ec 100644 --- a/code/modules/cargo/bounties/mining.dm +++ b/code/modules/cargo/bounties/mining.dm @@ -22,7 +22,7 @@ name = "Bone Axe" description = "Station 12 has had their fire axes stolen by marauding clowns. Ship them a bone axe as a replacement." reward = 7500 - wanted_types = list(/obj/item/fireaxe/boneaxe) + wanted_types = list(/obj/item/melee/axe/bone) /datum/bounty/item/mining/bone_armor name = "Bone Armor" @@ -48,7 +48,7 @@ description = "Central Command's canteen is undergoing budget cuts. Ship over some bone daggers so our Chef can keep working." reward = 5000 required_count = 3 - wanted_types = list(/obj/item/kitchen/knife/combat/bone) + wanted_types = list(/obj/item/melee/knife/bone) /datum/bounty/item/mining/polypore_mushroom name = "Mushroom Bowl" diff --git a/code/modules/cargo/exports/lavaland.dm b/code/modules/cargo/exports/lavaland.dm index 4779886622a4..3ca8ec9ece05 100644 --- a/code/modules/cargo/exports/lavaland.dm +++ b/code/modules/cargo/exports/lavaland.dm @@ -9,9 +9,7 @@ /obj/item/book_of_babel, /obj/item/wisp_lantern, /obj/item/reagent_containers/glass/bottle/potion/flight, - /obj/item/katana/cursed, /obj/item/clothing/glasses/godeye, - /obj/item/melee/ghost_sword, /obj/item/clothing/suit/space/hardsuit/cult, /obj/item/voodoo, /obj/item/grenade/clusterbuster/inferno, @@ -22,9 +20,7 @@ /obj/item/lava_staff, /obj/item/ship_in_a_bottle, /obj/item/clothing/shoes/clown_shoes/banana_shoes, - /obj/item/kitchen/knife/envy, /obj/item/veilrender/vealrender, - /obj/item/nullrod/scythe/talking/necro, /obj/item/clothing/suit/armor/ascetic) /datum/export/lavaland/major //valuable chest/ruin loot and staff of storms diff --git a/code/modules/cargo/exports/weapons.dm b/code/modules/cargo/exports/weapons.dm index bbe73991f7ef..c6ee67ed091e 100644 --- a/code/modules/cargo/exports/weapons.dm +++ b/code/modules/cargo/exports/weapons.dm @@ -13,7 +13,7 @@ /datum/export/weapon/knife cost = 100 unit_name = "combat knife" - export_types = list(/obj/item/kitchen/knife/combat) + export_types = list(/obj/item/melee/knife/combat) /datum/export/weapon/taser diff --git a/code/modules/cargo/packs/costumes_toys.dm b/code/modules/cargo/packs/costumes_toys.dm index 01bfcc1dc756..fd3ba6c74863 100644 --- a/code/modules/cargo/packs/costumes_toys.dm +++ b/code/modules/cargo/packs/costumes_toys.dm @@ -115,7 +115,7 @@ if(prob(30)) //Not all mafioso have mustaches, some people also find this item annoying. new /obj/item/clothing/mask/fakemoustache/italian(C) if(prob(10)) //A little extra sugar every now and then to shake things up. - new /obj/item/kitchen/knife/switchblade(C) + new /obj/item/melee/knife/switchblade(C) /datum/supply_pack/costumes_toys/mech_suits name = "Exosuit Pilot's Suit Crate" diff --git a/code/modules/cargo/packs/sec_supply.dm b/code/modules/cargo/packs/sec_supply.dm index 28f15b583206..f0f062160c79 100644 --- a/code/modules/cargo/packs/sec_supply.dm +++ b/code/modules/cargo/packs/sec_supply.dm @@ -72,11 +72,24 @@ name = "Survival Knives Crate" desc = "Contains three sharpened survival knives. Each knife guaranteed to fit snugly inside any galactic-standard boot." cost = 500 - contains = list(/obj/item/kitchen/knife/combat/survival, - /obj/item/kitchen/knife/combat/survival, - /obj/item/kitchen/knife/combat/survival) + contains = list(/obj/item/melee/knife/survival, + /obj/item/melee/knife/survival, + /obj/item/melee/knife/survival) crate_name = "combat knife crate" +/* +/datum/supply_pack/sec_supply/machete + name = "Stampted Steel Machete Crate" + desc = "Contains five mass produced machetes. A perfect choice for crews on a budget." + cost = 500 + contains = list(/obj/item/melee/sword/mass, + /obj/item/melee/sword/mass, + /obj/item/melee/sword/mass, + /obj/item/melee/sword/mass, + /obj/item/melee/sword/mass) + crate_name = "combat knife crate" +*/ + /datum/supply_pack/sec_supply/fire name = "Incendiary Weapons Crate" desc = "Burn, baby burn. Contains three incendiary grenades and three prebuilt flamethrowers." diff --git a/code/modules/clothing/outfits/ert/frontiersmen_ert.dm b/code/modules/clothing/outfits/ert/frontiersmen_ert.dm index d68c49e61778..8401455bf7d8 100644 --- a/code/modules/clothing/outfits/ert/frontiersmen_ert.dm +++ b/code/modules/clothing/outfits/ert/frontiersmen_ert.dm @@ -44,7 +44,7 @@ suit = pickweight(list( /obj/item/clothing/suit/armor/vest = 5, /obj/item/clothing/suit/armor/vest/bulletproof/frontier = 5, - /obj/item/clothing/suit/armor/vest/scrap_armor = 1)) + /obj/item/clothing/suit/armor/vest/scrap = 1)) if(prob(30)) mask = pickweight(list( @@ -123,9 +123,9 @@ /obj/item/gun/energy/e_gun/mini)) if("Melee") r_hand = pickweight(list( - /obj/item/kitchen/knife/combat/survival = 15, + /obj/item/melee/knife/survival = 15, /obj/item/melee/baseball_bat = 10, - /obj/item/melee/roastingstick = 2, + /obj/item/roastingstick = 2, /obj/item/kitchen/fork = 1, /obj/item/melee/flyswatter = 1, )) @@ -173,14 +173,14 @@ suit = /obj/item/clothing/suit/armor/frontier suit_store = /obj/item/gun/ballistic/automatic/pistol/deagle - backpack_contents = list(/obj/item/clothing/mask/gas/frontiersmen, /obj/item/ammo_box/magazine/m50=2, /obj/item/binoculars=1, /obj/item/kitchen/knife/combat/survival) + backpack_contents = list(/obj/item/clothing/mask/gas/frontiersmen, /obj/item/ammo_box/magazine/m50=2, /obj/item/binoculars=1, /obj/item/melee/knife/survival) /datum/outfit/job/frontiersmen/ert/leader/unnarmed name = "ERT - Frontiersman Officer (Unnarmed)" suit_store = null - backpack_contents = list(/obj/item/clothing/mask/gas/frontiersmen, /obj/item/binoculars=1, /obj/item/kitchen/knife/combat/survival) + backpack_contents = list(/obj/item/clothing/mask/gas/frontiersmen, /obj/item/binoculars=1, /obj/item/melee/knife/survival) /datum/outfit/job/frontiersmen/ert/medic name = "ERT - Frontiersman Medic" diff --git a/code/modules/clothing/outfits/ert/indie_ert.dm b/code/modules/clothing/outfits/ert/indie_ert.dm index e45f0895d0f4..236f9ee75c57 100644 --- a/code/modules/clothing/outfits/ert/indie_ert.dm +++ b/code/modules/clothing/outfits/ert/indie_ert.dm @@ -75,7 +75,7 @@ jobtype = /datum/job/chief_engineer job_icon = "chiefengineer" - back = /obj/item/fireaxe + back = /obj/item/melee/axe/fire suit = /obj/item/clothing/suit/space/hardsuit/engine suit_store = /obj/item/tank/internals/oxygen/red head = null diff --git a/code/modules/clothing/outfits/ert/inteq_ert.dm b/code/modules/clothing/outfits/ert/inteq_ert.dm index b3fc0c61970c..9fd796d04516 100644 --- a/code/modules/clothing/outfits/ert/inteq_ert.dm +++ b/code/modules/clothing/outfits/ert/inteq_ert.dm @@ -15,7 +15,7 @@ belt = /obj/item/storage/belt/security/webbing/inteq/skm back = /obj/item/storage/backpack/fireproof - l_pocket = /obj/item/kitchen/knife/combat + l_pocket = /obj/item/melee/knife/combat r_pocket = /obj/item/flashlight/seclite backpack_contents = list(/obj/item/radio=1) diff --git a/code/modules/clothing/outfits/ert/minutemen_ert.dm b/code/modules/clothing/outfits/ert/minutemen_ert.dm index 482777814c64..d5a3ec72e94c 100644 --- a/code/modules/clothing/outfits/ert/minutemen_ert.dm +++ b/code/modules/clothing/outfits/ert/minutemen_ert.dm @@ -9,7 +9,7 @@ head = /obj/item/clothing/head/helmet/riot/clip belt = /obj/item/storage/belt/military/clip/cm15 glasses = /obj/item/clothing/glasses/hud/health/night - r_pocket = /obj/item/kitchen/knife/combat + r_pocket = /obj/item/melee/knife/combat l_pocket = /obj/item/extinguisher/mini backpack_contents = list( diff --git a/code/modules/clothing/outfits/ert/nanotrasen_ert.dm b/code/modules/clothing/outfits/ert/nanotrasen_ert.dm index a66ee78c7239..1ca40cd640e3 100644 --- a/code/modules/clothing/outfits/ert/nanotrasen_ert.dm +++ b/code/modules/clothing/outfits/ert/nanotrasen_ert.dm @@ -29,7 +29,7 @@ belt = /obj/item/storage/belt/security/full backpack_contents = list(/obj/item/storage/box/survival/engineer=1,\ /obj/item/melee/baton/loaded=1) - l_pocket = /obj/item/kitchen/knife/switchblade + l_pocket = /obj/item/melee/knife/switchblade /datum/outfit/centcom/ert/commander/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) ..() @@ -287,7 +287,7 @@ ) belt = /obj/item/storage/belt/military/assault glasses = /obj/item/clothing/glasses/hud/security/sunglasses/eyepatch - l_pocket = /obj/item/kitchen/knife/combat + l_pocket = /obj/item/melee/knife/combat r_pocket = /obj/item/tank/internals/emergency_oxygen/double uniform = /obj/item/clothing/under/rank/security/officer/military accessory = /obj/item/clothing/accessory/holster/marine @@ -399,7 +399,7 @@ box = /obj/item/storage/box/survival/security l_pocket = /obj/item/restraints/handcuffs - r_pocket = /obj/item/kitchen/knife/combat + r_pocket = /obj/item/melee/knife/combat backpack_contents = list(/obj/item/radio=1, /obj/item/stock_parts/cell/gun/upgraded=2, /obj/item/screwdriver=1) diff --git a/code/modules/clothing/outfits/ert/syndicate_ert.dm b/code/modules/clothing/outfits/ert/syndicate_ert.dm index f2dadc4e0d95..c37dab500091 100644 --- a/code/modules/clothing/outfits/ert/syndicate_ert.dm +++ b/code/modules/clothing/outfits/ert/syndicate_ert.dm @@ -14,7 +14,7 @@ back = /obj/item/storage/backpack/security belt = /obj/item/storage/belt/military/c20r - r_pocket = /obj/item/kitchen/knife/combat + r_pocket = /obj/item/melee/knife/combat l_pocket = /obj/item/grenade/frag implants = list(/obj/item/implant/weapons_auth) @@ -75,7 +75,7 @@ belt = /obj/item/storage/belt/security suit_store = /obj/item/gun/ballistic/automatic/marksman/taipan - r_pocket = /obj/item/kitchen/knife/combat/survival + r_pocket = /obj/item/melee/knife/survival l_pocket = /obj/item/binoculars backpack_contents = list(/obj/item/ammo_box/magazine/sniper_rounds=2, /obj/item/radio=1) @@ -133,7 +133,7 @@ head = /obj/item/clothing/head/soft/cybersun/medical belt = /obj/item/storage/belt/medical/webbing/paramedic back = /obj/item/storage/backpack/ert/medical - l_pocket = /obj/item/kitchen/knife/combat/survival + l_pocket = /obj/item/melee/knife/survival r_pocket = /obj/item/pinpointer/crew accessory = /obj/item/clothing/accessory/holster/marine diff --git a/code/modules/clothing/outfits/factions/frontiersmen.dm b/code/modules/clothing/outfits/factions/frontiersmen.dm index 44d0c4920784..997eec2209d4 100644 --- a/code/modules/clothing/outfits/factions/frontiersmen.dm +++ b/code/modules/clothing/outfits/factions/frontiersmen.dm @@ -133,7 +133,7 @@ shoes = /obj/item/clothing/shoes/jackboots head = /obj/item/clothing/head/beret/sec/frontier/officer gloves = /obj/item/clothing/gloves/combat - r_pocket = /obj/item/kitchen/knife/combat/survival + r_pocket = /obj/item/melee/knife/survival // Head of Security /datum/outfit/job/frontiersmen/hos @@ -184,7 +184,7 @@ accessory = /obj/item/clothing/accessory/armband/med uniform = /obj/item/clothing/under/frontiersmen glasses = /obj/item/clothing/glasses/hud/health - r_pocket = /obj/item/kitchen/knife/combat/survival + r_pocket = /obj/item/melee/knife/survival suit = /obj/item/clothing/suit/frontiersmen head = /obj/item/clothing/head/frontier belt = /obj/item/storage/belt/medical/webbing/frontiersmen diff --git a/code/modules/clothing/outfits/factions/independent.dm b/code/modules/clothing/outfits/factions/independent.dm index e9b783de9780..2b93739fb0f9 100644 --- a/code/modules/clothing/outfits/factions/independent.dm +++ b/code/modules/clothing/outfits/factions/independent.dm @@ -53,7 +53,7 @@ uniform = /obj/item/clothing/under/utility head = /obj/item/clothing/head/soft/black shoes = /obj/item/clothing/shoes/combat - l_pocket = /obj/item/kitchen/knife/combat/survival + l_pocket = /obj/item/melee/knife/survival gloves = /obj/item/clothing/gloves/combat implants = list(/obj/item/implant/radio) @@ -145,7 +145,7 @@ suit = /obj/item/clothing/suit/armor/vest/marine/medium head = /obj/item/clothing/head/soft/black shoes = /obj/item/clothing/shoes/combat - l_pocket = /obj/item/kitchen/knife/combat + l_pocket = /obj/item/melee/knife/combat implants = list(/obj/item/implant/radio) accessory = null @@ -298,7 +298,7 @@ uniform = /obj/item/clothing/under/utility head = /obj/item/clothing/head/soft/black shoes = /obj/item/clothing/shoes/combat - l_pocket = /obj/item/kitchen/knife/combat + l_pocket = /obj/item/melee/knife/combat backpack_contents = list(/obj/item/melee/baton/loaded=1) @@ -349,7 +349,7 @@ uniform = /obj/item/clothing/under/utility head = /obj/item/clothing/head/soft/black shoes = /obj/item/clothing/shoes/combat - l_pocket = /obj/item/kitchen/knife/combat/survival + l_pocket = /obj/item/melee/knife/survival gloves = /obj/item/clothing/gloves/color/red/insulated implants = list(/obj/item/implant/radio) @@ -572,7 +572,7 @@ l_pocket = /obj/item/storage/bag/ore backpack_contents = list( /obj/item/flashlight/seclite=1,\ - /obj/item/kitchen/knife/combat/survival=1,\ + /obj/item/melee/knife/survival=1,\ /obj/item/stack/marker_beacon/ten=1,\ /obj/item/radio/weather_monitor=1) diff --git a/code/modules/clothing/outfits/factions/nanotrasen.dm b/code/modules/clothing/outfits/factions/nanotrasen.dm index b22c69b38f6b..e292a6e61d03 100644 --- a/code/modules/clothing/outfits/factions/nanotrasen.dm +++ b/code/modules/clothing/outfits/factions/nanotrasen.dm @@ -316,7 +316,7 @@ backpack_contents = list( /obj/item/flashlight/seclite=1, - /obj/item/kitchen/knife/combat/survival=1, + /obj/item/melee/knife/survival=1, /obj/item/stack/marker_beacon/ten=1, /obj/item/radio/weather_monitor=1, ) @@ -569,7 +569,7 @@ backpack = /obj/item/storage/backpack/ert/security belt = /obj/item/storage/belt/military id = /obj/item/card/id/ert/security - r_pocket = /obj/item/kitchen/knife/combat/survival + r_pocket = /obj/item/melee/knife/survival backpack_contents = list(/obj/item/radio, /obj/item/flashlight/seclite) /datum/outfit/job/nanotrasen/security/ert/engi @@ -580,7 +580,7 @@ backpack = /obj/item/storage/backpack/ert/engineer belt = /obj/item/storage/belt/utility/full/ert id = /obj/item/card/id/ert/security - r_pocket = /obj/item/kitchen/knife/combat/survival + r_pocket = /obj/item/melee/knife/survival backpack_contents = list(/obj/item/radio, /obj/item/flashlight/seclite) accessory = /obj/item/clothing/accessory/armband/engine glasses = /obj/item/clothing/glasses/hud/diagnostic/sunglasses @@ -593,7 +593,7 @@ backpack = /obj/item/storage/backpack/ert/medical belt = /obj/item/storage/belt/medical/webbing/paramedic id = /obj/item/card/id/ert/security - r_pocket = /obj/item/kitchen/knife/combat/survival + r_pocket = /obj/item/melee/knife/survival backpack_contents = list(/obj/item/radio, /obj/item/flashlight/seclite) accessory = /obj/item/clothing/accessory/armband/med glasses = /obj/item/clothing/glasses/hud/health/night diff --git a/code/modules/clothing/outfits/factions/solgov.dm b/code/modules/clothing/outfits/factions/solgov.dm index 3b14fc89dafa..c4aed59c7e21 100644 --- a/code/modules/clothing/outfits/factions/solgov.dm +++ b/code/modules/clothing/outfits/factions/solgov.dm @@ -101,7 +101,7 @@ implants = list(/obj/item/implant/mindshield) backpack_contents = list( - /obj/item/kitchen/knife/letter_opener = 1 + /obj/item/melee/knife/letter_opener = 1 ) /datum/outfit/job/solgov/overseer @@ -159,7 +159,7 @@ r_pocket = /obj/item/storage/bag/ore //causes issues if spawned in backpack backpack_contents = list( /obj/item/flashlight/seclite=1,\ - /obj/item/kitchen/knife/combat/survival=1,\ + /obj/item/melee/knife/survival=1,\ /obj/item/stack/marker_beacon/ten=1) backpack = /obj/item/storage/backpack/explorer diff --git a/code/modules/clothing/outfits/factions/syndicate.dm b/code/modules/clothing/outfits/factions/syndicate.dm index 269b476ccd91..1d91a94b766d 100644 --- a/code/modules/clothing/outfits/factions/syndicate.dm +++ b/code/modules/clothing/outfits/factions/syndicate.dm @@ -516,7 +516,7 @@ head = /obj/item/clothing/head/HoS/beret/syndicate gloves = /obj/item/clothing/gloves/color/white id = /obj/item/card/id/syndicate_command/crew_id - r_pocket = /obj/item/kitchen/knife/combat/survival + r_pocket = /obj/item/melee/knife/survival glasses = /obj/item/clothing/glasses/hud/health backpack_contents = list(/obj/item/storage/box/ids=1,\ /obj/item/melee/classic_baton/telescopic=1, /obj/item/modular_computer/tablet/preset/advanced = 1) @@ -532,7 +532,7 @@ head = /obj/item/clothing/head/HoS/cybersun gloves = /obj/item/clothing/gloves/combat id = /obj/item/card/id/syndicate_command/crew_id - r_pocket = /obj/item/kitchen/knife/combat/survival + r_pocket = /obj/item/melee/knife/survival glasses = /obj/item/clothing/glasses/sunglasses /datum/outfit/job/syndicate/head_of_personnel/suns @@ -634,7 +634,7 @@ uniform = /obj/item/clothing/under/syndicate/suns/pkuniform suit = /obj/item/clothing/suit/armor/vest/suns/hos - belt = /obj/item/melee/sabre/suns/telescopic + belt = /obj/item/melee/sword/sabre/suns/telescopic gloves = /obj/item/clothing/gloves/tackler/dolphin/suns shoes = /obj/item/clothing/shoes/combat/suns head = /obj/item/clothing/head/welding/suns/hos @@ -711,7 +711,7 @@ head = /obj/item/clothing/head/hardliners suit = /obj/item/clothing/suit/hardliners glasses = /obj/item/clothing/glasses/hud/health - r_pocket = /obj/item/kitchen/knife/combat/survival + r_pocket = /obj/item/melee/knife/survival back = /obj/item/storage/backpack/duffelbag/syndie/med id = /obj/item/card/id/syndicate_command/crew_id backpack_contents = list(/obj/item/storage/box/survival/syndie=1, /obj/item/storage/firstaid/medical,) @@ -723,7 +723,7 @@ head = /obj/item/clothing/head/ngr/surgical suit = /obj/item/clothing/suit/ngr/smock glasses = /obj/item/clothing/glasses/hud/health - r_pocket = /obj/item/kitchen/knife/combat/survival + r_pocket = /obj/item/melee/knife/survival back = /obj/item/storage/backpack/duffelbag/syndie/med id = /obj/item/card/id/syndicate_command/crew_id backpack_contents = list(/obj/item/storage/box/survival/syndie=1, /obj/item/storage/firstaid/medical,) @@ -897,7 +897,7 @@ job_icon = "securityofficer" uniform = /obj/item/clothing/under/syndicate - r_pocket = /obj/item/kitchen/knife/combat/survival + r_pocket = /obj/item/melee/knife/survival belt = /obj/item/storage/belt/military back = /obj/item/storage/backpack suit = /obj/item/clothing/suit/armor/vest @@ -994,7 +994,7 @@ uniform = /obj/item/clothing/under/syndicate/suns/pkuniform suit = /obj/item/clothing/suit/armor/vest/suns alt_suit = /obj/item/clothing/suit/toggle/suns/pkcoat - belt = /obj/item/melee/sabre/suns/telescopic + belt = /obj/item/melee/sword/sabre/suns/telescopic gloves = /obj/item/clothing/gloves/tackler/dolphin/suns shoes = /obj/item/clothing/shoes/jackboots/suns/long head = /obj/item/clothing/head/welding/suns @@ -1020,7 +1020,7 @@ r_pocket = /obj/item/storage/bag/ore backpack_contents = list( /obj/item/flashlight/seclite=1,\ - /obj/item/kitchen/knife/combat/survival=1,\ + /obj/item/melee/knife/survival=1,\ /obj/item/mining_voucher=1,\ /obj/item/stack/marker_beacon/ten=1) diff --git a/code/modules/clothing/outfits/standard.dm b/code/modules/clothing/outfits/standard.dm index 100cc7ff0f52..1754e84c7e8e 100644 --- a/code/modules/clothing/outfits/standard.dm +++ b/code/modules/clothing/outfits/standard.dm @@ -102,7 +102,6 @@ uniform = /obj/item/clothing/under/color/black/ghost suit = /obj/item/clothing/suit/hooded/cultrobes/alt/ghost shoes = /obj/item/clothing/shoes/cult/alt/ghost - r_hand = /obj/item/melee/cultblade/ghost /datum/outfit/wizard name = "Blue Wizard" diff --git a/code/modules/clothing/spacesuits/miscellaneous.dm b/code/modules/clothing/spacesuits/miscellaneous.dm index 67dc7ce529b3..6e825e48ea4b 100644 --- a/code/modules/clothing/spacesuits/miscellaneous.dm +++ b/code/modules/clothing/spacesuits/miscellaneous.dm @@ -36,7 +36,7 @@ Contains: desc = "A prototype designed to replace the ageing MK.II SWAT suit. Based on the streamlined MK.II model, the traditional ceramic and graphene plate construction was replaced with plasteel, allowing superior armor against most threats. There's room for some kind of energy projection device on the back." icon_state = "deathsquad" item_state = "swat_suit" - allowed = list(/obj/item/gun, /obj/item/ammo_box, /obj/item/ammo_casing, /obj/item/melee/baton, /obj/item/restraints/handcuffs, /obj/item/tank/internals, /obj/item/kitchen/knife/combat) + allowed = list(/obj/item/gun, /obj/item/ammo_box, /obj/item/ammo_casing, /obj/item/melee/baton, /obj/item/restraints/handcuffs, /obj/item/tank/internals, /obj/item/melee/knife/combat) armor = list("melee" = 80, "bullet" = 80, "laser" = 50, "energy" = 60, "bomb" = 100, "bio" = 100, "rad" = 100, "fire" = 100, "acid" = 100) strip_delay = 130 max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT @@ -50,7 +50,7 @@ Contains: desc = "A tactical space suit first developed in a joint effort by the defunct IS-ERI and Nanotrasen in 20XX for military space operations. A tried and true workhorse, it is very difficult to move in but offers robust protection against all threats!" icon_state = "heavy" item_state = "swat_suit" - allowed = list(/obj/item/gun, /obj/item/ammo_box, /obj/item/ammo_casing, /obj/item/melee/baton, /obj/item/restraints/handcuffs, /obj/item/tank/internals, /obj/item/kitchen/knife/combat) + allowed = list(/obj/item/gun, /obj/item/ammo_box, /obj/item/ammo_casing, /obj/item/melee/baton, /obj/item/restraints/handcuffs, /obj/item/tank/internals, /obj/item/melee/knife/combat) armor = list("melee" = 40, "bullet" = 30, "laser" = 30,"energy" = 40, "bomb" = 50, "bio" = 90, "rad" = 20, "fire" = 100, "acid" = 100) strip_delay = 120 resistance_flags = FIRE_PROOF | ACID_PROOF @@ -363,7 +363,7 @@ Contains: armor = list("melee" = 30, "bullet" = 10, "laser" = 10, "energy" = 20, "bomb" = 10, "bio" = 100, "rad" = 10, "fire" = 100, "acid" = 100) max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT resistance_flags = FIRE_PROOF - allowed = list(/obj/item/flashlight, /obj/item/tank/internals, /obj/item/pickaxe, /obj/item/spear, /obj/item/organ/regenerative_core/legion, /obj/item/kitchen/knife, /obj/item/kinetic_crusher, /obj/item/resonator, /obj/item/melee/transforming/cleaving_saw) + allowed = list(/obj/item/flashlight, /obj/item/tank/internals, /obj/item/pickaxe, /obj/item/melee/spear, /obj/item/organ/regenerative_core/legion, /obj/item/kinetic_crusher, /obj/item/resonator, /obj/item/melee/transforming/cleaving_saw) /obj/item/clothing/suit/space/hardsuit/berserker/RemoveHelmet() var/obj/item/clothing/head/helmet/space/hardsuit/berserker/helm = helmet @@ -489,7 +489,7 @@ Contains: desc = "A custom version of the MK.II SWAT suit, modified to look rugged and tough. Works as a space suit, if you can find a helmet." icon_state = "hunter" item_state = "swat_suit" - allowed = list(/obj/item/gun, /obj/item/ammo_box, /obj/item/ammo_casing, /obj/item/melee/baton, /obj/item/restraints/handcuffs, /obj/item/tank/internals, /obj/item/kitchen/knife/combat) + allowed = list(/obj/item/gun, /obj/item/ammo_box, /obj/item/ammo_casing, /obj/item/melee/baton, /obj/item/restraints/handcuffs, /obj/item/tank/internals, /obj/item/melee/knife/combat) armor = list("melee" = 60, "bullet" = 40, "laser" = 40, "energy" = 50, "bomb" = 100, "bio" = 100, "rad" = 100, "fire" = 100, "acid" = 100) strip_delay = 130 resistance_flags = FIRE_PROOF | ACID_PROOF diff --git a/code/modules/clothing/suits/armor.dm b/code/modules/clothing/suits/armor.dm index a16680353b6f..b9eb2b6d7c53 100644 --- a/code/modules/clothing/suits/armor.dm +++ b/code/modules/clothing/suits/armor.dm @@ -277,7 +277,7 @@ desc = "A classic suit of plate armour, highly effective at stopping melee attacks." icon_state = "riot_knight_green" item_state = "riot_knight_green" - allowed = list(/obj/item/nullrod, /obj/item/claymore, /obj/item/banner, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/oxygen, /obj/item/tank/internals/plasmaman) + allowed = list(/obj/item/melee/sword/claymore, /obj/item/banner, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/oxygen, /obj/item/tank/internals/plasmaman) /obj/item/clothing/suit/armor/riot/knight/yellow icon_state = "riot_knight_yellow" @@ -400,13 +400,6 @@ icon_state = "armor_syndie" item_state = "syndiearmor" -/obj/item/clothing/suit/armor/vest/scrap_armor - name = "scrap armor" - desc = "An 'armor' vest consisting of sheet metal held together with cable. Who thought this was a good idea?" - icon_state = "scraparmor" - item_state = "scraparmor" - armor = list("melee" = 5) - /obj/item/clothing/suit/armor/curator name = "treasure hunter's coat" desc = "Both fashionable and lightly armoured, this jacket is favoured by treasure hunters the galaxy over." diff --git a/code/modules/clothing/suits/bio.dm b/code/modules/clothing/suits/bio.dm index 3ef1628c19b4..c62d0e92b8c0 100644 --- a/code/modules/clothing/suits/bio.dm +++ b/code/modules/clothing/suits/bio.dm @@ -98,4 +98,4 @@ /obj/item/clothing/suit/bio_suit/plaguedoctorsuit/Initialize() . = ..() - allowed += list(/obj/item/storage/book/bible, /obj/item/nullrod, /obj/item/cane) + allowed += list(/obj/item/storage/book/bible, /obj/item/cane) diff --git a/code/modules/clothing/suits/chaplainsuits.dm b/code/modules/clothing/suits/chaplainsuits.dm index 58802e01b8a1..073966a5fc15 100644 --- a/code/modules/clothing/suits/chaplainsuits.dm +++ b/code/modules/clothing/suits/chaplainsuits.dm @@ -1,10 +1,10 @@ //Chaplain Suit Subtypes //If any new staple chaplain items get added, put them in these lists /obj/item/clothing/suit/chaplainsuit - allowed = list(/obj/item/storage/book/bible, /obj/item/nullrod, /obj/item/reagent_containers/food/drinks/bottle/holywater, /obj/item/storage/fancy/candle_box, /obj/item/candle, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman) + allowed = list(/obj/item/storage/book/bible, /obj/item/reagent_containers/food/drinks/bottle/holywater, /obj/item/storage/fancy/candle_box, /obj/item/candle, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman) /obj/item/clothing/suit/hooded/chaplainsuit - allowed = list(/obj/item/storage/book/bible, /obj/item/nullrod, /obj/item/reagent_containers/food/drinks/bottle/holywater, /obj/item/storage/fancy/candle_box, /obj/item/candle, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman) + allowed = list(/obj/item/storage/book/bible, /obj/item/reagent_containers/food/drinks/bottle/holywater, /obj/item/storage/fancy/candle_box, /obj/item/candle, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman) //Suits /obj/item/clothing/suit/chaplainsuit/holidaypriest diff --git a/code/modules/clothing/suits/cloaks.dm b/code/modules/clothing/suits/cloaks.dm index 4e3f6d5e3a9c..763be0e2f468 100644 --- a/code/modules/clothing/suits/cloaks.dm +++ b/code/modules/clothing/suits/cloaks.dm @@ -76,7 +76,7 @@ name = "goliath cloak" icon_state = "goliath_cloak" desc = "A staunch, practical cape made out of numerous monster materials, it is coveted amongst exiles & hermits." - allowed = list(/obj/item/flashlight, /obj/item/tank/internals, /obj/item/pickaxe, /obj/item/spear, /obj/item/organ/regenerative_core/legion, /obj/item/kitchen/knife/combat/bone, /obj/item/kitchen/knife/combat/survival) + allowed = list(/obj/item/flashlight, /obj/item/tank/internals, /obj/item/pickaxe, /obj/item/melee/spear, /obj/item/organ/regenerative_core/legion, /obj/item/melee/knife/bone, /obj/item/melee/knife/survival) armor = list("melee" = 35, "bullet" = 10, "laser" = 25, "energy" = 35, "bomb" = 25, "bio" = 0, "rad" = 0, "fire" = 60, "acid" = 60) //a fair alternative to bone armor, requiring alternative materials and gaining a suit slot hoodtype = /obj/item/clothing/head/hooded/cloakhood/goliath body_parts_covered = CHEST|GROIN|ARMS @@ -94,7 +94,7 @@ name = "drake armour" icon_state = "dragon" desc = "A suit of armour fashioned from the remains of an ash drake." - allowed = list(/obj/item/flashlight, /obj/item/tank/internals, /obj/item/resonator, /obj/item/mining_scanner, /obj/item/t_scanner/adv_mining_scanner, /obj/item/gun/energy/kinetic_accelerator, /obj/item/pickaxe, /obj/item/spear) + allowed = list(/obj/item/flashlight, /obj/item/tank/internals, /obj/item/resonator, /obj/item/mining_scanner, /obj/item/t_scanner/adv_mining_scanner, /obj/item/gun/energy/kinetic_accelerator, /obj/item/pickaxe, /obj/item/melee/spear) armor = list("melee" = 50, "bullet" = 10, "laser" = 40, "energy" = 50, "bomb" = 50, "bio" = 60, "rad" = 50, "fire" = 100, "acid" = 100) hoodtype = /obj/item/clothing/head/hooded/cloakhood/drake heat_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS diff --git a/code/modules/clothing/suits/jobs.dm b/code/modules/clothing/suits/jobs.dm index 312f14dec507..3b1735208dda 100644 --- a/code/modules/clothing/suits/jobs.dm +++ b/code/modules/clothing/suits/jobs.dm @@ -278,7 +278,7 @@ hoodtype = /obj/item/clothing/head/hooded/enginseer body_parts_covered = CHEST|GROIN|LEGS|ARMS|HANDS flags_inv = HIDESHOES|HIDEJUMPSUIT|HIDEGLOVES - allowed = list(/obj/item/flashlight, /obj/item/tank/internals, /obj/item/gun, /obj/item/melee, /obj/item/nullrod, /obj/item/radio, /obj/item/storage/book) + allowed = list(/obj/item/flashlight, /obj/item/tank/internals, /obj/item/gun, /obj/item/melee, /obj/item/radio, /obj/item/storage/book) /obj/item/clothing/head/hooded/enginseer name = "enginseer's hood" diff --git a/code/modules/clothing/suits/miscellaneous.dm b/code/modules/clothing/suits/miscellaneous.dm index f8e8c3f69909..6e8b87b06285 100644 --- a/code/modules/clothing/suits/miscellaneous.dm +++ b/code/modules/clothing/suits/miscellaneous.dm @@ -132,7 +132,7 @@ item_state = "imperium_monk" body_parts_covered = CHEST|GROIN|LEGS|ARMS flags_inv = HIDESHOES|HIDEJUMPSUIT - allowed = list(/obj/item/storage/book/bible, /obj/item/nullrod, /obj/item/reagent_containers/food/drinks/bottle/holywater, /obj/item/storage/fancy/candle_box, /obj/item/candle, /obj/item/tank/internals/emergency_oxygen) + allowed = list(/obj/item/storage/book/bible, /obj/item/melee/sword, /obj/item/reagent_containers/food/drinks/bottle/holywater, /obj/item/storage/fancy/candle_box, /obj/item/candle, /obj/item/tank/internals/emergency_oxygen) /obj/item/clothing/suit/chickensuit diff --git a/code/modules/clothing/under/accessories.dm b/code/modules/clothing/under/accessories.dm index f7710d52a12d..d1ee50d1a629 100644 --- a/code/modules/clothing/under/accessories.dm +++ b/code/modules/clothing/under/accessories.dm @@ -393,7 +393,6 @@ desc = "A legion skull fitted to a codpiece, intended to protect the important things in life." icon_state = "skull" above_suit = TRUE - armor = list("melee" = 10, "bullet" = 10, "laser" = 5, "energy" = 5, "bomb" = 20, "bio" = 20, "rad" = 5, "fire" = 40, "acid" = 40) attachment_slot = GROIN /obj/item/clothing/accessory/skilt @@ -402,7 +401,6 @@ icon_state = "skilt" above_suit = TRUE minimize_when_attached = FALSE - armor = list("melee" = 5, "bullet" = 5, "laser" = 5, "energy" = 5, "bomb" = 20, "bio" = 20, "rad" = 5, "fire" = 0, "acid" = 25) attachment_slot = GROIN /obj/item/clothing/accessory/holster diff --git a/code/modules/events/wizard/curseditems.dm b/code/modules/events/wizard/curseditems.dm deleted file mode 100644 index e99b0d754910..000000000000 --- a/code/modules/events/wizard/curseditems.dm +++ /dev/null @@ -1,60 +0,0 @@ -/datum/round_event_control/wizard/cursed_items //fashion disasters - name = "Cursed Items" - weight = 3 - typepath = /datum/round_event/wizard/cursed_items - max_occurrences = 3 - earliest_start = 0 MINUTES - -//Note about adding items to this: Because of how NODROP_1 works if an item spawned to the hands can also be equiped to a slot -//it will be able to be put into that slot from the hand, but then get stuck there. To avoid this make a new subtype of any -//item you want to equip to the hand, and set its slots_flags = null. Only items equiped to hands need do this. - -/datum/round_event/wizard/cursed_items/start() - var/item_set = pick("wizardmimic", "swords", "bigfatdoobie", "boxing", "voicemodulators", "catgirls2015") - var/list/loadout[SLOTS_AMT] - var/ruins_spaceworthiness - var/ruins_wizard_loadout - - switch(item_set) - if("wizardmimic") - loadout[ITEM_SLOT_OCLOTHING] = /obj/item/clothing/suit/wizrobe - loadout[ITEM_SLOT_FEET] = /obj/item/clothing/shoes/sandal/magic - loadout[ITEM_SLOT_HEAD] = /obj/item/clothing/head/wizard - ruins_spaceworthiness = 1 - if("swords") - loadout[ITEM_SLOT_HANDS] = /obj/item/katana/cursed - if("bigfatdoobie") - loadout[ITEM_SLOT_MASK] = /obj/item/clothing/mask/cigarette/rollie/trippy - ruins_spaceworthiness = 1 - if("boxing") - loadout[ITEM_SLOT_MASK] = /obj/item/clothing/mask/luchador - loadout[ITEM_SLOT_GLOVES] = /obj/item/clothing/gloves/boxing - ruins_spaceworthiness = 1 - if("voicemodulators") - loadout[ITEM_SLOT_MASK] = /obj/item/clothing/mask/chameleon - if("catgirls2015") - loadout[ITEM_SLOT_HEAD] = /obj/item/clothing/head/kitty - ruins_spaceworthiness = 1 - ruins_wizard_loadout = 1 - - for(var/mob/living/carbon/human/H as anything in GLOB.human_list) - if(ruins_spaceworthiness && isspaceturf(H.loc) || isplasmaman(H)) - continue //#savetheminers - if(ruins_wizard_loadout && iswizard(H)) - continue - if(item_set == "catgirls2015") //Wizard code means never having to say you're sorry - H.gender = FEMALE - for(var/i in 1 to loadout.len) - if(loadout[i]) - var/obj/item/J = loadout[i] - var/obj/item/I = new J //dumb but required because of byond throwing a fit anytime new gets too close to a list - H.dropItemToGround(H.get_item_by_slot(i), TRUE) - H.equip_to_slot_or_del(I, i) - ADD_TRAIT(I, TRAIT_NODROP, CURSED_ITEM_TRAIT) - I.item_flags |= DROPDEL - I.name = "cursed " + I.name - - for(var/mob/living/carbon/human/H as anything in GLOB.human_list) - var/datum/effect_system/smoke_spread/smoke = new - smoke.set_up(0, H.loc) - smoke.start() diff --git a/code/modules/flufftext/Hallucination.dm b/code/modules/flufftext/Hallucination.dm index 4774ea852424..69c15b1e3494 100644 --- a/code/modules/flufftext/Hallucination.dm +++ b/code/modules/flufftext/Hallucination.dm @@ -1023,11 +1023,11 @@ GLOBAL_LIST_INIT(hallucination_list, list( if(prob(25)) target.halitem.icon_state = "plasticx40" if(3) //sword - target.halitem.icon = 'icons/obj/transforming_energy.dmi' + target.halitem.icon = 'icons/obj/weapon/energy.dmi' target.halitem.icon_state = "sword0" target.halitem.name = "Energy Sword" if(4) //stun baton - target.halitem.icon = 'icons/obj/items_and_weapons.dmi' + target.halitem.icon = 'icons/obj/items.dmi' target.halitem.icon_state = "stunbaton" target.halitem.name = "Stun Baton" if(5) //emag diff --git a/code/modules/food_and_drinks/drinks/drinks/bottle.dm b/code/modules/food_and_drinks/drinks/drinks/bottle.dm index 785607cdef67..49de009448f2 100644 --- a/code/modules/food_and_drinks/drinks/drinks/bottle.dm +++ b/code/modules/food_and_drinks/drinks/drinks/bottle.dm @@ -602,7 +602,7 @@ desc = "Legend says something amazing happens when you collect enough of these." custom_price = 100 custom_premium_price = 110 - icon = 'icons/obj/items_and_weapons.dmi' + icon = 'icons/obj/items.dmi' icon_state = "sandstar" w_class = WEIGHT_CLASS_TINY custom_materials = list(/datum/material/gold = 200) diff --git a/code/modules/food_and_drinks/recipes/tablecraft/recipes_misc.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_misc.dm index b1191fda7ada..1eb1d255c340 100644 --- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_misc.dm +++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_misc.dm @@ -265,7 +265,7 @@ /datum/reagent/consumable/milk = 1, /datum/reagent/consumable/cherryjelly = 5, /obj/item/stock_parts/cell/super =1, - /obj/item/melee/sabre = 1 + /obj/item/melee/sword/sabre = 1 ) result = /obj/item/reagent_containers/food/snacks/powercrepe subcategory = CAT_MISCFOOD diff --git a/code/modules/holodeck/items.dm b/code/modules/holodeck/items.dm index d56fd4f9c32c..c0d985e89d79 100644 --- a/code/modules/holodeck/items.dm +++ b/code/modules/holodeck/items.dm @@ -13,7 +13,7 @@ /obj/item/holo/esword name = "holographic energy sword" desc = "May the force be with you. Sorta." - icon = 'icons/obj/transforming_energy.dmi' + icon = 'icons/obj/weapon/energy.dmi' icon_state = "sword" lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi' righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi' @@ -69,7 +69,7 @@ /obj/item/toy/beach_ball/holoball name = "basketball" - icon = 'icons/obj/items_and_weapons.dmi' + icon = 'icons/obj/items.dmi' icon_state = "basketball" item_state = "basketball" desc = "Here's your chance, do your dance at the Space Jam." diff --git a/code/modules/hydroponics/grown/nettle.dm b/code/modules/hydroponics/grown/nettle.dm index f9633ade7661..3fa14561b8d1 100644 --- a/code/modules/hydroponics/grown/nettle.dm +++ b/code/modules/hydroponics/grown/nettle.dm @@ -45,7 +45,7 @@ seed = /obj/item/seeds/nettle name = "nettle" desc = "It's probably not wise to touch it with bare hands..." - icon = 'icons/obj/items_and_weapons.dmi' + icon = 'icons/obj/items.dmi' icon_state = "nettle" lefthand_file = 'icons/mob/inhands/weapons/plants_lefthand.dmi' righthand_file = 'icons/mob/inhands/weapons/plants_righthand.dmi' diff --git a/code/modules/hydroponics/grown/root.dm b/code/modules/hydroponics/grown/root.dm index 97773e39f277..d3f847d7e292 100644 --- a/code/modules/hydroponics/grown/root.dm +++ b/code/modules/hydroponics/grown/root.dm @@ -28,7 +28,7 @@ /obj/item/reagent_containers/food/snacks/grown/carrot/attackby(obj/item/I, mob/user, params) if(I.get_sharpness()) to_chat(user, "You sharpen the carrot into a shiv with [I].") - var/obj/item/kitchen/knife/shiv/carrot/Shiv = new /obj/item/kitchen/knife/shiv/carrot + var/obj/item/melee/knife/shiv/carrot/Shiv = new /obj/item/melee/knife/shiv/carrot remove_item_from_storage(user) qdel(src) user.put_in_hands(Shiv) diff --git a/code/modules/hydroponics/hydroitemdefines.dm b/code/modules/hydroponics/hydroitemdefines.dm index 74d004849a2a..56ad2264ce01 100644 --- a/code/modules/hydroponics/hydroitemdefines.dm +++ b/code/modules/hydroponics/hydroitemdefines.dm @@ -59,7 +59,7 @@ /obj/item/cultivator name = "cultivator" desc = "It's used for removing weeds or scratching your back." - icon = 'icons/obj/items_and_weapons.dmi' + icon = 'icons/obj/items.dmi' icon_state = "cultivator" item_state = "cultivator" lefthand_file = 'icons/mob/inhands/equipment/hydroponics_lefthand.dmi' @@ -106,7 +106,7 @@ /obj/item/hatchet name = "hatchet" desc = "A very sharp axe blade upon a short fibremetal handle. It has a long history of chopping things, but now it is used for chopping wood." - icon = 'icons/obj/items_and_weapons.dmi' + icon = 'icons/obj/weapon/axe.dmi' icon_state = "hatchet" item_state = "hatchet" lefthand_file = 'icons/mob/inhands/equipment/hydroponics_lefthand.dmi' diff --git a/code/modules/jobs/job_types/chaplain.dm b/code/modules/jobs/job_types/chaplain.dm index ab4ceb6968c0..5efe0a0a00d2 100644 --- a/code/modules/jobs/job_types/chaplain.dm +++ b/code/modules/jobs/job_types/chaplain.dm @@ -15,20 +15,6 @@ var/obj/item/storage/book/bible/booze/B = new - if(GLOB.religion) - B.deity_name = GLOB.deity - B.name = GLOB.bible_name - B.icon_state = GLOB.bible_icon_state - B.item_state = GLOB.bible_item_state - to_chat(H, "There is already an established religion onboard the station. You are an acolyte of [GLOB.deity]. Defer to the Chaplain.") - H.equip_to_slot_or_del(B, ITEM_SLOT_BACKPACK) - var/nrt = GLOB.holy_weapon_type || /obj/item/nullrod - var/obj/item/nullrod/N = new nrt(H) - H.put_in_hands(N) - if(GLOB.religious_sect) - GLOB.religious_sect.on_conversion(H) - return - var/new_religion = DEFAULT_RELIGION if(M.client && M.client.prefs.custom_names["religion"]) new_religion = M.client.prefs.custom_names["religion"] diff --git a/code/modules/jobs/job_types/shaft_miner.dm b/code/modules/jobs/job_types/shaft_miner.dm index 1469e592b4de..341116d30c8c 100644 --- a/code/modules/jobs/job_types/shaft_miner.dm +++ b/code/modules/jobs/job_types/shaft_miner.dm @@ -26,7 +26,7 @@ r_pocket = /obj/item/storage/bag/ore //causes issues if spawned in backpack backpack_contents = list( /obj/item/flashlight/seclite=1,\ - /obj/item/kitchen/knife/combat/survival=1,\ + /obj/item/melee/knife/survival=1,\ /obj/item/stack/marker_beacon/ten=1,\ /obj/item/radio/weather_monitor=1) diff --git a/code/modules/library/lib_items.dm b/code/modules/library/lib_items.dm index 55d33ee80d20..9c6e90469fcc 100644 --- a/code/modules/library/lib_items.dm +++ b/code/modules/library/lib_items.dm @@ -319,7 +319,7 @@ scanner.computer.inventory.Add(src) to_chat(user, "[I]'s screen flashes: 'Book stored in buffer. Title added to general inventory.'") - else if(istype(I, /obj/item/kitchen/knife) || I.tool_behaviour == TOOL_WIRECUTTER) + else if(istype(I, /obj/item/melee/knife) || I.tool_behaviour == TOOL_WIRECUTTER) to_chat(user, "You begin to carve out [title]...") if(do_after(user, 30, target = src)) to_chat(user, "You carve out the pages from [title]! You didn't want to read it anyway.") diff --git a/code/modules/library/lib_machines.dm b/code/modules/library/lib_machines.dm index 71de02b3ca1c..38b3728651ce 100644 --- a/code/modules/library/lib_machines.dm +++ b/code/modules/library/lib_machines.dm @@ -358,7 +358,6 @@ GLOBAL_LIST(cachedbooks) // List of our cached book datums return null /obj/machinery/computer/bookmanagement/proc/print_forbidden_lore(mob/user) - new /obj/item/melee/cultblade/dagger(get_turf(src)) to_chat(user, "Your sanity barely endures the seconds spent in the vault's browsing window. The only thing to remind you of this when you stop browsing is a sinister dagger sitting on the desk. You don't even remember where it came from...") user.visible_message("[user] stares at the blank screen for a few moments, [user.p_their()] expression frozen in fear. When [user.p_they()] finally awaken[user.p_s()] from it, [user.p_they()] look[user.p_s()] a lot older.", 2) diff --git a/code/modules/mapping/mapping_helpers.dm b/code/modules/mapping/mapping_helpers.dm index 2040764eefb9..251cf46e7c5f 100644 --- a/code/modules/mapping/mapping_helpers.dm +++ b/code/modules/mapping/mapping_helpers.dm @@ -280,7 +280,7 @@ INITIALIZE_IMMEDIATE(/obj/effect/mapping_helpers/no_lava) //cake + knife to cut it! if(length(table)) var/turf/food_turf = get_turf(pick(table)) - new /obj/item/kitchen/knife(food_turf) + new /obj/item/melee/knife/kitchen(food_turf) var/obj/item/food/cake/birthday/iancake = new(food_turf) iancake.desc = "Happy birthday, Ian!" diff --git a/code/modules/mining/abandoned_crates.dm b/code/modules/mining/abandoned_crates.dm index 21bfb509e6fb..ea43fe78f176 100644 --- a/code/modules/mining/abandoned_crates.dm +++ b/code/modules/mining/abandoned_crates.dm @@ -136,7 +136,7 @@ for(var/i in 1 to 3) new /obj/item/clothing/mask/cigarette/rollie(src) if(6 to 10) - new /obj/item/melee/skateboard/pro(src) + new /obj/item/skateboard/pro(src) if(11 to 15) new /mob/living/simple_animal/bot/honkbot(src) if(16 to 20) @@ -211,7 +211,7 @@ for(var/i in 1 to 30) new /mob/living/simple_animal/hostile/cockroach(src) if(92) - new /obj/item/katana(src) + new /obj/item/melee/sword/katana(src) if(93) new /obj/item/dnainjector/xraymut(src) if(94) @@ -220,7 +220,6 @@ if(95) new /obj/item/toy/plush/nukeplushie(src) if(96) - new /obj/item/banhammer(src) for(var/i in 1 to 3) new /obj/item/mine/pressure/sound(src) if(97) @@ -237,5 +236,5 @@ if(99) new /obj/item/implanter/sad_trombone(src) if(100) - new /obj/item/melee/skateboard/hoverboard(src) + new /obj/item/skateboard/hoverboard(src) spawned_loot = TRUE diff --git a/code/modules/mining/equipment/explorer_gear.dm b/code/modules/mining/equipment/explorer_gear.dm index 3b390da34251..b5e112713a82 100644 --- a/code/modules/mining/equipment/explorer_gear.dm +++ b/code/modules/mining/equipment/explorer_gear.dm @@ -190,3 +190,37 @@ /obj/item/clothing/head/hooded/survivor_hood/Initialize() . = ..() AddComponent(/datum/component/armor_plate) + +/obj/item/clothing/suit/hooded/scrap + name = "scrap suit" + desc = "A ragged makeshift suit." + lefthand_file = 'icons/mob/inhands/clothing_lefthand.dmi' + righthand_file = 'icons/mob/inhands/clothing_righthand.dmi' + icon_state = "survivor" + item_state = "survivor_suit" + body_parts_covered = CHEST|GROIN|LEGS|ARMS + min_cold_protection_temperature = (FIRE_SUIT_MIN_TEMP_PROTECT * 2) + cold_protection = CHEST|GROIN|LEGS|ARMS + max_heat_protection_temperature = (FIRE_SUIT_MAX_TEMP_PROTECT / 2) + heat_protection = CHEST|GROIN|LEGS|ARMS + hoodtype = /obj/item/clothing/head/hooded/scrap + armor = list("melee" = 15, "bullet" = 10, "laser" = 10, "energy" = 15, "bomb" = 20, "bio" = 100, "rad" = 20, "fire" = 50, "acid" = 30) + allowed = list(/obj/item/flashlight, /obj/item/tank/internals) + resistance_flags = FIRE_PROOF + supports_variations = DIGITIGRADE_VARIATION | VOX_VARIATION + +/obj/item/clothing/head/hooded/scrap + name = "scrap hood" + desc = "A loose-fitting hood. It gets the job done." + icon_state = "explorerold" + suit = /obj/item/clothing/suit/hooded/scrap + body_parts_covered = HEAD + flags_inv = HIDEHAIR|HIDEEARS + armor = list("melee" = 15, "bullet" = 10, "laser" = 10, "energy" = 15, "bomb" = 20, "bio" = 100, "rad" = 20, "fire" = 50, "acid" = 30) + +/obj/item/clothing/suit/armor/vest/scrap + name = "scrap armor" + desc = "An 'armor' vest consisting of sheet metal held together with cable. Who thought this was a good idea?" + icon_state = "scraparmor" + item_state = "scraparmor" + armor = list("melee" = 15, "bullet" = 10, "laser" = 10, "energy" = 15, "bomb" = 20, "bio" = 100, "rad" = 20, "fire" = 50, "acid" = 30) diff --git a/code/modules/mining/equipment/survival_pod.dm b/code/modules/mining/equipment/survival_pod.dm index 2a38ae896e76..15f7cb2e3a69 100644 --- a/code/modules/mining/equipment/survival_pod.dm +++ b/code/modules/mining/equipment/survival_pod.dm @@ -308,17 +308,16 @@ var/possible = list(/obj/item/ship_in_a_bottle, /obj/item/gun/energy/pulse, /obj/item/book/granter/martial/carp, - /obj/item/melee/supermatter_sword, + /obj/item/melee/sword/supermatter, /obj/item/shield/changeling, /obj/item/lava_staff, - /obj/item/energy_katana, + /obj/item/melee/sword/energy_katana, /obj/item/hierophant_club, /obj/item/gun/energy/minigun, /obj/item/gun/ballistic/automatic/assault/hydra/lmg/extended, /obj/item/stack/telecrystal/twenty, /obj/item/nuke_core, - /obj/item/phylactery, - /obj/item/banhammer) + /obj/item/phylactery) /obj/item/fakeartefact/Initialize() . = ..() diff --git a/code/modules/mining/lavaland/ash_flora.dm b/code/modules/mining/lavaland/ash_flora.dm index f9563cc078eb..bf6fb15c9332 100644 --- a/code/modules/mining/lavaland/ash_flora.dm +++ b/code/modules/mining/lavaland/ash_flora.dm @@ -419,7 +419,7 @@ /obj/item/seeds/lavaland/puce/attackby(obj/item/item, mob/user, params) . = ..() //anyone intending to add more garnishes using this method should componentize this - if(!istype(item, /obj/item/kitchen/knife)) + if(!istype(item, /obj/item/melee/knife)) return playsound(src, 'sound/effects/glassbr1.ogg', 50, TRUE, -1) to_chat(user, "You start breaking [src] up into shards...") diff --git a/code/modules/mining/lavaland/necropolis_chests.dm b/code/modules/mining/lavaland/necropolis_chests.dm index 2af5515e47a7..afae0dd0a6c0 100644 --- a/code/modules/mining/lavaland/necropolis_chests.dm +++ b/code/modules/mining/lavaland/necropolis_chests.dm @@ -21,8 +21,6 @@ new /obj/item/clothing/suit/space/hardsuit/cult(src) if(3) new /obj/item/necromantic_stone/lava(src) - if(4) - new /obj/item/katana/cursed(src) if(5) new /obj/item/clothing/glasses/godeye(src) if(6) @@ -47,7 +45,7 @@ new /obj/item/borg/upgrade/modkit/lifesteal(src) new /obj/item/bedsheet/cult(src) if(14) - new /obj/item/nullrod/scythe/talking/necro(src) + new /obj/item/scythe(src) if(15) new /obj/item/book_of_babel(src) if(16) @@ -80,8 +78,6 @@ new /obj/item/gun/energy/spur(src) if(28) new /obj/item/clothing/suit/armor/ascetic(src) - if(29) - new /obj/item/kitchen/knife/envy(src) /obj/structure/closet/crate/necropolis/tendril/greater desc = "It's watching you wearily. It seems terribly bloated." @@ -96,8 +92,6 @@ new /obj/item/clothing/suit/space/hardsuit/cult(src) if(3) new /obj/item/necromantic_stone/lava(src) - if(4) - new /obj/item/katana/cursed(src) if(5) new /obj/item/clothing/glasses/godeye(src) if(6) @@ -122,7 +116,7 @@ new /obj/item/borg/upgrade/modkit/lifesteal(src) new /obj/item/bedsheet/cult(src) if(14) - new /obj/item/nullrod/scythe/talking/necro(src) + new /obj/item/scythe(src) if(15) new /obj/item/book_of_babel(src) if(16) @@ -155,8 +149,6 @@ new /obj/item/gun/energy/spur(src) if(28) new /obj/item/clothing/suit/armor/ascetic(src) - if(29) - new /obj/item/kitchen/knife/envy(src) //KA modkit design discs /obj/item/disk/design_disk/modkit_disc @@ -738,8 +730,8 @@ H.equip_to_slot_or_del(new /obj/item/clothing/under/costume/roman(H), ITEM_SLOT_ICLOTHING) H.equip_to_slot_or_del(new /obj/item/clothing/shoes/roman(H), ITEM_SLOT_FEET) H.put_in_hands(new /obj/item/shield/riot/roman(H), TRUE) - H.put_in_hands(new /obj/item/claymore(H), TRUE) - H.equip_to_slot_or_del(new /obj/item/spear(H), ITEM_SLOT_BACK) + H.put_in_hands(new /obj/item/melee/sword/claymore(H), TRUE) + H.equip_to_slot_or_del(new /obj/item/melee/spear(H), ITEM_SLOT_BACK) //ice cube /obj/item/freeze_cube @@ -1204,7 +1196,7 @@ var/loot = rand(1,4) switch(loot) if(1) - new /obj/item/melee/ghost_sword(src) + new /obj/item/melee/sword/claymore(src) if(2) new /obj/item/lava_staff(src) if(3) @@ -1212,91 +1204,6 @@ if(4) new /obj/item/dragons_blood(src) -/obj/item/melee/ghost_sword - name = "\improper spectral blade" - desc = "A rusted and dulled blade. It doesn't look like it'd do much damage. It glows weakly." - icon_state = "spectral" - item_state = "spectral" - lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi' - flags_1 = CONDUCT_1 - sharpness = IS_SHARP - w_class = WEIGHT_CLASS_BULKY - force = 1 - throwforce = 1 - hitsound = 'sound/effects/ghost2.ogg' - attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "rended") - var/summon_cooldown = 0 - var/list/mob/dead/observer/spirits - -/obj/item/melee/ghost_sword/Initialize() - . = ..() - spirits = list() - START_PROCESSING(SSobj, src) - GLOB.poi_list |= src - AddComponent(/datum/component/butchering, 150, 90) - -/obj/item/melee/ghost_sword/Destroy() - for(var/mob/dead/observer/G in spirits) - G.invisibility = GLOB.observer_default_invisibility - spirits.Cut() - STOP_PROCESSING(SSobj, src) - GLOB.poi_list -= src - . = ..() - -/obj/item/melee/ghost_sword/attack_self(mob/user) - if(summon_cooldown > world.time) - to_chat(user, "You just recently called out for aid. You don't want to annoy the spirits!") - return - to_chat(user, "You call out for aid, attempting to summon spirits to your side.") - - notify_ghosts("[user] is raising [user.p_their()] [src], calling for your help!", - enter_link="(Click to help)", - source = user, action=NOTIFY_ORBIT, ignore_key = POLL_IGNORE_SPECTRAL_BLADE, header = "Spectral blade") - - summon_cooldown = world.time + 300 - -/obj/item/melee/ghost_sword/process() - ghost_check() - -/obj/item/melee/ghost_sword/proc/ghost_check() - var/ghost_counter = 0 - var/turf/T = get_turf(src) - var/list/contents = T.GetAllContents() - var/mob/dead/observer/current_spirits = list() - for(var/thing in contents) - var/atom/A = thing - A.transfer_observers_to(src) - - for(var/i in orbiters?.orbiters) - if(!isobserver(i)) - continue - var/mob/dead/observer/G = i - ghost_counter++ - G.invisibility = 0 - current_spirits |= G - - for(var/mob/dead/observer/G in spirits - current_spirits) - G.invisibility = GLOB.observer_default_invisibility - - spirits = current_spirits - - return ghost_counter - -/obj/item/melee/ghost_sword/attack(mob/living/target, mob/living/carbon/human/user) - force = 0 - var/ghost_counter = ghost_check() - - force = clamp((ghost_counter * 4), 0, 75) - user.visible_message("[user] strikes with the force of [ghost_counter] vengeful spirits!") - ..() - -/obj/item/melee/ghost_sword/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK) - var/ghost_counter = ghost_check() - final_block_chance += clamp((ghost_counter * 5), 0, 75) - owner.visible_message("[owner] is protected by a ring of [ghost_counter] ghosts!") - return ..() - //Blood /obj/item/dragons_blood diff --git a/code/modules/mining/machine_vending.dm b/code/modules/mining/machine_vending.dm index 15cde601689e..4b2774c3894a 100644 --- a/code/modules/mining/machine_vending.dm +++ b/code/modules/mining/machine_vending.dm @@ -121,6 +121,6 @@ new /obj/item/clothing/suit/hooded/explorer(src) new /obj/item/clothing/mask/gas/explorer(src) new /obj/item/gun/energy/kinetic_accelerator(src) - new /obj/item/kitchen/knife/combat/survival(src) + new /obj/item/melee/knife/survival(src) new /obj/item/flashlight/seclite(src) new /obj/item/clothing/gloves/explorer(src) diff --git a/code/modules/mob/living/simple_animal/bot/cleanbot.dm b/code/modules/mob/living/simple_animal/bot/cleanbot.dm index 01610cd13644..665e75da9cef 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 @@ to_chat(user, "Please close the access panel before locking it.") else to_chat(user, "\The [src] doesn't seem to respect your authority.") - else if(istype(W, /obj/item/kitchen/knife) && user.a_intent != INTENT_HARM) + else if(istype(W, /obj/item/melee/knife) && user.a_intent != INTENT_HARM) to_chat(user, "You start attaching \the [W] to \the [src]...") if(do_after(user, 25, target = src)) deputize(W, user) diff --git a/code/modules/mob/living/simple_animal/hostile/bear.dm b/code/modules/mob/living/simple_animal/hostile/bear.dm index d43d744e2800..b6f5c58b424e 100644 --- a/code/modules/mob/living/simple_animal/hostile/bear.dm +++ b/code/modules/mob/living/simple_animal/hostile/bear.dm @@ -115,7 +115,7 @@ name = "pile of bear armor" desc = "A scattered pile of various shaped armor pieces fitted for a bear, some duct tape, and a nail filer. Crude instructions \ are written on the back of one of the plates. This seems like an awful idea." - icon = 'icons/obj/items_and_weapons.dmi' + icon = 'icons/obj/items.dmi' icon_state = "bear_armor_upgrade" /obj/item/bear_armor/afterattack(atom/target, mob/user, proximity_flag) diff --git a/code/modules/mob/living/simple_animal/hostile/human/frontiersman.dm b/code/modules/mob/living/simple_animal/hostile/human/frontiersman.dm index ba5f75ffb249..d8b4af5344ea 100644 --- a/code/modules/mob/living/simple_animal/hostile/human/frontiersman.dm +++ b/code/modules/mob/living/simple_animal/hostile/human/frontiersman.dm @@ -9,7 +9,7 @@ melee_damage_lower = 15 melee_damage_upper = 15 loot = list(/obj/effect/mob_spawn/human/corpse/frontier, - /obj/item/kitchen/knife/combat/survival) + /obj/item/melee/knife/survival) atmos_requirements = list("min_oxy" = 5, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 1, "min_co2" = 0, "max_co2" = 5, "min_n2" = 0, "max_n2" = 0) faction = list(FACTION_ANTAG_FRONTIERSMEN) footstep_type = FOOTSTEP_MOB_SHOE diff --git a/code/modules/mob/living/simple_animal/hostile/human/skeleton.dm b/code/modules/mob/living/simple_animal/hostile/human/skeleton.dm index b251dda91e48..147c2081f622 100644 --- a/code/modules/mob/living/simple_animal/hostile/human/skeleton.dm +++ b/code/modules/mob/living/simple_animal/hostile/human/skeleton.dm @@ -49,7 +49,7 @@ loot = list(/obj/effect/decal/remains/human, /obj/item/clothing/suit/armor/witchhunter, /obj/item/clothing/head/witchunter, - /obj/item/claymore/weak{name = "holy sword"}) + /obj/item/melee/sword/claymore{name = "holy sword"}) /mob/living/simple_animal/hostile/human/skeleton/ice name = "ice skeleton" diff --git a/code/modules/mob/living/simple_animal/hostile/human/survivors.dm b/code/modules/mob/living/simple_animal/hostile/human/survivors.dm index 52863c1a5c64..ed356764271f 100644 --- a/code/modules/mob/living/simple_animal/hostile/human/survivors.dm +++ b/code/modules/mob/living/simple_animal/hostile/human/survivors.dm @@ -116,7 +116,7 @@ /obj/item/stack/marker_beacon/ten = 15, /obj/item/mining_scanner = 5, /obj/item/extinguisher/mini = 10, - /obj/item/kitchen/knife/combat = 5, + /obj/item/melee/knife/combat = 5, /obj/item/flashlight/seclite = 10, /obj/item/stack/sheet/sinew = 10, /obj/item/stack/sheet/bone = 5, @@ -132,7 +132,7 @@ /obj/item/stack/marker_beacon/ten = 10, /obj/item/mining_scanner = 20, /obj/item/extinguisher/mini = 10, - /obj/item/kitchen/knife/combat/survival = 10, + /obj/item/melee/knife/survival = 10, /obj/item/flashlight/seclite = 10, /obj/item/stack/sheet/sinew = 10, /obj/item/stack/sheet/bone = 10 @@ -144,11 +144,11 @@ /obj/item/stack/marker_beacon/ten = 5, /obj/item/mining_scanner = 5, /obj/item/extinguisher/mini = 10, - /obj/item/kitchen/knife/combat/survival = 12, + /obj/item/melee/knife/survival = 12, /obj/item/flashlight/seclite = 10, /obj/item/stack/sheet/sinew = 5, /obj/item/stack/sheet/bone = 5, - /obj/item/kitchen/knife/combat = 3, + /obj/item/melee/knife/combat = 3, /obj/item/reagent_containers/food/snacks/rationpack = 30 ) ) diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/codename_claw.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/codename_claw.dm index a762a9298279..d3a50564ca75 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/codename_claw.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/codename_claw.dm @@ -58,7 +58,7 @@ speed = 5 move_to_delay = 5 speak_emote = list("verbalizes") - mob_trophy = /obj/item/nullrod/armblade/tentacle + mob_trophy = /obj/item/melee/synthetic_arm_blade loot = list(/obj/effect/spawner/clawloot) health = 2250 maxHealth = 2250 diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/cult_templar.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/cult_templar.dm index 08ef1a7b21cb..c06c78068ce9 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/cult_templar.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/cult_templar.dm @@ -23,8 +23,8 @@ ranged_cooldown_time = 20 vision_range = 10 damage_coeff = list(BRUTE = 1, BURN = 0.5, TOX = 0.5, CLONE = 0.5, STAMINA = 0, OXY = 0.5) - loot = list(/obj/item/claymore/cursed, /obj/item/clothing/suit/space/hardsuit/cult/enchanted) - mob_trophy = list(/obj/item/claymore/cursed, /obj/item/clothing/suit/space/hardsuit/cult/enchanted, /obj/item/upgradescroll) + loot = list(/obj/item/melee/sword/claymore, /obj/item/clothing/suit/space/hardsuit/cult/enchanted) + mob_trophy = list(/obj/item/melee/sword/claymore, /obj/item/clothing/suit/space/hardsuit/cult/enchanted, /obj/item/upgradescroll) wander = FALSE del_on_death = TRUE blood_volume = BLOOD_VOLUME_NORMAL @@ -40,7 +40,7 @@ /datum/action/innate/megafauna_attack/rapid_fire) move_force = MOVE_FORCE_NORMAL var/turf/starting - var/obj/item/claymore/cursed/mob/weapon + var/obj/item/melee/sword/claymore/weapon var/charging = FALSE var/dash_cooldown = 6 SECONDS var/runic_blast_cooldown = 14 SECONDS @@ -50,23 +50,6 @@ var/dash_num = 3 var/newcolor = rgb(149, 10, 10) -/obj/item/claymore/cursed - name = "cursed longsword" - desc = "For those who overcame a great challenge. It glows with a dim red light." - icon_state = "cultblade" - item_state = "cultblade" - lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi' - w_class = WEIGHT_CLASS_BULKY - throwforce = 25 - block_chance = 65 - armour_penetration = 50 - sharpness = IS_SHARP - -/obj/item/claymore/cursed/mob - block_chance = 0 - force = 16 - /mob/living/simple_animal/hostile/megafauna/cult_templar/Initialize() . = ..() starting = get_turf(src) @@ -421,7 +404,7 @@ /obj/item/clothing/suit/space/hardsuit/cult/enchanted name = "\improper Cursed Nar'Sien hardened armor" desc = "A heavily-armored exosuit worn by warriors of the Nar'Sien cult. This one is cursed, screaming voices into the mind of the wearer." - allowed = list(/obj/item/gun, /obj/item/nullrod, /obj/item/tank/internals) + allowed = list(/obj/item/gun, /obj/item/tank/internals) armor = list("melee" = 75, "bullet" = 50, "laser" = 30, "energy" = 50, "bomb" = 100, "bio" = 100, "rad" = 80, "fire" = 100, "acid" = 100) max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT resistance_flags = FIRE_PROOF | LAVA_PROOF diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/hivelord_outfits.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/hivelord_outfits.dm index f0c70edc3037..1a347db1646b 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/hivelord_outfits.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/hivelord_outfits.dm @@ -230,7 +230,7 @@ /obj/item/stack/marker_beacon/ten = 2, /obj/item/mining_scanner = 2, /obj/item/extinguisher/mini = 2, - /obj/item/kitchen/knife/combat/survival = 3, + /obj/item/melee/knife/survival = 3, /obj/item/flashlight/seclite = 3, /obj/item/stack/sheet/sinew = 3, /obj/item/stack/sheet/bone = 3 @@ -275,7 +275,7 @@ if(prob(75)) back = pick(/obj/item/storage/backpack/industrial, /obj/item/storage/backpack/satchel/eng, /obj/item/storage/backpack/duffelbag/engineering, /obj/item/storage/backpack/messenger/engi) if(prob(10)) - back = /obj/item/fireaxe + back = /obj/item/melee/axe/fire for(var/i = 1 to 3) if(prob(75)) backpack_contents += pickweight(list( @@ -424,7 +424,7 @@ if(prob(75)) accessory = /obj/item/clothing/accessory/armband/cargo if(prob(25)) - suit = /obj/item/clothing/suit/armor/vest/scrap_armor + suit = /obj/item/clothing/suit/armor/vest/scrap suit_store = /obj/item/gun/ballistic/rifle/illestren /datum/outfit/generic/cargo diff --git a/code/modules/mod/modules/modules_ninja.dm b/code/modules/mod/modules/modules_ninja.dm index 69da2287eb72..767a229d98f5 100644 --- a/code/modules/mod/modules/modules_ninja.dm +++ b/code/modules/mod/modules/modules_ninja.dm @@ -170,7 +170,7 @@ /// The item linked to the module that will get recalled. var/obj/item/linked_weapon /// The accepted typepath we can link to. - var/accepted_type = /obj/item/energy_katana + var/accepted_type = /obj/item/melee/sword/energy_katana /obj/item/mod/module/weapon_recall/on_suit_activation() ADD_TRAIT(mod.wearer, TRAIT_NOGUNS, MOD_TRAIT) diff --git a/code/modules/ninja/energy_katana.dm b/code/modules/ninja/energy_katana.dm index c00d32d25809..14392e1c0874 100644 --- a/code/modules/ninja/energy_katana.dm +++ b/code/modules/ninja/energy_katana.dm @@ -1,37 +1,30 @@ -/obj/item/energy_katana +/obj/item/melee/sword/energy_katana name = "energy katana" desc = "A katana infused with strong energy." icon_state = "energy_katana" item_state = "energy_katana" - lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi' force = 40 throwforce = 20 block_chance = 50 armour_penetration = 50 - w_class = WEIGHT_CLASS_NORMAL - hitsound = 'sound/weapons/bladeslice.ogg' - attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") - slot_flags = ITEM_SLOT_BACK|ITEM_SLOT_BELT - sharpness = IS_SHARP max_integrity = 200 resistance_flags = LAVA_PROOF | FIRE_PROOF | ACID_PROOF var/datum/effect_system/spark_spread/spark_system var/datum/action/innate/dash/ninja/jaunt var/dash_toggled = TRUE -/obj/item/energy_katana/Initialize() +/obj/item/melee/sword/energy_katana/Initialize() . = ..() jaunt = new(src) spark_system = new /datum/effect_system/spark_spread() spark_system.set_up(5, 0, src) spark_system.attach(src) -/obj/item/energy_katana/attack_self(mob/user) +/obj/item/melee/sword/energy_katana/attack_self(mob/user) dash_toggled = !dash_toggled to_chat(user, "You [dash_toggled ? "enable" : "disable"] the dash function on [src].") -/obj/item/energy_katana/afterattack(atom/target, mob/user, proximity_flag, click_parameters) +/obj/item/melee/sword/energy_katana/afterattack(atom/target, mob/user, proximity_flag, click_parameters) . = ..() if(dash_toggled) jaunt.Teleport(user, target) @@ -41,13 +34,13 @@ playsound(user, 'sound/weapons/blade1.ogg', 50, TRUE) target.emag_act(user) -/obj/item/energy_katana/pickup(mob/living/user) +/obj/item/melee/sword/energy_katana/pickup(mob/living/user) . = ..() jaunt.Grant(user, src) user.update_icons() playsound(src, 'sound/items/unsheath.ogg', 25, TRUE) -/obj/item/energy_katana/dropped(mob/user) +/obj/item/melee/sword/energy_katana/dropped(mob/user) . = ..() jaunt?.Remove(user) user.update_icons() @@ -55,7 +48,7 @@ //If we hit the Ninja who owns this Katana, they catch it. //Works for if the Ninja throws it or it throws itself or someone tries //To throw it at the ninja -/obj/item/energy_katana/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum) +/obj/item/melee/sword/energy_katana/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum) if(ishuman(hit_atom)) var/mob/living/carbon/human/H = hit_atom if(istype(H.wear_suit, /obj/item/clothing/suit/space/space_ninja)) @@ -66,7 +59,7 @@ ..() -/obj/item/energy_katana/proc/returnToOwner(mob/living/carbon/human/user, doSpark = 1, caught = 0) +/obj/item/melee/sword/energy_katana/proc/returnToOwner(mob/living/carbon/human/user, doSpark = 1, caught = 0) if(!istype(user)) return forceMove(get_turf(user)) @@ -94,7 +87,7 @@ to_chat(user, "[msg]") -/obj/item/energy_katana/Destroy() +/obj/item/melee/sword/energy_katana/Destroy() QDEL_NULL(spark_system) QDEL_NULL(jaunt) return ..() diff --git a/code/modules/ninja/outfit.dm b/code/modules/ninja/outfit.dm index 2b5976db4d59..1c3c24927bfd 100644 --- a/code/modules/ninja/outfit.dm +++ b/code/modules/ninja/outfit.dm @@ -12,7 +12,7 @@ l_pocket = /obj/item/grenade/c4/x4 r_pocket = /obj/item/tank/internals/emergency_oxygen internals_slot = ITEM_SLOT_RPOCKET - belt = /obj/item/energy_katana + belt = /obj/item/melee/sword/energy_katana implants = list(/obj/item/implant/explosive) diff --git a/code/modules/ninja/suit/suit.dm b/code/modules/ninja/suit/suit.dm index cb355014d4e7..4f368b630496 100644 --- a/code/modules/ninja/suit/suit.dm +++ b/code/modules/ninja/suit/suit.dm @@ -26,7 +26,7 @@ Contents: var/datum/effect_system/spark_spread/spark_system var/datum/techweb/stored_research var/obj/item/disk/tech_disk/t_disk//To copy design onto disk. - var/obj/item/energy_katana/energyKatana //For teleporting the katana back to the ninja (It's an ability) + var/obj/item/melee/sword/energy_katana/energyKatana //For teleporting the katana back to the ninja (It's an ability) //Other articles of ninja gear worn together, used to easily reference them after initializing. var/obj/item/clothing/head/helmet/space/space_ninja/n_hood diff --git a/code/modules/photography/_pictures.dm b/code/modules/photography/_pictures.dm index 511d75ac6c3f..6570cd00bb04 100644 --- a/code/modules/photography/_pictures.dm +++ b/code/modules/photography/_pictures.dm @@ -45,7 +45,7 @@ if(!picture_image) return var/icon/small_img = icon(picture_image) - var/icon/ic = icon('icons/obj/items_and_weapons.dmi', iconstate ? iconstate :"photo") + var/icon/ic = icon('icons/obj/items.dmi', iconstate ? iconstate :"photo") small_img.Scale(8, 8) ic.Blend(small_img,ICON_OVERLAY, 13, 13) picture_icon = ic diff --git a/code/modules/photography/camera/camera.dm b/code/modules/photography/camera/camera.dm index e91a03e421f3..c2096983fb03 100644 --- a/code/modules/photography/camera/camera.dm +++ b/code/modules/photography/camera/camera.dm @@ -4,7 +4,6 @@ /obj/item/camera name = "camera" - icon = 'icons/obj/items_and_weapons.dmi' desc = "A polaroid camera." icon_state = "camera" item_state = "camera" diff --git a/code/modules/photography/camera/film.dm b/code/modules/photography/camera/film.dm index b44b93361083..a6001011eb29 100644 --- a/code/modules/photography/camera/film.dm +++ b/code/modules/photography/camera/film.dm @@ -3,7 +3,6 @@ */ /obj/item/camera_film name = "film cartridge" - icon = 'icons/obj/items_and_weapons.dmi' desc = "A camera film cartridge. Insert it into a camera to reload it." icon_state = "film" item_state = "electropack" diff --git a/code/modules/photography/photos/album.dm b/code/modules/photography/photos/album.dm index 2ba5f5499307..19c2c1297f6b 100644 --- a/code/modules/photography/photos/album.dm +++ b/code/modules/photography/photos/album.dm @@ -4,7 +4,7 @@ /obj/item/storage/photo_album name = "photo album" desc = "A big book used to store photos and mementos." - icon = 'icons/obj/items_and_weapons.dmi' + icon = 'icons/obj/items.dmi' icon_state = "album" item_state = "album" lefthand_file = 'icons/mob/inhands/misc/books_lefthand.dmi' diff --git a/code/modules/photography/photos/photo.dm b/code/modules/photography/photos/photo.dm index 7274d477babb..ea3b4ff6a99d 100644 --- a/code/modules/photography/photos/photo.dm +++ b/code/modules/photography/photos/photo.dm @@ -3,7 +3,7 @@ */ /obj/item/photo name = "photo" - icon = 'icons/obj/items_and_weapons.dmi' + icon = 'icons/obj/items.dmi' icon_state = "photo" item_state = "paper" w_class = WEIGHT_CLASS_TINY diff --git a/code/modules/power/supermatter/supermatter.dm b/code/modules/power/supermatter/supermatter.dm index b6fc6367e85c..6ed294fa8936 100644 --- a/code/modules/power/supermatter/supermatter.dm +++ b/code/modules/power/supermatter/supermatter.dm @@ -804,7 +804,7 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal) /obj/machinery/power/supermatter_crystal/attackby(obj/item/W, mob/living/user, params) if(!istype(W) || (W.item_flags & ABSTRACT) || !istype(user)) return - if(istype(W, /obj/item/melee/roastingstick)) + if(istype(W, /obj/item/roastingstick)) return ..() if(istype(W, /obj/item/clothing/mask/cigarette)) var/obj/item/clothing/mask/cigarette/cig = W diff --git a/code/modules/reagents/reagent_containers/spray.dm b/code/modules/reagents/reagent_containers/spray.dm index b4f46e6e4c19..1fe7a307353d 100644 --- a/code/modules/reagents/reagent_containers/spray.dm +++ b/code/modules/reagents/reagent_containers/spray.dm @@ -180,7 +180,7 @@ /obj/item/reagent_containers/spray/pepper name = "pepperspray" desc = "Manufactured by UhangInc, used to blind and down an opponent quickly." - icon = 'icons/obj/items_and_weapons.dmi' + icon = 'icons/obj/items.dmi' icon_state = "pepperspray" item_state = "pepperspray" lefthand_file = 'icons/mob/inhands/equipment/security_lefthand.dmi' diff --git a/code/modules/research/designs/autolathe_designs.dm b/code/modules/research/designs/autolathe_designs.dm index a2b295f2e6fa..d1fe33024919 100644 --- a/code/modules/research/designs/autolathe_designs.dm +++ b/code/modules/research/designs/autolathe_designs.dm @@ -356,7 +356,7 @@ id = "kitchen_knife" build_type = AUTOLATHE materials = list(/datum/material/iron = 12000) - build_path = /obj/item/kitchen/knife + build_path = /obj/item/melee/knife/kitchen category = list("initial","Dinnerware") /datum/design/plastic_knife @@ -364,7 +364,7 @@ id = "plastic_knife" build_type = AUTOLATHE | PROTOLATHE materials = list(/datum/material/plastic = 100) - build_path = /obj/item/kitchen/knife/plastic + build_path = /obj/item/melee/knife/plastic category = list("initial", "Tool Designs","Dinnerware") /datum/design/fork @@ -865,7 +865,7 @@ id = "cleaver" build_type = AUTOLATHE materials = list(/datum/material/iron = 18000) - build_path = /obj/item/kitchen/knife/butcher + build_path = /obj/item/melee/knife/butcher category = list("initial", "Dinnerware") /datum/design/spraycan diff --git a/code/modules/research/designs/misc_designs.dm b/code/modules/research/designs/misc_designs.dm index 816cd4f9fdbf..98a088756d81 100644 --- a/code/modules/research/designs/misc_designs.dm +++ b/code/modules/research/designs/misc_designs.dm @@ -229,7 +229,7 @@ id = "roastingstick" build_type = PROTOLATHE materials = list(/datum/material/iron=1000, /datum/material/glass = 500, /datum/material/bluespace = 250) - build_path = /obj/item/melee/roastingstick + build_path = /obj/item/roastingstick category = list("Equipment") departmental_flags = DEPARTMENTAL_FLAG_SERVICE diff --git a/code/modules/research/xenobiology/crossbreeding/_weapons.dm b/code/modules/research/xenobiology/crossbreeding/_weapons.dm index ac663059d0c0..3f80f17e8a32 100644 --- a/code/modules/research/xenobiology/crossbreeding/_weapons.dm +++ b/code/modules/research/xenobiology/crossbreeding/_weapons.dm @@ -16,35 +16,6 @@ Slimecrossing Weapons if(prob(20)) user.emote("scream") -//Rainbow knife - Burning Rainbow -/obj/item/kitchen/knife/rainbowknife - name = "rainbow knife" - desc = "A strange, transparent knife which constantly shifts color. It hums slightly when moved." - icon = 'icons/obj/slimecrossing.dmi' - icon_state = "rainbowknife" - item_state = "rainbowknife" - force = 18 - throwforce = 15 - damtype = BRUTE - -/obj/item/kitchen/knife/rainbowknife/afterattack(atom/O, mob/user, proximity) - if(proximity && istype(O, /mob/living)) - damtype = pick(BRUTE, BURN, TOX, OXY) - switch(damtype) - if(BRUTE) - hitsound = 'sound/weapons/bladeslice.ogg' - attack_verb = list("slashed","sliced","cut") - if(BURN) - hitsound = 'sound/weapons/sear.ogg' - attack_verb = list("burned","singed","heated") - if(TOX) - hitsound = 'sound/weapons/pierce.ogg' - attack_verb = list("poisoned","dosed","toxified") - if(OXY) - hitsound = 'sound/effects/space_wind.ogg' - attack_verb = list("suffocated","winded","vacuumed") - return ..() - //Adamantine shield - Chilling Adamantine /obj/item/shield/adamantineshield name = "adamantine shield" diff --git a/code/modules/research/xenobiology/crossbreeding/burning.dm b/code/modules/research/xenobiology/crossbreeding/burning.dm index e9fd98232e2c..26c151e42316 100644 --- a/code/modules/research/xenobiology/crossbreeding/burning.dm +++ b/code/modules/research/xenobiology/crossbreeding/burning.dm @@ -305,11 +305,3 @@ Burning extracts: new /obj/item/shield/adamantineshield(get_turf(user)) ..() -/obj/item/slimecross/burning/rainbow - colour = "rainbow" - effect_desc = "Creates the Rainbow Knife, a kitchen knife that deals random types of damage." - -/obj/item/slimecross/burning/rainbow/do_effect(mob/user) - user.visible_message("[src] flattens into a glowing rainbow blade.") - new /obj/item/kitchen/knife/rainbowknife(get_turf(user)) - ..() diff --git a/code/modules/ruins/objects_and_mobs/sin_ruins.dm b/code/modules/ruins/objects_and_mobs/sin_ruins.dm index 7b5bd27a8ada..0747fb746ddd 100644 --- a/code/modules/ruins/objects_and_mobs/sin_ruins.dm +++ b/code/modules/ruins/objects_and_mobs/sin_ruins.dm @@ -102,34 +102,3 @@ var/turf/open/chasm/C = T C.set_target(dest) C.drop(user) - -//can't be bothered to do sloth right now, will make later - -/obj/item/kitchen/knife/envy //Envy's knife: Found in the Envy ruin. Attackers take on the appearance of whoever they strike. - name = "envy's knife" - desc = "Their success will be yours." - icon = 'icons/obj/wizard.dmi' - icon_state = "render" - item_state = "knife" - lefthand_file = 'icons/mob/inhands/equipment/kitchen_lefthand.dmi' - righthand_file = 'icons/mob/inhands/equipment/kitchen_righthand.dmi' - force = 18 - throwforce = 10 - w_class = WEIGHT_CLASS_NORMAL - hitsound = 'sound/weapons/bladeslice.ogg' - -/obj/item/kitchen/knife/envy/afterattack(atom/movable/AM, mob/living/carbon/human/user, proximity) - . = ..() - if(!proximity) - return - if(!istype(user)) - return - if(ishuman(AM)) - var/mob/living/carbon/human/H = AM - if(user.real_name != H.dna.real_name) - user.real_name = H.dna.real_name - H.dna.transfer_identity(user, transfer_SE=1) - user.updateappearance(mutcolor_update=1) - user.domutcheck() - user.visible_message("[user]'s appearance shifts into [H]'s!", \ - "[H.p_they(TRUE)] think[H.p_s()] [H.p_theyre()] sooo much better than you. Not anymore, [H.p_they()] won't.") diff --git a/code/modules/ruins/rockplanet_ruin_code.dm b/code/modules/ruins/rockplanet_ruin_code.dm index d09bbe9d5dd7..5eea45c24c6c 100644 --- a/code/modules/ruins/rockplanet_ruin_code.dm +++ b/code/modules/ruins/rockplanet_ruin_code.dm @@ -100,7 +100,7 @@ /obj/item/strange_crystal/attackby(obj/item/item, mob/user, params) . = ..() - if(!istype(item, /obj/item/kitchen/knife)) + if(!istype(item, /obj/item/melee/knife)) return playsound(src, 'sound/effects/glassbr1.ogg', 50, TRUE, -1) to_chat(user, "You start breaking [src] up into shards...") diff --git a/code/modules/shuttle/emergency.dm b/code/modules/shuttle/emergency.dm index 0c535f58ae23..756d889f5bc5 100644 --- a/code/modules/shuttle/emergency.dm +++ b/code/modules/shuttle/emergency.dm @@ -91,7 +91,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/item/storage/overmap_ship, 28) new /obj/item/tank/internals/oxygen/red(src) new /obj/item/tank/internals/oxygen/red(src) new /obj/item/pickaxe/emergency(src) - new /obj/item/kitchen/knife/hunting(src) + new /obj/item/melee/knife/hunting(src) new /obj/item/survivalcapsule(src) /obj/item/storage/overmap_ship/fueled/PopulateContents() diff --git a/code/modules/spells/spell_types/conjure.dm b/code/modules/spells/spell_types/conjure.dm index c34d5cf7c985..d2e3cc957ad9 100644 --- a/code/modules/spells/spell_types/conjure.dm +++ b/code/modules/spells/spell_types/conjure.dm @@ -63,7 +63,7 @@ range = -1 clothes_req = FALSE var/obj/item/item - var/item_type = /obj/item/banhammer + var/item_type = /obj/item school = "conjuration" charge_max = 150 cooldown_min = 10 diff --git a/code/modules/spells/spell_types/devil.dm b/code/modules/spells/spell_types/devil.dm index 421b7f40f11c..f1654551df3a 100644 --- a/code/modules/spells/spell_types/devil.dm +++ b/code/modules/spells/spell_types/devil.dm @@ -1,25 +1,3 @@ -/obj/effect/proc_holder/spell/targeted/conjure_item/summon_pitchfork - name = "Summon Pitchfork" - desc = "A devil's weapon of choice. Use this to summon/unsummon your pitchfork." - invocation_type = "none" - include_user = TRUE - range = -1 - clothes_req = FALSE - item_type = /obj/item/pitchfork/demonic - - school = "conjuration" - charge_max = 150 - cooldown_min = 10 - action_icon = 'icons/mob/actions/actions_minor_antag.dmi' - action_icon_state = "pitchfork" - action_background_icon_state = "bg_demon" - -/obj/effect/proc_holder/spell/targeted/conjure_item/summon_pitchfork/greater - item_type = /obj/item/pitchfork/demonic/greater - -/obj/effect/proc_holder/spell/targeted/conjure_item/summon_pitchfork/ascended - item_type = /obj/item/pitchfork/demonic/ascended - /obj/effect/proc_holder/spell/targeted/conjure_item/violin item_type = /obj/item/instrument/violin/golden desc = "A devil's instrument of choice. Use this to summon/unsummon your golden violin." diff --git a/code/modules/spells/spell_types/godhand.dm b/code/modules/spells/spell_types/godhand.dm index 5cf7e7e1e509..94f0c8a4fcad 100644 --- a/code/modules/spells/spell_types/godhand.dm +++ b/code/modules/spells/spell_types/godhand.dm @@ -4,7 +4,7 @@ var/catchphrase = "High Five!" var/on_use_sound = null var/obj/effect/proc_holder/spell/targeted/touch/attached_spell - icon = 'icons/obj/items_and_weapons.dmi' + icon = 'icons/obj/items.dmi' lefthand_file = 'icons/mob/inhands/misc/touchspell_lefthand.dmi' righthand_file = 'icons/mob/inhands/misc/touchspell_righthand.dmi' icon_state = "latexballon" diff --git a/code/modules/surgery/advanced/lobotomy.dm b/code/modules/surgery/advanced/lobotomy.dm index d1c882f96620..0807e1e5c8cc 100644 --- a/code/modules/surgery/advanced/lobotomy.dm +++ b/code/modules/surgery/advanced/lobotomy.dm @@ -26,7 +26,7 @@ implements = list( TOOL_SCALPEL = 85, // there is no way this should be reasonable to do basically at all without a real surgery. ghetto lobotomy, for real? /obj/item/melee/transforming/energy/sword = 25, - /obj/item/kitchen/knife = 15, + /obj/item/melee/knife = 15, /obj/item/shard = 10, /obj/item = 5) time = 10 SECONDS diff --git a/code/modules/surgery/amputation.dm b/code/modules/surgery/amputation.dm index 91cd1dce07e4..e737acbb78d7 100644 --- a/code/modules/surgery/amputation.dm +++ b/code/modules/surgery/amputation.dm @@ -14,9 +14,9 @@ TOOL_SCALPEL = 100, TOOL_SAW = 100, /obj/item/melee/arm_blade = 80, - /obj/item/fireaxe = 50, + /obj/item/melee/axe/fire = 50, /obj/item/hatchet = 40, - /obj/item/kitchen/knife/butcher = 25) + /obj/item/melee/knife/butcher = 25) time = 6.4 SECONDS preop_sound = 'sound/surgery/scalpel1.ogg' success_sound = 'sound/surgery/organ2.ogg' diff --git a/code/modules/surgery/coronary_bypass.dm b/code/modules/surgery/coronary_bypass.dm index a4628d19efff..ceb376f3587c 100644 --- a/code/modules/surgery/coronary_bypass.dm +++ b/code/modules/surgery/coronary_bypass.dm @@ -22,7 +22,7 @@ name = "incise heart" implements = list( TOOL_SCALPEL = 90, - /obj/item/kitchen/knife = 40, + /obj/item/melee/knife = 40, /obj/item/shard = 33) time = 1.6 SECONDS preop_sound = 'sound/surgery/scalpel1.ogg' diff --git a/code/modules/surgery/experimental_dissection.dm b/code/modules/surgery/experimental_dissection.dm index 70dbac246e4e..eccf729d263f 100644 --- a/code/modules/surgery/experimental_dissection.dm +++ b/code/modules/surgery/experimental_dissection.dm @@ -34,7 +34,7 @@ /obj/item/scalpel/augment = 75, /obj/item/scalpel/advanced = 60, TOOL_SCALPEL = 45, - /obj/item/kitchen/knife = 30, + /obj/item/melee/knife = 30, /obj/item/shard = 10)// special tools not only cut down time but also improve probability time = 125 silicons_obey_prob = TRUE diff --git a/code/modules/surgery/gastrectomy.dm b/code/modules/surgery/gastrectomy.dm index f4bd48c4729d..6d00f5ae7588 100644 --- a/code/modules/surgery/gastrectomy.dm +++ b/code/modules/surgery/gastrectomy.dm @@ -25,7 +25,7 @@ implements = list( TOOL_SCALPEL = 95, /obj/item/melee/transforming/energy/sword = 33, - /obj/item/kitchen/knife = 40, + /obj/item/melee/knife = 40, /obj/item/shard = 10) time = 52 experience_given = (MEDICAL_SKILL_ORGAN_FIX*0.8) //for consistency across organ surgeries diff --git a/code/modules/surgery/hepatectomy.dm b/code/modules/surgery/hepatectomy.dm index e612b6fa18c5..0571cf9b2397 100644 --- a/code/modules/surgery/hepatectomy.dm +++ b/code/modules/surgery/hepatectomy.dm @@ -24,7 +24,7 @@ implements = list( TOOL_SCALPEL = 95, /obj/item/melee/transforming/energy/sword = 33, - /obj/item/kitchen/knife = 40, + /obj/item/melee/knife = 40, /obj/item/shard = 25) time = 52 experience_given = (MEDICAL_SKILL_ORGAN_FIX*0.8) //repeatable so not as much xp diff --git a/code/modules/surgery/lobectomy.dm b/code/modules/surgery/lobectomy.dm index 09ef68f03e18..79d3d79bcee5 100644 --- a/code/modules/surgery/lobectomy.dm +++ b/code/modules/surgery/lobectomy.dm @@ -23,7 +23,7 @@ implements = list( TOOL_SCALPEL = 95, /obj/item/melee/transforming/energy/sword = 33, - /obj/item/kitchen/knife = 40, + /obj/item/melee/knife = 40, /obj/item/shard = 25) time = 4.2 SECONDS preop_sound = 'sound/surgery/scalpel1.ogg' diff --git a/code/modules/surgery/mechanic_steps.dm b/code/modules/surgery/mechanic_steps.dm index 3730f7cf1302..694081f7af78 100644 --- a/code/modules/surgery/mechanic_steps.dm +++ b/code/modules/surgery/mechanic_steps.dm @@ -4,7 +4,7 @@ implements = list( TOOL_SCREWDRIVER = 100, TOOL_SCALPEL = 75, // med borgs could try to unscrew shell with scalpel - /obj/item/kitchen/knife = 50, + /obj/item/melee/knife/kitchen = 50, /obj/item = 10) time = 2.4 SECONDS preop_sound = 'sound/items/screwdriver.ogg' @@ -28,7 +28,7 @@ implements = list( TOOL_SCREWDRIVER = 100, TOOL_SCALPEL = 75, - /obj/item/kitchen/knife = 50, + /obj/item/melee/knife/kitchen = 50, /obj/item = 10) time = 2.4 SECONDS preop_sound = 'sound/items/screwdriver.ogg' diff --git a/code/modules/surgery/organic_steps.dm b/code/modules/surgery/organic_steps.dm index 42018e6c1d87..8959a7f99715 100644 --- a/code/modules/surgery/organic_steps.dm +++ b/code/modules/surgery/organic_steps.dm @@ -5,7 +5,7 @@ implements = list( TOOL_SCALPEL = 100, /obj/item/melee/transforming/energy/sword = 40, - /obj/item/kitchen/knife = 40, + /obj/item/melee/knife = 40, /obj/item/shard = 25, /obj/item = 15) //any sharp item time = 1.6 SECONDS @@ -151,18 +151,18 @@ name = "saw bone" implements = list( TOOL_SAW = 100, - /obj/item/fireaxe = 50, + /obj/item/melee/axe/fire = 50, /obj/item/melee/arm_blade = 40, /obj/item/hatchet = 40, - /obj/item/kitchen/knife/butcher = 33, + /obj/item/melee/knife/butcher = 33, /obj/item = 10) //10% success (sort of) with any sharp item with a force>=10 time = 5.4 SECONDS preop_sound = list( /obj/item/circular_saw = 'sound/surgery/saw.ogg', /obj/item/melee/arm_blade = 'sound/surgery/scalpel1.ogg', - /obj/item/fireaxe = 'sound/surgery/scalpel1.ogg', + /obj/item/melee/axe/fire = 'sound/surgery/scalpel1.ogg', /obj/item/hatchet = 'sound/surgery/scalpel1.ogg', - /obj/item/kitchen/knife/butcher = 'sound/surgery/scalpel1.ogg', + /obj/item/melee/knife/butcher = 'sound/surgery/scalpel1.ogg', /obj/item = 'sound/surgery/scalpel1.ogg', ) success_sound = 'sound/surgery/bone3.ogg' diff --git a/code/modules/surgery/organs/augments_arms.dm b/code/modules/surgery/organs/augments_arms.dm index 5d6fac852d51..665086d1981d 100644 --- a/code/modules/surgery/organs/augments_arms.dm +++ b/code/modules/surgery/organs/augments_arms.dm @@ -232,11 +232,11 @@ /obj/item/organ/cyberimp/arm/toolset/emag_act(mob/user) for(var/datum/weakref/created_item in items_list) var/obj/potential_knife = created_item.resolve() - if(istype(/obj/item/kitchen/knife/combat/cyborg, potential_knife)) + if(istype(/obj/item/melee/knife/combat/cyborg, potential_knife)) return FALSE to_chat(user, "You unlock [src]'s integrated knife!") - items_list += WEAKREF(new /obj/item/kitchen/knife/combat/cyborg(src)) + items_list += WEAKREF(new /obj/item/melee/knife/combat/cyborg(src)) return TRUE /obj/item/organ/cyberimp/arm/esword diff --git a/code/modules/surgery/plastic_surgery.dm b/code/modules/surgery/plastic_surgery.dm index 9c87a5b5a93f..ed54575bb1bf 100644 --- a/code/modules/surgery/plastic_surgery.dm +++ b/code/modules/surgery/plastic_surgery.dm @@ -8,7 +8,7 @@ name = "reshape face" implements = list( TOOL_SCALPEL = 100, - /obj/item/kitchen/knife = 40, + /obj/item/melee/knife = 40, TOOL_WIRECUTTER = 33) time = 64 experience_given = MEDICAL_SKILL_MEDIUM diff --git a/code/modules/surgery/tools.dm b/code/modules/surgery/tools.dm index 317297c4fe8d..5da5f497bda4 100644 --- a/code/modules/surgery/tools.dm +++ b/code/modules/surgery/tools.dm @@ -171,7 +171,7 @@ //spases 4 legibilititie icon_state = "swa" - icon = 'icons/obj/items_and_weapons.dmi' + icon = 'icons/obj/items.dmi' lefthand_file = 'icons/mob/inhands/equipment/tools_lefthand.dmi' diff --git a/code/modules/uplink/uplink_items.dm b/code/modules/uplink/uplink_items.dm index d26226e3ea83..ef4630109543 100644 --- a/code/modules/uplink/uplink_items.dm +++ b/code/modules/uplink/uplink_items.dm @@ -1892,7 +1892,7 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item)) /datum/uplink_item/role_restricted/greykingsword name = "Blade of The Grey Tide" desc = "A weapon of legend, forged by the greatest crackheads of our generation." - item = /obj/item/melee/greykingsword + item = /obj/item/melee/sword/greyking cost = 2 restricted_roles = list("Assistant", "Chemist") diff --git a/code/modules/vehicles/scooter.dm b/code/modules/vehicles/scooter.dm index 8d6acea28452..ebef11cd2630 100644 --- a/code/modules/vehicles/scooter.dm +++ b/code/modules/vehicles/scooter.dm @@ -57,7 +57,7 @@ ///Stores the default icon state var/board_icon = "skateboard" ///The handheld item counterpart for the board - var/board_item_type = /obj/item/melee/skateboard + var/board_item_type = /obj/item/skateboard ///Stamina drain multiplier var/instability = 10 @@ -165,13 +165,13 @@ desc = "A RaDSTORMz brand professional skateboard. Looks a lot more stable than the average board." icon_state = "skateboard2" board_icon = "skateboard2" - board_item_type = /obj/item/melee/skateboard/pro + board_item_type = /obj/item/skateboard/pro instability = 6 /obj/vehicle/ridden/scooter/skateboard/hoverboard/ name = "hoverboard" desc = "A blast from the past, so retro!" - board_item_type = /obj/item/melee/skateboard/hoverboard + board_item_type = /obj/item/skateboard/hoverboard instability = 3 icon_state = "hoverboard_red" board_icon = "hoverboard_red" @@ -188,7 +188,7 @@ /obj/vehicle/ridden/scooter/skateboard/hoverboard/admin name = "\improper Board Of Directors" desc = "The engineering complexity of a spaceship concentrated inside of a board. Just as expensive, too." - board_item_type = /obj/item/melee/skateboard/hoverboard/admin + board_item_type = /obj/item/skateboard/hoverboard/admin instability = 0 icon_state = "hoverboard_nt" board_icon = "hoverboard_nt" diff --git a/code/modules/vending/drinnerware.dm b/code/modules/vending/drinnerware.dm index 3e51271093ad..18b8fd522aab 100644 --- a/code/modules/vending/drinnerware.dm +++ b/code/modules/vending/drinnerware.dm @@ -15,10 +15,10 @@ /obj/item/reagent_containers/food/condiment/peppermill = 5, /obj/item/clothing/suit/apron/chef = 2, /obj/item/kitchen/rollingpin = 2, - /obj/item/kitchen/knife = 2, - /obj/item/kitchen/knife/pizza_cutter = 2, + /obj/item/melee/knife/kitchen = 2, + /obj/item/melee/knife/pizza_cutter = 2, /obj/item/book/granter/crafting_recipe/cooking_sweets_101 = 2, - /obj/item/kitchen/knife/butcher = 1) + /obj/item/melee/knife/butcher = 1) refill_canister = /obj/item/vending_refill/dinnerware default_price = 50 extra_price = 250 diff --git a/code/modules/vending/games.dm b/code/modules/vending/games.dm index c803fa347e9f..e54479cd55ca 100644 --- a/code/modules/vending/games.dm +++ b/code/modules/vending/games.dm @@ -15,8 +15,8 @@ /obj/item/camera = 3, /obj/item/dyespray = 3) premium = list( - /obj/item/melee/skateboard/pro = 3, - /obj/item/melee/skateboard/hoverboard = 1) + /obj/item/skateboard/pro = 3, + /obj/item/skateboard/hoverboard = 1) refill_canister = /obj/item/vending_refill/games default_price = 50 extra_price = 250 diff --git a/code/modules/vending/sustenance.dm b/code/modules/vending/sustenance.dm index 0677a77edb58..02a95555468f 100644 --- a/code/modules/vending/sustenance.dm +++ b/code/modules/vending/sustenance.dm @@ -11,7 +11,7 @@ /obj/item/reagent_containers/food/drinks/ice/prison = 12, /obj/item/reagent_containers/food/snacks/candy_corn/prison = 6) contraband = list( - /obj/item/kitchen/knife = 6, + /obj/item/melee/knife/kitchen = 6, /obj/item/reagent_containers/food/drinks/coffee = 12, /obj/item/tank/internals/emergency_oxygen = 6, /obj/item/clothing/mask/breath = 6) diff --git a/code/modules/vending/wardrobes.dm b/code/modules/vending/wardrobes.dm index da3fdb134010..4686c12da1ad 100644 --- a/code/modules/vending/wardrobes.dm +++ b/code/modules/vending/wardrobes.dm @@ -375,8 +375,7 @@ icon_state = "chapdrobe" product_ads = "Are you being bothered by cultists or pesky revenants? Then come and dress like the holy man!;Clothes for men of the cloth!" vend_reply = "Thank you for using the ChapDrobe!" - products = list(/obj/item/storage/box/holy = 1, - /obj/item/storage/backpack/cultpack = 1, + products = list(/obj/item/storage/backpack/cultpack = 1, /obj/item/clothing/head/beret/service = 1, //WS edit - berets /obj/item/clothing/accessory/pocketprotector/cosmetology = 1, /obj/item/clothing/under/rank/civilian/chaplain = 1, diff --git a/icons/mob/inhands/weapons/swords_lefthand.dmi b/icons/mob/inhands/weapons/swords_lefthand.dmi index 41093fde051e78163950f7436c0c7d621a0e1ee5..49732e254e41fcc1d25883f00e51eb2188565715 100644 GIT binary patch literal 30216 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 Q-300D+`C-~x&PvS0J&BZ)c^nh literal 28291 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 diff --git a/icons/obj/improvised.dmi b/icons/obj/improvised.dmi index 43fc38a4be59ff9c8bfb9de3e7f4dd75ae044e9f..20890be4cbc166a81cb4cdebca9a7b75d1c91a1b 100644 GIT binary patch delta 1270 zcmcb?wwP;zIG+Ot8v_HwQpd;YPb)IkHYeVhJ=I`IjD4Z7;!*Jrk zeg=km7JE+@$B>FSZ)czPmUa|59xr4XCY*g#zI~RMj#AW7`6U-7Uy1HYSoa zep$KMd+YqNva)N;Tm~%_EA=1jI?N;hNA++PoDm$B)86TRwd?xgt-3XKpPt;GZP?|W zZ@@SAzQh%_lX;)^Jej=PbHze+=To1KKlR={FX*(k6ywb+>_yRQ+ZN~_|MvE|rVn3; zcACqK+4F*8s?h^d4 zWqr_-d;4SKPVFpeaS#+(thB&+*Y4d%cU^xi+I{?SV{jQ+>i5>Xh8=*8?z0_re;ic#zF0bdxuhe3~uH^W*JDB}!IT6D!`LTTc zOX=Gz31<#E3m)0PKmwXkr&>8TvTFYl9)5o31y%_^d*$~F8Xx>}X3M2px46nW4lvC) zq9+)^zM7+;{bjYh7X{w{J^&V$GKO z`eW(!&IcamC2yY25UP|ZT)5?&fwl4Ln>TJ4l&)Erm+^LORB!P2@81`0+7#q-(ay?B zXq$%$lf7QuMt{TO>ZyAry$gcE!($bp&>)3^M19naXrs&_r9r`WXrkzPPU-??YDoN1RMIMn6MY` z->)@I|6Fb|OTuk?Q`6K;ofDS|w%qLtpB%gYn40d>_kX;e-8iE(zi#cLQwuqcyiIm2 zyHa;#tA5HHiOq$|>v|csAAZjqbD;jO-GfyMt`fC&r delta 807 zcmV+?1K9kd3fKma7k^*~0{{R3)kcR30002DP)t-s0RI4HKMQC;3w%rsPEJmdSrCbd ziH3%TgM)*NjEsPQfF2$m6ciLuF$lQ0xVpN!yu7@R$f|~@l|A%k* z?`n1KFT<$1>mZ+y2xCwub=>Wxc;Un@mqROs1GJ8}LaZ5btZs`AzLH|XM7cLo%t_y2 z%U_jnUVu27GDUKc?HY*T(fp;`@(eJ5`NAUf$h0CGO;EIiiziMP>@QlYe(XNqeFI3? zX#zU_f6^fU00E#$L_t(&f$f)TQ-VMgh6xfdV7rNi*Uf4%$;wJ&$p8Pl+T~I%EQ6@q zjCLM|+2I54!*W>WtfBw_02~k}Dn(|#Mp1v+;Fi<+f|v#)XV4A9FipMLZ0cvGX&R7D5)yw`vNQf5LH8H8b!6x83e^+_vko^M*aXXVslT z>PQrYcf?_*)E6*CYN#ypR`Ho)gYRhTd?hJ{v%~!W000000OfQ=>@&aD?@{_0@kMV3 z!(h0pK-k-lDEM}a@i3RaCh)w1VB_8%-&v#k2SWTwKL1DHCFBI6-d-yn@qRJX%y?wgV-~{e`P6&B>{~#nUSS%Nm zWk!6lC@->|ZJ8RyCY=O9@dn{CC|?LkiP=6tD+)yUO7}CQ2V;G#S_i^yfG|IuK^TVI zxW}d3jh~uE^5gyl(*H#O006+B5`9S)J*>d+Uko6qLUs*g7devrh9cP$SjjH2^nB@` l(7`XVqxhFbk_Eu=@eTGpM-DwTHedh%002ovPDHLkV1hNdVBi1% diff --git a/icons/obj/items.dmi b/icons/obj/items.dmi new file mode 100644 index 0000000000000000000000000000000000000000..e38eb539cf4dbf5725b58e3f653773b6c6b71f2f GIT binary patch literal 61369 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 DND(s; literal 0 HcmV?d00001 diff --git a/icons/obj/weapon/blunt.dmi b/icons/obj/weapon/blunt.dmi new file mode 100644 index 0000000000000000000000000000000000000000..480515bbd79403d8ba02016cd71120b565ef7b9e GIT binary patch literal 4469 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 C(`z08 literal 0 HcmV?d00001 diff --git a/icons/obj/item/knife.dmi b/icons/obj/weapon/knife.dmi similarity index 100% rename from icons/obj/item/knife.dmi rename to icons/obj/weapon/knife.dmi diff --git a/icons/obj/weapon/misc.dmi b/icons/obj/weapon/misc.dmi new file mode 100644 index 0000000000000000000000000000000000000000..9eabb2c3eaf703f138b6904c3e8b70fa3e991ff5 GIT binary patch literal 2364 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 b0KMvezFY_!?X&_900000NkvXXu0mjfUqbqj literal 0 HcmV?d00001 diff --git a/icons/obj/weapon/sword.dmi b/icons/obj/weapon/sword.dmi new file mode 100644 index 0000000000000000000000000000000000000000..dc8fd8fd5d7d78e510c79cc23e27de0db4fbceb2 GIT binary patch literal 15674 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 E2TU{#PXGV_ literal 0 HcmV?d00001 diff --git a/shiptest.dme b/shiptest.dme index c5770b4a4b81..88900c60e222 100644 --- a/shiptest.dme +++ b/shiptest.dme @@ -1159,7 +1159,6 @@ #include "code\game\objects\items\cardboard_cutouts.dm" #include "code\game\objects\items\cards_ids.dm" #include "code\game\objects\items\cash.dm" -#include "code\game\objects\items\chainsaw.dm" #include "code\game\objects\items\charter.dm" #include "code\game\objects\items\chromosome.dm" #include "code\game\objects\items\chrono_eraser.dm" @@ -1179,19 +1178,15 @@ #include "code\game\objects\items\dna_injector.dm" #include "code\game\objects\items\documents.dm" #include "code\game\objects\items\door_seal.dm" -#include "code\game\objects\items\dualsaber.dm" #include "code\game\objects\items\dyekit.dm" #include "code\game\objects\items\eightball.dm" -#include "code\game\objects\items\energyhalberd.dm" #include "code\game\objects\items\etherealdiscoball.dm" #include "code\game\objects\items\extinguisher.dm" -#include "code\game\objects\items\fireaxe.dm" #include "code\game\objects\items\flamethrower.dm" #include "code\game\objects\items\gift.dm" #include "code\game\objects\items\granters.dm" #include "code\game\objects\items\handcuffs.dm" #include "code\game\objects\items\holosign_creator.dm" -#include "code\game\objects\items\holy_weapons.dm" #include "code\game\objects\items\hot_potato.dm" #include "code\game\objects\items\hourglass.dm" #include "code\game\objects\items\inducer.dm" @@ -1204,10 +1199,8 @@ #include "code\game\objects\items\paiwire.dm" #include "code\game\objects\items\pet_carrier.dm" #include "code\game\objects\items\pinpointer.dm" -#include "code\game\objects\items\pitchfork.dm" #include "code\game\objects\items\plushes.dm" #include "code\game\objects\items\pneumaticCannon.dm" -#include "code\game\objects\items\powerfist.dm" #include "code\game\objects\items\puzzle_pieces.dm" #include "code\game\objects\items\RCD.dm" #include "code\game\objects\items\RCL.dm" @@ -1221,20 +1214,15 @@ #include "code\game\objects\items\shrapnel.dm" #include "code\game\objects\items\shuttle_creator.dm" #include "code\game\objects\items\signs.dm" -#include "code\game\objects\items\singularityhammer.dm" -#include "code\game\objects\items\spear.dm" -#include "code\game\objects\items\stunbaton.dm" #include "code\game\objects\items\survery_handheld.dm" #include "code\game\objects\items\taster.dm" #include "code\game\objects\items\teleportation.dm" -#include "code\game\objects\items\teleprod.dm" #include "code\game\objects\items\theft_tools.dm" #include "code\game\objects\items\toy_mechs.dm" #include "code\game\objects\items\toys.dm" #include "code\game\objects\items\trash.dm" #include "code\game\objects\items\vending_items.dm" #include "code\game\objects\items\wayfinding.dm" -#include "code\game\objects\items\weaponry.dm" #include "code\game\objects\items\attachments\_attachment.dm" #include "code\game\objects\items\attachments\bayonet.dm" #include "code\game\objects\items\attachments\laser_sight.dm" @@ -1323,9 +1311,20 @@ #include "code\game\objects\items\implants\implanter.dm" #include "code\game\objects\items\implants\implantpad.dm" #include "code\game\objects\items\implants\implantuplink.dm" +#include "code\game\objects\items\melee\chainsaw.dm" +#include "code\game\objects\items\melee\dualsaber.dm" #include "code\game\objects\items\melee\energy.dm" +#include "code\game\objects\items\melee\energyhalberd.dm" +#include "code\game\objects\items\melee\fireaxe.dm" +#include "code\game\objects\items\melee\knife.dm" #include "code\game\objects\items\melee\misc.dm" +#include "code\game\objects\items\melee\powerfist.dm" +#include "code\game\objects\items\melee\spear.dm" +#include "code\game\objects\items\melee\stunbaton.dm" +#include "code\game\objects\items\melee\sword.dm" +#include "code\game\objects\items\melee\teleprod.dm" #include "code\game\objects\items\melee\transforming.dm" +#include "code\game\objects\items\melee\weaponry.dm" #include "code\game\objects\items\robot\ai_upgrades.dm" #include "code\game\objects\items\robot\robot_items.dm" #include "code\game\objects\items\robot\robot_parts.dm" @@ -1700,7 +1699,6 @@ #include "code\modules\antagonists\cult\cult_items.dm" #include "code\modules\antagonists\cult\cult_structures.dm" #include "code\modules\antagonists\cult\cult_turf_overlay.dm" -#include "code\modules\antagonists\cult\ritual.dm" #include "code\modules\antagonists\cult\rune_spawn_action.dm" #include "code\modules\antagonists\cult\runes.dm" #include "code\modules\antagonists\devil\devil.dm" @@ -2145,7 +2143,6 @@ #include "code\modules\events\holiday\vday.dm" #include "code\modules\events\holiday\xmas.dm" #include "code\modules\events\wizard\aid.dm" -#include "code\modules\events\wizard\curseditems.dm" #include "code\modules\events\wizard\departmentrevolt.dm" #include "code\modules\events\wizard\embeddies.dm" #include "code\modules\events\wizard\fakeexplosion.dm" diff --git a/tools/UpdatePaths/Scripts/2776_cultbegone.txt b/tools/UpdatePaths/Scripts/2776_cultbegone.txt index f2297a7003e7..a4da9dcb3d80 100644 --- a/tools/UpdatePaths/Scripts/2776_cultbegone.txt +++ b/tools/UpdatePaths/Scripts/2776_cultbegone.txt @@ -32,12 +32,12 @@ /obj/item/toy/plush/narplush : /obj/item/toy/plush/lizardplushie /obj/item/bedsheet/cult : /obj/item/bedsheet/dorms -/obj/item/melee/cultblade : /obj/item/claymore/weak -/obj/item/melee/cultblade/dagger : /obj/item/kitchen/knife/combat -/obj/item/melee/cultblade/ghost : /obj/item/kitchen/knife/combat -/obj/item/toy/toy_dagger : /obj/item/kitchen/knife -/obj/item/kitchen/knife/bloodletter : /obj/item/kitchen/knife/combat -/obj/item/kitchen/ritual : /obj/item/kitchen/knife/combat +/obj/item/melee/cultblade : /obj/item/melee/sword/claymore/weak +/obj/item/melee/cultblade/dagger : /obj/item/melee/knife/combat +/obj/item/melee/cultblade/ghost : /obj/item/melee/knife/combat +/obj/item/toy/toy_dagger : /obj/item/melee/knife/kitcken +/obj/item/melee/knife/kitcken/bloodletter : /obj/item/melee/knife/combat +/obj/item/kitchen/ritual : /obj/item/melee/knife/combat /obj/item/restraints/legcuffs/bola/cult : /obj/item/restraints/legcuffs/bola /obj/effect/rune : @DELETE diff --git a/tools/UpdatePaths/Scripts/2932_melee.txt b/tools/UpdatePaths/Scripts/2932_melee.txt new file mode 100644 index 000000000000..60b81ff02b18 --- /dev/null +++ b/tools/UpdatePaths/Scripts/2932_melee.txt @@ -0,0 +1,17 @@ +/obj/item/kitchen/knife : /obj/item/melee/knife/kitchen {@OLD} +/obj/item/kitchen/knife/plastic : /obj/item/melee/knife/plastic {@OLD} +/obj/item/kitchen/knife/letter_opener : /obj/item/melee/knife/letter_opener {@OLD} +/obj/item/kitchen/knife/combat : /obj/item/melee/knife/combat {@OLD} +/obj/item/kitchen/knife/combat/bone : /obj/item/melee/knife/bone {@OLD} +/obj/item/kitchen/knife/combat/survival : /obj/item/melee/knife/survival {@OLD} +/obj/item/kitchen/knife/switchblade : /obj/item/melee/knife/switchblade {@OLD} +/obj/item/kitchen/knife/hunting : obj/item/melee/knife/hunting {@OLD} +/obj/item/kitchen/knife/shiv : obj/item/melee/knife/shiv {@OLD} + +/obj/item/spear : /obj/item/melee/spear {@OLD} +/obj/item/spear/explosive : /obj/item/melee/spear/explosive {@OLD} +/obj/item/spear/bonespear : /obj/item/melee/spear/bone {@OLD} +/obj/item/melee/spear/bonespear : /obj/item/melee/spear/bone {@OLD} + +/obj/item/claymore : /obj/item/melee/sword/claymore {@OLD} +/obj/item/claymore/bone : /obj/item/melee/sword/bone {@OLD}