From 400778eb7311693d5b18a0a7621bba321156167f Mon Sep 17 00:00:00 2001 From: Injazz <43905364+Injazz@users.noreply.github.com> Date: Sun, 2 Jun 2019 04:16:55 +0500 Subject: [PATCH] improves hitscan weapons (#248) - fixes inhand sprite visibility - adds visible charge level - refactor sound recourse load, now you can specify fire sound from YAML - adds laser cannon - more powerful laser - adds new assets for cannon --- .../Ranged/HitscanWeaponVisualizer2D.cs | 33 +++++ .../HitscanWeaponCapacitorComponent.cs | 22 ++++ .../Ranged/Hitscan/HitscanWeaponComponent.cs | 7 +- Resources/Audio/lasercannonfire.ogg | Bin 0 -> 7642 bytes .../Prototypes/Entities/weapons/laserguns.yml | 51 +++++-- Resources/Textures/Objects/heavylaser.png | Bin 0 -> 1457 bytes .../laser_cannon.rsi/0-inhand-left.png | Bin 0 -> 499 bytes .../laser_cannon.rsi/0-inhand-right.png | Bin 0 -> 495 bytes .../laser_cannon.rsi/25-inhand-left.png | Bin 0 -> 505 bytes .../laser_cannon.rsi/25-inhand-right.png | Bin 0 -> 501 bytes .../laser_cannon.rsi/50-inhand-left.png | Bin 0 -> 510 bytes .../laser_cannon.rsi/50-inhand-right.png | Bin 0 -> 503 bytes .../laser_cannon.rsi/75-inhand-left.png | Bin 0 -> 506 bytes .../laser_cannon.rsi/75-inhand-right.png | Bin 0 -> 501 bytes .../Objects/laser_cannon.rsi/inhand-left.png | Bin 0 -> 484 bytes .../Objects/laser_cannon.rsi/inhand-right.png | Bin 0 -> 481 bytes .../Objects/laser_cannon.rsi/laser_cannon.png | Bin 0 -> 369 bytes .../laser_cannon.rsi/laser_cannon_0.png | Bin 0 -> 351 bytes .../laser_cannon.rsi/laser_cannon_100.png | Bin 0 -> 369 bytes .../laser_cannon.rsi/laser_cannon_25.png | Bin 0 -> 365 bytes .../laser_cannon.rsi/laser_cannon_50.png | Bin 0 -> 371 bytes .../laser_cannon.rsi/laser_cannon_75.png | Bin 0 -> 368 bytes .../Objects/laser_cannon.rsi/meta.json | 123 +++++++++++++++++ .../{100-inhand-left.png => inhand-left.png} | Bin ...{100-inhand-right.png => inhand-right.png} | Bin .../{100.png => laser_retro.png} | Bin .../{0.png => laser_retro_0.png} | Bin .../laser_retro.rsi/laser_retro_100.png | Bin 0 -> 538 bytes .../{25.png => laser_retro_25.png} | Bin .../{50.png => laser_retro_50.png} | Bin .../{75.png => laser_retro_75.png} | Bin .../Objects/laser_retro.rsi/meta.json | 124 +++++++++++++++++- 32 files changed, 349 insertions(+), 11 deletions(-) create mode 100644 Content.Client/GameObjects/Components/Weapons/Ranged/HitscanWeaponVisualizer2D.cs create mode 100644 Resources/Audio/lasercannonfire.ogg create mode 100644 Resources/Textures/Objects/heavylaser.png create mode 100644 Resources/Textures/Objects/laser_cannon.rsi/0-inhand-left.png create mode 100644 Resources/Textures/Objects/laser_cannon.rsi/0-inhand-right.png create mode 100644 Resources/Textures/Objects/laser_cannon.rsi/25-inhand-left.png create mode 100644 Resources/Textures/Objects/laser_cannon.rsi/25-inhand-right.png create mode 100644 Resources/Textures/Objects/laser_cannon.rsi/50-inhand-left.png create mode 100644 Resources/Textures/Objects/laser_cannon.rsi/50-inhand-right.png create mode 100644 Resources/Textures/Objects/laser_cannon.rsi/75-inhand-left.png create mode 100644 Resources/Textures/Objects/laser_cannon.rsi/75-inhand-right.png create mode 100644 Resources/Textures/Objects/laser_cannon.rsi/inhand-left.png create mode 100644 Resources/Textures/Objects/laser_cannon.rsi/inhand-right.png create mode 100755 Resources/Textures/Objects/laser_cannon.rsi/laser_cannon.png create mode 100755 Resources/Textures/Objects/laser_cannon.rsi/laser_cannon_0.png create mode 100755 Resources/Textures/Objects/laser_cannon.rsi/laser_cannon_100.png create mode 100755 Resources/Textures/Objects/laser_cannon.rsi/laser_cannon_25.png create mode 100755 Resources/Textures/Objects/laser_cannon.rsi/laser_cannon_50.png create mode 100755 Resources/Textures/Objects/laser_cannon.rsi/laser_cannon_75.png create mode 100644 Resources/Textures/Objects/laser_cannon.rsi/meta.json rename Resources/Textures/Objects/laser_retro.rsi/{100-inhand-left.png => inhand-left.png} (100%) rename Resources/Textures/Objects/laser_retro.rsi/{100-inhand-right.png => inhand-right.png} (100%) rename Resources/Textures/Objects/laser_retro.rsi/{100.png => laser_retro.png} (100%) rename Resources/Textures/Objects/laser_retro.rsi/{0.png => laser_retro_0.png} (100%) create mode 100644 Resources/Textures/Objects/laser_retro.rsi/laser_retro_100.png rename Resources/Textures/Objects/laser_retro.rsi/{25.png => laser_retro_25.png} (100%) rename Resources/Textures/Objects/laser_retro.rsi/{50.png => laser_retro_50.png} (100%) rename Resources/Textures/Objects/laser_retro.rsi/{75.png => laser_retro_75.png} (100%) diff --git a/Content.Client/GameObjects/Components/Weapons/Ranged/HitscanWeaponVisualizer2D.cs b/Content.Client/GameObjects/Components/Weapons/Ranged/HitscanWeaponVisualizer2D.cs new file mode 100644 index 0000000000..408362fd30 --- /dev/null +++ b/Content.Client/GameObjects/Components/Weapons/Ranged/HitscanWeaponVisualizer2D.cs @@ -0,0 +1,33 @@ +using Content.Shared.GameObjects.Components.Power; +using Content.Shared.Utility; +using Robust.Client.GameObjects; +using Robust.Client.Interfaces.GameObjects.Components; +using Robust.Shared.Interfaces.GameObjects; +using Robust.Shared.Utility; +using YamlDotNet.RepresentationModel; + +namespace Content.Client.GameObjects.Components.Power +{ + public class HitscanWeaponVisualizer2D : AppearanceVisualizer + { + private string _prefix; + + public override void LoadData(YamlMappingNode node) + { + base.LoadData(node); + + _prefix = node.GetNode("prefix").AsString(); + } + + public override void OnChangeData(AppearanceComponent component) + { + base.OnChangeData(component); + + var sprite = component.Owner.GetComponent(); + if (component.TryGetData(PowerCellVisuals.ChargeLevel, out float fraction)) + { + sprite.LayerSetState(0, $"{_prefix}_{ContentHelpers.RoundToLevels(fraction, 1, 5) * 25}"); + } + } + } +} diff --git a/Content.Server/GameObjects/Components/Weapon/Ranged/Hitscan/HitscanWeaponCapacitorComponent.cs b/Content.Server/GameObjects/Components/Weapon/Ranged/Hitscan/HitscanWeaponCapacitorComponent.cs index f5ddd546e9..6a58ff3a46 100644 --- a/Content.Server/GameObjects/Components/Weapon/Ranged/Hitscan/HitscanWeaponCapacitorComponent.cs +++ b/Content.Server/GameObjects/Components/Weapon/Ranged/Hitscan/HitscanWeaponCapacitorComponent.cs @@ -1,14 +1,27 @@ using System; +using Content.Shared.GameObjects.Components.Power; using Content.Server.GameObjects.Components.Power; using Robust.Shared.Serialization; +using Robust.Server.GameObjects; namespace Content.Server.GameObjects.Components.Weapon.Ranged.Hitscan { public class HitscanWeaponCapacitorComponent : PowerCellComponent { + private AppearanceComponent _appearance; public override string Name => "HitscanWeaponCapacitor"; + public override float Charge + { + get => base.Charge; + set + { + base.Charge = value; + _updateAppearance(); + } + } + public override void ExposeData(ObjectSerializer serializer) { base.ExposeData(serializer); @@ -19,6 +32,8 @@ namespace Content.Server.GameObjects.Components.Weapon.Ranged.Hitscan base.Initialize(); Charge = Capacity; + Owner.TryGetComponent(out _appearance); + } public float GetChargeFrom(float toDeduct) @@ -27,6 +42,7 @@ namespace Content.Server.GameObjects.Components.Weapon.Ranged.Hitscan ChargeChanged(); var chargeChangedBy = Math.Min(this.Charge, toDeduct); this.DeductCharge(chargeChangedBy); + _updateAppearance(); return chargeChangedBy; } @@ -43,6 +59,12 @@ namespace Content.Server.GameObjects.Components.Weapon.Ranged.Hitscan this.AddCharge(battery.Charge); battery.DeductCharge(battery.Charge); } + _updateAppearance(); + } + + private void _updateAppearance() + { + _appearance?.SetData(PowerCellVisuals.ChargeLevel, Charge / Capacity); } } diff --git a/Content.Server/GameObjects/Components/Weapon/Ranged/Hitscan/HitscanWeaponComponent.cs b/Content.Server/GameObjects/Components/Weapon/Ranged/Hitscan/HitscanWeaponComponent.cs index c18906e904..b5cb365b9b 100644 --- a/Content.Server/GameObjects/Components/Weapon/Ranged/Hitscan/HitscanWeaponComponent.cs +++ b/Content.Server/GameObjects/Components/Weapon/Ranged/Hitscan/HitscanWeaponComponent.cs @@ -29,6 +29,7 @@ namespace Content.Server.GameObjects.Components.Weapon.Ranged.Hitscan private int _damage; private int _baseFireCost; private float _lowerChargeLimit; + private string _fireSound; //As this is a component that sits on the weapon rather than a static value //we just declare the field and then use GetComponent later to actually get it. @@ -46,10 +47,11 @@ namespace Content.Server.GameObjects.Components.Weapon.Ranged.Hitscan { base.ExposeData(serializer); - serializer.DataField(ref _spritename, "sprite", "Objects/laser.png"); + serializer.DataField(ref _spritename, "fireSprite", "Objects/laser.png"); serializer.DataField(ref _damage, "damage", 10); serializer.DataField(ref _baseFireCost, "baseFireCost", 300); serializer.DataField(ref _lowerChargeLimit, "lowerChargeLimit", 10); + serializer.DataField(ref _fireSound, "fireSound", "/Audio/laser.ogg"); } public override void Initialize() @@ -58,6 +60,7 @@ namespace Content.Server.GameObjects.Components.Weapon.Ranged.Hitscan var rangedWeapon = Owner.GetComponent(); capacitorComponent = Owner.GetComponent(); rangedWeapon.FireHandler = Fire; + } public bool AttackBy(AttackByEventArgs eventArgs) @@ -124,7 +127,7 @@ namespace Content.Server.GameObjects.Components.Weapon.Ranged.Hitscan }; var mgr = IoCManager.Resolve(); mgr.GetEntitySystem().CreateParticle(message); - Owner.GetComponent().Play("/Audio/laser.ogg", AudioParams.Default.WithVolume(-5)); + Owner.GetComponent().Play(_fireSound, AudioParams.Default.WithVolume(-5)); } } } diff --git a/Resources/Audio/lasercannonfire.ogg b/Resources/Audio/lasercannonfire.ogg new file mode 100644 index 0000000000000000000000000000000000000000..612d608db899477724fff05544688aae91952617 GIT binary patch literal 7642 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 LNkvXXu0mjff&ry< literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/laser_cannon.rsi/0-inhand-left.png b/Resources/Textures/Objects/laser_cannon.rsi/0-inhand-left.png new file mode 100644 index 0000000000000000000000000000000000000000..c9f0bf40eee8eebd0b97f058a2266b62f3a29102 GIT binary patch literal 499 zcmVt#R6%V0SsKo;S0HqXagm5X|dvVT*)>=Xc zSwVylga=% zD*b@cYrb>NqmSc@2XJ;TU>ja3b?E!W19&b+zJPh7|%wn+u8@Mk4rAaAu6GCYJPs$rHcW3OE zJAjCYh=_=Yh`u7FOk2mWmc!BmQp$8Xopw`%+&I52z?i%c;-R2+$9tcol*t&AthKw? z`8iU`dz@8sHkPk3m&cP)fl$_oIzW0FrYqg%FZ4X8O|} z?*L;=3L&IR^5bvTUGh@O-5vpJ?R1P6i*QLYdG9|Z|LUOEa9xDUUGQmBkJj2$*EO`( zP)ea~Tb$45V#Ao9D#lpE7$Jm6bzQ@I52X|Uq!2=J&|0JGx+!_B_0}=3LTin-ZK0Gx z*L72#hraJomgSUu(=>l(_pdcgQ;bC@%MyLxZygd55fKp)5fKp)(N6r8rU~$a`G8wn z&I_#Z&g=pJfDi(&F2Y#&XUi@?jIjtI6xT)guK)h1aaLiiL5*L10RS)z1B4LS{r4Pi zIjitU|2@;}tioH!>c8jP&#b~y|2@~MXBCc*F0j;p&sl4WS%qI;g16@S@40KddRF0S l1$ajP{lCmA5E0S4_yFN;C`uVyPzwM6002ovPDHLkV1m6<ZGv({y9bCh^T?=M+{&PNTW$b_e z4feHL|Gc){^Gf%7Q&jfOyLmUAHAJ(%0d3Q46;h1xx?Y;JR&?#wiuaS7KHNJU`A~Ex z6GK9zn8wlz+jM&j3(oB|nNaN4W0-Nf%(`r)cIN)b?6oZdM=aHuIPBu>1sQ=XMV5`% z^5*Xk;W+R--XUA}x4?&Dj;8j9Td!Rzy}OmIehdG@*Kr??2gJWWTKzxwhw-=Xalcp$ zk7*s_SUTlPE&qGl9zzBN#g1K;{7R$ubl;= z$uH4bO9)}HhfjBa_g;)KsHzG|DU9Q|YJqDwe+;Usf-wf(`yU;o2q4~ji7|?EZvN38 z-vQ1!i7|@zUIY-leHIBWn%7$I_7SM-dVY+j5U>=&dy^7E_|W{Li(bQd2=DKL4~P0v z*R?cF18XgeG3dGur_-s}u;#l;DHSOtD5a!n8iWvFi~#_NF%}1FE&9Hno43|(UGple zwdlGI#u)T{KlgbUh5=<+&ds-N`)5x7T-&zA6hc{+7=~f%l8A_ih=_=Yh=_=G;;#%% zfFJA!T-tJ9V2%IG4gdg@Qh0O-Q}Fke9Y9K{h%pxDA$&J~ztyy>u-2l+ukHW<7{?Jx zsqFcCj;GvJxMlvHX>nKKDP+yx^X+F>;oAH?*Q0k8UT(d>wfTF_wYJz*`1MQh($f4r r_ZpAhRk&LK_n5!`mt6%SB6=3D30^El$zlmN00000NkvXXu0mjff~@6# literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/laser_cannon.rsi/50-inhand-left.png b/Resources/Textures/Objects/laser_cannon.rsi/50-inhand-left.png new file mode 100644 index 0000000000000000000000000000000000000000..7f47b5bce8f9cb0b1cedfc0b6a5b688a9a9e434e GIT binary patch literal 510 zcmVATx1hxM zpOCzG03sqHA|fIpI)c_({`DT-_2cLTwbpXG-3||-RH%ms002rUlnCKc+O`$voM^2j zgpd_P2tm#YugDVs0P{RUDTStKV2pwH{;h$$_hO7e(=_X~OFc>3%{u2K#wgx<5kT(1 zZwI*pB7k`BCB`Vux%K^*3IX`|323cl8v;H8cr}RNX?U%*v~7E>!JlnI`1~*UHq_^9 z2_bwL{*3+oEPaENQk7DIQcAk6LkI!J7yytMW7W2;bX^B)EsQZ3h5?Vqqbj|xMX^7@ zXVzK_!vJFp#&LwTcD+81<2w9u{Vb;i(D!|{gizNtrfC8IOw)wAuGiuFzCZ2TCn6#u zA|fIpA|j%z+Ix^vq#tnfn(y3m?{WO$0i4|nScX?h?fU%T0c^_=xxIiKONU??KE_z3 zl(G+14i8{&FCfRZL!gwxJkLkp;_u}40&@KK9fBRbfE?H95WLe1$Wf|8P^=&Dr(QtL zS|vLK#gE5d^#XF&DAge-9>A+!Kn`{Yh={0+U%5~&s$KXZZvX%Q07*qoM6N<$g3pfS Ae*gdg literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/laser_cannon.rsi/50-inhand-right.png b/Resources/Textures/Objects/laser_cannon.rsi/50-inhand-right.png new file mode 100644 index 0000000000000000000000000000000000000000..dd40abd8112ab0b263f322241e2c0e984dcca65e GIT binary patch literal 503 zcmVbl;< z$zP(imJq_l9=<#Q-g_~|psFe;r7(`;q6IEt{u)$O1!D}n_qPx72#5gUy_XoHIOnE6 zZSfo6oRb)%c<)63IRaOE_|m-Adb6)UUDwlVJP!fih49{_gb+S7|MaRCFc0DVTkzpf z_jO%M(=@Qw!We_D>u@@qiWO^qsFYHXQi4)Snx;Vr0mc{rkQigJv(}>T`>A2>tKvQ-}h6WyI~kmmgUrZ+qQq^^yk{PEzTj7Wr<-J)-H*Nh=_=Yh=_=YXe0j0 z&;MU4?t*?>VmRD!hcO`Fp?+)vzvp`PuEPG_3*4H&=Ui)zU4>tN1V6hp tf6u+fvv(C97QiFs@Bd|2fryA+#T!WWGNupQqnQ8z002ovPDHLkV1j$1?Op%? literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/laser_cannon.rsi/75-inhand-left.png b/Resources/Textures/Objects/laser_cannon.rsi/75-inhand-left.png new file mode 100644 index 0000000000000000000000000000000000000000..527b821557308802f9984545c33ade855fe6e530 GIT binary patch literal 506 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7T#lEU_9vQ;uumf=k2YFy^9SbSROnq zVco%+w38vqp@?%Cv$-SVyTs@NvJ;|oq82pQ%jY@n+%xQK$dkI~-{5rN3h9wA*jPY+9lgit#frObJ>ccxb7`^CMB(QQ4e|DXfA{6E+`O z{fUL)z^-)xUJKt>OC&$oYi}~)dt8s+-YSX9vIa|FC!6YXe{5 z9>W>WC1bC@z5cxNUi$D(g}?Qa)2C<#3; zww_@p);Q2syvZc~?@d?SV1#%7_mzX^z=-WcCj|}tP zvOcMJBcQQ#!@BI3(SK&&iF4@7zpr=#D7+)2{eg$Rg8N!N$E|e-?pHBdW?y|H5MnR) ue~tKr-EKhPuMBptS)U}d14I5*1*_{bQ?BWo-lPNLl)=;0&t;ucLK6VOE9GHycm&;lK7eqzSSi_Mb_#w7QAgVl zcK#ZzwZs^&=J3xS5JC`R463SvQVQcZt{UJPE{{P~RWQaNgfPF6?|=v(Ap}V&iF0mx zX^(e+b52r95<(CGFo-M*>k`iP5lKk_-UfyL9KJS7roBHOx zm%6TDt%WfLZQJ5>Iu#qnyr{nKi@xunl#;rx5o3fg1^^_bR2;0e=(=u7-dekL%&V~0 zqHS9kW6*Wol;>d>29#wvCEqm7ui5=eP16+TB9vu`VHma!iHL}Zh=_=Yh=^z>eoNB? z_>cL3@3x#5SmT@71pol06rNp#bK#ekU4Xvtin5 zl*;SBXL`w5g}eLjnQqN0yo9X&d!}8@D$MoYb3J=j;qB1{=KAkBYi%*BaQ7wn-L?LE r?i$aYRamS5OZ4CW%B%tr5xt5J`cpLuCVAPw00000NkvXXu0mjfD?;kf literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/laser_cannon.rsi/inhand-left.png b/Resources/Textures/Objects/laser_cannon.rsi/inhand-left.png new file mode 100644 index 0000000000000000000000000000000000000000..b4ea4bdf9ec14a444f5d1607bc37feee5f9da76a GIT binary patch literal 484 zcmV6Lq>G@(9ibUV;I?H`H3o<#Nd$La9)*2LJ#{DU=A|RGf2Stre}cgbKts#6jyw+NrbLSfT**b&}f(YWGH`A46WRSKRM+7-P`)Jz|X2tM#MyRqRjjS<^J=`yR#^48wq?X_ob27?$DZ^`jgX zK-YEE970{!7{?I+FpeYYx?YCwy6&)VpNNQvh=_=Yh=_>JYVScxk$yn#dv1B=-sAY} z0UX^6n1@$N?YcgD0PAu@YA+zg+##5Uk1nZ5kNu+l2Q`q+;Gtv z-vQ1!NhwJPK?IOJFy6zh=C#(VeFVJs!(;q#2;O@UKw^v+%`Z^*V-x`{4z=*! z%Wk*B;c$R422Il-rBp0g^c=?e+*oVTw(antwRY)RXJM^H(=;%~pl#cs&rR2LD9dta zzOL)9JADAC>$*4%p)5;uUAJ^eL_|bHL_|bHL_{m`ElU&N5BY#=OXdaU_|NPC0Dw{o z?;gTw@Kehk!0~u2QcA`75bo{YUvJ9*azVD%w%GK_p%Bf zA#4AhX;oQ;NBj3&@6IYrwh5jhXRt(8;pvy)wXyws?r*$1t1#IBrr5v#m#hL25q*ju X+(S3mS{1=S00000NkvXXu0mjfLs8v9 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/laser_cannon.rsi/laser_cannon.png b/Resources/Textures/Objects/laser_cannon.rsi/laser_cannon.png new file mode 100755 index 0000000000000000000000000000000000000000..f4d02654d87e13ac11e695a442cf335ac7f66950 GIT binary patch literal 369 zcmV-%0gnEOP)?gn5o{&=391hG(0^>zZo8<=YN(=#zhS>zkbCc P00000NkvXXu0mjfv1^kp literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/laser_cannon.rsi/laser_cannon_0.png b/Resources/Textures/Objects/laser_cannon.rsi/laser_cannon_0.png new file mode 100755 index 0000000000000000000000000000000000000000..ba4a9fe876629bec3da7fbf74e25c5470350685a GIT binary patch literal 351 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dy9sxcft_KbrP*zqhEiH9*bqx&- zZEI^wO-(g0Fqk!K7EsBmRjbt1)!p3O?CtFp6cntitU`l>8yXrC5)w2tG&D6e&CJYz zCPYO={e9c73Dm$?666=m;PC858jy3;)5S5wqWA5@i$zX~JT9El9!sP`y8iv2Z}u^1 z?#j8}R{DQy*~z@Qy4=I#<^1VQ9oO`f)9X0iEPqtBcIuHt%@{5@wkbhdm&qDWK2Umb zR`E3dKL>QxnO>}A%ZSoNc>$4}Q&-FIH>3uPwzEb|~w{SGypUf+@CVjhNhg vjvYy=&Aw5Vv~eD9ao_y=**)<*^{3ezYB-mKh2EPE^bmumtDnm{r-UW|YWt0Q literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/laser_cannon.rsi/laser_cannon_100.png b/Resources/Textures/Objects/laser_cannon.rsi/laser_cannon_100.png new file mode 100755 index 0000000000000000000000000000000000000000..f4d02654d87e13ac11e695a442cf335ac7f66950 GIT binary patch literal 369 zcmV-%0gnEOP)?gn5o{&=391hG(0^>zZo8<=YN(=#zhS>zkbCc P00000NkvXXu0mjfv1^kp literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/laser_cannon.rsi/laser_cannon_25.png b/Resources/Textures/Objects/laser_cannon.rsi/laser_cannon_25.png new file mode 100755 index 0000000000000000000000000000000000000000..d0820af53eab66e0be1aed406f476d6613122241 GIT binary patch literal 365 zcmV-z0h0cSP)3K~y-6 z?UBJ!Lm>=Bftx3!Db~=6=>LDH$%DFRJGyeECkzuNmpdec@Xwzj#<;SClxTa}@`UVE ztZr#!gSb#BIBbWdM=4oyI1*80Se+%Ol=urfP)#8M@p-pIrF;Y20jKx^m=DDF$C4^&()Xrz9YLe^4dU>7UU9xrATYnovA&dNenX!+->L0C-5g7I^ zZx~n(t6{6R9^8RE^lp}J(0ww>>g%CkW~{#M1!MH@|Eu>O1i#BCvLOrET3yzx00000 LNkvXXu0mjfe1?ldNx2(G* z8)Ua)y0wuF;zFfhb$xX|O39MLo`@pDbe5b_;y>&{HH8SogC}NG$~V9h@DV=&%YpcF zC4_y8)Q(4}YLe@V_4KusPsuiAZ~c1=g-r6#X{*Z`O#f|t zjKHw(@_~VwFc)Nc>+l5f(%V(S1G+cL>gR6RZrD0jKlg?)`v3o{_XmdOat36V3`Q$y RHYET6002ovPDHLkV1iJTnArdT literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/laser_cannon.rsi/laser_cannon_75.png b/Resources/Textures/Objects/laser_cannon.rsi/laser_cannon_75.png new file mode 100755 index 0000000000000000000000000000000000000000..020797c0f8cc3d245a73fe3602c96498dd414601 GIT binary patch literal 368 zcmV-$0gwKPP)LDHNtgOy9ewgiPckgb&E6q_=$}7DN@?vfa^~%@9X&S@ z_ET|PM3OqJg-gM4*AGM}MNH_#%t_(8n&h1I13z%hlz{Xg0V>NU5Ds`uPk{TtV%@p9 z6uvsB*FsxSEVNoRvs#Vl)D!pf8LhQ!w;$`}d5`E)z01+Z%bX3ikk`u|*D<*M*2kQr z@OwqWz;ajva=i}<2aafWvkZgbUo>rzUl!~;ZISl{bB^!dYm6TXewTM_HVj8!)#DKW O0000BjE6o5aKE;YDIKqfZMP+G*c{25<;l^TCXiy{Csm0 zfNv)!Y?RBXf;v(HU>F7f`q~-*ANKbn@gC0GWN&v@9UdQt-hDd%%J61-m|s`n`9E%F z;|(~^1OT>ePshN404&S$MIr)?MkAE2zn7Q(^P49xDV9p}oTp-g0Z2)$Qc0TTi$nxU z>+1}LLzEWIR;^OuXTR^KHwiCzv-*+uofnbsx~}88E-=f$^;1pl)Ly6FI4zw&ZK~Dy zZy|x)nbJ7>3_!cxUb^Bv#*;~C4B}p4=Ap9OVCqgaXaiwnM=o+h@q$J{pja&X{n5V{iY z1g2>!y->im?TEznc$_A7vcTPdK}^$B0Nrj^19+6nsf}{km)NS;0aV=DyQE4}8iWub z3B6F@@aQP^06`wCO2D!#&5_cte0MZrt6pc(e`I9>%SxS*pMYya4!S3nz?;}h` cM#g`_Kaq0ICFGd1{{R3007*qoM6N<$f_ty~F8}}l literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/laser_retro.rsi/25.png b/Resources/Textures/Objects/laser_retro.rsi/laser_retro_25.png similarity index 100% rename from Resources/Textures/Objects/laser_retro.rsi/25.png rename to Resources/Textures/Objects/laser_retro.rsi/laser_retro_25.png diff --git a/Resources/Textures/Objects/laser_retro.rsi/50.png b/Resources/Textures/Objects/laser_retro.rsi/laser_retro_50.png similarity index 100% rename from Resources/Textures/Objects/laser_retro.rsi/50.png rename to Resources/Textures/Objects/laser_retro.rsi/laser_retro_50.png diff --git a/Resources/Textures/Objects/laser_retro.rsi/75.png b/Resources/Textures/Objects/laser_retro.rsi/laser_retro_75.png similarity index 100% rename from Resources/Textures/Objects/laser_retro.rsi/75.png rename to Resources/Textures/Objects/laser_retro.rsi/laser_retro_75.png diff --git a/Resources/Textures/Objects/laser_retro.rsi/meta.json b/Resources/Textures/Objects/laser_retro.rsi/meta.json index 149e54c660..e2322df7dc 100644 --- a/Resources/Textures/Objects/laser_retro.rsi/meta.json +++ b/Resources/Textures/Objects/laser_retro.rsi/meta.json @@ -1 +1,123 @@ -{"version": 1, "size": {"x": 32, "y": 32}, "license": "CC-BY-SA-3.0", "copyright": "Taken from https://github.com/vgstation-coders/vgstation13 at commit 125c975f1b3bf9826b37029e9ab5a5f89e975a7e", "states": [{"name": "0", "directions": 1, "delays": [[1.0]]}, {"name": "0-inhand-left", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "0-inhand-right", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "100", "directions": 1, "delays": [[1.0]]}, {"name": "100-inhand-left", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "100-inhand-right", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "25", "directions": 1, "delays": [[1.0]]}, {"name": "25-inhand-left", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "25-inhand-right", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "50", "directions": 1, "delays": [[1.0]]}, {"name": "50-inhand-left", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "50-inhand-right", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "75", "directions": 1, "delays": [[1.0]]}, {"name": "75-inhand-left", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "75-inhand-right", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}]} \ No newline at end of file +{ + "version": 1, + "size": { + "x": 32, + "y": 32 + }, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from https://github.com/vgstation-coders/vgstation13 at commit 125c975f1b3bf9826b37029e9ab5a5f89e975a7e", + "states": [ + { + "name": "laser_retro", + "directions": 1, + "delays": [ + [1.0] + ] + }, + { + "name": "laser_retro_100", + "directions": 1, + "delays": [ + [1.0] + ] + }, + { + "name": "laser_retro_75", + "directions": 1, + "delays": [ + [1.0] + ] + }, + { + "name": "laser_retro_50", + "directions": 1, + "delays": [ + [1.0] + ] + }, + { + "name": "laser_retro_25", + "directions": 1, + "delays": [ + [1.0] + ] + }, + { + "name": "laser_retro_0", + "directions": 1, + "delays": [ + [1.0] + ] + }, + { + "name": "inhand-left", + "directions": 4, + "delays": [ + [1.0], [1.0], [1.0], [1.0] + ] + }, + { + "name": "inhand-right", + "directions": 4, + "delays": [ + [1.0], [1.0], [1.0], [1.0] + ] + }, + { + "name": "0-inhand-left", + "directions": 4, + "delays": [ + [1.0], [1.0], [1.0], [1.0] + ] + }, + { + "name": "0-inhand-right", + "directions": 4, + "delays": [ + [1.0], [1.0], [1.0], [1.0] + ] + }, + { + "name": "25-inhand-left", + "directions": 4, + "delays": [ + [1.0], [1.0], [1.0], [1.0] + ] + }, + { + "name": "25-inhand-right", + "directions": 4, + "delays": [ + [1.0], [1.0], [1.0], [1.0] + ] + }, + { + "name": "50-inhand-left", + "directions": 4, + "delays": [ + [1.0], [1.0], [1.0], [1.0] + ] + }, + { + "name": "50-inhand-right", + "directions": 4, + "delays": [ + [1.0], [1.0], [1.0], [1.0] + ] + }, + { + "name": "75-inhand-left", + "directions": 4, + "delays": [ + [1.0], [1.0], [1.0], [1.0] + ] + }, + { + "name": "75-inhand-right", + "directions": 4, + "delays": [ + [1.0], [1.0], [1.0], [1.0] + ] + } + ] +} \ No newline at end of file