THEE ultimate 3d gun library.
+ +Scripts
+misc_helpers | +misc. | +
play_sound | +implements tools for quickly playing audio. | +
Topics
+readme.md | ++ |
From 85851806348848753567065ed91c3370e1053779 Mon Sep 17 00:00:00 2001 From: FatalErr42O <58855799+FatalError42O@users.noreply.github.com> Date: Fri, 26 Jan 2024 19:16:18 -0800 Subject: [PATCH] major work to sounds and reloading mechanics --- TODO.txt | 23 +- ammo_api.lua | 7 +- autogen_docs/index.html | 77 +++++++ autogen_docs/ldoc_new.css | 290 +++++++++++++++++++++++++ autogen_docs/modules/misc_helpers.html | 73 +++++++ autogen_docs/scripts/misc_helper.html | 112 ++++++++++ autogen_docs/scripts/misc_helpers.html | 115 ++++++++++ autogen_docs/scripts/play_sound.html | 162 ++++++++++++++ autogen_docs/topics/readme.md.html | 63 ++++++ classes/Ammo_handler.lua | 21 +- classes/Bullet_ray.lua | 16 +- classes/Control_handler.lua | 64 +++--- classes/Dynamic_crosshair.lua | 6 +- classes/Gun.lua | 113 ++++++++-- classes/Player_handler.lua | 12 +- classes/Sprite_scope.lua | 10 +- default_controls.lua | 120 +++++++--- ldoc/config.ld | 11 + ldoc/install_and_build_docs | 13 ++ ldoc/windows_quick_generate.bat | 3 + misc_helpers.lua | 122 +++++------ mod.conf | 2 +- play_sound.lua | 90 ++++++-- sounds/LICENSE ar_firing.ogg.txt | 3 + sounds/LICENSE ar_firing_far.ogg.txt | 3 + sounds/LICENSE ar_mag_store.ogg.txt | 3 + sounds/LICENSE ar_mag_unload.ogg.txt | 0 sounds/ar_firing.ogg | Bin 0 -> 25871 bytes sounds/ar_firing_far.ogg | Bin 0 -> 48222 bytes sounds/ar_mag_load.ogg | Bin 0 -> 8610 bytes sounds/ar_mag_store.ogg | Bin 0 -> 13050 bytes sounds/ar_mag_unload.ogg | Bin 0 -> 10071 bytes sounds/attribution and licensing.txt | 5 + 33 files changed, 1330 insertions(+), 209 deletions(-) create mode 100644 autogen_docs/index.html create mode 100644 autogen_docs/ldoc_new.css create mode 100644 autogen_docs/modules/misc_helpers.html create mode 100644 autogen_docs/scripts/misc_helper.html create mode 100644 autogen_docs/scripts/misc_helpers.html create mode 100644 autogen_docs/scripts/play_sound.html create mode 100644 autogen_docs/topics/readme.md.html create mode 100644 ldoc/config.ld create mode 100644 ldoc/install_and_build_docs create mode 100644 ldoc/windows_quick_generate.bat create mode 100644 sounds/LICENSE ar_firing.ogg.txt create mode 100644 sounds/LICENSE ar_firing_far.ogg.txt create mode 100644 sounds/LICENSE ar_mag_store.ogg.txt create mode 100644 sounds/LICENSE ar_mag_unload.ogg.txt create mode 100644 sounds/ar_firing.ogg create mode 100644 sounds/ar_firing_far.ogg create mode 100644 sounds/ar_mag_load.ogg create mode 100644 sounds/ar_mag_store.ogg create mode 100644 sounds/ar_mag_unload.ogg create mode 100644 sounds/attribution and licensing.txt diff --git a/TODO.txt b/TODO.txt index 4abcf04..4f71a32 100644 --- a/TODO.txt +++ b/TODO.txt @@ -3,11 +3,18 @@ -( ) add audio -( ) add config +(~) add audio + (x) sfx system + (x) did signifficant work on it + (x) firing sound effects + ( ) reload sound effects + ( ) firemode sound effects +(~) add config + (x) add a table for config storage, some settings + ( ) integrate with minetest settings (x) fix crash when switching from a gun into a gun with a sprite_scope (x) add infinite ammo privelage and quick command - ( ) privilege not directly tied to infinite ammo, fix without breaking performance? + (x) privilege not directly tied to infinite ammo, fix without breaking performance? (x) fix animation rotation offset not displaying the correct frame -was a problem with MTUL, changes push :D ( ) add entity scopes (for holo sights etc) @@ -17,7 +24,7 @@ ( ) fractional ( ) flat (magless) ( ) fractional clip -( ) (for 5.9) make infinite ammo priv to rely on on_grant and on_revoke callback for runtime changes (broken as of 5.8) +( ) (for 5.9) make infinite ammo priv to rely on on_grant and on_revoke callback for runtime changes (cannot be done as broken in 5.8) ( ) (5.9) POTENTIALLY make models use new PR that allows bone offsets to be disabled -I'd probably have to modify models at loadtime to have an eye and hipfire bone? Probably easier then current system though. ( ) Fix HORRIBLE namespace violation in misc_helpers.lua. Also migrate features to MTUL libraries @@ -42,5 +49,9 @@ documentation ( ) Bullet_ray - ( ) play_sound.lua - ( ) misc_helpers.lua \ No newline at end of file + (x) play_sound.lua + (~) misc_helpers.lua + (x) weighted randoms + ( ) unique ID + ( ) table helpers + ( ) openGL/irrlicht relative dir projection \ No newline at end of file diff --git a/ammo_api.lua b/ammo_api.lua index c2ccf84..df75ad4 100644 --- a/ammo_api.lua +++ b/ammo_api.lua @@ -26,7 +26,7 @@ end function Guns4d.ammo.register_bullet(def) assert(def.itemstring, "no itemstring") assert(minetest.registered_items[def.itemstring], "no item '"..def.itemstring.."' found. Must be a registered item (check dependencies?)") - Guns4d.ammo.registered_bullets[def.itemstring] = table.fill(Default_bullet, def) + Guns4d.ammo.registered_bullets[def.itemstring] = Guns4d.table.fill(Default_bullet, def) end function Guns4d.ammo.initialize_mag_data(itemstack, meta) meta = meta or itemstack:get_meta() @@ -45,9 +45,8 @@ function Guns4d.ammo.update_mag(def, itemstack, meta) count = count + v end local new_wear = max_wear-(max_wear*count/def.capacity) - --itemstack:set_wear(math.clamp(new_wear, 1, max_wear-1)) + --itemstack:set_wear(Guns4d.math.clamp(new_wear, 1, max_wear-1)) meta:set_int("guns4d_total_bullets", count) - meta:set_string("guns4d_next_bullet", current_bullet) if count > 0 then meta:set_string("count_meta", tostring(count).."/"..def.capacity) else @@ -57,7 +56,7 @@ function Guns4d.ammo.update_mag(def, itemstack, meta) end function Guns4d.ammo.register_magazine(def) - def = table.fill(Default_mag, def) + def = Guns4d.table.fill(Default_mag, def) assert(def.accepted_bullets, "missing property def.accepted_bullets. Need specified bullets to allow for loading") assert(def.itemstring, "missing item name") def.accepted_bullets_set = {} --this table is a "lookup" table, I didn't go to college so I have no idea diff --git a/autogen_docs/index.html b/autogen_docs/index.html new file mode 100644 index 0000000..64153e6 --- /dev/null +++ b/autogen_docs/index.html @@ -0,0 +1,77 @@ + + + +
+misc_helpers | +misc. | +
play_sound | +implements tools for quickly playing audio. | +
readme.md | ++ |
misc_helpers
picks a random index, with odds based on it's value.
+Returns the index of the selected.
+ + + +misc_helper
misc.
+common tools for 4dguns
+ + +Guns4d.math.weighted_randoms (tbl) | +picks a random index, with odds based on it's value. | +
a table containing weights, example
+ {
+ ["sound"] = 999, --999 in 1000 chance this plays
+ ["rare_sound"] = 1 --1 in 1000 chance this plays
+ }
+
+
+ misc_helpers
misc.
+common tools for 4dguns
+ + +weighted_randoms (tbl) | +picks a random index, with odds based on it's value. | +
a table containing weights, example
+ {
+ ["sound"] = 999, --999 in 1000 chance this is chosen
+ ["rare_sound"] = 1 --1 in 1000 chance this is chosen
+ }
+
+
+ play_sound
implements tools for quickly playing audio.
++ +
+ + +Guns4d.play_sound (sound_specs) | +allows you to play one or more sounds with more complex features, so sounds can be easily coded for guns without the need for functions. | +
guns4d_soundspec | +defines a sound. | +
Guns4d.table.shallow_copy()
for guns4d_soundspecs
+
+
+ a guns4d_soundspec or a list of guns4d_soundspecs indexed my number. Also allows for shared fields. Example:
+ {
+ to_player = "singeplayer",
+ min_distance = 100, --soundspec_to_play1 & soundspec_to_play2 share this parameter (as well as the to_player)
+ soundspec_to_play1,
+ soundspec_to_play2
+ }
+
+
+ minetest.sound_play
as a sound parameter table
+ however has the following changed or guns4d specific parameters.
+
+
+ with to_player
+ sound
field.
+ to_player
so it only plays positionless audio (as it is only intended for first person audio)
+ 3dguns remastered. Currently a work in progress that is updating steadily (kind of).
+ + +7}%jCA?uw_$BRJ&X>>@~b@vOqVcr%6q3FvL^~M6RjuWO{FlD zl-zJh@BJ}84&xH#maG`CQQv4OX(Rx~6rzwZIDcYi@I!ujz*il0eGPz6QmYWM!ubW7 zLJ@w5*)GjXEY;0wi@+np!f8&HfDw-lLCy`XsR}8PvIkoUolli+JJ{ExSLmPcu9Guo zO%*Iw?rn!nUM{Y@5+rHCes0fmbJA5^hiDU=Khv7XVESsIb?;g^s8_9XtiA^)#Y@!P z)nmHM`1B-Ia>2!U$^^;C?eOS$XKWchUQ#6`l>W+Pw%|3NiTo>r6|IPy*X8No8f}8* zRIIS7-E;*sE*Rw8g)+EHrIOhl<<->b#8QN(^kUzIr_nuMdvU+;Yi@;SFJmw#M@n3) z!o1{*bt}rE9*@chwU5~bCB)jAF?iI8*(Jv-=tn{2Ec`2*cUeTi1@Rj++1WZu;sR;K z=1nQt*h&^!l*IQxo@rcOJDPr5o_|Nq1n>iS8>gL`N0T_SJD#NMU hWf^#j>T7sg0D)ae4vhB{t23oFqZeulZ@!t{aUvwmg@mk%dQj3u!uUhAivDhUqrP z7^~{ExoUkDE&SHnysm#QU+un)8af{n$?-Ye+ih9PyxQ>JjXOT4psKm#=b|LD&N63% zxL;DVi+7+}e5o-U=(W*l#pXRN^ZZ!fd l7y7?gW(xa#COthbrhYOE-B zdByG3zijfu!C9?F$Nrwr$99XWKb2v&uTV+;n>vxaplmi)DFtydMdxuS2XwL*7)i9R zC*3jL94tFROy>u13O#AlLWGggH!@u!x`Vyn;m?0?Rw`H(Mr}otQWv2)a*Cn6u=iZ7 zX0Q1Cm2?d9;Tx-=4*;M7&`2cSDsrGfOzi>&poSp@U)E>ABZ1e%ay1mD#7=KMGZv-t z*PXG*iw7M`BlQ6MSKyxjNcCg*<8J^2{7)qSDZ`JFcn`J@)(=4sE)O0LQQ*J+5APl# z9=zJbNIKd@EIR!2RK qRa*X6px%T zP5Kw+=3~<5iHB^uyf=Su@4Rg~Zm;C~WG6CJdsja4>h>lzaqWN=U2o@y*eJePefgA0 z_wUwfnZo@AmRq+}@yR&uZ`<;#hc1cXE#ZZGx5pp7j;)^ZDjvUiHpbpO!(}15zjXA; zZX*r0e$van2aiYg0d+y(7I?lD%-;g-No}^0uyJTaM_c@=CwF_E)K8aYt|9z2Go`v0 zjTomq$!mbx`KS6^*W3r^1nL%(;YQdeFB^Vv6Yz+44AYZrU00vhl4HiMi+?Q2PV+du z*3G?d@>Kb3)GtWakC&pZ;qJFobykE~nEf1iksYUTUg>pl T@?YgMm5^r$U<+>tIEAJJW;8Oxb^bCtiNF*90{p|Y2$5Oy=Q t>J1 (qxWkoG@I)dL7q(yM~j-=_@#=L zs7D1KVq7|9sZ+x`Dt*dP(= cv0nz<<@u|}XIBZ;JK|Dd# zSFM>u!N|HZDvWF+suM4P>1XVk6jSyBx6$$YIhI8qH?+DP`bLs3h%JIUt8F@aIk@>B z!~H0s5ORorT_03f?VCTe4cdSSU*Vqh^P@045EMh_Y8BQMl!_=r5ZX$#L5-ayVTeSp zuQnXmo=v_U+!)3kdHc*CAGMy7VG_+s_)TP&>s@`5zt(GQl?(M!X{m`B#W(;cI?PC- zuZ_maK)$?JI(|uO5k+^-pX6&G^Lv?_;kCda^e4wYLHkSHiX)PE(_b#LgEPNwzV}Uk zEPkzUy2^YjDld*XgA#GtHFy+XQSZ((5hlIbn_hT*xN>z(HbXX}5+W#?!Z)RN(?=4L zY2bBtD^4hA#y4u(h^pN7I<6^uQ@0a4!x!Nl;;2~0H$|AFY;5yn*oBHyb=q2LTM`Y8 z+Zyn wb42_{Rwnoz?~j-e+_^mN&Xb7b*})x(8|8)Hym7)p*}lu z5>U6AUy*okZMpP{8bTwY28y6lTw~vFtkdALk9!M0 g!el*pT?;fd>!YA?E3>NLq_pEvDr8hrtSKQRn z+p}eM`__(&b%CmNE+y|0`h86F@@ltmf6y#qR4@J6uhZGNw==a4xIE3zyekz<%0C~N z-6Zed?wcGwH5c2Zz(L1o7>0g$^ZH!^0fNbA?~#$R8U X$-X>Y<2wv`jk>Z4AQz&MV|h;zRW_^2&=))&ekS?My3V;9!1QGUvs`w7!i zF$?|#AmG5fUl7)aR-}GZ>!T(Klr}0 `g4Lr=E^vl|xkSqxu=pL3|aAZzy|f@(4T%^})k)yyRHfWw>ty7P)5VuOZwjhwkM zrkPz7to6D4)Z~*>x7th=rSkA_>@twmlWoo}vUzjQews|BU`W gi7}PfB2VsQeZ2UXj2pNY^BnJQt05HHv z{!|R{-(&>=6Q-;p4}R0(2c8?I8=H|!GCTX$wvDi6?Wkl*Lsd!u0AyAYj~jfEus>xp zzuB|1=*(SH&Q9aX{ -+A182v9;ja4h_A_oVfay$D>b`}|St&Fo)Ze4SusTigG zSQ34-tG>in`O i+r}n$ZrVF~S$~ZHlq+iT`_w>x>O}gomExJ>t zdv=NN_nt+cJJ%F{Y! z7Z5>%etrHQC00_bYCTrvZ6_`-~UR6}t&qhOF-WH~)qJ@99ybzch zh8t|eH3IfgKWwxS4IiO|RBNmx2>?_LW7b^#iw1hTIDhzHc?+A>+Psa;W_nQj*K=FH zgZ`-PUw_Z1<=&ARPZHbF+pKR6-+JCs>d}`kOAvH@kmDof?X#lCJJ;yx`RR?bdam}& zKFH6XpP8z GJ`a{j* gw9dRIpuB4UpSSJ- g<%1$oG>Wfx0+Y#w=_||)`tM&uT zG9Ul>gt{Ope7H5h!k*b=METYOWOCjrCRJcTB9_tBQSnZh+6BY6)0 {#4AcU!fr==SDPL5qbPg7yc25_tVV$Mk?qznFzL#Yabn>ZKG`)%2a5mk|Y4A z)?MkNwR_E%@>HJ=q$g=yGgx+qlg_OFY@BpBzI(ISb=!MKjb}J>d|@e<6d?@rIApAU zy6zIEzq0O9usEHctbeq`9?7)f$603cQ=Lrn35NdkFien(d?lGZk lN>UR=<9am-Ln z3_!Kn1M;KL|2I7ahwr@eNMkZY(f|ahhbh!nZwQD#Ad?_>rzN}5eCrD_DydCg02JJV z=;}m$C$6k9$Ob*~@B)Moza<0#CjbRLRkX$LlLmqNz#LYD?uUo?LE0zOiTMp7Qw<_q z4a;7~P$H(N^=;IwZAhjm4P^-cfVXYAh=0+9kof& 06QR~BotHyds>^3du5<(_!e)*Z*I <{t?IH5BE2k<)*Hdna(}?DD>Cdps&2=fk0k?kQD`aCf{^-VD1Rfu3(qUfE4e zS0#74uL1Q*_4w?*N)4j2MeW{8&pXV0rYY~!4fSJV7}f|L?8hINKLCzA2oL23YzzRx z%)_G8Ncoji O$b9Xi^=H4t;0`gn$B`MI_w!mKFpY z7@mkc{e)CMD)T5ayn#5xi9$vg-a>(MA*vRPPTw}P(P$`ZsH!pv06=BLy|azydiBfs z{J)?0@sJ*^)SX%^zq`HL8}i4|b{EgK#ob>P-Orcb_msPOf1Q3FWtr>u^7xn&m(?NR zcyy|v+VN$A=-y&p)xgBNCkuvl$T89LJIsCXXAbXQZVuf=`c;Ow(c~xhIa&0kiacG} zI%4i6gxWO=4?pwsj%Flho5kMRJwuoF&_I*KHcmlBQ0~rxY2mwZCF;sV(Wr4Woi*ig zH9&b4v4!I9H+y?e7fkyPZrnv7EoNm;L+^8zhvCku>>iS=CSPiz7rXV;^wqVyf9C4H zc;=c*8Y1$oo=U}M_Mvb-boBGIOxIQPQhWE_{9P=v&NH>?Y$nyfp>vd1(z7q4*&`}* zsu( 8vszK2|Xip1^5LUXpDgF0{6?Wr~?ioyhSudQC~$|XF39Y zD J@4A@ zj#@4zIcp>?hs;IajFNqFxy-%K@8z)jV!rO33^_D1Mf8Tuq>ksj%w)YP?tKYha=CSN z<#g@pdqc+{l@+3V$5yxxbz-9+-X7kD-~W5nH&i1x&{p4T(FmO57!I zR~w8qeNW*kDwelpOBw?rO-63HBALn@i>yh+bVaTJdThnsZJ$0sGNq1rD1rNJ>VEBn zGXe4CUcJgNQy=+XVDX9qYHFY- ;^CKxIt(4ZsBm zRlA~K(FkWFFu(yl*j$aV3`#-bk|j!WC{_Wb&|QM6Q33!@XJ=CY0Knb=000000I&%F z00sa60MVudv=;x4|9=0D|9<~}|9}67|BC;G|9$^+9!7-q 6rTjuKW?$7fl2fuDh9@Vd$B-tf7o9nus z_RnpSO20#IJxFkF1DR3fp}0S}hsx#jxbo?J_A|s6!_J?|V!hX#LGv3yKABZI{G5x< zQ`9MuB>8fPaGG7G&(Ih4U){~;Tho@XU9>VYT?G&0Yx>OsD5$Igot|OMBN7cav&)M_ zt4SgKOx09of7aP&beja`r5R>mCe7@7lj+F !Wdf^{btFe1`@L+c#TSO zfr7B{ivXkN2MbYvaBACd{V^C5MZVaPG-P`KKmuM>MDdH8{kOv2FjW;H`(XF}1NVXX z4T!AYrIZ#$VsFeY?AXQQNw%SUwZ6%jFNlLOvx`QRMs&t=@4tOuv69t~*l?%&t=B zybL*6on~q-vdJ_P6%Sq0oyE)#JNNz&@8-FWkCD2Y{@ppQ&2EMRIdNxB>vfj)yL!wh z52ve$hZPn8pP{GVJs409^z4~gDWVB0TJ<2xGbL&vjEsz{XUe7Fq ztQ;C JW_RhSikPKncv%jo ze@ ={PPAAVLiXT!6Q;JKiVg(gI6+DolTA9QY8uM{t5TYE5+*TyOH%ZCJ z2Oc0Pz(QhFaexG#MP&8Om)$>L!*oTY=JjDg;65;1n0~9*+ec@k5fN>xlEADXSpon+ zih1MBKlVerdk2$iMqQW1FSDL|-&6GERT-D5mEUmohwFT+WZ$7Xa^s17ZSUB#(OZ_= z%RI~-M<4d?! %;I<7?Zck) zOhoPte{^+Er=In^Is8t!U-OLVUmKPp&EYZhZVK;k+pB&+v2T)ksDy%H>Y^Z_Zsnjt zMNWaQZN%;eoxF;%Gl3A5nq=sVx;cwYw(e#iYo>T0S9Z@9;C8>8`eeBG z&McT84-9;^;Nj5#&=1T%x4R0Mi#k`T>s&Ut(Sh?ctZMJ_yl2j)d%hH~hoP9BtFLUb zcWs(db>H0ov3o8ChxgClz |BNYW#KmSwatFnSFL=apa@ z8^FaQOp9vd3cI9nB45?=JifP|B>Hj!KmyhPURA{Ledk8tY#6eLBE7z8hrn~gbYZp^ zw$Zk2)uL^cfKpYJ1S9}J)G+647_{%7!=iB~+sjVZllj-@*MEBEnP0^E$nF~R!*Y-H z<$)IIh;sUvDXjnRMOMqZ=aoqQQ@46wO19$Sn2whr6SJ0Qrs+z5NMMBq9j<9SiGcp( zkM+;$hEv&{ZC<{WGgHo~KD>`L(b;wLPw3$vl+AZ4tJUY8>}6M0L9!ZXYFM%^fOWuZ zuw{*AY+EtQo@!9eMF3 #%{9NfriWhGZ&zirnZw2ZCoedYS?$TZ57p6L zPgj~Io384|&?vpobT%-S!dUBDzUQS;R^{YSoG=e?vaX%Q0Uo>U8N;lY>b%@Nf4GUO z+v=AWZ+2EYhC`8494MMCZfjCEWq#(@*MC>_bMngZzJZ~m;tV^x%6F2p3}S83EIU{H z*`2}>JTU(%YR$}Ut4CK4#a%g-Ff~g-HVtP#ZHA|28VU~1(`)yg8t9p~1~My$j+kgq z9ZsGm7PyW)00RQRLAuV00)RjW-U5;edn?(HHz^yHOcD^b!I;O$*J;Yl9K&OgF%r}T zB3}>!o+JWdoB#?So>lby_RVg{z x=eKz7ddu|rGoHl! z&>Z9Qow*#+`ae& !Q!ram-DHmIkfBpUxk@?$&1$52t;LS}l3b-9?7;1YLc^{U7@C$WGsxzE40x>`F{ z20nW;-FH`Vv}QJ0G_8C{s_%JRtpu` po*0#|`gfeXwN|OKp6l!tsyvi8!{WI5HmC>4c;Fk=tudCkJc<1L> zugix~&(6QJ|5=8x%g>ukk3aV5Q0>jO972ab9Oseq8-4V|l8v^6&k!%KGFz%EQr%gp zd7NoD)P%FoUO2q 9gm_}R|yeEFGbmc{;p z!Z&ELi^igtDfXTP56pB`o^)k5rE<+hUcKU3sBhltsGLPnMHjU@w-fPbD)T_)d7Woc z=I1bZG4Bzm=eRl=gy~ksQ*_>$&pFdj0=C)Ty?ZZ{>b>){-=5;zPRhUlEf{)VlQay6 zpWc%*S+wbE9dcTSO!i67K7DavuJ>EUSxq#2sI8jK|8(nW tNx%ZY#_(UDmD+S73>dwDqS;1$2^?WSV-OpL2mxZoZ*&0A)$6*Y zkLOiWwqAP>zz;?i7!7)!MV#iHPrg4B`-UNlI8Fy2-w(pL%}o2AXQPd_VQo#aX;q~l z0000!+YVa;`_VS9XRPe~j}G-MmT}O(nSS9188=II+VboCiD@N&>Ek?VGw 0!U4I%q(JobPj2 zb?5LLO_C#-lUEnm@pk+`%}nCj;B~y4dWfYASb_+Zluj55vPvL<^{W2;j85%Xoe+?j z!iEF701tp&lEK6;ilxA+I~OVnqXV^9i0Q82TbzMnpRC*f3#1diMLe#H@HX@To-l6_ zZ^y_Z-X9kZ3~6C}guTPpw5?gKDp^%6lmTEe*jp`<(2M=uU)$jD0RW8k&MR;;J$on1 zv)d1s%klZ)N88aWi)f6+$CtKZcUo)>e&(O%2@^ApvwvzG>CKas<;y)ec%I)5DtPK+ zCaPq5AUf`k&T$E-|MMPxKQDXZD2Y8|^3Dr>#-K`l+0T8Q*5PvHu7G`OTtOQH9+Q=o zS!8iJ`P{#FHv!8|`5I|E2fbIj$x}cPcNWad&N@W3VVaumPczYG4mqQr5#<#FRBi0T zY!W(i0KR r@IQtRj{Kyn(E5=9h_7Q4X56{ zp343D_FN67@UU~bVh)$xQ d*VdmZRhl-qHz$ke@ z^bhcKA~>%U;8Vk{DoJ7~n9OGUP??|=F6B2Mxw$YffK53U0fI3tjYK)w6*{Oye98h6 zNU#IGMf^I`J8lS~8_~2?{676Vb_jSHW)|&xE!4MBi&iC5rVW008hrVx@Ap+;Lgz z%DQye>GLmLzyJGFgW8?(?KiI a zRjJ9!4P`@iZxNj_Z)9ocEc%5J+`QFvW(A%{?|bOGlSytxa6fOsv;UQ+>xdpcbD($S zT8n+ZbN}DU=>#gjB8N^qMYi*SAyv(P(`)a$>BE^nyQ!S+Zf55Tt-9U%_-3}9zm0%d z*>t_Nr-Pz~-qmCcEIa2`&Kc*=hV5^*pS5>XiId7|-uT@FKfQ66@5BFmy015G(^4z7 z0|Ef6=k+8TuhJ<+PJy;`%kBMRFl>C2iPe?>(d?!!1GF%Jzz=0hm;oLDfWcrPq&xkE zkuU%jhXEG|08eLUQvd{7-~a#s000262><{G00004<*t$eLf&Qk_bgwU0uIn+{P!$h zngR|00001hkSbIGfCK;l0DvnG&jEnv12|W_U+mi4_fu0W0{|A5VG01?3O?WpfHVMc CCHxBj literal 0 HcmV?d00001 diff --git a/sounds/ar_firing_far.ogg b/sounds/ar_firing_far.ogg new file mode 100644 index 0000000000000000000000000000000000000000..5fdb04e7eb65b68cfc7b9f26a14fa1440de10a2d GIT binary patch literal 48222 zcmeFZbyStl_bB`v8YC1!QbK9z?sF7SKuSVFO6iuC29=hO&O>*1hayTJkd~4>bi<)} zAN2G6{=WD3-gWQ0)?M#^ch)d#o;`bJ&+M4JXU_AWY-XkgpaK7+b?m>DB6wW_ga+bb z=kUhD@dktjxI+FkU0q*a-&E=$$~Qg#oo;&GU@*SU)F+k(k^YDD8U622{2+#w#anYu zWd}1lYl}B8{}7;)qvPe~<>nUR=BHy(H8FNJvamIyld*NNaImwrF|l=Gy&(g^{5uBg z6RDRF00)HdDA0BK4n}GKz-<69WMCzXHkD(|iOFDbONf!ZsdaJ(C&UDIk{f;E`Tnnh zj^CIR05AYw7ToZx6* dMl{=hZvOi* 4=^0AM`So%Yn-AU9Mw zh8+Yn9VNyc6~{qV+;HT7o&5gj3%C&aRMR+1UmU*3*MHdJ3l2-3fg^?gmlB8&l(9sY zG?;YIFG85KoL)eZJp3hCJ(; {de_&fpU92LH<4UJ)KuL)*BM~T>5AlrwGF6be=BOY?`p} zr}70KR8%RLbDZA)Sveg5e7yZfi~m*pQRTl{oE;Uy*27ZO$J@((Qxta$h;Ed3+?K-U z0kxQ20Mz2JniaTXsfesqPR*FkqnsF3dDfi276l5G&N%Wh7R4VU2}p40Va)@r;y(qq z%Ye9Zf9O9lVvqU-F(a6VcsbPgBsA1DG+k`8 pLl+xd{BCV`&YpKvK)JoAD^kaKQlb9WKjIc-oMYUe84|+SLOx3q8h2* z5UKO %egU;2O{B%vQZfSWjX0A z;S0jy59Oj5w4<2Z;>?1R3KHRK1(|sN&2r2`@)APwf bXjqA{>|>7F@2d36`PksLhXZ6#0E9mv)QafT z&(T54yGe4xfFcQ`|L$Ku1GEqE!|qDJ?#lda{XZ)~Li{fP`A zF#rfh8Eb>_g=~}w1n@P{hJ!I>l!+V7|9qJL@6i875aP=M0D+lW_uf+XqJ {(M;avk4dk z1wY^it9Rf?w_IGr0l03KkW33S(7k|c$Gl;?pt(Fdp^ABzJV3_)w9gC2ExTp1gn;o= zVUIm~?}79S5=Au)z4%3~IAm}pOHyuOBPU1*@yA7h!JT>1zrp;9B;YO#?#6m#Nh`rO zBNP^v-U2a)`4vITam-Bfq}+l+(38OaAdWigkp ;Uk)9Rkp` m%{Cet!`5TSxAm5!$DC%$AH~TFBP<{&lY~`<=KSpO(w1bWg?Z#hz 2Z9>PYq~;|+KH!fI)BYI7 zSIm$~8jeLqSxF4w;DS Rv^rXPre3(flIMsmu~=J6`kZ(VKOYq zuWnkcN(5M!9iLZ>>KGN*FlBv;x`7qfj6H}^<^4{g2G){3a(_pW8x`{)b)t#Cp3taq zfXG&$E<7|2EBLMhDh{s6r!bDu7{>uj045;}z!=FNGgD~Xd!2<#M&tWOFb&`t5>&nK zHyU=MSE||Mj-Z;+eY`n|W#jy5cnpS@pv)+Y{?(B2F-o-u>~Yfol4Hyn`P+l#CK8q} z_;*82OpNNEzBqqEWbi0@6R8q|x*MYk_VWj6{EeMKhTwrT{xrygM^=(2xPKdBqCmWy ze;PnS;Q0SEfP}zd{`LSXHz9cJ4em|lPg!tN10VmEe;aZ@LLl%j=!OvZ_|JHM2*s$f z{e1+tU-X;Z?;#t CHVdB6Zev$ekLeVBa_EthE0KCixsskeA%{(0 zqxIZ`?s1QteCm4~R;&X5Pi#2}(Q!|D6IAivJmPWs#PdvKS^dcma&XIj4*=+Qc< BR zx&|j?o9cZz(RBwq^{}7dJh}Z|iy8*O6&9WkV4mImNR^VVroIjX=>PyB@EhE|CV>YJ zG7}e9cTWJ^I~4S+JR*