From 109edeb4b5fcab5372d32b621224dc7d0c659317 Mon Sep 17 00:00:00 2001 From: Ed <96445749+TheShuEd@users.noreply.github.com> Date: Fri, 29 Nov 2024 01:31:42 +0300 Subject: [PATCH] Modular weapon crafting WIP (#611) * data initalizing * modular assembling * grips and blades sprites * first prototypes * jewerly decoration * disassemble modular weapon * grip start stats * blade modifiers * inhand sprites generation * resprites inhand, add sickle, add attempt modify size * auto inhand sprite parsing * icon default parsing * spear blade * mace ball * sword blade * sharedization + autonetwork hotswipe * wielding sprite support! * iron long grip * wielded sickle, fix ERROR sprite if state not added * Update grips.yml * wielded spear + ruby rework * wielding damage bonus modifier * modular size fix * fix storedOffset rotation * parts offset * fix inheriting modifiers * some bugfix and balance tweaks * DPS Meter * fix dividing by zero * rebalance * replace baseknife to modular knife. Delete ice knife spell * sickle and mace modular replace * modular spear & sword replacement. add wielded icons * Update CP14DPSMeterSystem.cs * back to serverization * grip disassemble drop again * clothing sprite generation code * back slot long grips and mace * remove jewerly slot, add more clothing states * finish clothing states * shovel modular * YEEEEE * anvil modular craft * bugfixes * more integration check fixes --- .../Clothing/ClientClothingSystem.cs | 2 +- .../Systems/Storage/Controls/ItemGridPiece.cs | 5 +- .../CP14ClientModularCraftSystem.cs | 213 +++++++++++++++++ .../_CP14/DPSMeter/CP14DPSMeterComponent.cs | 22 ++ .../_CP14/DPSMeter/CP14DPSMeterSystem.cs | 62 +++++ .../ModularCraft/CP14ModularCraftSystem.cs | 169 ++++++++++++++ .../CP14ModularDisassembleBehavior.cs | 15 ++ .../ModularCraft/Modifiers/AddComponents.cs | 20 ++ .../Modifiers/EditDamageableModifier.cs | 20 ++ .../Modifiers/EditIncreaseDamageOnWield.cs | 28 +++ .../_CP14/ModularCraft/Modifiers/EditItem.cs | 48 ++++ .../ModularCraft/Modifiers/EditMeleeWeapon.cs | 64 ++++++ .../_CP14/ModularCraft/Modifiers/Inherit.cs | 25 ++ Content.Shared/Item/SharedItemSystem.cs | 9 + Content.Shared/Verbs/VerbCategory.cs | 5 +- .../Weapons/Melee/MeleeWeaponComponent.cs | 2 +- .../IncreaseDamageOnWieldComponent.cs | 2 +- .../CP14DamageableModifierComponent.cs | 14 ++ .../CP14DamageableModifierSystem.cs | 18 ++ .../Door/CP14DoorInteractionPopupComponent.cs | 2 +- .../_CP14/LockKey/SharedCP14LockKeySystem.cs | 2 +- .../Components/CP14SharpenedComponent.cs | 7 +- .../EntitySystems/CP14MeleeParrySystem.cs | 1 - .../ModularCraft/CP14ModularCraftModifier.cs | 11 + .../CP14SharedModularCraftSystem.cs | 51 ++++ .../CP14ModularAutoAssembleComponent.cs | 14 ++ .../CP14ModularCraftPartComponent.cs | 16 ++ .../CP14ModularCraftStartpointComponent.cs | 38 +++ .../CP14ModularCraftPartPrototype.cs | 45 ++++ .../CP14ModularCraftSlotPrototype.cs | 13 ++ .../Temperature/CP14SharedFireSpreadSystem.cs | 2 +- .../ru-RU/_CP14/modularCraft/modularCraft.ftl | 3 + .../Locale/ru-RU/_CP14/modularCraft/slots.ftl | 2 + .../Prototypes/_CP14/Catalog/Fills/crates.yml | 4 +- .../Actions/Spells/Water/T0_ice_dagger.yml | 107 --------- .../Markers/Spawners/Random/Loot/spawners.yml | 1 - .../_CP14/Entities/Mobs/NPC/skeleton.yml | 2 +- .../Entities/Objects/ModularTools/blade.yml | 147 ++++++++++++ .../Entities/Objects/ModularTools/grips.yml | 160 +++++++++++++ .../Objects/Weapons/Melee/Tools/pickaxe.yml | 44 ---- .../Objects/Weapons/Melee/Tools/shovel.yml | 35 --- .../Entities/Objects/Weapons/Melee/base.yml | 28 +-- .../Entities/Objects/Weapons/Melee/dagger.yml | 47 ---- .../Entities/Objects/Weapons/Melee/mace.yml | 40 ---- .../Entities/Objects/Weapons/Melee/sickle.yml | 42 ---- .../Entities/Objects/Weapons/Melee/spear.yml | 46 ---- .../Entities/Objects/Weapons/Melee/sword.yml | 39 ---- .../Weapons/ModularPresets/daggers.yml | 14 ++ .../Objects/Weapons/ModularPresets/mace.yml | 14 ++ .../Weapons/ModularPresets/pickaxe.yml | 14 ++ .../Objects/Weapons/ModularPresets/shovel.yml | 14 ++ .../Objects/Weapons/ModularPresets/sickle.yml | 14 ++ .../Objects/Weapons/ModularPresets/spear.yml | 29 +++ .../Objects/Weapons/ModularPresets/sword.yml | 14 ++ .../_CP14/Entities/Structures/test.yml | 27 +++ .../_CP14/Loadouts/Jobs/general.yml | 25 +- .../Loadouts/Misc/undead_startinggear.yml | 4 +- .../_CP14/ModularCraft/Blade/blade.yml | 217 ++++++++++++++++++ .../ModularCraft/baseModularModifier.yml | 68 ++++++ .../Prototypes/_CP14/ModularCraft/slots.yml | 3 + .../_CP14/Procedural/dungeon_loot.yml | 9 - .../_CP14/Recipes/Workbench/anvil.yml | 182 ++++++--------- .../_CP14/Recipes/Workbench/workbench.yml | 16 ++ .../Roles/Jobs/Fun/misc_startinggear.yml | 4 +- Resources/Prototypes/_CP14/tools.yml | 4 +- .../_CP14/Guidebook_EN/Demiplanes.xml | 4 +- .../_CP14/Guidebook_RU/Demiplanes.xml | 4 +- .../ModularTools/iron_big_sword.rsi/icon.png | Bin 0 -> 518 bytes .../ModularTools/iron_big_sword.rsi/meta.json | 14 ++ .../iron_dagger.rsi/equipped-BELT1.png | Bin 0 -> 253 bytes .../iron_dagger.rsi/equipped-BELT2.png | Bin 0 -> 255 bytes .../iron_dagger.rsi/equipped-NECK.png | Bin 0 -> 224 bytes .../ModularTools/iron_dagger.rsi/icon.png | Bin 0 -> 322 bytes .../iron_dagger.rsi/inhand-left.png | Bin 0 -> 424 bytes .../iron_dagger.rsi/inhand-right.png | Bin 0 -> 433 bytes .../ModularTools/iron_dagger.rsi/meta.json | 42 ++++ .../iron_dagger.rsi/wielded-inhand-left.png | Bin 0 -> 390 bytes .../iron_dagger.rsi/wielded-inhand-right.png | Bin 0 -> 395 bytes .../iron_grip.rsi/equipped-BELT1.png | Bin 0 -> 182 bytes .../iron_grip.rsi/equipped-BELT2.png | Bin 0 -> 177 bytes .../ModularTools/iron_grip.rsi/icon.png | Bin 0 -> 238 bytes .../iron_grip.rsi/inhand-left.png | Bin 0 -> 226 bytes .../iron_grip.rsi/inhand-right.png | Bin 0 -> 227 bytes .../iron_grip.rsi}/meta.json | 0 .../iron_grip_long.rsi/equipped-NECK.png | Bin 0 -> 358 bytes .../ModularTools/iron_grip_long.rsi/icon.png | Bin 0 -> 354 bytes .../iron_grip_long.rsi/inhand-left.png | Bin 0 -> 442 bytes .../iron_grip_long.rsi/inhand-right.png | Bin 0 -> 420 bytes .../iron_grip_long.rsi}/meta.json | 14 +- .../wielded-inhand-left.png | Bin 0 -> 385 bytes .../wielded-inhand-right.png | Bin 0 -> 380 bytes .../iron_mace.rsi/equipped-BELT1.png | Bin 0 -> 403 bytes .../iron_mace.rsi/equipped-BELT2.png | Bin 0 -> 462 bytes .../iron_mace.rsi/equipped-NECK.png | Bin 0 -> 387 bytes .../ModularTools/iron_mace.rsi/icon.png | Bin 0 -> 337 bytes .../iron_mace.rsi/inhand-left.png | Bin 0 -> 521 bytes .../iron_mace.rsi/inhand-right.png | Bin 0 -> 492 bytes .../ModularTools/iron_mace.rsi/meta.json | 42 ++++ .../iron_mace.rsi/wielded-inhand-left.png | Bin 0 -> 518 bytes .../iron_mace.rsi/wielded-inhand-right.png | Bin 0 -> 523 bytes .../iron_pickaxe.rsi/equipped-BELT1.png | Bin 0 -> 255 bytes .../iron_pickaxe.rsi/equipped-BELT2.png | Bin 0 -> 257 bytes .../iron_pickaxe.rsi/equipped-NECK.png | Bin 0 -> 225 bytes .../ModularTools/iron_pickaxe.rsi/icon.png | Bin 0 -> 228 bytes .../iron_pickaxe.rsi/inhand-left.png | Bin 0 -> 430 bytes .../iron_pickaxe.rsi/inhand-right.png | Bin 0 -> 436 bytes .../ModularTools/iron_pickaxe.rsi/meta.json | 42 ++++ .../iron_pickaxe.rsi/wielded-inhand-left.png | Bin 0 -> 429 bytes .../iron_pickaxe.rsi/wielded-inhand-right.png | Bin 0 -> 416 bytes .../iron_shovel.rsi/equipped-BELT1.png | Bin 0 -> 282 bytes .../iron_shovel.rsi/equipped-BELT2.png | Bin 0 -> 283 bytes .../iron_shovel.rsi/equipped-NECK.png | Bin 0 -> 236 bytes .../ModularTools/iron_shovel.rsi/icon.png | Bin 0 -> 323 bytes .../iron_shovel.rsi/inhand-left.png | Bin 0 -> 437 bytes .../iron_shovel.rsi/inhand-right.png | Bin 0 -> 412 bytes .../ModularTools/iron_shovel.rsi/meta.json | 42 ++++ .../iron_shovel.rsi/wielded-inhand-left.png | Bin 0 -> 448 bytes .../iron_shovel.rsi/wielded-inhand-right.png | Bin 0 -> 425 bytes .../iron_sickle.rsi/equipped-BELT1.png | Bin 0 -> 322 bytes .../iron_sickle.rsi/equipped-BELT2.png | Bin 0 -> 329 bytes .../iron_sickle.rsi/equipped-NECK.png | Bin 0 -> 327 bytes .../ModularTools/iron_sickle.rsi/icon.png | Bin 0 -> 331 bytes .../iron_sickle.rsi/inhand-left.png | Bin 0 -> 519 bytes .../iron_sickle.rsi/inhand-right.png | Bin 0 -> 520 bytes .../ModularTools/iron_sickle.rsi/meta.json | 42 ++++ .../iron_sickle.rsi/wielded-inhand-left.png | Bin 0 -> 476 bytes .../iron_sickle.rsi/wielded-inhand-right.png | Bin 0 -> 471 bytes .../iron_spear.rsi/equipped-BELT1.png | Bin 0 -> 241 bytes .../iron_spear.rsi/equipped-BELT2.png | Bin 0 -> 238 bytes .../iron_spear.rsi/equipped-NECK.png | Bin 0 -> 215 bytes .../ModularTools/iron_spear.rsi/icon.png | Bin 0 -> 255 bytes .../iron_spear.rsi/inhand-left.png | Bin 0 -> 378 bytes .../iron_spear.rsi/inhand-right.png | Bin 0 -> 383 bytes .../ModularTools/iron_spear.rsi/meta.json | 42 ++++ .../iron_spear.rsi/wielded-inhand-left.png | Bin 0 -> 324 bytes .../iron_spear.rsi/wielded-inhand-right.png | Bin 0 -> 329 bytes .../iron_sword.rsi/equipped-BELT1.png | Bin 0 -> 322 bytes .../iron_sword.rsi/equipped-BELT2.png | Bin 0 -> 316 bytes .../iron_sword.rsi/equipped-NECK.png | Bin 0 -> 260 bytes .../ModularTools/iron_sword.rsi/icon.png | Bin 0 -> 434 bytes .../iron_sword.rsi/inhand-left.png | Bin 0 -> 541 bytes .../iron_sword.rsi/inhand-right.png | Bin 0 -> 540 bytes .../ModularTools/iron_sword.rsi/meta.json | 42 ++++ .../iron_sword.rsi/wielded-inhand-left.png | Bin 0 -> 523 bytes .../iron_sword.rsi/wielded-inhand-right.png | Bin 0 -> 527 bytes .../wooden_grip.rsi/equipped-BELT1.png | Bin 0 -> 181 bytes .../wooden_grip.rsi/equipped-BELT2.png | Bin 0 -> 176 bytes .../ModularTools/wooden_grip.rsi/icon.png | Bin 0 -> 233 bytes .../wooden_grip.rsi/inhand-left.png | Bin 0 -> 231 bytes .../wooden_grip.rsi/inhand-right.png | Bin 0 -> 236 bytes .../wooden_grip.rsi}/meta.json | 2 +- .../wooden_grip_long.rsi/equipped-NECK.png | Bin 0 -> 354 bytes .../wooden_grip_long.rsi/helper32.png | Bin 0 -> 321 bytes .../wooden_grip_long.rsi/icon.png | Bin 0 -> 348 bytes .../wooden_grip_long.rsi/inhand-left.png | Bin 0 -> 454 bytes .../wooden_grip_long.rsi/inhand-right.png | Bin 0 -> 424 bytes .../wooden_grip_long.rsi}/meta.json | 16 +- .../wooden_grip_long.rsi/wielded-helper32.png | Bin 0 -> 365 bytes .../wielded-inhand-left.png | Bin 0 -> 396 bytes .../wielded-inhand-right.png | Bin 0 -> 386 bytes .../Melee/Mace/mace.rsi/equipped-BELT1.png | Bin 302 -> 0 bytes .../Melee/Mace/mace.rsi/equipped-BELT2.png | Bin 299 -> 0 bytes .../Weapons/Melee/Mace/mace.rsi/icon.png | Bin 412 -> 0 bytes .../Melee/Mace/mace.rsi/inhand-left.png | Bin 521 -> 0 bytes .../Melee/Mace/mace.rsi/inhand-right.png | Bin 519 -> 0 bytes .../Melee/Pickaxe/pickaxe.rsi/icon.png | Bin 426 -> 0 bytes .../Melee/Pickaxe/pickaxe.rsi/inhand-left.png | Bin 608 -> 0 bytes .../Pickaxe/pickaxe.rsi/inhand-right.png | Bin 600 -> 0 bytes .../pickaxe.rsi/wielded-inhand-left.png | Bin 661 -> 0 bytes .../pickaxe.rsi/wielded-inhand-right.png | Bin 672 -> 0 bytes .../Weapons/Melee/Shovel/shovel.rsi/icon.png | Bin 473 -> 0 bytes .../Melee/Shovel/shovel.rsi/inhand-left.png | Bin 772 -> 0 bytes .../Melee/Shovel/shovel.rsi/inhand-right.png | Bin 788 -> 0 bytes .../Weapons/Melee/Shovel/shovel.rsi/meta.json | 22 -- .../Sickle/sickle.rsi/equipped-BELT1.png | Bin 400 -> 0 bytes .../Sickle/sickle.rsi/equipped-BELT2.png | Bin 396 -> 0 bytes .../Weapons/Melee/Sickle/sickle.rsi/icon.png | Bin 460 -> 0 bytes .../Melee/Sickle/sickle.rsi/inhand-left.png | Bin 583 -> 0 bytes .../Melee/Sickle/sickle.rsi/inhand-right.png | Bin 601 -> 0 bytes .../Melee/Sword/sword.rsi/equipped-NECK.png | Bin 478 -> 0 bytes .../Weapons/Melee/Sword/sword.rsi/icon.png | Bin 609 -> 0 bytes .../Melee/Sword/sword.rsi/inhand-left.png | Bin 767 -> 0 bytes .../Melee/Sword/sword.rsi/inhand-right.png | Bin 780 -> 0 bytes .../throwableSpear.rsi/icon.png | Bin 469 -> 0 bytes .../throwableSpear.rsi/inhand-left.png | Bin 565 -> 0 bytes .../throwableSpear.rsi/inhand-right.png | Bin 580 -> 0 bytes .../throwableSpear.rsi/meta.json | 22 -- Resources/migration.yml | 11 +- 188 files changed, 2137 insertions(+), 630 deletions(-) create mode 100644 Content.Client/_CP14/ModularCraft/CP14ClientModularCraftSystem.cs create mode 100644 Content.Server/_CP14/DPSMeter/CP14DPSMeterComponent.cs create mode 100644 Content.Server/_CP14/DPSMeter/CP14DPSMeterSystem.cs create mode 100644 Content.Server/_CP14/ModularCraft/CP14ModularCraftSystem.cs create mode 100644 Content.Server/_CP14/ModularCraft/CP14ModularDisassembleBehavior.cs create mode 100644 Content.Server/_CP14/ModularCraft/Modifiers/AddComponents.cs create mode 100644 Content.Server/_CP14/ModularCraft/Modifiers/EditDamageableModifier.cs create mode 100644 Content.Server/_CP14/ModularCraft/Modifiers/EditIncreaseDamageOnWield.cs create mode 100644 Content.Server/_CP14/ModularCraft/Modifiers/EditItem.cs create mode 100644 Content.Server/_CP14/ModularCraft/Modifiers/EditMeleeWeapon.cs create mode 100644 Content.Server/_CP14/ModularCraft/Modifiers/Inherit.cs create mode 100644 Content.Shared/_CP14/Damageable/CP14DamageableModifierComponent.cs create mode 100644 Content.Shared/_CP14/Damageable/CP14DamageableModifierSystem.cs create mode 100644 Content.Shared/_CP14/ModularCraft/CP14ModularCraftModifier.cs create mode 100644 Content.Shared/_CP14/ModularCraft/CP14SharedModularCraftSystem.cs create mode 100644 Content.Shared/_CP14/ModularCraft/Components/CP14ModularAutoAssembleComponent.cs create mode 100644 Content.Shared/_CP14/ModularCraft/Components/CP14ModularCraftPartComponent.cs create mode 100644 Content.Shared/_CP14/ModularCraft/Components/CP14ModularCraftStartpointComponent.cs create mode 100644 Content.Shared/_CP14/ModularCraft/Prototypes/CP14ModularCraftPartPrototype.cs create mode 100644 Content.Shared/_CP14/ModularCraft/Prototypes/CP14ModularCraftSlotPrototype.cs create mode 100644 Resources/Locale/ru-RU/_CP14/modularCraft/modularCraft.ftl create mode 100644 Resources/Locale/ru-RU/_CP14/modularCraft/slots.ftl delete mode 100644 Resources/Prototypes/_CP14/Entities/Actions/Spells/Water/T0_ice_dagger.yml create mode 100644 Resources/Prototypes/_CP14/Entities/Objects/ModularTools/blade.yml create mode 100644 Resources/Prototypes/_CP14/Entities/Objects/ModularTools/grips.yml delete mode 100644 Resources/Prototypes/_CP14/Entities/Objects/Weapons/Melee/Tools/pickaxe.yml delete mode 100644 Resources/Prototypes/_CP14/Entities/Objects/Weapons/Melee/Tools/shovel.yml delete mode 100644 Resources/Prototypes/_CP14/Entities/Objects/Weapons/Melee/dagger.yml delete mode 100644 Resources/Prototypes/_CP14/Entities/Objects/Weapons/Melee/mace.yml delete mode 100644 Resources/Prototypes/_CP14/Entities/Objects/Weapons/Melee/sickle.yml delete mode 100644 Resources/Prototypes/_CP14/Entities/Objects/Weapons/Melee/spear.yml delete mode 100644 Resources/Prototypes/_CP14/Entities/Objects/Weapons/Melee/sword.yml create mode 100644 Resources/Prototypes/_CP14/Entities/Objects/Weapons/ModularPresets/daggers.yml create mode 100644 Resources/Prototypes/_CP14/Entities/Objects/Weapons/ModularPresets/mace.yml create mode 100644 Resources/Prototypes/_CP14/Entities/Objects/Weapons/ModularPresets/pickaxe.yml create mode 100644 Resources/Prototypes/_CP14/Entities/Objects/Weapons/ModularPresets/shovel.yml create mode 100644 Resources/Prototypes/_CP14/Entities/Objects/Weapons/ModularPresets/sickle.yml create mode 100644 Resources/Prototypes/_CP14/Entities/Objects/Weapons/ModularPresets/spear.yml create mode 100644 Resources/Prototypes/_CP14/Entities/Objects/Weapons/ModularPresets/sword.yml create mode 100644 Resources/Prototypes/_CP14/ModularCraft/Blade/blade.yml create mode 100644 Resources/Prototypes/_CP14/ModularCraft/baseModularModifier.yml create mode 100644 Resources/Prototypes/_CP14/ModularCraft/slots.yml delete mode 100644 Resources/Prototypes/_CP14/Procedural/dungeon_loot.yml create mode 100644 Resources/Textures/_CP14/Objects/ModularTools/iron_big_sword.rsi/icon.png create mode 100644 Resources/Textures/_CP14/Objects/ModularTools/iron_big_sword.rsi/meta.json create mode 100644 Resources/Textures/_CP14/Objects/ModularTools/iron_dagger.rsi/equipped-BELT1.png create mode 100644 Resources/Textures/_CP14/Objects/ModularTools/iron_dagger.rsi/equipped-BELT2.png create mode 100644 Resources/Textures/_CP14/Objects/ModularTools/iron_dagger.rsi/equipped-NECK.png create mode 100644 Resources/Textures/_CP14/Objects/ModularTools/iron_dagger.rsi/icon.png create mode 100644 Resources/Textures/_CP14/Objects/ModularTools/iron_dagger.rsi/inhand-left.png create mode 100644 Resources/Textures/_CP14/Objects/ModularTools/iron_dagger.rsi/inhand-right.png create mode 100644 Resources/Textures/_CP14/Objects/ModularTools/iron_dagger.rsi/meta.json create mode 100644 Resources/Textures/_CP14/Objects/ModularTools/iron_dagger.rsi/wielded-inhand-left.png create mode 100644 Resources/Textures/_CP14/Objects/ModularTools/iron_dagger.rsi/wielded-inhand-right.png create mode 100644 Resources/Textures/_CP14/Objects/ModularTools/iron_grip.rsi/equipped-BELT1.png create mode 100644 Resources/Textures/_CP14/Objects/ModularTools/iron_grip.rsi/equipped-BELT2.png create mode 100644 Resources/Textures/_CP14/Objects/ModularTools/iron_grip.rsi/icon.png create mode 100644 Resources/Textures/_CP14/Objects/ModularTools/iron_grip.rsi/inhand-left.png create mode 100644 Resources/Textures/_CP14/Objects/ModularTools/iron_grip.rsi/inhand-right.png rename Resources/Textures/_CP14/Objects/{Weapons/Melee/Sickle/sickle.rsi => ModularTools/iron_grip.rsi}/meta.json (100%) create mode 100644 Resources/Textures/_CP14/Objects/ModularTools/iron_grip_long.rsi/equipped-NECK.png create mode 100644 Resources/Textures/_CP14/Objects/ModularTools/iron_grip_long.rsi/icon.png create mode 100644 Resources/Textures/_CP14/Objects/ModularTools/iron_grip_long.rsi/inhand-left.png create mode 100644 Resources/Textures/_CP14/Objects/ModularTools/iron_grip_long.rsi/inhand-right.png rename Resources/Textures/_CP14/Objects/{Weapons/Melee/Pickaxe/pickaxe.rsi => ModularTools/iron_grip_long.rsi}/meta.json (73%) create mode 100644 Resources/Textures/_CP14/Objects/ModularTools/iron_grip_long.rsi/wielded-inhand-left.png create mode 100644 Resources/Textures/_CP14/Objects/ModularTools/iron_grip_long.rsi/wielded-inhand-right.png create mode 100644 Resources/Textures/_CP14/Objects/ModularTools/iron_mace.rsi/equipped-BELT1.png create mode 100644 Resources/Textures/_CP14/Objects/ModularTools/iron_mace.rsi/equipped-BELT2.png create mode 100644 Resources/Textures/_CP14/Objects/ModularTools/iron_mace.rsi/equipped-NECK.png create mode 100644 Resources/Textures/_CP14/Objects/ModularTools/iron_mace.rsi/icon.png create mode 100644 Resources/Textures/_CP14/Objects/ModularTools/iron_mace.rsi/inhand-left.png create mode 100644 Resources/Textures/_CP14/Objects/ModularTools/iron_mace.rsi/inhand-right.png create mode 100644 Resources/Textures/_CP14/Objects/ModularTools/iron_mace.rsi/meta.json create mode 100644 Resources/Textures/_CP14/Objects/ModularTools/iron_mace.rsi/wielded-inhand-left.png create mode 100644 Resources/Textures/_CP14/Objects/ModularTools/iron_mace.rsi/wielded-inhand-right.png create mode 100644 Resources/Textures/_CP14/Objects/ModularTools/iron_pickaxe.rsi/equipped-BELT1.png create mode 100644 Resources/Textures/_CP14/Objects/ModularTools/iron_pickaxe.rsi/equipped-BELT2.png create mode 100644 Resources/Textures/_CP14/Objects/ModularTools/iron_pickaxe.rsi/equipped-NECK.png create mode 100644 Resources/Textures/_CP14/Objects/ModularTools/iron_pickaxe.rsi/icon.png create mode 100644 Resources/Textures/_CP14/Objects/ModularTools/iron_pickaxe.rsi/inhand-left.png create mode 100644 Resources/Textures/_CP14/Objects/ModularTools/iron_pickaxe.rsi/inhand-right.png create mode 100644 Resources/Textures/_CP14/Objects/ModularTools/iron_pickaxe.rsi/meta.json create mode 100644 Resources/Textures/_CP14/Objects/ModularTools/iron_pickaxe.rsi/wielded-inhand-left.png create mode 100644 Resources/Textures/_CP14/Objects/ModularTools/iron_pickaxe.rsi/wielded-inhand-right.png create mode 100644 Resources/Textures/_CP14/Objects/ModularTools/iron_shovel.rsi/equipped-BELT1.png create mode 100644 Resources/Textures/_CP14/Objects/ModularTools/iron_shovel.rsi/equipped-BELT2.png create mode 100644 Resources/Textures/_CP14/Objects/ModularTools/iron_shovel.rsi/equipped-NECK.png create mode 100644 Resources/Textures/_CP14/Objects/ModularTools/iron_shovel.rsi/icon.png create mode 100644 Resources/Textures/_CP14/Objects/ModularTools/iron_shovel.rsi/inhand-left.png create mode 100644 Resources/Textures/_CP14/Objects/ModularTools/iron_shovel.rsi/inhand-right.png create mode 100644 Resources/Textures/_CP14/Objects/ModularTools/iron_shovel.rsi/meta.json create mode 100644 Resources/Textures/_CP14/Objects/ModularTools/iron_shovel.rsi/wielded-inhand-left.png create mode 100644 Resources/Textures/_CP14/Objects/ModularTools/iron_shovel.rsi/wielded-inhand-right.png create mode 100644 Resources/Textures/_CP14/Objects/ModularTools/iron_sickle.rsi/equipped-BELT1.png create mode 100644 Resources/Textures/_CP14/Objects/ModularTools/iron_sickle.rsi/equipped-BELT2.png create mode 100644 Resources/Textures/_CP14/Objects/ModularTools/iron_sickle.rsi/equipped-NECK.png create mode 100644 Resources/Textures/_CP14/Objects/ModularTools/iron_sickle.rsi/icon.png create mode 100644 Resources/Textures/_CP14/Objects/ModularTools/iron_sickle.rsi/inhand-left.png create mode 100644 Resources/Textures/_CP14/Objects/ModularTools/iron_sickle.rsi/inhand-right.png create mode 100644 Resources/Textures/_CP14/Objects/ModularTools/iron_sickle.rsi/meta.json create mode 100644 Resources/Textures/_CP14/Objects/ModularTools/iron_sickle.rsi/wielded-inhand-left.png create mode 100644 Resources/Textures/_CP14/Objects/ModularTools/iron_sickle.rsi/wielded-inhand-right.png create mode 100644 Resources/Textures/_CP14/Objects/ModularTools/iron_spear.rsi/equipped-BELT1.png create mode 100644 Resources/Textures/_CP14/Objects/ModularTools/iron_spear.rsi/equipped-BELT2.png create mode 100644 Resources/Textures/_CP14/Objects/ModularTools/iron_spear.rsi/equipped-NECK.png create mode 100644 Resources/Textures/_CP14/Objects/ModularTools/iron_spear.rsi/icon.png create mode 100644 Resources/Textures/_CP14/Objects/ModularTools/iron_spear.rsi/inhand-left.png create mode 100644 Resources/Textures/_CP14/Objects/ModularTools/iron_spear.rsi/inhand-right.png create mode 100644 Resources/Textures/_CP14/Objects/ModularTools/iron_spear.rsi/meta.json create mode 100644 Resources/Textures/_CP14/Objects/ModularTools/iron_spear.rsi/wielded-inhand-left.png create mode 100644 Resources/Textures/_CP14/Objects/ModularTools/iron_spear.rsi/wielded-inhand-right.png create mode 100644 Resources/Textures/_CP14/Objects/ModularTools/iron_sword.rsi/equipped-BELT1.png create mode 100644 Resources/Textures/_CP14/Objects/ModularTools/iron_sword.rsi/equipped-BELT2.png create mode 100644 Resources/Textures/_CP14/Objects/ModularTools/iron_sword.rsi/equipped-NECK.png create mode 100644 Resources/Textures/_CP14/Objects/ModularTools/iron_sword.rsi/icon.png create mode 100644 Resources/Textures/_CP14/Objects/ModularTools/iron_sword.rsi/inhand-left.png create mode 100644 Resources/Textures/_CP14/Objects/ModularTools/iron_sword.rsi/inhand-right.png create mode 100644 Resources/Textures/_CP14/Objects/ModularTools/iron_sword.rsi/meta.json create mode 100644 Resources/Textures/_CP14/Objects/ModularTools/iron_sword.rsi/wielded-inhand-left.png create mode 100644 Resources/Textures/_CP14/Objects/ModularTools/iron_sword.rsi/wielded-inhand-right.png create mode 100644 Resources/Textures/_CP14/Objects/ModularTools/wooden_grip.rsi/equipped-BELT1.png create mode 100644 Resources/Textures/_CP14/Objects/ModularTools/wooden_grip.rsi/equipped-BELT2.png create mode 100644 Resources/Textures/_CP14/Objects/ModularTools/wooden_grip.rsi/icon.png create mode 100644 Resources/Textures/_CP14/Objects/ModularTools/wooden_grip.rsi/inhand-left.png create mode 100644 Resources/Textures/_CP14/Objects/ModularTools/wooden_grip.rsi/inhand-right.png rename Resources/Textures/_CP14/Objects/{Weapons/Melee/Mace/mace.rsi => ModularTools/wooden_grip.rsi}/meta.json (89%) create mode 100644 Resources/Textures/_CP14/Objects/ModularTools/wooden_grip_long.rsi/equipped-NECK.png create mode 100644 Resources/Textures/_CP14/Objects/ModularTools/wooden_grip_long.rsi/helper32.png create mode 100644 Resources/Textures/_CP14/Objects/ModularTools/wooden_grip_long.rsi/icon.png create mode 100644 Resources/Textures/_CP14/Objects/ModularTools/wooden_grip_long.rsi/inhand-left.png create mode 100644 Resources/Textures/_CP14/Objects/ModularTools/wooden_grip_long.rsi/inhand-right.png rename Resources/Textures/_CP14/Objects/{Weapons/Melee/Sword/sword.rsi => ModularTools/wooden_grip_long.rsi}/meta.json (62%) create mode 100644 Resources/Textures/_CP14/Objects/ModularTools/wooden_grip_long.rsi/wielded-helper32.png create mode 100644 Resources/Textures/_CP14/Objects/ModularTools/wooden_grip_long.rsi/wielded-inhand-left.png create mode 100644 Resources/Textures/_CP14/Objects/ModularTools/wooden_grip_long.rsi/wielded-inhand-right.png delete mode 100644 Resources/Textures/_CP14/Objects/Weapons/Melee/Mace/mace.rsi/equipped-BELT1.png delete mode 100644 Resources/Textures/_CP14/Objects/Weapons/Melee/Mace/mace.rsi/equipped-BELT2.png delete mode 100644 Resources/Textures/_CP14/Objects/Weapons/Melee/Mace/mace.rsi/icon.png delete mode 100644 Resources/Textures/_CP14/Objects/Weapons/Melee/Mace/mace.rsi/inhand-left.png delete mode 100644 Resources/Textures/_CP14/Objects/Weapons/Melee/Mace/mace.rsi/inhand-right.png delete mode 100644 Resources/Textures/_CP14/Objects/Weapons/Melee/Pickaxe/pickaxe.rsi/icon.png delete mode 100644 Resources/Textures/_CP14/Objects/Weapons/Melee/Pickaxe/pickaxe.rsi/inhand-left.png delete mode 100644 Resources/Textures/_CP14/Objects/Weapons/Melee/Pickaxe/pickaxe.rsi/inhand-right.png delete mode 100644 Resources/Textures/_CP14/Objects/Weapons/Melee/Pickaxe/pickaxe.rsi/wielded-inhand-left.png delete mode 100644 Resources/Textures/_CP14/Objects/Weapons/Melee/Pickaxe/pickaxe.rsi/wielded-inhand-right.png delete mode 100644 Resources/Textures/_CP14/Objects/Weapons/Melee/Shovel/shovel.rsi/icon.png delete mode 100644 Resources/Textures/_CP14/Objects/Weapons/Melee/Shovel/shovel.rsi/inhand-left.png delete mode 100644 Resources/Textures/_CP14/Objects/Weapons/Melee/Shovel/shovel.rsi/inhand-right.png delete mode 100644 Resources/Textures/_CP14/Objects/Weapons/Melee/Shovel/shovel.rsi/meta.json delete mode 100644 Resources/Textures/_CP14/Objects/Weapons/Melee/Sickle/sickle.rsi/equipped-BELT1.png delete mode 100644 Resources/Textures/_CP14/Objects/Weapons/Melee/Sickle/sickle.rsi/equipped-BELT2.png delete mode 100644 Resources/Textures/_CP14/Objects/Weapons/Melee/Sickle/sickle.rsi/icon.png delete mode 100644 Resources/Textures/_CP14/Objects/Weapons/Melee/Sickle/sickle.rsi/inhand-left.png delete mode 100644 Resources/Textures/_CP14/Objects/Weapons/Melee/Sickle/sickle.rsi/inhand-right.png delete mode 100644 Resources/Textures/_CP14/Objects/Weapons/Melee/Sword/sword.rsi/equipped-NECK.png delete mode 100644 Resources/Textures/_CP14/Objects/Weapons/Melee/Sword/sword.rsi/icon.png delete mode 100644 Resources/Textures/_CP14/Objects/Weapons/Melee/Sword/sword.rsi/inhand-left.png delete mode 100644 Resources/Textures/_CP14/Objects/Weapons/Melee/Sword/sword.rsi/inhand-right.png delete mode 100644 Resources/Textures/_CP14/Objects/Weapons/Melee/ThrowableSpear/throwableSpear.rsi/icon.png delete mode 100644 Resources/Textures/_CP14/Objects/Weapons/Melee/ThrowableSpear/throwableSpear.rsi/inhand-left.png delete mode 100644 Resources/Textures/_CP14/Objects/Weapons/Melee/ThrowableSpear/throwableSpear.rsi/inhand-right.png delete mode 100644 Resources/Textures/_CP14/Objects/Weapons/Melee/ThrowableSpear/throwableSpear.rsi/meta.json diff --git a/Content.Client/Clothing/ClientClothingSystem.cs b/Content.Client/Clothing/ClientClothingSystem.cs index 5b04be4713..1cfe5f4b4f 100644 --- a/Content.Client/Clothing/ClientClothingSystem.cs +++ b/Content.Client/Clothing/ClientClothingSystem.cs @@ -30,7 +30,7 @@ public sealed class ClientClothingSystem : ClothingSystem /// For some context, im currently refactoring inventory. Part of that is slots not being indexed by a massive enum anymore, but by strings. /// Problem here: Every rsi-state is using the old enum-names in their state. I already used the new inventoryslots ALOT. tldr: its this or another week of renaming files. /// - private static readonly Dictionary TemporarySlotMap = new() + public static readonly Dictionary TemporarySlotMap = new() //CP14 Public { {"head", "HELMET"}, {"eyes", "EYES"}, diff --git a/Content.Client/UserInterface/Systems/Storage/Controls/ItemGridPiece.cs b/Content.Client/UserInterface/Systems/Storage/Controls/ItemGridPiece.cs index dd9986e4c6..45c7522fb7 100644 --- a/Content.Client/UserInterface/Systems/Storage/Controls/ItemGridPiece.cs +++ b/Content.Client/UserInterface/Systems/Storage/Controls/ItemGridPiece.cs @@ -160,8 +160,9 @@ public sealed class ItemGridPiece : Control, IEntityControl } // typically you'd divide by two, but since the textures are half a tile, this is done implicitly - var iconPosition = new Vector2((boundingGrid.Width + 1) * size.X + itemComponent.StoredOffset.X * 2, - (boundingGrid.Height + 1) * size.Y + itemComponent.StoredOffset.Y * 2); + var iconPosition = new Vector2( + (boundingGrid.Width + 1) * size.X + Location.Rotation.RotateVec(itemComponent.StoredOffset).X * 2, + (boundingGrid.Height + 1) * size.Y + Location.Rotation.RotateVec(itemComponent.StoredOffset).Y * 2); var iconRotation = Location.Rotation + Angle.FromDegrees(itemComponent.StoredRotation); if (itemComponent.StoredSprite is { } storageSprite) diff --git a/Content.Client/_CP14/ModularCraft/CP14ClientModularCraftSystem.cs b/Content.Client/_CP14/ModularCraft/CP14ClientModularCraftSystem.cs new file mode 100644 index 0000000000..e99aae7d99 --- /dev/null +++ b/Content.Client/_CP14/ModularCraft/CP14ClientModularCraftSystem.cs @@ -0,0 +1,213 @@ +using Content.Client.Clothing; +using Content.Shared._CP14.ModularCraft; +using Content.Shared._CP14.ModularCraft.Components; +using Content.Shared.Clothing; +using Content.Shared.Hands; +using Content.Shared.Inventory; +using Content.Shared.Item; +using Content.Shared.Wieldable.Components; +using Robust.Client.GameObjects; +using Robust.Client.ResourceManagement; +using Robust.Shared.Prototypes; +using Robust.Shared.Serialization.TypeSerializers.Implementations; + +namespace Content.Client._CP14.ModularCraft; + +public sealed class CP14ClientModularCraftSystem : CP14SharedModularCraftSystem +{ + [Dependency] private readonly IPrototypeManager _proto = default!; + [Dependency] private readonly IResourceCache _resCache = default!; + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnAfterHandleState); + SubscribeLocalEvent(OnGetInhandVisuals); + SubscribeLocalEvent(OnGetEquipmentVisuals); + } + + private void OnAfterHandleState(Entity start, + ref AfterAutoHandleStateEvent args) + { + if (!TryComp(start, out var sprite)) + return; + + UpdateIcon(start, sprite); + } + + private void UpdateIcon(Entity start, SpriteComponent? sprite = null) + { + if (!Resolve(start, ref sprite, false)) + return; + + //Remove old layers + foreach (var key in start.Comp.RevealedLayers) + { + sprite.RemoveLayer(key); + } + + start.Comp.RevealedLayers.Clear(); + + //Add new layers + var counterPart = 0; + foreach (var part in start.Comp.InstalledParts) + { + var indexedPart = _proto.Index(part); + + if (indexedPart.IconSprite is null) + { + //Try get default sprite + if (indexedPart.RsiPath is null) + continue; + + var state = $"icon"; + + var rsi = _resCache + .GetResource(SpriteSpecifierSerializer.TextureRoot / indexedPart.RsiPath) + .RSI; + + if (!rsi.TryGetState(state, out _)) + continue; + + var defaultLayer = new PrototypeLayerData + { + RsiPath = indexedPart.RsiPath, + State = state, + }; + + var keyCode = $"cp14-modular-icon-layer-{counterPart}-default"; + start.Comp.RevealedLayers.Add(keyCode); + var index = sprite.AddLayer(defaultLayer); + sprite.LayerMapSet(keyCode, index); + } + else + { + var counter = 0; + foreach (var layer in indexedPart.IconSprite) + { + var keyCode = $"cp14-modular-icon-layer-{counterPart}-{counter}"; + start.Comp.RevealedLayers.Add(keyCode); + var index = sprite.AddLayer(layer); + sprite.LayerMapSet(keyCode, index); + + counter++; + } + } + + counterPart++; + } + } + + private void OnGetInhandVisuals(Entity start, ref GetInhandVisualsEvent args) + { + var defaultKey = $"cp14-modular-inhand-layer-{args.Location.ToString().ToLowerInvariant()}"; + + if (!TryComp(start, out var item)) + return; + + var wielded = item.HeldPrefix == "wielded"; //SHITCOOOOOOODE + + var counterPart = 0; + foreach (var part in start.Comp.InstalledParts) + { + var indexedPart = _proto.Index(part); + + var targetLayers = + wielded ? indexedPart.WieldedInhandVisuals : indexedPart.InhandVisuals; + + if (targetLayers is not null && targetLayers.TryGetValue(args.Location, out var layers)) + { + var i = 0; + foreach (var layer in layers) + { + var key = $"{defaultKey}-{counterPart}-{i}"; + args.Layers.Add((key, layer)); + i++; + } + } + else + { + //Try get default visuals + if (indexedPart.RsiPath is null) + continue; + + var rsi = _resCache + .GetResource(SpriteSpecifierSerializer.TextureRoot / indexedPart.RsiPath) + .RSI; + + var state = $"inhand-{args.Location.ToString().ToLowerInvariant()}"; + + if (wielded) + state = $"wielded-{state}"; + + if (!rsi.TryGetState(state, out _)) + continue; + + var defaultLayer = new PrototypeLayerData + { + RsiPath = indexedPart.RsiPath, + State = state, + }; + + var key = $"{defaultKey}-{counterPart}-default"; + args.Layers.Add((key, defaultLayer)); + } + + counterPart++; + } + } + + private void OnGetEquipmentVisuals(Entity start, + ref GetEquipmentVisualsEvent args) + { + if (!TryComp(args.Equipee, out InventoryComponent? inventory)) + return; + + var defaultKey = $"cp14-modular-clothing-layer-{args.Slot}"; + + var counterPart = 0; + foreach (var part in start.Comp.InstalledParts) + { + var indexedPart = _proto.Index(part); + + if (indexedPart.ClothingVisuals is not null && indexedPart.ClothingVisuals.TryGetValue(args.Slot, out var layers)) + { + var i = 0; + foreach (var layer in layers) + { + var key = $"{defaultKey}-{counterPart}-{i}"; + args.Layers.Add((key, layer)); + i++; + } + } + else + { + //Try get default sprites + if (indexedPart.RsiPath is null) + continue; + + var rsi = _resCache + .GetResource(SpriteSpecifierSerializer.TextureRoot / indexedPart.RsiPath) + .RSI; + + if (!ClientClothingSystem.TemporarySlotMap.TryGetValue(args.Slot, out var correctedSlot)) + continue; + + var state = $"equipped-{correctedSlot}"; + + if (!rsi.TryGetState(state, out _)) + continue; + + var defaultLayer = new PrototypeLayerData + { + RsiPath = indexedPart.RsiPath, + State = state, + }; + + var key = $"{defaultKey}-{counterPart}-default"; + args.Layers.Add((key, defaultLayer)); + } + } + } +} diff --git a/Content.Server/_CP14/DPSMeter/CP14DPSMeterComponent.cs b/Content.Server/_CP14/DPSMeter/CP14DPSMeterComponent.cs new file mode 100644 index 0000000000..6c695f235a --- /dev/null +++ b/Content.Server/_CP14/DPSMeter/CP14DPSMeterComponent.cs @@ -0,0 +1,22 @@ +using Content.Shared.Damage; + +namespace Content.Server._CP14.DPSMeter; + +[RegisterComponent] +public sealed partial class CP14DPSMeterComponent : Component +{ + [DataField] + public DamageSpecifier TotalDamage = new DamageSpecifier(); + + [DataField] + public TimeSpan LastHitTime = TimeSpan.Zero; + + [DataField] + public TimeSpan StartTrackTime = TimeSpan.Zero; + + [DataField] + public TimeSpan EndTrackTime = TimeSpan.Zero; + + [DataField] + public TimeSpan TrackTimeAfterHit = TimeSpan.FromSeconds(5f); +} diff --git a/Content.Server/_CP14/DPSMeter/CP14DPSMeterSystem.cs b/Content.Server/_CP14/DPSMeter/CP14DPSMeterSystem.cs new file mode 100644 index 0000000000..49b26001f7 --- /dev/null +++ b/Content.Server/_CP14/DPSMeter/CP14DPSMeterSystem.cs @@ -0,0 +1,62 @@ +using Content.Shared.Damage; +using Content.Shared.FixedPoint; +using Content.Shared.Popups; +using Robust.Shared.Timing; + +namespace Content.Server._CP14.DPSMeter; + +public sealed class CP14DPSMeterSystem : EntitySystem +{ + [Dependency] private readonly IGameTiming _timing = default!; + [Dependency] private readonly SharedPopupSystem _popup = default!; + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnDamageChanged); + } + + public override void Update(float frameTime) + { + base.Update(frameTime); + + var query = EntityQueryEnumerator(); + while (query.MoveNext(out var uid, out var meter)) + { + if (_timing.CurTime < meter.EndTrackTime || meter.EndTrackTime == TimeSpan.Zero) + continue; + + //Clear tracking + _popup.PopupEntity($"TOTAL DPS: {GetDPS((uid, meter))}", uid, PopupType.Large); + meter.TotalDamage = new DamageSpecifier(); + meter.EndTrackTime = TimeSpan.Zero; + meter.StartTrackTime = TimeSpan.Zero; + } + } + + private void OnDamageChanged(Entity ent, ref DamageChangedEvent args) + { + if (args.DamageDelta is null) + return; + + ent.Comp.TotalDamage += args.DamageDelta; + + if (ent.Comp.StartTrackTime == TimeSpan.Zero) + ent.Comp.StartTrackTime = _timing.CurTime; + + ent.Comp.LastHitTime = _timing.CurTime; + ent.Comp.EndTrackTime = _timing.CurTime + ent.Comp.TrackTimeAfterHit; + + _popup.PopupEntity($"DPS: {GetDPS(ent)}", ent); + } + + private FixedPoint2 GetDPS(Entity ent) + { + var totalDamage = ent.Comp.TotalDamage.GetTotal(); + var totalSeconds = (ent.Comp.LastHitTime - ent.Comp.StartTrackTime).TotalSeconds; + + var DPS = totalDamage / Math.Max(totalSeconds, 1f); + + return DPS; + } +} diff --git a/Content.Server/_CP14/ModularCraft/CP14ModularCraftSystem.cs b/Content.Server/_CP14/ModularCraft/CP14ModularCraftSystem.cs new file mode 100644 index 0000000000..ebd691c30f --- /dev/null +++ b/Content.Server/_CP14/ModularCraft/CP14ModularCraftSystem.cs @@ -0,0 +1,169 @@ +using Content.Server.Item; +using Content.Shared._CP14.ModularCraft; +using Content.Shared._CP14.ModularCraft.Components; +using Content.Shared._CP14.ModularCraft.Prototypes; +using Content.Shared.Throwing; +using Robust.Server.GameObjects; +using Robust.Shared.Prototypes; +using Robust.Shared.Random; + +namespace Content.Server._CP14.ModularCraft; + +public sealed class CP14ModularCraftSystem : CP14SharedModularCraftSystem +{ + [Dependency] private readonly IPrototypeManager _proto = default!; + [Dependency] private readonly TransformSystem _transform = default!; + [Dependency] private readonly ThrowingSystem _throwing = default!; + [Dependency] private readonly IRobustRandom _random = default!; + [Dependency] private readonly ItemSystem _item = default!; + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnStartPointMapInit); + SubscribeLocalEvent(OnAddedPart); + } + + private void OnAddedPart(Entity ent, ref CP14ModularCraftAddPartDoAfter args) + { + if (args.Cancelled || args.Handled) + return; + + if (!TryComp(args.Used, out var partComp)) + return; + + if (!TryAddPartToFirstSlot(ent, (args.Used.Value, partComp))) + return; + + //TODO: Sound + + args.Handled = true; + } + + private void OnStartPointMapInit(Entity ent, ref MapInitEvent args) + { + foreach (var startSlot in ent.Comp.StartSlots) + { + ent.Comp.FreeSlots.Add(startSlot); + } + + if (TryComp(ent, out var autoAssemble)) + { + foreach (var detail in autoAssemble.Details) + { + TryAddPartToFirstSlot(ent, detail); + } + } + } + + private bool TryAddPartToFirstSlot(Entity start, + Entity part) + { + foreach (var partProto in part.Comp.PossibleParts) + { + if (!_proto.TryIndex(partProto, out var partIndexed)) + continue; + + if (partIndexed.TargetSlot is null) + continue; + + if (!start.Comp.FreeSlots.Contains(partIndexed.TargetSlot.Value)) + continue; + + if (TryAddPartToSlot(start, part, partProto, partIndexed.TargetSlot.Value)) + { + QueueDel(part); + return true; + } + } + return false; + } + private bool TryAddPartToFirstSlot(Entity start, + ProtoId partProto) + { + if (!_proto.TryIndex(partProto, out var partIndexed)) + return false; + + if (partIndexed.TargetSlot is null) + return false; + + if (!start.Comp.FreeSlots.Contains(partIndexed.TargetSlot.Value)) + return false; + + return TryAddPartToSlot(start, null, partProto, partIndexed.TargetSlot.Value); + } + + private bool TryAddPartToSlot(Entity start, + Entity? part, + ProtoId partProto, + ProtoId slot) + { + if (!start.Comp.FreeSlots.Contains(slot)) + return false; + + var xform = Transform(start); + if (xform.GridUid != xform.ParentUid) + return false; + + AddPartToSlot(start, part, partProto, slot); + return true; + } + + private void AddPartToSlot(Entity start, + Entity? part, + ProtoId partProto, + ProtoId slot) + { + start.Comp.FreeSlots.Remove(slot); + start.Comp.InstalledParts.Add(partProto); + + var indexedPart = _proto.Index(partProto); + start.Comp.FreeSlots.AddRange(indexedPart.AddSlots); + + foreach (var modifier in indexedPart.Modifiers) + { + modifier.Effect(EntityManager, start, part); + } + + _item.VisualsChanged(start); + Dirty(start); + } + + public void DisassembleModular(EntityUid target) + { + if (!TryComp(target, out var modular)) + return; + + var sourceCoord = _transform.GetMapCoordinates(target); + + //Spawn start part + if (modular.StartProtoPart is not null) + { + if (_random.Prob(0.5f)) //TODO: Dehardcode + { + var spawned = Spawn(modular.StartProtoPart, sourceCoord); + _throwing.TryThrow(spawned, _random.NextAngle().ToWorldVec(), 1f); + } + } + + //Spawn parts + foreach (var part in modular.InstalledParts) + { + if (!_proto.TryIndex(part, out var indexedPart)) + continue; + + if (_random.Prob(indexedPart.DestroyProb)) + continue; + + if (indexedPart.SourcePart is null) + continue; + + var spawned = Spawn(indexedPart.SourcePart, sourceCoord); + _throwing.TryThrow(spawned, _random.NextAngle().ToWorldVec(), 1f); + } + + //Delete + QueueDel(target); + } +} diff --git a/Content.Server/_CP14/ModularCraft/CP14ModularDisassembleBehavior.cs b/Content.Server/_CP14/ModularCraft/CP14ModularDisassembleBehavior.cs new file mode 100644 index 0000000000..88834d70c1 --- /dev/null +++ b/Content.Server/_CP14/ModularCraft/CP14ModularDisassembleBehavior.cs @@ -0,0 +1,15 @@ +using Content.Server.Destructible; +using Content.Server.Destructible.Thresholds.Behaviors; + +namespace Content.Server._CP14.ModularCraft; + +[Serializable] +[DataDefinition] +public sealed partial class CP14ModularDisassembleBehavior : IThresholdBehavior +{ + public void Execute(EntityUid owner, DestructibleSystem system, EntityUid? cause = null) + { + var modular = system.EntityManager.System(); + modular.DisassembleModular(owner); + } +} diff --git a/Content.Server/_CP14/ModularCraft/Modifiers/AddComponents.cs b/Content.Server/_CP14/ModularCraft/Modifiers/AddComponents.cs new file mode 100644 index 0000000000..1fd630c27c --- /dev/null +++ b/Content.Server/_CP14/ModularCraft/Modifiers/AddComponents.cs @@ -0,0 +1,20 @@ +using Content.Shared._CP14.ModularCraft; +using Content.Shared._CP14.ModularCraft.Components; +using Robust.Shared.Prototypes; + +namespace Content.Server._CP14.ModularCraft.Modifiers; + +public sealed partial class AddComponents : CP14ModularCraftModifier +{ + [DataField] + public ComponentRegistry? Components; + + [DataField] + public bool Override = false; + + public override void Effect(EntityManager entManager, Entity start, Entity? part) + { + if (Components is not null) + entManager.AddComponents(start, Components, Override); + } +} diff --git a/Content.Server/_CP14/ModularCraft/Modifiers/EditDamageableModifier.cs b/Content.Server/_CP14/ModularCraft/Modifiers/EditDamageableModifier.cs new file mode 100644 index 0000000000..ef9590df54 --- /dev/null +++ b/Content.Server/_CP14/ModularCraft/Modifiers/EditDamageableModifier.cs @@ -0,0 +1,20 @@ +using Content.Shared._CP14.Damageable; +using Content.Shared._CP14.ModularCraft; +using Content.Shared._CP14.ModularCraft.Components; + +namespace Content.Server._CP14.ModularCraft.Modifiers; + +public sealed partial class EditDamageableModifier : CP14ModularCraftModifier +{ + [DataField(required: true)] + public float Multiplier = 1f; + + public override void Effect(EntityManager entManager, Entity start, Entity? part) + { + if (!entManager.TryGetComponent(start, out var damageable)) + return; + + damageable.Modifier *= Multiplier; + entManager.Dirty(start); + } +} diff --git a/Content.Server/_CP14/ModularCraft/Modifiers/EditIncreaseDamageOnWield.cs b/Content.Server/_CP14/ModularCraft/Modifiers/EditIncreaseDamageOnWield.cs new file mode 100644 index 0000000000..4c9397edba --- /dev/null +++ b/Content.Server/_CP14/ModularCraft/Modifiers/EditIncreaseDamageOnWield.cs @@ -0,0 +1,28 @@ +using Content.Shared._CP14.ModularCraft; +using Content.Shared._CP14.ModularCraft.Components; +using Content.Shared.Damage; +using Content.Shared.Wieldable.Components; + +namespace Content.Server._CP14.ModularCraft.Modifiers; + +public sealed partial class EditIncreaseDamageOnWield : CP14ModularCraftModifier +{ + [DataField] + public DamageSpecifier? BonusDamage; + + [DataField] + public float? DamageMultiplier; + + public override void Effect(EntityManager entManager, Entity start, Entity? part) + { + if (!entManager.TryGetComponent(start, out var wield)) + return; + + if (BonusDamage is not null) + wield.BonusDamage += BonusDamage; + + if (DamageMultiplier is not null) + wield.BonusDamage *= DamageMultiplier.Value; + } + +} diff --git a/Content.Server/_CP14/ModularCraft/Modifiers/EditItem.cs b/Content.Server/_CP14/ModularCraft/Modifiers/EditItem.cs new file mode 100644 index 0000000000..e70f9d1a47 --- /dev/null +++ b/Content.Server/_CP14/ModularCraft/Modifiers/EditItem.cs @@ -0,0 +1,48 @@ +using System.Linq; +using Content.Shared._CP14.ModularCraft; +using Content.Shared._CP14.ModularCraft.Components; +using Content.Shared.Item; +using Robust.Shared.Prototypes; + +namespace Content.Server._CP14.ModularCraft.Modifiers; + +public sealed partial class EditItem : CP14ModularCraftModifier +{ + [DataField] + public ProtoId? NewSize; + + /// + /// Only works if the item has 1 shape. Increases or decreases it size. + /// + [DataField] + public Vector2i? AdjustShape; + + [DataField] + public Vector2i? StoredOffsetBonus; + + public override void Effect(EntityManager entManager, Entity start, Entity? part) + { + if (!entManager.TryGetComponent(start, out var itemComp) || itemComp.Shape is null) + return; + + var itemSystem = entManager.System(); + + if (NewSize is not null) + itemSystem.SetSize(start, NewSize.Value); + + var itemShape = itemSystem.GetItemShape((start, itemComp)); + if (AdjustShape is not null && itemShape.Count == 1) + { + var box = itemComp.Shape.First(); + box.Right += AdjustShape.Value.X; + box.Top += AdjustShape.Value.Y; + itemSystem.SetShape(start, new List{box}); + } + + if (StoredOffsetBonus is not null) + { + var newOffset = itemComp.StoredOffset + StoredOffsetBonus.Value; + itemSystem.SetStoredOffset(start, newOffset, itemComp); + } + } +} diff --git a/Content.Server/_CP14/ModularCraft/Modifiers/EditMeleeWeapon.cs b/Content.Server/_CP14/ModularCraft/Modifiers/EditMeleeWeapon.cs new file mode 100644 index 0000000000..fe78823b4c --- /dev/null +++ b/Content.Server/_CP14/ModularCraft/Modifiers/EditMeleeWeapon.cs @@ -0,0 +1,64 @@ +using Content.Shared._CP14.ModularCraft; +using Content.Shared._CP14.ModularCraft.Components; +using Content.Shared.Damage; +using Content.Shared.Weapons.Melee; +using Robust.Shared.Prototypes; + +namespace Content.Server._CP14.ModularCraft.Modifiers; + +public sealed partial class EditMeleeWeapon : CP14ModularCraftModifier +{ + [DataField] + public EntProtoId? NewAnimation; + + [DataField] + public EntProtoId? NewWideAnimation; + + [DataField] + public float? AngleMultiplier; + + [DataField] + public DamageSpecifier? BonusDamage; + + [DataField] + public float? DamageMultiplier; + + [DataField] + public float? AttackRateMultiplier; + + [DataField] + public float? BonusRange; + + [DataField] + public bool? ResetOnHandSelected; + + public override void Effect(EntityManager entManager, Entity start, Entity? part) + { + if (!entManager.TryGetComponent(start, out var melee)) + return; + + if (NewAnimation is not null) + melee.Animation = NewAnimation.Value; + + if (NewWideAnimation is not null) + melee.WideAnimation = NewWideAnimation.Value; + + if (AngleMultiplier is not null) + melee.Angle = Angle.FromDegrees(melee.Angle.Degrees * AngleMultiplier.Value); + + if (BonusDamage is not null) + melee.Damage += BonusDamage; + + if (DamageMultiplier is not null) + melee.Damage *= DamageMultiplier.Value; + + if (AttackRateMultiplier is not null) + melee.AttackRate *= AttackRateMultiplier.Value; + + if (BonusRange is not null) + melee.Range += BonusRange.Value; + + if (ResetOnHandSelected is not null) + melee.ResetOnHandSelected = ResetOnHandSelected.Value; + } +} diff --git a/Content.Server/_CP14/ModularCraft/Modifiers/Inherit.cs b/Content.Server/_CP14/ModularCraft/Modifiers/Inherit.cs new file mode 100644 index 0000000000..a923a70d46 --- /dev/null +++ b/Content.Server/_CP14/ModularCraft/Modifiers/Inherit.cs @@ -0,0 +1,25 @@ +using Content.Shared._CP14.ModularCraft; +using Content.Shared._CP14.ModularCraft.Components; +using Content.Shared._CP14.ModularCraft.Prototypes; +using Robust.Shared.Prototypes; + +namespace Content.Server._CP14.ModularCraft.Modifiers; + +public sealed partial class Inherit : CP14ModularCraftModifier +{ + [DataField(required: true)] + public List> CopyFrom = new(); + + public override void Effect(EntityManager entManager, Entity start, Entity? part) + { + var prototypeManager = IoCManager.Resolve(); + + foreach (var copy in CopyFrom) + { + foreach (var modifier in prototypeManager.Index(copy).Modifiers) + { + modifier.Effect(entManager, start, part); + } + } + } +} diff --git a/Content.Shared/Item/SharedItemSystem.cs b/Content.Shared/Item/SharedItemSystem.cs index a058cb8658..5c1d44f2ce 100644 --- a/Content.Shared/Item/SharedItemSystem.cs +++ b/Content.Shared/Item/SharedItemSystem.cs @@ -55,6 +55,15 @@ public abstract class SharedItemSystem : EntitySystem Dirty(uid, component); } + public void SetStoredOffset(EntityUid uid, Vector2i newOffset, ItemComponent? component = null) + { + if (!Resolve(uid, ref component, false)) + return; + + component.StoredOffset = newOffset; + Dirty(uid, component); + } + public void SetHeldPrefix(EntityUid uid, string? heldPrefix, bool force = false, ItemComponent? component = null) { if (!Resolve(uid, ref component, false)) diff --git a/Content.Shared/Verbs/VerbCategory.cs b/Content.Shared/Verbs/VerbCategory.cs index 5b0f934c6f..a513d0033b 100644 --- a/Content.Shared/Verbs/VerbCategory.cs +++ b/Content.Shared/Verbs/VerbCategory.cs @@ -76,9 +76,12 @@ namespace Content.Shared.Verbs public static readonly VerbCategory InstrumentStyle = new("verb-categories-instrument-style", null); - public static readonly VerbCategory Lockpick = + public static readonly VerbCategory CP14LockPick = new("verb-categories-lock-pick", "/Textures/Interface/VerbIcons/lock.svg.192dpi.png"); + public static readonly VerbCategory CP14ModularCraft = + new("verb-categories-modular-craft", "/Textures/Interface/AdminActions/unbolt.png"); + public static readonly VerbCategory ChannelSelect = new("verb-categories-channel-select", null); public static readonly VerbCategory SetSensor = new("verb-categories-set-sensor", null); diff --git a/Content.Shared/Weapons/Melee/MeleeWeaponComponent.cs b/Content.Shared/Weapons/Melee/MeleeWeaponComponent.cs index 5b4d01ca6e..e4c05c0eba 100644 --- a/Content.Shared/Weapons/Melee/MeleeWeaponComponent.cs +++ b/Content.Shared/Weapons/Melee/MeleeWeaponComponent.cs @@ -39,7 +39,7 @@ public sealed partial class MeleeWeaponComponent : Component /// /// Starts attack cooldown when equipped if true. /// - [ViewVariables(VVAccess.ReadWrite), DataField] + [ViewVariables(VVAccess.ReadWrite), DataField, AutoNetworkedField] //CP14 AutoNetworked public bool ResetOnHandSelected = true; /* diff --git a/Content.Shared/Wieldable/Components/IncreaseDamageOnWieldComponent.cs b/Content.Shared/Wieldable/Components/IncreaseDamageOnWieldComponent.cs index 3336923b02..5c9bda8e3c 100644 --- a/Content.Shared/Wieldable/Components/IncreaseDamageOnWieldComponent.cs +++ b/Content.Shared/Wieldable/Components/IncreaseDamageOnWieldComponent.cs @@ -2,7 +2,7 @@ using Content.Shared.Damage; namespace Content.Shared.Wieldable.Components; -[RegisterComponent, Access(typeof(WieldableSystem))] +[RegisterComponent/*, Access(typeof(WieldableSystem))*/] //CP14 Public access public sealed partial class IncreaseDamageOnWieldComponent : Component { [DataField("damage", required: true)] diff --git a/Content.Shared/_CP14/Damageable/CP14DamageableModifierComponent.cs b/Content.Shared/_CP14/Damageable/CP14DamageableModifierComponent.cs new file mode 100644 index 0000000000..138e325b30 --- /dev/null +++ b/Content.Shared/_CP14/Damageable/CP14DamageableModifierComponent.cs @@ -0,0 +1,14 @@ +using Robust.Shared.GameStates; + +namespace Content.Shared._CP14.Damageable; + +/// +/// Increases or decreases incoming damage, regardless of the damage type. +/// Unlike standard Damageable modifiers, this value can be changed during the game. +/// +[RegisterComponent, NetworkedComponent, AutoGenerateComponentState] +public sealed partial class CP14DamageableModifierComponent : Component +{ + [DataField, AutoNetworkedField] + public float Modifier = 1f; +} diff --git a/Content.Shared/_CP14/Damageable/CP14DamageableModifierSystem.cs b/Content.Shared/_CP14/Damageable/CP14DamageableModifierSystem.cs new file mode 100644 index 0000000000..f93e9ac4cd --- /dev/null +++ b/Content.Shared/_CP14/Damageable/CP14DamageableModifierSystem.cs @@ -0,0 +1,18 @@ +using Content.Shared.Damage; + +namespace Content.Shared._CP14.Damageable; + +public sealed class CP14DamageableModifierSystem : EntitySystem +{ + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnDamageModify); + } + + private void OnDamageModify(Entity ent, ref DamageModifyEvent args) + { + args.Damage *= ent.Comp.Modifier; + } +} diff --git a/Content.Shared/_CP14/Door/CP14DoorInteractionPopupComponent.cs b/Content.Shared/_CP14/Door/CP14DoorInteractionPopupComponent.cs index 60a6c7575f..3df827adb3 100644 --- a/Content.Shared/_CP14/Door/CP14DoorInteractionPopupComponent.cs +++ b/Content.Shared/_CP14/Door/CP14DoorInteractionPopupComponent.cs @@ -16,7 +16,7 @@ public sealed partial class CP14DoorInteractionPopupComponent : Component public string InteractString = "cp14-closed-door-interact-popup"; [DataField("interactSound")] - public SoundSpecifier InteractSound; + public SoundSpecifier? InteractSound; [ViewVariables(VVAccess.ReadWrite)] public TimeSpan LastInteractTime = TimeSpan.Zero; diff --git a/Content.Shared/_CP14/LockKey/SharedCP14LockKeySystem.cs b/Content.Shared/_CP14/LockKey/SharedCP14LockKeySystem.cs index 46f042a24c..89a34f7cc1 100644 --- a/Content.Shared/_CP14/LockKey/SharedCP14LockKeySystem.cs +++ b/Content.Shared/_CP14/LockKey/SharedCP14LockKeySystem.cs @@ -129,7 +129,7 @@ public sealed class SharedCP14LockKeySystem : EntitySystem }, Text = Loc.GetString("cp14-lock-verb-lock-pick-use-text") + $" {height}", Message = Loc.GetString("cp14-lock-verb-lock-pick-use-message"), - Category = VerbCategory.Lockpick, + Category = VerbCategory.CP14LockPick, Priority = height, CloseMenu = false, }; diff --git a/Content.Shared/_CP14/MeleeWeapon/Components/CP14SharpenedComponent.cs b/Content.Shared/_CP14/MeleeWeapon/Components/CP14SharpenedComponent.cs index ee7c81042a..70ef3ce9ad 100644 --- a/Content.Shared/_CP14/MeleeWeapon/Components/CP14SharpenedComponent.cs +++ b/Content.Shared/_CP14/MeleeWeapon/Components/CP14SharpenedComponent.cs @@ -1,16 +1,17 @@ using Content.Shared._CP14.MeleeWeapon.EntitySystems; +using Robust.Shared.GameStates; namespace Content.Shared._CP14.MeleeWeapon.Components; /// /// allows the object to become blunt with use /// -[RegisterComponent, Access(typeof(CP14SharpeningSystem))] +[RegisterComponent, NetworkedComponent, AutoGenerateComponentState, Access(typeof(CP14SharpeningSystem))] public sealed partial class CP14SharpenedComponent : Component { - [DataField] + [DataField, AutoNetworkedField] public float Sharpness = 1f; [DataField] - public float SharpnessDamageBy1Damage = 0.002f; //500 damage + public float SharpnessDamageBy1Damage = 0.001f; //1000 damage } diff --git a/Content.Shared/_CP14/MeleeWeapon/EntitySystems/CP14MeleeParrySystem.cs b/Content.Shared/_CP14/MeleeWeapon/EntitySystems/CP14MeleeParrySystem.cs index 684dad3452..1c10810d8e 100644 --- a/Content.Shared/_CP14/MeleeWeapon/EntitySystems/CP14MeleeParrySystem.cs +++ b/Content.Shared/_CP14/MeleeWeapon/EntitySystems/CP14MeleeParrySystem.cs @@ -2,7 +2,6 @@ using Content.Shared._CP14.MeleeWeapon.Components; using Content.Shared.Hands.EntitySystems; using Content.Shared.Popups; using Content.Shared.Throwing; -using Content.Shared.Weapons.Melee; using Content.Shared.Weapons.Melee.Events; using Robust.Shared.Audio.Systems; using Robust.Shared.Random; diff --git a/Content.Shared/_CP14/ModularCraft/CP14ModularCraftModifier.cs b/Content.Shared/_CP14/ModularCraft/CP14ModularCraftModifier.cs new file mode 100644 index 0000000000..ec22e39889 --- /dev/null +++ b/Content.Shared/_CP14/ModularCraft/CP14ModularCraftModifier.cs @@ -0,0 +1,11 @@ +using Content.Shared._CP14.ModularCraft.Components; +using JetBrains.Annotations; + +namespace Content.Shared._CP14.ModularCraft; + +[ImplicitDataDefinitionForInheritors] +[MeansImplicitUse] +public abstract partial class CP14ModularCraftModifier +{ + public abstract void Effect(EntityManager entManager, Entity start, Entity? part); +} diff --git a/Content.Shared/_CP14/ModularCraft/CP14SharedModularCraftSystem.cs b/Content.Shared/_CP14/ModularCraft/CP14SharedModularCraftSystem.cs new file mode 100644 index 0000000000..900d1f30cd --- /dev/null +++ b/Content.Shared/_CP14/ModularCraft/CP14SharedModularCraftSystem.cs @@ -0,0 +1,51 @@ +using Content.Shared._CP14.ModularCraft.Components; +using Content.Shared.DoAfter; +using Content.Shared.Interaction; +using Robust.Shared.Serialization; + +namespace Content.Shared._CP14.ModularCraft; + +public abstract class CP14SharedModularCraftSystem : EntitySystem +{ + [Dependency] private readonly SharedDoAfterSystem _doAfter = default!; + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnAfterInteractPart); + } + + private void OnAfterInteractPart(Entity start, ref AfterInteractEvent args) + { + if (args.Handled || args.Target is null) + return; + + if (!HasComp(args.Target)) + return; + + var xform = Transform(args.Target.Value); + if (xform.GridUid != xform.ParentUid) + return; + + _doAfter.TryStartDoAfter(new DoAfterArgs(EntityManager, + args.User, + start.Comp.DoAfter, + new CP14ModularCraftAddPartDoAfter(), + args.Target, + args.Target, + start) + { + BreakOnDamage = true, + BreakOnMove = true, + BreakOnDropItem = true, + }); + + args.Handled = true; + } +} + +[Serializable, NetSerializable] +public sealed partial class CP14ModularCraftAddPartDoAfter : SimpleDoAfterEvent +{ +} diff --git a/Content.Shared/_CP14/ModularCraft/Components/CP14ModularAutoAssembleComponent.cs b/Content.Shared/_CP14/ModularCraft/Components/CP14ModularAutoAssembleComponent.cs new file mode 100644 index 0000000000..fcb7ae5888 --- /dev/null +++ b/Content.Shared/_CP14/ModularCraft/Components/CP14ModularAutoAssembleComponent.cs @@ -0,0 +1,14 @@ +using Content.Shared._CP14.ModularCraft.Prototypes; +using Robust.Shared.Prototypes; + +namespace Content.Shared._CP14.ModularCraft.Components; + +/// +/// Adds all details to the item when initializing. This is useful for spawning modular items directly when mapping or as loot in demiplanes. +/// +[RegisterComponent, Access(typeof(CP14SharedModularCraftSystem))] +public sealed partial class CP14ModularCraftAutoAssembleComponent : Component +{ + [DataField] + public List> Details = new(); +} diff --git a/Content.Shared/_CP14/ModularCraft/Components/CP14ModularCraftPartComponent.cs b/Content.Shared/_CP14/ModularCraft/Components/CP14ModularCraftPartComponent.cs new file mode 100644 index 0000000000..44e8751fa9 --- /dev/null +++ b/Content.Shared/_CP14/ModularCraft/Components/CP14ModularCraftPartComponent.cs @@ -0,0 +1,16 @@ +using Content.Shared._CP14.ModularCraft.Prototypes; +using Robust.Shared.Prototypes; + +namespace Content.Shared._CP14.ModularCraft.Components; + +[RegisterComponent, Access(typeof(CP14SharedModularCraftSystem))] +public sealed partial class CP14ModularCraftPartComponent : Component +{ + [DataField(required: true)] + public HashSet> PossibleParts = new(); + + [DataField] + public float DoAfter = 1f; + + //TODO: Sound +} diff --git a/Content.Shared/_CP14/ModularCraft/Components/CP14ModularCraftStartpointComponent.cs b/Content.Shared/_CP14/ModularCraft/Components/CP14ModularCraftStartpointComponent.cs new file mode 100644 index 0000000000..296bc2babb --- /dev/null +++ b/Content.Shared/_CP14/ModularCraft/Components/CP14ModularCraftStartpointComponent.cs @@ -0,0 +1,38 @@ +using Content.Shared._CP14.ModularCraft.Prototypes; +using Robust.Shared.GameStates; +using Robust.Shared.Prototypes; + +namespace Content.Shared._CP14.ModularCraft.Components; + +[RegisterComponent, NetworkedComponent, AutoGenerateComponentState(true), Access(typeof(CP14SharedModularCraftSystem))] +public sealed partial class CP14ModularCraftStartPointComponent : Component +{ + /// + /// Starting free slots + /// + [DataField] + public List> StartSlots = new(); + + /// + /// Current free slots. May vary depending on the modules delivered + /// + [DataField] + public List> FreeSlots = new(); + + /// + /// A list of all installed parts. + /// + [DataField, AutoNetworkedField] + public List> InstalledParts = new(); + + /// + /// Spawned on disassembling + /// + [DataField] + public EntProtoId? StartProtoPart; + + /// + /// Clentside visual layers from installedParts + /// + public HashSet RevealedLayers = new(); +} diff --git a/Content.Shared/_CP14/ModularCraft/Prototypes/CP14ModularCraftPartPrototype.cs b/Content.Shared/_CP14/ModularCraft/Prototypes/CP14ModularCraftPartPrototype.cs new file mode 100644 index 0000000000..1123bdd0d3 --- /dev/null +++ b/Content.Shared/_CP14/ModularCraft/Prototypes/CP14ModularCraftPartPrototype.cs @@ -0,0 +1,45 @@ +using Content.Shared.Hands.Components; +using Robust.Shared.Prototypes; + +namespace Content.Shared._CP14.ModularCraft.Prototypes; + +[Prototype("modularPart")] +public sealed partial class CP14ModularCraftPartPrototype : IPrototype +{ + [IdDataField] + public string ID { get; private set; } = default!; + + [DataField] + public ProtoId? TargetSlot; + + /// + /// An entity that can drop out of the final modular item when destroyed. + /// By design, the original item with this prototype from which the weapon was assembled. + /// + [DataField] + public EntProtoId? SourcePart; + + [DataField] + public float DestroyProb = 0.25f; + + [DataField(serverOnly: true)] + public List Modifiers = new(); + + [DataField] + public HashSet> AddSlots = new(); + + [DataField] + public string? RsiPath; + + [DataField] + public List? IconSprite; + + [DataField] + public Dictionary>? InhandVisuals; + + [DataField] + public Dictionary>? WieldedInhandVisuals; + + [DataField] + public Dictionary>? ClothingVisuals; +} diff --git a/Content.Shared/_CP14/ModularCraft/Prototypes/CP14ModularCraftSlotPrototype.cs b/Content.Shared/_CP14/ModularCraft/Prototypes/CP14ModularCraftSlotPrototype.cs new file mode 100644 index 0000000000..5777819360 --- /dev/null +++ b/Content.Shared/_CP14/ModularCraft/Prototypes/CP14ModularCraftSlotPrototype.cs @@ -0,0 +1,13 @@ +using Robust.Shared.Prototypes; + +namespace Content.Shared._CP14.ModularCraft.Prototypes; + +[Prototype("modularSlot")] +public sealed partial class CP14ModularCraftSlotPrototype : IPrototype +{ + [IdDataField] + public string ID { get; private set; } = default!; + + [DataField(required: true)] + public LocId Name = string.Empty; +} diff --git a/Content.Shared/_CP14/Temperature/CP14SharedFireSpreadSystem.cs b/Content.Shared/_CP14/Temperature/CP14SharedFireSpreadSystem.cs index 0f4d53b030..e523205992 100644 --- a/Content.Shared/_CP14/Temperature/CP14SharedFireSpreadSystem.cs +++ b/Content.Shared/_CP14/Temperature/CP14SharedFireSpreadSystem.cs @@ -68,7 +68,7 @@ public abstract partial class CP14SharedFireSpreadSystem : EntitySystem new CP14IgnitionDoAfter(), args.Target, args.Target, - args.Used) + ent) { BreakOnDamage = true, BreakOnMove = true, diff --git a/Resources/Locale/ru-RU/_CP14/modularCraft/modularCraft.ftl b/Resources/Locale/ru-RU/_CP14/modularCraft/modularCraft.ftl new file mode 100644 index 0000000000..20795993ae --- /dev/null +++ b/Resources/Locale/ru-RU/_CP14/modularCraft/modularCraft.ftl @@ -0,0 +1,3 @@ +verb-categories-modular-craft = Ковка + +cp14-modular-craft-add-part-verb-text = Прикрепить как {$slot} \ No newline at end of file diff --git a/Resources/Locale/ru-RU/_CP14/modularCraft/slots.ftl b/Resources/Locale/ru-RU/_CP14/modularCraft/slots.ftl new file mode 100644 index 0000000000..f37ad49ba1 --- /dev/null +++ b/Resources/Locale/ru-RU/_CP14/modularCraft/slots.ftl @@ -0,0 +1,2 @@ +cp14-modular-slot-blade = лезвие +cp14-modular-slot-jewerly1 = украшение (1) \ No newline at end of file diff --git a/Resources/Prototypes/_CP14/Catalog/Fills/crates.yml b/Resources/Prototypes/_CP14/Catalog/Fills/crates.yml index b5246ac96d..91faffb3da 100644 --- a/Resources/Prototypes/_CP14/Catalog/Fills/crates.yml +++ b/Resources/Prototypes/_CP14/Catalog/Fills/crates.yml @@ -52,10 +52,10 @@ - id: CP14Torch - id: CP14Lighter - id: CP14ManaOperationGlove - - id: CP14BaseShovel + - id: CP14ModularIronShovel - id: CP14BaseMop - id: CP14BaseBroom - - id: CP14BasePickaxe + - id: CP14ModularIronPickaxe - !type:GroupSelector children: - id: CP14CrystalLampBlueEmpty diff --git a/Resources/Prototypes/_CP14/Entities/Actions/Spells/Water/T0_ice_dagger.yml b/Resources/Prototypes/_CP14/Entities/Actions/Spells/Water/T0_ice_dagger.yml deleted file mode 100644 index aca3985a12..0000000000 --- a/Resources/Prototypes/_CP14/Entities/Actions/Spells/Water/T0_ice_dagger.yml +++ /dev/null @@ -1,107 +0,0 @@ -- type: entity - id: CP14ActionSpellIceDagger - name: Ice dagger - description: Materialization of a temporary sharp ice throwing dagger - components: - - type: Sprite - sprite: _CP14/Effects/Magic/spells_icons.rsi - state: ice_dagger - - type: CP14MagicEffect - magicType: Water - manaCost: 15 - effects: - - !type:CP14SpellSpawnEntityOnTarget - spawns: - - CP14ImpactEffectIceDagger - - !type:CP14SpellSpawnInHandEntity - spawns: - - CP14DaggerIce - - type: CP14MagicEffectSomaticAspect - - type: CP14MagicEffectCastingVisual - proto: CP14RuneIceDagger - - type: InstantAction - itemIconStyle: BigAction - sound: !type:SoundPathSpecifier - path: /Audio/Magic/rumble.ogg - icon: - sprite: _CP14/Effects/Magic/spells_icons.rsi - state: ice_dagger - event: !type:CP14DelayedInstantActionEvent - cooldown: 10 - castDelay: 0.5 - breakOnMove: false - -- type: entity - id: CP14RuneIceDagger - parent: CP14BaseMagicRune - categories: [ HideSpawnMenu ] - components: - - type: PointLight - color: "#5eabeb" - - type: Sprite - layers: - - state: medium_line - color: "#5eabeb" - shader: unshaded - -- type: entity - id: CP14ImpactEffectIceDagger - parent: CP14BaseMagicImpact - categories: [ HideSpawnMenu ] - components: - - type: Sprite - layers: - - state: particles_up - color: "#5eabeb" - shader: unshaded - -- type: entity - id: CP14DaggerIce - parent: - - CP14BaseDagger - name: ice dagger - description: A piece of sharp magical ice. In a little while, the spell will wear off, and he will disappear. - components: - - type: TimedDespawn - lifetime: 60 # 1 min - - type: Clothing - sprite: _CP14/Objects/Weapons/Melee/Dagger/ice_dagger.rsi - - type: Sprite - sprite: _CP14/Objects/Weapons/Melee/Dagger/ice_dagger.rsi - - type: CP14Currency - currency: 0 - - type: MeleeWeapon - damage: - types: - Slash: 5 - Piercing: 2 - Cold: 3 - - type: DamageOtherOnHit - damage: - types: - Piercing: 5 - Cold: 5 - - type: CP14MeleeSelfDamage - damageToSelf: - types: - Blunt: 2 # 5 hits - - type: Destructible - thresholds: - - trigger: - !type:DamageTrigger - damage: 10 - behaviors: - - !type:PlaySoundBehavior - sound: - collection: GlassBreak - - !type:DoActsBehavior - acts: ["Destruction"] - -- type: entity - parent: CP14BaseSpellScrollWater - id: CP14SpellScrollIceDagger - name: ice dagger spell scroll - components: - - type: CP14SpellStorage - spells: - - CP14ActionSpellIceDagger \ No newline at end of file diff --git a/Resources/Prototypes/_CP14/Entities/Markers/Spawners/Random/Loot/spawners.yml b/Resources/Prototypes/_CP14/Entities/Markers/Spawners/Random/Loot/spawners.yml index 649e06eeac..60a9d7f206 100644 --- a/Resources/Prototypes/_CP14/Entities/Markers/Spawners/Random/Loot/spawners.yml +++ b/Resources/Prototypes/_CP14/Entities/Markers/Spawners/Random/Loot/spawners.yml @@ -35,7 +35,6 @@ - !type:GroupSelector children: - id: CP14SpellScrollIceShards - - id: CP14SpellScrollIceDagger - id: CP14SpellScrollShadowGrab - id: CP14SpellScrollSphereOfLight - id: CP14SpellScrollCureWounds diff --git a/Resources/Prototypes/_CP14/Entities/Mobs/NPC/skeleton.yml b/Resources/Prototypes/_CP14/Entities/Mobs/NPC/skeleton.yml index ad1476f868..265620aea1 100644 --- a/Resources/Prototypes/_CP14/Entities/Mobs/NPC/skeleton.yml +++ b/Resources/Prototypes/_CP14/Entities/Mobs/NPC/skeleton.yml @@ -19,7 +19,7 @@ - type: entity id: SpawnPointGhostDemiplaneSkeleton name: ghost role spawn point - suffix: rat king + suffix: skeleton categories: [ ForkFiltered ] parent: MarkerBase components: diff --git a/Resources/Prototypes/_CP14/Entities/Objects/ModularTools/blade.yml b/Resources/Prototypes/_CP14/Entities/Objects/ModularTools/blade.yml new file mode 100644 index 0000000000..29a0c05ebf --- /dev/null +++ b/Resources/Prototypes/_CP14/Entities/Objects/ModularTools/blade.yml @@ -0,0 +1,147 @@ +- type: entity + parent: BaseItem + id: CP14ModularBladeIronDagger + categories: [ ForkFiltered ] + name: iron dagger blade + description: A dagger blade without a hilt. A blacksmith can use it as a spare part to create a weapon. + components: + - type: Item + storedRotation: 45 + shape: + - 0,0,0,0 + storedOffset: 0, 5 + - type: Sprite + sprite: _CP14/Objects/ModularTools/iron_dagger.rsi + state: icon + - type: CP14ModularCraftPart + possibleParts: + - BladeIronDagger + +- type: entity + parent: BaseItem + id: CP14ModularBladeIronSpear + categories: [ ForkFiltered ] + name: iron spearhead + description: Hiltless spearhead. A blacksmith can use it as a spare part to create a weapon. + components: + - type: Item + storedRotation: 45 + shape: + - 0,0,0,0 + storedOffset: 0, 5 + - type: Sprite + sprite: _CP14/Objects/ModularTools/iron_spear.rsi + state: icon + - type: CP14ModularCraftPart + possibleParts: + - BladeIronSpear + +- type: entity + parent: BaseItem + id: CP14ModularBladeIronMace + categories: [ ForkFiltered ] + name: iron mace ball + description: A mace ball without a hilt. A blacksmith can use it as a spare part to create a weapon. + components: + - type: Item + storedRotation: 45 + shape: + - 0,0,0,0 + storedOffset: 0, 5 + - type: Sprite + sprite: _CP14/Objects/ModularTools/iron_mace.rsi + state: icon + - type: CP14ModularCraftPart + possibleParts: + - BladeIronMace + +- type: entity + parent: BaseItem + id: CP14ModularBladeIronSword + categories: [ ForkFiltered ] + name: iron sword blade + description: A sword blade without a hilt. A blacksmith can use it as a spare part to create a weapon. + components: + - type: Item + storedRotation: 45 + shape: + - 0,0,0,1 + storedOffset: 0, 10 + - type: Sprite + sprite: _CP14/Objects/ModularTools/iron_sword.rsi + state: icon + - type: CP14ModularCraftPart + possibleParts: + - BladeIronSword + +- type: entity + parent: BaseItem + id: CP14ModularBladeIronSickle + categories: [ ForkFiltered ] + name: iron sickle blade + description: A sickle blade without a hilt. A blacksmith can use it as a spare part to create a weapon. + components: + - type: Item + storedRotation: 45 + shape: + - 0,0,0,0 + storedOffset: 0, 5 + - type: Sprite + sprite: _CP14/Objects/ModularTools/iron_sickle.rsi + state: icon + - type: CP14ModularCraftPart + possibleParts: + - BladeIronSickle + +- type: entity + parent: BaseItem + id: CP14ModularBladeIronShovel + categories: [ ForkFiltered ] + name: iron shovel blade + description: A shovel blade without a hilt. A blacksmith can use it as a spare part to create a tool. + components: + - type: Item + storedRotation: 45 + shape: + - 0,0,0,0 + storedOffset: 0, 5 + - type: Sprite + sprite: _CP14/Objects/ModularTools/iron_shovel.rsi + state: icon + - type: CP14ModularCraftPart + possibleParts: + - BladeIronShovel + +- type: entity + parent: BaseItem + id: CP14ModularBladeIronPickaxe + categories: [ ForkFiltered ] + name: iron pickaxe head + description: A pickaxe head without a hilt. A blacksmith can use it as a spare part to create a tool. + components: + - type: Item + storedRotation: 45 + shape: + - 0,0,1,0 + storedOffset: 0, 5 + - type: Sprite + sprite: _CP14/Objects/ModularTools/iron_pickaxe.rsi + state: icon + - type: CP14ModularCraftPart + possibleParts: + - BladeIronPickaxe + +#- type: entity +# parent: BaseItem +# id: CP14ModularBladeIronSwordTwoHanded +# categories: [ ForkFiltered ] +# name: iron two-handed sword blade +# description: A two-handed sword blade without a hilt. A blacksmith can use it as a spare part to create a weapon. +# components: +# - type: Sprite +# sprite: _CP14/Objects/ModularTools/blade48.rsi +# layers: +# - state: iron_sword_twohanded +# - type: CP14ModularCraftPart +# possibleParts: +# - BladeIronSwordTwoHanded \ No newline at end of file diff --git a/Resources/Prototypes/_CP14/Entities/Objects/ModularTools/grips.yml b/Resources/Prototypes/_CP14/Entities/Objects/ModularTools/grips.yml new file mode 100644 index 0000000000..b8aee82926 --- /dev/null +++ b/Resources/Prototypes/_CP14/Entities/Objects/ModularTools/grips.yml @@ -0,0 +1,160 @@ +- type: entity + parent: BaseItem + id: CP14ModularGripBase + abstract: true + categories: [ ForkFiltered ] + components: + - type: Item + storedRotation: 45 + - type: ExaminableDamage + messages: CP14WeaponMessages + - type: Damageable + damageContainer: Inorganic + - type: CP14MeleeSelfDamage + damageToSelf: + types: + Blunt: 0.5 # 100 hits + - type: MeleeWeapon + angle: 45 + attackRate: 1 + wideAnimationRotation: 135 + wideAnimation: CP14WeaponArcSlash + damage: + types: + Blunt: 0 + soundHit: + collection: MetalThud + cPAnimationLength: 0.25 + - type: Clothing + equipDelay: 0.25 + unequipDelay: 0.25 + quickEquip: false + breakOnMove: false + - type: CP14MeleeParriable + +- type: entity + parent: CP14ModularGripBase + id: CP14ModularGripWooden + name: wooden grip + description: A short wooden handle for a weapon or tool. The cheapest and most unstable material. + components: + - type: Item + shape: + - 0,0,0,0 + storedOffset: 0, -5 + - type: Sprite + sprite: _CP14/Objects/ModularTools/wooden_grip.rsi + state: icon + - type: CP14ModularCraftStartPoint + startProtoPart: CP14ModularGripWooden + startSlots: + - Blade + - type: Destructible + thresholds: + - trigger: + !type:DamageTrigger + damage: 50 + behaviors: + - !type:PlaySoundBehavior + sound: + collection: MetalBreak + - !type:CP14ModularDisassembleBehavior + - !type:DoActsBehavior + acts: ["Destruction"] + - type: MeleeWeapon + resetOnHandSelected: false #Fast swap + range: 1.0 # 1.5 standart + cPAnimationOffset: -0.75 #-1 standart + attackRate: 1 # 1 standart + - type: Clothing + slots: + - belt + +- type: entity + parent: CP14ModularGripBase + id: CP14ModularGripWoodenLong + name: long wooden grip + description: long, two-handed wooden handle for heavy weapons or large tools. + components: + - type: Item + shape: + - 0,0,0,1 + storedOffset: 0, -15 + - type: Sprite + sprite: _CP14/Objects/ModularTools/wooden_grip_long.rsi + state: icon + - type: CP14ModularCraftStartPoint + startProtoPart: CP14ModularGripWoodenLong + startSlots: + - Blade + - type: Destructible + thresholds: + - trigger: + !type:DamageTrigger + damage: 50 + behaviors: + - !type:PlaySoundBehavior + sound: + collection: MetalBreak + - !type:CP14ModularDisassembleBehavior + - !type:DoActsBehavior + acts: ["Destruction"] + - type: MeleeWeapon + resetOnHandSelected: true + range: 1.5 # 1.5 standart + attackRate: 0.7 # 1 standart + cPAnimationOffset: -1 + - type: Wieldable + - type: IncreaseDamageOnWield + damage: + types: + Blunt: 0 + - type: Clothing + slots: + - neck + +- type: entity + parent: CP14ModularGripWooden + id: CP14ModularGripIron + name: iron grip + description: A short iron handle for a weapon or tool. + components: + - type: Sprite + sprite: _CP14/Objects/ModularTools/iron_grip.rsi + - type: CP14ModularCraftStartPoint + startProtoPart: CP14ModularGripIron + - type: Destructible + thresholds: + - trigger: + !type:DamageTrigger + damage: 100 #x2 durability + behaviors: + - !type:PlaySoundBehavior + sound: + collection: MetalBreak + - !type:CP14ModularDisassembleBehavior + - !type:DoActsBehavior + acts: ["Destruction"] + +- type: entity + parent: CP14ModularGripWoodenLong + id: CP14ModularGripIronLong + name: long iron grip + description: long, two-handed iron handle for heavy weapons or large tools. + components: + - type: Sprite + sprite: _CP14/Objects/ModularTools/iron_grip_long.rsi + - type: CP14ModularCraftStartPoint + startProtoPart: CP14ModularGripIronLong + - type: Destructible + thresholds: + - trigger: + !type:DamageTrigger + damage: 100 #x2 durability + behaviors: + - !type:PlaySoundBehavior + sound: + collection: MetalBreak + - !type:CP14ModularDisassembleBehavior + - !type:DoActsBehavior + acts: ["Destruction"] \ No newline at end of file diff --git a/Resources/Prototypes/_CP14/Entities/Objects/Weapons/Melee/Tools/pickaxe.yml b/Resources/Prototypes/_CP14/Entities/Objects/Weapons/Melee/Tools/pickaxe.yml deleted file mode 100644 index 4c2c09edd9..0000000000 --- a/Resources/Prototypes/_CP14/Entities/Objects/Weapons/Melee/Tools/pickaxe.yml +++ /dev/null @@ -1,44 +0,0 @@ -- type: entity - id: CP14BasePickaxe - parent: - - BaseItem - - CP14BaseWeaponDestructible - - CP14BaseWeaponSelfDamage - - CP14BaseWeaponChemical - name: pickaxe - description: Notched to perfection, for jamming it into rocks - components: - - type: Item - size: Normal - storedRotation: 45 - shape: - - 0,0,2,0 - - 1,1,1,1 - sprite: _CP14/Objects/Weapons/Melee/Pickaxe/pickaxe.rsi - - type: Sprite - sprite: _CP14/Objects/Weapons/Melee/Pickaxe/pickaxe.rsi - state: icon - - type: MeleeWeapon - wideAnimationRotation: 135 - damage: - types: - Piercing: 8 - soundHit: - collection: MetalThud - - type: IncreaseDamageOnWield - damage: - groups: - Brute: 8 - types: - Structural: 10 - - type: Wieldable - - type: ToolTileCompatible - - type: Tool - qualities: - - CP14Digging - useSound: - collection: CP14Digging - params: - variation: 0.03 - volume: 2 - - type: UseDelay \ No newline at end of file diff --git a/Resources/Prototypes/_CP14/Entities/Objects/Weapons/Melee/Tools/shovel.yml b/Resources/Prototypes/_CP14/Entities/Objects/Weapons/Melee/Tools/shovel.yml deleted file mode 100644 index b4918db069..0000000000 --- a/Resources/Prototypes/_CP14/Entities/Objects/Weapons/Melee/Tools/shovel.yml +++ /dev/null @@ -1,35 +0,0 @@ -- type: entity - id: CP14BaseShovel - parent: - - BaseItem - - CP14BaseWeaponDestructible - - CP14BaseWeaponSelfDamage - name: shovel - description: An implement for digging up earth, digging beds or graves. - components: - - type: Item - size: Normal - storedRotation: 45 - shape: - - 0,0,0,2 - sprite: _CP14/Objects/Weapons/Melee/Shovel/shovel.rsi - - type: Sprite - sprite: _CP14/Objects/Weapons/Melee/Shovel/shovel.rsi - state: icon - - type: MeleeWeapon - wideAnimationRotation: 65 - damage: - types: - Blunt: 6 - Slash: 2 - soundHit: - collection: MetalThud - - type: ToolTileCompatible - - type: Tool - qualities: - - CP14Digging - useSound: - collection: CP14Digging - params: - variation: 0.03 - volume: 2 \ No newline at end of file diff --git a/Resources/Prototypes/_CP14/Entities/Objects/Weapons/Melee/base.yml b/Resources/Prototypes/_CP14/Entities/Objects/Weapons/Melee/base.yml index 59ba993a83..85a1321ef5 100644 --- a/Resources/Prototypes/_CP14/Entities/Objects/Weapons/Melee/base.yml +++ b/Resources/Prototypes/_CP14/Entities/Objects/Weapons/Melee/base.yml @@ -1,7 +1,7 @@ - type: entity - id: CP14BaseWeaponChemical abstract: true - categories: [ ForkFiltered ] + id: CP14BaseWeaponChemical + categories: [ HideSpawnMenu, ForkFiltered ] components: - type: SolutionContainerManager solutions: @@ -20,9 +20,9 @@ maxTransferAmount: 2 - type: entity - id: CP14BaseWeaponThrowable abstract: true - categories: [ ForkFiltered ] + id: CP14BaseWeaponThrowable + categories: [ HideSpawnMenu, ForkFiltered ] components: - type: LandAtCursor - type: DamageOtherOnHit @@ -49,26 +49,26 @@ friction: 0.2 - type: entity - id: CP14BaseWeaponLight abstract: true - categories: [ ForkFiltered ] + id: CP14BaseWeaponLight + categories: [ HideSpawnMenu, ForkFiltered ] components: - type: MeleeWeapon resetOnHandSelected: false - type: entity - id: CP14BaseWeaponShort abstract: true - categories: [ ForkFiltered ] + id: CP14BaseWeaponShort + categories: [ HideSpawnMenu, ForkFiltered ] components: - type: MeleeWeapon range: 1.0 # 1.5 standart cPAnimationOffset: -0.75 - type: entity - id: CP14BaseWeaponSharp abstract: true - categories: [ ForkFiltered ] + id: CP14BaseWeaponSharp + categories: [ HideSpawnMenu, ForkFiltered ] components: - type: Sharp - type: CP14Sharpened @@ -85,9 +85,9 @@ - type: CP14WallpaperRemover - type: entity - id: CP14BaseWeaponDestructible abstract: true - categories: [ ForkFiltered ] + id: CP14BaseWeaponDestructible + categories: [ HideSpawnMenu, ForkFiltered ] components: - type: ExaminableDamage messages: CP14WeaponMessages @@ -107,9 +107,9 @@ - type: CP14MeleeParriable - type: entity - id: CP14BaseWeaponSelfDamage abstract: true - categories: [ ForkFiltered ] + id: CP14BaseWeaponSelfDamage + categories: [ HideSpawnMenu, ForkFiltered ] components: - type: CP14MeleeSelfDamage damageToSelf: diff --git a/Resources/Prototypes/_CP14/Entities/Objects/Weapons/Melee/dagger.yml b/Resources/Prototypes/_CP14/Entities/Objects/Weapons/Melee/dagger.yml deleted file mode 100644 index 6f67985a1e..0000000000 --- a/Resources/Prototypes/_CP14/Entities/Objects/Weapons/Melee/dagger.yml +++ /dev/null @@ -1,47 +0,0 @@ -- type: entity - id: CP14BaseDagger - parent: - - BaseItem - - CP14BaseWeaponDestructible - - CP14BaseWeaponSharp - - CP14BaseWeaponChemical - - CP14BaseWeaponThrowable - - CP14BaseWeaponLight - - CP14BaseWeaponShort - name: dagger - description: A small, multi-purpose, sharp blade. You can cut meat or throw it at a goblin. - components: - - type: Item - size: Normal - shape: - - 0,0,0,1 - storedRotation: 45 - - type: Clothing - equipDelay: 0.25 - unequipDelay: 0.25 - sprite: _CP14/Objects/Weapons/Melee/Dagger/dagger.rsi - quickEquip: false - breakOnMove: false - slots: - - belt - - type: Sprite - sprite: _CP14/Objects/Weapons/Melee/Dagger/dagger.rsi - layers: - - state: icon - - type: MeleeWeapon - angle: 60 - attackRate: 1.8 - wideAnimationRotation: 135 - wideAnimation: CP14WeaponArcSlash - damage: - types: - Slash: 5 - Piercing: 5 - soundHit: - collection: MetalThud - cPAnimationLength: 0.15 - - type: EmbeddableProjectile - offset: 0.15,0.15 - removalTime: 1 - - type: ThrowingAngle - angle: 135 \ No newline at end of file diff --git a/Resources/Prototypes/_CP14/Entities/Objects/Weapons/Melee/mace.yml b/Resources/Prototypes/_CP14/Entities/Objects/Weapons/Melee/mace.yml deleted file mode 100644 index f1a9833c3d..0000000000 --- a/Resources/Prototypes/_CP14/Entities/Objects/Weapons/Melee/mace.yml +++ /dev/null @@ -1,40 +0,0 @@ -- type: entity - id: CP14BaseMace - parent: - - BaseItem - - CP14BaseWeaponDestructible - - CP14BaseWeaponThrowable - - CP14BaseWeaponSelfDamage - name: mace - description: A heavy piece of metal on a long stick. What could be simpler than that? - components: - - type: Item - size: Normal - - type: Clothing - equipDelay: 0.35 - unequipDelay: 0.35 - sprite: _CP14/Objects/Weapons/Melee/Mace/mace.rsi - quickEquip: false - breakOnMove: false - slots: - - belt - - type: Sprite - sprite: _CP14/Objects/Weapons/Melee/Mace/mace.rsi - layers: - - state: icon - - type: Sharp - - type: MeleeWeapon - angle: 100 - attackRate: 0.9 - range: 1.5 - wideAnimationRotation: 135 - wideAnimation: CP14WeaponArcSlash - damage: - types: - Blunt: 15 - Piercing: 4 - soundHit: - collection: MetalThud - cPAnimationLength: 0.25 - - type: StaminaDamageOnHit - damage: 6 \ No newline at end of file diff --git a/Resources/Prototypes/_CP14/Entities/Objects/Weapons/Melee/sickle.yml b/Resources/Prototypes/_CP14/Entities/Objects/Weapons/Melee/sickle.yml deleted file mode 100644 index 22560fe611..0000000000 --- a/Resources/Prototypes/_CP14/Entities/Objects/Weapons/Melee/sickle.yml +++ /dev/null @@ -1,42 +0,0 @@ -- type: entity - id: CP14BaseSickle - parent: - - BaseItem - - CP14BaseWeaponDestructible - - CP14BaseWeaponSharp - - CP14BaseWeaponChemical - - CP14BaseWeaponLight - - CP14BaseWeaponShort - name: sickle - description: Originally developed as a weapon against grass, the sickle suddenly proved itself good at the bloodier harvest as well. - components: - - type: Item - size: Normal - - type: Clothing - equipDelay: 0.45 - unequipDelay: 0.45 - sprite: _CP14/Objects/Weapons/Melee/Sickle/sickle.rsi - quickEquip: false - breakOnMove: false - slots: - - belt - - type: Sprite - sprite: _CP14/Objects/Weapons/Melee/Sickle/sickle.rsi - layers: - - state: icon - - type: MeleeWeapon - angle: 80 - range: 1.1 - attackRate: 1.5 - wideAnimationRotation: 135 - wideAnimation: CP14WeaponArcSlash - cPAnimationLength: 0.18 - damage: - types: - Slash: 7 - Piercing: 3 - soundHit: - collection: MetalThud - - type: Tag - tags: - - CP14HerbalGathering \ No newline at end of file diff --git a/Resources/Prototypes/_CP14/Entities/Objects/Weapons/Melee/spear.yml b/Resources/Prototypes/_CP14/Entities/Objects/Weapons/Melee/spear.yml deleted file mode 100644 index 1dc0a11f4f..0000000000 --- a/Resources/Prototypes/_CP14/Entities/Objects/Weapons/Melee/spear.yml +++ /dev/null @@ -1,46 +0,0 @@ -- type: entity - id: CP14BaseThrowableSpear - parent: - - BaseItem - - CP14BaseWeaponDestructible - - CP14BaseWeaponSharp - - CP14BaseWeaponChemical - - CP14BaseWeaponThrowable - name: throwing javelin - description: A weapon that has done its duty since the age of the giants. - components: - - type: Item - size: Normal - storedRotation: 45 - shape: - - 0,0,0,3 - - type: Sprite - sprite: _CP14/Objects/Weapons/Melee/ThrowableSpear/throwableSpear.rsi - layers: - - state: icon - - type: MeleeWeapon - angle: 0 - attackRate: 1.2 - range: 1.2 - wideAnimationRotation: 135 - wideAnimation: CP14WeaponArcThrust - damage: - types: - Piercing: 15 - soundHit: - collection: MetalThud - cPAnimationLength: 0.25 - cPAnimationOffset: -1.3 - - type: EmbeddableProjectile - offset: 0.15,0.15 - removalTime: 1 - - type: ThrowingAngle - angle: 135 - - type: DamageOtherOnHit - damage: - types: - Piercing: 18 - #- type: DamageOnLand - # damage: - # types: - # Piercing: 18 diff --git a/Resources/Prototypes/_CP14/Entities/Objects/Weapons/Melee/sword.yml b/Resources/Prototypes/_CP14/Entities/Objects/Weapons/Melee/sword.yml deleted file mode 100644 index e4d43f08b6..0000000000 --- a/Resources/Prototypes/_CP14/Entities/Objects/Weapons/Melee/sword.yml +++ /dev/null @@ -1,39 +0,0 @@ -- type: entity - id: CP14BaseSword - parent: - - BaseItem - - CP14BaseWeaponDestructible - - CP14BaseWeaponSharp - - CP14BaseWeaponChemical - name: sword - description: the gold standard of edged weapons. Medium length, comfortable grip. No frills. - components: - - type: Item - size: Ginormous - - type: Clothing - equipDelay: 0.45 - unequipDelay: 0.45 - sprite: _CP14/Objects/Weapons/Melee/Sword/sword.rsi - quickEquip: false - breakOnMove: false - slots: - - neck - - type: Sprite - sprite: _CP14/Objects/Weapons/Melee/Sword/sword.rsi - layers: - - state: icon - - type: MeleeWeapon - angle: 100 - attackRate: 1.4 - wideAnimationRotation: 135 - wideAnimation: CP14WeaponArcSlash - cPAnimationLength: 0.18 - damage: - types: - Slash: 17 - soundHit: - collection: MetalThud - - type: CP14SkillRequirement - fuckupChance: 0.5 - requiredSkills: - - Warcraft \ No newline at end of file diff --git a/Resources/Prototypes/_CP14/Entities/Objects/Weapons/ModularPresets/daggers.yml b/Resources/Prototypes/_CP14/Entities/Objects/Weapons/ModularPresets/daggers.yml new file mode 100644 index 0000000000..f0fa1aee29 --- /dev/null +++ b/Resources/Prototypes/_CP14/Entities/Objects/Weapons/ModularPresets/daggers.yml @@ -0,0 +1,14 @@ +- type: entity + id: CP14ModularIronDagger + parent: CP14ModularGripWooden + name: iron dagger + description: A small, multi-purpose, sharp blade. You can cut meat or throw it at a goblin. + components: + - type: Sprite + layers: + - state: icon + - sprite: _CP14/Objects/ModularTools/iron_dagger.rsi + state: icon + - type: CP14ModularCraftAutoAssemble + details: + - BladeIronDagger \ No newline at end of file diff --git a/Resources/Prototypes/_CP14/Entities/Objects/Weapons/ModularPresets/mace.yml b/Resources/Prototypes/_CP14/Entities/Objects/Weapons/ModularPresets/mace.yml new file mode 100644 index 0000000000..fcc1285144 --- /dev/null +++ b/Resources/Prototypes/_CP14/Entities/Objects/Weapons/ModularPresets/mace.yml @@ -0,0 +1,14 @@ +- type: entity + id: CP14ModularIronMace + parent: CP14ModularGripWooden + name: iron mace + description: A heavy piece of metal on a long stick. What could be simpler than that? + components: + - type: Sprite + layers: + - state: icon + - sprite: _CP14/Objects/ModularTools/iron_mace.rsi + state: icon + - type: CP14ModularCraftAutoAssemble + details: + - BladeIronMace \ No newline at end of file diff --git a/Resources/Prototypes/_CP14/Entities/Objects/Weapons/ModularPresets/pickaxe.yml b/Resources/Prototypes/_CP14/Entities/Objects/Weapons/ModularPresets/pickaxe.yml new file mode 100644 index 0000000000..b8fbd0decc --- /dev/null +++ b/Resources/Prototypes/_CP14/Entities/Objects/Weapons/ModularPresets/pickaxe.yml @@ -0,0 +1,14 @@ +- type: entity + id: CP14ModularIronPickaxe + parent: CP14ModularGripWoodenLong + name: iron pickaxe + description: Notched to perfection, for jamming it into rocks + components: + - type: Sprite + layers: + - state: icon + - sprite: _CP14/Objects/ModularTools/iron_pickaxe.rsi + state: icon + - type: CP14ModularCraftAutoAssemble + details: + - BladeIronPickaxe \ No newline at end of file diff --git a/Resources/Prototypes/_CP14/Entities/Objects/Weapons/ModularPresets/shovel.yml b/Resources/Prototypes/_CP14/Entities/Objects/Weapons/ModularPresets/shovel.yml new file mode 100644 index 0000000000..f603db51e9 --- /dev/null +++ b/Resources/Prototypes/_CP14/Entities/Objects/Weapons/ModularPresets/shovel.yml @@ -0,0 +1,14 @@ +- type: entity + id: CP14ModularIronShovel + parent: CP14ModularGripWoodenLong + name: iron shovel + description: An implement for digging up earth, digging beds or graves. + components: + - type: Sprite + layers: + - state: icon + - sprite: _CP14/Objects/ModularTools/iron_shovel.rsi + state: icon + - type: CP14ModularCraftAutoAssemble + details: + - BladeIronShovel \ No newline at end of file diff --git a/Resources/Prototypes/_CP14/Entities/Objects/Weapons/ModularPresets/sickle.yml b/Resources/Prototypes/_CP14/Entities/Objects/Weapons/ModularPresets/sickle.yml new file mode 100644 index 0000000000..ac6421a894 --- /dev/null +++ b/Resources/Prototypes/_CP14/Entities/Objects/Weapons/ModularPresets/sickle.yml @@ -0,0 +1,14 @@ +- type: entity + id: CP14ModularIronSickle + parent: CP14ModularGripWooden + name: iron sickle + description: Originally developed as a weapon against grass, the sickle suddenly proved itself good at the bloodier harvest as well. + components: + - type: Sprite + layers: + - state: icon + - sprite: _CP14/Objects/ModularTools/iron_sickle.rsi + state: icon + - type: CP14ModularCraftAutoAssemble + details: + - BladeIronSickle \ No newline at end of file diff --git a/Resources/Prototypes/_CP14/Entities/Objects/Weapons/ModularPresets/spear.yml b/Resources/Prototypes/_CP14/Entities/Objects/Weapons/ModularPresets/spear.yml new file mode 100644 index 0000000000..e22024fbb4 --- /dev/null +++ b/Resources/Prototypes/_CP14/Entities/Objects/Weapons/ModularPresets/spear.yml @@ -0,0 +1,29 @@ +- type: entity + id: CP14ModularIronSpear + parent: CP14ModularGripWoodenLong + name: iron spear + description: A weapon that has done its duty since the age of the giants. + components: + - type: Sprite + layers: + - state: icon + - sprite: _CP14/Objects/ModularTools/iron_spear.rsi + state: icon + - type: CP14ModularCraftAutoAssemble + details: + - BladeIronSpear + +- type: entity + id: CP14ModularIronKunai + parent: CP14ModularGripWooden + name: iron kunai + description: An effective throwing weapon. Throw it at a wall, or no, better yet, at a goblin! + components: + - type: Sprite + layers: + - state: icon + - sprite: _CP14/Objects/ModularTools/iron_spear.rsi + state: icon + - type: CP14ModularCraftAutoAssemble + details: + - BladeIronSpear \ No newline at end of file diff --git a/Resources/Prototypes/_CP14/Entities/Objects/Weapons/ModularPresets/sword.yml b/Resources/Prototypes/_CP14/Entities/Objects/Weapons/ModularPresets/sword.yml new file mode 100644 index 0000000000..ceda006ad8 --- /dev/null +++ b/Resources/Prototypes/_CP14/Entities/Objects/Weapons/ModularPresets/sword.yml @@ -0,0 +1,14 @@ +- type: entity + id: CP14ModularIronSword + parent: CP14ModularGripWooden + name: iron sword + description: the gold standard of edged weapons. Medium length, comfortable grip. No frills. + components: + - type: Sprite + layers: + - state: icon + - sprite: _CP14/Objects/ModularTools/iron_sword.rsi + state: icon + - type: CP14ModularCraftAutoAssemble + details: + - BladeIronSword \ No newline at end of file diff --git a/Resources/Prototypes/_CP14/Entities/Structures/test.yml b/Resources/Prototypes/_CP14/Entities/Structures/test.yml index c9d47cb357..8ca47a6a2e 100644 --- a/Resources/Prototypes/_CP14/Entities/Structures/test.yml +++ b/Resources/Prototypes/_CP14/Entities/Structures/test.yml @@ -21,3 +21,30 @@ interfaces: enum.CP14StoreUiKey.Key: type: CP14StoreBoundUserInterface + +- type: entity + id: CP14DPSMeter + parent: BaseStructureDynamic + categories: [ ForkFiltered ] + name: DPS Meter + suffix: Debug, DO NOT MAP + components: + - type: Sprite + sprite: Objects/Specific/Security/target.rsi + state: target_stake + noRot: true + - type: Fixtures + fixtures: + fix1: + shape: + !type:PhysShapeCircle + radius: 0.35 + density: 200 + mask: + - FullTileMask + layer: + - WallLayer + - type: InteractionOutline + - type: Physics + - type: Damageable + - type: CP14DPSMeter \ No newline at end of file diff --git a/Resources/Prototypes/_CP14/Loadouts/Jobs/general.yml b/Resources/Prototypes/_CP14/Loadouts/Jobs/general.yml index 7782388bb1..cd0b2d6fad 100644 --- a/Resources/Prototypes/_CP14/Loadouts/Jobs/general.yml +++ b/Resources/Prototypes/_CP14/Loadouts/Jobs/general.yml @@ -289,9 +289,9 @@ - CP14PenFeather - CP14PaperFolderBlue - CP14SilverCoin5 - - CP14BaseDagger - - CP14BaseSickle - - CP14BasePickaxe + - CP14ModularIronDagger + - CP14ModularIronSickle + - CP14ModularIronPickaxe - CP14Lighter - CP14Torch @@ -361,22 +361,22 @@ - CP14SilverCoin5 - type: loadout - id: CP14BaseDagger + id: CP14ModularIronDagger storage: back: - - CP14BaseDagger + - CP14ModularIronDagger - type: loadout - id: CP14BaseSickle + id: CP14ModularIronSickle storage: back: - - CP14BaseSickle + - CP14ModularIronSickle - type: loadout - id: CP14BasePickaxe + id: CP14ModularIronPickaxe storage: back: - - CP14BasePickaxe + - CP14ModularIronPickaxe - type: loadout id: CP14Lighter @@ -406,7 +406,6 @@ - CP14ActionSpellManaConsume - CP14ActionSpellManaGift - CP14ActionSpellShadowGrab - - CP14ActionSpellIceDagger - CP14ActionSpellWaterCreation - CP14ActionSpellBeerCreation @@ -458,12 +457,6 @@ actions: - CP14ActionSpellShadowGrab -- type: loadout - id: CP14ActionSpellIceDagger - dummyEntity: CP14ActionSpellIceDagger - actions: - - CP14ActionSpellIceDagger - - type: loadout id: CP14ActionSpellWaterCreation dummyEntity: CP14ActionSpellWaterCreation diff --git a/Resources/Prototypes/_CP14/Loadouts/Misc/undead_startinggear.yml b/Resources/Prototypes/_CP14/Loadouts/Misc/undead_startinggear.yml index c3c306fe69..b97f202046 100644 --- a/Resources/Prototypes/_CP14/Loadouts/Misc/undead_startinggear.yml +++ b/Resources/Prototypes/_CP14/Loadouts/Misc/undead_startinggear.yml @@ -56,7 +56,7 @@ id: CP14MobSkeleton equipment: pants: CP14ClothingPantsLoincloth - neck: CP14BaseSword - belt1: CP14BaseDagger + neck: CP14ModularIronSword + belt1: CP14ModularIronDagger inhand: - CP14TorchIgnited \ No newline at end of file diff --git a/Resources/Prototypes/_CP14/ModularCraft/Blade/blade.yml b/Resources/Prototypes/_CP14/ModularCraft/Blade/blade.yml new file mode 100644 index 0000000000..0d3f0cc642 --- /dev/null +++ b/Resources/Prototypes/_CP14/ModularCraft/Blade/blade.yml @@ -0,0 +1,217 @@ +#Concept: +# + Fast attackRate +# fast swing +# - Low damage +- type: modularPart + id: BladeIronDagger + targetSlot: Blade + sourcePart: CP14ModularBladeIronDagger + rsiPath: _CP14/Objects/ModularTools/iron_dagger.rsi + modifiers: + - !type:Inherit + copyFrom: + - BaseWeaponThrowable + - BaseWeaponChemical + - BaseWeaponSharp + - !type:AddComponents + components: + - type: ThrowingAngle + angle: 135 + - type: EmbeddableProjectile + offset: -0.15,-0.15 + removalTime: 0.5 + - !type:EditMeleeWeapon + attackRateMultiplier: 1.4 + bonusDamage: + types: + Slash: 3 + Piercing: 3 + - !type:EditItem + newSize: Normal + adjustShape: 0, 1 + storedOffsetBonus: 0, 5 + +#Concept: +# Copy of dagger with lesser damage +# But can gather grass from world +- type: modularPart + id: BladeIronSickle + targetSlot: Blade + sourcePart: CP14ModularBladeIronSickle + rsiPath: _CP14/Objects/ModularTools/iron_sickle.rsi + modifiers: + - !type:Inherit + copyFrom: + - BaseWeaponChemical + - BaseWeaponSharp + #components: TODO Add gathering tag + - !type:EditMeleeWeapon + attackRateMultiplier: 1.4 + bonusDamage: + types: + Slash: 4 + Piercing: 1 + - !type:EditItem + newSize: Normal + adjustShape: 0, 1 + storedOffsetBonus: 0, 5 + +#Concept: +# + High Throwable damage +# Piercing animation +# - Low Melee Damage +- type: modularPart + id: BladeIronSpear + targetSlot: Blade + sourcePart: CP14ModularBladeIronSpear + rsiPath: _CP14/Objects/ModularTools/iron_spear.rsi + modifiers: + - !type:Inherit + copyFrom: + - BaseWeaponThrowable + - BaseWeaponChemical + - BaseWeaponSharp + - !type:AddComponents + override: true + components: + - type: DamageOtherOnHit + damage: + types: + Piercing: 15 + - type: ThrowingAngle + angle: 135 + - type: EmbeddableProjectile + offset: -0.15,-0.15 + removalTime: 1.5 + - !type:EditMeleeWeapon + newWideAnimation: CP14WeaponArcThrust + angleMultiplier: 0 + bonusDamage: + types: + Piercing: 7 + - !type:EditItem + newSize: Normal + adjustShape: 0, 1 + storedOffsetBonus: 0, 5 + +#Concept: +# + High Wielded damage +# - Low AttackRate +- type: modularPart + id: BladeIronMace + targetSlot: Blade + sourcePart: CP14ModularBladeIronMace + rsiPath: _CP14/Objects/ModularTools/iron_mace.rsi + modifiers: + - !type:Inherit + copyFrom: + - BaseWeaponChemical + - !type:EditMeleeWeapon + resetOnHandSelected: true # Disable fast swap + attackRateMultiplier: 0.85 + bonusDamage: + types: + Blunt: 4 + Piercing: 1 + - !type:EditIncreaseDamageOnWield + bonusDamage: + types: + Blunt: 8 + Piercing: 4 + - !type:EditItem + newSize: Large + adjustShape: 0, 1 + storedOffsetBonus: 0, 5 + +#Concept: +# + Additional range +# + High Damage! + Wielded buff +# - Required Warcraft skill +- type: modularPart + id: BladeIronSword + targetSlot: Blade + sourcePart: CP14ModularBladeIronSword + rsiPath: _CP14/Objects/ModularTools/iron_sword.rsi + modifiers: + - !type:Inherit + copyFrom: + - BaseWeaponChemical + - BaseWeaponSharp + - !type:AddComponents + components: + - type: CP14SkillRequirement + fuckupChance: 0.5 + requiredSkills: + - Warcraft + - !type:EditMeleeWeapon + resetOnHandSelected: true # Disable fast swap + bonusRange: 0.2 + angleMultiplier: 1.2 + bonusDamage: + types: + Slash: 8 + Piercing: 5 + - !type:EditIncreaseDamageOnWield + bonusDamage: + types: + Slash: 5 + Piercing: 2 + - !type:EditItem + newSize: Large + adjustShape: 0, 2 + storedOffsetBonus: 0, 10 + +- type: modularPart + id: BladeIronShovel + targetSlot: Blade + sourcePart: CP14ModularBladeIronShovel + rsiPath: _CP14/Objects/ModularTools/iron_shovel.rsi + modifiers: + - !type:AddComponents + components: + - type: ToolTileCompatible + - type: Tool + qualities: + - CP14Digging + useSound: + collection: CP14Digging + params: + variation: 0.03 + volume: 2 + - !type:EditMeleeWeapon + angleMultiplier: 1.2 + bonusDamage: + types: + Slash: 3 + Blunt: 3 + - !type:EditIncreaseDamageOnWield + bonusDamage: + types: + Slash: 3 + Blunt: 3 + - !type:EditItem + newSize: Normal + adjustShape: 0, 1 + storedOffsetBonus: 0, 5 + +- type: modularPart + id: BladeIronPickaxe + targetSlot: Blade + sourcePart: CP14ModularBladeIronPickaxe + rsiPath: _CP14/Objects/ModularTools/iron_pickaxe.rsi + modifiers: + - !type:EditMeleeWeapon + attackRateMultiplier: 0.75 + angleMultiplier: 1.2 + bonusDamage: + types: + Piercing: 9 + - !type:EditIncreaseDamageOnWield + bonusDamage: + types: + Piercing: 4 + Structural: 10 + - !type:EditItem + newSize: Normal + adjustShape: 1, 1 + storedOffsetBonus: 0, 5 \ No newline at end of file diff --git a/Resources/Prototypes/_CP14/ModularCraft/baseModularModifier.yml b/Resources/Prototypes/_CP14/ModularCraft/baseModularModifier.yml new file mode 100644 index 0000000000..08b08f9bc6 --- /dev/null +++ b/Resources/Prototypes/_CP14/ModularCraft/baseModularModifier.yml @@ -0,0 +1,68 @@ +- type: modularPart + id: BaseWeaponChemical + modifiers: + - !type:AddComponents + components: + - type: SolutionContainerManager + solutions: + melee: + maxVol: 4 + - type: MeleeChemicalInjector + solution: melee + - type: RefillableSolution + solution: melee + - type: InjectableSolution + solution: melee + - type: SolutionInjectOnEmbed + transferAmount: 2 + solution: melee + - type: SolutionTransfer + maxTransferAmount: 2 + +- type: modularPart + id: BaseWeaponThrowable + modifiers: + - !type:AddComponents + components: + - type: LandAtCursor + - type: DamageOtherOnHit + damage: + types: + Piercing: 10 + - type: DamageOnLand + damage: + types: + Piercing: 3 + - type: Fixtures + fixtures: + fix1: + shape: !type:PolygonShape + vertices: + - -0.40,-0.30 + - -0.30,-0.40 + - 0.40,0.30 + - 0.30,0.40 + density: 10 + mask: + - ItemMask + restitution: 0.3 + friction: 0.2 + +- type: modularPart + id: BaseWeaponSharp + modifiers: + - !type:AddComponents + components: + - type: Sharp + - type: CP14Sharpened + - type: CP14SharpeningStone + - type: UseDelay + - type: Tool + qualities: + - Slicing + useSound: + path: /Audio/Items/Culinary/chop.ogg + - type: Utensil + types: + - Knife + - type: CP14WallpaperRemover \ No newline at end of file diff --git a/Resources/Prototypes/_CP14/ModularCraft/slots.yml b/Resources/Prototypes/_CP14/ModularCraft/slots.yml new file mode 100644 index 0000000000..f432e54896 --- /dev/null +++ b/Resources/Prototypes/_CP14/ModularCraft/slots.yml @@ -0,0 +1,3 @@ +- type: modularSlot + id: Blade + name: cp14-modular-slot-blade \ No newline at end of file diff --git a/Resources/Prototypes/_CP14/Procedural/dungeon_loot.yml b/Resources/Prototypes/_CP14/Procedural/dungeon_loot.yml deleted file mode 100644 index f721fe349c..0000000000 --- a/Resources/Prototypes/_CP14/Procedural/dungeon_loot.yml +++ /dev/null @@ -1,9 +0,0 @@ -- type: salvageLoot - id: CP14DungeonLoot - loots: - - !type:RandomSpawnsLoot - entries: - - proto: CP14BaseThrowableSpear - prob: 0.5 - - proto: CP14BaseDagger - prob: 0.5 \ No newline at end of file diff --git a/Resources/Prototypes/_CP14/Recipes/Workbench/anvil.yml b/Resources/Prototypes/_CP14/Recipes/Workbench/anvil.yml index 55d6283ba1..3f56541f59 100644 --- a/Resources/Prototypes/_CP14/Recipes/Workbench/anvil.yml +++ b/Resources/Prototypes/_CP14/Recipes/Workbench/anvil.yml @@ -1,48 +1,3 @@ -- type: CP14Recipe - id: CP14BaseBattleHammer - tag: CP14RecipeAnvil - craftTime: 4 - stacks: - CP14WoodenPlanks: 1 - CP14IronBar: 3 - result: CP14BaseBattleHammer - -- type: CP14Recipe - id: CP14BaseDagger - tag: CP14RecipeAnvil - craftTime: 4 - stacks: - CP14WoodenPlanks: 1 - CP14IronBar: 1 - result: CP14BaseDagger - -- type: CP14Recipe - id: CP14BaseHandheldAxe - tag: CP14RecipeAnvil - craftTime: 4 - stacks: - CP14WoodenPlanks: 1 - CP14IronBar: 1 - result: CP14BaseHandheldAxe - -- type: CP14Recipe - id: CP14BaseLightHammer - tag: CP14RecipeAnvil - craftTime: 4 - stacks: - CP14WoodenPlanks: 1 - CP14IronBar: 1 - result: CP14BaseLightHammer - -- type: CP14Recipe - id: CP14BaseMace - tag: CP14RecipeAnvil - craftTime: 4 - stacks: - CP14WoodenPlanks: 1 - CP14IronBar: 2 - result: CP14BaseMace - - type: CP14Recipe id: CP14BaseShield tag: CP14RecipeAnvil @@ -52,33 +7,6 @@ CP14IronBar: 2 result: CP14BaseShield -- type: CP14Recipe - id: CP14BaseSickle - tag: CP14RecipeAnvil - craftTime: 4 - stacks: - CP14WoodenPlanks: 1 - CP14IronBar: 2 - result: CP14BaseSickle - -- type: CP14Recipe - id: CP14BaseThrowableSpear - tag: CP14RecipeAnvil - craftTime: 4 - stacks: - CP14WoodenPlanks: 2 - CP14IronBar: 1 - result: CP14BaseThrowableSpear - -- type: CP14Recipe - id: CP14BaseSword - tag: CP14RecipeAnvil - craftTime: 4 - stacks: - CP14WoodenPlanks: 1 - CP14IronBar: 3 - result: CP14BaseSword - - type: CP14Recipe id: CP14BaseCrowbar tag: CP14RecipeAnvil @@ -95,42 +23,6 @@ CP14IronBar: 2 result: CP14BaseWrench -- type: CP14Recipe - id: CP14BaseTwoHandedSword - tag: CP14RecipeAnvil - craftTime: 4 - stacks: - CP14WoodenPlanks: 1 - CP14IronBar: 4 - result: CP14BaseTwoHandedSword - -- type: CP14Recipe - id: CP14BaseHoe - tag: CP14RecipeAnvil - craftTime: 4 - stacks: - CP14WoodenPlanks: 1 - CP14IronBar: 2 - result: CP14BaseHoe - -- type: CP14Recipe - id: CP14BasePickaxe - tag: CP14RecipeAnvil - craftTime: 4 - stacks: - CP14WoodenPlanks: 1 - CP14IronBar: 2 - result: CP14BasePickaxe - -- type: CP14Recipe - id: CP14BaseShovel - tag: CP14RecipeAnvil - craftTime: 4 - stacks: - CP14WoodenPlanks: 1 - CP14IronBar: 2 - result: CP14BaseShovel - - type: CP14Recipe id: CP14ClothingCloakCuirass tag: CP14RecipeAnvil @@ -211,4 +103,76 @@ craftTime: 1 stacks: CP14CopperBar: 1 - result: CP14Crossbolt \ No newline at end of file + result: CP14Crossbolt + +- type: CP14Recipe + id: CP14ModularBladeIronDagger + tag: CP14RecipeAnvil + craftTime: 2 + stacks: + CP14IronBar: 1 + result: CP14ModularBladeIronDagger + +- type: CP14Recipe + id: CP14ModularBladeIronSpear + tag: CP14RecipeAnvil + craftTime: 2 + stacks: + CP14IronBar: 1 + result: CP14ModularBladeIronSpear + +- type: CP14Recipe + id: CP14ModularBladeIronMace + tag: CP14RecipeAnvil + craftTime: 2 + stacks: + CP14IronBar: 1 + result: CP14ModularBladeIronMace + +- type: CP14Recipe + id: CP14ModularBladeIronSword + tag: CP14RecipeAnvil + craftTime: 4 + stacks: + CP14IronBar: 2 + result: CP14ModularBladeIronSword + +- type: CP14Recipe + id: CP14ModularBladeIronSickle + tag: CP14RecipeAnvil + craftTime: 2 + stacks: + CP14IronBar: 1 + result: CP14ModularBladeIronSickle + +- type: CP14Recipe + id: CP14ModularBladeIronShovel + tag: CP14RecipeAnvil + craftTime: 2 + stacks: + CP14IronBar: 1 + result: CP14ModularBladeIronShovel + +- type: CP14Recipe + id: CP14ModularBladeIronPickaxe + tag: CP14RecipeAnvil + craftTime: 2 + stacks: + CP14IronBar: 1 + result: CP14ModularBladeIronPickaxe + +- type: CP14Recipe + id: CP14ModularGripIron + tag: CP14RecipeAnvil + craftTime: 2 + stacks: + CP14IronBar: 1 + result: CP14ModularGripIron + +- type: CP14Recipe + id: CP14ModularGripIronLong + tag: CP14RecipeAnvil + craftTime: 4 + stacks: + CP14IronBar: 2 + result: CP14ModularGripIronLong \ No newline at end of file diff --git a/Resources/Prototypes/_CP14/Recipes/Workbench/workbench.yml b/Resources/Prototypes/_CP14/Recipes/Workbench/workbench.yml index 0880398972..85176ed07c 100644 --- a/Resources/Prototypes/_CP14/Recipes/Workbench/workbench.yml +++ b/Resources/Prototypes/_CP14/Recipes/Workbench/workbench.yml @@ -69,3 +69,19 @@ CP14Stone: 1 CP14IronBar: 1 result: CP14Lighter + +- type: CP14Recipe + id: CP14ModularGripWooden + tag: CP14RecipeWorkbench + craftTime: 2 + stacks: + CP14WoodenPlanks: 1 + result: CP14ModularGripWooden + +- type: CP14Recipe + id: CP14ModularGripWoodenLong + tag: CP14RecipeWorkbench + craftTime: 2 + stacks: + CP14WoodenPlanks: 2 + result: CP14ModularGripWoodenLong diff --git a/Resources/Prototypes/_CP14/Roles/Jobs/Fun/misc_startinggear.yml b/Resources/Prototypes/_CP14/Roles/Jobs/Fun/misc_startinggear.yml index 38c36b53db..f764e2a201 100644 --- a/Resources/Prototypes/_CP14/Roles/Jobs/Fun/misc_startinggear.yml +++ b/Resources/Prototypes/_CP14/Roles/Jobs/Fun/misc_startinggear.yml @@ -6,5 +6,5 @@ pants: CP14ClothingPantsLoincloth shoes: CP14ClothingShoesSandals inhand: - - CP14BaseDagger - - CP14BaseDagger \ No newline at end of file + - CP14ModularIronDagger + - CP14ModularIronDagger \ No newline at end of file diff --git a/Resources/Prototypes/_CP14/tools.yml b/Resources/Prototypes/_CP14/tools.yml index 5db184019f..5a2383b198 100644 --- a/Resources/Prototypes/_CP14/tools.yml +++ b/Resources/Prototypes/_CP14/tools.yml @@ -2,8 +2,8 @@ id: CP14Digging name: cp14-tool-quality-digging-name toolName: cp14-tool-quality-digging-tool-name - spawn: CP14BaseShovel - icon: { sprite: _CP14/Objects/Weapons/Melee/Shovel/shovel.rsi, state: icon} + spawn: CP14ModularIronShovel + icon: { sprite: _CP14/Objects/ModularTools/iron_shovel.rsi, state: icon} - type: tool id: CP14Hammering diff --git a/Resources/ServerInfo/_CP14/Guidebook_EN/Demiplanes.xml b/Resources/ServerInfo/_CP14/Guidebook_EN/Demiplanes.xml index bb1bd24754..17c4757444 100644 --- a/Resources/ServerInfo/_CP14/Guidebook_EN/Demiplanes.xml +++ b/Resources/ServerInfo/_CP14/Guidebook_EN/Demiplanes.xml @@ -31,8 +31,8 @@ When you decide to leave the demiplane after finding the portal, you must touch - - + + diff --git a/Resources/ServerInfo/_CP14/Guidebook_RU/Demiplanes.xml b/Resources/ServerInfo/_CP14/Guidebook_RU/Demiplanes.xml index ae50b207a7..31b0c4959f 100644 --- a/Resources/ServerInfo/_CP14/Guidebook_RU/Demiplanes.xml +++ b/Resources/ServerInfo/_CP14/Guidebook_RU/Demiplanes.xml @@ -31,8 +31,8 @@ - - + + diff --git a/Resources/Textures/_CP14/Objects/ModularTools/iron_big_sword.rsi/icon.png b/Resources/Textures/_CP14/Objects/ModularTools/iron_big_sword.rsi/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..fca2aa542f281ba5ceb63a483e12ccdd000d92fa GIT binary patch literal 518 zcmV+h0{Q)kP)Px$z)3_wRA_g?nPh?C&QpU_ok z#jyp!T}5zcskC*dh#1kSPR{2L5_L#vwM`z0G^&-bznE@5nloIyC(I9?af_BqK0p2q%)SDotXn5yOsl@ zSx&wV06aXl04SamB3n)!Uo)MtG=S^G{=ueKRx8V?NI22af$OVs3>+uSd4t`ZW6z1G zWTLBAbe&jTwE$RHT=Le!cA}#LF0K=$QW^N!V#9W#D*^B&qJGx|pjaqlCKa`6B~%ez z3jjxi+nE6B4V!GvqE@YNc$5!CL{9?15m73Yf8-#WbFvYJh+hXVow0QBG!HmVm`O#k z;ACWbYdx@F|LLHFk<#(_IJ&urT@oz}(~*5S)m< z9AGG=0p`^R5Uhy4ZT?+^Jv{6Eemp$3ycRqN`ns{9lpdRQx>LLTMm#?5jqjVc0};`4 z8|_5Xwqxz~n>TmIgSz~{NEj*YhFcH>K@bE%5ClOG1VM--pSYQ&8|1kFW&i*H07*qo IM6N<$g6@Cg6#xJL literal 0 HcmV?d00001 diff --git a/Resources/Textures/_CP14/Objects/ModularTools/iron_big_sword.rsi/meta.json b/Resources/Textures/_CP14/Objects/ModularTools/iron_big_sword.rsi/meta.json new file mode 100644 index 0000000000..493ae2dc97 --- /dev/null +++ b/Resources/Textures/_CP14/Objects/ModularTools/iron_big_sword.rsi/meta.json @@ -0,0 +1,14 @@ +{ + "version": 1, + "size": { + "x": 48, + "y": 48 + }, + "license": "CLA", + "copyright": "Created by Jaraten (Github) ", + "states": [ + { + "name": "icon" + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/_CP14/Objects/ModularTools/iron_dagger.rsi/equipped-BELT1.png b/Resources/Textures/_CP14/Objects/ModularTools/iron_dagger.rsi/equipped-BELT1.png new file mode 100644 index 0000000000000000000000000000000000000000..8b20687d50e60d2ca4eb59c33d23b183e2d2c8cc GIT binary patch literal 253 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D$|wtKobhE&XX zd&`iIF;L*x$Nu7smNwpnPkHhjR)-g|tb3p!lpY{3`>ffKz zY=0)8b|AQ*ChPt2V+mhqJKBtLCL^|4&}^O3!jqss2)sE>BlKmvv4FO#sp1Vn+Y~ literal 0 HcmV?d00001 diff --git a/Resources/Textures/_CP14/Objects/ModularTools/iron_dagger.rsi/equipped-NECK.png b/Resources/Textures/_CP14/Objects/ModularTools/iron_dagger.rsi/equipped-NECK.png new file mode 100644 index 0000000000000000000000000000000000000000..218946af4c9a3a2be5cc3bc89f0592fc4c06cc11 GIT binary patch literal 224 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D$|W_h|ehE&XX zd)1NeV1Nkg1$UjpE)pw_U1%}A;b?98zC(2bEBC~RW?cdAm7RJELZ!}Hex82kfARm{ zfzfE+BcK>tRXD3(fiOKKPOS)3FAbz%AnxNoBy<@WKF9YU@KCRlE zd!=cAJ=300U5k0=wnkl8%@*=|LEk~~qLO95gf6EFwf|igp3V$16$BP^ic74NX^v~x QHUM!wUHx3vIVCg!06q;Px#{7FPXR9J=Wlrf6JKoo{Qy~TneqJ=S7Nt(nf#9lFnuw3u}tBt*_%Wj{*!uDz- zqA1Zukwsyxyuxhdlu=_?oA*^Sym|2PznK9+5S~mbs_3=as^K*OFv}To*_X)kaY#oM zcl#}$!w<}I27sT#uliSk3!T@VUMDSaRbaQ@Vpa?-5w4GXeNPjUh!mKN13mMG*CbpY z^*EA}xSGIZ9He|d(ECdg%f+0x?%-jGn{T!4xT;=v0r35RLcWMuF$h;1hVT8@uj8&p z+i_JPUj$$}8(~#zx)xXB?k3xD6~Os?0>G-)9!ekI)D>3mYXg^dD- z4kXL4?_I&{c6(mbm;Y&1)m86bO8(#$5QKt2Nw&WeuVl_G-L_S1-Z`}mIpLE`PJd$7?3FJ7c?*g{>r0Mek0z zcklQ8vHoMeQZ#iF!{m40su&rrV0`>*X$WnB!wb&8^3hVQ2)N}7pFnyrSlgY7aQsc zI7t*d(zaRNEvs>{NTL1z{c9%WmEYgRwpX)uz<@^n1^H9)#{-V}Kep4Vnz&@<79DrB z%NzHtD9bRCU7Tt;Y01r7E+T3N@~#K0owpz`|5bk;yVO^;Ij6O6yuJ0FT|HB6-Sh61 zPuKJOaxS#3&lMF3JFs8W?W5zHeT!Bp^gNpSIx>=R*}UIMudfB4v~LO2d7m%O(9nMT z_o-8YY(ZCZ=11+=&C8b->jDEM2PTHK^TpdCOEp+B$NbJ2!O|8ss@pXPf_io3*b zYip;CEQtg^E0&y&oNY<{FoKO@9^hJO=2pL_lE=-R29w*9zOT6cW%N?$hT-D`Z~ zqE04cG*{&`SM4d9U0%cjWUdxfPCoNX_V=AtcPkkfy!7<LslZtDCFd|hrC_sU)2`rA^Q g~D)78&qol`;+0Ok3q2LJ#7 literal 0 HcmV?d00001 diff --git a/Resources/Textures/_CP14/Objects/ModularTools/iron_dagger.rsi/wielded-inhand-right.png b/Resources/Textures/_CP14/Objects/ModularTools/iron_dagger.rsi/wielded-inhand-right.png new file mode 100644 index 0000000000000000000000000000000000000000..18ac0acecf3b24c3e8791b4fa9bc6fbcdb675ba5 GIT binary patch literal 395 zcmV;60d)R}P)Px$MM*?KRCt{2+ObN*P!z`Tui!3b_6efY!L5CRmM%^T3B|=lK{Dz~h@cN372RA) z19<>lf`g*nONDN?^a*ZV-Fz71#G`nvJ$SK0TSs`11UgG(eJEw<<~M_8w**ZLB+mXhO5m zw&RJJJ-3>BlB9nBRTW7}oA6oZ_Tt}%Pc6$>qs;dA1 literal 0 HcmV?d00001 diff --git a/Resources/Textures/_CP14/Objects/ModularTools/iron_grip.rsi/equipped-BELT1.png b/Resources/Textures/_CP14/Objects/ModularTools/iron_grip.rsi/equipped-BELT1.png new file mode 100644 index 0000000000000000000000000000000000000000..e2f4cea32529e2fc94aa66029b6cf5446f0ddab5 GIT binary patch literal 182 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D$|3OrpLLn`LH zy=BPNV8FwA;ep_s7}xeHhWGVbc3E*Q^-|ntp8lg|ld2$4Ed&3l!fQoyN=y38eRU6i z-cvI*dB!rPZKeOUjvM&0x;(kV1X9Gn(BLllk9F4i!{w5CM`Kx2eu%%&QcyZB29)_< Y%=k%~{o$3emQavFPgg&ebxsLQ0NzbK0RR91 literal 0 HcmV?d00001 diff --git a/Resources/Textures/_CP14/Objects/ModularTools/iron_grip.rsi/equipped-BELT2.png b/Resources/Textures/_CP14/Objects/ModularTools/iron_grip.rsi/equipped-BELT2.png new file mode 100644 index 0000000000000000000000000000000000000000..ee22a4653f9a6c3e4d20ab49ecfb86e3d1529406 GIT binary patch literal 177 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D$|vOQfKLn`LH zy>*cDfPw&vgD2;{PrN6cxi|d3ZTK+S2g5O6hT(VAz4a{ro^BK(L{;!`JCWWlihN)nC4`p2-v1rguP%k%2+tD^rgu V`$N8xtxG}5JYD@<);T3K0RRUOKlA_q literal 0 HcmV?d00001 diff --git a/Resources/Textures/_CP14/Objects/ModularTools/iron_grip.rsi/icon.png b/Resources/Textures/_CP14/Objects/ModularTools/iron_grip.rsi/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..29564e898c4704e7a5c1a1cdcf5d3ae9fbd810c2 GIT binary patch literal 238 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%Cx&(BWL^R}D?D8sLn2z= zUN+=9ljkUwdpxeRX}Nd6I3rn8h`Tv=)y_i^u9sYml{o%~ zo)(*bo`+dLQ1GJtXT??gfx431*__XVri9w=c1hBG;2iQih~dD?iXRr|Z5pGi{amV^ zL>gubd1p5+WMRmi#mlh5!~T!2(fWinYqHL6W?Ef(;OnKN?f3nj%?>wEyR`q_-N*mV lzWDxA;A)Ymi;Mktma?5%zZuH(P66G_;OXk;vd$@?2>_BfTv-4B literal 0 HcmV?d00001 diff --git a/Resources/Textures/_CP14/Objects/ModularTools/iron_grip.rsi/inhand-left.png b/Resources/Textures/_CP14/Objects/ModularTools/iron_grip.rsi/inhand-left.png new file mode 100644 index 0000000000000000000000000000000000000000..c274271dd2dd5d66ddbc9536f794634c5096b7ad GIT binary patch literal 226 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D$|=6Jd|hE&XX zdvhc2AqO6Zi_N}%<*Ymolg~`xP2hNz#L2a5f|ZDZ8>gFg}>0%~Na zS(mx{<@D)imR#!b#|G=wyy~Iv#pDob2AKc}FtrgZc Rf4dFV<>~6@vd$@?2>=%#QNREI literal 0 HcmV?d00001 diff --git a/Resources/Textures/_CP14/Objects/ModularTools/iron_grip.rsi/inhand-right.png b/Resources/Textures/_CP14/Objects/ModularTools/iron_grip.rsi/inhand-right.png new file mode 100644 index 0000000000000000000000000000000000000000..940acdc10b290256fd9d4de91176ef85819025bf GIT binary patch literal 227 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D$|=6bp~hE&XX zduuQ6Ap;4P3;H=pH(ezf*wPZ1C7O0dG%3X{Xk$8}v2cM)M}4cud)|b(er2V7K#dF! zu9cX*|8?#|SNNyCd6qiMg}zo8bqKxsxa9Ooo7h8#nToV7zMEz7=Ju=475mF?Y!BU? zt+f17xd=!rP_yspqpw~wzdc;|W&WIV$M-1<2wq=pvBh8b`<|~X+h%Y5E6czjv4uPM WrNa8lBB%F*w0OGuxvXmR$(_wl-b)|& zzU2A;o9QoOM1UshI7eO$j=XyLQudC{m^lh(m+|iZ+;?i#yji}|Vcs50$36;dd=pu` z`g#1>m+$Pmd>p^A+_`W2B<_>{v#9W*iJ!lj19f;hUSs)kw`|tyJ+j9S7X=xF*KR*M zkLh=V@bARwwyaVGkG?*w3>AsbcinmIN<;p)!|Ni}=Py1Tv2EY&wA-sa4)A|FthbA$ zs8(}ogRu>Jnu0r*3eaH)Ag2EGqN@9prpyDPLGu<|Y2cQ1KY#r9ZLOnUO%!IZ#jL2S n@%lB{o_B}Ss*lVFT`FHVlUe+njx8{50SS7#`njxgN@xNASGbaa literal 0 HcmV?d00001 diff --git a/Resources/Textures/_CP14/Objects/ModularTools/iron_grip_long.rsi/icon.png b/Resources/Textures/_CP14/Objects/ModularTools/iron_grip_long.rsi/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..3b1d163bece1b53b87890bdd228e0789531b9063 GIT binary patch literal 354 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA1|-9oezpTC#^NA%Cx&(BWL^TT2U@syWR4HwoSOYi9u>XXM+$|K-8)$4#`|kPSmIfwfo3eq%+QZ zara~OHdTKXpn(hr)I?K5#ZyDq?>_f#7kAF;=H|mwteAedUHp}<2S53Y= zXXjW-^wf>9Lv7Db0p*m-<4Nv z*!g&|qt811ORwK84S%z6(VAD!r(fT(*V6y(KaOw*mp%4h)9!x%eyG62uk!pRUb7-LGu&b6R>;4R1w&1Uy~+T-G@yGywoQ*1_Qb literal 0 HcmV?d00001 diff --git a/Resources/Textures/_CP14/Objects/ModularTools/iron_grip_long.rsi/inhand-right.png b/Resources/Textures/_CP14/Objects/ModularTools/iron_grip_long.rsi/inhand-right.png new file mode 100644 index 0000000000000000000000000000000000000000..f8b632e7f69a404bbb604b2461ac6965a8677c5c GIT binary patch literal 420 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGojKx9jP7LeL$-D%z<2+p)Ln`LH zy;4VY0aP>Rr5_P1*&HoMja_BYxVf=cAO9 z!1HNuHtcd-W3FB9vgAqolTG`CzT2GPgt+5@R}EwEhZfGTU((qi5l>e?mvv4FO#sHX Bvflsz literal 0 HcmV?d00001 diff --git a/Resources/Textures/_CP14/Objects/Weapons/Melee/Pickaxe/pickaxe.rsi/meta.json b/Resources/Textures/_CP14/Objects/ModularTools/iron_grip_long.rsi/meta.json similarity index 73% rename from Resources/Textures/_CP14/Objects/Weapons/Melee/Pickaxe/pickaxe.rsi/meta.json rename to Resources/Textures/_CP14/Objects/ModularTools/iron_grip_long.rsi/meta.json index 1103b688d5..4b7b3f4c43 100644 --- a/Resources/Textures/_CP14/Objects/Weapons/Melee/Pickaxe/pickaxe.rsi/meta.json +++ b/Resources/Textures/_CP14/Objects/ModularTools/iron_grip_long.rsi/meta.json @@ -1,12 +1,16 @@ { "version": 1, - "license": "CLA", - "copyright": "Created by TheShuEd (Github)", "size": { - "x": 32, - "y": 32 + "x": 48, + "y": 48 }, + "license": "CLA", + "copyright": "Created by TheShuEd (Github) ", "states": [ + { + "name": "equipped-NECK", + "directions": 4 + }, { "name": "icon" }, @@ -27,4 +31,4 @@ "directions": 4 } ] -} +} \ No newline at end of file diff --git a/Resources/Textures/_CP14/Objects/ModularTools/iron_grip_long.rsi/wielded-inhand-left.png b/Resources/Textures/_CP14/Objects/ModularTools/iron_grip_long.rsi/wielded-inhand-left.png new file mode 100644 index 0000000000000000000000000000000000000000..f6182c4846332bf5cb002dd07b19b573a4793b78 GIT binary patch literal 385 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGojKx9jP7LeL$-D%ztvy{FLn`LH zy<_WlC_#eZ!Sy4;20Mi$Zrv}i&M$cPG;I(_mo-`E6Z5cm)j>C5-FWYd z&m%b&*1V7BoO_Q0XeI<~vda8@bkUki?|xr=p`)av_W0%U*Lm;rqK;dzxkfI1zP$9c zlz*}6rn`A|apmoXv-N{M&stW?m63h_*waf@4ECONTYGlw+T#~r`|Ykl-&uh+gvns@ z9pbw-d7Ygr{9m)qs)@(Tc1xa_*XsQ2s`rAMH51hy zXYSdzmuJ;S->(XJiNoC=9UWgEA5M_IA2KC$)j547B`bLsb@umW`_@~p z>$E$;eC&~N9t@(t`)LUU%7TR${m_q!Lhe7JYaUuRu3jVZScc+wlCkI%of#AGTK2CI9XP1tJ4O!^dAt7mjr?S4fE$g7}`U KelF{r5}E*LRGy~* literal 0 HcmV?d00001 diff --git a/Resources/Textures/_CP14/Objects/ModularTools/iron_mace.rsi/equipped-BELT1.png b/Resources/Textures/_CP14/Objects/ModularTools/iron_mace.rsi/equipped-BELT1.png new file mode 100644 index 0000000000000000000000000000000000000000..c4c5169aa06ea249e6a493d388b95c8ccd660866 GIT binary patch literal 403 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D%zeLYNMCoFp7pXayPnta z&WZ9f9R0;0sebKd54V6@Q2OVW8-L6SnmYM^%hjUB9J{UO(ylTx1Uyl7TkL+q;$YtX zzu(TNy2deWIG+}K;AIz=V8S=6!gUo7w4dKJJ9c!Mx)K8H>iAy}aOoGv%G=TzOSL!z z85%abr>gZj|2ET4NU~K7`kWhgV97_OA3*MIQ3diFB)pxpJ0gTECuR=PZ8TdH&(0`U)LQi=3Cg67ur)zQxz& zJ+VpkfpE-n?Y{yG_nKcl@Y9!5@p;`Op6~nuf>3aAlT7%D{qGJhx}@gRr5Z2hy)Wdt zno)h0a^IaP=T2uG)jjRD^wHxFFC<$3`p%gb!obj6w_vLM&0~ij^KRR|=~m_DEoBE5 z$S=`3eaug#5}j z+PUDS!}7aEg68hk>?z=zWD^s9JQ|ir%x?QnZI@xKvMfaZ+oxjp^!huK6CrMtG z?YUj?r*7l!=X2jb`LtvAez$A)9IQ6?y?8AA_1D!yyAODDp3$1Q&eP+G`GLaLkg1xj z%;JgL`xo4dcoktcQJ7)PGBriPh{+BvOCE9`mY#UaXVKauU<5IEy85}Sb4q9e04r_I AA^-pY literal 0 HcmV?d00001 diff --git a/Resources/Textures/_CP14/Objects/ModularTools/iron_mace.rsi/equipped-NECK.png b/Resources/Textures/_CP14/Objects/ModularTools/iron_mace.rsi/equipped-NECK.png new file mode 100644 index 0000000000000000000000000000000000000000..c3264c2b4de0e20f034b035597da873258a46505 GIT binary patch literal 387 zcmV-}0et?6P)Px$JxN4CRCt{2+ObN*P!z`TudSO~rYJ6@MH7pnlq{{YPRTRrb9BiI2!fznr|J@l zqDVU^Zc?xWe1hvBkvKIe-ayO$w`B-?_vCOgoGSqU00000U^RJuV3v8W_TNFO*6W8x zlG1c0$8mLkcU|gC8+KyZm;d5X6zcHkSe^YHot;KTlBScSP$3$&0@^m8e_ZVDbHA-q=+7`K96TvTzsFZHBbT^8=Hnv)|`99_Z=uLCJVjY96fg4DkHGIF74U zv#rj7ub1bElJTf;`%5cc0O@B4<~yOx;n&Ktzd-;10000000000fA#vI$!=q;lZE#K zJU=km;xURs`-v*HumICZQp6-ZKz{$eZVGjPB)z@AD(IfrPgJo&cZ9Mc hB;%3YGynip>Kh)lRPx$3rR#lR9J=Wl(9<0KoEw%6Q5wKZ9`Jr5^~%Tw$apD=@aNf*a(8!caH$1Z_fa1%hamQcO2{hfQ}QwNU{0&?1jTfA%q+ye$aqv zf8A6pmMe-pl!?*;6SWKsj$GMxz_@x6c|&)B?|2qDpN0zlnVwC!%x9vs^w z)lJpkeJ>!46h)o^AcW-gehE&XX zd-I?dlcNOthyB;q-k!JZg_74>F;~Un!1JY-)GxGu;C&UgK0rKPfur>h-@G-amAVqE zGZ_T6+L^S=D+>Fzw_R&*}VC59fKeYynOQ0N!Lhk)r^%#X6D2(HcU~r z=Q$El|* zfpRj(O@nL_5}0k`S8PaTP@65VWtQ>$?DOJU8K&w-+n2~l?iTKOv+6mw=)9)4vhsU> z+ckxKj*k6Ov(UxLytBHhu4RgHvigA+sus0Ei$o0WzFi@{qBN(TR|w{_%(UO@b+y%< zySJ>depqtc-lt6@A#K-ZVeehSeaH2WOV56}I7O*-^=t1nyRtj<*E;OmxA5YQ4XY{+ zY&sb*#kAxJqs|oTm-0QvpYxg3BF%(UfN{&<>FVdQ I&MBb@0G2f1*Z=?k literal 0 HcmV?d00001 diff --git a/Resources/Textures/_CP14/Objects/ModularTools/iron_mace.rsi/inhand-right.png b/Resources/Textures/_CP14/Objects/ModularTools/iron_mace.rsi/inhand-right.png new file mode 100644 index 0000000000000000000000000000000000000000..610360d1a5548d077d2df9594c040d8d38b0725f GIT binary patch literal 492 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D%zmwCE4hE&XX zdvmYfp#T}y56t}q%lY(J+QJrHoS=7LO>iYs1;;(7ct^2$j6%Y5E-qCR;E``W*1GU= zZR=|Xy~cpnY0qvw`k8Cud-`W_wPzKB5)3dg+%CKtU*E1Gb7~^Db;R0AuTu<85eyC6 zuh+e(%nVyw$;D98H{a-u%$3Vhd%hUVUT-kB=i=+Him40?5qf{F@H?do9CBLx@Zqm# zVoy(V-??wf@Fx94emzibPV~zBL*=_=MYvTt5>u6IHk?yvX-!(#lDED2WlGP@8rJPW z{AV{91MQz`FO_#FJBV%OP2rs5p;bqjZtxtG=XExI<9nnm=4sd~jd;r$d-Xs3{K}}= zd}a+p!d%DoOmh!|RJ63+ns+5%+GEzs-k9z`%xS47<%{$zJD}i2yun8+?XCLOzFUJ= zN;kYL)2ja=ve{>Qa3`; a<_$T-oGNya{}3?x7(8A5T-G@yGywoJztndC literal 0 HcmV?d00001 diff --git a/Resources/Textures/_CP14/Objects/ModularTools/iron_mace.rsi/meta.json b/Resources/Textures/_CP14/Objects/ModularTools/iron_mace.rsi/meta.json new file mode 100644 index 0000000000..3767fb75aa --- /dev/null +++ b/Resources/Textures/_CP14/Objects/ModularTools/iron_mace.rsi/meta.json @@ -0,0 +1,42 @@ +{ + "version": 1, + "size": { + "x": 32, + "y": 32 + }, + "license": "CLA", + "copyright": "Created by TheShuEd (Github) ", + "states": [ + { + "name": "equipped-BELT1", + "directions": 4 + }, + { + "name": "equipped-BELT2", + "directions": 4 + }, + { + "name": "equipped-NECK", + "directions": 4 + }, + { + "name": "icon" + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + }, + { + "name": "wielded-inhand-left", + "directions": 4 + }, + { + "name": "wielded-inhand-right", + "directions": 4 + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/_CP14/Objects/ModularTools/iron_mace.rsi/wielded-inhand-left.png b/Resources/Textures/_CP14/Objects/ModularTools/iron_mace.rsi/wielded-inhand-left.png new file mode 100644 index 0000000000000000000000000000000000000000..7e8a549f3212c27ed08697306e90f51391fee669 GIT binary patch literal 518 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D%z4|uvbhE&XX zd+WRxQ=kaj2mjpbd11j@1ec~wS~Ov|=Jlxw@xBBs!)Z=_<&pPy7YQl-_suZ~ zplHNPx$#Ysd#RCt{2+CNXiKo|z_r^U^!Q#CFGqEw>MkS@Ti6MQE994veR69b7x2PSlB z2m}M|pm8yVL~@Crpbq3J@*k5HIG*3c&|L1hdwU_h7a$@cA|fIpqOF&*Y=6~r2+O2w zn*5Q?6?^~?q6fn;@%&WPMjzf}*<8Vw*#HFjG`T8Ei=jUK9ZUp6hJ% zLdbj%j}>&fA85Cls8p&Dq6YxbJ=f6;!$cyUM7dl-yVXRe`vE(X-}vyrU<2(;J_uhf zmyn1jVHhSn*U|KpW&3h900fKRH0ny62Pw<;okl$fFA32@%Cdb;J|wFkePW^W;=*av zm8bw!?ueP#XIm zFt4Lx6_X6p*aFP!sEBlS5tz86vpOoGo?zIf23okILS-tJJP{GmuOA@r{lkFb<9`4E N002ovPDHLkV1lmY?*#w= literal 0 HcmV?d00001 diff --git a/Resources/Textures/_CP14/Objects/ModularTools/iron_pickaxe.rsi/equipped-BELT1.png b/Resources/Textures/_CP14/Objects/ModularTools/iron_pickaxe.rsi/equipped-BELT1.png new file mode 100644 index 0000000000000000000000000000000000000000..ec4c89e2822ba56bd66a91799f979feac1b6a2a7 GIT binary patch literal 255 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D$|c6z!vhE&XX zdrOh;kb%U}kH0(s_R(^O37G*EI&%_am>CZ?G$bsqYF(sokf$x_ z_W$Rz%+CJK`mF*q1qc>|Nmb4cl-PayuU58k?783DH_O@=9IMDOy?rYueCPK+oBIzg zHYmG0Z@tOglec^(rSvSXob;l^Cc|v*l(LGK-Ru=nI@j0POYFP$I56PVK}Lw7U~{?t sehAyBA7GJj^%s+U`%-4e_Pbg@+_Gq=kgsgxHojD6+m>CZ?G$gG4#?`IGxsCPG zviFa}-kditb7umY0t8Y^LraoHj=lT1=kzU~?XN#Ro-0zs uy2AR4o-0BbE`7J=+{&%suFeP)f4Ya^>t8!|=RB5AAZ4DeelF{r5}E+ydT1o z+3C0T=07D5?=a(r8AWe@+w9B}W$w_t9(2$9c!ZnJ&SO(vKmIxE&p+pkKWseS>!*~z zDEl3mp0jV(3;$!i^UqJe@b=ro5}Pxxmab&%*}pUK;obb}%c_7TL&1Z1yYgT1*4KjS P>Odl%u6{1-oD!MTjI@<@S#bz+$Cobq{Zep}m1 z7RVg`SuV7?{nR3%hQt~s17Cdxx!UcoZpbXii`sd=YU>S^1IuHy@A=%_Qna&d()@Ep zC;C2#zSMiVYTvZE(O>3fwXJ=+;D$qFNRlr5Q??`l8HHo-Lm3s$P2}YJu&>0P`+-HD baJS^@-MK$!FYIyzx|G4w)z4*}Q$iB}%g$PO literal 0 HcmV?d00001 diff --git a/Resources/Textures/_CP14/Objects/ModularTools/iron_pickaxe.rsi/inhand-left.png b/Resources/Textures/_CP14/Objects/ModularTools/iron_pickaxe.rsi/inhand-left.png new file mode 100644 index 0000000000000000000000000000000000000000..3ac4cf89363633059a21c63e6b4110de4522f803 GIT binary patch literal 430 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D%zGdx`!Ln`LH zy=CZk*g%BsL3rPVPT?t=Tuuh8+{Av&%j2BnAqI7aCgm+c>Ke?J&f1EGMh#k}8CP2; z2&a4!J(DuU^j-Bb$N%PGC%ZqtN;&br184yVI5b^4<|$X-vpGWCD)bR=z^xrN=5x=T zEEdic?=W-7e7q*N>D<n<)E0JU7?ba~A7W zk4rs&-c8Io)UY|?_p$Cr(ow6IZET6DhO^!2RBuC4zS z{~xNZ*^wN*qP{0=_1E|LcX}c20g?>`N6*&g?|a@|Bewo^KG#|1B;ibl45=^TE>Z!t zx$L2#-;=~UQk!R=tuD|K3C@39xNgUq?Ys{z-DWE|E6`z@V6}JA;X3uuc^!TgZ3#7& zob$L}G$pq=q_F?ch?Y9e!&rS}&6dK&7g?w3`v*RHot)0`&-YlLBooNyzB-1DuAM(_ STw~P$Imgr0&t;ucLK6TY+_Yo> literal 0 HcmV?d00001 diff --git a/Resources/Textures/_CP14/Objects/ModularTools/iron_pickaxe.rsi/inhand-right.png b/Resources/Textures/_CP14/Objects/ModularTools/iron_pickaxe.rsi/inhand-right.png new file mode 100644 index 0000000000000000000000000000000000000000..522951558949a78c90e1d1605693295b11dc0222 GIT binary patch literal 436 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D%z^E_P~Ln`LH zy=jTv+Y&3bo zGP8)aylCn|L(hT(ZttZz4foI2aj0YvgaF0{`Ibj_j9)Cdb^fa+yWz$Cj4pu{hRYA| zI|;fbKK^=4I3RTCSH&NW8mm^lDKDOsc8K38F`J|4o66ZKpUvkn9RI3td9yByWq#LNCxZi($dUM9l4j5RmyTVHP$;mCES0g5+EzR_7-=~$`=2e^g z+tGgU^lg84^LftdyuEv)Wqr%8FYkAqsEXU}w|{NzukzSOFMULg##QUy&ocb>-USH6 bUx+Jcwf%T9?ekP%G%$F&`njxgN@xNA<1NDe literal 0 HcmV?d00001 diff --git a/Resources/Textures/_CP14/Objects/ModularTools/iron_pickaxe.rsi/meta.json b/Resources/Textures/_CP14/Objects/ModularTools/iron_pickaxe.rsi/meta.json new file mode 100644 index 0000000000..3767fb75aa --- /dev/null +++ b/Resources/Textures/_CP14/Objects/ModularTools/iron_pickaxe.rsi/meta.json @@ -0,0 +1,42 @@ +{ + "version": 1, + "size": { + "x": 32, + "y": 32 + }, + "license": "CLA", + "copyright": "Created by TheShuEd (Github) ", + "states": [ + { + "name": "equipped-BELT1", + "directions": 4 + }, + { + "name": "equipped-BELT2", + "directions": 4 + }, + { + "name": "equipped-NECK", + "directions": 4 + }, + { + "name": "icon" + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + }, + { + "name": "wielded-inhand-left", + "directions": 4 + }, + { + "name": "wielded-inhand-right", + "directions": 4 + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/_CP14/Objects/ModularTools/iron_pickaxe.rsi/wielded-inhand-left.png b/Resources/Textures/_CP14/Objects/ModularTools/iron_pickaxe.rsi/wielded-inhand-left.png new file mode 100644 index 0000000000000000000000000000000000000000..9044415f83a964386eeb409f23777cda6a94b4a1 GIT binary patch literal 429 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D%z(>+}rLn`LH zy=9np$Uubc!F0KU!F>~S0*z8O@&~M(WXU)+;?%vBwoEaN*$Rq<3=t9z3P+fd&OXte zp(!+VmC)rMrl$YRlav10oYdbVzz8%Q2)4Z2`ajR|`p&9PwT+j5dMy5U7SnzEEV3jj?9f`)6~uk*)SwOR5!{iwNHLS3`o=6#mZr8ghxPrj zjIUOyOtJDlvWRCX-^$fRf0`^jcfS7Vc85LY{PW54nXaEcJ40{56~*hPbALHS^EpA> zz`&3&yMHOOgpysxJiq7PZry)hxot;ybc2q5MeNik6*gPsGoJg@Tm@RZ?)hhho+V?#Wb(@$qO5fbBbo`#NZ!@#cZ}$YFXs!!48GqNNxC&O~H}#l? zi7X7Bvm}a7+56SohU@!}`sf~du=&~-*e$ht-)$#kYy`~PgQNvetJ zhlAb-GXhNjf(r}e=AL~-~oNc?o;*qnw?{6*2l6txO+ST+0_fGKre*8szN6dLWGY7Ew zK%&9baQ=siliV}n?gYm<)LQ*H>m7F>gu%a(v6vks%=JK1KjGev6Wk09%=!y$jjcnD RDJ%hL_H^}gS?83{1ORqKYo7oB literal 0 HcmV?d00001 diff --git a/Resources/Textures/_CP14/Objects/ModularTools/iron_shovel.rsi/equipped-BELT2.png b/Resources/Textures/_CP14/Objects/ModularTools/iron_shovel.rsi/equipped-BELT2.png new file mode 100644 index 0000000000000000000000000000000000000000..2b95da714a073a87607f8856bfb1fdfd063fdde8 GIT binary patch literal 283 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D$|u6nvShE&XX zdutc{1;U3eWi1MwiRKGUG1a|0Y-UgSiZ0b6K`CdYFO8h*F_Da!o>WSr~rY5VkvN UY`wnVbQMUur>mdKI;Vst0Q`(=K>z>% literal 0 HcmV?d00001 diff --git a/Resources/Textures/_CP14/Objects/ModularTools/iron_shovel.rsi/equipped-NECK.png b/Resources/Textures/_CP14/Objects/ModularTools/iron_shovel.rsi/equipped-NECK.png new file mode 100644 index 0000000000000000000000000000000000000000..520813e750d58e04281e65af8ad82890abe1e41d GIT binary patch literal 236 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D$|mU+53hE&XX zd)1bYF;Il!;GI=jgTc)MNvec`;&z86S+;;rI%M`g#?-iwtf`V_$p1-UKearo#^mpOjSf%ru zy`lqNGo4%R{J7wb`@D2RDfK{+)zj~1)GA!R-h0gRjoIz^<3HxU)X|>aUHWuB&~PaD Z;a^^CDAl3+{LOigh^MQc%Q~loCII8HSrh;O literal 0 HcmV?d00001 diff --git a/Resources/Textures/_CP14/Objects/ModularTools/iron_shovel.rsi/icon.png b/Resources/Textures/_CP14/Objects/ModularTools/iron_shovel.rsi/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..be90409ffced2904bfc759077329f65fa9ffc184 GIT binary patch literal 323 zcmV-J0lfZ+P)Px#{YgYYR9J=WlQD|IP!NVc#S^5m6)g;6ND2?57_iv`c!glUhj7u}TtRJuD2DL1 zP;9Mog=evwuog?6Jh5@UYKk}f|IGXk1VMOrY9^1u@l^NvE&y4on16j5^_kEx5ie@b z5Agf|Km$)PQfZ)=9N>7^dBmEF-7`~#SBVNu&DXcM4xx79G34FFWmCIKD2lBBM+^@ zsFuVT9J}_$1iBWsB_1+36Ce>6VK=nRx>H*$a#js zbzEPbUhS3RJ68Sn>6f^dd;MMDprpZN7T^Axch;=_cR|aSSH>}xVh{_ zyijDrCf|!%F`_TNteU+1qi(=b&8TZ-(zc#v1)%|zvpe@Nc3ZsiS-!oZx|WgQ%)52c z*37f!DQ3KVxaD+#!L`+2jm(_`miOwJ$tx^cOOstPhrRY})+4q@p0_ zy#Bg1>)-!d+^-1{EmsxY>$y9Fr1@wOOJLv_B8|-+ws(OLJ&EVj5(?kZrFTq!soKtOD;3~blUNCo$fWE52b85zw+2_e0sm1Q3(!K zavVBQqPJ_=O$+15?WvdRZZS3)7){MOyCrHl(3*r;RzK@^`AcUtDD?Q0RJ1(*#lz+d zwEOtk$v&_C+k0;Pwy#p|!A`ry%c~Q%XZ;I1$2R$S?5iCe9UV)5Ge-VAtAFDbui)){ zdWRU8Z+Cjs>Q7jjBDpW-DA4ejxcdPsui3qI{`ZEbLO%1ch2^WSQb&Vk?!Kox@Ac;& k6G~s}+`hUNXi~~sUNf)0U$I&RpeSMRboFyt=akR{0I!hGJ^%m! literal 0 HcmV?d00001 diff --git a/Resources/Textures/_CP14/Objects/ModularTools/iron_shovel.rsi/wielded-inhand-right.png b/Resources/Textures/_CP14/Objects/ModularTools/iron_shovel.rsi/wielded-inhand-right.png new file mode 100644 index 0000000000000000000000000000000000000000..4f8def30ad07c4a17039f9d4543c7b0ccfb91709 GIT binary patch literal 425 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D%zlRaG=Ln`LH zy|vfxP=Lg-kM?ca2}P;~4je2_yBM|~V0Fm2#QNRON`mdtf^I9z9Z4narwbYqc=&R6 z8GRLd<>19&ddwxtZr=TCE1y?ZUn;J;*VF+4CnkC_%#gJ%uw`esKcD%7VYTlO^ELk` zo|a~G&?@C}P@9|jp=A3s?ZmP-3j)prYlYA7JGN*4S)lU!^WT>W7F8;9G#^&7aacIx z`J+EMGqpJbw8D41`o35$StYEwUY*lmZqLp)U$3PdSa{>irpS)P_3Ti4fz**>Z*Cm? zdNx@=F3s(s$|~unfP$r%p|T-4?sU14^kOt9=# zj}1?Di1g`iGCAAbHwLqEthM{1LhE&XX zd&`#Vkb^+m!`_OfwU@fYsv1l_GBgQfv*x~ido)VBI(l#KR{PwJgjIVFMY(=pzr&K8 zQZc{iW>Q+2$7Fv^pgAB=k-YQPjSbQ_PgbO@UiWnNE4}HDo@BWnUTLHjdTdGR^)K;2 z?%}+Y+jAYRoKDZuo8IGj_2-uFr}UO_$+H(&#NC_ceUoE3?}c0S89VNBuDMoM8T$9a zamFvzjpp$>@0?G}$~TMJzhZrfpY(5B4 zf~0ncFINA1pTYgx$G0^uK!ZWx0oUc@kup51fBg9*_WrNV^cNMZS6@#xIqNv>H2=?k zH`PO%R`1bxoDgv|#H(O;!{oQi&dqxEK(^ZW8Plglf4+Oy*S%eHajk*)0;zvfCWxno z@Ls!d%_f4m>h8XdIr@&KCob3MJr0~1x%qa&zJ{Z}v#-7W=4#rJHR0qEuV+sgAueEG znDlU?XTg8#J8EW}?$dmoE{PW;-BeMDY1h=@%{)%zo)C8%Q~loCIHJyh^+ts literal 0 HcmV?d00001 diff --git a/Resources/Textures/_CP14/Objects/ModularTools/iron_sickle.rsi/equipped-NECK.png b/Resources/Textures/_CP14/Objects/ModularTools/iron_sickle.rsi/equipped-NECK.png new file mode 100644 index 0000000000000000000000000000000000000000..e3c685c42590b262bd7fb31641532bc903cad300 GIT binary patch literal 327 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D%z89iMbLn`LH zy=9-ppY8cJG}eB)<9DQPh(y0 z;LP)HXJ+l3vB%(-HOub1^K8!d@Vxtd(Al6X^W~cB7cHiqJiOS(ceBPh7Kq&p3=OMS z&OXrLwz`>p^;fsghg@zpEU0mqdcg5A3%kmxODF!@_`Q~~+rQ{9+rcPX4n_vSUyQFb V9Oo<+@ks)i;OXk;vd$@?2>`-xiF5z} literal 0 HcmV?d00001 diff --git a/Resources/Textures/_CP14/Objects/ModularTools/iron_sickle.rsi/icon.png b/Resources/Textures/_CP14/Objects/ModularTools/iron_sickle.rsi/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..8fcbfc40f7c138f6842391010315910e56d9adea GIT binary patch literal 331 zcmV-R0kr;!P)Px$1xZ9fR9J=Wlre6?KoCWrQBFWb!2x0{P*QLV4gdm)1`4V`LyCw3Q6x=Bm4X&d zV4ndR7q%Q3`v4SFzJgOkSV)FNvK`UPE9YyqZ&tGdf*{-(O%?XK;~2oG>$E#9{QUs{ z&vh_Oi`~{zp3f!l{;`Sy+MQM^I~RGK4s%I7sKQg%lb2CaE0-$(yv=4bo}TG-$MJfz z%q&s57Wh8_{{FyXJ_jHSY%L6I?ey%P>tNKX7kvi9 zRQ*z|aDnw^sj0e)qGK|Qc~B0aYPdeXzH?s=H}=3K9`$D2?+*Y9*#(&d;O{#Yv4{jg d5ClQEJHH5gTAwrKlKlVx002ovPDHLkV1hd@g>e7? literal 0 HcmV?d00001 diff --git a/Resources/Textures/_CP14/Objects/ModularTools/iron_sickle.rsi/inhand-left.png b/Resources/Textures/_CP14/Objects/ModularTools/iron_sickle.rsi/inhand-left.png new file mode 100644 index 0000000000000000000000000000000000000000..9a354e7b9973f6bf2fce40740d0f5da70e904b59 GIT binary patch literal 519 zcmV+i0{H!jP)Px$!AV3xRCt{2+ObN*P!tB>Q}GGz6hRTuA+ab*$U`x z2;>2D$K)NXa?;qh+ndXDXK{>UKDyC)(dAvD_GJ4iKl zX*jmax?zsbo^F`z2VttS=?CGru~}RR$`wo2+#>iv$iA`Mfxmf;id!f%&$fN+e zVREHnrTT8AV$tMZKs9BJrC72!X@Wv%^z>Y#-JPwu>kXnIUtV0(D34SHOF} zM?z>{-qQ_}h0vt!@ypB&l!p#U*eNUBnUx%^TzvjpgJ?Lj!DgK(|C#A$2V}@J9$!W) zRe)xrPC{r>x~e*gebVHc9{h002ov JPDHLkV1f@N@1Xzy literal 0 HcmV?d00001 diff --git a/Resources/Textures/_CP14/Objects/ModularTools/iron_sickle.rsi/inhand-right.png b/Resources/Textures/_CP14/Objects/ModularTools/iron_sickle.rsi/inhand-right.png new file mode 100644 index 0000000000000000000000000000000000000000..1b7ee17278f03280bcc109e6c374876482299ad0 GIT binary patch literal 520 zcmV+j0{8uiP)Px$!bwCyRCt{2+P_M}U=#)LV;|w0A}As{Bo;-7EXe~1LOLrX&_(yWMLW6IMNrUP z2xM26AWDn4w3O1JPQJo*kVtK!1{*bL&u?nl=Fho&+(2#sA|fIpA|fIpA_4%<^~H02 z`S0tPMwScQ*&r3#ysWjm=wsElt^HQ3rUAw*+mZ1M7nd!pEH5T=?%)1M`Ac+d64vK{&Cnf^=) z!blp;R${UU=^yMewA#Gu&QkLzcHmbpJH2aO}Gnwb`1yZUe_#1L7fNq$g zl!o@heO`zB6H_%9&-Ep`y9Q9scZq;03jn+oA^u#p@I*v3?_L4<<;<@{uL;}$0000< KMNUMnLSTZv8SC}{ literal 0 HcmV?d00001 diff --git a/Resources/Textures/_CP14/Objects/ModularTools/iron_sickle.rsi/meta.json b/Resources/Textures/_CP14/Objects/ModularTools/iron_sickle.rsi/meta.json new file mode 100644 index 0000000000..3767fb75aa --- /dev/null +++ b/Resources/Textures/_CP14/Objects/ModularTools/iron_sickle.rsi/meta.json @@ -0,0 +1,42 @@ +{ + "version": 1, + "size": { + "x": 32, + "y": 32 + }, + "license": "CLA", + "copyright": "Created by TheShuEd (Github) ", + "states": [ + { + "name": "equipped-BELT1", + "directions": 4 + }, + { + "name": "equipped-BELT2", + "directions": 4 + }, + { + "name": "equipped-NECK", + "directions": 4 + }, + { + "name": "icon" + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + }, + { + "name": "wielded-inhand-left", + "directions": 4 + }, + { + "name": "wielded-inhand-right", + "directions": 4 + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/_CP14/Objects/ModularTools/iron_sickle.rsi/wielded-inhand-left.png b/Resources/Textures/_CP14/Objects/ModularTools/iron_sickle.rsi/wielded-inhand-left.png new file mode 100644 index 0000000000000000000000000000000000000000..01e18a7282e6b5fde8591bdeaead12b824b81c58 GIT binary patch literal 476 zcmV<20VDp2P)Px$mPtfGRCt{2+ObN*P!tB>6Y&Y|6hU!KEQ%s`Y25`O-IWBo_yBo}cIw`#&^|*T z&yYc}lyqn*r9(UA6^>KHM4KY@CgtY;w%#PI5N_;SsWR|A+fxFD76rPpZ)J^=`+6XJT28GQ2+n{000000H`zVr#?lBh9cVAHx#Kd zwv^Jr$RR_KvM3#llrh;kl+pq$mU9xq%&b|qWFbr%jr+!q%k+hz2mqALbA9$)e`nv( zwiA1<&x_@pl4MInM4iqnO($`E-ah%QHPx$kx4{BRCt{2+OcZFKo|$`FQrd#Q-&_39g<4NEcy&_ZXvgJ&s*r^ZWlpmAD|G( z-gY^PqDUMR5eGZ@3SWm1#iS~wXyW<*jh7Sdf609ud=dcw000000D!K7Q1NWO;Msh^ zL8$oe6HZtVDlS)CE>~QZo}bN_gqNPbnyAYrB;hUFS>>^8himm_oG}O$*Xqs81YI^E zoh@P64olDH%h&b`sjqh$MaoDXjv{4Pw!{5i_qeM)fZ-t8`TXKPKRyMM>6nBtH^wa6 zVIfRvcN+0aPoI%wtXy$V{s^RP&82H#0000000000fCAIGIkT6}&6&M)Z_ex`J%4NW zrdDqrbOUxaMvCCj&6z@MK)cg0gfJ=n6$oL{WIE1kS;vRw3_x*6&u8iR+Mh=wJs>@w zOZPUlTF*ojSK^!N+jTEpcR{E!H?nj15{PL1hoZdKaZDQ*q0-$|UhBwB<|bIJx|ti9 z&N78us#LP}IG)>?w;n;pb^p1CRU_sB023Ho(^HoQIjG)val-DoYh#`NsVRirj literal 0 HcmV?d00001 diff --git a/Resources/Textures/_CP14/Objects/ModularTools/iron_spear.rsi/equipped-BELT2.png b/Resources/Textures/_CP14/Objects/ModularTools/iron_spear.rsi/equipped-BELT2.png new file mode 100644 index 0000000000000000000000000000000000000000..169595725d8cf2cd2c0afe058fdefdac1a5d2127 GIT binary patch literal 238 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D$|R(QHNhE&XX zd+Q)CqoV}tgN1zJ4-d5!6x`HxP`b&d;UvCgf&M$EMLnU+pYv0$e;56*sdDDc(|e`> zwK6d5E4U#)d(*1fmw#UR^DElUu!k>Z-L;Do*K+AEn9;vTdH3Qqub%y@`1@XTM$ht> zRn=~8+w`_HBpG_|ew!vR^X9e>^;z`Q2FvGQzw1$g>I%CAtN)+x%P}ZXSbXa ipRn8WMGYfEN(J*(Hl>N%e_S~S(&Fjr=d#Wzp$Pz#NMTF> literal 0 HcmV?d00001 diff --git a/Resources/Textures/_CP14/Objects/ModularTools/iron_spear.rsi/equipped-NECK.png b/Resources/Textures/_CP14/Objects/ModularTools/iron_spear.rsi/equipped-NECK.png new file mode 100644 index 0000000000000000000000000000000000000000..d183a3f26b0ec0693c1692ccf8f04589e3755fb8 GIT binary patch literal 215 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D$|CVIL!hE&XX zdv!POAqN501FV5;oJ|e>K1`+;8e>~_H+0Mq$#Pi47R3;FYT^T?4Z1qBXVxrTe)aZl z4xna+7gKDsgXaEB40gQrsm3;GU&Qj)Z{sor7cXP}d#l8#yQAZ3(Ve16VoxI{n%$0F zDpvB3<%dS}2KzbtvK;fJ3iipcKdt_7{Z(Bz$Sg4Ua#H%PflQN3=*#aQzNf37%Q~lo FCIGdlP@(_; literal 0 HcmV?d00001 diff --git a/Resources/Textures/_CP14/Objects/ModularTools/iron_spear.rsi/icon.png b/Resources/Textures/_CP14/Objects/ModularTools/iron_spear.rsi/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..e36dcbe02eb76f4eaa1d5f6c555ee4793fb6187d GIT binary patch literal 255 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%Cx&(BWL^R}J3U<-Ln2y} z6C_v{Cy4Yk1v;oy{P^+nf8V*t|Lj*7`Q`2Z%S#7a6!0}#9y)dF`~Piom;cYdT{$bM z-C)wIhSk^S8GyhR6H`MC?NtUDud|ForYxVB!e^AAazB5Vqo~N)R{lQDK*oC4%r^oG-pM&W5C8A}{@!3u_4lSmAb5D} x>*W;dhMa`dx7G!bMIiSXaJe1SkO*U7n0m|Y+UCyN&w-v`@O1TaS?83{1OWCAXT1Ob literal 0 HcmV?d00001 diff --git a/Resources/Textures/_CP14/Objects/ModularTools/iron_spear.rsi/inhand-left.png b/Resources/Textures/_CP14/Objects/ModularTools/iron_spear.rsi/inhand-left.png new file mode 100644 index 0000000000000000000000000000000000000000..2a11fe88cc011fc10fa1e8b2663617574709d15f GIT binary patch literal 378 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D%zO*~y3Ln`LH zy|uBg$w8pu;m0C>htx#p1q^F5A290eY>5-jcw5Q6_D$|rNskJ)ILG9k*6^QP)kp8D zl^<2z^{y!6-}-c;H)s3~Dlh?!27&`^n^uI(fAr_+(a;Bf6V(Iftk{*=8@C`YO7v*w zE%~x-!M~5*WMrw+m}fraWJSuCKPfgs=cTi!{inod z&2Ya&TxZ(r)vI}z9 zvb6>8&upw?-L>fX=^U%+r=K3SICogKVcoWQhTs3$e+Vewq@(qFMg{vd$@?2>_(8tNQ=| literal 0 HcmV?d00001 diff --git a/Resources/Textures/_CP14/Objects/ModularTools/iron_spear.rsi/inhand-right.png b/Resources/Textures/_CP14/Objects/ModularTools/iron_spear.rsi/inhand-right.png new file mode 100644 index 0000000000000000000000000000000000000000..ae3f668d79f20467ed1195fb58534a27dfa35f8f GIT binary patch literal 383 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D%zEj?WvLn`LH zy=BF6YrK=f!ZBu`|vcn_S_>>!;{UeQ^v%FsS zn&$-shx>19dt7yj-)SpQ$GgjBT7P*j{O5ZicQv!3{_`x+tJ42s*38>E_j}IcU!p*J a>}#1^3JN~IGgq@>@vM^Xi{|+hbOn-nuB6xkw==hw}gBs3QGES zr;PpL`{!n74(zFXZ@@o~1!xu!%!!#bCCq$n>EDD{`-r<+!k$d^44N3e|J$V{Ch;3% z=lpIm(R};(b8S?7{9TVpadGpP?LM9&)A##jjD*GBtLM}E&vz@WU)DAMlMci<1_thL z#TuI=OD{)>q>CNB`AF`4>L;P2Gg})c7w4G?-kP#BRF0uxsXI!{+Wmvv4FO#r79jV=HH literal 0 HcmV?d00001 diff --git a/Resources/Textures/_CP14/Objects/ModularTools/iron_spear.rsi/wielded-inhand-right.png b/Resources/Textures/_CP14/Objects/ModularTools/iron_spear.rsi/wielded-inhand-right.png new file mode 100644 index 0000000000000000000000000000000000000000..4c3dee15b4e40c1ec3397ca870ba157aa17be8e9 GIT binary patch literal 329 zcmV-P0k-~$P)Px$14%?dRCt{2+CfUgKorLDui#$v2BN1(Zjg|@!VKBD&q+LkRP+F1AP16hkZUzGHdz%crCjkHe0002s#CTU(-L%&AgLVC2b<njU;LQ^sqadch%UP zshDCW000000002MzxH!L6T6mZysIop3ro_%>ZUzNBaUwJ<6UJT1T9xV?~B)?tM4F~ z;s5|5+pLi!X))1LhE&XX zd&kg=IZ%Z4Li)8tWzWTqoxd+$yXQ51!PLELZ~8kOQt3^4Z1;#s<&WUK`TUcM#R@oM z(f3(c(!XRD?HB`)bF zR2iP`TeAN5?&Hp{@58Kv(9SD=*{=V)VAHB(*>BCKR*5CpuQ(Iqo6ME5CX4Y}@F})R zW{Y#ICT1t36YO8?SjBpSUu$(8ZOB?S)yDe3s?h7tu@8sV&^KM(lon+aDo0(*4)zx2;Fx$X%Lhzsc)=FCoQ`RK+9yvCV$!&>QpU8z7Oj5xIT5|RGXe2b1J0$BZ vn0N&!rbP0l+XkKykU2_ literal 0 HcmV?d00001 diff --git a/Resources/Textures/_CP14/Objects/ModularTools/iron_sword.rsi/equipped-NECK.png b/Resources/Textures/_CP14/Objects/ModularTools/iron_sword.rsi/equipped-NECK.png new file mode 100644 index 0000000000000000000000000000000000000000..df63ea0e4171dc1b039e046fea3715b9376c886b GIT binary patch literal 260 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGojKx9jP7LeL$-D$|_IbKEhE&XX zdt)!>AqR*SWOnR`T4Ys)%@7YH1b)Dg)(8kjVdRmI)olMQo?O!*%6 zazUVW2ykeBa&w=D<^K6a71A~P-p@D}cJynRf0015i1Y0fn^`U{N0RK;RI18OOaGm; z_omv)1EMa*OIA5Bnz(myiF|0k{yFfw(5}^M9+d1032J2e7qE|a)rHkLLG4rS3wJ-& j>1&^B%L20snO@*pH+_SyoyhxlQ$fO>u6{1-oD!M<>?&C6 literal 0 HcmV?d00001 diff --git a/Resources/Textures/_CP14/Objects/ModularTools/iron_sword.rsi/icon.png b/Resources/Textures/_CP14/Objects/ModularTools/iron_sword.rsi/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..f3c84ec4c8483090e57a73554adc0eeb863be447 GIT binary patch literal 434 zcmV;j0ZsmiP)Px$Y)M2xRA_t5p(he?hZ>P8`?b^LlD~J!^(g)}wSaeqq zd;nb>6pPxSrHFz~d4=l`ZY-Um(J1sgQ$D!4_nv$|0YMN1LHG}Jx&t*|tW>8vP^Z4j zZ!V%P9FK+oIJU`ru{s-x$O4m(8O=sJjL#(#kp;egz5pnfs!XO!;5;NE3qX(s2+GN^ zP2ltrkp=p_c1mXfU@~3e*e2uA@T3x{U0-l>o+?)=VeHsu*c&g;k2~)dm%R?u5_&Qf ziXP=s6@dEtYoZc+ALiyfmCt)&tRD=H zO|A9@1S9t9`UZf9`=>-2JC*xl85Hto9f2a7dMPF{a!oq|3fS?R#qLmbOb>V1VIo4K@bE% c5QJE40D~5af-{kH$N&HU07*qoM6N<$f)tvxvj6}9 literal 0 HcmV?d00001 diff --git a/Resources/Textures/_CP14/Objects/ModularTools/iron_sword.rsi/inhand-left.png b/Resources/Textures/_CP14/Objects/ModularTools/iron_sword.rsi/inhand-left.png new file mode 100644 index 0000000000000000000000000000000000000000..fcdef88115d00bcbd39c54c26a8b4f668e60816d GIT binary patch literal 541 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGojKx9jP7LeL$-D%zuY0;UhE&XX zduP9wa-hiZkMmF4HBNPvx~Not!!>f5;WuvXjeQGptF*TZaBrNk^3C$QwM`t%pBZlX zEYyhH?!ob>DQw@NyH0rm)<@6md|YGCZ}9z2^|_gzUB#+En~*@mtJ`;P7GE>;_*Pi6 zDXPLqcJ=T~0W^Yq6pV_B7ZT`=ktshQ(TBWk`a^8$J_cP5!YHv?bnLB@G zOG18m`uW_F>ZRq5)5P-@-!8tkUjF0<(H4g(cUcuf_q(t=XszdVT3x5Pfp5pIJuAL^ z);?SAIA=-m%5xT;&0ygV|9Mya`m;S^1K$J7__=fSb^qRx-xHlvIBD0#ue~ZSufLzX z;2RH;dm+pZS%s5k#riXNo((gZ-LYry?)9}wUi-C^3JX28Pp`JJvznxG_uk#z7w6ai z`e?iA>5B=;+_E;a2YO^?Im! zsDA#o-^{jlb}!!he%vVhz*c_AHVMtMpAMDY;?4ceK51TBxBBIc=g#}Rp2(mLbmsc( z*PG?p>sD0Xa}D^-@?*7N+u>l(r?Pv(Z?iRfM=fzBp-D>m8rr8#PJU|=cpclZcJEZNBtS`QRe7zyrf8+o`_tj3 zua5rImus1rx$TzP`nSh#y?iq>ZS~w0T+7xmSR8s=ubU|vz}Ve#`~N(=W% z{#U*fDEeTC=qPyVyw_UE&2&)R!lIv>AW*mkn} zHfxh>SynghtNJ0i8NyVEZ!+kzjcbvV=zZTi_urapdv>ZPWZvUWa}{t~7O4N~_x4!N zchBw@nIFIM_GjAP&uxBv{i?R?_pZK)&g#C^oR?cQ(__=y_s^e;PrAc?&ucB~+_`@P z7H(K`@y9)nORr9;tFxcYda(A2*~Of#zB@xE{#|hSz5Twt|Mx6cc1%C~G?H`A)L&_D z9_A|X_4k$3mY$S(J9#H7kh^XB?MYL9yI5qit2~;x**SfuJ~PzmX>S>4&Dpb5`1Jom Okcg+NpUXO@geCw`2=E2~ literal 0 HcmV?d00001 diff --git a/Resources/Textures/_CP14/Objects/ModularTools/iron_sword.rsi/meta.json b/Resources/Textures/_CP14/Objects/ModularTools/iron_sword.rsi/meta.json new file mode 100644 index 0000000000..06a73b7b49 --- /dev/null +++ b/Resources/Textures/_CP14/Objects/ModularTools/iron_sword.rsi/meta.json @@ -0,0 +1,42 @@ +{ + "version": 1, + "size": { + "x": 48, + "y": 48 + }, + "license": "CLA", + "copyright": "Created by TheShuEd (Github) ", + "states": [ + { + "name": "equipped-BELT1", + "directions": 4 + }, + { + "name": "equipped-BELT2", + "directions": 4 + }, + { + "name": "equipped-NECK", + "directions": 4 + }, + { + "name": "icon" + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + }, + { + "name": "wielded-inhand-left", + "directions": 4 + }, + { + "name": "wielded-inhand-right", + "directions": 4 + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/_CP14/Objects/ModularTools/iron_sword.rsi/wielded-inhand-left.png b/Resources/Textures/_CP14/Objects/ModularTools/iron_sword.rsi/wielded-inhand-left.png new file mode 100644 index 0000000000000000000000000000000000000000..f16af60f9125fc0d1565d12506857d473103aa62 GIT binary patch literal 523 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGojKx9jP7LeL$-D%zk9xW|hE&XX zd&e+4IFO<3;r0jmFP=n2nM|MH_*8H0ZiOYAopzVKU*h~SK<3uTy{rE z3|_T0ry#bH;lSeK{ERPZezH02|3CMg=ll1y@9*u8y>aIT-^X21r`PQjUr>E%@sB@^ zb?ZHn-g)vYn)EcW@Z&#^_pxzNjBF2&Ur*w+um3CY(pXQwKHA~tt0>z8`wP|w@%>SI z8h>;{#HHo^XH}l*A-MtS9^dUNt(I-BFOWzmxR5tT*;{jVm*H$E@YTQ#zoDX z`9bj`Q`B1}hCMfLGtb!hLGdD!-+4Wz1EztpFgvV}QL;SS|Gb{l_t%!^=RZ}}*NCmW*YvQR?cJMqMKxC*eqFs*`t#O?Xp@*D zzp7*(+)~ncz}FMp!g^=nr^m*3Gp2z3bV=U#*}Rzd5$O|vvCH7;>gTe~DWM4f|3CA6 literal 0 HcmV?d00001 diff --git a/Resources/Textures/_CP14/Objects/ModularTools/iron_sword.rsi/wielded-inhand-right.png b/Resources/Textures/_CP14/Objects/ModularTools/iron_sword.rsi/wielded-inhand-right.png new file mode 100644 index 0000000000000000000000000000000000000000..d52b19b18b17d75839d58832e3fda6b7ac1dd1d3 GIT binary patch literal 527 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGojKx9jP7LeL$-D%zPkOpIhE&XX zduL;|aH7QVkNF4oFPPlq>T+>++cdYGOH0LDQo=m0y_;Dwf$!+Txpy{ey}09~uzQ!x zD*>lPTSN*kto(oIb%4Kf&%>;oD$e`o%LMQe@q z$6PMzGH8|OF@N}YSe=2b`8>myUA33K=SzIKd}&R$?kWvGr=st2Pp|&?QsLCLH}C)T zQvEnP{izI_)MRAkpY3{h@?^QRflAlp4O>bqukSQpcb~=YFuR2GqYuG`TG^L&Z)Z1q zu)OzdR>S>=eUn-BkemQ@j_$Np$=R7ew@6Q_{#22jcg@ti_1VQ0=7%qSRNNXhb?a9y z{&(uF@$nD2ZC0=0Wbog6}8wBxJTx&{9;w+On{C~*a! zsFcceSsS+W`djg&vhRnuXDof_X7RSZQR-{jiDkD{Jtvuz-MdvPTm=ZmTsPN=iQQpdy1yI^KWlB8C{||KW6`<-PLP1Y>Rt%^BmuY=f{eF zl?yYUx%d9}Z}x_R^V>H%O8t5B$MnL(wc5OKkRYCQkAG_F9HaS9kG%)RFoUP7pUXO@ GgeCwIF8PQ6 literal 0 HcmV?d00001 diff --git a/Resources/Textures/_CP14/Objects/ModularTools/wooden_grip.rsi/equipped-BELT1.png b/Resources/Textures/_CP14/Objects/ModularTools/wooden_grip.rsi/equipped-BELT1.png new file mode 100644 index 0000000000000000000000000000000000000000..1246414667f09c8ebbc53c6439fb3133d55f0d3f GIT binary patch literal 181 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D$|@;zM~Ln`LH zy=BPNV8FwA;ei4lpRI#!!*}}y>-<_5Efu&w+qlN=<|GcF+J?5x*IuvrI&1D@Z}0O3 zH@62`E_OF4& literal 0 HcmV?d00001 diff --git a/Resources/Textures/_CP14/Objects/ModularTools/wooden_grip.rsi/equipped-BELT2.png b/Resources/Textures/_CP14/Objects/ModularTools/wooden_grip.rsi/equipped-BELT2.png new file mode 100644 index 0000000000000000000000000000000000000000..3636f35b0ed44284eabc6fbf850d2bf27b3c9e2a GIT binary patch literal 176 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D$|vOHZJLn`LH zy>*bcK|z4U;nCqA9~>DY82*ZPm~x1pR5fPJIq_+aE-O%JLQsD0mutt~mDiNIv|at( z)$`jmgVEns`Ei|Kn8UIA>_8tuh8aZIPmUD?VR*^2R6RnEFi2k-GA1R zJ5diJnFQ{x31?WKxa|0Si_ctbx0YQy^>oE_?vm-++kPL;*jLHwthns@Z<)ONJ$3WN h15bwv2>!hzd-jNyP~qW@qd?~}c)I$ztaD0e0ssq#T#x_& literal 0 HcmV?d00001 diff --git a/Resources/Textures/_CP14/Objects/ModularTools/wooden_grip.rsi/inhand-left.png b/Resources/Textures/_CP14/Objects/ModularTools/wooden_grip.rsi/inhand-left.png new file mode 100644 index 0000000000000000000000000000000000000000..205924a1191bae67d938b8c0bf0eef406135d81e GIT binary patch literal 231 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D$|7J9lkhE&XX zdvhb_p#Xt~hs$?3XmxK{&r#UOqMa^a)Z=a0wA7*@VdAkvhfWF3o0_2hg1hrWE%P54 z_V8E^pnirw>#|>&JiWKO@?ApoQIXS1w=cv7FOLvgxb~5Pcf=DuIsLynEfdUEr%sF0 z=`OIiA0G?S#K4fCRCfDo!u&gmDgXJtZ+CyEQggwy^w+m9o8}*oNQ!Lv`_k&01OvkX a`AVj$D{^0oUfv4?>GE{-b6Mw<&;$Vc7+Vzp literal 0 HcmV?d00001 diff --git a/Resources/Textures/_CP14/Objects/ModularTools/wooden_grip.rsi/inhand-right.png b/Resources/Textures/_CP14/Objects/ModularTools/wooden_grip.rsi/inhand-right.png new file mode 100644 index 0000000000000000000000000000000000000000..b36e29defa1e9d6438156e2e18610743f43d2e96 GIT binary patch literal 236 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D$|mU+53hE&XX zduuP}AqR91!4~*JmqORykm-TL>DuMSf-B78W}~gTb(NZ+#XiGdR$@o zZq<7wpnirOrt;l>w`-OyuDh)X(#XJYV6xcelegKoY`y$2K1j|lS6x7G`syF~^VQx}zT(s||Lsxv g?VT6{L&JJYW+6ejFN>7LyFuDKUHx3vIVCg!0MWTyPyhe` literal 0 HcmV?d00001 diff --git a/Resources/Textures/_CP14/Objects/Weapons/Melee/Mace/mace.rsi/meta.json b/Resources/Textures/_CP14/Objects/ModularTools/wooden_grip.rsi/meta.json similarity index 89% rename from Resources/Textures/_CP14/Objects/Weapons/Melee/Mace/mace.rsi/meta.json rename to Resources/Textures/_CP14/Objects/ModularTools/wooden_grip.rsi/meta.json index 999e0d7aaf..0f12276b8c 100644 --- a/Resources/Textures/_CP14/Objects/Weapons/Melee/Mace/mace.rsi/meta.json +++ b/Resources/Textures/_CP14/Objects/ModularTools/wooden_grip.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CLA", - "copyright": "Created by link (Discord)", + "copyright": "Created by TheShuEd (Github)", "size": { "x": 32, "y": 32 diff --git a/Resources/Textures/_CP14/Objects/ModularTools/wooden_grip_long.rsi/equipped-NECK.png b/Resources/Textures/_CP14/Objects/ModularTools/wooden_grip_long.rsi/equipped-NECK.png new file mode 100644 index 0000000000000000000000000000000000000000..9f5ce30a0ddf112aacbf746da16f95431da97be3 GIT binary patch literal 354 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGojKx9jP7LeL$-D%zWjtLRLn`LH zys8>|j^v1mO$6WK9%S_&xmqzF+a=z$a-jS+5E86yd zmS6dQ6(iQ8!XNhR)8G4K{+X@o-Y7kPoBwULl?tn?@P&7?3fFz!WH>3pN4#zZDgpg-ZD;poZAl9Pf<6Ql~7=csF#KJdEyqS9I>%yQjw#)Bpgy!2mc nzV`oT@_=pUF@Crvh6xwdlh$|~IWOic021_c^>bP0l+XkKZM}~1 literal 0 HcmV?d00001 diff --git a/Resources/Textures/_CP14/Objects/ModularTools/wooden_grip_long.rsi/helper32.png b/Resources/Textures/_CP14/Objects/ModularTools/wooden_grip_long.rsi/helper32.png new file mode 100644 index 0000000000000000000000000000000000000000..b68a16ee8516ec80d7f13a84bc56639d2b7cc707 GIT binary patch literal 321 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D$|etWt&hE&XX zd&`io$w9#3;=w}^5{DVD^)Y$8d8ia~Q#m71oqfRq1G5N$B+c1pSjxZezvXl0jr&9m zCh4ig!B6jO`Pvg-Htq1_tJ7LhIK2|SHCWmh<_N8urxdCD_7Gl{tCW)ARTq!>%S8&&+=K<&UDmu zNLi;~FSo5u`u3|?QE%gvcQCm;bP0l+XkKNh^pf literal 0 HcmV?d00001 diff --git a/Resources/Textures/_CP14/Objects/ModularTools/wooden_grip_long.rsi/icon.png b/Resources/Textures/_CP14/Objects/ModularTools/wooden_grip_long.rsi/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..cfaff0af5c11df7bcd3f21ad2439d35163928d5b GIT binary patch literal 348 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA1|-9oezpTC#^NA%Cx&(BWL^T^`-})n#9v&57QZlbM%Ms%E&+G5uAqNoQqUm5gc9B!&%wskZ~KoLwO}nf1W=`h+zdp3Ds2 zjt7Ta;bqu;_Sb#Ed*KVc%Vw9(x4jd5h4=U4lRqufxEXG&+hpgP#PGc1r2WG8e9x7% zZu1?e?3`Q5#&+0eN^be*G;tS(9q(@(WNCJ~S`;d_MnJ^y$8(4E7e5 zc0Ie7Kc5o8_2Fp21^?IoI9Puyv#{#;_%}JqhIPiJlK(G{mU?}6*Epbl^RE0t2I18& zfJ$a)^zkK?e4QXyu5O#e9-11sf8U-XH=pKaeRq#w6#V$_%Iwnn_c;$c+CQ~DZ545n z>&A+_*Q?fS?~UEhmJV_l0&JM~?4L>fug&MyEOh&SGw-(iw{PDUeK$;e^6q7%VN{ex z=Gm+aHJ-Hos+XH0+5c~iW4v5nCpUllGGDWNxso^XD^D%TD{HFU_T&pw%DE?J3}n8% zPP-C0dvn1;-Hgemo&6mWv9??CR@7f?ow-cdeqVjek7Le^X(3ZxYl~_m1nVdNXk+@b n=`GvT3zq`PHb&s_?EG4 z_oJUL6{Bkz-w5tXu$!Isl8MnJVy%65kQ!d-pb%HZmwZeFYRhb(NLrMdHRg zDZ9BlOy>Je-Y5IIVcx8_dcSWM>X(LY+c|IIddEq8KqEy`U%Zz1FE(#=$o{*sV5h)| zm}M7Nnj5g(Js*0wVR^*%m)nbFU#-g7t<25$H=;H_O7ZT#lYEg9X9f8F+NTTOWo-I! zHK+XKImKNb+n)yIJ-GGN?udYkrKI@kug}k`tn@Bl#b;l!ahKL@1OH+U$Cwy~gEeNk zhb7i4vJ~c=b;o^1}*yU@{Ttnk%9rs1$cA)A_r9>c2%Ym;7FITw3}RoQ%! z_oY28T>thj?aZ>b-ye1MgAyaqXawg{syAlg4e66e!tk`x16Ey@uV-G_Q|agj;;`Ym$y!JWwD~)tQmQCUQPe8)+Wk# z!4xTjTuseG&R?M z+cNeXpS(>dGH=`b{j2Auok_pEsLt=MopeUl{X<)q7Bbg)*{zqke=jC<-juJ`FP5LR zFmujOf|(7aYfoNUvf})lAO0VeqvnWyly1LQ5?VH6{S%2>-{&nT)}yoc)I$ztaD0e0s!M3rv?B3 literal 0 HcmV?d00001 diff --git a/Resources/Textures/_CP14/Objects/ModularTools/wooden_grip_long.rsi/wielded-inhand-right.png b/Resources/Textures/_CP14/Objects/ModularTools/wooden_grip_long.rsi/wielded-inhand-right.png new file mode 100644 index 0000000000000000000000000000000000000000..91f96b381dec6b7ddb2595500f3ccdf482f98b26 GIT binary patch literal 386 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGojKx9jP7LeL$-D%zZ9H8ZLn`LH zy<_Ni*g=5dKyS+mPglW;G5HGcW*DB7MsfgG#3KaN-dT7^YGoWHS^C;U)|9WvBo_5yKnmEC6#Z2o_bphA?5M7t4uP@(r|70_nZ3UOS;Kxt@EN>h#7p)At7dO}4MJ2vNh50)7{i}Xn z3%e_~SS3uiUhb`V|4A5|)T`rLb2Xpcyp{jLP<)@!+_UbNCGO>$K-|M~U3|7_*Nf04 R&+mc+JYD@<);T3K0RU#QqoDu* literal 0 HcmV?d00001 diff --git a/Resources/Textures/_CP14/Objects/Weapons/Melee/Mace/mace.rsi/equipped-BELT1.png b/Resources/Textures/_CP14/Objects/Weapons/Melee/Mace/mace.rsi/equipped-BELT1.png deleted file mode 100644 index d075d6d6ab4ab93a0cb55d58cf1c10ad84b01250..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 302 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D$|UU<4VhE&XX zd&`iI(NW~s$Nn810RgAYjMo`d>#chru{+#BSxb;>QRvP?86I2S%%1r4fA+TOnUy#9 zXx>w21nOsCFnLhZao_In?pZn-!?1J(+Dv>I4-7g@rl+f)%Q~loCII9Ncv}Df diff --git a/Resources/Textures/_CP14/Objects/Weapons/Melee/Mace/mace.rsi/equipped-BELT2.png b/Resources/Textures/_CP14/Objects/Weapons/Melee/Mace/mace.rsi/equipped-BELT2.png deleted file mode 100644 index ea91205bf47fd13ca2eff384336333b449274678..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 299 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D$|o_e}ChE&XX zd&`!u$w8p);l&DxwYo{Njh`Ki;Bo+Vsi5S+M30x7Q)_h!KQ+UkDNR8zigah z8rNUXB|6K)_$vQTmg#Gx1++{8!=EnOd4JA*i`8sA;YJ}DkFJ`XzU_BhZq|*PH8yr1 pUFY@X8>+Z1i}=gTq0GP_u+^N?$oomG^J!y{v7WAeF6*2UngC1^aXA10 diff --git a/Resources/Textures/_CP14/Objects/Weapons/Melee/Mace/mace.rsi/icon.png b/Resources/Textures/_CP14/Objects/Weapons/Melee/Mace/mace.rsi/icon.png deleted file mode 100644 index e1fcfa6454c4ed1d79d012e9f98877f492fd4a2e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 412 zcmV;N0b~A&P)Px$R!KxbR9J=Wls!(vFc^lPAWq;ZYm^L)s#dM4ENy3)$_d&-bU{L5MB-;*XN4Q| z3badvS{0RKNR)-4Q?6hpmnZ_{T4D3E*pjX9ef|9yEEbE!kX9JUCgPmviYdX_bS{UZ ziL9TS8gO(kw!%n8gE2R^mjGN}Jpd5Dy#kOXv39H~S{VR{24mWtkln}ULAc!s5yCYV z*D|2epBEY3UZ3q|&H32{0Nq|6-wUXhq)`KD5<5b;_+G$vvu5|6AcRXa7z2*=GtrApU zsKk^JAzV{!bE+?Hg^`?1=W;fk8)ZTJAE;8zNSefsYS6p;r=v|68K|>bE{shWckfRO zM-%CL0RYc0k6N)CH2~k^sym*Il%PtQ#7=!oEf$OAFTMb5Rf;DU^sPx$!%0LzRCt{2+A(s1KokbxpG;0*Wy?UJ<5=3j8P*f%j74$)Z=qFs+vEgt25BrE z2MY)-Y4!@6BJ&)gDGabg&HpvbII!&Q<2{SF01*)p5fKp)(G?0pWv0_7V`JL8wf;iGFR%^f^**aPm=ybXWLS;PHKf5Ogm02uTCd*Td z$Ljc;&3TnsFM_g|@mL|tQ!JLNZ}lPGM9zMfz;k`9*AYC|Z!P};;L-LAB=WMj{Vu_2 z8kD2|`u5UV^jkHZ%*|=^Pqi8O*4_2uh=_=Yh=_=Yh=~5JCK{t{YP>U4r7?P!q{}NC zajhF-y*ms5v)MEDy99$_AM15=)*7ozHn+;S*86bf$a}8ec<--#mY_;k*=l#V+!B{- zQzu6xz2q!G)t0)|4Tv|9ljSKq*T-PkKmJx_EICKuxjq)lm62lG=2?PDPK#ijFF-b- z$-mm`-n|k@Cn=m$q4+6DDyj>*NF$dNQ^YVkLv$y6dDBKqPx$!AV3xRCt{2+C6T`u#hrw6UkIZ&ex0 zZ%AL?%H2?D^P`IXHQ&YlWd|s2Y?f`2W!rM2x}YrELTO_=!Horu3*zklP}jw4Az3cB^pK z=t}}DdvvC>v0-SiTqNlB0!$`P0IHo+p0%-@NV|PqSrMWr22g&H51n;IW|hpHRWf(v z^1*J)770eCxI)JDMfUto;p$2^3wY?YJ<)J9wg9kPB=wn4OBX0@3Qd;}JLwXG z+QQY9wv~GY0P1scDB+siY#KX~e76_m{}qm`PJW|xiHL}bdj~wO+wJ(KPx$WJyFpR9J=Wl`l`jKp4iK60%H8G*gJqRdk4D6C{*<27(|#ZGw+5gFr5b?JMkK zjD!R=IWgHZS5boC2%R~WfgqSe9U)8q-dz#UM_=#x^?jfBUZ7H?|1Lx2& z8Na(<@ss{3ciKl>=iPgG%sbs4ZpP#9vg=f88Fzc$Y#xBI2*%qB2&GzDkeY#?=A!3q z%i?CE4%e~yG6vQXNV#R0%<)H5MU+h_s;KPpQ6p=An^q-$YSs`R(@1zzyK UB35M#!2kdN07*qoM6N<$f{^00K>z>% diff --git a/Resources/Textures/_CP14/Objects/Weapons/Melee/Pickaxe/pickaxe.rsi/inhand-left.png b/Resources/Textures/_CP14/Objects/Weapons/Melee/Pickaxe/pickaxe.rsi/inhand-left.png deleted file mode 100644 index e8c3dc413d9a6f4a7f625ece8a3bbe7b6785dff4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 608 zcmV-m0-ybfP)Px%8c9S!RCt{2+P!O9VH5`NCq)+_B1I5{4h0bnI8-PolG?49F+w)UoFS0eKcKVV z(4{R%w?I2u9Gg%Y5E>znF9I0?f*>I%BtwMLNkWPrmG>O$CC_hEJomlF^WN+A9Ds<3 zh=_=Yh^%E3G07%kGVQf_d8QGhQmsv0e7TsDQa&Z2fPdusp@1Kyd`im2+*}i}DBwqU*@qY5Al`rd>AXI3^+t2z zH&#d|XD;t-A|{1&^1p0}nbaFiX|>KCEp%Awn#Zx+8a|f~pPwHi8p!~7DD}h3Yuw!4 zt1NElqH~9Cf1nz3$SDB;(C+k5%BSS;@)`i}{r8FbzMXX4aOISMz5N5cUCp4|ADEo@ zJUHJ5+nt_gPhLf(T9avaf<@+h4cOa1&{&7Jt#533wgS{J2}DFhL_|bS9iI&GZ{4Cr zpwb!}#|xEUmVkJC1#ea}R^h#&-e}6AZw0doD5R4TjRdX2t1(GHA)S=)vJdS}&m#QH zCe0t1B;eJ{=lJsDXek;An*D9AF_Qo&^aVz-?&}X{62|$vQES;-oXDzUWHFPVuHI;h z#qR*^nFNz900199ea5%l59+0-J(FOPfJ(I{JKLLP`)(dH2@7j|V@q1CGqo8a(`NxI uoJmleNie$zTH;Isyz!`Qj!7UQSAPIuIs73t)Px%5=lfsRCt{2+P!PSKokJ*m!gZHND%~~Lm`L?4t1(X>+GuFCY>D$o&5tk3l7fG zO{k;dSfwZkDir((f=rX5!hVv9g%ksk&g2XitW+#S5@A2FTg+RZbDM919-i1O zW^hIi@8tF`q`tB3+8Q^l-Kxv=y5V8Sasb63;o`J(^q85a`8NfonK&4s- zm(vC>Zy(&v^(Bq3kPkquH{eRmE;kr2p*5T+2Ey(3QE!^q*Q=n5Q}zq6xCO6kzd$se zr20#sYI}T_p8W!ae3kke@M diff --git a/Resources/Textures/_CP14/Objects/Weapons/Melee/Pickaxe/pickaxe.rsi/wielded-inhand-left.png b/Resources/Textures/_CP14/Objects/Weapons/Melee/Pickaxe/pickaxe.rsi/wielded-inhand-left.png deleted file mode 100644 index 2fa9f2817a53c12e03551385677d0635789f002f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 661 zcmV;G0&4wPx%Pf0{URCt{2+P`btKoke?Z;G=7Vlo&EhHgU01}%nyg>lraxML07Oy>@P%>Dy9 z8$5JL3Z`439St6vP!jMELm(u^kRf0Yh!A8*h8SKax22V>J4q*3&igE0bU)td9Xjg? zV2m-w7-LL{H*eq5D%$>6+MTX+AYs~s@hpi!0J*!F(-_J-faI0NmX_{`xKCvp6_B4eame_!KW|6^xySs8bUnwE&{Qo?MRo z?wr)VUeHJEqz0*%iv;`*77(9kuRoyIuU^D{Z7THo1Cl)lB>5yzF3iE^NgspbXv-L5 zj4{R-V~jDzSc2B(eO?r4d7r1WHkgJ?P__WFCGoW+S`uF+rCT7$GIv-?%H#ENkz`Ba z%UFg+fSQ77tQpX1RHSbiMT`U>UYEB85`*(Rfmi<5P&oVS}r!zEdlb+|Y`0(|IZ${{P3GGgo_V?ZeW=y1%ng{MqXTIMB zs48p`eR`u++42|mLA~kK3(r^Y*#xgV-4zGm1N=fWH!6cnrjyK{ugQSv7 v`mbdMj7Ar+9l%m44S&OxdD6i%#-#lOJc~dlv8Hyb00000NkvXXu0mjf&;T-z diff --git a/Resources/Textures/_CP14/Objects/Weapons/Melee/Pickaxe/pickaxe.rsi/wielded-inhand-right.png b/Resources/Textures/_CP14/Objects/Weapons/Melee/Pickaxe/pickaxe.rsi/wielded-inhand-right.png deleted file mode 100644 index 1818ad4ee16d022183d380ace0e624444b28bb5f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 672 zcmV;R0$=@!P)Px%T1iAfRCt{2+P{n1U>FDRZ_C|s&~Sqg2;3%~JqR3yf+AkJm3CBc%hGo7U+@p; zEI4#&2iHP7resx0g+P1LwRZ>|3PKxOpE!w3a%cY$ddRLMQmA22a6ke_5ix3GG{nN>cIg{QnQm^fB1Y) zToc97HI?=3f$#oX323!Dcv8%vYmWf{{m}%@a5}%xE+(aGkDk2HNO*3HklJYke-*L^=Si`i~^QVsk1;LX70LMp%0DwnrzuXR4W(QFK2*nKYyb?ns}Di!}xc-G;@Yi=$gt-Qqo3B@qsSj zS6=3UJHx4v!2Rx>&!*Y&(cyeuLYPFXJkc;MrpOY`&rj#aMiDqys#MvlmoMP;05*|` zm9N0f%@q`Rw#-a)SNHPq{TtsE9{m3K?CjMLf`5zoNW7`h{Vwg;#(hz$RN3X__0|Fx zEzoDMXAdIj?y;5B6{JAGc|fb}y~b{@?DY=`j*>tKNt!>z6)kX;$7-Pf0000Px$lSxEDR9J=Wm9b93P!xv08bcV+6ef&iAatN15EvYYkKqK77jRNXM?zeE2#h8s zF7OJ1Cd6nYwG0qqB#{Y7bTBU00ZVXzQd`ua|8$3Y@A=O8&$$;odGhqflB_lqb`L}% zsR5uj4a%n{mS^l})hf8TPNg%X(is2&xCSy8z|0)r;r@z1}n^6^q28s?(T@19ZCW$vRiab6!59aeDGcIU;3p`C z%Lix~4GEx9sRCnL#M%adb(RMr8wxOx21NIITl6GGh# za(r2{eV?TTRx)}$>3Q@4z|qdOZ980h*Ryd|L}Z`sO1S#5Xo@1_fS-u$Tev4&1(=2a zxNfyA?{^)*F2qs*Ob7ru;GYYzG=OOc7*ETu11tjJ_#Lp)tjs-m`ZxLnLL7zCHX_ka P00000NkvXXu0mjfrdq^p diff --git a/Resources/Textures/_CP14/Objects/Weapons/Melee/Shovel/shovel.rsi/inhand-left.png b/Resources/Textures/_CP14/Objects/Weapons/Melee/Shovel/shovel.rsi/inhand-left.png deleted file mode 100644 index 1a560d037bed5a2382924fc36ae2d941d9aa7f49..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 772 zcmV+f1N;1mP)Px%zDYzuRCt{2n$K$!K@`WoF-1WzXfMH7X-mT<uGQzSd0D!cS5j(qku0}6yWd0iY zY_2TQMut2RSR>#`LWicsTtDj&3IlOo7O=6t2Ft48)yo&2T29#vaIWt@czP;BWP)Px%&PhZ;RCt{2n$K$!K^(wHcj%4 z-T(rDKp+t4vbvNa`E-(;wGK1n(@C8sO+8$Sb4ql&YO?4WPxh1~~Q^V93V$3Rmj@vlv#uXgmdPiy<=@ z8qhyFMqnEBLW^TKx`I`dE~z)#TvdP>&Ay!kY0)*HTH7L}a)khZs&-H+S4g$C#dIZ< z%9T@ZzTRk`^g$0@10*SfVj<_GKG&Jodm+B~$A5oA*8uGX&6bRvmW*N{2T95}q0>{= ztQr8|q{CY0HB(q+t&oGNb}$%@F&K`asvW~?{<+pylr9+z#{gy(kB7;7|Vh9U&_6=_K*%_PF5@ z84cRJofS6LS4b=pM(^Md+j2*DNla}(@8HlGWgbw@WyqVa695zEZpu?Q;)+(D3=jx> z$b*~LTp5DYUjeVE*0zWwW$@(bGkp2{0m}>D006Jv4PAL2GX`iK*C-Zp*a6Ug`_a|s zTG}(ur<3Hy)wpA42_X{W=qE9E6dp5bLCM0 zY*auZ8p4lD*YRTev13&L;8dh_|K2V3lBiO-LbL-2^AS3)m|hOwy>lDQmP{Q#vyP<_ zt2f$2RXdQR4BO>Ofu%`s_V#~$vWzl#ma()Wl+C6B+7RIJ(1c@%7+N3@@Xk+{_5Nef SRC}rb0000+b{yuFDJ0gnVHSnR=|nNzov5 zbG(7M^^Tb{TXWAA?u^r~mKWzZK7IQ8q<#DfN)Yht@QVA>`OD2OmC5E>1y@!UR5ot^ z&L6xrVxfqG(Vjz(D>7DzX-{FAv3K6%r&eyWp3dFL=EeACn|6Ni6o!UXx5|}RmNGCT z?5z0YBa+lz#1LC-&|ops>h>$&EPIIqDm?pamq+R?HfRv|cQU@U>aBg|7r{cKsgn&H zzLY-Dtgi`u`*fGaM$J>_{;uzUgBS6JhEuM}_1?YT*JosDWZH9;@4(ku#Px$MoC0LRCt{2+96NFKor37H$re&FcYYb36ciYiH=!pMI9etejlVsNzk>3C9_k@ zY8n!fCQ~zf0vwj)P)lGz4DMaqga6Op>)p$}SMg2+000000KmfC&6OGU`=;%E{KS!F zu-CVDxi~x34C$O|0%oH?(%@V(q;qNs$nwH$E)%(bInfH)2$clX_11`ptjkKCpO!t1 zm`zbFf%)TuSBDo-PJoY`CLl?tR=-5s^@mVNKo|~slQ@zrFTQMe97k4hZPy<{wPttC za8*{aE-RIukfc*Hjw6}Gk%ZyEyB-4o00000008*Y_GbfK=VUUpn-92ldp)%Nj@Prn z*(k7%ajdY9R%Cf$HX$=aydjtT$fARr!*ktH#ToPx$hDk(0R9J=Wl&?<$VHkj)a|Qx)NYTyPECh}lPJ>gUe*nSa27`^F!6X(9j=&6B z#AL8SGQuBV^2bIvhC7ZxVZw&xAQ+tG3=DP~KfF&-%RTYC_uhNn_j}(17Z(>7mw!eQ z2~NaQ7JwR7h{hu5)g}OyvPPj$pudanZ4ub!I zQ3REBE1BE_dUMceXc*0=Px%0ZBwbRCt{2+A&BYK@ds+dd5`f^58#~o1}P={hJEg!~4ao)RA9@~ln0Kj?g4xQWE#ITeuU1C#!Y<5236!P$@^~deArHprlkPMiE(V5{dqFi3l2x)SOjCD9*vt6o59F?tS@Jzm`e{- zSmOoQ+4YphtCb!3_4_XlFFFG)E3MPvuwY80VmK21h$4B}fI9~qUUUYEWnD8G#zz#f z;rm_js&!F0G_|q`s+=)eSpb#(`vO=e=mWv^d;5Wv-LvFYB=~>v`O}7#IS^4i`~wfA V$G%-s=Z63Q002ovPDHLkV1iKP3M>Es diff --git a/Resources/Textures/_CP14/Objects/Weapons/Melee/Sickle/sickle.rsi/inhand-right.png b/Resources/Textures/_CP14/Objects/Weapons/Melee/Sickle/sickle.rsi/inhand-right.png deleted file mode 100644 index 894bca78f1d158527d659bf4496b355483ba3044..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 601 zcmV-f0;c_mP)Px%6G=otRCt{2+OcaBVHn5pZ=`E+P;_epg=mLDsUUGkdy~+qkRfC#(y@r(V>m>R4qZh-DD6^OTLK-@3WX?L6h)*%7vXhiPp(Of?cMcyZ|?V5G9>rreV@Gd z-kbM%Ktx1DL_|bHY&JhLVP>bs&3Uf5a#5YR3?KJ@a(#G+^8{h&B0H3}*1i~@G zE>kPP!gj0cLK{5UJc7;Fj26d$F@kK;fAen{6YD9^s{jG|6d~k6uOfsj8|d`-S>!$dv2+$7*f#wk nf&T)*&Mnxt=dH#_MC|qlc#hNWj0l;j00000NkvXXu0mjf7rGgG diff --git a/Resources/Textures/_CP14/Objects/Weapons/Melee/Sword/sword.rsi/equipped-NECK.png b/Resources/Textures/_CP14/Objects/Weapons/Melee/Sword/sword.rsi/equipped-NECK.png deleted file mode 100644 index 98b12ac1b24439ba7fdd592426ae7c7fa3874ed1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 478 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGojKx9jP7LeL$-D%zXL!0ehE&XX zdq>faIZ)u(NB$=Fg!nKM-^p7`O+YYCi(~U)^UQXvoP&W3S zq&2&)lfg`@%gONAsb%p>4faf_J)3pqn9jPx%8%ab#RA_>nskp7~w!cl;)0B1q(Kr;-Dg4HiZN`39gb!3$fs$ z(4~XmB4VMXog8c-(4|gwiO_$fDK$Y#FErCBQczqzhmY?9(hkY}Q}~|gzTv*S&%N*a z8v+`QMx)VaG#ZU24QeZOv43zVYAbb-Rt-a8Uf$YR2f(o{_74tIkq9Nw*lx18upFGz z=tL-i_SY5w)yZiZJ06g{L?{7}T>v>wj%@+SN`w;lw6<)hE&w!kJRI9%Yhyhz2_uS2 za(P!&r>26lV_U&)Jbm&glHWLq$SzkBDw#@Um+Is+0CV#*u}MUFaW3zQV$luGO2Qe* z#@30*FCET~3DeA=L`r2h)^Q4*LVvT{tQ)@HWp?%rAR~74%2fa+9#kSkgYS0%DOoAx1;EV5 zwSj7hT>yHEtqM2I49|1F0XToz;`Q5IHalHb_u75elZXKH#^%*s6M*rFdjLFp{Ep3z z6#J(I0KUvW6lX`rf$)VZ5)-Ht^5V|5Q`9~m1%>|{GAKA_0C@3!upNjkg^uIphgLA_ zt9xzZ`_V62oo@i#zitndOo@)rabzt^j991H_I?1+^t`@mN?ib?#O;gcP$Sk)q$WB- vC!xN&N~Zso8<#Gm_V0#9qtR$InnCyjmKW7`bu9{c00000NkvXXu0mjfzH|yi diff --git a/Resources/Textures/_CP14/Objects/Weapons/Melee/Sword/sword.rsi/inhand-left.png b/Resources/Textures/_CP14/Objects/Weapons/Melee/Sword/sword.rsi/inhand-left.png deleted file mode 100644 index 9aa89dc609c1e37cf754a5189abe3971e1aa30b7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 767 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGojKx9jP7LeL$-HD>VA|>F;uumf z=k1-1-NKF{Y#;Kke%tZrK~CG#O|2Vp*Z7EfOx2oNwD#*wkAHlg$*;1H>RknTqnG#_J99->h&}4YTmzXO?}Sjf(hD9Fn{Xw|u|vy|L%=K9#cE75`d^1wFRzm2HxavgEP`RTz`DF`txs^yTgq-(D!5nw-pVAZM@OPPzBBzdpQDZHN^(f8QkQ_kwL7 zp8hm>+AFUczG9Wvo2XgKJPqA^)P$cXEIIT(xRT}R@dFtVZ4*1g|Xw&~6( zUbOIk->LNrZdL`Kxi)*zs#S+9+a;9ud{_F zGheauuqfPQy|zl;K!8EvGOJ~b_f>ugPK9#DhJ(8lS{fu4uYASc!@}@pm%=d%5Ale# zbq4|%gklrc{$g}yWH_7`5IOA`P_LLnXz0;}&L8fnch28Ye>#LAlH=ime#O;5vv?j% zh@IfPW!KMTmG38CdCjSW34Y~g@SWP=@a6HHTRWpSOX{6pUS9Q?@gYN;zTD$CUtXjO zJUwaXc6#a))ftOF-TYP)v)o4c(dEg@3(n2_*H-VL^_&?P#IEc9)wu1*jW+R3{xtcE zV!PGKGhHW&jy_LzF?2g3anZzg(=|b7-cqCD<^yj($5bw9C=>WxIM=T3=f3%cB^9e= zFI<1y@n`$HO2d^3D(zM?Up4Hj6PR>Y!Su?>5{B5j1}aVyq+WeF&!Vu>`bwtNT)tiI z&-zwIDOg@>WBlU5Uz)^Vd&zmOghTtW2x+zp3k|PyGQP>=MG~%7XJfd#(2pm<|M%M0 hbC2!>rmQ7T+4c7a303!8$p@xr22WQ%mvv4FO#sYZX&(Rp diff --git a/Resources/Textures/_CP14/Objects/Weapons/Melee/Sword/sword.rsi/inhand-right.png b/Resources/Textures/_CP14/Objects/Weapons/Melee/Sword/sword.rsi/inhand-right.png deleted file mode 100644 index be1811c5cff8886efcd9ed3a7d9ca167ffeb788e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 780 zcmV+n1M~ceP)Px%#z{m$RCt{2+_7)dKorOE7htVAR4PKUtj0n}Uc(kKL}JR64RvL17Zi#A0%d`@ zD}pH#QzcJkDr+T%16j9##DMq%u0wQD3JLX{>x-NFes(+7{ob?VwD&{+0000000000 z000000O*4AlZhD*a?|uY_nMwyJjl)Y$)xdx+%>23i)~-R!g!FIJV~MpKtv=@lEz)| zpvl4GL2kbP{3DlI_nMsNt~)y(ne<>^L`0syn>($Aa{%^sQ~mlaAHM!@J$$FUe)d@G z!uO{$$+FD35WOl_DP_LBc_ku?AYQ&NqU!)#i2dnI%CeLsNn|t{g$bZ23Zu1_;czH6 z2-nuzC9CV<+6B(HAf=SCiTkwNE=to>wANBpmGiOAUqkJOq-pB>VY@2JvR;xTqO}&K zl+(8&rvQ{vMr%#=uVD+)wF{gAp!zqnT_7S(T~Ip!ds3=@GoNQc?EtE(60J4W{~tbG zP%8kczdqLjb$SL+{Wr_9tmm>$wF5}glL$WPiK-I z>@OGo=x|ToPM!w6hA98#-0peMTFax)AD444K7F|iz8?& z+HRlL19EO!8O0!Y0CYh|FpCHP5W6cz|3(A!;p<}n0000< KMNUMnLSTZWTxcBt diff --git a/Resources/Textures/_CP14/Objects/Weapons/Melee/ThrowableSpear/throwableSpear.rsi/icon.png b/Resources/Textures/_CP14/Objects/Weapons/Melee/ThrowableSpear/throwableSpear.rsi/icon.png deleted file mode 100644 index f58c5a4044b369b2e80da34b40b0a9a4cf140b8b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 469 zcmV;`0V@89P)Px$k4Z#9R9J=WmOoFzP!z>ajUfySbu_jygbozr&Y#b~WWofiJCnwdIOtdKBQQcj z!mdI>j7B3c)ELqdnA%1i49j&Y0ioJg-h+j+^`(9N^}O42FR;~CGa8s9y1KrhjRFkJ z5tWMN&4G9j*<79)%?>r19ibr7GJw~v1pv6LRFH^kI6BsGes;QWFAwefUN}_ur!Pvx zHFO?sQLEKaDwc&fvAb;X`RQ@)+P25IzpD#zz<1M9u}p9825fr_>2m}C=vkH!2w!D$ zc>(}kQ7DttD3jEKojgSSUh2^(;$rzrLZ$5%6>(Fn|Z~VtqiB zBe*!pae-h0@E}Zg0%PcKfnWvz=4)V8h)@6kP;GZ5W9R??3h7j6h?T3kkWP_yum@x4 zpxW*-@5kkL$|N;X?)!U7?z zy9I?1+Fo@Px$?@2^KRCt{2nlWp_P!Pw@(p4M;U4l4>G((rnLbGOalPn!NyZa$J2`<^P_8W9j z>`)v#*nmSjNXaC15SIrQUWXz$v@|hyFFC#69FBW;|9kJ{-2n)KAP9mWFe3C_J?VEf zhOJ8sBc^%V?Eu!Byxqu$+nZ}`TNX<80RS$r44L9{`<1r~`GK8%0A>o1>?3C%fItBh zP6E(npG66Hj;)ugEiB@=gl!u=02EHLgQ^TDAS(gSu~`IxBmm7?8O09O&VL9=03Kf! zC4ip=WU*u7+$Sr6{fPiKT4<-l+hXr)x5teVWeQHr`S zV?RUV=?s#p;AAPP3IstA1VIplQzGdM0n7P-B%sX@O#0o_4;p!s<~8}>zrm072JWBV z*}U@u5WOaI>h^H*m4veofRHDiW9zIfF_WM-9`^Outd*hHt{1+!K{6n*h~rYPU57@s zV&oyT(25(50v$#3#C?Hd@En`Gjh>l(Ah7M4m?0=MEV54pM)p~Z$^FGyPmYGZiz0ot z3NST6Qb?3idN>NsbK?WRZL+c}fs>pdNrSZ51zf%XZ6xA=gDpdz00000NkvXXu0mjf DQ6Kq0 diff --git a/Resources/Textures/_CP14/Objects/Weapons/Melee/ThrowableSpear/throwableSpear.rsi/inhand-right.png b/Resources/Textures/_CP14/Objects/Weapons/Melee/ThrowableSpear/throwableSpear.rsi/inhand-right.png deleted file mode 100644 index 0acd4a80e85e006606dc2b3bb56f5a7bb065bb04..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 580 zcmV-K0=xZ*P)Px${z*hZRCt{2+C6K+Ko|$`OX*r1gmyWkgOmoegR@{(C%2Ntp|g8GL?^+;Eo=NYSO@THEKnPO6l>+7jm>6>} zHCc+A06;44c5s>Gki&IH7XlZu$8!0GXk=sHrzx*|k& zK-j?jv!~?zXIT*2LO2tCtHCsDC<Vo&^ttY2>woz-0i|LAUDwOvD$3YkG-gi$A%u2&eQicR6qN$L z3pMd;3J^l*U^JFhi+uYw`Tzg`001CL(*5_m+xbxx_TN#m{dZX$+oHoxE7@1!pH$j; zZPrYB^Z1Tt%T;=fs`QCWNUbV$000_lH>y;`M(ttR4W`YpEqeF*iJm^bgtX6nLL`gl z0zwEa6$|L{>;!qfZ{%j1&cs+q97BW<>bjGB?@x$&I?VcyC%OlScsi_9F7gp`7An3Y z{FV5aoJ#KqLYNpU{k CrystallEdge migration zone end