From 4938553945e5ac009c2aa8332b9f7b4a65357fd4 Mon Sep 17 00:00:00 2001 From: CaypenNow <66198468+CaypenNow@users.noreply.github.com> Date: Thu, 4 Apr 2024 18:44:55 +0500 Subject: [PATCH] [Feat] Modules Update (#268) * add new module slot * update priority * sprites + changes in system * sprites on SMGs + fix examine * sprite fix --- .../WeaponsModules/WeaponModulesVisuals.cs | 15 ++- .../WeaponModules/WeaponModulesSystem.cs | 25 +++- .../Systems/SharedGunSystem.Interactions.cs | 8 +- .../WeaponModules/BaseModuleComponent.cs | 3 + .../WeaponModules/WeaponModulesComponent.cs | 3 +- .../Objects/Weapons/Guns/Rifles/rifles.yml | 79 ++++++++---- .../Objects/Weapons/Guns/SMGs/smgs.yml | 121 +++++++++++++++--- .../Objects/Weapons/Guns/Modules/modules.yml | 43 +++++-- Resources/Prototypes/_White/tags.yml | 8 +- .../Weapons/modules.rsi/barrel_module.png | Bin 0 -> 2805 bytes .../Weapons/modules.rsi/handguard_module.png | Bin 0 -> 2805 bytes .../Objects/Weapons/modules.rsi/meta.json | 6 + .../Weapons/modulesOnSMGs.rsi/accelerator.png | Bin 0 -> 178 bytes .../modulesOnSMGs.rsi/barrel_module.png | Bin 0 -> 152 bytes .../Weapons/modulesOnSMGs.rsi/flamehider.png | Bin 0 -> 151 bytes .../modulesOnSMGs.rsi/handguard_module.png | Bin 0 -> 152 bytes .../Weapons/modulesOnSMGs.rsi/laser.png | Bin 0 -> 152 bytes .../Weapons/modulesOnSMGs.rsi/light.png | Bin 0 -> 154 bytes .../Weapons/modulesOnSMGs.rsi/meta.json | 32 +++++ .../Weapons/modulesOnSMGs.rsi/silencer.png | Bin 0 -> 145 bytes .../modulesOnWeapon.rsi/barrel_module.png | Bin 0 -> 152 bytes .../modulesOnWeapon.rsi/handguard_module.png | Bin 0 -> 152 bytes .../Weapons/modulesOnWeapon.rsi/meta.json | 6 + 23 files changed, 275 insertions(+), 74 deletions(-) create mode 100644 Resources/Textures/White/Objects/Weapons/modules.rsi/barrel_module.png create mode 100644 Resources/Textures/White/Objects/Weapons/modules.rsi/handguard_module.png create mode 100644 Resources/Textures/White/Objects/Weapons/modulesOnSMGs.rsi/accelerator.png create mode 100644 Resources/Textures/White/Objects/Weapons/modulesOnSMGs.rsi/barrel_module.png create mode 100644 Resources/Textures/White/Objects/Weapons/modulesOnSMGs.rsi/flamehider.png create mode 100644 Resources/Textures/White/Objects/Weapons/modulesOnSMGs.rsi/handguard_module.png create mode 100644 Resources/Textures/White/Objects/Weapons/modulesOnSMGs.rsi/laser.png create mode 100644 Resources/Textures/White/Objects/Weapons/modulesOnSMGs.rsi/light.png create mode 100644 Resources/Textures/White/Objects/Weapons/modulesOnSMGs.rsi/meta.json create mode 100644 Resources/Textures/White/Objects/Weapons/modulesOnSMGs.rsi/silencer.png create mode 100644 Resources/Textures/White/Objects/Weapons/modulesOnWeapon.rsi/barrel_module.png create mode 100644 Resources/Textures/White/Objects/Weapons/modulesOnWeapon.rsi/handguard_module.png diff --git a/Content.Client/_White/WeaponsModules/WeaponModulesVisuals.cs b/Content.Client/_White/WeaponsModules/WeaponModulesVisuals.cs index 40f840be23..cdd8ef309d 100644 --- a/Content.Client/_White/WeaponsModules/WeaponModulesVisuals.cs +++ b/Content.Client/_White/WeaponsModules/WeaponModulesVisuals.cs @@ -16,12 +16,19 @@ public sealed partial class WeaponModulesVisuals : VisualizerSystem(uid, ModuleVisualState.Module, out var module, args.Component) && module.Length != 0 && module != "none") + if (AppearanceSystem.TryGetData(uid, ModuleVisualState.HandGuardModule, out var handguardModule, args.Component) && handguardModule.Length != 0 && handguardModule != "none") { - args.Sprite.LayerSetState(ModuleVisualState.Module, module); - args.Sprite.LayerSetVisible(ModuleVisualState.Module, true); + args.Sprite.LayerSetState(ModuleVisualState.HandGuardModule, handguardModule); + args.Sprite.LayerSetVisible(ModuleVisualState.HandGuardModule, true); + } + + if (AppearanceSystem.TryGetData(uid, ModuleVisualState.BarrelModule, out var barrelModule, args.Component) && barrelModule.Length != 0 && barrelModule != "none") + { + args.Sprite.LayerSetState(ModuleVisualState.BarrelModule, barrelModule); + args.Sprite.LayerSetVisible(ModuleVisualState.BarrelModule, true); } if (AppearanceSystem.TryGetData(uid, Modules.Light, out var data, args.Component)) diff --git a/Content.Server/_White/WeaponModules/WeaponModulesSystem.cs b/Content.Server/_White/WeaponModules/WeaponModulesSystem.cs index 1251efa1d0..82edaec690 100644 --- a/Content.Server/_White/WeaponModules/WeaponModulesSystem.cs +++ b/Content.Server/_White/WeaponModules/WeaponModulesSystem.cs @@ -1,9 +1,7 @@ using System.Diagnostics.CodeAnalysis; using Content.Shared._White.WeaponModules; using Content.Shared.Weapons.Ranged.Components; -using Content.Shared.Weapons.Ranged.Events; using Content.Shared.Weapons.Ranged.Systems; -using Linguini.Syntax.Ast; using Robust.Server.GameObjects; using Robust.Shared.Containers; @@ -11,7 +9,11 @@ namespace Content.Server._White.WeaponModules; public sealed class WeaponModulesSystem : EntitySystem { - protected const string ModulesSlot = "gun_modules"; + protected static readonly Dictionary Slots = new() + { + { "handguard_module", ModuleVisualState.HandGuardModule }, { "barrel_module", ModuleVisualState.BarrelModule } + }; + [Dependency] private readonly PointLightSystem _lightSystem = default!; [Dependency] private readonly SharedAppearanceSystem _appearanceSystem = default!; [Dependency] private readonly SharedGunSystem _gunSystem = default!; @@ -40,7 +42,7 @@ public sealed class WeaponModulesSystem : EntitySystem string containerId, [NotNullWhen(true)] out WeaponModulesComponent? weaponModulesComponent) { if (!TryComp(weapon, out weaponModulesComponent) || !TryComp(weapon, out var appearanceComponent) || - containerId != ModulesSlot) + !Slots.ContainsKey(containerId)) { weaponModulesComponent = null; appearanceComponent = null; @@ -49,23 +51,32 @@ public sealed class WeaponModulesSystem : EntitySystem if(!weaponModulesComponent.Modules.Contains(module)) weaponModulesComponent.Modules.Add(module); - _appearanceSystem.SetData(weapon, ModuleVisualState.Module, component.AppearanceValue, appearanceComponent); + + if (!Slots.TryGetValue(containerId, out var value)) + return false; + + _appearanceSystem.SetData(weapon, value, component.AppearanceValue, appearanceComponent); return true; } private bool TryEjectModule(EntityUid module, EntityUid weapon, string containerId, [NotNullWhen(true)] out WeaponModulesComponent? weaponModulesComponent) { - if (!TryComp(weapon, out weaponModulesComponent) || !TryComp(weapon, out var appearanceComponent) || containerId != ModulesSlot) + if (!TryComp(weapon, out weaponModulesComponent) || !TryComp(weapon, out var appearanceComponent) || !Slots.ContainsKey(containerId)) { weaponModulesComponent = null; appearanceComponent = null; return false; } + if(weaponModulesComponent.Modules.Contains(module)) weaponModulesComponent.Modules.Remove(module); - _appearanceSystem.SetData(weapon, ModuleVisualState.Module, "none", appearanceComponent); + + if (!Slots.TryGetValue(containerId, out var value)) + return false; + + _appearanceSystem.SetData(weapon, value, "none", appearanceComponent); return true; } diff --git a/Content.Shared/Weapons/Ranged/Systems/SharedGunSystem.Interactions.cs b/Content.Shared/Weapons/Ranged/Systems/SharedGunSystem.Interactions.cs index da185c01f0..9b5e969dc9 100644 --- a/Content.Shared/Weapons/Ranged/Systems/SharedGunSystem.Interactions.cs +++ b/Content.Shared/Weapons/Ranged/Systems/SharedGunSystem.Interactions.cs @@ -1,3 +1,4 @@ +using System.Linq; using Content.Shared._White.WeaponModules; using Content.Shared.Actions; using Content.Shared.Examine; @@ -30,10 +31,9 @@ public abstract partial class SharedGunSystem return; } - foreach (var module in weaponModulesComponent.Modules) - { - args.PushMarkup(Loc.GetString("gun-modules", ("modules", Name(module)))); - } + var moduleNames = weaponModulesComponent.Modules.Select(module => Name(module)).ToArray(); + + args.PushMarkup(Loc.GetString("gun-modules", ("modules", string.Join(", ", moduleNames)))); } if (!TryComp(uid, out var comp)) diff --git a/Content.Shared/_White/WeaponModules/BaseModuleComponent.cs b/Content.Shared/_White/WeaponModules/BaseModuleComponent.cs index 73a4a4b938..56a6f952e1 100644 --- a/Content.Shared/_White/WeaponModules/BaseModuleComponent.cs +++ b/Content.Shared/_White/WeaponModules/BaseModuleComponent.cs @@ -8,4 +8,7 @@ public partial class BaseModuleComponent : Component { [ViewVariables(VVAccess.ReadWrite), DataField("value")] public string AppearanceValue; + + [ViewVariables(VVAccess.ReadWrite), DataField("module_type")] + public string ModuleType; } diff --git a/Content.Shared/_White/WeaponModules/WeaponModulesComponent.cs b/Content.Shared/_White/WeaponModules/WeaponModulesComponent.cs index 783648bc3f..380fcb14f7 100644 --- a/Content.Shared/_White/WeaponModules/WeaponModulesComponent.cs +++ b/Content.Shared/_White/WeaponModules/WeaponModulesComponent.cs @@ -19,7 +19,8 @@ public partial class WeaponModulesComponent : Component [Serializable, NetSerializable] public enum ModuleVisualState : byte { - Module + BarrelModule, + HandGuardModule } [Serializable, NetSerializable] diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Rifles/rifles.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Rifles/rifles.yml index 9f71109abf..36f36a101a 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Rifles/rifles.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Rifles/rifles.yml @@ -44,19 +44,10 @@ whitelist: tags: - CartridgeLightRifle - gun_modules: - name: Modules - insertSound: /Audio/White/Gun/Modules/insertmodule.ogg - ejectSound: /Audio/White/Gun/Modules/ejectmodule.ogg - priority: 2 - whitelist: - tags: - - BaseModule - type: ContainerContainer containers: gun_magazine: !type:ContainerSlot gun_chamber: !type:ContainerSlot - gun_modules: !type:ContainerSlot - type: StaticPrice price: 500 @@ -73,10 +64,14 @@ map: [ "enum.GunVisualLayers.Base" ] - state: mag-0 map: [ "enum.GunVisualLayers.Mag" ] - - state: laser + - state: barrel_module visible: false sprite: White/Objects/Weapons/modulesOnWeapon.rsi - map: [ "enum.ModuleVisualState.Module" ] + map: [ "enum.ModuleVisualState.BarrelModule" ] + - state: handguard_module + visible: false + sprite: White/Objects/Weapons/modulesOnWeapon.rsi + map: [ "enum.ModuleVisualState.HandGuardModule" ] - type: Gun fireRate: 5 soundGunshot: @@ -91,7 +86,7 @@ startingItem: MagazineLightRifle insertSound: /Audio/Weapons/Guns/MagIn/ltrifle_magin.ogg ejectSound: /Audio/Weapons/Guns/MagOut/ltrifle_magout.ogg - priority: 2 + priority: 4 whitelist: tags: - MagazineLightRifle @@ -102,19 +97,28 @@ whitelist: tags: - CartridgeLightRifle - gun_modules: - name: Modules + handguard_module: + name: Handguard Module insertSound: /Audio/White/Gun/Modules/insertmodule.ogg ejectSound: /Audio/White/Gun/Modules/ejectmodule.ogg priority: 2 whitelist: tags: - - BaseModule + - BaseHandGuardModule + barrel_module: + name: Barrel Module + insertSound: /Audio/White/Gun/Modules/insertmodule.ogg + ejectSound: /Audio/White/Gun/Modules/ejectmodule.ogg + priority: 3 + whitelist: + tags: + - BaseBarrelModule - type: ContainerContainer containers: gun_magazine: !type:ContainerSlot gun_chamber: !type:ContainerSlot - gun_modules: !type:ContainerSlot + handguard_module: !type:ContainerSlot + barrel_module: !type:ContainerSlot - type: MagazineVisuals magState: mag steps: 1 @@ -180,10 +184,14 @@ map: [ "enum.GunVisualLayers.Base" ] - state: mag-0 map: [ "enum.GunVisualLayers.Mag" ] - - state: laser + - state: barrel_module visible: false sprite: White/Objects/Weapons/modulesOnWeapon.rsi - map: [ "enum.ModuleVisualState.Module" ] + map: [ "enum.ModuleVisualState.BarrelModule" ] + - state: handguard_module + visible: false + sprite: White/Objects/Weapons/modulesOnWeapon.rsi + map: [ "enum.ModuleVisualState.HandGuardModule" ] - type: Clothing sprite: Objects/Weapons/Guns/Rifles/lecter.rsi - type: Gun @@ -196,7 +204,7 @@ startingItem: MagazineRifle insertSound: /Audio/Weapons/Guns/MagIn/ltrifle_magin.ogg ejectSound: /Audio/Weapons/Guns/MagOut/ltrifle_magout.ogg - priority: 2 + priority: 4 whitelist: tags: - MagazineRifle @@ -207,19 +215,28 @@ whitelist: tags: - CartridgeRifle - gun_modules: - name: Modules + handguard_module: + name: Handguard Module insertSound: /Audio/White/Gun/Modules/insertmodule.ogg ejectSound: /Audio/White/Gun/Modules/ejectmodule.ogg priority: 2 whitelist: tags: - - BaseModule + - BaseHandGuardModule + barrel_module: + name: Barrel Module + insertSound: /Audio/White/Gun/Modules/insertmodule.ogg + ejectSound: /Audio/White/Gun/Modules/ejectmodule.ogg + priority: 3 + whitelist: + tags: + - BaseBarrelModule - type: ContainerContainer containers: gun_magazine: !type:ContainerSlot gun_chamber: !type:ContainerSlot - gun_modules: !type:ContainerSlot + handguard_module: !type:ContainerSlot + barrel_module: !type:ContainerSlot - type: MagazineVisuals magState: mag steps: 1 @@ -242,7 +259,7 @@ startingItem: MagazineRifleRubber insertSound: /Audio/Weapons/Guns/MagIn/ltrifle_magin.ogg ejectSound: /Audio/Weapons/Guns/MagOut/ltrifle_magout.ogg - priority: 2 + priority: 4 whitelist: tags: - MagazineRifle @@ -253,11 +270,19 @@ whitelist: tags: - CartridgeRifle - gun_modules: - name: Modules + handguard_module: + name: Handguard Module insertSound: /Audio/White/Gun/Modules/insertmodule.ogg ejectSound: /Audio/White/Gun/Modules/ejectmodule.ogg priority: 2 whitelist: tags: - - BaseModule + - BaseHandGuardModule + barrel_module: + name: Barrel Module + insertSound: /Audio/White/Gun/Modules/insertmodule.ogg + ejectSound: /Audio/White/Gun/Modules/ejectmodule.ogg + priority: 3 + whitelist: + tags: + - BaseBarrelModule diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/SMGs/smgs.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/SMGs/smgs.yml index 7e968d088b..790c27f414 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/SMGs/smgs.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/SMGs/smgs.yml @@ -91,6 +91,14 @@ map: ["enum.GunVisualLayers.Base"] - state: mag-0 map: ["enum.GunVisualLayers.Mag"] + - state: barrel_module + visible: false + sprite: White/Objects/Weapons/modulesOnSMGs.rsi + map: [ "enum.ModuleVisualState.BarrelModule" ] + - state: handguard_module + visible: false + sprite: White/Objects/Weapons/modulesOnSMGs.rsi + map: [ "enum.ModuleVisualState.HandGuardModule" ] - type: Clothing sprite: Objects/Weapons/Guns/SMGs/c20r.rsi - type: Gun @@ -98,11 +106,55 @@ path: /Audio/Weapons/Guns/Gunshots/c-20r.ogg - type: ChamberMagazineAmmoProvider autoEject: true + - type: WeaponModules + - type: ItemSlots + slots: + gun_magazine: + name: Magazine + startingItem: MagazinePistolSubMachineGun + insertSound: /Audio/Weapons/Guns/MagIn/smg_magin.ogg + ejectSound: /Audio/Weapons/Guns/MagOut/smg_magout.ogg + priority: 4 + whitelist: + tags: + - MagazinePistolSubMachineGun + gun_chamber: + name: Chamber + startingItem: CartridgePistol + priority: 1 + whitelist: + tags: + - CartridgePistol + barrel_module: + name: Barrel Module + insertSound: /Audio/White/Gun/Modules/insertmodule.ogg + ejectSound: /Audio/White/Gun/Modules/ejectmodule.ogg + priority: 2 + whitelist: + tags: + - BaseBarrelModule + handguard_module: + name: Handguard Module + insertSound: /Audio/White/Gun/Modules/insertmodule.ogg + ejectSound: /Audio/White/Gun/Modules/ejectmodule.ogg + priority: 3 + whitelist: + tags: + - BaseHandGuardModule + - type: ContainerContainer + containers: + gun_magazine: !type:ContainerSlot + gun_chamber: !type:ContainerSlot + handguard_module: !type:ContainerSlot + barrel_module: !type:ContainerSlot - type: MagazineVisuals magState: mag steps: 6 zeroVisible: true - type: Appearance + - type: PointLight + enabled: false + autoRot: true - type: entity name: Drozd @@ -117,10 +169,14 @@ map: ["enum.GunVisualLayers.Base"] - state: mag-0 map: ["enum.GunVisualLayers.Mag"] - - state: laser + - state: barrel_module visible: false sprite: White/Objects/Weapons/modulesOnWeapon.rsi - map: [ "enum.ModuleVisualState.Module" ] + map: [ "enum.ModuleVisualState.BarrelModule" ] + - state: handguard_module + visible: false + sprite: White/Objects/Weapons/modulesOnWeapon.rsi + map: [ "enum.ModuleVisualState.HandGuardModule" ] - type: Clothing sprite: Objects/Weapons/Guns/SMGs/drozd.rsi - type: Gun @@ -138,7 +194,7 @@ startingItem: MagazinePistolSubMachineGun insertSound: /Audio/Weapons/Guns/MagIn/smg_magin.ogg ejectSound: /Audio/Weapons/Guns/MagOut/smg_magout.ogg - priority: 2 + priority: 4 whitelist: tags: - MagazinePistolSubMachineGun @@ -149,19 +205,28 @@ whitelist: tags: - CartridgePistol - gun_modules: - name: Modules + barrel_module: + name: Barrel Module insertSound: /Audio/White/Gun/Modules/insertmodule.ogg ejectSound: /Audio/White/Gun/Modules/ejectmodule.ogg priority: 2 whitelist: tags: - - BaseModule + - BaseBarrelModule + handguard_module: + name: Handguard Module + insertSound: /Audio/White/Gun/Modules/insertmodule.ogg + ejectSound: /Audio/White/Gun/Modules/ejectmodule.ogg + priority: 3 + whitelist: + tags: + - BaseHandGuardModule - type: ContainerContainer containers: gun_magazine: !type:ContainerSlot gun_chamber: !type:ContainerSlot - gun_modules: !type:ContainerSlot + handguard_module: !type:ContainerSlot + barrel_module: !type:ContainerSlot - type: MagazineVisuals magState: mag steps: 1 @@ -237,10 +302,14 @@ - state: mag-unshaded-0 map: ["enum.GunVisualLayers.MagUnshaded"] shader: unshaded - - state: laser + - state: barrel_module visible: false sprite: White/Objects/Weapons/modulesOnWeapon.rsi - map: [ "enum.ModuleVisualState.Module" ] + map: [ "enum.ModuleVisualState.BarrelModule" ] + - state: handguard_module + visible: false + sprite: White/Objects/Weapons/modulesOnWeapon.rsi + map: [ "enum.ModuleVisualState.HandGuardModule" ] - type: Clothing sprite: Objects/Weapons/Guns/SMGs/wt550.rsi - type: ChamberMagazineAmmoProvider @@ -258,7 +327,7 @@ startingItem: MagazinePistolSubMachineGunTopMounted insertSound: /Audio/Weapons/Guns/MagIn/smg_magin.ogg ejectSound: /Audio/Weapons/Guns/MagOut/smg_magout.ogg - priority: 2 + priority: 4 whitelist: tags: - MagazinePistolSubMachineGunTopMounted @@ -269,18 +338,28 @@ whitelist: tags: - CartridgePistol - gun_modules: - name: Modules + barrel_module: + name: Barrel Module + insertSound: /Audio/White/Gun/Modules/insertmodule.ogg + ejectSound: /Audio/White/Gun/Modules/ejectmodule.ogg + priority: 3 + whitelist: + tags: + - BaseBarrelModule + handguard_module: + name: Handguard Module insertSound: /Audio/White/Gun/Modules/insertmodule.ogg ejectSound: /Audio/White/Gun/Modules/ejectmodule.ogg priority: 2 whitelist: tags: - - BaseModule + - BaseHandGuardModule - type: ContainerContainer containers: gun_magazine: !type:ContainerSlot gun_chamber: !type:ContainerSlot + handguard_module: !type:ContainerSlot + barrel_module: !type:ContainerSlot - type: MagazineVisuals magState: mag steps: 6 @@ -304,7 +383,7 @@ startingItem: MagazinePistolSubMachineGunRubber insertSound: /Audio/Weapons/Guns/MagIn/smg_magin.ogg ejectSound: /Audio/Weapons/Guns/MagOut/smg_magout.ogg - priority: 2 + priority: 4 whitelist: tags: - MagazinePistolSubMachineGun @@ -315,14 +394,22 @@ whitelist: tags: - CartridgePistol - gun_modules: - name: Modules + barrel_module: + name: Barrel Module insertSound: /Audio/White/Gun/Modules/insertmodule.ogg ejectSound: /Audio/White/Gun/Modules/ejectmodule.ogg priority: 2 whitelist: tags: - - BaseModule + - BaseBarrelModule + handguard_module: + name: Handguard Module + insertSound: /Audio/White/Gun/Modules/insertmodule.ogg + ejectSound: /Audio/White/Gun/Modules/ejectmodule.ogg + priority: 3 + whitelist: + tags: + - BaseHandGuardModule - type: entity name: Vector diff --git a/Resources/Prototypes/_White/Entities/Objects/Weapons/Guns/Modules/modules.yml b/Resources/Prototypes/_White/Entities/Objects/Weapons/Guns/Modules/modules.yml index dd2ec684aa..9b08736e80 100644 --- a/Resources/Prototypes/_White/Entities/Objects/Weapons/Guns/Modules/modules.yml +++ b/Resources/Prototypes/_White/Entities/Objects/Weapons/Guns/Modules/modules.yml @@ -1,5 +1,5 @@ - type: entity - id: BaseModule + id: BaseHandGuardModule parent: BaseItem abstract: true components: @@ -7,17 +7,29 @@ sprite: White/Objects/Weapons/modules.rsi - type: Tag tags: - - BaseModule + - BaseHandGuardModule + - type: Item + sprite: White/Objects/Weapons/modules.rsi + size: Small + shape: + - 0,0,0,0 + - type: Appearance + +- type: entity + id: BaseBarrelModule + parent: BaseItem + abstract: true + components: + - type: Sprite + sprite: White/Objects/Weapons/modules.rsi + - type: Tag + tags: + - BaseBarrelModule - type: Item sprite: White/Objects/Weapons/modules.rsi size: Small shape: - 0,0,0,0 - layers: - - state: base - map: ["enum.GunVisualLayers.Base"] - - state: mag-1 - map: ["enum.GunVisualLayers.Mag"] - type: Appearance # modules @@ -25,10 +37,11 @@ id: LightModule description: Light module for rifles (lecter, CV, drozd, WT). name: "light module" - parent: BaseModule + parent: BaseHandGuardModule components: - type: LightModule value: "light" + module_type: "handguard_module" - type: Sprite state: light - type: Appearance @@ -37,10 +50,11 @@ id: LaserModule description: Laser module for rifles (lecter, CV, drozd, WT). name: "laser module" - parent: BaseModule + parent: BaseHandGuardModule components: - type: LaserModule value: "laser" + module_type: "handguard_module" - type: Sprite state: laser - type: Appearance @@ -49,10 +63,11 @@ id: FlameHiderModule description: Flame Hider module for rifles (lecter, CV, drozd, WT). name: "flamehider module" - parent: BaseModule + parent: BaseBarrelModule components: - type: FlameHiderModule value: "flamehider" + module_type: "barrel_module" - type: Sprite state: flamehider - type: Appearance @@ -61,10 +76,11 @@ id: SilencerModule description: Silencer module for rifles (lecter, CV, drozd, WT). name: "silencer module" - parent: BaseModule + parent: BaseBarrelModule components: - type: SilencerModule value: "silencer" + module_type: "barrel_module" - type: Sprite state: silencer - type: Appearance @@ -73,10 +89,11 @@ id: AcceleratorModule description: Accelerator module for rifles (lecter, CV, drozd, WT). name: "accelerator module" - parent: BaseModule + parent: BaseHandGuardModule components: - type: AcceleratorModule value: "accelerator" + module_type: "handguard_module" - type: Sprite state: accelerator - - type: Appearance \ No newline at end of file + - type: Appearance diff --git a/Resources/Prototypes/_White/tags.yml b/Resources/Prototypes/_White/tags.yml index eac18df38e..617474777b 100644 --- a/Resources/Prototypes/_White/tags.yml +++ b/Resources/Prototypes/_White/tags.yml @@ -65,4 +65,10 @@ id: InteractivePen - type: Tag - id: InteractiveBoard \ No newline at end of file + id: InteractiveBoard + +- type: Tag + id: BaseBarrelModule + +- type: Tag + id: BaseHandGuardModule \ No newline at end of file diff --git a/Resources/Textures/White/Objects/Weapons/modules.rsi/barrel_module.png b/Resources/Textures/White/Objects/Weapons/modules.rsi/barrel_module.png new file mode 100644 index 0000000000000000000000000000000000000000..457b77dda9c74698f7ea70d11f6444506629b535 GIT binary patch literal 2805 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 literal 0 HcmV?d00001 diff --git a/Resources/Textures/White/Objects/Weapons/modulesOnSMGs.rsi/flamehider.png b/Resources/Textures/White/Objects/Weapons/modulesOnSMGs.rsi/flamehider.png new file mode 100644 index 0000000000000000000000000000000000000000..f4c8d0d7827ca59ffd3fa90e068453184ee56aac GIT binary patch literal 151 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|L<4+6T!FN? znN?{?rKE(^GASu9FRxk#h97(X9|B6Smjw9*GyMPm|HuFT3k){Y0fl5eT^vI!dXp0* tSeqF)1TAY2<@j*=QK$iz8)F#*!_1cqPPVPaKYxEE50# literal 0 HcmV?d00001 diff --git a/Resources/Textures/White/Objects/Weapons/modulesOnSMGs.rsi/handguard_module.png b/Resources/Textures/White/Objects/Weapons/modulesOnSMGs.rsi/handguard_module.png new file mode 100644 index 0000000000000000000000000000000000000000..efe0ab5bbb1e107d0de7a77c8ced9b242d71e4b5 GIT binary patch literal 152 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|L<4+6T!FN? znN?{?rKE(^GASu9FRxk#h97(X9|B6Smjw9*GyMPm|HuFT3k){Y0fpo|T^vI!dXp0* uSe0cAjEo*lPft!xO literal 0 HcmV?d00001 diff --git a/Resources/Textures/White/Objects/Weapons/modulesOnSMGs.rsi/laser.png b/Resources/Textures/White/Objects/Weapons/modulesOnSMGs.rsi/laser.png new file mode 100644 index 0000000000000000000000000000000000000000..efe0ab5bbb1e107d0de7a77c8ced9b242d71e4b5 GIT binary patch literal 152 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|L<4+6T!FN? znN?{?rKE(^GASu9FRxk#h97(X9|B6Smjw9*GyMPm|HuFT3k){Y0fpo|T^vI!dXp0* uSe0cAjEo*lPft!xO literal 0 HcmV?d00001 diff --git a/Resources/Textures/White/Objects/Weapons/modulesOnSMGs.rsi/light.png b/Resources/Textures/White/Objects/Weapons/modulesOnSMGs.rsi/light.png new file mode 100644 index 0000000000000000000000000000000000000000..c4328d7c12c0a37971ac88002d242e8c876e2b85 GIT binary patch literal 154 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|Bm#UwT!FN? znN?{?rKE(^GASu9FRxk#h7B7wEKKoQ43y(23GxeO`2YX^kN^K~ycNIs04OHo>Eak- w(VLtg!Ky4{U}W@YYC0=pnU_dUlOi`m%PR(#>5gwTfa(}LUHx3vIVCg!0J}FVIRF3v literal 0 HcmV?d00001 diff --git a/Resources/Textures/White/Objects/Weapons/modulesOnSMGs.rsi/meta.json b/Resources/Textures/White/Objects/Weapons/modulesOnSMGs.rsi/meta.json new file mode 100644 index 0000000000..78ae1a2f9f --- /dev/null +++ b/Resources/Textures/White/Objects/Weapons/modulesOnSMGs.rsi/meta.json @@ -0,0 +1,32 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "made by CaypenNow", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "flamehider" + }, + { + "name": "silencer" + }, + { + "name": "light" + }, + { + "name": "laser" + }, + { + "name": "accelerator" + }, + { + "name": "handguard_module" + }, + { + "name": "barrel_module" + } + ] +} diff --git a/Resources/Textures/White/Objects/Weapons/modulesOnSMGs.rsi/silencer.png b/Resources/Textures/White/Objects/Weapons/modulesOnSMGs.rsi/silencer.png new file mode 100644 index 0000000000000000000000000000000000000000..11ac553fc6099c594803d25f1037dc3396f7e229 GIT binary patch literal 145 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|L<4+6T!FN? znN?{?rKE(^GASu9FRxk#h97(X9|B6Smjw9*GyMPm|HuFT3k){Y0fodpT^vI!dXp0* mSPwI7U}8+=ayzJTfQcdAf literal 0 HcmV?d00001 diff --git a/Resources/Textures/White/Objects/Weapons/modulesOnWeapon.rsi/handguard_module.png b/Resources/Textures/White/Objects/Weapons/modulesOnWeapon.rsi/handguard_module.png new file mode 100644 index 0000000000000000000000000000000000000000..efe0ab5bbb1e107d0de7a77c8ced9b242d71e4b5 GIT binary patch literal 152 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|L<4+6T!FN? znN?{?rKE(^GASu9FRxk#h97(X9|B6Smjw9*GyMPm|HuFT3k){Y0fpo|T^vI!dXp0* uSe0cAjEo*lPft!xO literal 0 HcmV?d00001 diff --git a/Resources/Textures/White/Objects/Weapons/modulesOnWeapon.rsi/meta.json b/Resources/Textures/White/Objects/Weapons/modulesOnWeapon.rsi/meta.json index 82d692646c..f3ff9201d0 100644 --- a/Resources/Textures/White/Objects/Weapons/modulesOnWeapon.rsi/meta.json +++ b/Resources/Textures/White/Objects/Weapons/modulesOnWeapon.rsi/meta.json @@ -21,6 +21,12 @@ }, { "name": "accelerator" + }, + { + "name": "handguard_module" + }, + { + "name": "barrel_module" } ] }