From a0cfae9f1c081f251dc9150f15bdc0be059eaaa9 Mon Sep 17 00:00:00 2001 From: HbmMods Date: Wed, 24 Jul 2019 21:35:29 +0200 Subject: [PATCH] lots of gun fixes and improvements, dynamic audio sources --- assets/hbm/lang/de_DE.lang | 2 + assets/hbm/lang/en_US.lang | 2 + assets/hbm/sounds.json | 2 + assets/hbm/sounds/weapon/fatmanReload.ogg | Bin 0 -> 54889 bytes assets/hbm/sounds/weapon/magReload.ogg | Bin 25593 -> 29144 bytes assets/hbm/sounds/weapon/osiprReload.ogg | Bin 0 -> 16070 bytes assets/hbm/textures/gui/gui_launch_table.png | Bin 4761 -> 13487 bytes .../textures/gui/gui_launch_table_small.png | Bin 4441 -> 13171 bytes assets/hbm/textures/gui/potions.png | Bin 3061 -> 3099 bytes assets/hbm/textures/items/ammo_44_rocket.png | Bin 0 -> 319 bytes assets/hbm/textures/items/ammo_9mm_rocket.png | Bin 0 -> 313 bytes .../items/wire_advanced_alloy_new.png | Bin 0 -> 320 bytes .../hbm/textures/items/wire_aluminium_new.png | Bin 0 -> 315 bytes assets/hbm/textures/items/wire_blank.png | Bin 0 -> 437 bytes .../textures/items/wire_copper - Kopie.png | Bin 233 -> 0 bytes assets/hbm/textures/items/wire_copper_new.png | Bin 0 -> 330 bytes assets/hbm/textures/items/wire_gold_new.png | Bin 0 -> 304 bytes .../items/wire_magnetized_tungsten_new.png | Bin 0 -> 319 bytes .../textures/items/wire_red_copper_new.png | Bin 0 -> 327 bytes .../textures/items/wire_schrabidium_new.png | Bin 0 -> 325 bytes .../hbm/textures/items/wire_tungsten_new.png | Bin 0 -> 293 bytes com/hbm/blocks/ModBlocks.java | 2 +- .../entity/projectile/EntityBulletBase.java | 24 +- com/hbm/handler/BulletConfigSyncingUtil.java | 36 ++ com/hbm/handler/BulletConfiguration.java | 13 +- com/hbm/handler/GUIHandler.java | 18 + com/hbm/handler/GunConfiguration.java | 5 +- .../handler/guncfg/BulletConfigFactory.java | 27 + com/hbm/handler/guncfg/Gun20GaugeFactory.java | 26 + com/hbm/handler/guncfg/Gun22LRFactory.java | 1 + .../handler/guncfg/Gun357MagnumFactory.java | 1 + .../handler/guncfg/Gun44MagnumFactory.java | 17 + com/hbm/handler/guncfg/Gun50AEFactory.java | 3 +- com/hbm/handler/guncfg/Gun50BMGFactory.java | 1 + com/hbm/handler/guncfg/Gun9mmFactory.java | 14 + com/hbm/handler/guncfg/GunFatmanFactory.java | 114 ++++ com/hbm/handler/guncfg/GunGaussFactory.java | 84 +++ com/hbm/handler/guncfg/GunGrenadeFactory.java | 1 + com/hbm/handler/guncfg/GunOSIPRFactory.java | 80 +++ com/hbm/handler/guncfg/GunRocketFactory.java | 22 +- com/hbm/interfaces/IBulletHitBehavior.java | 12 + com/hbm/interfaces/IBulletHurtBehavior.java | 11 + com/hbm/interfaces/IBulletImpactBehavior.java | 12 + .../interfaces/IBulletRicochetBehavior.java | 12 + com/hbm/inventory/MachineRecipes.java | 8 + .../container/ContainerSoyuzLauncher.java | 98 +++ .../inventory/gui/GUIMachineLaunchTable.java | 2 +- com/hbm/inventory/gui/GUISoyuzLauncher.java | 92 +++ com/hbm/items/ModItems.java | 23 +- com/hbm/items/weapon/ItemAmmo.java | 19 + com/hbm/items/weapon/ItemGunBase.java | 177 ++++- com/hbm/items/weapon/ItemGunGauss.java | 124 ++++ com/hbm/items/weapon/ItemGunOSIPR.java | 88 +++ com/hbm/main/ClientProxy.java | 11 + com/hbm/main/ModEventHandlerClient.java | 4 +- com/hbm/main/ServerProxy.java | 4 + com/hbm/packet/GunButtonPacket.java | 6 +- com/hbm/render/entity/RenderBullet.java | 30 + com/hbm/render/item/ItemRenderBFLauncher.java | 8 +- com/hbm/render/item/ItemRenderFatMan.java | 8 +- com/hbm/render/item/ItemRenderGunAnim.java | 3 +- .../render/item/ItemRenderMIRVLauncher.java | 8 +- com/hbm/render/item/ItemRenderOSIPR.java | 3 +- com/hbm/render/item/ItemRenderXVL1456.java | 4 +- com/hbm/render/model/ModelBFLauncher.java | 26 +- com/hbm/render/model/ModelBoltAction.java | 2 - com/hbm/render/model/ModelFatman.java | 607 +++++++++--------- com/hbm/render/model/ModelMIRVLauncher.java | 546 ++++++++-------- com/hbm/render/model/ModelNightmare2.java | 18 + com/hbm/sound/AudioDynamic.java | 43 ++ com/hbm/sound/AudioWrapper.java | 17 + com/hbm/sound/AudioWrapperClient.java | 37 ++ .../machine/TileEntitySoyuzLauncher.java | 295 ++++++++- 73 files changed, 2198 insertions(+), 655 deletions(-) create mode 100644 assets/hbm/sounds/weapon/fatmanReload.ogg create mode 100644 assets/hbm/sounds/weapon/osiprReload.ogg create mode 100644 assets/hbm/textures/items/ammo_44_rocket.png create mode 100644 assets/hbm/textures/items/ammo_9mm_rocket.png create mode 100644 assets/hbm/textures/items/wire_advanced_alloy_new.png create mode 100644 assets/hbm/textures/items/wire_aluminium_new.png create mode 100644 assets/hbm/textures/items/wire_blank.png delete mode 100644 assets/hbm/textures/items/wire_copper - Kopie.png create mode 100644 assets/hbm/textures/items/wire_copper_new.png create mode 100644 assets/hbm/textures/items/wire_gold_new.png create mode 100644 assets/hbm/textures/items/wire_magnetized_tungsten_new.png create mode 100644 assets/hbm/textures/items/wire_red_copper_new.png create mode 100644 assets/hbm/textures/items/wire_schrabidium_new.png create mode 100644 assets/hbm/textures/items/wire_tungsten_new.png create mode 100644 com/hbm/handler/guncfg/GunFatmanFactory.java create mode 100644 com/hbm/handler/guncfg/GunGaussFactory.java create mode 100644 com/hbm/handler/guncfg/GunOSIPRFactory.java create mode 100644 com/hbm/interfaces/IBulletHitBehavior.java create mode 100644 com/hbm/interfaces/IBulletHurtBehavior.java create mode 100644 com/hbm/interfaces/IBulletImpactBehavior.java create mode 100644 com/hbm/interfaces/IBulletRicochetBehavior.java create mode 100644 com/hbm/inventory/container/ContainerSoyuzLauncher.java create mode 100644 com/hbm/inventory/gui/GUISoyuzLauncher.java create mode 100644 com/hbm/items/weapon/ItemGunGauss.java create mode 100644 com/hbm/items/weapon/ItemGunOSIPR.java create mode 100644 com/hbm/sound/AudioDynamic.java create mode 100644 com/hbm/sound/AudioWrapper.java create mode 100644 com/hbm/sound/AudioWrapperClient.java diff --git a/assets/hbm/lang/de_DE.lang b/assets/hbm/lang/de_DE.lang index 8e43c5506..d43af7e7f 100644 --- a/assets/hbm/lang/de_DE.lang +++ b/assets/hbm/lang/de_DE.lang @@ -1466,6 +1466,7 @@ item.ammo_50bmg_du.name=.50 BMG Patrone (DU) item.ammo_9mm.name=9mm Patrone item.ammo_9mm_ap.name=9mm Patrone (Panzerbrechend) item.ammo_9mm_du.name=9mm Patrone (DU) +item.ammo_9mm_rocket.name=9mm Rakete item.ammo_22lr.name=.22 LR Patrone item.ammo_22lr_ap.name=.22 LR Patrone (Panzerbrechend) item.ammo_folly_taint.name=Silbernes Geschoss (Original) @@ -1477,6 +1478,7 @@ item.ammo_44_ap.name=.44 Magnum Patrone (Panzerbrechend) item.ammo_44_du.name=.44 Magnum Patrone (DU) item.ammo_44_pip.name=.44 Magnum Patrone (Güterwagon) item.ammo_44_bj.name=.44 Magnum Patrone (Boot) +item.ammo_44_rocket.name=.44 Magnum Rakete item.ammo_rocket.name=84mm Rakete item.ammo_rocket_he.name=84mm Rakete (HE) item.ammo_rocket_incendiary.name=84mm Rakete (Brand) diff --git a/assets/hbm/lang/en_US.lang b/assets/hbm/lang/en_US.lang index 3d1fb033b..d49c40eb1 100644 --- a/assets/hbm/lang/en_US.lang +++ b/assets/hbm/lang/en_US.lang @@ -1466,6 +1466,7 @@ item.ammo_50bmg_du.name=.50 BMG Round (DU) item.ammo_9mm.name=9mm Round item.ammo_9mm_ap.name=9mm Round (Armor Piercing) item.ammo_9mm_du.name=9mm Round (DU) +item.ammo_9mm_rocket.name=9mm Rocket item.ammo_22lr.name=.22 LR Round item.ammo_22lr_ap.name=.22 LR Round (Armor Piercing) item.ammo_folly.name=Silver Bullet (Original) @@ -1477,6 +1478,7 @@ item.ammo_44_ap.name=.44 Magnum Bullet (Armor Piercing) item.ammo_44_du.name=.44 Magnum Bullet (DU) item.ammo_44_pip.name=.44 Magnum Bullet (Boxcar) item.ammo_44_bj.name=.44 Magnum Bullet (Boat) +item.ammo_44_rocket.name=.44 Magnum Rocket item.ammo_rocket.name=84mm Rocket item.ammo_rocket_he.name=84mm Rocket (HE) item.ammo_rocket_incendiary.name=84mm Rocket (Incendiary) diff --git a/assets/hbm/sounds.json b/assets/hbm/sounds.json index 5cceeb6b4..9908d4659 100644 --- a/assets/hbm/sounds.json +++ b/assets/hbm/sounds.json @@ -63,10 +63,12 @@ "weapon.osiprShoot": {"category": "player", "sounds": [{"name": "weapon/osiprShoot", "stream": false}]}, "weapon.osiprAltFire": {"category": "player", "sounds": [{"name": "weapon/osiprAltFire", "stream": false}]}, "weapon.osiprCharging": {"category": "player", "sounds": [{"name": "weapon/osiprCharging", "stream": false}]}, + "weapon.osiprReload": {"category": "player", "sounds": [{"name": "weapon/osiprReload", "stream": false}]}, "weapon.singFlyby": {"category": "player", "sounds": [{"name": "weapon/singFlyby", "stream": false}]}, "weapon.rifleShoot": {"category": "player", "sounds": [{"name": "weapon/rifleShoot", "stream": false}]}, "weapon.rpgShoot": {"category": "player", "sounds": [{"name": "weapon/rpgShoot", "stream": false}]}, "weapon.fatmanShoot": {"category": "player", "sounds": [{"name": "weapon/fatmanShoot", "stream": false}]}, + "weapon.fatmanReload": {"category": "player", "sounds": [{"name": "weapon/fatmanReload", "stream": false}]}, "weapon.zomgShoot": {"category": "player", "sounds": [{"name": "weapon/zomgShoot", "stream": false}]}, "weapon.flamethrowerIgnite": {"category": "player", "sounds": [{"name": "weapon/flamethrowerIgnite", "stream": false}]}, "weapon.flamethrowerShoot": {"category": "player", "sounds": [{"name": "weapon/flamethrowerShoot", "stream": false}]}, diff --git a/assets/hbm/sounds/weapon/fatmanReload.ogg b/assets/hbm/sounds/weapon/fatmanReload.ogg new file mode 100644 index 0000000000000000000000000000000000000000..5ecf67ae002bcb62072f5fd7585a8e6c61647a79 GIT binary patch literal 54889 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

cWd0IF1FRtR0pb>Q=v?5-w{z4 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

c6 zbEms9Q$pI6(XIEF7-xf84L2Ng<|@)VCit?8I#xJzPSOSx=M??>sG94iN$Bm_q`Tuo z+Scx>l{PoY6`ckYkDqJPR9C?SbymojwxI?Dz>%DHx zlTQ{%M2>YP5YgF&T?W2Z9k6Q<1ZKb0SI;DR~=W!-O;iTX_5VnX)8s(d_>)N3&_Gq7+Uwc_^2;&~$P z5VukVj_;lFMlGE#MT+#>Vkkd#in5#T;+XGJVR~@qI zjzMq(JRO-equfq8oB&u61G`guP&IOx9WH2PTksCG^PL5lWrsAJAl4>cNeG-JNO``fOJzVNpM>Bd+k zrD+(WnFiL+)^{CqWG>4f?jgwa@e#5|Z%W3Oi_-hg+`rR`BkEe*0`-rxhtc0;{N2c* z?hp8yW}8~NFZm1pR?UWSLqgC19!kRydhXa7HUO&WWo0EnOhVmHvKB195ZkwGyKK*^ zcB(&h_Wpy{xEpyx=USS5)xY%=XMXR+dgYp3Z3FwbfByeYqOW^EALL|laq$X-m>8EU zArte|+WA~A)K?KPYuZrqxcHZ<*j3*ZEAjaJzeqdT70`E0fjRl3N5rkVju2k%YvLAS zCpl$AJO$1uyy~tlq0eQ#Ql*;a0iJeMZTDCRKrmdKES9j&bd;5d8VO-%^S@rBLf(0d z)9YDUKGJ8Qy1H}<5%jdd%RMaF&oVg(HRQzjZ_?F^DqHwPf`}XnE-1=Hmoq=rWAr)2 zwQeCSfx4`14?>AU&Sw~jsQz8Hm8ee7{$Q$S{M=!!Q3k79O$0_1%g@Wj*m+k}<2sR% z_q}3=X-8P%>ZIF$2=GExXn{t+rdt3WcjZyK=nMkD#rCRujF427Bw7;q_uu6|KMK!% zo|Ih2YhTUnyXD5P&Zn<5M=apDPw2f?^3`?}BE;nr&Y$qHHqC699>?0#l}Yh!la@41 zBm7u}9_ms#_B@shc%D$oo%=9yK2$9S#(v7}gke2WagO}ML`O(7Y2>qdv8b0X33;h@ zZ`N1O^-SAiSXqQJxJ%K042^pnMZ=^8`PDNCF-1il9-)G8E~YCUN5#0^F$@xLzUWz& zI#YIMN!Bz(f}Naa5BW6vSZ{xv#PLUD`KVrJ=J@;{^QRxW_YXvf(4)$CUM+RJaGg&& z9?z3oN?7J6=PDBgOY8Ntd_Vf~S>Md>_^TIrd0gJp(QGCkS;PItt|lpmutF-Is(eBw zZufL)$Yn5(A61hCs;qj~>&~mN8LJ0z=cUCV_Q)SqkjjSeP#sTPQ0qHq7|4~MxQ&wu z&|d+*M#XsgPz(aL&J7oPHBKhWiL#mUv{*3WdG;fzj!5}w?)gVu<#qjEb5=c1eml}G z-o@1iwP_KP-4a)HUPS!l;}ebut;y8bZIuZ=J9}z2jSotTPUPf8pdyvc$I$k**@<;W z!#HD!gZ-Igt;;9jF}hg)$0)`AVA{UYS1U9J3STg7!ocrA7B_&OL>&;`I-@SWN z*IYmLcq;d)y)xQo4{w;#t@eitNMCDO_g6>Q3;z1}<9s}1f13Q}2O>z1EF)u$59i1v zFX@eSpabtLwwCrjE#YaxT(aCBYtoQ~0K7mk5b+J&`=wE7>Ycft)D2eR1oaR-fQBt5 z08YL`<-cw=tTR|>9sWi&Y5!9MHc&G@aB5Cl=shezRTY=y5$@;Bq`h`(bA?dpAxU4W z`H>Z+J}t7AbvY1f38?ACUQAaXuT#pjrH>qE&KXX!u5rH~S~s>Z#}~Wl-_`{G!urO~ zY*r>fdgd?9C5mFw-_;g^ZdNgTCEj zTZK@}cehg)mcr^#^06X}@JY(Ib!tj_FaaJ%E#v-AIm8E|YHEiMF`p88nWI4inv#`d z7~#rX_h7Ed ztW8NQMrbPW9p~wKhVJ9zZ~uETXTSHHF^&9nqC9w8Wx~~x7n9CK?~IsWIvSc;VQZRk zXtuiIwYO<wW(&+N5m*Q_3CaGFr(kwQZ#7K&5U{VI*B4E)t{1T)!a`~XZoNB#GxJj4!oLroE$R*Z-U0PefX+5`6|k8tUqg+dR<)T2Xn zAEHJIh;#UZ(X7s17BY3`f@_93P8!E%#c-qWuuJ_XVP1B`CNP(6BUg zRu@150A5G^@2q_I4tPUNkysNWA|ez3<@H1xB|-77>U#SVzbDY;!a4G;dvYnlb$Kq- zOEbwmGf5VsyRjOMyS8!Lt{JIo0d94;7j)VJL4^bWLdOe800PheK1c2I^1mo#UGyMN3>nPY(%k!){kv#!v_Z5PGE6UujrXXn**m}d-u4Mc#8(5(kCI?Qt3mqt@$c( zL1tCFJe1v;$b$Hgr;b^rl8z2ne0uM$lBf>6d`WL8 z^WL(=&t&OeWgpea>xetl7AVci_KoXU9UY!soz|iSv4Td@L(q!<^dnbXL*SvGw!4!q^2z|ZkNwYd6c9rKBPyBnZomjBbb1;kC=F9UcUv2)5^CcVsy@z z`?QMvF88)-QzXTw;f0dyJwVlLQB#}{S5z_=wxKhK!KhJD6yAmtUGUppB41^3f=@5L z`E@|W2QKTB7P8o{_(yvwX)Hw`TG&|iW2|Z>!<>3#`NFM3_-AyCD@LQO!uP6JSRo(> z!(nom`K43VbMYH_$nD(Zrvfred5a1LdUZ7}PLkofbPPSVAy>i(EP&^Yn!}b2zNWRT zWhVpxxX8#_E=?9aD;*=x&^%2ONz#0}hHsockCarDmJng~8l|9rg29-0x&Zr)3N|ZFpt+u(UP`#GH&_ zGQ46tE(siW@AF&^g`7$bR3ZooW18|e<(05neQU}UiOg%LQ)O3i=6%K`av_2o1~ruv zxeHHcXHx(GK%WBu00000eJE!r3IG5Ar=qc|8lb46q@SFko1&GRpQNCiqM(zWouZzi zoT8h)hPBC_u^1$PM;Tj3WY=jsHgb`G8d+9EhQJ+ZqHRyP&Q5J?V@qhCiPa;Lq5%F> zypFYj^rL7sbUtg-XAtdVJ68lol}xJ$ADzy9K@CE7r5sCt=Qu-(E}&^!$FzbYeTJ4B zvtmw|uA+#GNVho>Qb6Ixeg>uP7$|)EmwOXQktQ^#zBR?_VdN&DY-w7qb^@GR8x4n% zM-fQP2$2c?c2&80=0%_YTy*hfoIWEF_sy`9#MG@n57igX_g^XVtlr{j&3(+5^O17; zslXU$DNWEohhZzSOz1HuUxkt3IiA;n<4E^erq^> zteegrABr=N%so}$X9Au+48-_KIgUjc0?80Zm5ajil#l&eGsmEuFy&pb%L%zAKLFE?0=`Bi?Y`jx0OyN56}OlZ5fzk7DVabSn;tE- z>yb_0PJTR%<7a1i*uvI9ThDI2IL9ujf>ngKVW%Un&AIAv+gK&EzrPG<)OTH_QY!(8 zT&(vOm>1W{UWz0_smti-p`5GmNz;2D4O`=?DyyAb%qE39d@YlzG~N|2CGB}p8r~^t zJhet8?C430$6*C6_woEj*2`7bJ7v(4ztfNxgT$mY2L47xVElprK*O_J$gVfi3SG+x zNZm5<#-@w}o}@FZQ{qUDWLfIppQYtl=H9;ze6EsxLzr5KZw8b|k7PRX0pj^=ydRcq z_e7_%8<`opHe0J&5^{55bJ@UYd~Bm8JH8F0piWFHnXEZ+Jfh+wt_vH>VT>>?OI6mm zPTz`QN#^N60>Lk-bSTx`dS148ZScs6gq9_ zs!VwnL8$snNsXOO_Lui(e?Z@^pNx$LAf4{Y&AQ%^)k1jx6^Ip6cCH8gU7AG zdsDM;BA2o)#@D0@I_p%5S0SaN_Qyc6a#ge{xoi?%n-?|#{zheNln@~x0gVrH$uXz; zfD@K=P*rIp$${|tSmtrXc%REVJJ#++`l@->pq~iu^H)gup@(R{D|pfElS8G^^se7QDvajR_U4ye^V?>bOfDVVP=z<5 z1;un%$|_V&po|y<9_miuM&xzMm^^6ZaI-^NNRxjeT~V8~*FesB6eRvejj;a$27t!L zp6iR_Fmg}mF;WDeOl3+05y~vJwwA+ml6~dYNZ$Xucd4jTmGt$Rd{PRw4+n`I9FLaf z*P>%58fQh#<*{YxZ$AfzGo7e|nRUn;81b;xT2ps@kGK$?dSb0ZUl6H7&qQ2$x9*7$ zJaP?RxqRHKaKdw&6mAjG99Q#t+n(DSo9XPCi8s%tkV}8`+e-~<4?aiT=UD)l^HT;U z)QS(B*b|*>3_2k}Q(4857$`aS4b#**Q_o*M{u!xcJrJ+iQl&*N76Zf0(QOO)bY`H| z^}kI;z`k411WMX&sd3k#{aFj8-ROch?`=C?ztaGOQB4`eEGVnm0D3e0cER3f0p>`x zTXR;WgsXUNZ$s`!WZ;-KSF6gmh*=k9goW^=4(+jP66VpS^;t%10RQEm4vv^yrcVQeobLi?< zXbb>8ZAzv{#*K&v314F4$*4Lne9pfzcSreV0R2Q2{*)!3jU4`5&N50U7r&>=Oq{e5 zhW*b*GW-V_8KoFN$z7rec_T5Y%$7eH$r-#PY_mGS&0%;~7Xb+c9!H($<(Df2OsEYX zh9&I0-DQ{s0JCD7VnzhyYfI{}mPG$DJzdlqqNh4J^|UmyYa-iH&4SOWuE~x0fFwdn z@->HRJ=D22%6|wV526p&{0s-ITG_@c{6I6+{?X->tDTrY)}kRUSK>s%fFFJL)=8G6rBi;BcRGFReF7ig^*#8Ii8z9!)|EJeb$xEh`1Ebg0zZO|fv?44@4fs%%9fr8E?PshIv*qD_|sXzxF zM~!8c5ETtUL2hz^+~|DX5oSqNf)Rl=nie<7+MCWls=V?3o4@bt{Owh-WN!5=ueP?* zS4S1fO$IKirE_8q_@Rp?!)k*WV*8n}jHhB}S*^&YgsR1vT3p{Mj5LvXhP|yHt9N+5 z8T&M8pN7g#V9W!ptgR|*EFCsTyjHK8y=}3hagY~R(YDA90wvS(xgNJy-TxuT(Qn7C zTXO*(M`dx5Xi*w~CKnxWQ6kJt*;tGSI@i(H{+V%homchU_~oO~@wnQX^HM0EaecUR zwZ%O~6^C*EURXSK)6t%wD?J`$X$K++QRLJx6^Wv$>DPl3f!of_(McvDhoBL~-b%#z z31eyJ>6582U6HHGRv?%M*9#tY1QmYVx*ESAh3M2|G72M?sArs!bY+PHg>0>_%W&e8 z^6Ls7N2O-`qXr7bXmasv``yi!?lIFVttSYwnl;(WHn4Lie#El1#l1Er15^8f2xPjbUS*PT=>cQfYL%7ZyplGxXm^}0vkQm!8)c%YLZ)4FClk9G)*zt1f9W#ALbu~?0zFrXOf5E8bNBZ>z6 zBCZ%5{ze6{|BZByb}2yPg)Ad8$ZS>KO+zGvqU9y|JY9GDzpv``{rxD@U8lRdke)ld zGk9={@N$8Nk$zt*a41vmOvE{&M%75;(GkP6yyY0`QAMCsbQ!I<=Uv)$LmT_6>2{HW z@O=vQ7OXq+dR(C(N0Qy&%?-t7K6fNwN4|W*_b5!hJmak2(3nb6PVUSFE5LcGInyaM z01dk1iwYh`1+Gh|$*cf0xe&#PXQ#7m1!;|JR0y^I9KwQkZs78v^mwa%sy!2J+qEQ-Cy=!$y2l371r$F}l&ip>CkV+4@c7vc0SVsh+iI&Ih783!z za?7$^f}2G&nb!qh2~#WfaQ?$6ZgWFeoDOWlN@l73>RsUaNG*ju!|K{4}OV^8J`*?_VYTM=did>+<#{A|Z_BE!@Y z*5}rk-sGh2g1>)N@1f%wIGZ9j-YV|HG*wo_cG1A`09%@DfNZN}6Am9Ms>;?8vTT9&(Yn)ZrDk{Kw~W?6r|c2^xKBGVwzy+9sfIVbbcTJUh?6c!#qSo}rmlyiXDTfT zREq0RvwGyogXkiO;+Y*jN7Z7I>ME`qK;uKlhHnGr*%+%~2{UdomXHycn(wLpuh%P? zHNKht9?hM|->%g}D*vpykKJmHoIki1SSRAqG-||AXq)n0Ic&8m+ip-gf4Hm=>sD` z{#ke}eT(xlRqRP0rAN5d*N^Vtpo^UGRXy(T#pA_z4%SKAde8K9qiVc-zs!ulV%`Te z;SoVht177Vim%~kLYZ|L(-}`iii?&!x2XMHk~kp;CBGWE7b)u|ge|69Sz{A{&{rcA zEoFAEa$#DgG=FqiGzWAXv9rJd8XiY2X_sgf5=aWvOddGJjLyx`7C@5mQY?ue(DoU2 z3_A&9HRD?O`VNfTe1Ja9)m~IC3pEc87n9-N<9#82k0++*wn$i7W>enG?uB z*~SPJEAQ%Day0*UZ~2H?&RwyemN6i8$4me|M{Q&KW5fWU2IK;78>l;qjv6CL48U0D zUTvOdI6m(8{pCLQ*4@w39M9$wkg5qohDnp~3xK%`OQUKgJm9fPYIL5Y}! zqEWpB$#7;v(3h&HDpaY&pmyC{CETXmJ{M1CXHx(G!2AOM00000eJE!r3jhEBGqVC; zFP*0yBqk*t9v~$rte~nO9UC1U9vmYkCM6~&CndM2ub!x)qNALjpr)m-AS)xgK1You zNgS+705rKUtIgeZyPjpzvm^xGx)9HMj@moRy28BLOX1wA+$hoIJ&)Yu5*&^83xI#b z%${;10o;yJsCBQMX;Z#S$<^pqUF*osj>zGM4-cb6X2}SSEF!_V%e>xjxLEOC0F^#e1u|rrA?P#w%}f(6!u0H zDgK9yO&!4b!RK#}ww?1RM6YcCn(5O^@(lIgdz8*k@)9lf5pOBlA1Dv$c4Kc(&(2}HG(E7Bu0);+%`iY=WRTx-XgJFx+* zQni;U2+)3}_5z_b*CO6x?jJ|KUMULp%a?U}i|!}v)Z7S@Z)E@n9j(%Sm)zT@RaIN{ z0;bcYi37KH$1-%rRTpxDunGqd8K=_;9n|G(wVbcGxTX#-aF_pakG3*kw8?ofsja%*#DN0q8 zRhc^4k^hlZ;^W?B)QBoF2>Jn@S5-;PgLwcV#D3(ux(H!K(4etMD;Y^d+!hu+!(vNg zjOn>Zu&t8bV_X`JM{jCN(OPlQ`X$0%sL17z+;1k<#Fg_}ZLN!bH<|u?yIYE*E=KxV zQ{YjGts-B?L#J$p`#|cL#majPwit&t_i%I9&cdt6D$O0zjtBW!bq57+-$~t#n1Jj} z9sJNgLRQOx1>bDn2W4F7ep<&JVG$ixM-4f{+VEpQsNi|aFRS?fd`0~fiF&T*06u_1$zFk-B#O zcWe5T>AV?jJadi)WLjUvfnCb_$xILIgh)Co=-f=T0toh~vl57{_Do7c z-+Z)|>PR^jH@sRc8-Pip8w^cV0`#xy^9+b-PWF`0c9Z_PnA0Fr&j%R7lL0(WW`Vf7 zYzrXK#-xIfZGl$FJ=OfLq%I*&2?R@3N{E~b0Wi0luBt)H$GCfV!v~d*mszHa`YP;R6(qYib#Ng-Bv)C-m@wS*LxwK z#f-D$%m@Tg*;?jbK2r7q0*0?`sjQ}^akPJpM2~?!vzBkJaRs_ekw@4)jd5f`tCV2pSab zs!P>wPgPya+cn3;!ri88lRQZzn`pX8g8I`wWHRvzltu-fa{E z_tP(9X%cG$nt0b39A8?iz`A-mGNACsK1{l#kC^w2&a9mA(Kk*$98+$e$TVqXUY`<49r9rMnAbM`z=3t8U9IZE_qwOOgA=p8-}q}2gu{&OAUviD#Lw46!) z%nnNTcO+BR{^@zA7Vk-n%QLVv>;RvW8gTtYG8P_G7gcw9)9N> zP%tDG0Ps-H50B`9XeTrvsY(;rCMCEMj+a&QXUxl8(xYEO*&B68ea{xUI+8Nc5|_ru zMrKuqZzZe{=Qqh1jZvZL*0!wpU5_}10sk8t6@x)KTSG#5c=C%T8>%#Do8^Y ziZcpJ=e0RR%_svCv8lkqT>7ZU7`4XSl%i7`d78{B&C-j{Iv)Y2JfEJbBUQ)Mx~!8& zeGt#B(Rr}y0{$i)9vYxt&;TB_QGL`iBEqt1EtplYDW#Zd{mj4ZiBFHmd6#|0)fkUU zlAKGs+4{62hd6yb85hp#7bk4d5+`TXYtHvlv3L~)q!(xF9&yd3M)cukkFrTgK3wRC)W23=i32poWVc{V8MSX%rziG`#QoZUuG{J8bsM$< z5lbkS2F?$YzP!wLe|xWlsM8Q{LlUxz8rC_dVg{a8&8YrF5NN>o(tW+vF()T%&9o{j z3AvQpSVP>-FO2^9>$u}%6lX2^*o0&V(75bLH)HTqZJ9u;>Y8!!ixYDTT4WioWZK9} z4y;BnthmC6Trad`m&P(h7||KD9V$)39Q>SZX_uGxe!gVVVlIavKCfvq7Hw*%67D`xU$n2>QV+!bqZg=W8{ATO2__}yJ^MhIj2!-kC25feW<|jO zo*sjo*uz@31`y0j$yf>TbEzrzEsMuyqR*t=X`lIA$Y@*_#uG!j-?NHXj_dI(OFfU{amH_Aft4a zYa9BxAl{e{52SfY?G5P=PmyWTtIj&5_EH``5#*RuYcLXlXmnD!e$354+bmoH{zgTj zN{BirK$A!7VQkk;L^Kvy`X;5MnPI>lr{1Ksdv&LsnzmL~RoQ-qs~q*m@Q6HO=2E${ zBBVPO9+p1Ra3&L5c4=;7Fw5SU6Gbl2M#dk^14O71xscqm4(6>Yt1@B)b~5)nmh}IEB=z0tZt?k}a5_$&s=a%sI3>N1 zaF(9fexm%b?lPh%neqAQM7T-4PX}rW%qKm9p6jDfheJKi=K?Mx?^0T5Tngwm_!qPv zNB&uv4Mt~XiaEC&DiBvy49o1KK7-4~C(UcfZie~(!)}v1$Cv)MXw+s>g%YVSki&s?}y3?suyA{8CwnP7ZniEeK%*)z#Rj^weZ zSnV%1gPYc8l{?HQigZ)UW!~KXFJg^6Mp80d<)vWVEHSLFv#ze9mx!kq67?v-drlq=0{%vIy?k>F7Yfu6d8pUOt^+Zv0YEiry%95mxO;z+oGxy&o4ka+bQaT7 z)urf`{xU9c?u=zpIprPO;2(KI-Xn^MKd~~ZThXhE%?+yeQfl;_yP^R1yN8mhU6xR+ zBnBt9E&?eNyphp6*LbZf{vO6o%N-j0mrVqY)zzKumyP7kZB9t?H`&|t<|jxD{H$Pr zcULiBJW~){g$=M2-bSUm{g4VY(0CCKBpGuuo0V2Zj0iWMBggHZ(R6utxcYkir%z`| z-EZUUzW#VoT^%Q?%N$!Q*Gq`Rk-@rGK9ugkzoHBh7GP?)mt@q!9NsdNsEelIo%)s) zm)>?>de$Wq5$77`|8XF->I~~oWU`gT-DSOSI5Sn8<(DJuiRPdvY6_uF4D$9UI6bCnowb_w5n&2zC9bvyz3EWi;nxdfF z$Um=xxL;}Q@ZXem0<53L98}0k6F;>%PXN9~}i0G?{+I)7IaTSp#60ju5 zT+GUPY<1t5Sl~@ne}^i~IgN9^>_p#<>J~rRV-t&-j*~na4OzRkG914Pr~!IT6zw z7B)W06*=_~WzU72AH$EhepildDPW+8GB8$@XJ`%UDZE@8}{$!Dj#4j!Ss{W%n z<-334DoXert7rnPxh|{tjN=f)n|SJ)Md^?M8f!W2BSSt6|Ml8TOaoF5z$SUAvoKoC zW(?HOsRq>er|JZhb-$V-I+gUu&b#HVLK;gH5Vq_gYZ5e5WV!ywKM>FnuTAgS!}oUM zWqEbEdU=Oi<*U1jeR^?pSHz>E`x^1)4NO&Zm|8w&6Y)s?y?osew8XI@N&h{2FlzF6 z_>^lE**hi#T4@~s2JizaCc*#p#IJYEPjg>>I_v6pV#rVfw94{IN%H!muH8w_qtChl z>1nrwKX~ikE_9CUdAW|3U1B?(7wR&inzb7@%%|TZQCjtQwOe1(uGxL zHht*xoArm-F(A0Hkb9wjETt)--^uc@N49v&qnCaFHV zC4mF9gNTXl>&$sp+YX7A2>>N47+K0;w^+$0in>^k= zBAeW=ibG9~Oizk!X)nAqy6bu!z3mv){bhf7^T~s8Z@6ri;^wz2h2j$v#*FK8^f2%r zNFx@2t-02K9fJI0#2Je#k>Y*Ilu*Fn^?zBGC3QeB?u@E6!3o)1oVt}A-t2afsyE! z@{)L?i?mHSj%zIkDEYF4edMOx;%QSyx-2buE!QFY%Cg>{=~7C9$p83ho3o|dXzIO# z3A!<>q^Jw-+rMJ~9t|(PR0szE?pqL;b8K#&Qf3N~@i<$O@h0`namqE9 zZZ)%tHI4?SDQYLS8B+`kt|^rWku9;Unnn6vS3KhwsSsQ3^wZmn00XjW?&uzhX7RwzW|<0 zHZDa&ZAGwv=#6l{5NK(~kO%T3cKP^SGhX*NK+-Lk-~SN=&5Yl{piIMjw9_ zV^^mm2(77zdFm}f-)Sns?doR!jO#!NGzKR@YJmKTk@^VG=*2A18~^}5>qS5S{R0uh z?Azs7J!|!~4{cQ0lv4U$j-#8|zw@;Kk3#u#^W=Zk-Bxp7b1Bi6jJu~>__0BYJHPHV z*f2W8epD_z!t`CEi0$CqS=PpYr^i(sojcTITrWH4|9`ow%dOS)nYe;{?ynozZYh%p z&M`#0pVI#lS3LhB9UtojnyBnboc_w19%bUXoGE})yf-HhM~mH3h!ItpG}M1Pi;;tL zmu8UnMwD3|%u@mYKFdXb0kMM!e0Osv=HBhz?O-;NQWA%}tj8B)`Y&GCQ9aH2o~|yl zuTEvmhV|``ZWpQ*>^i)Y_Z+10DXQ!U{=fxx5V~TFoe|))@ ze}`5Wsg`BC=i2FMW7%Tg^RD(XX_t8=M(eJQE%DPlwXS-5!O?iDWPIbldg)rz)9ZGXgA=z#OotJktHw;}VRE*}NYPIUakK~iStS7m`~_Jx z;Qd{e+0i(Cy^i`c5(|4^sR65$B$TeE&Ji_b%O|I(JwBVGH1%2CZEP_m2_doN8l)0e z+-k@^wB53u9UNV@b%U{Y*1Xw9OBpj} z`G-llT^=9@o>{ek0OkYeY*Kk`TRJWCz*d1r`07?XZ^jPviE9g0wWe(p)XD6LS8k4Q4`Ks=U(6t7OOO4zs+^( z_3~Eebf(!Jmv6o7tbd5M4T;06CEnEc^5nFvdY;2{;bfi@Pk!6X7jKhyll_El69MGS zbV0Fm#kC(U43VB$|BZlk3xv80gq~T&C`L4)5kVf^TG*Ts$1_#5Bw684H0M~1$1KAS z|8c8udOTINXEFM1UlCeQQ;lyGgZW9~{n+JH_DbVVhpDTfY3jWDo(kB2UQQ}JARsG3=u&?fs(9P6AShZ}bT}J%8YX*UP0K`&N z4eIiv8vvo&fX%LzLTHJQEHd{Wqv<8#(l#pZEwK|MRrc4=&DDSa?`x^Y63>~xQEoWc zsF;ZNq*ftXZ2%-wCYMp#^(BBn+e?!WTG9QqpXi7Q#{|jWTwV265ggIDBD;^NmH<=F zVJd`R>lo9xEHCkiCJf0+r*t3u)ckIE-@IwSko}hB^&t5eKXQgs>1Xyfbgs^Q9URq| zO6pyHL;!iZ{f$Q29=qZcDC!*-s(>0bzhwa&S4NkZf1E5L*~uHP+fd%kOIKCigDW6$ zJQ;oV0>TLcOL_tT6j9u*}M_+p4$pson zMbKn`0AO@S|IIh|q2ghWSLswXR+6OAZ4v`(V)XSra`p1&ovQMuOV$+oj^pV3rN;Lh>j7#yPv%_Sb(iZ!P@7X>_PSO(cH=U$=S1o3V~^L{@FtZ^Xwb}M z?CVum=cMrl-QM z>UFz3LV>pXF;nHBy1zd{XQ3Y(1s+*-f<skoW_ql6P<&I~Hnuz0a}EbnpT~cdaI) z^r?5i**JdQF@y&;*}P5eKcXAk)k2ET2$Z#@lw$giqS4`x^DdXgGEr&DNU=rqlR7#i zB-L-sL`#NrDm@^iewSNO)_4usB2^i6?hzwgy}o$8-N-GaUU!vIiY;llEtvs+XeB@l zK_Fobm%4_~$2yfMNs`Erw5jp_AxgT(oqBxK^WUA3pAnP6V1K*{>-OTC^?DwH(Y$nq z;xiVh;l_M&jLh$2<8@|_Nc<(g-OJvuQn!{@%l`cYzg9T^AGhO=KYvEM-dYMxv7R>E-=(8)wOzQ0aDGPIiPAEJa-}H->ZDk$!p}?OLA9C9ppO!|N<0`5`<1nWw@S(Ah-Q2ascWkpk*lg& z-@WSGp)Ul(_`55S6PjXl)V*^BGg;r`5>L6azN?Wr;HOAzY=Imi*@hB+yg!z6{=3l`e)N0N`~Uo9a*pQr*?0BYiQM9?cqEe{r<<)3a6p}#WP#4ow|yAuC9NapI%cv9H@ zM~p!N$Cf3w!R{&HWui;(6N#ngA~@_P`fLACML-xOy|}By0se|D%*SCsgrxYoSHXr} zmU>yqNTlB4mSYw{k~aUcbC!>MJIb%C8r9wFVZ5gNE{~7V_3qzHSjSe|M$KpMxITDs zybz!6sZ%f9=`ZDeNB*t;HGJ81YLc%roEB+Umz7aASujy)^=pUUL)k2q2H)QX3b$>Z zF$5XWx3p75B@BDSvt(COp72EV=bKCBOZtW=bD6yBWT2nQQ%AvF#_cd~7o;lP`U?I@ z)xZG!0Kj$CyHXmr)k;Z{r1qaZgrwGdO?RvBTkY+eb4Je0LR2NTvr6=+Kgykx`t>Zi zsuIFp=17e_;oK?2#Cr17v>wbb=3+^IidjqFdcS`bo3i?~s`l5kcIxWJJ_1RY)J!!& zv+|J_rlYEKi(k6c&#ovXf=m^I3qlp; zdNXPymPqA+1AGSq*thohcatyEUq19)fBDdKO)E)~=wOa_emVI+qsM$b9l45oGG?Cy zk36>n)9S!Q)t1_9LD35#_8~WOB~{lw{4khFiZlmW)A_qb8?)oJs+DJfA7Q$cMQ>D6*Gx6xOtP-wW#^d>9>Qg5Qi`r}zFskUpUW3+7j@rW&w zEJYR_P2)%P78-cmvX~GeINe+l5`LgsZ6^#(DIbVZm5K%ejoexyjq_rRTJSmsRpkLW znVp&f^v+oZ1f|NK1!S;m5`uU%&3thk+#D^%DdZpehyV;vbRpe0lmyBy;FivJcpsZs zX!jRruP#8)ACtPhXx;V{y?`tXO(|?7{>W;7STnrzX6#$NF}gOaEdtv^lyv$zrmyLM=Y4 z-O_BWiH^Im-t^Aia=Oo}eE^wBId5(E=EX%JqHDSkDd+h$!YV{y*s;~7LVI@`66Yz; zv3O$iex9Dbd*&ur`TAxxayo^7L`ZMC<5=h5lo!M~&xN@blH3m_z-}g0{#dZaR`msY zP#OSFXJ=CY0KmHh000000DUNDC=CDr0Auf<<{zn|qouN@owTd3sjDX>B(t8WARQbj zC9t}ppPrtUo&Fh>m7yaK0FHUrW{{hlj%G=KY9vXL)^@B%8d_Vw(BAQ<%BL-uyRA23 z<7`zvrnlEH<-|_y;>-bo>!u#aYU}?jqkGQ^MpTDhZKlS$e@Xh9y6n7tn{axXTlza| zY!e7<#tttvCX4cJs%`Jy*8KIfp5DFYILo}as5308laCu$k$2{q99ak=r3K%CD` zKfO|G>WQ|KR9CYj;`iH&{%Bt1*p16xj*ON^rx|&qZe_(V@~J9*M4&txSqC~?Tyw}V zZFLb;HTf&rtiS8m1YSVeZyw5R3>~dXLnxseo>(Qc2g_>%u-=IoU5{B?PNgJC(lBPU z0n2yR{Fdb3J+J26>pdHX@9Jd3=dGh2R-dP^t5Z5(9D9I=`|qwI5z)RA(>LPhrsFXA zq3Jgr^}D$(*3ue<6&K2;tYq!YE=ESP--@DDC6=)`GgOV9UGeM(C&IPPYu@^cid^W-Az4GzSzrHu?n>d zp)3z;Lb}V;Gd>m_v(|tz?>>{|goD-+W0_Fz+ z#C+GS>j)x~mxwwbY_z_tGO(U~((8(xE_rIU?B7eR-5G<`Fp=vWcz}wcRfySCn2wz5c~{b^V%VedH9Aes?*zcq86W zdBBO5|NBXWO8)3mr-rrIAlWX6pQ|0zTjmH|cYszr`8@tDJ8YFSGuzL=z5ol~Ns zj5{1u%=W;34WROd3>7|EWx$7oAU4R{;+c+FP(#HTSYwP#@~4-SG~cPhXFYzic)2l7 zt19AnI+xy=fnfT(5bw)u|D~|y{O-u2rvn6+Y9h)93*)f= zht+gU`2wzhw0O+z4zk-S&YHG!;0D`C8~Tr00=^j)6aahxz}u!%56Kp!8UVH=D+$R? zlM$`AvrXOEq^FE_t0_&&^K2^Agz75zW!>Wf3_iJ1z}_J6sAuQ#(8^2ufj-`saj;#N z`^oh;@;!25{zs$lx9nQdC~q-Z4EkGKOX@oO*#e~es7x7&(ren5?WiazE`vl)5FNA! z&&H;v9Z)wD6qg+`P;0*J0GtqjMl;$i0csI3mH?hvg+_;hpkkKi--sZ)$;hoWLe^4C zvzn?TQRbYJV;&yQc0Wd})Yur0^ZVOczZkQsXVt78?=xfe7_&(uNkBhf{C28FF>72N zfsg*`H)vwzGh&7Aomh~Bc065u<;j@E?d>`5uRJ0Ev!r@r-O6g;=SVY&YUbzhyXEk1 z<6&J?Ec#ZGZ%V{6QTM8pRrfnMy+n*%6>k>pvu2HqN?ye+U8(at&*ifOn&EHxWG4h& z>~@}5C8z{=02%HN3v#;8V>!x%WpOJRhR#(#NlfKbJ zR1sbe6B=WMOBnLLJaJ&A-xKG{ap2ozsOr6#oEu13%FKOfxNIj==sKYDA!)=A5P|-M zQ^9lhvx{!(Ki~c{881Jmzp>$NM6MW3D{#*i9SvkY4q$xPO`$`MB$ zi?sCr^0!Jp&$+}OeDBNOO-)ceQ(T~G!>l7(+2AVnEF#lG-rJnRqkz=BLmqpiBk{7l zRP@WQf?SI5Qkh(;JASzo$mtOtK)wF5-M*IiD`mCCRjwrRJ);bmxtG!vk_vL^&#q8z zu3`=`nQcdvAo&*`C2a^*akxKQ0(qf%LRphRW%ye}QZ-uvURdRU3kZ7MXU?hK zS?rumS;4Y1R&Sa#IW^6}?Y>WWHExwW9j&k8Sq1_%ahqxX?@snRkbf%b{&n+Fm|2+bxVo!A5}D^ja^ky>UwRWxe00M?ha z`Lg2)VrKR6?^{KMQ|~=uYVUQ62xN$cS<73QsMzft?tRBwdd=xA?|e3CVc55JKexo5 zd`^2ZMXNT6;6gl+3R87!wHkUe=p7O|h`_?QI>dhH=5A!C5O!5XE9O^(hFa28t#*oe z+PK2BM1Skrf%03yAvToE&Zh2b1ZDxeDzT88J$8uQ1d#0<#$y(~)u?UGHK@JU+Xz5$ zIY?$5Jss#FrOvSj3|9{#>(z=XfhE9M^^Iu_=H1NwZ0f^KL$sR$FFEhnCztqP;6Nccn<5xiwI+z*j$2UU#`~J{%M3F}*keKuIadrqZ;u z4-4Y%DJW>pt+T#`DLs8OGmfo7c3}}uX)kQ{*STsk))h1Z&UcbTF2P8qT`6@ zp3Nf5JL(^fp{AmmR6jPgu;z=;QkU*i-EFRph`R_&4^PV#IRFWoMe+O%3dq#TfNDG$qY26nya67FrFsmmAY*|q zq&;K`ajfi`1?ZnJ7D{_ZyRszbn55A3D4o?4zT^FhPlD)O8i9a`?>CEEVT6edqG2 zJDHDMN+nlQuFoI_%IZRFZ}(~q6Q5Hz*3?~NjkgNsR zklJ+*7#9lF$Cb~%abr}qRe2g$2gk>ZtryRaef^i*RI}V|2QZr!7<+muDNdWklYis- z5rcxmZHz=o`GQ}vocq=WT1kzuZy*`~=ez&vuhk`^F1DORUA-h(35U;R*bx51_?gD9 z`rr8H^oX(5)7Xyj2Rw2_53|fhnUOcDJ79^n9lF}{*o@G+>dQ%a|W>lB*`fXoj~IUP(>5gmREEPQyR-kl^j@ z#C9YgnDOjORpNbPg!p8x=f2;OuUDF?cgO1&9lwMPuOp{EI#Hy0v+BiuZB2Qdi)|gi z^qzL)R<-OToV<>C-#6DCy;+4Q{syBD_#8lpJWeTHTwiY!&NhcgF#f~0et6M*V)oUV`NTp3f>L>n)9W@RjK?O0NN9yIAy2+5S*8o%;my$@RqPxy1r)#BCn}#H# zQKnB*i=Vl4GVFPwdiFwoqtDlDtg^5FaH5vR>kzX0vW3!GqhomoUR3+&0=-_Ww2&S= zWEqfHUL_6??5%Nf&6m{#+ezQ<-HXA_#i;^U&4O+R`&9i6)R*C%ijDc`tE?h!=1yPr zFu23X*oR5Wzf(&^!AO&G66jw#9!NFJg-QTu@{Z7Y)eMV{0HAWl#S)|IX~z5Sn%J*# zsA=uY{*x@!nVzMzJ`8b?M<)V$!eui<7bveQDa*K0EDCy3pb#~u#huZ|@#~9XU&T}> z+1*MVzl_oNdUo(J>4S=JCDACP5XAN#3lkuSRtrVQ;;b*>NfJ0+m<>-1Skvwiy)-+9 z{-s(U5zbD5c`y%DJ7ONM)t**t(;xv}NELV;2nRH%0r^rMxiZd-wj>C&I4-X!6Y=sm z%(A%2(GDY{?hXcWUTjSFhq2L4`rAQhxx=H?9jvbvm+nEuP{fd41z;{ENi6ZQC%0d) z(p3~v)E)xR?PJvK+_@dRNbPw~wq1(UR9BY?nt+k(LmbcSY&M;jGn9opA8&@=EA1k~)$S?6O zO@*4`{LO`Ls&*K`oF0oU7~K<$!+r$PE!hEnM~&cVt6-+#HoT&ankaW* zG?7oTYc|)}ZNYw3VBI|eddMMw3BE@i#TA5qh@z+CP#gYJihw>@&nXA~RCx_PhC103sT2+QPc3E0Drom%x5l0)pXi=7|IS&Xt zOSu(tm#z_>BU8IpQ7)2vHkp0h00B>DXHx(KCe{Q100000eJE!r4gdfESG0zo2b7zN zhn|jAUPtZX0mK8EuYGF9`(PGw7$d{1^oFn)x~_5GpqMi!N2^?T_P3W=-EU3Jve)~U z`_M};hV(fSVk$u_j?@9g0Q6>$nm{&%?ZAwFBXo^P+HVnR(YkN&8b;snHFlVZ>i?etvgle2^XCY)nm>RxU!XukTVQv5Pf<8UPnFL z6J_ouk|z>1#d`un=gGOV)hsWT7+PtQ`F;PHdV7)ZjS*o9L6Wgbz$}03@!I~vA6NG)O>>Mc)?uc9H}X6r?4TD>{cP0G>zvH7)G4-2v~gs43pSVuU?$RHl#_ z5mdyk^)X(0`kl%7qxgAJQ*+7ttyy_O0<*}s<@aKeN`a@~D z@8eNXJ=$Jf)gGe?4mq?okjiXo%wf8-kb2w;|L;Yht(WYdhupXfkzb1P46*OEL22qA z&w9@U#a&!vl*$+ldzsPV%jdF5wy=Z5#FqK5w!d6rc;7bc;`ePOD&oJJy4Epq7pl5X zYLF5^%o1fk*#JIAy(H4j~X+50`@w+=BPOy@u+Enq69s8r>Flk@_&!DtMhwHPneaHt+|!ErHhRR80O*X?ED_YPxEio*2UV@ z#?~FIYUyn)D8daA=H}xSpml;-dAqt>!8{25nK)ZIxVry;U+{l!`2Y36T>kZW+q!$e zTwTDtwO^OLx;KPk1i?S)?-`Sm?9rL}5^)+eBNho{@ zKyf$B>Pc@HaXIOa+x6>4hdsFl`|Yw54zAwDSccjdh>;g%Uj+_-UjrvUPH(&x-(2dw zD%A68uzx@E0FWnvj~b?asfT1}N0M(ehSzew|3V|8u!eg;Rin(@el9)pi@wfv4*=aHf?9=8@02y+qf7NGmJRHVmxx!E;+m5-UgI?y z!hr|)H03tA$jz4MZ>-q9>c4TmcC`~^5HVCnjlqYXnVNA~+ctCe@WVkDo337C?jhw%G3SIO zFG1s-*hJmLYxz-n zq?m9u1~l~mc_)XK927eN7>w7v2%Ue0BR0FJge-Ymk-09y*hLH65DbG|11 znsjCm^94j+FfnGj5W?s10Oi3r(-=i;&P^(0Vn7?K&e`S5VC znj=x%b>Yc{PL72ONeanmnnllN!^`A@6o96kFQXZ4&wka}GT1F0dAH{T`ak{3|AoK_ zfueCTzf(^;>Fj(y6+Bz90qTp{X`D0yEyRnN1Xg>E9;;y$LPI6Cq91H1s0MIE}v5L z+|-?s^DBwslM~cyqt3AjsmJE6yE}hMsB3G|hm(^N?g%0g06!fk?g>nNkYIHkcc|Y* za$rVKimYzu2PWDo^H{}Bp_>~F&0m|^naL9m87BYt`*UxE4&4A>3YY!GMc!Tvm21l0 zU*bQuoxNf%y;tUD&3-Z-R3nKQr@vTPZCCp{2K-QeQoO0%8T}Fkirre3DbC6Ft%lI-=kbDag(H3e&+V7x zssy&Tikj5ZUQQ`;Tt-Q^fDC;U!k2*|lTl;46y3jR3wf&r^&B<_TWlTGReZ-|E`-I$ ztgBHXFGVnN$!+Og*Ar%neMQS2ngo+k;-=wKhp7*-0e$P3Q*%&sY8Edj3Oi%_j85a_ zXAzj^huZl^*@yE&-Ny){LV{`k;W+k z%TGuSWv8!GOM4I&4R$84dObU_V;uVE`tLIBH>crr?Y>AtFiS zby6AAK(V(|c3$5%!MkA7LxYfNpR+eHmD@Nn$jOKu#|uo7Oycd7$On7wdR(MAB&*2k z#J7>Vge}v0B#Zfg=oDO&tJ%yGqWoC2U;JwQx^?DV0nL>^DKmQtrP zV(p;j)GXj|J7q9Ef6)0Q^7&jyHU8@dCEb21!0t@PjjPUP5lLTRSBz=K67%pkO!51c z61v-@$b>mOb5hS3otyl5szn|JK}F=L({5>))M5DYrvk-V?PQmJ1(|5Cn%$B6+&fld z&)99Ly1$9$KPN{M6Kl1t^=csV#S-Eq(u{6{Gb04eGcHp2%cEzG0zL&G7uej-#dWz zEUJ-(`-^NHT#64$41T7D72DGtjrkqj3}DGg+lyn1e?~N_R2ujwE%MypdtEb;hA*`~ z9ZT)_LpRTE_&`yEeM>Y|Tzc4stNJk%v3AwXY`Sk?wcfG{JN|g2?B$5+@LP2H$QJyi+bs@fsyCr znx!+xsk;4#Z(2u?XTHlj{;>paH-2oCdXf2aL5=>IGriC)9&f^pnXnL8biDCEQ3df& zv>y~`=8r2PE|1Et^!-nQP=^5~CRsH+_vVeBzQQh|cA4sLw%7P3bXLz19ESr*=fQsU za;mWsRFp+8apL^pbC^)+MMWXtZ;O;93-bC=i9A&8oeG*8!Yfzu7xT+!i3a2Qm}O38 z-xd#1z#>UzD*UeV(n}JU)9tC+*vjL#{$MxpH>w)kmSxL)?Ml;iqMSO_yXrQ!Z-95U z;oV!rgg7|a=HS+c>9uK$%or9MPd9iKp(EZ3r6lo(;n=B~3M$1_W+MR45i-elm7l-y zRdL#42=0;@q4A64=i~XN%oehJ`ISgqS_q3h`Y_*_vUQT4@G_!apSXJu)L;|{wxxuwxG8_@irEUJ{c<@uuW1>-4H z3G^i&REg0he+^|Q8H?GCa&=z*H4_f3$(A^G;M^!g8zegNvqEm<`)rW6@}%{f?NVO) z-p3rtL7@!b69=RgovU~AZg@?_xZnK49%`#;A6Vn5QswTK9Yb?pK5x(NR9(8E5HV=i zX{R+~$w|EhR9^dmxl=xg?1`l05q~lJ*_!bEEum_LZZ9vftoGqW7*&*UusXKj`73MN z0Dt)=St9<-Wt+8AHA2T|2+L6jo8eHVYe?_Hmfy!7x)CFz60u#+)y(js-M=Nu5duOK zXtqc^j-kxe_S&vS>+5x#Ny_CvJ5Cnvm2uE-yRXP?f$~)MjMP_LJ$$uB?W`Y)aM_y- z7DmjRRm7C9$;zgy8vZ;GRg+E~#%;%U(U3S|D&^02p6=I&#u{_ARY$IyQXM+qz@o?u zJs*-iJ=aUk5*LFEAwND2%0Z+LM0FT->>;I$@v!eVltC<)fvF*!y)yYP`;<({P;}Ex zMjBYDKzRkbf?0OZaqu0DzpZxN&F)`effEIR38tYUPD6K9wjn-ZL!Wb#Byh&i@IE|a zyVL+82a@Gye4(7V zmPgv5>ZvoqSkJeLl+;j-CEa;v@mE}AEkg~)K-^tmm#gWe%uM+f@4b)ERA9f(6>zfU zQXwo&k)FOzn5gpE=ZTgJuR)V_MsrFBZ~td`dzX8ZCkh958Mj|xRpHrEgiNTQve?xsch^%;Y`CvF_iJ2wHhTW1g8OFGW(Q7le{;_~D-;pCT zgy{9x%2zt$d+CAUuzHiX2a0H9bLYr>#U**nWTqRqBkNMIOk%3CP0psGp#OA zYLykOmGWMX-wgo&D6=JPdPr`hCrkQ=u&eXn@0vU*!@AQKdyFy@Xhu>VIVsSjVvkAC zW(=8JxqrbNh6ZM`HalZmheIE*-dr=5K8`eGV=>sQ6pFA4r@0;s2Gax>K4?*qZA+&&)^lX!dVvFG zdbw$k0-dEE;7(#pkWozHCI*DSO@1K3VO}AtY2-_mS%)y)m@38SLM3d3g;9}cgd#DM z&V#KV~|02ZPa`Ry@$SgecgVuutD8u>M%qZbF zY9=t^%@CpqCcqC-3_(4lqy+Xgh7vXM^~~^{8}5IPv_mLR<}^Gp0#^MPMZ3sSfB)9F zHh_=1eECe#%->G-a<0v*O1Gk>kN}pt7cR)UWaMLJE~%{_h%^&rnj+BsXBk31Q>?t0 zgK_6PRw9478T1|nvEXlb(lBa67;QI!b!Qk$p)MJ!_zXUJ?1kyrm9jXd!P{hf@ETP1 zc<4N*bWbg&%1_S(v|_OxI7XxTj5=MUTfDuZdKhc)t}KA@X=H|5J$aR@opwv3j4;QcU8Vh_53)C^Y9^F4ea2= zU1HTLudshZzi3n*>1{j5nk6V3VHDzB6RMlj{@1ynqH+b$pDzcdXiC1TON|Tt#ek2? zx0iX_Hnr#qm(Oo17q|Idfb1_dALVQiAj501?6zsm5F8_;Oc6iC|3DGKf0zU&2#gp@)Emmd~uN`Jg2_? z!Tdm-)Ce#TXjzT^(dY?+TaRbfM!KyXme8Hf&19zKv{B*)UMe-dDmE2Ld2}zDTs)GM z^5PB;{8K$IOZ37wsX-Mm{hq`rTc;-3xW5d&MA+Wg+^n2ykuA;aRL%1-1(u6LjDzhd zaLHNZ9{!SPUMXjMY+*aTU? zZ6HA4eh@^K3q;k=hR>_!@q%ZO5An)yX;otLHI8sGgbF+|^3{h(Gi++91OeC=jckN_mG@+J?$qfl{eC&z70)(R(YY#cAS) z1wU;nm>@&Owk?NJ^M7V9AR9y)V1dJk*v7aIc%wI#M6n#P8xmtf<>F+YzaYyhTzZo) z_K6t7?L}(S!BZ4Q?`Q9MJqJbeHJJ+Ylb3Y~a};z()s^$Y1=oN^Em$m{&AF%O7%-A! z1ZOo2@x7u?mi_sXVk&TLjlC!p7J&0v8Ph!)Z}I#&1(UiI;Vhn1^P~^Qz$2M;+S)aiw?R zBu!w`js4^6fs#mK*5%yO0&wyaU7wy+ww>lNm$-CcgDn7ioi56cu9%MA5llXAoO{`7?E zYt`z2v&k|*)4aBPPvnE~{zUr8%sVuy@=uG3Vz0;-D$FoaFBigcl8}Oac*a@7v_Z9f z^mn$v7KP{>l-NA2MpLR!9x+v9ML?vafZ>)AA~?6*^6N&pnGaYrI7~#x$qH$Y^q6`L z8A1y5Js5}Z)U7o>JCrwYKi}>qU}x*`;{euY6{qzqady#K~P};c{uNtU~H3 z$A(?_I=%64MFBWG9Ew|qv=EOI+L{M&A<`bOmat-~Mn^nD#(y`@!mhA+`?&M9mkm0B zm{8VAFm`37akx3#QSM9>U|^`nU!Ds?t6*2`D_R-)a<5+24>$E`sciMncKz!rrskeQ z?Qpjo?RMsQkE);6-tcZJ8!F>Fj+P}+5+66sR{=-Y0|UAgunO_SSf-k=ar_2GMy1Vg zBPGOei`X(_IbN>@p7MBCfuE$Y(hx7@)a9G8`sxyn7xYV}O*n|&1X;@c75882M>??O z`UHYnv77BGHF48EMFzk2y(UNcsMPkrw|WgW4LXesQ&7W1oA7t+>pIT5%ZzDCHW^R5 z0%)H70{gt zUDmY3H%o=$!1btJ6R$?G@pe#pMt@@jx=Lx1(qf_mDB2YJ{dI=tO0wx1&#MR;6~P&e zg$FsFEzvjLoU^pQQ)_tcG!4?NT#gK0KsM5KA^1u~iT#_g1H{EjI?V|_o#8$gJLX?Z z9DxSGp(o_cD<5bve}Pt43o^t?$A_Y0wOw$Ypif3C_?s9Fjnio9&>WIJ!~uU-aSul3 zYwlJnaTd>=OwTRwKN7IBygNem@cP`Hq;!Ih-wRjnT=_}O6HMfu4Y`h;j(=EYwh~sO zp9Vp$t@WowjR8-P*|Q=7#uvxKdzzip5#li5GBrBOBBMGT8Vt78?5Mv$66Eut7@o(?6YZ0_-X2EHck9J>?Ci>JF~ajfrHQtKH!T z-hhbh{7luqZcAjX+|T8WO0@^s@@ugl=nnJzc1Tzzl|+FU+HfF6qTag>&)Ms+qe)xe^{MoYG-$QsCd|(9(qRZ@r&hx z?mmf*!S$T%K47&${XQA#cPEBvnVsR$fmvosFZU7? zkLS^4X9HGt*{g3I^}x-4ror8!*UqkCI|8!-6w42~>FRrLnEhLj(_^L(0P&IbV(5+~ z##ab^{O>SY3A(OMz8-HP?HjDEPsss%>CF4@`OhkY6Lpl4PG1X+cyl9-Y22l@=CK~? z3MqV98KOqF_rLYhet4zM2q_vTE%x}MnEpPD>R5j+S;SmeP0PBsJlPn{kXcJbk7p{QWCeqm8mRCi-(p&ztwzr zVIP4gtYEn~POw{os7k7oT7@-@|(Z@{HlW7Y8t5?I`?c;aUH3b zD-HcoHU8bo#6_wKIQ3O^S+?6ENv=O$ifAn#NImHGyNy{uDwd6oeiuUiUM#It`5q?L z2V?xpAxwSQs8Ll|0A9HGj|$bYc2~`D`&7Dk_wEZqdJ?t^x)xFXMRkY%;5<7@*2N+C zu#4wj@?Q8f^eEq>uUK-1hQcpx>e*2utR3h8$_DPT`O zXQR;GH^4^-CKONIUFj)MVrMu|pWE0w2=t5A=uk89F7#49qCTtQ!NV#a8=Mi#o2BVp zy;u(FHUp|TZ4#LV$dtZT^!gP*HkLnBMr#)yp9mP3zJaS5E@Yf<&%#obw|3|6hBi6J zA0-Y9Pm`1#TCNyp|}b zw%y;Eub-a;CcRv3s$-&Wyx~gy$|9Vpd2%#im(aZcN_LUgWaqgB&isc_@_LgY%vnrm zrfqN-E%TZU$#%N$gl8hh2FAoP!p)_d6y>1`W(lBjox>OZ=w^2 zscn`oRBLRdt|C7>^}?j*)2}sUTP%dQ1Rc~)UBMbpBuQfYJ5-GPIiJaqJ>AbeR-_^0 zewc$*x*vfIyty!(Qn*6o1C&Rm@(iUG08J^|lVQgK-Ww^wE7ps0+9`?JK2e(Yz6h@tw#<1e z`fB^t%MFL(f+~Ba20QDJ(tSzfX0eigj{F+$uJ$gC+p#Qw z5|^0~6Je4mSgB*(${I7{Iak3(_#J(8|E_ill!+JP8}9Fovs|7ny&AT63I)Wf1%PVe ziDEX$baWc7N*Ev2OR>F%a1Dr>EYaCuhr8P|@ozim;qUf1(75qZJrDiYdZ#dg(sh6R z5T6k5@fAs$LepbGx^4v<@-p>ee&J`ysea&SAS_m9qLYU$AMg>dm;N3_Eu7rbPmLs3T42&mw67oVH0D-=3qm*x3gxV zqC3veL28rrKrfzj`~KobOWAk4lPaMbK_6@=G<1*5RLM$6$>|bRR5G%72v^)42fRWR zKYusCm_6u@T%C(qV0F~z662L~{m^0rI(qid8?%3cT4MWaliT&Uj|A8!_p_a0?;Zj! zT97A53%VhGPNl@6R3P%l^&5NnPobnwR6okDQ^LR7VxSc%d-`^=FY3LBZ+fC6GbSOW z(3O;{RtLrtm}{_08WFrS(u$4Br5#pMJ8F&5MLQ$cb*n1o`bR?UHtn@&>1oi0DQv1;^yL_K@Y0mKVYbj4qwKEQC^^H>y4 zQ+`PbpL7`x4iD8TVbGb{Y~IgGDX!GbPRLlD{F&#vnY4Gt1Joa+3PfWQ)lgt6Vc6{p24?i?3+Wg*D;)zI!-G4~-`M>NNjaUX>+@Re_;=&)^NijQRDS zG@zR<5go2t5BNqJXFywP{jbBLzrLLv4Ji0g*FO4=YY3XvMs?S;D6-d563Bp9tG08X zf~#uN@z@UkkhwtY62T2*NV6MVY?R*`Etp2MHR63BerfG5b$`cxI#5 z8UHX&OjBL_@Hgb+(oMJZQsV9zW7FwBr+z=c`^rHgp3VL!<>^<;GaGkh^mxbjk)k4S zjZn|~qFJRVV&Y~XNSI(m^?>o5%ej{-!zSPi@(kBE;lfFPQ$caL{knS1uIn4tj~kc3 zim{RxLH{OzPig&HzvO8?dsB|;D}kfW18t>BdCe;=0XLVnVsJ9;D$hB(hyxVI5R|gN z7W{)gSZt0(lu~q!g%$5i7nC?V*BGe+l(Xte&S zrDctFlz2aipH>5iJ_)WbojNOuHj`|c5S~_z4jG}wp}=-Z zNM%K@gW=f0pRK8UHpqPfGsL3{mPorbq989Nv@fg}*qG&$)H1P>SW&IU`@5er(^aoK z(Y1+g_7Mc3dxBer{tfdDi&tEbkE!SCQ9(6E1dxio0k`M-L9)i9PSUIP4fE4%uFMQZFoPV0o-$m~GJPRw}KnCR*EuqE5om6Qw5W{mR9 z+O_LFU%h3$SDB2KRK{U$lx+DPbVG?s#&wNL-X;e#SKT6JxCtGjRh8c3@r>mT1=AVR z(}3dV&o6(u+#apZd}KB;)`_wNFaBw*e3v8VC~6Rc0(pLD0X`&0?5^*>MMaThKJA^m zrO0RxZKfzgFXP8%NVUA9VZA7np5^5e-ItUMp#F5_3&zku!%cv8oVvpJ_Bz_XpM;LYYDKcvYe@ZN7?Vn( zK22%Tc;vjPU_F#ELVj>G7b=<`Z!@@k`Lad|rPW#4R4{#)6pd`Sbipc;U#R7sBDXYt zyEn&}j7oE$@N|ZejQPoic#axJa0f1%t5VzIg~+Y}8Q}5{ zB;xC)eNKM<>!{BaX{MVLrDql@nWTB=#wr7Zja_8Oq~@WIk_Ck{`ONPb)1}CEbwrlx2N-NuvRVVojXnh2#nfK zQ4_`MJ00b#sX0D#A;EPm>QHgy0Y>G~wl3A_OQ>JZZppS&*Vezp!KB4oo%NPxc!qi&zgiR))vFG!>gA0rAM2n6( zoZ3vJ!Zt{;#!1=jNc{Whz*kUJ@>&X|IO2hucb6xpEY^>g2eL7dXD#UD0M;1QZ#%bJ zY{LxBYP?LT3!nif6wiU*buq5+CTAEVPvd@cDU*%-!e*cgA&Shy#>ZFrqoYpa@4x+< z+}o@uG3%ME_`}E|MO{5o&+m~fwzqaZswJ;0q(6hl#hlta=poVU%D26S^0|yIjQ&N4@_%_c2G8jrA`0( zHbG}*e%R!`K=b<#;+sk_I_$zeQec@yOJnae-dWU!uHZIB=Vxaz^d>rj3Mc`2o|OLj zZEsXKR&siFaU0lm^lt~YTXN0c72yCHFN6pf$6?!^tV8VYh_=T7hG1UJzE1Kro>l0E z(~lx)c`z@5k06B^3ntS82&~P*q=Y>q=jH{}RT?U?f0x7PQ(eG(LHD$lfYF!xdN*dx z``v^ZenyFVn?rL&$gsXpS^atlY4qo{G~68}i3&|9lK!q(&S2=<@W49f59qn(fe)e86m`twOx=ufK3=mf6?X|*gbD1 zV7{tuHFtgXCem;W^fXB8K3VZw_aq2$?^U*`G~Hm>AS(ROe)zNL#&<%;)S}5)DGBwq zI53VPFE5Z|&Hws*uK7j2(%$}AigoFGZfs_F9NH6l8MYrZoT7IhZ%)y z#|NB?Ri{ z>>D0cm>qr*fKF>y|JLUdU;D!p1s2-fBw7&+dG z4%uD|ljf~I5<8>I!mV!hiXZ zFo{AH2Gji}ckGV$fXwhSSoYNjJ~2G`D)+Opw-h@!7e|2ECT2vJ&ka&CV{qlP(Hmc6 zO+R-3JFNy}N}o#=Y)FhOSbD0+X5YP}4<=wv zKQ;_Y13bo|V+1WvrG2k;MNgiEi|wCH@iwMhQ4;Oy6{n3mUJt9N*zFH5C2Jg)v*e3& zzr_gH|Du$nYXCH0Ry9owt|mW52ld1MVfj8E-r&5ijw5D0U%y6Z4r+|hvflROk0l87 zPyTv(jt*B-_p)3~flWlIbp|feN6tWG10KIk0jf@e2bRT|se777WPZW)y@(6NI3UK-NBN3o&1%4w)UR=+eD~0d@eA|=`ne$ z3Dk6ks~{^mutBRh``86W1`}XHLNXh3;Qv5oegAXOEeJ6l1{K z|5cLq5Lwi?Ca{1#p1ouJZ03%4^VGnn=295?Ff1$emwbBDaTg1C_pRo2Y z>cJ5E&EQ`nVw?=Q-4PzYLsM1o+4x5lz}XlLKIvIn(JVF+J?wgir!pcpds1tWE|+Wf zW7u6Zd!}QHa_CPIWW~D0u0m;v)-CE5oUQ#i$W||}20Z$&u5@=c+C)Q}$*OrZD%|1? zdBc${-2Q|3mgm)@DP=!G)+0K_V{CADsXkQk)sj54lIJ!Tx@+G_ebGvOKUj_q=y$s5 zgOwUslnefQ^nD}`=-qtr`6@|&A6A=X(#OKWn>676qUl#Gd{aHs7qJ2iE$TO*z5 zwXksAQWzU2mlJ}AJG#K<7O5I7h2&zJiw`FruJX$brJd7iNxDW%r%ut5SAc6EyLwwr z)Ii4AYg`x4Y5vFt9o;Ke*AWoVHuCc?W;FFwQ6qkroBicQfOq7GKUSq}r7V}e4df?p z2_o4AjdWsE!a;9-wvI1nRoPP*sdQbMf7dHndWa0OqxT4oDX=6>gl&sVTc|y;pR+WX zv#rluL-^Jkxy*5lTaHPj=p@}5d6}7-=D9|WYR`diw`WH+Mx|U&_LF3=I!04V*X9@P?G7JWwajd#jfU@BHYzh?ogEyHs!|GLkV@0- zo^9=CS3ha0qLvIW`^EvwBBxP!XO$kxnn#&UsmI~ARVO%Q^}s{aJ|{+8&u&@vC|9kl zgJ(S9OYcPl7@t+nC!&D3lj57C9KeVJ)8_HH&2cGFm&T&G%vs32-tu)UGJK-mz z<7c^BKZpBuBP7Y|2{1$xpd*R8+Jbv6`y#QWOzs`Kw#EpdUNOL#iLcNfSPC&Y7mL$U zx+O%r7_BocKgbYNvz@F`iL%+9bYZ9}!j~}hdLz3Wy`L_&&@?~pz~GaXP}1sc%%6)_ zmDi$@NZ_vKNPn;4+LXJNV;#`$p`d4B|F+u7Rnrc1Gu-de^`Q|weKA=r^lTn?YISo7 z=g9y3tg%Jh3Ja`!6qW?uf;%q?NPVNtc_+wRz0QXiXSm?_}n=wivzaICS^g@9697a-t zD`dt5jTf-EhRk#80)fc3OlquBy-aJqoLt^)Zt*fIS+ToyE1vKD%B6dG@y?J%El9W` z=J(s?T_$^iT-33kk!yru4KBwmFO}g?l@2*1zR5=x^%ziKLxeUXZy=-pEHb7jxf*q{Z| zy`&H^Rdrv}gkiPLzKey>w<11MtNFz`W5+R1o@yKX_9*Gmy%Hi?F=BeoXZvf)p}%a3 z*Ayr=#ovgZF3$;U(h)|6TW&DDYOj^_G57hGdtc~UE1gB#)YE!X$`{6M5YMtejr_8Q zLD5}ZdW#s&u$vz;5TNQ)7TS2{U8v~My+^99_}kAgrok~^e%9`4$DZte`NPux@dwO* zA}u@pEJ%`@hlf{EN($iNe=8;-i6TbPq2ByM5HC>leDB_hb8~Qug5RNtxdjAxczL)b z{#^*+;^e$nUi5EiTTA%{-&&WFo^}&eqV2q#8Vd!pa+t@+I<`oOmNA9isK1++`0Z)! z($?VPG7c0$%)@rTLd3$@n~G&$iW&*O_r9G#RqysZ-1P*zp4VGgJ^B12Tx zYN{}M75cwv@hF%ifAPzTHVzm)G`0BdKw3frzEh23=YdQqs3jcf+d0QkIbAirLbZNn z*_21?QSxBq1fJ0OW#=U*m`2xa(E6WyQ9+8W(^|t?Pe9IAli=*w^HQlHR$?`6tWEhv zB|LG8SvA@E>seuMMyLf_C05git1w9YF0a{YXUOVU^FTnZlo?ZZR>H1hKc}!YNLHy1 zhP7V)`1s_hx`9J4t#EUa=ks3L0pu-t0$DAuTGK!SU~^sJ+`+IsLv}>Z=YLgU}IRuTWQ0nsRIA16tv~c)8B)Vhp{&_qH3CPLA&1$9g z^o-g8KtZI^lt^zt^(UsksKj-#Zx0JU_PuJOzV#PMKPI-yFD;IQ`3ZHoOQi>7<3W-; ztFQFPN|<3)jfi``XWeY`&35&wUIAE#8d}h=M|e!dPlaT`z{=fa4*e&_?B3xGr*0ZC zPi{jYh`|7OKvc1G#Lav&jqeM4CwZRgt<>{`0DJHajBW& ztGR~}`4a(m{nFZI?yw>Lnk5@jyn{p0d1e0H4`NE&m-`Iv(XLN9%+oL_&9%rwjc*0? zqC(m?=Q_tWhp9U+?!_{?4!_OUQY?FKd;0N5G(_is6W6;^*m@adNnR9f>~$XW$fsZe zI+l&kY0c~g{hq_~kajWye=mrUo(__!hkU8gZ#MoFz{uy2#Tnl%*T;eS*Bz_EN)zDk z_M*DLHNx`DwfLE&$Pcl0WDyr%(HX^rWA)458toObE25v+i5J2<&S9s}TI0Zg@@A4w zv-Aqu7y0hVcPPlwg7E46P4{3Ph+hHtRzn$kT~S!q-C0}v*ju`BFcmTshG#n_1h?&X ziZvm_^G7(hQ+q6&YHf5WOk7K}f&7d3WZOW+nV_6Leu1TK{D)i;=1O(k zZWvmiqOG=pG)S~$-a!8OiOTN-g=<5wzo}bvy}|BQ%D8e@Rp!=6*XaVI9ErbEjPB43 zCH|3+m!o!jAcbQw;xAOd(Yb>qLdfLLD)-6uan6ny#1*tTHekCJ4{#dTd|2AP$$D1I zx~P?Ub2igqa>Pgo>1!5mzv+1B@Co%sY}WXdPO(mcDhAS!0rgY&Dt}7s%d#L-@E=he zIdORo-Qb|Ow{}J*>9Fa;9dn;^SQ-2zNt=XSeeZoDInO{NQO;eNuT@BN{^0mC4!i1+ z$?y1G^OR}??_M=i08jp&r}uuqOZ(lVOC%St+WP!s?zaG+aq1X`vJQe*LSaL-s4!?e zn~^aAl~BUA>eM1fDRkwJ+J(bWXx#Mf-Z!5sW4~uR#CypTcX%yO&XfVs@>6#&XNgF* zn+KantAl#i>7`JcF^^U1RBk@}ZKO%OaC!9I!QrLk4bqm;4$x{y_zVwEDbHL}xw1B; zR&W|SXCj|kP7>AR+qoSe9*rx2Nz`XeZ&=N<-M9R4ykV}HE>@Z>ISSU()d`C8@*US2 z#WotPMkMUXaylbGV>-FhIHt~nngE*^^mzLuXX1xbG>2DftJSCZq+1tb;hO3CR$o;& zeZ&=#=zB;AkeQej^OZ$>VWI3`G@UjVYs^{%UO^F&oFT-MNmRBYv%)Gpp^t{XReQIE%uDRQK#w(J|7D8(u!$n<)0w&G} zl*$`FREe$8r3mtFs$Y&P8yDSm^*?I(J?!`9QBSD1Sz6Ds-7a`^nQKGE64{)Lv@KdD6sjpS<4(tg&jnxf`?b zgL?QH)HzGjVw$o0g^nC9nzp>Zu7!y?k}pY|oI}K-R!R9zZg#GvmP@AQD1hHGXWGX1 zu6>UuF+Pd*Umo9h#Wj36W<2_QZAhZjl*P4@OxyAHm5iwWGZvz&nfigi9s&Otz9x9= zjW?SffN(l4(czV{Aw%;f!IbMtB1Q5uD%1YPds*;d=l9R_&|a zPmRE%(kHu5!`MQWX5`|J-N<4kD!Zt~Vn!*KwmGTyYX;Mf$9~A5&2-D(G|0H*C2UCb z6~wbf*2f#yt_C;ipylGDuUcLu>*R@t=Ydzdsgv5TvzzRj(zM;60ihjvMFI7qNYMvp z+O4y5U!H`LP>0Reh`W8bgj~y2yQwEHc2;)k__QjIl=-!nI@jEWw~w1?h>>ZBZ&tJG zBe*#`nBkcr|M2j30!x6om(sLA*fwI+QbUg*T<-E{d={uIAcKb1xZyRsV;WPX1S z*Q>8NS>`nJJ}|FZq7jVr!8|P{^sKQ}9Dvx8B7&kB6bxrKRWAnpGqk#$ZUJ=W&(_w` zdKNmi(}StGS8u{@*ee$W^r)8LYCMVD%H$CzuCpZ@eIF*6`wi>syRLI%9q*K&=$qpm zZJ9YS9H&y>KI9IxP25BT(xoW5a?9aWzE2{u*3^O zQ_nHkALSqWGwHTJ*|zsU1bOGtbZ*zS`5;w2-jb%IkJ@M}XC12vMW2z^a+uked;V2+ zT~6xzk59K;(r-8FkS_C^ZulE)d2-{RWwJfT)DgO{g!#X5KDE~EWCD!mR2+7z>`Uk! z@@Q!lwiQ{=M_#sk3k1+_MV|(7qlYO_J~*Cb&Bl^bNxr5&JnoXWC*g2J!1|$-$88&P zr8WJeK0Z89#(^dn>_%Ib9}71!Xc^XD`BLOru|Ae=VYhMq_Q21S&4j9{%+j{kd)_LyuWg z%e>8t+5}UUS4=;H&tW(f_sek)OHn$ol2_JGMo0DT%7CB46JX9@Uta%)}|E3yVTq8O=<%`KiigzWv{Noe}(w?%yq)Jd4v% z*d^=xLod5#)unpguaqwDgyc&1!uJ6ofj;x^_C#k&EA7RfYjmyhades%wE}i>rSs%n zgpj)@;D2aU5iaz5&Do-}J5q%&>Sf319J?DwePy{1zBFaIBL_+(-Hb>hLx28#i4vC=#BnKFfj$ww2-~H}$f1UI5?04;2`>c0c z5NQrLymsAB>+dk>|5BB@x43rl|(d+5E^5i3Pb-0q{hZQ}%j_tTJ|Tdl*$t^P{7 zE_cE9F3!QDPrc9AJ=!06aL~V*i~Q6YyrT+fv9`A9?!Pb8J%o5ovw$1UW*E5a%iY!I z8fJOkWKjBpw2o_4r2IzD@x5*rc>0NfG3=ndq^Ty$|D=CVob#x-mxo`NmNW1g);*VM zT*D=%Mc|G40Rcel3%h3liv1MU46rI9O(U2xV9h4cY(p<SyfEiH`~TgdHlVEMot?D;^mo44fnL4U@rF)uv)^d*|F__ZGOj@)?N8Z{o{ zZ9{vzWc9?LXj8KDsiX;^p3}eQy+)p6LriAc?m7EYNe=Vh1S~M1)**0it`TCLJnJ5a zZ>J`Nu>jFdVqYRC^h>3vFv(gZ;gzJQWu=8KxnHYo>j*eID-~e@Bs98XDKm${&sO<>3RrZ zit=f|d-(FnMK@5?Xp7%EWU36|ttlu=_(dS6zg?qZj#N(WFw(5FGap_}Zu6-xK<8_` z+n5@#v=OJzGFh{&9XVv2n?k+T?UVtj=HnDY>ie!TALo4g`*P9J@G``2DZBTSDy3wO z60^HDKs>Jxs@1rBQ4m-f=JIXOhWRCn?IkUMzw3w``sigGOWNgs;h8bzB;-?PQU+bM zJN23z{O`V74*;LcoWYMwK;tmIG1IavMd5hz)J==>7~3;k&6 z@Zp45^@o}zJl{dHqQx|a*WlsV1?Li$r$ui+ui52in2xI*oZM@%-^1?$ydn=d>dh2Y)I@ zf0BG2P@(%ag)lMmh98Zi+(;Syy|#)?#j!*4oTX-V3E?*aq}sdR9iQm%FZ$VIy3&0S zftbA=&)@uZn`oU+4QlX>K2)cd%DEZn(cx#6Z^@AwOn?DOt_#G({lOL>T`!#zlSxm$ z^lRhRX{UYINm6UdRkZA`QCY-{o!1lhGsJ@3VZGnJT)HA9+Uo2p7xQ>)h8DOrIJ&U9B4NC{VDA@7OKsCoCvMtNRhux8mci%z?Ny^&L{X$w$346JKC+vhzI5M6_ z>ItPg0iVY_rECX|Y)x(9L~rlOwFp@|j_Q0e?8~ly-C+8*4jJY4rH@BNvg(3K(I){o0=I9DV}ap~cbIh&M%qc%Qd`A|CP9DC2#ITlXqx8J5GrQ-c$IvB^IM1O zrS3@K&=W|*aCV$76ukiR?;7oAB-85yUXgttVzq+W#@*Lq4k6^fCJg+mZxzN)B_b&z z-u$tsMPF7uPE3Z@uz!u0eXOpK#Pfaj`4gQ$<0LD(i08b|CE#p> zzbK@=`yq%E{@tCDk7@ON)^mmY_dvBux(_z~7AL0Ae%-j&`C{ZMwDWef&9zPR?pLw8 zqM*J>p013x2VbIE4bWxPO@g1iAV8Y$@W9Si3EhxV9rb6S^bdk&pxy;pg>uSj3o$on zwKH{18rDZGu9P+NW`^b0!}f*GT7JYSlxF4uB~K7+P_D zNamlKBSY7Bf)#*v?8QcWef~avhPhvQC+|M$kB04#RH3d!?BLYGDN7Mvz7Uuw#S55a zjw=anQRyz>bsR5jM#1K2q3ME)!Sz9unJvG+TBZ{JxUz53n#a*&rbd9l%TRNu_RmZ;a1v2+c#8)q~G_YFa z(<^9hCjUdPDR%#t^^D!Z)%3f4Cl^qO?`aPmorR&EjxX5gy7E!}(RTD|CQ z;QU$3pAT&`Rja@3BVhxl|| zB#(y=UeyQ`**uEJ9e6ZYez^Uf_Su<*x#eR7(QB{L0?zvziv#eb#RFUro9A3dMuKZB)w$iwLDMdNyr2Tr(U-|Z^a!X2g98*5uVA=5Tv?=$4 zB{tR}RmI_X+M7QuJhf%@9J+za!jI)eY?};vZ5hO>>4>ulEV+ZSS84G<-;!lUanu}! zpp?QVgxs_F*UY%X^Yzlynwx@$_0O`!p1iNxCEHnW-s)uML}a=zcE9fOvPO6HLD`ae zy^ZM!v`^By|ql?uTzae6Jgs07Dg5RlxNg66s zIXDa=Ix{M<;x!fEm`6TuPrmb2an;stN~UD=QOkjwMEZ5xWG$H zvv*7Imf8;`V}b-=xc6LK1W{DD=pXwWEiRe{8LNa(DA>h=5rEE)mW(8>a!$>O z7B1xV0EulguaA;!xP@A_of2!7$eWW(&GJO8l^rB*kA4?g^?NbTjGN?mdJc_G#%T`+ zNsRA1l-A}J0@L48U_TQ1g754pP#>{ZI9G*GBZxEdr$nxxJq2Bc+ z$SplN*s@oYjs=vdOJYd^9bW+4q%hdl7cHT{40aNHso3y6V*XWtq!_GKhP%b0lXvpDTcCFmMa5cQ(yo-`XTXmHUmO{JZM?Dt5=MdFA~1_;%agL@>0b z^DvS6(5j?)%X{}29;vn8>iOJXtq3iQEx{GzWnX`pH zN1o_C6PTq_>dtYKi>>;m;jcQ52x55olx(@nXzU<7K^HfMFZ26Y+ zZB4=6yp_#N{^y1_H;KGdJu@^y3PJSxw?Vf+H-6V%e^2Zs$ageX9TSS*`F1n>Wergj zcHtTz$>#s^rqVcK6?z`w<^NNdd3R3gc^syv20mm?{c%(z3YlYgqT9fp6eRRKO@fqH7%;BfPm&Hk|7$=qsz@)m!tCqq-oND>CP&qXwWrlE^`w zYH(f6>q82W5GgX+tA~x!S1iS}2N-Aw1*CPf&mtG*q8%WKbM~VrACG79#%b;vd>NS9 z5om53^Tna``Uv?TA!!5@f^npO@$wV#82*>-6E@oXKien1Vf(47>K`emXBHNE$EIhd zW~WCcCPse(!z;Qs2jHC|*$X237J!?p7f`}m4!O;GU*5D5b=@VH@NDsw-60Vz!aygd z$lP-NjQ7jY-5l?{`Fl}=CuQ-AJ=a~_hmL0xG0It4%*`uljHxc(>!{vHI)Q2r7d^F1S$e3jDlX`NKvEIj_87W@CZAW-GaSXx#s8AFA?J!t!GiN0( zWiCQUs9o047P-}arC$`tWzsijWL%N9)NgR2SEM0w?!V(~xDQ6al%%Qi=o}}6q(%<% zpGh%0>rC$9<6VXPz$e86J&?J9v(L2{@0Q?A_#KNrW_e4?#!8r#f9K%Z>O~Z~$#n?t zG61MbR3Cx++L}Q>mRj#|LQ`pBlt+r@l_SVvGbyrEy^3|~3m4SWjD5#LcbZ?|7eZn| z+?zXm`dYFF<6)P9^QGoP7C~BK*IE@OKf_!7Dzt%mwZ_KJ&MyvLs*C)cSCyn~YMl@% zn>$6a&3_+JXra$nkH9RZpA7T$#e$zC&;z2~gBzFj)EfS8X4e`Yzgw`>GOKC-jtUBg zptbdyV(i0HT7>hsO(vRt5Ua5elaR^X`VBNBmS+S6b2t*WPcfY@a$=ry? zZrTV~hfj|ge{f^F?*qBFkNyCng6mo!`H?^51R(^1A_Qdrth>3~6pR0$aWlVT=>+6uWS#`2tIY4YkrtJ&2>EeIxJWwAaR|er)B>la|&9JOkd%`1#lJqfwpL@N$k(j zH1}u<+^^hoHoEmtTrA5V|3GKlqQuB#T#s2&zar1^=hzKJ- zb@a=V%&NIHqvtOcC{8||LQ*{F5DO&s0-=W^Leg!a3}4Qm-f9%dC|gh%sR+wIPK1pgyYx5&yE*9F~a0;~AZ>tFXM=?n| zExc#%S%-FMtGk!lTk`60nrMWjKzxx{Qty1w4D!mhUfP_-A(MaMe|F>o7UfEew< zX4kCg#etI2%uA{zuZQa56;2HS;gf&6=(Fj+Tx@|%Za;cN54vgYv2|$Ji%!s{1Zp3S zVIv&_k+9H&(keK|4PuF{UYs6@uHD^uHZ7!~Z_Q+jWA(Qfpb)PiT;x;C8k9kJil3cl z&hV?&U(N$KjE0#H*;pQJs=9`oPrpno-PJ^o5@Io{ z^7G;CZH-&DD~7IJWgN$pseG%2D=Qx-&P?>+EQImZOI3A;j!T^WvXrXm z**q=U7@{@vv{N}-T%}ah<85Cu+t`rExOAO6EgLX|z>Gxtv6gLrjkFi_{i@4>%Dz|J zmu6m>Mf|>6F+H??~jmui{R@UXIDC1-h9dZewGl33xaAfUqraSQ6fyo4%^8 z4E92fz=(uG{%@!X1y+{y-8&|LJ(c?+yM_MY?0GZTXHmk;x@BEplG>}I-ZMtIrp&@$ z_37Lm#(u!6eOGpW9eE(c*pawoR~S#Aj#O3e&oXoJ$=UddMNIs9n}oWZLyh8!rmli1 z^XR5`#4+pSQS9X3E4l-g-&q|me1z;dKbsz0_1j7)PZEJg0pPFW!B^ml1j-tX#SSsv^y7v>$-ehuI> z70kgb6!>rmh36l*?-WngU#p#nt}p0edh=hkhOb1{tq8ym=EH(7(ERMKUoFOwRdL}f z6oxx>7Njj(oy#qn2TpZ-o|!XX*e|mH=zi*B)0I{Cx{NCMpkeaH&)y~Um(leSu#r!eRM2wj>U2S`uKnq*F`++KYVX{zGnY(T$ zbJeA4v_jj&JYVE+PZv^{EB)9`IES|I)V~3x(06evMHW-ylp6l6?oCdM9^4#Q^>R(h zIkUX(h`?CRCAPlevUt6^*kdRUTg(^XM4&o$y?1FQz$-OuX=#lk16(9}+h042NZR3? zVp3yr5d@_F1?;U2U4#TGR~;LIf2Z-;KjIR~xQ=_r;!u_m+0Vh}auhW~dxrK`55Q{eSslmO|VWlTz%U7(OgE+OVI?$6@aYo^6beu`g*rPK2W{G`3~Ld48vmK~!<&Cxsp(5^bX@sU8>Tt-eYw^u57Na(l3cu#$mEMKZ%2FTbg?ADm@|HTyk zt;P{mAm@baR?=;`kmc~@f}W~t;3b8{-gX*vUcEIjO4T$deB%eqy)8OquQjnb=h`nT z|7<@P8&vTTY2#wfwq$-W`*ZTLl{ROyw4(Asd{HvrWD0+(a+6dlSF8SPOJ_j3Yoc%Y z9{*-gkED7EH*IPJ*A@JS%94vrmGvKa&2NVeOG=`tm!!Gzzx6^3pCsmC0d_{y>%T*& zZ;YOjbr|Z~1?P5sYtx3jk_FV1y}<_2b8h^of|(z5l1}DU8iTitZ3z$G;xUliYy`jt zO^Z%|2-1^rbJL=9FF_P6VJx?kST3(wVt+zl4#pmd=~{Z#mQ;Jv>ax$eo$C+28o>89 zAgS6Nw4D2C(y9C^g}FR3z#@>$>&p4n1%uQ+a@9gMs~y?h#gC8LV8>evDp7e>Kf={y z3Y`eB_e~9Q&CY8WUFaU^vamWX0%u3}WFi9idyjQc4^y$*DjW<)_61DcapyAXGn;b` zff6~qIkI^c7n!#Rw43RAOcl$>o2R@>D*BO9JdXv;ntko&zLL-ZM3f+cmlPnke{sav zL5D~6_Xea~^oRTZ%5Op#MQFGCHS;a{bt)T{;4dS$vot?TdY(h7G&Oe1G;&+{=ZAua zkGL8Fas|NZJgDP4pN6924K;o!2CG$|>`l2jxl9Gj@#R|qDLG2<=XN}&!<*1EZaP;( zlP_v7H}nu-VC~ee9dlVH(K50ToaBkBH}J^53O4Jl=&G4PSRn7!NalVX@yL0`pK3|R z2diD8R=GdEz^ydo9qa-^`RHqSR^ExXeE1oJ7F_=4XE&W|{(o|J8yZIOpIXcD4kf??Wp0sOu^hhA^W`w z*BWCp`L+k1@4jfwWDGP!@ucxx`&j=Bg^b5_-=oo_hM78*{w@=cS=@FkJ;{i8ND0I$ zeX?{Gbb)2CnURe}_*1a<9d@Z2EIgV@yZ2lELYS#3}LYhW*#`tw~hnl}o8-{D3)gB4S z!bzYJQTkiVryFYfw)FH*K6qETv)i|0CsbB-oC7^@rfUCm;>M{~vD59U%Y! delta 21585 zcmYIv1yEc~u=Nr&1P=r!K#<_JI0S;bOK^7!wpd_Ea1ZY8uvl;p!5wyS4ek(h@%{PU z|Ek{9)V7$JoPsWb(pN{mR zC!IeA;)%rT$e{f9wH^a$83zoI{7(h|{#*0k4`QxlU8&ebMZ`GSIGLH5c?8avj+b{g zH`W$mo0Ggk^Gi#-5Dkv#A9*Il+8VC3s~Mp(sJ6JsRgHN^tZrqtTc@XU^(Q%4+ixj3 zkGsCz)gwWmV}%0W@3i%6i9T?4>oK^4NZo_PX7-)G-F2kF!Al2MU(+X9DB0XQW*G1b zM|VZIF3tA;wSV%f9OxQEhA8ajFDQwWD%e+C^{qPu_{K}GNAA}LeV+G?l^VFQp&%zE zwG3yC!s_KL(()K;HcRu+br2tL=*Eo!O0Mj-uDMq*T;(2o6{B@@T4tRO|0&vY7rr7(Zq_$bAqPzDU&Fde)4Cj+3rNr z=76JAX#BxfI)cL$CL6%@YRFI)iJp-o8f1*Hnxt<4T*+h2%vYPlYZR^^Dh#f)%k<8a zZu|vuG>EW2El}>4j&QB-QdbU{0zf7Vb-(df@=Ow)TGta+q&^K>>P*>1X)TxE+{y0k zH=sc7hIZ%1^;^*)QyIpd>>*A2R!unXtgpR-CR3BDJz-K`Y$DI*Gr;ME+*iJ^iuA@+ z0Avgts^V$y$v1=9;qZ!fHvKt0|E?Gq^#LT%8>K@W(`8)W9_?{wzh^;MG*urd(=DMa zdgj7l*>J48Kb$c;#%Wkm%GX=#$bW6VCfRsJI`?N1p%8kjH*?LhD~i@IhRPw}t6gG0sG^taqQT4r?ANs?HOTF=~%I z67TxzI|T|b>6YXw&o3WRlNwUnES-Sbv;F;0@-8HPx(7cae*e^OuO}vr_hi^$*5>mj zn{>!;w5_G_Y`LcxJU;c{w6`A8oLEpLpd1X+C_XTCa$2X*DAoK9eD~Qlqa;H!!}$%E zR_jX!b)$oha#8uk!-)}483qiYvJYWmP}VH^wx)2FdsYvT)ErA%I6)u~VgZAXFXLN| zhljNj)utyXp#GVPSRwUn)h@7f=kB6IRQ2HDK`cbaOcl0ha7wrK@X)Tf zi86uA(7PqR^p-o=%UkkSUFIa0CwN>n^tkma(i($y_~@YLW-q`y(XCI}y!Mt85N*n+ z%xk=Z67w9^Gp2t$Q^8cKf@Cr`{)BSpVw~CZjjgGfD zqaT6_B@#g&xvF)GYH_f`pVpi}3JiWme%J1-q=~&>!(~dlxV!0@Y$HQQ!R=N9c+?J& zGO5?Mc&5HfLWQI9JFsF2AXMRr7LQ$dZWVv?#)O;ra!${R=$Zbew0Zv+bJ5oav&O+8 z+OOU~s$4h{PV2nMCBi!*@zMGN&{G^qATi&MTY!xHy$DXOMCj{JjM*c1Fv6Twj*me? zb~Sq@%0k9Cf%vxd%^c$N;MZBf5u=DRk=O)RdZjloyE&M#%6k{jiCQwf5PGf=uI{K1 z^7Zy+dqaX=J6l_=4>(+F^HLvjt+5w}ffu6gOxEubsMv^5T^V?bR5RGMgR5)p7T*IE zB zzU5N4{_KtaNI4WPRz_B?WpZ4FC-+9rLT^l-jKMMRO$+`SsR1l$XU%Y^-cfM*6a*v;w;<#wzMq(lDUrsV@R%5f0BVr@GT4I8Hp4&v%x zZygQfVWe%ZFB=2_^YE;Dzt0H@9kDFmV0X9nnkgUbb-`slx}HClPAS5atdgV=#4ENW zNRWs*gL1+CaI-4R|M|tLwM>rVSw%o`u+Wqn%zDrU5~WG-{E_FB627|tk|feURg^30 z3tp9G*PQ^~on@r9KbBA0vyvy19KDUHme~v~vR9A(d~e7I{tzxkGqgv`c^ggncs)G- zBiS8`{~MNR?H9jI4FS5*`?nT4(-wa{{*pY7etB_DGCRVF8RUL49i~ z;zS}E7Pj|d3&b9M78?3mR>$5bZr`7;>#N7w4R`4$uiMft7Wqf45-j?kL58b3mD>E3 zb}G%Vg*uBtFsO>>fad24HWI!fE?u6UX3;^uU>r|;Xs3Lbq(JIx{k}H8QD%#!l^y51 zjz+H!Qd2GeZn;o(<#R6u>Jx%19*lu^SbT|{DPr*T4aUokcJ>P7qj(R0;fkl(wf1!} z;rGPzyGL&jx@<;kF$NRqyNMxpUSmAT@Qy3Yhx6@6aNe3De&PpJboBC9y<1dvo}4jQ z|B$E{J99?KDFES#Ym+-MTzH%)1UA>Nv|@=VG9M7Bm-%+XZR-Xmy6ZnZweik1%?`O; z90*It-HDYLqbGd5Q^vmV4V;9^D?*Of$7JU!fhKlpcAECpvN#;4F>5%TAO_W zm2P?o*iN7~%vKvuLMMelEs9Tz8l4e1L!+yM%M>E6vvhQ8+;Oxf-`0&XIFzuW1j0vv z#v+HiD{ddV8XEOy9gKJk?l7I_eN!?``W7kYkKc3+nUd)f+VN5AR#-| z61uqM$9VA%wz%8L>*Xd%+QwkvzPRXI+KvzYzW&)hEzy|ck{qiWDGzAnmLo|4M{J1K z`yYeC>P&LkRZFA&R&zXw;#&vZlw-&Ix#v1TY5wL3X|WYo|Dfk;%+#Z1P&>QIf8TJ~ z8mh8k4CXWh<30+p5d9AsR@XBgPL+f)wU>lMHTzhG!H)F43EuTZ1GlNnc@9?`iV6%r$dVX!uErC%a`VV;!;uJjMpGgC44`5(nz*x&^T-qElaDL( zXAO~#yTq&wrnLL%LnZmj4d{Qb>kJk?A`kP0c%W&fu!GLekkuWcl^IWhDRd^JKV(^? zng#Zx7t@xXUMI~-(Mb>TYmaO^2R&`nt_uV5uujy6#resP41_`NCjjH|JDZNCZk4L* z)AGFP@$_u;`aeEE=GaFX_kPy(|1rL?H-M_QO^Rnb7l)kXe(evp1_Q&cp1>^}ml8F8 zTeCLUl+F4cMnt{sLJP|muy;Ja_V1Yv_W!7M($zox$_Pe^kID#~b1#!Co61m;r-lVy z3K}!AJ)9Hi$D#%b+UddLGCf$SgU~f-81xw!wPIOR5NENLYkGsja=1m;S#2oC)dqc@ z*V=Qd-g46SZ+qtoa9nrPQd1%LRq-gX#Lra5YMd*)d1 z5M6$ZSQ}l{atY+)o~~m!s25VEj>?%5L*?K>;;2@&ZFV+-$CY3 z`#wO?FW`}?+0O5m1K6+mVBNMfi-gBWfB%?hei9Pgh%w5JRPwiOb27&NaXcwA>DrV; zJp8sl>hi@RFb4En|UlAuA?7lL+1DB^Av^0P$M>mt3?_;}MG1U^1y(2$UX`yi zGR1nf@$yP7#}q%&XU#$oRE$JhxAo>rwh`Ym1(-4)Cij85)?l+&qcZ}@g939lLyuy8 zj%Qn>VJcm#ee#NC5<;#{GCcE*z8lwWLcTIL<@Nd>?2w?E1>&*VcJH!C+m#ZeFlm%0 ztcdtTo7!CLKlGO1PwQ_K>7UeAG!jM36`|U3vO%+?iXsUrZ1{ekX=Sk5!tw`+PBBZy z9Xzx`h47s*{lL!|q8fHbCk8j4$vC7WMal!HGRB(Dp^-r8!!D^POS|O;J4XV74KUcs z>b+~#hLn>Mr{~zW6rtM9^ecQ>#*@I5W-9qum(XGXu|uji?-+Sg&jZY2>y+G~=pNk zdb^lHijU9Y@R}4mRGhlJ(8%7HNe-~@uO(P@Z7U^ZS{5G@eU#tQUjjm_WieN`7kze*-?Rll7V+X?6EG>@F{no~eIx+sb1P`io7#rqJ$3Ut=XYXxPGWm>{E#WW2 zmB6DCqUz#8GfEy_z5W&#CCSaIa$XK$PeHQ#!$f;}1(Th-9RLKXdAfO}yRR3s8SunF zaG|?pvuAx>6g|yN=U`FZX{*CAeldK}+O8GK2fp?>@>G&HIaGnoQ7_3LlQGUd++;7h zy`yM}NX&ThF4dZdMB*4IJwa6pmE+{ww!KFz;sP}tJep~C?5H~l(>U1C|E$&3*S{y! zbUh_G$loDVlw-^UhW2(1^Gwl-eH+9Og_3>{Ey9FC^2Ntriq{TGpUk$Qk-*zn0Ci~~ zSUzhI2j}-TkucKhiY}V%KQNmc?O&~h0H;U`5YG*{-EvnoNk6+CYU9RMn<107Py^V-cb8t}?v;us7 zsT`aX+ds??hy)7Q>6OO8a3%mBovHxo;J2>|G4f#u@j^0KV{J7HTcPp5d^Wx4(PMAV?N@H-dfr&(~)Y4cAX+4hnhVnL{GTT+^JkcyBe>+l$Z6vJ%f|-h&}y z?+R>NlI<|Zs(%6hs2EwD{&c=!_fh4qoE4xPbS2xRF^{R$=ql}LsEXzHWw-8I{}(Ry zKac|;FzA2Kga3gKkY7a2c0nf^ULipt1mV>M0_or{8w>k?lTToOeSVN%NciG-XP6x# zw-_lQ%R=Dt&$jd73jBG*_g2Zv>GH}r!J~b&i#DjWo`4Hwc8~sq<3hB-*5YF$k3KI0 zPKS(!ea#rPOhUrf;-0y46Zx3Oo%Gf;^>7qvL@By6o9PmG3^YrZ;`lY7m(mGPw zIR}llU9XSVAeByWz>LJg%_i1yNKw*W6&wPli07uyzt8ZfjBtf$hHWJ63=J-Pr}_}g zVgDX1|b+~_{x36(|oe0Z>+ zGG24lJRPwu0Ix3{7c-H2yQw6eyGq~VlVWLU)XVryt8lsG_>1&1@Wh;LupE&eytx`I z0v_d;TfF20?yx-9jG7zR=qyyZc~qOvZnlftmWH#-R3dlXQHB_sC`Ms6gE<)}>Ya5% z>9$aVr-AZ~XIv0iBnhkF(H1|PKKAe-UUdnz0|2GLJOA8TAQDJhn^q;A9mrGpgS$T6 z@;#sFCI$j-`^Mkc2{jyi6^gy^r6{z^7~pZo;&mBR-hu0I20!HTt!snEc?_J-{7*Zc z*moFJ0BL_aksD?oT4Ed?&bDrZ)%(RTs{nxC@IxZNSEQ~RiXZ>_$Ue3P>3=;D4Bh}B zX_XCvA;|Y>6dYfbe_FO>Jxk)S^c)b_s)F;^%i|0r=5`(X`K zNbOvyO;=21)kurl2`#~9RYkS4_27EN%_o`#=Hn)#duRKT49KS*bhw|%Y*uj@v-@q) zy(szowz;;5zOklrz9=@MMe+K^-Tk3exE$fCgN)suCb8BacgL|4tFXXIw>H84U5Ue| zk?Kr(pFYz8w=Kv>uJ-)5^jFq?WMeo*L3sbIIlbppoYN#W63PI1@LVDxJkx3&EAN5? zTvC!G6E2T1bzj~eTguTJ@m$)dwck%K9eT>n>ipt&I_Cd2o?X}P-^hZXjirGeoT(Qt zft7=;W))&zT{-P$SpM5BZ9ci;29o2HDe2)j=t`j)rh_G=WZF%H=vb zJK@;U^C>zvj8`WWQg`!Fc@ z_m95wiFC=^?;VsvGqtaQ;UpfEC257N{MwD(0h}dUZ;)11R;bl0I15d6D=bWp@}ayceUO*DB=7PDdK`Jo*?G(jK| z2#2Fl!L=}GTpOyH034^~coG^p3n+j2|3s!#eG=D>Ws}RgdGA;3z&xSU3eLIDc&j4e z=)J03(DOMlUgIDUBQ}o2bpsZ?&kc;X-k+aL%pE46uAL}&>Gn&R_VSTD( zc17|&!@|K=S!%g+rHTq|CSY_d?Mv6f%9g_#z3Y`fs_@6%mF7;$oJp-qCr7xh*{5QI zwBrqsD!&)6JhDW?I^U(^tE}^6BqijEGKnfvy3c@j@L&nW4vOBlqAHO>gQDf{2x5u% zRrmg+J@aQc9+3w9<@!{0E7nn^3?}2|`8)Zq2E->IXW`-d;prLDatn3@_nmUw*s*(Y ztm)n?eub=B6%|DB(hTGusnL+d2x*BIDo>z7>?Qy)2GyB?O|8)-+e#TF3dul-D}Mt` z-oHb~9NEbyw|)x|?o7F}W=IBKNXc-v2G#3uWbsnDJ2qj_gvIK+=0&F!o>PbQY+cQ4 zi5svz^JPsN|K1PrdT@F}C$rCc6D#V85-zjNED4Q<@lzr?pmnCoB&+6-KzmahdJz=r zQxc(F5tUjeNUBlZv_ejX$i`Y7=qJ=Mq>_=Yi=Y3MlR4*o?s=wL{tBX|X{h~-$=k?L zwNq|d6uR5o6Fr@F?uesY(N2JvX87jobUG&j8eaU21evHV2LGsAI|R}bfzH^yJbw|? z9oE(7<~$D_@+$Ylhu&Kw&f-Vh8tgw!3fNm_jiHH}>Xbxi-425a-1{IGcoAzcgNvw) zi%YsZo5{g+xpf5Hca*sjsUo?^Srex%wi-6NGS*hBwAP;0m&3&%W0u znd=}XZ;8dvvtcug2GYe(!ZO0WYgfww-Nw~g43)pY%8cJDaE>DQVqCVWxK(1>5R(g(uyb5`~2hDKWq9Wc_XVN?Xsl9i$<*9T6% zi2DMURWe52xC3L>QO1uBee%~99qnmX-IiLjW|qt4t9*hwLm_w=g$Ib5L+i`)ll2m% zr^gg9|Agf}?OM3!r>DSm`uUyIUuRD;yGuj+Ac*{cf`G@J-j(YYmy~Ep)G%6$HO&UD zL3QA-g2a1NZ$DzLJBIeDk7wyJwb2^bs8Siv#Wl3pSNjIOAAZIQ7s}<)$Wm7rRy@#G z^CUJDBxu6~)1v>HooLcwgs9yv?4K_GJB(lio6|laF1zmGiQDakJJ;Kw9Qnu6auaA8~H9)>p0 zhAcUXni(YrP?57WWg#|+HcgIr+1=zQo`vtCxYQCEyet5AoD`2^zxCefR{?3-fBy(i z3IoUhI*gr$sV1sO&Un@;zQ(Cw)nNdt6%xTRl{m(T*%$)1*VOHJ<4T%2j`2Xbu0eR{ zae*w8uE}q^+y{NM=N`SS`r(jpIDsx=Tkf4^qqID&e9E@ea@|%dvaPNtc^)1<$v*w) zPbumVz#N0&70r1xLgh9f!WFwL#gJrw9L11#wemJ!C71mqJn7JWKU#$jyBwu++zyx z73DnxMI^}7+%1<;IZVs@Y;L|09-UPdn%OznHrQmYmUzI*3z^F%iSx16{xL6nP$z$4 z1vMKxsC+I8e_wu0BE*;+ccFan1K)QRwUU65DDG;aJ}NI++7rzAy7lV%#JgRmylwFV z4>p!|ue>8pJdB4bxQ9gl{k(6O%H(UY8!|$;mE$-2?A4>xF1#c3e0Nv%&cQQc@?U6! zRgtudJ3o!9gz?Mp*6@*n1Hw}@QN}YWLQx2{c(NPyt5dc(tNHCRBuD7Ed5u&U(La9c z>Z1OLE%;$F=70>G!6m2(Bkb81%#w|hiL{R){}Ncl00l__^p|2O2f0XNX(C_~eQ9Um zEnjb0o}=CdS8W9%03DOc2XMRnszFQBR`RCv0De{j3OsIsF(i-YL!Ho%INY@$Y$`^l z`P(@Vo;Yg0fZg(w>~bBw77>bqCI;$cycR3Qcamr+<;uI6#5XGAdt+Z6h(goGQoKi=tpkil zA08<3#@}13u07tBpNofvYW|)I096v%0w`VrVzY-!V;)kU{88bW9V$xnPg@C7LPpnc z>tE0~^v?u~t!tOl{=;ozt9~1eY~;|#vIw)AM)1J$LrXwc7F>V|+;njN&pV;ZT0{=E zua4=_1}c-gv8g-JW_$qQu*9g@@pbMvYLaU9O!qzl8V{JZD&hL*Q#%6DbCqUkCB6GJ zym@)DR@jl{)D1Si8hEqa!3KZ)!(IF31>?D~L(86V7nPQPv$g{yVO$gW^2olMTs+r= z;9jlR%;O^e?(Yn5gNJW31=GRd@aANGq<&$ee5U*bEG^h6|ENMeDgT=oall`|JH~A1 z6Vb}w^<0u!9syUv@uto8{-ON;m{~IAr?gLl{!w57q=c;s(w*b(oSf|(a+}-Q;ep@t zd(8a=Qy>)1k51NBfpob(e$B`Ua&+{D;6##G$wG3n8!1jF+M?0VA@=KYh8QP7L*LaZ zo~eABx-YuV)}%9=G(6p2eO+2fZd@Jxmc(0umTYmMAs z9N_X8UD_XpQXNvBwLM%#bNIad)@%Lx$2=hz1JvuLA+V(+vf*Eiy{;+oV^-e zL-Oz*p;X_K61K?m?-8xzYO9h$nG|09cm@?7+;X7hGq^_A`{^$A(5NxFYm98SbFB&) zB3GtV5vTKkl}3^N55oZ$EaL?J5X8$+32Rv7NcA<{6tE|OSn#+^=lh&IYG|y*pIur_ z)p4%?ATof@vo^Xc1WjKm-Yy5^4NE)l)}D_YZ|et*x@J7o(`_$!0NHPp$n*{?A}sfR zU3^Lk0PlDzWdO^$ATnQ^dlo+1Dxz?*2$4J+f0}%4&|!Jt|3|hoj?zzH;h1qSLz-4F zR4U`s=3%mmAWomF+t^WMd&jbLFFDg0bm>ip+!s(;@vI_>no5TADyLx37#}N-3Uns( zZ;k*~>FIJu)-lULAZ)5kO^{O7Y4?4+FUG+_E7-24vKdt$-q5t0YU30{<+j~c+L;NK zAv66>;dFd`d}?;g{e7goV`L<9LO?`BB+G$h(9{3mXnN`t-ZNb7)fHVGTJ70s)lR`G z8^8beE^`g>&cemS($mMvq&>=HZL{I3b-CN6J~H~X8SZBoW6^Y0FUkHCyf`&k#>&&W z4GekpMKX*RgABVhQ9Ep$fV5tJJtEnbP_sBn;}@D;h9{Sz#ix8!Cy$TiW3)n7u@&Qo z0^$GA={4oh7uQ+ypH6qD1v#r~dHnyrD>0c~BWrQu0ozwW8`hWTLe;4MsSnRU?;K# z<4Jrhff35AzY86Imu{C|IA}%hx&#ui)8UG~hD%w)=&GCINB<39PeR7%X%d=iT-=+5 z72#@*l%OR$i>qf5q1?O0`MDN(9&06D=F2&cgLLasGkwcAxkO&KRU(Z&_1wb4J1}jA z5EMe4T*J5fRAsZ-*%1ODzxt^5b-Fmdgvpm*E@=0I-P^#1^2pTt%I!r5)fk-Me+yUB zlF6kPLniB^nl_i)JCfSEG(6KS-oc`9ao<8N8S?bz#L7TGSyo z*m6XmBQCVYaBgVfa@s4h2054oP>bpSsH*a0EGDZ{Rstx}<4N`EMHKda0AKN6PYHU* z4SE!wJwp`(hn&|uMVyfmel?5j_T&RP@8v0;6wO+vcrr}&2W&&I@B4!NLP+^1|!#b#4or%n7_;2rH)Ok71{)%k;xa zOf#c+)o8_@!T9laatp@D?j^;Ufk1QsDMX{DWAm~~4cDcgrY)p)hKIcaem)jWmyoEL zF_DNlSxuU)|H-aAxyG4s(~JEju6CyvTvn@zxu9As(MQg_LHri>3G+9fp{WT=w%4B% zVT-c2xN~sr(MN!#4&>#KAR1y~sM1~%{uf2_Bh}$**}2CiQt+)~A3pgH@>^B7-)(Ci`xJ;;oXBju_93q>u(OJF=8Nb3MU4v{BY^|ksrOPSF&y?WZ1Fb7J!}X4 z#SkjgH6o!Qou`xj;t8?A`@}F;op#$F#me;QWN`qJf)zc&mLFp{sV)Bn=xe4%n^3 zsvEilD}529NZ}z1qZa%`YQdH&ScsjVedu?qdd~tjc7h`{j4ev)HCeHTmlM<*oJr$< zrXq9ndIkYIvfYIIz+0Sc@ComxBhN_{?0C9{m@yrbE79?(XF_j-3s-<&TV9qovL4HcFE6oB$LH)&&0wzviIuSB|+sm1F$C}aPLsA z+g9>Pz+z#$VYC=@pVCSY{+B##LIjwbZQi=*pigPvO6$NJ%9UIqs0oTYucmZH5=5iUiw*3e=<}vMlwzpe0Sae^zA4+Y?K?4m`YePNKy0Q?+%F8q`c2d@9{-89VR23X-@rj0|%4 z=sM^3+@^3=Y*(r5;T{q@{(_8o5EU@_^6bH+N``Q%9%i8WxEK3$4_CrsJ-F4%o&$FM zcr!RO=q1#|evmWijMgwQpb4@9H5SJXum)prRxo|>hIV)uHu^hUhn`tMnkLewJG=WC z4h^7ynX%AP4NV>c@8q9Vif>*)1~$T%(Q}#{{`hKXrlud><*q(2u1^fuVytMm_=$og zVPG_{*ETB_+fes{$;`nO_=f?!hP(10-^dB8n!KQMxRG=TzPsb#>eT_gY3c1GgiMtm z3)f8O?M|#C>UZgWFc8m-KkKMIjCrP6%0b7=db=RWMd`Jm!Srm<&_dtnk6D@RPQyE0 zq`s+?IQ>7}Q+g?b!U5ogJ&h5XH%4idsQg=Q>oi`gUN%-5K1Nkw+7yp)DjHtkCx-hc ziLg}lXYFN^?U9Rg@m6T+=J>omQso?c?D|##Eh?J+>sZOr6BpM50b-3t>Tnx(Y(Nh! z%g$lTkx&J`*7_wJ<=4_Lb0VdxL92|4E9>F}$5q~&x8yaYB*E9X+cHepE}an?cwCnx0ww1p8xj6P>U@gA>%MKw7mK*uq{mo*=R)F{9Yqab@U8k3Rg;(d>-T_5A zkcIzg*Qo#{c(BgDTeT8tYzUR-g4KNI2fFK0wP@QLW#R=vAhy5=~_P~1(@arOFN)U_0XMyb*})_imqRYrFMZ4 zwtXH(N*zGuC%un@%YF?ZMrueiQe}o(4z#Qea?R`#gyqlm85|_9-G9mbEKbpAYrvtb zcsf$Cd~)$MSSxEl>yQGt^W5rUm>O%jK3Z6xi5D(e-OtreUX@)y30JvgutJaPg2uaa zHpPg+S15fF0OAkfA!@BXp8!Q=DS_`t+LIdc)aKO{2HBljy2bnQ`~)cXRKbuI%+hk? zF&Vvvt&}oQMiV@lTsR>s+HuT&_+7n7*M#$uSx1N8>rTbkyR5-VOWPS+|FMfCvWxZ4 z-Y?h+;AL~nd#PPa7!L4)kyeiR)?_VZSfjy7%Z^d2l}+cdj+!h|Sex0|d?~i0>&Xwh!m4c&t-DF;MN8&wlI>&j zr>k{OA1LZ!pAl9-v0eJuiquQK6>+Hf04X>6pOm+a?vH-HD@;-l`xQ;UF<08G*=q3X zN{f=sADt9A573UkZ_`n?`%sw(i`OMIj3=_HrGsT=UEy=Etf!7vdf>w}S5>1I2))UvDtPx$E|6QcwuT}WUQsx3zZDa6 zz3wX1MWvkfZC`E9u~*-EY!^I~yivHQ!v}`ecSDmfar&2!24);P z3a*$soSa`vOy@9u_jt7eT4}uB6%UfR+4Wl8L z)Z?R_I_vC~11NII35cHH{{ME#6hqlw;hc0dIUCsP&4mNN)v8xICdaGW%v z_-6gd9g3kXbhaUIx@oi(CmlX+vEnymZqKZpKgDC?Zqp^IwN*DWN{mIByH*#+_fGaY zc^Y`Ey;KT_`7f>b*ByZff(|CKLu*Z7<-bjZy{*zEm$-F{DRBBbV(TT~!`=MqH!|j< zhwYh=5lx}2qJdG@6REvV_BkXp79W4r_l%?;aRdJ$|1S!0^M5D=>Wer%-Hi1SetCM$ z!NJDN%FMV-kg_+NlpdT<$f%f(5!DK|Y9|Vt^h2HPjZ0w6o4P?@zaqF(-@m}CWn3BPU zW7JXKz++_3AKj2AWdynW+|AQT1atU|v0!Mt*8R$(T-4(GZ}B)K(e8=1Q5P#Z8;yqe zACT~5txFcsxgA$2vTqSGS2smcVCgN~JPxtq@)Gpf;P=D4#$OyQLRd*8BF7vG;`OfLzd0Bys(4VsLe^oIotZ>t$IXqg!I^<8Yw=xR%qt%#*(DL0V~P zE!F<3VJw6glvIDU+lq3(nbnfUDF zlxdX=d1?Rm{s6p29*+Q`afy;)yjLZN(I_P6U3}O&U7j{*7vq){9vLH9x;p_rf!rnZgQ z`t;O|NMBc1HjL6)tq|O`@IqTEdSjGiQL9rjR1a&K=+Tk@a1FJ zgCQfG*~<)(mpD9;!ee+lcdO@5mbrTS#M<67H48b0_EJE4p*-qa8mOj$88chr^j-pzQ20OZC)C_ zi->Zce6HhimP6{B07B~*%8yju10*<)+E5Pt19=vFW3SP#%%rd}Bv z97o-K{Me^N!Q*TNBC>uT_@(?P(2sj0o%s?d?TD2O*p#qBS7blZ|~ z9;1ur_qsMKqeYbn*Hx{gUESUWISupbK7*K|m9oM2re+FYf25Xb!wHZ~IRtr&DOY*| zxJ-KBkTOaW7C(O*=T-MmJ@##IB)vHj1c1mb%n_~%^Sw&bsuBBL`;!A{^^i1qGeNK2 zzD;DD($CMnU^RClT6O|43%b>IxpZ(fG+rtx-ciLy(tvNLel$CD7Lg@HF{% zcMz4c-Sr!I9o`!z_zhlD7&9#YM#**se7~x7h2Z@~Mf#=PAa>Ucr#hfZY}Al%EVf?L zv*OGvR?xhy5@*n!i^^{RYF2}GbFe)XYr`uquSrRBO1s7BS9Yq%GgdtxK6~}$vhP=@ z$L;o58hZ+_#qoD_GO~E#uq!!gHEE*jjXQdm$ADU};R&u_!)#N_I* z=rjPoe|qxo;t}I9$>Df|LNPWmIXT&W9F_Q{{_^sS-t(6W=xEt5wR2uxFHx|y@$Sv< zyt3tvJ3s4KLw*42Z=H6mNqjF1l2@8Nnd^dPU2gy#N}5C-budCNFfO3>@U1w#d!0=? zN!bNBcsuCQ4y)pEIqqpGO3SW#N&zB@yrHorFd%|;}~tx%E4M9+7m`RDHO$iK`hWUBk#U?-BOi0IYJ z`Ik&Z2wktXpuen+4c@qaP7~y1Dr{(Gi}+R^v#bDjzVJ=<#R|~rdBKO)H_>4%9+2%Q zF~D21JM6zHycyQ@U!pezNY*zJtbECElSf&@DCE&{_zDW|kSRUC z_sIQI<-Bp<*TqhgY|%&&t3-oJ_Tc1b()r#roH_j&Z+j2C0gKs{MdeQ4?VYTIJ1u_; zeMYM-+Km#`$)yORnKwPW;@L^DmBGt%D$=PThF1JN7NF`rXI$m|?M5=M0n2Zo9ixOQ!YQfZT}+%6YT$v$hg%^W+IQb@7vRRxpk z>{VLvxM92x%SSF1FB13txDU0wySX9KDBilvKJbKp3-iKl4grdSKhwtM;bQR_oR!=S z->z@j`Ywi`W@DKCVDT171&?M)y*)p^^YPhCYXcxDxkRZW=?gA5BmzD$@+x+^>|W1I ztIxb}u%owB4!$}PmRFpw-j=Ys3os^@OyhPXO>SAIxM`9mbYDC@-L9#6L7OE9QzubG;F@NXT3S^yQ)*ZyyRxhDS&!3HL(misyHSRj$d^Jys z)LEnI7JN;E25|HDmKx4Mi+4pv+z6Xvs*q_ll5kJM@aMq1+rDEPSnUcENLVC-Xl^+B zLnf$sy=I;iNXCrdm~zBy+;TChVnm&XQg|wRm~kD z)5eU(5y1!5i|Z%3pL%x`!&BF~gUfHRcl~a5+Ygv+h45cU2QNz}_n%3j`foSVqU|Jn z4cUm_6?`sI7QRx#f6b&r^CqidB9uBgL3s5{F3x^QO+4-r{BtC7XC&a*p8MfTe`mJM zk)~!M|5o5n0~RsY+;?c(qN=><_kavI=cc!ZLk3r{Ys;IlTs3^(_;LA3$<+Yn*u@)^ zdif~FNE_82=QCX>p$_0UQ|paSm~7eG-$(^YQdk1UjG_ZiHjdt1I@ZdO!EOf#bVSpLPYtoE{Nz^cmxyGZ38gvf;Vh`uptJAs?*(tmY$1n~Uf74N zIstlgA!|=1(6I3YNd}HqCXNj=pYJc%lfP_ zH>STYMTXIAxFCI1o~=j})~0%C{zv}ANI8GPKm7IU*6Wr;mDEcc`K=zLpO_8$45hy| zNis8^!D|}jkb9%eu4wh%{jJ5^;yVga0VM{d?#CwWY!#S?X9aEf?4jGoc)ig^<+lw5 z##MsjKb`e4Ajtr!N+;P^E{XhF#t$gWbb7KBkv&?-A)qR{%Mi$~CW%{co^)M0@)5(4&U3hN$~jRl0*a(fB+evxK$al+Uyz7Jc_rcL#B# zG`Vs@OYe=c5C95$GN1`f^&eTnqPHkR3O`=`eYyPX#*AcmIF{-R2Yfjc{X5%xWG=>=JS$d%?_|ZqciM)R%ae5u0-Xx5NG4e2%8o<0SfP|H-Q(y^tmO|+&%q^RFWd|A zLFAdleOrJc4GVv;LkQU+L<5AV%Rn0{)A3x^*@>nr)ZWfC75?kVkvBGphuV$p&R%BHvFO)$3ZyvyHhsDJw=V?uLqsT=vjT{8I zWV2M-`+sj;QpUH{CRPfMrGbS4jivsBFs5G18Yx>^7j3^vNA_sO)#x3g`U{~pX0!&G zM%0hhFAuJ)^XK*p$B!f3~$~Q21{UU+q9- zF^(OGfTw__I_|J~C*Zy|=-!lK9^Sq1*v3N^`)+jW{y}NP5J(#%$!zfsrlk;8vXSKe z|C+e2fTp%3dIAvxQevb@5rRknr6?gHh;#&`NEbpAl-`SUf(S^F4$`GVkSe`bK~Rbb z#Y;z!E=77V@PhZ=_ulzA=X1`?T5D#{-h0}FO5>4JY>`FCXKFGj!g%CEt4!SQ(`E|_ zo|JsdS7ZY+g5=XZt?sNx!cavm^N>lFF_HvJ*$3SyX!VKIe&Hf$v~oUb5wGz_-uJKPmdNE zjcC+G)9D-EUZT$Uxd0A# zoDX6u2gPYl1eJV0#KpC({VO!$o(-$_X+G9`cwC1rw(qg3Xk7MZaJcJA{hGM-jU$Eo?7HHX~E_~SeL3l$!lP7)HK3YDRKt=TYhsn9-a+zjoaUDBXN z-;z^Uub+FRP%+m#n903MX~^uzySMjG!Cjtsg=-df$iToqEef6Up$~tLb|53Z4|tk_ z7{|K$+G;BcOG}H3i!j*Kth~HzY({2ocCH_SAhOoF-6r#4JyX@I@y!gjO-USRhaY(7 zf2L3Cc3L@;iYAd2gGP)=i1+^V_|iAUIv^3nZ_r&SQ1Fa};mo5RUDh4g8J>Bv9~)~} zE?=wkh$A;fkIHOy<0wfoMLaKjZ&4)F51$)dqp%>*Ha|`f!srIr2HYO}WZhg5Mt74Z zWO=hlWT+??)ZyFhy`#A5I~}=Jx71T0+SkN;r8_=zQ0R8aepOAed;FG9)g#59%Tk{! zCdZW>O58ZU^T9gOw1%5}7mn_Z>!4vg4;-)3!g;$v&wy8?MhL<o*gUi5Ad?-6Nn{8GMw4u+OH~IJj?zJZP9C$1t=@( z%ZvK3(mCfu4be0%GuN-}RF`4n=4L*A1+FdjpA4%C?YrQ-3z!!ND9_~46VH!7Iu?aG zjaC&AUF!@EgwyAUlh0>-P1DowU7d3I3<_ZTO6~*+d-RwZe*Pr;Qa=Wjf`_Px1wHO& zyudOW{*)Xf(gq^oCZffCq6KonmR;?5CXWzJ!U+7hkA}39Z=6X15Og`EAy}n@^7Tji zCl+F*KLB=&m9S?%>s)}g{7#{>Wc+rms|Bcu)E77PRx2#8K4d^+uWn92d(9lP;vW{UPBPP ztHdBCfE&Jl@Klb%ghckEGz2apeMS?I=?i0IXW?f zlvr2$1n$u9Qp_WlCa*niBkM0KmmiV_m$s${YdNbvOmEl|dpKUSPq@=KGqvy;Gjew? z;Z^%^s$OLArv#bZ!sBTdoG(LP_!y(#Lf-&nRlfLahiIKUcffvzaP0{ZDWH_ikhB$@0S0XAt&DdImun(b&QGN7$_+Rel3 z3bKKVs#u+qG+)~LkSOP&>ED@{*_`UJqr+f5_}sBZokb##U=D&}??usm&evlNSxKLw z_$Jyr?@Fp1tP;j`hVRld3v3H#FqKk^QKs(v($HsJ%?O%}6=o(>M?QR^N_BPZe$yf( zsW8}7<V_po0=Br)Autcwtn0lN= zMV)+~K_!D(@>|_hofjBtQemrl7^lB6NGBJ7JqEK7Jxg#eV>19TC&k(O4bx=#QvtTh z5b5``r)*#lmZ7awgwV64OBc#}RH&#= zssi|usn>(D0=5^V^mY(0>%|qSJoaN{bNxuvDFP&1>C3`TG0$~>GMc*zPTv&sohlr8 zi(@V8pq;9e4nIysqc7WW;q3>HGzr3HA(GnIY$FVAJ*XvaMe`H*mXNe%_8Gs{T(mer$Gj`ysqzE*x6w4FC6V6KA+U4-`S=rlZ=F>!Db6#!TcXJBl)jw1=l1mYOzSeg9?0 zcxC=1PG|qdNwJDfr>K!ed$DSR&PbGoNkCccfcf4=EaCaECOj;Li?wr}MUCm>PCLEu zIzP0H#{b;dKUiQUV!`_y3m768;=rl76xnC5*a1i2z6h?0zYuc6WL@`)i_F5X&C!z< z#j?=eAM>|j4Kqz=#jcL(VblEPa>)0NYJQk*th#g@xsTrhjcprc93c`Mouoi?G@N9S zpL}vMt_6GAos@k>6$#<&$yQ=jTbUQOJ?*n39o;$>3B>`54^w-cFu~CiU#x6K6BA~1 zMTSn135^~)3S$ERNeWzsSgV}7)&Tg&T3&xrAlfW|Q$%VP!wC3Kuq(_XuN;Rg6Rciy zq92Lwe9SKv{UWu(xr9Mc>fsU+3BLF!EfooF_44`X)=$E+Embr|HTIJp`W^#mmQ|Nr zX|mr{U}jTzh4P;+<%$g$zv=N_I5lPULxZmCJ5f5Pn2Q=^5Q1;M8uJ;mk`OEUD{=6^ zZQt+O&bKndUpnDzrJE!7df>RZLT@0E(7`a(fo8Mhf1ZiI9*xj*;Nz3&(5I5G2 zk$2+upVOIvTB0rI@;OZSaByn5^n3f2hI=EN+hH+-MILqQUmBKsCbevy-m^#JZgiIK z{xqpKS5EzH4Na&%sLIHS@9bHW7xBIv?{4Ci1|k8G`v2opqQ?FaTMSXTn1MKv8tB}a z6cn(el73+LaFOnr>;#uI{`kc@*ND&&znT~&q!x~G2&Ld9Ls&no$#>`$woj+v*{I!d+ zn6f?o(tM%p#wgmKCuO#|*g+iEKv-z?ReIsiZ#AhEV&J2rS{pWnU(dP`Es%2+@<&b2G5N2BL^TBhLp)R=u&lGEP%uDqGpT!P zb7#iIsU)Z6UG}x>Fmdklq3A5X4_k4Ds3>y>`t{L|i2CF@1ZS{PZqF*UoQ z9Q*5mh7SAqWd~dmO6_Hiz!~4Wm;vj<`GdPzBXc(7K{m$uo=7qqQGRc6`6>$M#*y}j z8YEr%8tU4bof3tT;~(M_){^IQ>%mvX|2A5_w}4 zzLHJqt9T_?&)+*3Zn<5^=$f3p7nF$aH^YJyAUlT!w3Z;?BIH~#vBpaOY7qZ<_LSiVBfu-?yk?hFpla8q zxP_K*bDZ`$uq`!qZ8Vv?eddAY{Pu8^2G_xSZ|IQWm(YN?CfG#+8RMHS0M z$E9h&qTa~W!s5_$BL=PKeH5yn#5WcNL<67xg#5qM89t{DQP~x2-&nX1t0(}Vb<9k% zb-2LXARFt#TcRn}u==%>+k z$Nx}WY|5+{3sbYJVN>!mQF2y<&U{5KB2gYz5>&QMnm%zM8I9QR=PuMe<~d`-3lY=) z{k6K&e+jBu)U59rY=0YG+QLjq+l{Sx1Z)o74K<5>&hYYizo$`iQbp3!tCDMvYc>_nnMW)Dd4{a_UOsJE-P8D&`&s0#GmN; z-EHQw3-NeG^OQe>!SV7n(|x4#!@$0<0(@X1#l<=q4Ev_;fw^iII&`}Zi$s3E&e%KA zk9eVMfF;+y)<3bFuaWV6hsVcMmwQ|SpSAaJs3522>}~Z49eLiNd83O>Q9?RC?CDS4 zJj+hL-Q9rOU?wtRXY_w*n6jBzlFsX8&1=x@zOYp3v`p&rUeHcfy>POfHv;}*PGU03s@`sf2#{<2F2j9}vTuQ6>aHT$$f>3-H_b9Km+t-p(P2XgP zceL?|d{ctpFaY#-hX7oMdG@~+!9`+=U@60o1st22h4}j?{;QzpIuDhENk@xp5VZ;9 zPxEB%HK5&#D2vtbta)~a?yZJKnF)2*!<+fD91?l>C^}ioW=C?!ua8QjLe;8_(-1Q! zyVg{hL*)~6fKDG(us(y94*0FXb7m?L>4&l9g7;J|@mi=3mApfhSTGG-lE1Dd0DGhP zoI({epH6Zvlf<;B^e5r$-1<{gup>AXq|3<(Y=I#E(YD$cgG{>I55*~CQH3eve?|G8 zg@@ad(_v0kf)`-#!uf6>kLl({PjO^Ip{Fein$CM;yj!DYaN$q-p{+{h@7l+gfA_*0 zg$`dght)BJQfkviFe_m$noltms5q!y$CBPKY^?UZ@i++?JlAQFBkVr63{Ko>pmSx1 l)NcTinOT2Ii(AGGe|wMk0Z^Z}hA#h^1bY7U=V>FO_zzB}eL?^L diff --git a/assets/hbm/sounds/weapon/osiprReload.ogg b/assets/hbm/sounds/weapon/osiprReload.ogg new file mode 100644 index 0000000000000000000000000000000000000000..a49fede1631a7cf543cca75c2f982eb7ca309ff2 GIT binary patch literal 16070 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 literal 0 HcmV?d00001 diff --git a/assets/hbm/textures/gui/gui_launch_table.png b/assets/hbm/textures/gui/gui_launch_table.png index dd03ae32c17ab7bed519167cb3ffeb18820c7b0e..905ef315202281f6b33044d53fb9da635ac63dfe 100644 GIT binary patch literal 13487 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 Z8Ox<2=grw0!1`ALTsE;ZCR}oh`yb>%7-Ikc diff --git a/assets/hbm/textures/gui/potions.png b/assets/hbm/textures/gui/potions.png index 46c14d1c611407406dbabccc598d957d14566ff5..87da40f5c4ccd40d80da3740c1f5504f9b115022 100644 GIT binary patch delta 2789 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 delta 2751 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 FV1hePno;NYj*Y9C>*B zO#TG`xLa46Wm$j#M}fkHo7I(y2vf*kpo4=c1mN{O2cWL&DC8nG9EO3nk4peV1ORKT z#vqHI&C~N&;=Ko;?|T6Dy@+6~{q<9e=>Xtm$I*~zuBxgOpe#!O@;pC?h;uH8Pby=K?jxPGz5y)`YSLDn Rp{oD@002ovPDHLkV1h@whj0J@ literal 0 HcmV?d00001 diff --git a/assets/hbm/textures/items/ammo_9mm_rocket.png b/assets/hbm/textures/items/ammo_9mm_rocket.png new file mode 100644 index 0000000000000000000000000000000000000000..ad908fbe926637dfdf2f2fdbfdd950dd903d88c8 GIT binary patch literal 313 zcmV-90mlA`P)t#46s{o!K?gGH|Y{vKT$jkeu z`WFD;>Haq8`Fwx?CxM2A$JI^Hiv?52U!c*)6arAx8i2AaMaY%(xIY{yYE4mVj4>Ev z$n#u0@(A$yu~qxs4uH080qD98APNx;-oAcLhKRkgEDHc>ngWm{$pGkq{Y^vz=bQp) znnpCKstRjuh#JI9y!Rs`=bRD^VkXmYw1Ncj-Vfok##$TtN*A49OulPHt=#~b00000 LNkvXXu0mjfor;24 literal 0 HcmV?d00001 diff --git a/assets/hbm/textures/items/wire_advanced_alloy_new.png b/assets/hbm/textures/items/wire_advanced_alloy_new.png new file mode 100644 index 0000000000000000000000000000000000000000..48f8dfd977d3862df6e2d6bcec73d2a71f3c8eaa GIT binary patch literal 320 zcmV-G0l)rbByY3jCh=9abh(I{iy+Z)5H}zfbP+9g z2;kC<-ACTFjcIHvcmtx&G$TFD8_oNH^Mkdvx7POmt&6!xDaGUJ72+87dx&Fho&`!N z0E(g@P1C7wacof6H2??y1+ImG>$(dxL4qVndaX70%N=Yt@cseY4YyAnT5GDR0w9Va z@;oQYG7%(j&aqrwz|{gS2d2Y0hxdNc9OH+ww+5u1MfYDW@sE4f%l%KX(r9d z9gKUBQu1*925SwUIjl8zF9Ing0A*QD^9Kp0E6h^-b%g-NnBEu@Jj`$PGr%{%M~CE- SLzf=gJ(f;uM zU(M&8=RJ3y_xyPM&*Pgk|M>n<<747 z6qP+W{^RKfp}*C?)z(kD$Ghd4#?mu)mN#CTm3!OgUlIFrxtQy!eaTG<2@-5J=NGTi zin-33AmeUqzh`Gt5SOOvXB*|Ee?D`Wt9TXxQT2@SKkN_KHyoP$PwNmPKhXCKp00i_ I>zopr0O@srdH?_b literal 0 HcmV?d00001 diff --git a/assets/hbm/textures/items/wire_blank.png b/assets/hbm/textures/items/wire_blank.png new file mode 100644 index 0000000000000000000000000000000000000000..02d848f1f6edcd2c1cd68bcd98fa3699cb0bcc9e GIT binary patch literal 437 zcmV;m0ZRUfP)l!tqG;jg zXdz@FkImfX8kMXz_nvNM&YXDye+1JxgCHOxLY8GPO%q9ypx^InxrQ#;^E@b}P_Nf< zzu%E%8GPR-r4$B(0sAN*grMDShsk78s@86|DNR!dA*k2uF|7b&3{pz%tkda~0l;uL zBrV~AFbqEu!Z4)KX!I7>F6I@F*-g^~=NyjXyya*GE|&}4Za1`AEv!~6G@DISt5xl8 z-W)*?P@1OToTFB&A&Mf*=ku>!7QyrROzZU;N+~Rt%Tf~OoZ>i!Wm&LoyL^Qxir~7g zw%Xxvpv`83N~KcRuOa||@pw$W?|(nhFZTO=!7Dm&9EV9M>3BR+9LHdcmEL!|-BPF1 zf#-QB2>^iWx-8FgYBU;!lvI6;>1s;*b z3=DjSK$uZf!>a)(C{f}XQ4*Y=R#Ki=l*&+$n3-3imzP?iV4`QBXZEKj`94rhx~Gd{ zh=u>sa~pXZ6a?HJX6NdxnR9}3PLpWN$y}KiEJ9zd?EldEi1`zf_?f%APk6xKmDF?6 zrYZf5zq9Icl0(nsXYSI?a;TBecYm7rS@Oa@*BIt1n9>tJ=HKS*^IB*YyVckWXeEQE LtDnm{r-UW|K-p32 diff --git a/assets/hbm/textures/items/wire_copper_new.png b/assets/hbm/textures/items/wire_copper_new.png new file mode 100644 index 0000000000000000000000000000000000000000..33dd16888dc7862832f788af048ef0c4e3dfe828 GIT binary patch literal 330 zcmV-Q0k!^#P)|3RT4 z2u37XwI-Jfafpqz*Mf83^5F6A@$TKh`9W*lX|22e>Z3zb5Cn*)2jpT+`g)68thw_v zK@b3t=Q(j459hr7fU2qh*xHs4^UIa39FNl=ilRh($ literal 0 HcmV?d00001 diff --git a/assets/hbm/textures/items/wire_gold_new.png b/assets/hbm/textures/items/wire_gold_new.png new file mode 100644 index 0000000000000000000000000000000000000000..de76cb1727891b1fc1e586af4c3a606fb1b56882 GIT binary patch literal 304 zcmV-00nh%4P)=CX~307NE5hGV`PC$kWzD` z$pkX&R$4%$1pHJ~WJv*1r1ES2;cz&RpM=N5IVa9J`K$jl4QZ_@iVsB2a=9QPXNkVn znrX>hLEE+fcn@vc4Kw=VOk@>Bp66nW;c$2(%L=a77qYBixBJ8xL(?<>BuPS5Rg`79 z0$7jRy!UK2u-!fnGx{NfL65mBSUP^B@B3+VUJyc9EC?acbw7G>2XPNdDUQc?()7gb z_DY(b*zdnkN&!&U^>BaqhgXL7#d$Eczl0Lno!=W4mP&MSLHRY@&!D2#`{e=Q#kY)rvGt zNs?p%@IFl|%MzALJkJ}s)2+3mXM&r6N7wIB*Y(Ug3$WJ0<3 Z_yym?j@Du|l+geH002ovPDHLkV1oU8iVgq( literal 0 HcmV?d00001 diff --git a/assets/hbm/textures/items/wire_schrabidium_new.png b/assets/hbm/textures/items/wire_schrabidium_new.png new file mode 100644 index 0000000000000000000000000000000000000000..15558c3c804e7fb980ecda6072e4ca5beb348dfc GIT binary patch literal 325 zcmV-L0lNN)P)b;@5JewJN+c?8vsJVyk&tLDVahFCZb?JUNpgXlAf+!r zLBRncrS%2u3Ixbr8*K_~V=zS2{N|6o{(SAu3_KrXZlKa9XjZ!R)2f`HU%KXFMdxWjInDXXE z config.maxAge) this.setDead(); + + if(worldObj.isRemote && !config.vPFX.isEmpty()) { + for (i = 0; i < 8; ++i) { + this.worldObj.spawnParticle(config.vPFX, this.posX - this.motionX * i / 1.0D, this.posY - this.motionY * i / 1.0D, this.posZ - this.motionZ * i / 1.0D, 0, 0, 0); + } + } //this.rotationPitch = this.prevRotationPitch + (this.rotationPitch - this.prevRotationPitch) * 0.2F; //this.rotationYaw = this.prevRotationYaw + (this.rotationYaw - this.prevRotationYaw) * 0.2F; @@ -354,6 +360,9 @@ public class EntityBulletBase extends Entity implements IProjectile { //for when a bullet dies by hitting a block private void onBlockImpact(int bX, int bY, int bZ) { + if(config.bImpact != null) + config.bImpact.behaveBlockHit(this, bX, bY, bZ); + if(!worldObj.isRemote) this.setDead(); @@ -453,13 +462,8 @@ public class EntityBulletBase extends Entity implements IProjectile { //for when a bullet dies by hitting a block private void onRicochet(int bX, int bY, int bZ) { - if(!worldObj.isRemote && config.destroysWood && - (worldObj.getBlock(bX, bY, bZ).getMaterial() == Material.wood || - worldObj.getBlock(bX, bY, bZ).getMaterial() == Material.plants || - worldObj.getBlock(bX, bY, bZ).getMaterial() == Material.glass || - worldObj.getBlock(bX, bY, bZ).getMaterial() == Material.leaves)) - worldObj.func_147480_a(bX, bY, bZ, false); - + if(config.bRicochet != null) + config.bRicochet.behaveBlockRicochet(this, bX, bY, bZ); } //for when a bullet dies by hitting an entity @@ -467,6 +471,9 @@ public class EntityBulletBase extends Entity implements IProjectile { onEntityHurt(e); onBlockImpact(-1, -1, -1); + if(config.bHit != null) + config.bHit.behaveEntityHit(this, e); + if(config.boxcar && !worldObj.isRemote) { EntityBoxcar pippo = new EntityBoxcar(worldObj); pippo.posX = e.posX; @@ -505,6 +512,9 @@ public class EntityBulletBase extends Entity implements IProjectile { //for when a bullet hurts an entity, not necessarily dying private void onEntityHurt(Entity e) { + if(config.bHurt != null) + config.bHurt.behaveEntityHurt(this, e); + if(config.incendiary > 0 && !worldObj.isRemote) { e.setFire(config.incendiary); } diff --git a/com/hbm/handler/BulletConfigSyncingUtil.java b/com/hbm/handler/BulletConfigSyncingUtil.java index d67a560eb..2e8f815c8 100644 --- a/com/hbm/handler/BulletConfigSyncingUtil.java +++ b/com/hbm/handler/BulletConfigSyncingUtil.java @@ -80,10 +80,12 @@ public class BulletConfigSyncingUtil { public static final int M44_DU = 0x62; public static final int M44_PIP = 0x63; public static final int M44_BJ = 0x64; + public static final int M44_ROCKET = 0x65; public static final int P9_NORMAL = 0x70; public static final int P9_AP = 0x71; public static final int P9_DU = 0x72; + public static final int P9_ROCKET = 0x73; public static final int BMG50_NORMAL = 0x80; public static final int BMG50_INCENDIARY = 0x81; @@ -100,6 +102,23 @@ public class BulletConfigSyncingUtil { public static final int AE50_NORMAL = 0xA0; public static final int AE50_AP = 0xA1; public static final int AE50_DU = 0xA2; + + public static final int SPECIAL_OSIPR = 0xB0; + public static final int SPECIAL_GAUSS = 0xB1; + public static final int SPECIAL_GAUSS_CHARGED = 0xB2; + + public static final int G20_NORMAL_FIRE = 0xC0; + public static final int G20_SLUG_FIRE = 0xC1; + public static final int G20_FLECHETTE_FIRE = 0xC2; + public static final int G20_EXPLOSIVE_FIRE = 0xC3; + public static final int G20_CAUSTIC_FIRE = 0xC4; + public static final int G20_SHOCK_FIRE = 0xC5; + public static final int G20_WITHER_FIRE = 0xC6; + + public static final int NUKE_NORMAL = 0xD0; + public static final int NUKE_MIRV = 0xD1; + public static final int NUKE_AMAT = 0xD2; + public static final int NUKE_PROTO = 0xD3; public static void loadConfigsForSync() { @@ -158,10 +177,12 @@ public class BulletConfigSyncingUtil { configSet.add(new ConfigKeyPair(Gun44MagnumFactory.getNoPipDUConfig(), M44_DU)); configSet.add(new ConfigKeyPair(Gun44MagnumFactory.getPipConfig(), M44_PIP)); configSet.add(new ConfigKeyPair(Gun44MagnumFactory.getBJConfig(), M44_BJ)); + configSet.add(new ConfigKeyPair(Gun44MagnumFactory.getRocketConfig(), M44_ROCKET)); configSet.add(new ConfigKeyPair(Gun9mmFactory.get9mmConfig(), P9_NORMAL)); configSet.add(new ConfigKeyPair(Gun9mmFactory.get9mmAPConfig(), P9_AP)); configSet.add(new ConfigKeyPair(Gun9mmFactory.get9mmDUConfig(), P9_DU)); + configSet.add(new ConfigKeyPair(Gun9mmFactory.get9mmRocketConfig(), P9_ROCKET)); configSet.add(new ConfigKeyPair(Gun50BMGFactory.get50BMGConfig(), BMG50_NORMAL)); configSet.add(new ConfigKeyPair(Gun50BMGFactory.get50BMGFireConfig(), BMG50_INCENDIARY)); @@ -178,6 +199,21 @@ public class BulletConfigSyncingUtil { configSet.add(new ConfigKeyPair(Gun50AEFactory.get50AEConfig(), AE50_NORMAL)); configSet.add(new ConfigKeyPair(Gun50AEFactory.get50APConfig(), AE50_AP)); configSet.add(new ConfigKeyPair(Gun50AEFactory.get50DUConfig(), AE50_DU)); + + configSet.add(new ConfigKeyPair(GunOSIPRFactory.getPulseConfig(), SPECIAL_OSIPR)); + configSet.add(new ConfigKeyPair(GunGaussFactory.getGaussConfig(), SPECIAL_GAUSS)); + configSet.add(new ConfigKeyPair(GunGaussFactory.getAltConfig(), SPECIAL_GAUSS_CHARGED)); + + configSet.add(new ConfigKeyPair(Gun20GaugeFactory.get20GaugeConfig().setToFire(3), G20_NORMAL_FIRE)); + configSet.add(new ConfigKeyPair(Gun20GaugeFactory.get20GaugeSlugConfig().setToFire(3), G20_SLUG_FIRE)); + configSet.add(new ConfigKeyPair(Gun20GaugeFactory.get20GaugeFlechetteConfig().setToFire(3), G20_FLECHETTE_FIRE)); + configSet.add(new ConfigKeyPair(Gun20GaugeFactory.get20GaugeExplosiveConfig().setToFire(3), G20_EXPLOSIVE_FIRE)); + configSet.add(new ConfigKeyPair(Gun20GaugeFactory.get20GaugeCausticConfig().setToFire(3), G20_CAUSTIC_FIRE)); + configSet.add(new ConfigKeyPair(Gun20GaugeFactory.get20GaugeShockConfig().setToFire(3), G20_SHOCK_FIRE)); + configSet.add(new ConfigKeyPair(Gun20GaugeFactory.get20GaugeWitherConfig().setToFire(3), G20_WITHER_FIRE)); + + configSet.add(new ConfigKeyPair(GunFatmanFactory.getNukeConfig(), NUKE_NORMAL)); + configSet.add(new ConfigKeyPair(GunFatmanFactory.getNukeProtoConfig(), NUKE_PROTO)); } public static BulletConfiguration pullConfig(int key) { diff --git a/com/hbm/handler/BulletConfiguration.java b/com/hbm/handler/BulletConfiguration.java index 4c583d3e6..b8aa24040 100644 --- a/com/hbm/handler/BulletConfiguration.java +++ b/com/hbm/handler/BulletConfiguration.java @@ -2,6 +2,11 @@ package com.hbm.handler; import java.util.List; +import com.hbm.interfaces.IBulletHitBehavior; +import com.hbm.interfaces.IBulletHurtBehavior; +import com.hbm.interfaces.IBulletImpactBehavior; +import com.hbm.interfaces.IBulletRicochetBehavior; + import net.minecraft.item.Item; import net.minecraft.potion.PotionEffect; @@ -62,9 +67,12 @@ public class BulletConfiguration { public int caustic; public boolean boxcar; public boolean boat; - public boolean destroysWood; public boolean destroysBlocks; public boolean instakill; + public IBulletHurtBehavior bHurt; + public IBulletHitBehavior bHit; + public IBulletRicochetBehavior bRicochet; + public IBulletImpactBehavior bImpact; //appearance public int style; @@ -72,6 +80,8 @@ public class BulletConfiguration { public int trail; //ricochet sound type public int plink; + //vanilla particle FX + public String vPFX = ""; public static final int STYLE_NORMAL = 0; public static final int STYLE_FLECHETTE = 1; @@ -83,6 +93,7 @@ public class BulletConfiguration { public static final int STYLE_NUKE = 7; public static final int STYLE_MIRV = 8; public static final int STYLE_GRENADE = 9; + public static final int STYLE_BF = 10; public static final int PLINK_NONE = 0; public static final int PLINK_BULLET = 1; diff --git a/com/hbm/handler/GUIHandler.java b/com/hbm/handler/GUIHandler.java index d971b7a92..86bd81bd6 100644 --- a/com/hbm/handler/GUIHandler.java +++ b/com/hbm/handler/GUIHandler.java @@ -769,6 +769,15 @@ public class GUIHandler implements IGuiHandler { } return null; } + + case ModBlocks.guiID_soyuz_launcher: + { + if(entity instanceof TileEntitySoyuzLauncher) + { + return new ContainerSoyuzLauncher(player.inventory, (TileEntitySoyuzLauncher) entity); + } + return null; + } } } else { //NON-TE CONTAINERS @@ -1536,6 +1545,15 @@ public class GUIHandler implements IGuiHandler { } return null; } + + case ModBlocks.guiID_soyuz_launcher: + { + if(entity instanceof TileEntitySoyuzLauncher) + { + return new GUISoyuzLauncher(player.inventory, (TileEntitySoyuzLauncher) entity); + } + return null; + } } } else { //CLIENTONLY GUIS diff --git a/com/hbm/handler/GunConfiguration.java b/com/hbm/handler/GunConfiguration.java index 436267874..0f96c4bb9 100644 --- a/com/hbm/handler/GunConfiguration.java +++ b/com/hbm/handler/GunConfiguration.java @@ -22,7 +22,7 @@ public class GunConfiguration { public int gunMode; //0 = manual, 1 = automatic public int firingMode; - //weapon won't fire after weapon breaks + //weapon won't fire after weapon breaks (main only) public int durability; //whether or not there is a reload delay animation @@ -46,6 +46,8 @@ public class GunConfiguration { //sound path to the shooting sound public String firingSound = ""; public float firingPitch = 1.0F; + //whether the reload sound should be played at the beginning or at the end of the reload + public boolean reloadSoundEnd = true; //how much ammo the clip can hold, 0 if drawn from inventory public int ammoCap; @@ -80,6 +82,7 @@ public class GunConfiguration { public static final String RSOUND_SHOTGUN = "hbm:weapon.shotgunReload"; public static final String RSOUND_LAUNCHER = "hbm:weapon.rpgReload"; public static final String RSOUND_GRENADE = "hbm:weapon.hkReload"; + public static final String RSOUND_FATMAN = "hbm:weapon.fatmanReload"; public GunConfiguration silenced() { this.firingSound = "hbm:weapon.silencerShoot"; diff --git a/com/hbm/handler/guncfg/BulletConfigFactory.java b/com/hbm/handler/guncfg/BulletConfigFactory.java index 55a0c9362..dada1c63b 100644 --- a/com/hbm/handler/guncfg/BulletConfigFactory.java +++ b/com/hbm/handler/guncfg/BulletConfigFactory.java @@ -142,5 +142,32 @@ public class BulletConfigFactory { return bullet; } + + public static BulletConfiguration standardNukeConfig() { + + BulletConfiguration bullet = new BulletConfiguration(); + + bullet.velocity = 3.0F; + bullet.spread = 0.005F; + bullet.wear = 10; + bullet.bulletsMin = 1; + bullet.bulletsMax = 1; + bullet.dmgMin = 1000; + bullet.dmgMax = 1000; + bullet.gravity = 0.025D; + bullet.maxAge = 300; + bullet.doesRicochet = false; + bullet.ricochetAngle = 0; + bullet.HBRC = 0; + bullet.LBRC = 0; + bullet.bounceMod = 1.0; + bullet.doesPenetrate = false; + bullet.doesBreakGlass = false; + bullet.nuke = 35; + bullet.style = BulletConfiguration.STYLE_NUKE; + bullet.plink = BulletConfiguration.PLINK_GRENADE; + + return bullet; + } } diff --git a/com/hbm/handler/guncfg/Gun20GaugeFactory.java b/com/hbm/handler/guncfg/Gun20GaugeFactory.java index f4a54d459..caa4d0678 100644 --- a/com/hbm/handler/guncfg/Gun20GaugeFactory.java +++ b/com/hbm/handler/guncfg/Gun20GaugeFactory.java @@ -149,6 +149,32 @@ public class Gun20GaugeFactory { return config; } + public static GunConfiguration getBoltSaturniteConfig() { + + GunConfiguration config = getShotgunConfig(); + + config.ammoCap = 1; + config.durability = 4000; + config.reloadSound = GunConfiguration.RSOUND_SHOTGUN; + config.firingSound = "hbm:weapon.revolverShoot"; + config.firingPitch = 0.75F; + + config.name = "Winchester Model 20 D-25A"; + config.manufacturer = "Winchester Repeating Arms Company / Big MT"; + + config.config = new ArrayList(); + config.config.add(BulletConfigSyncingUtil.G20_SLUG_FIRE); + config.config.add(BulletConfigSyncingUtil.G20_NORMAL_FIRE); + config.config.add(BulletConfigSyncingUtil.G20_FLECHETTE_FIRE); + config.config.add(BulletConfigSyncingUtil.G20_FIRE); + config.config.add(BulletConfigSyncingUtil.G20_EXPLOSIVE_FIRE); + config.config.add(BulletConfigSyncingUtil.G20_CAUSTIC_FIRE); + config.config.add(BulletConfigSyncingUtil.G20_SHOCK_FIRE); + config.config.add(BulletConfigSyncingUtil.G20_WITHER_FIRE); + + return config; + } + public static BulletConfiguration get20GaugeConfig() { BulletConfiguration bullet = BulletConfigFactory.standardBuckshotConfig(); diff --git a/com/hbm/handler/guncfg/Gun22LRFactory.java b/com/hbm/handler/guncfg/Gun22LRFactory.java index 83210888e..139b97d27 100644 --- a/com/hbm/handler/guncfg/Gun22LRFactory.java +++ b/com/hbm/handler/guncfg/Gun22LRFactory.java @@ -31,6 +31,7 @@ public class Gun22LRFactory { config.durability = 3000; config.reloadSound = GunConfiguration.RSOUND_MAG; config.firingSound = "hbm:weapon.uziShoot"; + config.reloadSoundEnd = false; config.name = "IMI Uzi"; config.manufacturer = "Israel Military Industries"; diff --git a/com/hbm/handler/guncfg/Gun357MagnumFactory.java b/com/hbm/handler/guncfg/Gun357MagnumFactory.java index e268ead00..f7d48c57a 100644 --- a/com/hbm/handler/guncfg/Gun357MagnumFactory.java +++ b/com/hbm/handler/guncfg/Gun357MagnumFactory.java @@ -33,6 +33,7 @@ public class Gun357MagnumFactory { config.crosshair = Crosshair.L_CLASSIC; config.reloadSound = GunConfiguration.RSOUND_REVOLVER; config.firingSound = "hbm:weapon.revolverShoot"; + config.reloadSoundEnd = false; return config; } diff --git a/com/hbm/handler/guncfg/Gun44MagnumFactory.java b/com/hbm/handler/guncfg/Gun44MagnumFactory.java index 269659260..5d45a2ba7 100644 --- a/com/hbm/handler/guncfg/Gun44MagnumFactory.java +++ b/com/hbm/handler/guncfg/Gun44MagnumFactory.java @@ -30,6 +30,7 @@ public class Gun44MagnumFactory { config.crosshair = Crosshair.L_CLASSIC; config.reloadSound = GunConfiguration.RSOUND_REVOLVER; config.firingSound = "hbm:weapon.revolverShootAlt"; + config.reloadSoundEnd = false; return config; } @@ -47,6 +48,7 @@ public class Gun44MagnumFactory { config.config.add(BulletConfigSyncingUtil.M44_NORMAL); config.config.add(BulletConfigSyncingUtil.M44_AP); config.config.add(BulletConfigSyncingUtil.M44_DU); + config.config.add(BulletConfigSyncingUtil.M44_ROCKET); return config; } @@ -65,6 +67,7 @@ public class Gun44MagnumFactory { config.config.add(BulletConfigSyncingUtil.M44_NORMAL); config.config.add(BulletConfigSyncingUtil.M44_AP); config.config.add(BulletConfigSyncingUtil.M44_DU); + config.config.add(BulletConfigSyncingUtil.M44_ROCKET); return config; } @@ -84,6 +87,7 @@ public class Gun44MagnumFactory { config.config.add(BulletConfigSyncingUtil.M44_NORMAL); config.config.add(BulletConfigSyncingUtil.M44_AP); config.config.add(BulletConfigSyncingUtil.M44_DU); + config.config.add(BulletConfigSyncingUtil.M44_ROCKET); return config; } @@ -104,6 +108,7 @@ public class Gun44MagnumFactory { config.config.add(BulletConfigSyncingUtil.M44_DU); config.config.add(BulletConfigSyncingUtil.M44_PIP); config.config.add(BulletConfigSyncingUtil.M44_BJ); + config.config.add(BulletConfigSyncingUtil.M44_ROCKET); return config; } @@ -172,5 +177,17 @@ public class Gun44MagnumFactory { return bullet; } + + public static BulletConfiguration getRocketConfig() { + + BulletConfiguration bullet = BulletConfigFactory.standardRocketConfig(); + + bullet.ammo = ModItems.ammo_44_rocket; + bullet.velocity = 5; + bullet.explosive = 15F; + bullet.trail = 1; + + return bullet; + } } diff --git a/com/hbm/handler/guncfg/Gun50AEFactory.java b/com/hbm/handler/guncfg/Gun50AEFactory.java index c54272684..12102faa4 100644 --- a/com/hbm/handler/guncfg/Gun50AEFactory.java +++ b/com/hbm/handler/guncfg/Gun50AEFactory.java @@ -30,6 +30,7 @@ public class Gun50AEFactory { config.crosshair = Crosshair.L_CLASSIC; config.reloadSound = GunConfiguration.RSOUND_REVOLVER; config.firingSound = "hbm:weapon.revolverShootAlt"; + config.reloadSoundEnd = false; return config; } @@ -41,7 +42,7 @@ public class Gun50AEFactory { config.durability = 2500; config.name = "IMI Desert Eagle"; - config.manufacturer = " Magnum Research / Israel Military Industries"; + config.manufacturer = "Magnum Research / Israel Military Industries"; config.config = new ArrayList(); config.config.add(BulletConfigSyncingUtil.AE50_NORMAL); diff --git a/com/hbm/handler/guncfg/Gun50BMGFactory.java b/com/hbm/handler/guncfg/Gun50BMGFactory.java index 53f1a56be..71746649a 100644 --- a/com/hbm/handler/guncfg/Gun50BMGFactory.java +++ b/com/hbm/handler/guncfg/Gun50BMGFactory.java @@ -31,6 +31,7 @@ public class Gun50BMGFactory { config.durability = 2000; config.reloadSound = GunConfiguration.RSOUND_MAG; config.firingSound = "hbm:weapon.calShoot"; + config.reloadSoundEnd = false; config.name = "Maxim gun"; config.manufacturer = "Hiram Maxim"; diff --git a/com/hbm/handler/guncfg/Gun9mmFactory.java b/com/hbm/handler/guncfg/Gun9mmFactory.java index ed1b68ded..f8ed6eedd 100644 --- a/com/hbm/handler/guncfg/Gun9mmFactory.java +++ b/com/hbm/handler/guncfg/Gun9mmFactory.java @@ -31,6 +31,7 @@ public class Gun9mmFactory { config.durability = 2500; config.reloadSound = GunConfiguration.RSOUND_MAG; config.firingSound = "hbm:weapon.rifleShoot"; + config.reloadSoundEnd = false; config.name = "Maschinenpistole 40"; config.manufacturer = "Erfurter Maschinenfabrik Geipel"; @@ -39,6 +40,7 @@ public class Gun9mmFactory { config.config.add(BulletConfigSyncingUtil.P9_NORMAL); config.config.add(BulletConfigSyncingUtil.P9_AP); config.config.add(BulletConfigSyncingUtil.P9_DU); + config.config.add(BulletConfigSyncingUtil.P9_ROCKET); return config; } @@ -83,5 +85,17 @@ public class Gun9mmFactory { return bullet; } + + public static BulletConfiguration get9mmRocketConfig() { + + BulletConfiguration bullet = BulletConfigFactory.standardRocketConfig(); + + bullet.ammo = ModItems.ammo_9mm_rocket; + bullet.velocity = 5; + bullet.explosive = 7.5F; + bullet.trail = 5; + + return bullet; + } } diff --git a/com/hbm/handler/guncfg/GunFatmanFactory.java b/com/hbm/handler/guncfg/GunFatmanFactory.java new file mode 100644 index 000000000..1e3b7f8b0 --- /dev/null +++ b/com/hbm/handler/guncfg/GunFatmanFactory.java @@ -0,0 +1,114 @@ +package com.hbm.handler.guncfg; + +import java.util.ArrayList; + +import com.hbm.handler.BulletConfigSyncingUtil; +import com.hbm.handler.BulletConfiguration; +import com.hbm.handler.GunConfiguration; +import com.hbm.items.ModItems; +import com.hbm.render.misc.RenderScreenOverlay.Crosshair; + +public class GunFatmanFactory { + + public static GunConfiguration getFatmanConfig() { + + GunConfiguration config = new GunConfiguration(); + + config.rateOfFire = 20; + config.roundsPerCycle = 1; + config.gunMode = GunConfiguration.MODE_NORMAL; + config.firingMode = GunConfiguration.FIRE_MANUAL; + config.hasReloadAnim = false; + config.hasFiringAnim = false; + config.hasSpinup = false; + config.hasSpindown = false; + config.reloadDuration = 120; + config.firingDuration = 0; + config.ammoCap = 1; + config.reloadType = GunConfiguration.RELOAD_FULL; + config.allowsInfinity = true; + config.crosshair = Crosshair.L_CIRCUMFLEX; + config.firingSound = "hbm:weapon.fatmanShoot"; + config.reloadSound = GunConfiguration.RSOUND_FATMAN; + config.reloadSoundEnd = false; + + config.name = "M-42 Tactical Nuclear Catapult"; + config.manufacturer = "Fort Strong"; + + config.config = new ArrayList(); + config.config.add(BulletConfigSyncingUtil.NUKE_NORMAL); + config.durability = 1000; + + return config; + } + + public static GunConfiguration getProtoConfig() { + + GunConfiguration config = new GunConfiguration(); + + config.rateOfFire = 20; + config.roundsPerCycle = 8; + config.gunMode = GunConfiguration.MODE_NORMAL; + config.firingMode = GunConfiguration.FIRE_MANUAL; + config.hasReloadAnim = false; + config.hasFiringAnim = false; + config.hasSpinup = false; + config.hasSpindown = false; + config.reloadDuration = 120; + config.firingDuration = 0; + config.ammoCap = 8; + config.reloadType = GunConfiguration.RELOAD_FULL; + config.allowsInfinity = true; + config.crosshair = Crosshair.L_CIRCUMFLEX; + config.firingSound = "hbm:weapon.fatmanShoot"; + config.reloadSound = GunConfiguration.RSOUND_FATMAN; + config.reloadSoundEnd = false; + + config.name = "M-42 Tactical Nuclear Catapult"; + config.manufacturer = "Fort Strong"; + + config.config = new ArrayList(); + config.config.add(BulletConfigSyncingUtil.NUKE_PROTO); + config.durability = 1000; + + return config; + } + + public static BulletConfiguration getNukeConfig() { + + BulletConfiguration bullet = BulletConfigFactory.standardNukeConfig(); + + bullet.ammo = ModItems.gun_fatman_ammo; + + return bullet; + } + + public static BulletConfiguration getNukeProtoConfig() { + + BulletConfiguration bullet = BulletConfigFactory.standardNukeConfig(); + + bullet.spread = 0.1F; + bullet.ammo = ModItems.gun_fatman_ammo; + + return bullet; + } + + public static BulletConfiguration getMirvConfig() { + + BulletConfiguration bullet = BulletConfigFactory.standardNukeConfig(); + + bullet.ammo = ModItems.gun_mirv_ammo; + + return bullet; + } + + public static BulletConfiguration getBalefireConfig() { + + BulletConfiguration bullet = BulletConfigFactory.standardNukeConfig(); + + bullet.ammo = ModItems.gun_bf_ammo; + + return bullet; + } + +} diff --git a/com/hbm/handler/guncfg/GunGaussFactory.java b/com/hbm/handler/guncfg/GunGaussFactory.java new file mode 100644 index 000000000..f3a42a69b --- /dev/null +++ b/com/hbm/handler/guncfg/GunGaussFactory.java @@ -0,0 +1,84 @@ +package com.hbm.handler.guncfg; + +import java.util.ArrayList; + +import com.hbm.handler.BulletConfigSyncingUtil; +import com.hbm.handler.BulletConfiguration; +import com.hbm.handler.GunConfiguration; +import com.hbm.items.ModItems; +import com.hbm.render.misc.RenderScreenOverlay.Crosshair; + +public class GunGaussFactory { + + public static GunConfiguration getXVLConfig() { + + GunConfiguration config = new GunConfiguration(); + + config.rateOfFire = 4; + config.roundsPerCycle = 1; + config.gunMode = GunConfiguration.MODE_NORMAL; + config.firingMode = GunConfiguration.FIRE_AUTO; + config.hasReloadAnim = false; + config.hasFiringAnim = false; + config.hasSpinup = false; + config.hasSpindown = false; + config.reloadDuration = 20; + config.firingDuration = 0; + config.ammoCap = 0; + config.reloadType = GunConfiguration.RELOAD_NONE; + config.allowsInfinity = true; + config.crosshair = Crosshair.L_RAD; + config.durability = 6000; + config.firingSound = "hbm:weapon.tauShoot"; + + config.name = "XVL1456 Tau Cannon"; + config.manufacturer = "Black Mesa Research Facility"; + + config.config = new ArrayList(); + config.config.add(BulletConfigSyncingUtil.SPECIAL_GAUSS); + + return config; + } + + public static GunConfiguration getChargedConfig() { + + GunConfiguration config = new GunConfiguration(); + + config.rateOfFire = 10; + config.roundsPerCycle = 1; + config.gunMode = GunConfiguration.MODE_NORMAL; + config.firingMode = GunConfiguration.FIRE_AUTO; + config.reloadDuration = 20; + config.firingDuration = 0; + config.ammoCap = 30; + config.reloadType = GunConfiguration.RELOAD_FULL; + config.allowsInfinity = true; + config.crosshair = Crosshair.L_ARROWS; + + return config; + } + + public static BulletConfiguration getGaussConfig() { + + BulletConfiguration bullet = BulletConfigFactory.standardBulletConfig(); + + bullet.ammo = ModItems.gun_xvl1456_ammo; + bullet.dmgMin = 6; + bullet.dmgMax = 9; + bullet.trail = 1; + bullet.vPFX = "fireworksSpark"; + bullet.LBRC = 80; + bullet.HBRC = 5; + + return bullet; + } + + public static BulletConfiguration getAltConfig() { + + BulletConfiguration bullet = getGaussConfig(); + + bullet.vPFX = "reddust"; + + return bullet; + } +} diff --git a/com/hbm/handler/guncfg/GunGrenadeFactory.java b/com/hbm/handler/guncfg/GunGrenadeFactory.java index f8dceb46a..77391f9c2 100644 --- a/com/hbm/handler/guncfg/GunGrenadeFactory.java +++ b/com/hbm/handler/guncfg/GunGrenadeFactory.java @@ -31,6 +31,7 @@ public class GunGrenadeFactory { config.crosshair = Crosshair.L_CIRCUMFLEX; config.firingSound = "hbm:weapon.hkShoot"; config.reloadSound = GunConfiguration.RSOUND_GRENADE; + config.reloadSoundEnd = false; config.name = "Granatpistole HK69"; config.manufacturer = "Heckler & Koch"; diff --git a/com/hbm/handler/guncfg/GunOSIPRFactory.java b/com/hbm/handler/guncfg/GunOSIPRFactory.java new file mode 100644 index 000000000..d13053eb0 --- /dev/null +++ b/com/hbm/handler/guncfg/GunOSIPRFactory.java @@ -0,0 +1,80 @@ +package com.hbm.handler.guncfg; + +import java.util.ArrayList; + +import com.hbm.handler.BulletConfigSyncingUtil; +import com.hbm.handler.BulletConfiguration; +import com.hbm.handler.GunConfiguration; +import com.hbm.items.ModItems; +import com.hbm.render.misc.RenderScreenOverlay.Crosshair; + +public class GunOSIPRFactory { + + public static GunConfiguration getOSIPRConfig() { + + GunConfiguration config = new GunConfiguration(); + + config.rateOfFire = 2; + config.roundsPerCycle = 1; + config.gunMode = GunConfiguration.MODE_NORMAL; + config.firingMode = GunConfiguration.FIRE_AUTO; + config.hasReloadAnim = false; + config.hasFiringAnim = false; + config.hasSpinup = false; + config.hasSpindown = false; + config.reloadDuration = 20; + config.firingDuration = 0; + config.ammoCap = 30; + config.reloadType = GunConfiguration.RELOAD_FULL; + config.allowsInfinity = true; + config.crosshair = Crosshair.L_ARROWS; + config.durability = 10000; + config.reloadSound = "hbm:weapon.osiprReload"; + config.firingSound = "hbm:weapon.osiprShoot"; + config.reloadSoundEnd = false; + + config.name = "Overwatch Standard Issue Pulse Rifle"; + config.manufacturer = "The Universal Union"; + + config.config = new ArrayList(); + config.config.add(BulletConfigSyncingUtil.SPECIAL_OSIPR); + + return config; + } + + public static GunConfiguration getAltConfig() { + + GunConfiguration config = new GunConfiguration(); + + config.rateOfFire = 15; + config.roundsPerCycle = 1; + config.gunMode = GunConfiguration.MODE_NORMAL; + config.firingMode = GunConfiguration.FIRE_MANUAL; + config.hasReloadAnim = false; + config.hasFiringAnim = false; + config.hasSpinup = false; + config.hasSpindown = false; + config.reloadDuration = 20; + config.firingDuration = 0; + config.ammoCap = 1; + config.reloadType = GunConfiguration.RELOAD_NONE; + config.allowsInfinity = true; + config.firingSound = "hbm:weapon.singFlyby"; + + return config; + } + + static float inaccuracy = 5; + public static BulletConfiguration getPulseConfig() { + + BulletConfiguration bullet = BulletConfigFactory.standardBulletConfig(); + + bullet.ammo = ModItems.gun_osipr_ammo; + bullet.spread *= inaccuracy; + bullet.dmgMin = 3; + bullet.dmgMax = 5; + bullet.trail = 2; + + return bullet; + } +} diff --git a/com/hbm/handler/guncfg/GunRocketFactory.java b/com/hbm/handler/guncfg/GunRocketFactory.java index 4df2196a1..11a44c836 100644 --- a/com/hbm/handler/guncfg/GunRocketFactory.java +++ b/com/hbm/handler/guncfg/GunRocketFactory.java @@ -2,12 +2,19 @@ package com.hbm.handler.guncfg; import java.util.ArrayList; +import com.hbm.entity.projectile.EntityBulletBase; import com.hbm.handler.BulletConfigSyncingUtil; import com.hbm.handler.BulletConfiguration; import com.hbm.handler.GunConfiguration; +import com.hbm.interfaces.IBulletImpactBehavior; +import com.hbm.interfaces.IBulletRicochetBehavior; import com.hbm.items.ModItems; import com.hbm.render.misc.RenderScreenOverlay.Crosshair; +import net.minecraft.block.material.Material; +import net.minecraft.entity.Entity; +import net.minecraft.world.World; + public class GunRocketFactory { public static GunConfiguration getGustavConfig() { @@ -30,6 +37,7 @@ public class GunRocketFactory { config.crosshair = Crosshair.L_CIRCUMFLEX; config.firingSound = "hbm:weapon.rpgShoot"; config.reloadSound = GunConfiguration.RSOUND_LAUNCHER; + config.reloadSoundEnd = false; config.name = "Carl Gustav Recoilless Rifle M1"; config.manufacturer = "Saab Bofors Dynamics"; @@ -235,9 +243,21 @@ public class GunRocketFactory { bullet.gravity = 0.000D; bullet.ricochetAngle = 90; bullet.LBRC = 100; - bullet.destroysWood = true; bullet.doesPenetrate = true; + bullet.bRicochet = new IBulletRicochetBehavior() { + + public void behaveBlockRicochet(EntityBulletBase bullet, int bX, int bY, int bZ) { + World worldObj = bullet.worldObj; + if(!worldObj.isRemote && + (worldObj.getBlock(bX, bY, bZ).getMaterial() == Material.wood || + worldObj.getBlock(bX, bY, bZ).getMaterial() == Material.plants || + worldObj.getBlock(bX, bY, bZ).getMaterial() == Material.glass || + worldObj.getBlock(bX, bY, bZ).getMaterial() == Material.leaves)) + worldObj.func_147480_a(bX, bY, bZ, false);} + + }; + return bullet; } diff --git a/com/hbm/interfaces/IBulletHitBehavior.java b/com/hbm/interfaces/IBulletHitBehavior.java new file mode 100644 index 000000000..b07aab829 --- /dev/null +++ b/com/hbm/interfaces/IBulletHitBehavior.java @@ -0,0 +1,12 @@ +package com.hbm.interfaces; + +import com.hbm.entity.projectile.EntityBulletBase; + +import net.minecraft.entity.Entity; + +public interface IBulletHitBehavior { + + //entity is hit, bullet dies + public void behaveEntityHit(EntityBulletBase bullet, Entity hit); + +} diff --git a/com/hbm/interfaces/IBulletHurtBehavior.java b/com/hbm/interfaces/IBulletHurtBehavior.java new file mode 100644 index 000000000..4aa57a5a2 --- /dev/null +++ b/com/hbm/interfaces/IBulletHurtBehavior.java @@ -0,0 +1,11 @@ +package com.hbm.interfaces; + +import com.hbm.entity.projectile.EntityBulletBase; + +import net.minecraft.entity.Entity; + +public interface IBulletHurtBehavior { + + //entity is hit + public void behaveEntityHurt(EntityBulletBase bullet, Entity hit); +} diff --git a/com/hbm/interfaces/IBulletImpactBehavior.java b/com/hbm/interfaces/IBulletImpactBehavior.java new file mode 100644 index 000000000..52f68c1fd --- /dev/null +++ b/com/hbm/interfaces/IBulletImpactBehavior.java @@ -0,0 +1,12 @@ +package com.hbm.interfaces; + +import com.hbm.entity.projectile.EntityBulletBase; + +import net.minecraft.entity.Entity; + +public interface IBulletImpactBehavior { + + //block is hit, bullet dies + public void behaveBlockHit(EntityBulletBase bullet, int x, int y, int z); + +} diff --git a/com/hbm/interfaces/IBulletRicochetBehavior.java b/com/hbm/interfaces/IBulletRicochetBehavior.java new file mode 100644 index 000000000..c55c03478 --- /dev/null +++ b/com/hbm/interfaces/IBulletRicochetBehavior.java @@ -0,0 +1,12 @@ +package com.hbm.interfaces; + +import com.hbm.entity.projectile.EntityBulletBase; + +import net.minecraft.entity.Entity; + +public interface IBulletRicochetBehavior { + + //block is hit, bullet ricochets + public void behaveBlockRicochet(EntityBulletBase bullet, int x, int y, int z); + +} diff --git a/com/hbm/inventory/MachineRecipes.java b/com/hbm/inventory/MachineRecipes.java index 98a9b6537..acdd1c4f6 100644 --- a/com/hbm/inventory/MachineRecipes.java +++ b/com/hbm/inventory/MachineRecipes.java @@ -659,6 +659,9 @@ public class MachineRecipes { if(input.getItem() == ModItems.assembly_nopip) return new ItemStack(ModItems.ammo_44); + + if(input.getItem() == ModItems.ammo_rocket) + return new ItemStack(ModItems.ammo_44_rocket); } if(stamp.getItem() == ModItems.stamp_9) { @@ -671,6 +674,9 @@ public class MachineRecipes { return new ItemStack(ModItems.gun_mp_ammo); if(input.getItem() == ModItems.assembly_lacunae) return new ItemStack(ModItems.ammo_5mm); + + if(input.getItem() == ModItems.ammo_rocket) + return new ItemStack(ModItems.ammo_9mm_rocket); } if(stamp.getItem() == ModItems.stamp_50) { @@ -752,11 +758,13 @@ public class MachineRecipes { recipes.put(new Object[] { i_stamps_44, new ItemStack(ModItems.assembly_nopip) }, getPressResultNN(i_stamps_44.get(0).getItem(), ModItems.assembly_nopip)); //recipes.put(new Object[] { i_stamps_44, new ItemStack(ModItems.assembly_pip) }, getPressResultNN(i_stamps_44.get(0).getItem(), ModItems.assembly_pip)); + recipes.put(new Object[] { i_stamps_44, new ItemStack(ModItems.ammo_rocket) }, getPressResultNN(i_stamps_44.get(0).getItem(), ModItems.ammo_rocket)); recipes.put(new Object[] { i_stamps_9, new ItemStack(ModItems.assembly_smg) }, getPressResultNN(i_stamps_9.get(0).getItem(), ModItems.assembly_smg)); recipes.put(new Object[] { i_stamps_9, new ItemStack(ModItems.assembly_uzi) }, getPressResultNN(i_stamps_9.get(0).getItem(), ModItems.assembly_uzi)); recipes.put(new Object[] { i_stamps_9, new ItemStack(ModItems.assembly_lacunae) }, getPressResultNN(i_stamps_9.get(0).getItem(), ModItems.assembly_lacunae)); recipes.put(new Object[] { i_stamps_9, new ItemStack(Items.gold_ingot) }, getPressResultNN(i_stamps_9.get(0).getItem(), Items.gold_ingot)); + recipes.put(new Object[] { i_stamps_9, new ItemStack(ModItems.ammo_rocket) }, getPressResultNN(i_stamps_9.get(0).getItem(), ModItems.ammo_rocket)); recipes.put(new Object[] { i_stamps_50, new ItemStack(ModItems.assembly_actionexpress) }, getPressResultNN(i_stamps_50.get(0).getItem(), ModItems.assembly_actionexpress)); recipes.put(new Object[] { i_stamps_50, new ItemStack(ModItems.assembly_calamity) }, getPressResultNN(i_stamps_50.get(0).getItem(), ModItems.assembly_calamity)); diff --git a/com/hbm/inventory/container/ContainerSoyuzLauncher.java b/com/hbm/inventory/container/ContainerSoyuzLauncher.java new file mode 100644 index 000000000..7399af085 --- /dev/null +++ b/com/hbm/inventory/container/ContainerSoyuzLauncher.java @@ -0,0 +1,98 @@ +package com.hbm.inventory.container; + +import com.hbm.tileentity.bomb.TileEntityLaunchTable; +import com.hbm.tileentity.machine.TileEntitySoyuzLauncher; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; + +public class ContainerSoyuzLauncher extends Container { + + private TileEntitySoyuzLauncher nukeBoy; + + public ContainerSoyuzLauncher(InventoryPlayer invPlayer, TileEntitySoyuzLauncher tedf) { + + nukeBoy = tedf; + + //Soyuz + this.addSlotToContainer(new Slot(tedf, 0, 62, 18)); + //Designator + this.addSlotToContainer(new Slot(tedf, 1, 62, 36)); + //Satellite + this.addSlotToContainer(new Slot(tedf, 2, 116, 18)); + //Landing module + this.addSlotToContainer(new Slot(tedf, 3, 116, 36)); + //Kerosene IN + this.addSlotToContainer(new Slot(tedf, 4, 8, 90)); + //Kerosene OUT + this.addSlotToContainer(new Slot(tedf, 5, 8, 108)); + //Peroxide IN + this.addSlotToContainer(new Slot(tedf, 6, 26, 90)); + //Peroxide OUT + this.addSlotToContainer(new Slot(tedf, 7, 26, 108)); + //Battery + this.addSlotToContainer(new Slot(tedf, 8, 44, 108)); + + for(int i = 0; i < 3; i++) + { + for(int j = 0; j < 6; j++) + { + this.addSlotToContainer(new Slot(tedf, j + i * 6 + 9, 62 + j * 18, 72 + i * 18)); + } + } + + for(int i = 0; i < 3; i++) + { + for(int j = 0; j < 9; j++) + { + this.addSlotToContainer(new Slot(invPlayer, j + i * 9 + 9, 8 + j * 18, 84 + i * 18 + 56)); + } + } + + for(int i = 0; i < 9; i++) + { + this.addSlotToContainer(new Slot(invPlayer, i, 8 + i * 18, 142 + 56)); + } + } + + @Override + public ItemStack transferStackInSlot(EntityPlayer p_82846_1_, int par2) + { + ItemStack var3 = null; + Slot var4 = (Slot) this.inventorySlots.get(par2); + + if (var4 != null && var4.getHasStack()) + { + ItemStack var5 = var4.getStack(); + var3 = var5.copy(); + + if (par2 <= 1) { + if (!this.mergeItemStack(var5, 2, this.inventorySlots.size(), true)) + { + return null; + } + } + else if (!this.mergeItemStack(var5, 0, 1, false)) + return null; + + if (var5.stackSize == 0) + { + var4.putStack((ItemStack) null); + } + else + { + var4.onSlotChanged(); + } + } + + return var3; + } + + @Override + public boolean canInteractWith(EntityPlayer player) { + return nukeBoy.isUseableByPlayer(player); + } +} diff --git a/com/hbm/inventory/gui/GUIMachineLaunchTable.java b/com/hbm/inventory/gui/GUIMachineLaunchTable.java index ab8552a4b..7d5321b62 100644 --- a/com/hbm/inventory/gui/GUIMachineLaunchTable.java +++ b/com/hbm/inventory/gui/GUIMachineLaunchTable.java @@ -47,7 +47,7 @@ public class GUIMachineLaunchTable extends GuiInfoContainer { this.drawCustomInfo(this, mouseX, mouseY, guiLeft + 25, guiTop + 98, 18, 18, new String[] { "Size 15 & 15/20" }); this.drawCustomInfo(this, mouseX, mouseY, guiLeft + 43, guiTop + 98, 18, 18, new String[] { "Size 20" }); - String[] text = new String[] { "Acepts custom missiles", "of all sizes, as long as the", "correct size setting is selected." }; + String[] text = new String[] { "Accepts custom missiles", "of all sizes, as long as the", "correct size setting is selected." }; this.drawCustomInfoStat(mouseX, mouseY, guiLeft - 16, guiTop + 36, 16, 16, guiLeft - 8, guiTop + 36 + 16, text); String[] text1 = new String[] { "Detonator can only trigger center block." }; diff --git a/com/hbm/inventory/gui/GUISoyuzLauncher.java b/com/hbm/inventory/gui/GUISoyuzLauncher.java new file mode 100644 index 000000000..24e67ae7c --- /dev/null +++ b/com/hbm/inventory/gui/GUISoyuzLauncher.java @@ -0,0 +1,92 @@ +package com.hbm.inventory.gui; + +import org.lwjgl.opengl.GL11; + +import com.hbm.inventory.FluidTank; +import com.hbm.inventory.container.ContainerSoyuzLauncher; +import com.hbm.items.weapon.ItemCustomMissile; +import com.hbm.items.weapon.ItemMissile.PartSize; +import com.hbm.lib.RefStrings; +import com.hbm.packet.AuxButtonPacket; +import com.hbm.packet.PacketDispatcher; +import com.hbm.render.misc.MissileMultipart; +import com.hbm.render.misc.MissilePronter; +import com.hbm.tileentity.machine.TileEntitySoyuzLauncher; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.audio.PositionedSoundRecord; +import net.minecraft.client.resources.I18n; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.item.ItemStack; +import net.minecraft.util.ResourceLocation; + +public class GUISoyuzLauncher extends GuiInfoContainer { + + private static ResourceLocation texture = new ResourceLocation(RefStrings.MODID + ":textures/gui/gui_soyuz.png"); + private TileEntitySoyuzLauncher launcher; + + public GUISoyuzLauncher(InventoryPlayer invPlayer, TileEntitySoyuzLauncher tedf) { + super(new ContainerSoyuzLauncher(invPlayer, tedf)); + launcher = tedf; + + this.xSize = 176; + this.ySize = 222; + } + + @Override + public void drawScreen(int mouseX, int mouseY, float f) { + super.drawScreen(mouseX, mouseY, f); + + /*launcher.tanks[0].renderTankInfo(this, mouseX, mouseY, guiLeft + 116, guiTop + 88 - 52, 16, 52); + launcher.tanks[1].renderTankInfo(this, mouseX, mouseY, guiLeft + 134, guiTop + 88 - 52, 16, 52); + this.drawCustomInfo(this, mouseX, mouseY, guiLeft + 152, guiTop + 88 - 52, 16, 52, new String[] { "Solid Fuel: " + launcher.solid + "l" }); + this.drawElectricityInfo(this, mouseX, mouseY, guiLeft + 134, guiTop + 113, 34, 6, launcher.power, launcher.maxPower); + this.drawCustomInfo(this, mouseX, mouseY, guiLeft + 7, guiTop + 98, 18, 18, new String[] { "Size 10 & 10/15" }); + this.drawCustomInfo(this, mouseX, mouseY, guiLeft + 25, guiTop + 98, 18, 18, new String[] { "Size 15 & 15/20" }); + this.drawCustomInfo(this, mouseX, mouseY, guiLeft + 43, guiTop + 98, 18, 18, new String[] { "Size 20" }); + + String[] text = new String[] { "Acepts custom missiles", "of all sizes, as long as the", "correct size setting is selected." }; + this.drawCustomInfoStat(mouseX, mouseY, guiLeft - 16, guiTop + 36, 16, 16, guiLeft - 8, guiTop + 36 + 16, text); + + String[] text1 = new String[] { "Detonator can only trigger center block." }; + this.drawCustomInfoStat(mouseX, mouseY, guiLeft - 16, guiTop + 36 + 16, 16, 16, guiLeft - 8, guiTop + 36 + 16, text1);*/ + } + + protected void mouseClicked(int x, int y, int i) { + super.mouseClicked(x, y, i); + + /*if(guiLeft + 7 <= x && guiLeft + 7 + 18 > x && guiTop + 98 < y && guiTop + 98 + 18 >= y) { + + mc.getSoundHandler().playSound(PositionedSoundRecord.func_147674_a(new ResourceLocation("gui.button.press"), 1.0F)); + PacketDispatcher.wrapper.sendToServer(new AuxButtonPacket(launcher.xCoord, launcher.yCoord, launcher.zCoord, PartSize.SIZE_10.ordinal(), 0)); + } + + if(guiLeft + 25 <= x && guiLeft + 25 + 18 > x && guiTop + 98 < y && guiTop + 98 + 18 >= y) { + + mc.getSoundHandler().playSound(PositionedSoundRecord.func_147674_a(new ResourceLocation("gui.button.press"), 1.0F)); + PacketDispatcher.wrapper.sendToServer(new AuxButtonPacket(launcher.xCoord, launcher.yCoord, launcher.zCoord, PartSize.SIZE_15.ordinal(), 0)); + } + + if(guiLeft + 43 <= x && guiLeft + 43 + 18 > x && guiTop + 98 < y && guiTop + 98 + 18 >= y) { + + mc.getSoundHandler().playSound(PositionedSoundRecord.func_147674_a(new ResourceLocation("gui.button.press"), 1.0F)); + PacketDispatcher.wrapper.sendToServer(new AuxButtonPacket(launcher.xCoord, launcher.yCoord, launcher.zCoord, PartSize.SIZE_20.ordinal(), 0)); + }*/ + } + + @Override + protected void drawGuiContainerForegroundLayer( int i, int j) { + String name = this.launcher.hasCustomInventoryName() ? this.launcher.getInventoryName() : I18n.format(this.launcher.getInventoryName()); + + this.fontRendererObj.drawString(name, this.xSize / 2 - this.fontRendererObj.getStringWidth(name) / 2, 6, 4210752); + this.fontRendererObj.drawString(I18n.format("container.inventory"), 8, this.ySize - 96 + 2, 4210752); + } + + @Override + protected void drawGuiContainerBackgroundLayer(float p_146976_1_, int p_146976_2_, int p_146976_3_) { + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + Minecraft.getMinecraft().getTextureManager().bindTexture(texture); + drawTexturedModalRect(guiLeft, guiTop, 0, 0, xSize, ySize); + } +} diff --git a/com/hbm/items/ModItems.java b/com/hbm/items/ModItems.java index e8354b14a..8c1b2bcf8 100644 --- a/com/hbm/items/ModItems.java +++ b/com/hbm/items/ModItems.java @@ -11,7 +11,10 @@ import com.hbm.handler.guncfg.Gun50AEFactory; import com.hbm.handler.guncfg.Gun50BMGFactory; import com.hbm.handler.guncfg.Gun5mmFactory; import com.hbm.handler.guncfg.Gun9mmFactory; +import com.hbm.handler.guncfg.GunFatmanFactory; +import com.hbm.handler.guncfg.GunGaussFactory; import com.hbm.handler.guncfg.GunGrenadeFactory; +import com.hbm.handler.guncfg.GunOSIPRFactory; import com.hbm.handler.guncfg.GunRocketFactory; import com.hbm.items.bomb.*; import com.hbm.items.food.*; @@ -1046,12 +1049,14 @@ public class ModItems { public static Item ammo_44_du; public static Item ammo_44_pip; public static Item ammo_44_bj; + public static Item ammo_44_rocket; public static Item ammo_5mm; public static Item ammo_5mm_explosive; public static Item ammo_5mm_du; public static Item ammo_9mm; public static Item ammo_9mm_ap; public static Item ammo_9mm_du; + public static Item ammo_9mm_rocket; public static Item ammo_22lr; public static Item ammo_22lr_ap; public static Item ammo_50ae; @@ -2729,6 +2734,7 @@ public class ModItems { ammo_9mm = new ItemAmmo().setUnlocalizedName("ammo_9mm").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":ammo_9mm"); ammo_9mm_ap = new ItemAmmo().setUnlocalizedName("ammo_9mm_ap").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":ammo_9mm_ap"); ammo_9mm_du = new ItemAmmo().setUnlocalizedName("ammo_9mm_du").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":ammo_9mm_du"); + ammo_9mm_rocket = new ItemAmmo().setUnlocalizedName("ammo_9mm_rocket").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":ammo_9mm_rocket"); ammo_50ae = new ItemAmmo().setUnlocalizedName("ammo_50ae").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":ammo_50ae"); ammo_50ae_ap = new ItemAmmo().setUnlocalizedName("ammo_50ae_ap").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":ammo_50ae_ap"); ammo_50ae_du = new ItemAmmo().setUnlocalizedName("ammo_50ae_du").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":ammo_50ae_du"); @@ -2742,6 +2748,7 @@ public class ModItems { ammo_44_du = new ItemAmmo().setUnlocalizedName("ammo_44_du").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":ammo_44_du"); ammo_44_pip = new ItemAmmo().setUnlocalizedName("ammo_44_pip").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":ammo_44_pip"); ammo_44_bj = new ItemAmmo().setUnlocalizedName("ammo_44_bj").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":ammo_44_bj"); + ammo_44_rocket = new ItemAmmo().setUnlocalizedName("ammo_44_rocket").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":ammo_44_rocket"); ammo_22lr = new ItemAmmo().setUnlocalizedName("ammo_22lr").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":ammo_22lr"); ammo_22lr_ap = new ItemAmmo().setUnlocalizedName("ammo_22lr_ap").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":ammo_22lr_ap"); ammo_folly = new ItemAmmo().setUnlocalizedName("ammo_folly").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":ammo_folly"); @@ -2808,12 +2815,12 @@ public class ModItems { gun_lacunae = new ItemGunBase(Gun5mmFactory.getLacunaeConfig()).setUnlocalizedName("gun_lacunae").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":gun_lacunae"); gun_folly = new GunFolly().setUnlocalizedName("gun_folly").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":gun_folly"); gun_fatman_ammo = new Item().setUnlocalizedName("gun_fatman_ammo").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":gun_fatman_ammo"); - gun_fatman = new GunFatman().setMaxDamage(2500).setUnlocalizedName("gun_fatman").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":gun_fatman"); - gun_proto = new GunProtoMirv().setMaxDamage(2500).setUnlocalizedName("gun_proto").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":gun_fatman"); + gun_fatman = new ItemGunBase(GunFatmanFactory.getFatmanConfig()).setUnlocalizedName("gun_fatman").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":gun_fatman"); + gun_proto = new ItemGunBase(GunFatmanFactory.getProtoConfig()).setUnlocalizedName("gun_proto").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":gun_fatman"); gun_mirv_ammo = new Item().setUnlocalizedName("gun_mirv_ammo").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":gun_mirv_ammo"); - gun_mirv = new GunMIRV().setMaxDamage(2500).setUnlocalizedName("gun_mirv").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":gun_mirv"); + gun_mirv = new ItemGunBase(GunFatmanFactory.getFatmanConfig()).setUnlocalizedName("gun_mirv").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":gun_mirv"); gun_bf_ammo = new Item().setUnlocalizedName("gun_bf_ammo").setCreativeTab(null).setTextureName(RefStrings.MODID + ":gun_bf_ammo"); - gun_bf = new GunBaleFlare().setMaxDamage(2500).setUnlocalizedName("gun_bf").setCreativeTab(null).setTextureName(RefStrings.MODID + ":gun_bf"); + gun_bf = new ItemGunBase(GunFatmanFactory.getFatmanConfig()).setUnlocalizedName("gun_bf").setCreativeTab(null).setTextureName(RefStrings.MODID + ":gun_bf"); gun_mp40_ammo = new Item().setUnlocalizedName("gun_mp40_ammo").setCreativeTab(null).setTextureName(RefStrings.MODID + ":gun_mp40_ammo"); gun_mp40 = new ItemGunBase(Gun9mmFactory.getMP40Config()).setUnlocalizedName("gun_mp40").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":gun_mp40"); gun_uzi_ammo = new Item().setUnlocalizedName("gun_uzi_ammo").setCreativeTab(null).setTextureName(RefStrings.MODID + ":gun_uzi_ammo"); @@ -2830,15 +2837,15 @@ public class ModItems { gun_bolt_action_ammo = new Item().setUnlocalizedName("gun_bolt_action_ammo").setCreativeTab(null).setTextureName(RefStrings.MODID + ":gun_bolt_action_ammo"); gun_bolt_action = new ItemGunBase(Gun20GaugeFactory.getBoltConfig()).setUnlocalizedName("gun_bolt_action").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":gun_bolt_action"); gun_bolt_action_green = new ItemGunBase(Gun20GaugeFactory.getBoltGreenConfig()).setUnlocalizedName("gun_bolt_action_green").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":gun_bolt_action_green"); - gun_bolt_action_saturnite = new GunBoltAction().setUnlocalizedName("gun_bolt_action_saturnite").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":gun_bolt_action_saturnite"); + gun_bolt_action_saturnite = new ItemGunBase(Gun20GaugeFactory.getBoltSaturniteConfig()).setUnlocalizedName("gun_bolt_action_saturnite").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":gun_bolt_action_saturnite"); gun_b92_ammo = new GunB92Cell().setUnlocalizedName("gun_b92_ammo").setMaxStackSize(1).setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":gun_b92_ammo_alt"); gun_b92 = new GunB92().setUnlocalizedName("gun_b92").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":gun_b92"); gun_b93 = new GunB93().setUnlocalizedName("gun_b93").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":gun_b93"); gun_xvl1456_ammo = new Item().setUnlocalizedName("gun_xvl1456_ammo").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":gun_xvl1456_ammo"); - gun_xvl1456 = new GunXVL1456().setUnlocalizedName("gun_xvl1456").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":gun_xvl1456"); + gun_xvl1456 = new ItemGunGauss(GunGaussFactory.getXVLConfig(), GunGaussFactory.getChargedConfig()).setUnlocalizedName("gun_xvl1456").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":gun_xvl1456"); gun_osipr_ammo = new Item().setUnlocalizedName("gun_osipr_ammo").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":gun_osipr_ammo"); gun_osipr_ammo2 = new Item().setUnlocalizedName("gun_osipr_ammo2").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":gun_osipr_ammo2"); - gun_osipr = new GunOSIPR().setUnlocalizedName("gun_osipr").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":gun_osipr"); + gun_osipr = new ItemGunOSIPR(GunOSIPRFactory.getOSIPRConfig(), GunOSIPRFactory.getAltConfig()).setUnlocalizedName("gun_osipr").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":gun_osipr"); gun_immolator_ammo = new Item().setUnlocalizedName("gun_immolator_ammo").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":gun_immolator_ammo"); gun_immolator = new GunImmolator().setUnlocalizedName("gun_immolator").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":gun_immolator"); gun_cryolator_ammo = new Item().setUnlocalizedName("gun_cryolator_ammo").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":gun_cryolator_ammo"); @@ -4670,12 +4677,14 @@ public class ModItems { GameRegistry.registerItem(ammo_44_du, ammo_44_du.getUnlocalizedName()); GameRegistry.registerItem(ammo_44_pip, ammo_44_pip.getUnlocalizedName()); GameRegistry.registerItem(ammo_44_bj, ammo_44_bj.getUnlocalizedName()); + GameRegistry.registerItem(ammo_44_rocket, ammo_44_rocket.getUnlocalizedName()); GameRegistry.registerItem(ammo_5mm, ammo_5mm.getUnlocalizedName()); GameRegistry.registerItem(ammo_5mm_explosive, ammo_5mm_explosive.getUnlocalizedName()); GameRegistry.registerItem(ammo_5mm_du, ammo_5mm_du.getUnlocalizedName()); GameRegistry.registerItem(ammo_9mm, ammo_9mm.getUnlocalizedName()); GameRegistry.registerItem(ammo_9mm_ap, ammo_9mm_ap.getUnlocalizedName()); GameRegistry.registerItem(ammo_9mm_du, ammo_9mm_du.getUnlocalizedName()); + GameRegistry.registerItem(ammo_9mm_rocket, ammo_9mm_rocket.getUnlocalizedName()); GameRegistry.registerItem(ammo_22lr, ammo_22lr.getUnlocalizedName()); GameRegistry.registerItem(ammo_22lr_ap, ammo_22lr_ap.getUnlocalizedName()); GameRegistry.registerItem(ammo_50ae, ammo_50ae.getUnlocalizedName()); diff --git a/com/hbm/items/weapon/ItemAmmo.java b/com/hbm/items/weapon/ItemAmmo.java index 51f6656c2..64c64efb0 100644 --- a/com/hbm/items/weapon/ItemAmmo.java +++ b/com/hbm/items/weapon/ItemAmmo.java @@ -83,6 +83,10 @@ public class ItemAmmo extends Item { list.add(EnumChatFormatting.BLUE + "+ Boat"); list.add(EnumChatFormatting.RED + "- Highly decreased damage"); } + if(this == ModItems.ammo_44_rocket) { + list.add(EnumChatFormatting.BLUE + "+ Rocket"); + list.add(EnumChatFormatting.YELLOW + "* Uhhhh"); + } //5mm if(this == ModItems.ammo_5mm_explosive) { @@ -106,6 +110,10 @@ public class ItemAmmo extends Item { list.add(EnumChatFormatting.YELLOW + "* Heavy metal"); list.add(EnumChatFormatting.RED + "- Highly increased wear"); } + if(this == ModItems.ammo_9mm_rocket) { + list.add(EnumChatFormatting.BLUE + "+ Rocket"); + list.add(EnumChatFormatting.YELLOW + "* Uhhhh"); + } //.22LR if(this == ModItems.ammo_22lr_ap) { @@ -129,6 +137,17 @@ public class ItemAmmo extends Item { list.add(EnumChatFormatting.RED + "- Highly increased wear"); } + //.50 AE + if(this == ModItems.ammo_50ae_ap) { + list.add(EnumChatFormatting.BLUE + "+ Increased damage"); + list.add(EnumChatFormatting.RED + "- Increased wear"); + } + if(this == ModItems.ammo_50ae_du) { + list.add(EnumChatFormatting.BLUE + "+ Highly increased damage"); + list.add(EnumChatFormatting.YELLOW + "* Heavy metal"); + list.add(EnumChatFormatting.RED + "- Highly increased wear"); + } + //84mm ROCKETS if(this == ModItems.ammo_rocket_he) { list.add(EnumChatFormatting.BLUE + "+ Increased blast radius"); diff --git a/com/hbm/items/weapon/ItemGunBase.java b/com/hbm/items/weapon/ItemGunBase.java index fad7de87b..79e6800f9 100644 --- a/com/hbm/items/weapon/ItemGunBase.java +++ b/com/hbm/items/weapon/ItemGunBase.java @@ -61,6 +61,9 @@ public class ItemGunBase extends Item implements IHoldableWeapon { // return; if(entity instanceof EntityPlayer) { + + isCurrentItem = ((EntityPlayer)entity).getHeldItem() == stack; + if (FMLCommonHandler.instance().getEffectiveSide() == Side.CLIENT && world.isRemote) { updateClient(stack, world, (EntityPlayer)entity, slot, isCurrentItem); } else if(isCurrentItem) { @@ -71,7 +74,7 @@ public class ItemGunBase extends Item implements IHoldableWeapon { } @SideOnly(Side.CLIENT) - private void updateClient(ItemStack stack, World world, EntityPlayer entity, int slot, boolean isCurrentItem) { + protected void updateClient(ItemStack stack, World world, EntityPlayer entity, int slot, boolean isCurrentItem) { boolean clickLeft = Mouse.isButtonDown(0); boolean clickRight = Mouse.isButtonDown(1); @@ -88,6 +91,7 @@ public class ItemGunBase extends Item implements IHoldableWeapon { m2 = false; } + /// HANDLED IN MODEVENTHANDLERCLIENT.JAVA /// /*if(!left && !right) { if(clickLeft) { PacketDispatcher.wrapper.sendToServer(new GunButtonPacket(true, (byte) 0)); @@ -104,12 +108,14 @@ public class ItemGunBase extends Item implements IHoldableWeapon { PacketDispatcher.wrapper.sendToServer(new GunButtonPacket(false, (byte) 0)); //setIsMouseDown(stack, false); m1 = false; + endActionClient(stack, world, entity, true); } if(right && !clickRight) { PacketDispatcher.wrapper.sendToServer(new GunButtonPacket(false, (byte) 1)); //setIsAltDown(stack, false); m2 = false; + endActionClient(stack, world, entity, false); } if(mainConfig.reloadType != mainConfig.RELOAD_NONE || (altConfig != null && altConfig.reloadType != 0)) { @@ -125,15 +131,17 @@ public class ItemGunBase extends Item implements IHoldableWeapon { if(left) { PacketDispatcher.wrapper.sendToServer(new GunButtonPacket(false, (byte) 0)); m1 = false; + endActionClient(stack, world, entity, true); } if(right) { PacketDispatcher.wrapper.sendToServer(new GunButtonPacket(false, (byte) 1)); m2 = false; + endActionClient(stack, world, entity, false); } } } - private void updateServer(ItemStack stack, World world, EntityPlayer player, int slot, boolean isCurrentItem) { + protected void updateServer(ItemStack stack, World world, EntityPlayer player, int slot, boolean isCurrentItem) { if(getDelay(stack) > 0 && isCurrentItem) setDelay(stack, getDelay(stack) - 1); @@ -147,14 +155,14 @@ public class ItemGunBase extends Item implements IHoldableWeapon { } if(getIsReloading(stack) && isCurrentItem) { - reload(stack, world, player); + reload2(stack, world, player); } } - //tries to shoot, bullet checks are done here - private boolean tryShoot(ItemStack stack, World world, EntityPlayer player, boolean main) { + //whether or not the gun can shoot in its current state + protected boolean tryShoot(ItemStack stack, World world, EntityPlayer player, boolean main) { - if(getDelay(stack) == 0 && !getIsReloading(stack) && getItemWear(stack) < mainConfig.durability) { + if(main && getDelay(stack) == 0 && !getIsReloading(stack) && getItemWear(stack) < mainConfig.durability) { if(mainConfig.reloadType == mainConfig.RELOAD_NONE) { return getBeltSize(player, getBeltType(player, stack)) > 0; @@ -164,11 +172,17 @@ public class ItemGunBase extends Item implements IHoldableWeapon { } } + if(!main && getDelay(stack) == 0 && !getIsReloading(stack) && getItemWear(stack) < mainConfig.durability) { + + //no extra conditions, alt fire has to be handled by every weapon individually in the altFire() method + return true; + } + return false; } - //called every time the gun shoots, overridden to change bullet entity/special additions - private void fire(ItemStack stack, World world, EntityPlayer player) { + //called every time the gun shoots successfully, calls spawnProjectile(), sets item wear + protected void fire(ItemStack stack, World world, EntityPlayer player) { BulletConfiguration config = null; @@ -191,34 +205,47 @@ public class ItemGunBase extends Item implements IHoldableWeapon { setItemWear(stack, getItemWear(stack) + config.wear); } world.playSoundAtEntity(player, mainConfig.firingSound, 1.0F, mainConfig.firingPitch); - - //player.inventory.addItemStackToInventory(new ItemStack(ModItems.gun_revolver_gold_ammo)); } - private void spawnProjectile(World world, EntityPlayer player, ItemStack stack, int config) { + //unlike fire(), being called does not automatically imply success, some things may still have to be handled before spawning the projectile + protected void altFire(ItemStack stack, World world, EntityPlayer player) { + + if(!altConfig.firingSound.isEmpty()) + world.playSoundAtEntity(player, altConfig.firingSound, 1.0F, altConfig.firingPitch); + } + + //spawns the actual projectile, can be overridden to change projectile entity + protected void spawnProjectile(World world, EntityPlayer player, ItemStack stack, int config) { EntityBulletBase bullet = new EntityBulletBase(world, config, player); world.spawnEntityInWorld(bullet); } - //called on click (server side, called by mouse packet) + //called on click (server side, called by mouse packet) for semi-automatics and specific events public void startAction(ItemStack stack, World world, EntityPlayer player, boolean main) { - if(mainConfig.firingMode == mainConfig.FIRE_MANUAL && getIsMouseDown(stack) && tryShoot(stack, world, player, main)) { + if(mainConfig.firingMode == mainConfig.FIRE_MANUAL && main && tryShoot(stack, world, player, main)) { fire(stack, world, player); setDelay(stack, mainConfig.rateOfFire); //setMag(stack, getMag(stack) - 1); useUpAmmo(player, stack); } + + if(!main && altConfig != null) + altFire(stack, world, player); } - //called on click release - public void endAction(ItemStack stack, World world, EntityPlayer player, boolean main) { - - } + //called on click (client side, called by update cylce) + public void startActionClient(ItemStack stack, World world, EntityPlayer player, boolean main) { } + + //called on click release (server side, called by mouse packet) for release actions like charged shots + public void endAction(ItemStack stack, World world, EntityPlayer player, boolean main) { } + + //called on click release (client side, called by update cylce) + public void endActionClient(ItemStack stack, World world, EntityPlayer player, boolean main) { } //reload action, if existent - private void reload(ItemStack stack, World world, EntityPlayer player) { + protected void reload(ItemStack stack, World world, EntityPlayer player) { if(getReloadCycle(stack) < 0 && stack == player.getHeldItem()) { @@ -227,6 +254,7 @@ public class ItemGunBase extends Item implements IHoldableWeapon { Item ammo = BulletConfigSyncingUtil.pullConfig(mainConfig.config.get(getMagType(stack))).ammo; + //how many bullets to load int count = 1; if(mainConfig.reloadType == 1) { @@ -275,7 +303,6 @@ public class ItemGunBase extends Item implements IHoldableWeapon { setMagType(stack, mainConfig.config.indexOf(config)); break; } - setIsReloading(stack, false); } //load new type if bullets are present @@ -322,6 +349,108 @@ public class ItemGunBase extends Item implements IHoldableWeapon { } } + //martin 2 reload algorithm + //now with less WET and more DRY + //compact, readable and most importantly, FUNCTIONAL + protected void reload2(ItemStack stack, World world, EntityPlayer player) { + + if(getReloadCycle(stack) < 0) { + + if(getMag(stack) == 0) + resetAmmoType(stack, world, player); + + + int count = 1; + + if(mainConfig.reloadType == mainConfig.RELOAD_FULL) { + + count = mainConfig.ammoCap - getMag(stack); + } + + boolean hasLoaded = false; + Item ammo = BulletConfigSyncingUtil.pullConfig(mainConfig.config.get(getMagType(stack))).ammo; + + for(int i = 0; i < count; i++) { + + if(player.inventory.hasItem(ammo)) { + player.inventory.consumeInventoryItem(ammo); + setMag(stack, getMag(stack) + 1); + hasLoaded = true; + } else { + setIsReloading(stack, false); + break; + } + } + + if(getMag(stack) == mainConfig.ammoCap) { + setIsReloading(stack, false); + } else { + resetReloadCycle(stack); + } + + if(hasLoaded && mainConfig.reloadSoundEnd) + world.playSoundAtEntity(player, mainConfig.reloadSound, 1.0F, 1.0F); + + } else { + setReloadCycle(stack, getReloadCycle(stack) - 1); + } + + if(stack != player.getHeldItem()) { + setReloadCycle(stack, 0); + setIsReloading(stack, false); + } + } + + //initiates a reload + public void startReloadAction(ItemStack stack, World world, EntityPlayer player) { + + if(getIsReloading(stack)) + return; + + if(!mainConfig.reloadSoundEnd) + world.playSoundAtEntity(player, mainConfig.reloadSound, 1.0F, 1.0F); + + setIsReloading(stack, true); + resetReloadCycle(stack); + } + + public boolean canReload(ItemStack stack, World world, EntityPlayer player) { + + if(getMag(stack) == 0) { + + for(Integer config : mainConfig.config) { + + BulletConfiguration cfg = BulletConfigSyncingUtil.pullConfig(config); + + if(player.inventory.hasItem(cfg.ammo)) { + return true; + } + } + + } else { + + Item ammo = BulletConfigSyncingUtil.pullConfig(mainConfig.config.get(getMagType(stack))).ammo; + if(player.inventory.hasItem(ammo)) + return true; + } + + return false; + } + + //searches the player's inv for next fitting ammo type and changes the gun's mag + protected void resetAmmoType(ItemStack stack, World world, EntityPlayer player) { + + for(Integer config : mainConfig.config) { + + BulletConfiguration cfg = BulletConfigSyncingUtil.pullConfig(config); + + if(player.inventory.hasItem(cfg.ammo)) { + setMagType(stack, mainConfig.config.indexOf(config)); + break; + } + } + } + //item mouseover text @Override public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean bool) { @@ -357,6 +486,7 @@ public class ItemGunBase extends Item implements IHoldableWeapon { } } + //returns ammo item of belt-weapons public static Item getBeltType(EntityPlayer player, ItemStack stack) { ItemGunBase gun = (ItemGunBase)stack.getItem(); @@ -375,6 +505,7 @@ public class ItemGunBase extends Item implements IHoldableWeapon { return ammo; } + //returns BCFG of belt-weapons public static BulletConfiguration getBeltCfg(EntityPlayer player, ItemStack stack) { ItemGunBase gun = (ItemGunBase)stack.getItem(); @@ -391,7 +522,8 @@ public class ItemGunBase extends Item implements IHoldableWeapon { return BulletConfigSyncingUtil.pullConfig(gun.mainConfig.config.get(0)); } - + + //returns ammo capacity of belt-weapons for current ammo public static int getBeltSize(EntityPlayer player, Item ammo) { int amount = 0; @@ -404,6 +536,7 @@ public class ItemGunBase extends Item implements IHoldableWeapon { return amount; } + //reduces ammo count for mag and belt-based weapons, should be called AFTER firing public void useUpAmmo(EntityPlayer player, ItemStack stack) { if(mainConfig.allowsInfinity && EnchantmentHelper.getEnchantmentLevel(Enchantment.infinity.effectId, stack) > 0) @@ -514,7 +647,7 @@ public class ItemGunBase extends Item implements IHoldableWeapon { } /// NBT utility /// - private static void writeNBT(ItemStack stack, String key, int value) { + protected static void writeNBT(ItemStack stack, String key, int value) { if(!stack.hasTagCompound()) stack.stackTagCompound = new NBTTagCompound(); @@ -522,7 +655,7 @@ public class ItemGunBase extends Item implements IHoldableWeapon { stack.stackTagCompound.setInteger(key, value); } - private static int readNBT(ItemStack stack, String key) { + protected static int readNBT(ItemStack stack, String key) { if(!stack.hasTagCompound()) return 0; diff --git a/com/hbm/items/weapon/ItemGunGauss.java b/com/hbm/items/weapon/ItemGunGauss.java new file mode 100644 index 000000000..b6e2e5d67 --- /dev/null +++ b/com/hbm/items/weapon/ItemGunGauss.java @@ -0,0 +1,124 @@ +package com.hbm.items.weapon; + +import java.util.List; + +import org.lwjgl.input.Keyboard; +import org.lwjgl.input.Mouse; + +import com.hbm.entity.projectile.EntityBulletBase; +import com.hbm.entity.projectile.EntityCombineBall; +import com.hbm.handler.BulletConfigSyncingUtil; +import com.hbm.handler.BulletConfiguration; +import com.hbm.handler.GunConfiguration; +import com.hbm.interfaces.IHoldableWeapon; +import com.hbm.items.ModItems; +import com.hbm.main.MainRegistry; +import com.hbm.packet.GunButtonPacket; +import com.hbm.packet.PacketDispatcher; +import com.hbm.render.misc.RenderScreenOverlay.Crosshair; +import com.hbm.sound.AudioWrapper; + +import cpw.mods.fml.common.FMLCommonHandler; +import cpw.mods.fml.common.eventhandler.SubscribeEvent; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.client.Minecraft; +import net.minecraft.client.entity.EntityClientPlayerMP; +import net.minecraft.client.resources.I18n; +import net.minecraft.enchantment.Enchantment; +import net.minecraft.enchantment.EnchantmentHelper; +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.world.World; +import net.minecraftforge.client.event.MouseEvent; + +public class ItemGunGauss extends ItemGunBase { + + private AudioWrapper chargeLoop; + + public ItemGunGauss(GunConfiguration config, GunConfiguration alt) { + super(config, alt); + } + + public void endAction(ItemStack stack, World world, EntityPlayer player, boolean main) { + + if(getHasShot(stack)) { + world.playSoundAtEntity(player, "hbm:weapon.sparkShoot", 1.0F, 1.0F); + setHasShot(stack, false); + } + } + + public void endActionClient(ItemStack stack, World world, EntityPlayer player, boolean main) { + + if(chargeLoop != null) { + chargeLoop.stopSound(); + chargeLoop = null; + } + //setCharge(stack, 0); + } + + @Override + public void startActionClient(ItemStack stack, World world, EntityPlayer player, boolean main) { + + if(!main) { + setCharge(stack, 1); + chargeLoop = MainRegistry.proxy.getLoopedSound("hbm:weapon.tauChargeLoop2", (float)player.posX, (float)player.posY, (float)player.posZ, 1.0F, 0.75F); + world.playSoundAtEntity(player, "hbm:weapon.tauChargeLoop2", 1.0F, 0.75F); + + if(chargeLoop != null) { + chargeLoop.startSound(); + } + } + } + + protected void updateClient(ItemStack stack, World world, EntityPlayer player, int slot, boolean isCurrentItem) { + super.updateClient(stack, world, player, slot, isCurrentItem); + + /*if(!isCurrentItem) { + setCharge(stack, 0); + if(chargeLoop != null) { + chargeLoop.stopSound(); + chargeLoop = null; + } + return; + }*/ + + int c = getCharge(stack); + + if(c > 0) { + setCharge(stack, c + 1); + System.out.println(c); + } + + if(chargeLoop != null) { + chargeLoop.updatePosition((float)player.posX, (float)player.posY, (float)player.posZ); + chargeLoop.updatePitch(1.0F); + } + } + + protected void spawnProjectile(World world, EntityPlayer player, ItemStack stack, int config) { + + super.spawnProjectile(world, player, stack, config); + setHasShot(stack, true); + } + + public static void setHasShot(ItemStack stack, boolean b) { + writeNBT(stack, "hasShot", b ? 1 : 0); + } + + public static boolean getHasShot(ItemStack stack) { + return readNBT(stack, "hasShot") == 1; + } + + /// gauss charge state /// + public static void setCharge(ItemStack stack, int i) { + writeNBT(stack, "gauss_charge", i); + } + + public static int getCharge(ItemStack stack) { + return readNBT(stack, "gauss_charge"); + } +} diff --git a/com/hbm/items/weapon/ItemGunOSIPR.java b/com/hbm/items/weapon/ItemGunOSIPR.java new file mode 100644 index 000000000..ecdfdbf08 --- /dev/null +++ b/com/hbm/items/weapon/ItemGunOSIPR.java @@ -0,0 +1,88 @@ +package com.hbm.items.weapon; + +import java.util.List; + +import org.lwjgl.input.Keyboard; +import org.lwjgl.input.Mouse; + +import com.hbm.entity.projectile.EntityBulletBase; +import com.hbm.entity.projectile.EntityCombineBall; +import com.hbm.handler.BulletConfigSyncingUtil; +import com.hbm.handler.BulletConfiguration; +import com.hbm.handler.GunConfiguration; +import com.hbm.interfaces.IHoldableWeapon; +import com.hbm.items.ModItems; +import com.hbm.main.MainRegistry; +import com.hbm.packet.GunButtonPacket; +import com.hbm.packet.PacketDispatcher; +import com.hbm.render.misc.RenderScreenOverlay.Crosshair; + +import cpw.mods.fml.common.FMLCommonHandler; +import cpw.mods.fml.common.eventhandler.SubscribeEvent; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.client.Minecraft; +import net.minecraft.client.entity.EntityClientPlayerMP; +import net.minecraft.client.resources.I18n; +import net.minecraft.enchantment.Enchantment; +import net.minecraft.enchantment.EnchantmentHelper; +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.world.World; +import net.minecraftforge.client.event.MouseEvent; + +public class ItemGunOSIPR extends ItemGunBase { + + public ItemGunOSIPR(GunConfiguration config, GunConfiguration alt) { + super(config, alt); + } + + @Override + protected void altFire(ItemStack stack, World world, EntityPlayer player) { + + if(player.inventory.hasItem(ModItems.gun_osipr_ammo2)) { + setCharge(stack, 1); + world.playSoundAtEntity(player, "hbm:weapon.osiprCharging", 1.0F, 1F); + } + } + + protected void updateServer(ItemStack stack, World world, EntityPlayer player, int slot, boolean isCurrentItem) { + super.updateServer(stack, world, player, slot, isCurrentItem); + + if(!isCurrentItem || !player.inventory.hasItem(ModItems.gun_osipr_ammo2)) { + setCharge(stack, 0); + return; + } + + int i = getCharge(stack); + + if(i >= 20) { + EntityCombineBall entityarrow = new EntityCombineBall(player.worldObj, player, 3.0F); + entityarrow.setDamage(1000); + world.spawnEntityInWorld(entityarrow); + world.playSoundAtEntity(player, altConfig.firingSound, 1.0F, 1F); + setCharge(stack, 0); + setDelay(stack, altConfig.rateOfFire); + player.inventory.consumeInventoryItem(ModItems.gun_osipr_ammo2); + + } else if(i > 0) + setCharge(stack, i + 1); + } + + protected boolean tryShoot(ItemStack stack, World world, EntityPlayer player, boolean main) { + + return super.tryShoot(stack, world, player, main) && getCharge(stack) == 0; + } + + /// CMB charge state /// + public static void setCharge(ItemStack stack, int i) { + writeNBT(stack, "cmb_charge", i); + } + + public static int getCharge(ItemStack stack) { + return readNBT(stack, "cmb_charge"); + } +} diff --git a/com/hbm/main/ClientProxy.java b/com/hbm/main/ClientProxy.java index cce9cee4c..f8ebae473 100644 --- a/com/hbm/main/ClientProxy.java +++ b/com/hbm/main/ClientProxy.java @@ -5,6 +5,7 @@ import net.minecraft.client.particle.EntityCloudFX; import net.minecraft.client.renderer.entity.RenderSnowball; import net.minecraft.client.renderer.texture.TextureManager; import net.minecraft.item.Item; +import net.minecraft.util.ResourceLocation; import net.minecraft.world.World; import net.minecraftforge.client.MinecraftForgeClient; import net.minecraftforge.client.model.AdvancedModelLoader; @@ -32,6 +33,8 @@ import com.hbm.render.item.*; import com.hbm.render.misc.MissilePart; import com.hbm.render.tileentity.*; import com.hbm.render.util.HmfModelLoader; +import com.hbm.sound.AudioWrapper; +import com.hbm.sound.AudioWrapperClient; import com.hbm.tileentity.bomb.*; import com.hbm.tileentity.conductor.*; import com.hbm.tileentity.deco.*; @@ -524,5 +527,13 @@ public class ClientProxy extends ServerProxy Minecraft.getMinecraft().effectRenderer.addEffect(contrail); } } + + @Override + public AudioWrapper getLoopedSound(String sound, float x, float y, float z, float volume, float pitch) { + + AudioWrapperClient audio = new AudioWrapperClient(new ResourceLocation(sound)); + audio.updatePosition(x, y, z); + return audio; + } } diff --git a/com/hbm/main/ModEventHandlerClient.java b/com/hbm/main/ModEventHandlerClient.java index 6e62b8da2..c0f3cbca9 100644 --- a/com/hbm/main/ModEventHandlerClient.java +++ b/com/hbm/main/ModEventHandlerClient.java @@ -139,12 +139,12 @@ public class ModEventHandlerClient { if(event.button == 0 && !item.m1 && !item.m2) { item.m1 = true; PacketDispatcher.wrapper.sendToServer(new GunButtonPacket(true, (byte) 0)); - //System.out.println("M1"); + item.startActionClient(player.getHeldItem(), player.worldObj, player, true); } else if(event.button == 1 && !item.m2 && !item.m1) { item.m2 = true; PacketDispatcher.wrapper.sendToServer(new GunButtonPacket(true, (byte) 1)); - //System.out.println("M2"); + item.startActionClient(player.getHeldItem(), player.worldObj, player, false); } } diff --git a/com/hbm/main/ServerProxy.java b/com/hbm/main/ServerProxy.java index a680fb7dc..bbb749ba7 100644 --- a/com/hbm/main/ServerProxy.java +++ b/com/hbm/main/ServerProxy.java @@ -1,5 +1,7 @@ package com.hbm.main; +import com.hbm.sound.AudioWrapper; + public class ServerProxy { public void registerRenderInfo() @@ -14,4 +16,6 @@ public class ServerProxy public void spawnParticle(double x, double y, double z, String type, float[] args) { } public void registerMissileItems() { } + + public AudioWrapper getLoopedSound(String sound, float x, float y, float z, float volume, float pitch) { return null; } } \ No newline at end of file diff --git a/com/hbm/packet/GunButtonPacket.java b/com/hbm/packet/GunButtonPacket.java index e3ec0efb7..3c2f6f9a8 100644 --- a/com/hbm/packet/GunButtonPacket.java +++ b/com/hbm/packet/GunButtonPacket.java @@ -87,8 +87,10 @@ public class GunButtonPacket implements IMessage { item.endAction(p.getHeldItem(), p.worldObj, p, false); break; - case 2: ItemGunBase.setIsReloading(p.getHeldItem(), true); - ItemGunBase.resetReloadCycle(p.getHeldItem()); + case 2: + if(item.canReload(p.getHeldItem(), p.worldObj, p)) { + item.startReloadAction(p.getHeldItem(), p.worldObj, p); + } break; } } diff --git a/com/hbm/render/entity/RenderBullet.java b/com/hbm/render/entity/RenderBullet.java index ac74ef984..9f521b21a 100644 --- a/com/hbm/render/entity/RenderBullet.java +++ b/com/hbm/render/entity/RenderBullet.java @@ -8,9 +8,12 @@ import com.hbm.entity.projectile.EntityBullet; import com.hbm.handler.BulletConfiguration; import com.hbm.lib.RefStrings; import com.hbm.main.ResourceManager; +import com.hbm.render.model.ModelBaleflare; import com.hbm.render.model.ModelBuckshot; import com.hbm.render.model.ModelBullet; import com.hbm.render.model.ModelGrenade; +import com.hbm.render.model.ModelMIRV; +import com.hbm.render.model.ModelMiniNuke; import com.hbm.render.model.ModelRocket; import net.minecraft.client.renderer.Tessellator; @@ -24,12 +27,18 @@ public class RenderBullet extends Render { private ModelBuckshot buckshot; private ModelRocket rocket; private ModelGrenade grenade; + private ModelMiniNuke nuke; + private ModelMIRV mirv; + private ModelBaleflare bf; public RenderBullet() { bullet = new ModelBullet(); buckshot = new ModelBuckshot(); rocket = new ModelRocket(); grenade = new ModelGrenade(); + nuke = new ModelMiniNuke(); + mirv = new ModelMIRV(); + bf = new ModelBaleflare(); } @Override @@ -56,6 +65,9 @@ public class RenderBullet extends Render { case BulletConfiguration.STYLE_PELLET: renderBuckshot(); break; case BulletConfiguration.STYLE_ROCKET: renderRocket(trail); break; case BulletConfiguration.STYLE_GRENADE: renderGrenade(trail); break; + case BulletConfiguration.STYLE_NUKE: renderNuke(0); break; + case BulletConfiguration.STYLE_MIRV: renderNuke(1); break; + case BulletConfiguration.STYLE_BF: renderNuke(2); break; default: renderBullet(trail); break; } @@ -135,6 +147,24 @@ public class RenderBullet extends Render { grenade.renderAll(0.0625F); } + private void renderNuke(int type) { + + GL11.glScalef(1.5F, 1.5F, 1.5F); + + switch(type) { + case 0: + bindTexture(new ResourceLocation(RefStrings.MODID + ":textures/models/MiniNuke.png")); + nuke.renderAll(0.0625F); break; + case 1: + bindTexture(new ResourceLocation(RefStrings.MODID + ":textures/models/Mirv.png")); + mirv.renderAll(0.0625F); break; + case 2: + bindTexture(new ResourceLocation(RefStrings.MODID + ":textures/models/BaleFlare.png")); + bf.renderAll(0.0625F); break; + } + + } + private void renderFlechette() { GL11.glPushMatrix(); GL11.glDisable(GL11.GL_TEXTURE_2D); diff --git a/com/hbm/render/item/ItemRenderBFLauncher.java b/com/hbm/render/item/ItemRenderBFLauncher.java index 05e376c94..81f7bb2bd 100644 --- a/com/hbm/render/item/ItemRenderBFLauncher.java +++ b/com/hbm/render/item/ItemRenderBFLauncher.java @@ -41,11 +41,11 @@ public class ItemRenderBFLauncher implements IItemRenderer { GL11.glPushMatrix(); GL11.glEnable(GL11.GL_CULL_FACE); Minecraft.getMinecraft().renderEngine.bindTexture(new ResourceLocation(RefStrings.MODID +":textures/models/BFLauncher.png")); - GL11.glRotatef(-135.0F, 0.0F, 0.0F, 1.0F); - GL11.glTranslatef(-0.5F, 0.0F, -0.2F); + GL11.glRotatef(-150.0F, 0.0F, 0.0F, 1.0F); + GL11.glTranslatef(-0.6F, -0.1F, -0.2F); //GL11.glScalef(2.0F, 2.0F, 2.0F); GL11.glScalef(0.5F, 0.5F, 0.5F); - swordModel.render((Entity)data[1], 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0625F); + swordModel.render((Entity)data[1], 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0625F, item); GL11.glPopMatrix(); break; case EQUIPPED: @@ -60,7 +60,7 @@ public class ItemRenderBFLauncher implements IItemRenderer { GL11.glRotatef(-5.0F, 0.0F, 0.0F, 1.0F); GL11.glTranslatef(0.5F, -0.2F, 0.0F); GL11.glScalef(1.5F, 1.5F, 1.5F); - swordModel.render((Entity)data[1], 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0625F); + swordModel.render((Entity)data[1], 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0625F, item); GL11.glPopMatrix(); default: break; } diff --git a/com/hbm/render/item/ItemRenderFatMan.java b/com/hbm/render/item/ItemRenderFatMan.java index 16eb88f03..844025f17 100644 --- a/com/hbm/render/item/ItemRenderFatMan.java +++ b/com/hbm/render/item/ItemRenderFatMan.java @@ -42,11 +42,11 @@ public class ItemRenderFatMan implements IItemRenderer { GL11.glPushMatrix(); GL11.glEnable(GL11.GL_CULL_FACE); Minecraft.getMinecraft().renderEngine.bindTexture(new ResourceLocation(RefStrings.MODID +":textures/models/FatmanLauncher.png")); - GL11.glRotatef(-135.0F, 0.0F, 0.0F, 1.0F); - GL11.glTranslatef(-0.5F, 0.0F, -0.2F); + GL11.glRotatef(-150.0F, 0.0F, 0.0F, 1.0F); + GL11.glTranslatef(-0.6F, -0.1F, -0.2F); //GL11.glScalef(2.0F, 2.0F, 2.0F); GL11.glScalef(0.5F, 0.5F, 0.5F); - swordModel.render((Entity)data[1], 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0625F); + swordModel.render((Entity)data[1], 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0625F, item); GL11.glPopMatrix(); break; case EQUIPPED: @@ -61,7 +61,7 @@ public class ItemRenderFatMan implements IItemRenderer { GL11.glRotatef(-5.0F, 0.0F, 0.0F, 1.0F); GL11.glTranslatef(0.5F, -0.2F, 0.0F); GL11.glScalef(1.5F, 1.5F, 1.5F); - swordModel.render((Entity)data[1], 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0625F); + swordModel.render((Entity)data[1], 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0625F, item); GL11.glPopMatrix(); default: break; } diff --git a/com/hbm/render/item/ItemRenderGunAnim.java b/com/hbm/render/item/ItemRenderGunAnim.java index b34e80403..06ce922c4 100644 --- a/com/hbm/render/item/ItemRenderGunAnim.java +++ b/com/hbm/render/item/ItemRenderGunAnim.java @@ -125,7 +125,8 @@ public class ItemRenderGunAnim implements IItemRenderer { } if(item.getItem() == ModItems.gun_bolt_action || item.getItem() == ModItems.gun_bolt_action_green || - item.getItem() == ModItems.gun_lever_action || item.getItem() == ModItems.gun_lever_action_dark) { + item.getItem() == ModItems.gun_lever_action || item.getItem() == ModItems.gun_lever_action_dark + || item.getItem() == ModItems.gun_bolt_action_saturnite) { GL11.glTranslatef(0.0F, -0.4F, 0.0F); GL11.glRotatef(-20.0F, 0.0F, 0.0F, 1.0F); GL11.glRotatef(5.0F, 0.0F, 1.0F, 0.0F); diff --git a/com/hbm/render/item/ItemRenderMIRVLauncher.java b/com/hbm/render/item/ItemRenderMIRVLauncher.java index c7b6bd88d..fc65850d8 100644 --- a/com/hbm/render/item/ItemRenderMIRVLauncher.java +++ b/com/hbm/render/item/ItemRenderMIRVLauncher.java @@ -42,11 +42,11 @@ public class ItemRenderMIRVLauncher implements IItemRenderer { GL11.glPushMatrix(); GL11.glEnable(GL11.GL_CULL_FACE); Minecraft.getMinecraft().renderEngine.bindTexture(new ResourceLocation(RefStrings.MODID +":textures/models/MIRVLauncher.png")); - GL11.glRotatef(-135.0F, 0.0F, 0.0F, 1.0F); - GL11.glTranslatef(-0.5F, 0.0F, -0.2F); + GL11.glRotatef(-150.0F, 0.0F, 0.0F, 1.0F); + GL11.glTranslatef(-0.6F, -0.1F, -0.2F); //GL11.glScalef(2.0F, 2.0F, 2.0F); GL11.glScalef(0.5F, 0.5F, 0.5F); - swordModel.render((Entity)data[1], 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0625F); + swordModel.render((Entity)data[1], 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0625F, item); GL11.glPopMatrix(); break; case EQUIPPED: @@ -61,7 +61,7 @@ public class ItemRenderMIRVLauncher implements IItemRenderer { GL11.glRotatef(-5.0F, 0.0F, 0.0F, 1.0F); GL11.glTranslatef(0.5F, -0.2F, 0.0F); GL11.glScalef(1.5F, 1.5F, 1.5F); - swordModel.render((Entity)data[1], 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0625F); + swordModel.render((Entity)data[1], 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0625F, item); GL11.glPopMatrix(); default: break; } diff --git a/com/hbm/render/item/ItemRenderOSIPR.java b/com/hbm/render/item/ItemRenderOSIPR.java index 1e483928a..6e9d6a5c8 100644 --- a/com/hbm/render/item/ItemRenderOSIPR.java +++ b/com/hbm/render/item/ItemRenderOSIPR.java @@ -46,7 +46,8 @@ public class ItemRenderOSIPR implements IItemRenderer { GL11.glTranslatef(-0.5F, 0.0F, -0.2F); //GL11.glScalef(2.0F, 2.0F, 2.0F); GL11.glScalef(0.5F, 0.5F, 0.5F); - GL11.glTranslatef(-0.4F, -0.1F, -0.1F); + GL11.glTranslatef(-0.4F, -0.2F, -0.1F); + GL11.glRotatef(-15.0F, 0.0F, 0.0F, 1.0F); swordModel.render((Entity)data[1], 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0625F); GL11.glPopMatrix(); break; diff --git a/com/hbm/render/item/ItemRenderXVL1456.java b/com/hbm/render/item/ItemRenderXVL1456.java index 35c8e6192..6bd0e8b05 100644 --- a/com/hbm/render/item/ItemRenderXVL1456.java +++ b/com/hbm/render/item/ItemRenderXVL1456.java @@ -48,8 +48,8 @@ public class ItemRenderXVL1456 implements IItemRenderer { GL11.glPushMatrix(); GL11.glEnable(GL11.GL_CULL_FACE); Minecraft.getMinecraft().renderEngine.bindTexture(new ResourceLocation(RefStrings.MODID +":textures/models/ModelXVL1456.png")); - GL11.glRotatef(-135.0F, 0.0F, 0.0F, 1.0F); - GL11.glTranslatef(-0.9F, 0.0F, -0.2F); + GL11.glRotatef(-150.0F, 0.0F, 0.0F, 1.0F); + GL11.glTranslatef(-0.9F, -0.1F, -0.1F); GL11.glScalef(0.3F, 0.3F, 0.3F); swordModel.render((Entity)data[1], 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0625F, f); GL11.glPopMatrix(); diff --git a/com/hbm/render/model/ModelBFLauncher.java b/com/hbm/render/model/ModelBFLauncher.java index 103f39f9c..dadb9847e 100644 --- a/com/hbm/render/model/ModelBFLauncher.java +++ b/com/hbm/render/model/ModelBFLauncher.java @@ -8,9 +8,12 @@ package com.hbm.render.model; import org.lwjgl.opengl.GL11; +import com.hbm.items.weapon.ItemGunBase; + import net.minecraft.client.model.ModelBase; import net.minecraft.client.model.ModelRenderer; import net.minecraft.entity.Entity; +import net.minecraft.item.ItemStack; public class ModelBFLauncher extends ModelBase { // fields @@ -203,8 +206,7 @@ public class ModelBFLauncher extends ModelBase { setRotation(Shape20, 0F, 0F, 0F); } - @Override - public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) { + public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5, ItemStack item) { super.render(entity, f, f1, f2, f3, f4, f5); setRotationAngles(f, f1, f2, f3, f4, f5, entity); Shape1.render(f5); @@ -231,14 +233,18 @@ public class ModelBFLauncher extends ModelBase { Shape31.render(f5); Shape32.render(f5); Shape33.render(f5); - Shape13.render(f5); - Shape14.render(f5); - Shape15.render(f5); - Shape16.render(f5); - Shape17.render(f5); - Shape18.render(f5); - Shape19.render(f5); - Shape20.render(f5); + + int ammo = ItemGunBase.getMag(item); + if(ammo > 0) { + Shape13.render(f5); + Shape14.render(f5); + Shape15.render(f5); + Shape16.render(f5); + Shape17.render(f5); + Shape18.render(f5); + Shape19.render(f5); + Shape20.render(f5); + } } private void setRotation(ModelRenderer model, float x, float y, float z) { diff --git a/com/hbm/render/model/ModelBoltAction.java b/com/hbm/render/model/ModelBoltAction.java index 82d6b7f5c..287421431 100644 --- a/com/hbm/render/model/ModelBoltAction.java +++ b/com/hbm/render/model/ModelBoltAction.java @@ -202,8 +202,6 @@ public class ModelBoltAction extends ModelBase { HandleBottom.render(f5); HandleGrip.render(f5); - - GL11.glPushMatrix(); GL11.glDisable(GL11.GL_TEXTURE_2D); GL11.glDisable(GL11.GL_LIGHTING); diff --git a/com/hbm/render/model/ModelFatman.java b/com/hbm/render/model/ModelFatman.java index 049216d94..fc65ff140 100644 --- a/com/hbm/render/model/ModelFatman.java +++ b/com/hbm/render/model/ModelFatman.java @@ -4,318 +4,315 @@ // Keep in mind that you still need to fill in some blanks // - ZeuX - - - - - package com.hbm.render.model; import org.lwjgl.opengl.GL11; +import com.hbm.items.weapon.ItemGunBase; + import net.minecraft.client.model.ModelBase; import net.minecraft.client.model.ModelRenderer; import net.minecraft.entity.Entity; +import net.minecraft.item.ItemStack; -public class ModelFatman extends ModelBase -{ - //fields - ModelRenderer Shape1; - ModelRenderer Shape2; - ModelRenderer Shape3; - ModelRenderer Shape4; - ModelRenderer Shape5; - ModelRenderer Shape6; - ModelRenderer Shape7; - ModelRenderer Shape8; - ModelRenderer Shape9; - ModelRenderer Shape10; - ModelRenderer Shape11; - ModelRenderer Shape12; - ModelRenderer Shape13; - ModelRenderer Shape14; - ModelRenderer Shape15; - ModelRenderer Shape16; - ModelRenderer Shape17; - ModelRenderer Shape18; - ModelRenderer Shape19; - ModelRenderer Shape20; - ModelRenderer Shape21; - ModelRenderer Shape22; - ModelRenderer Shape23; - ModelRenderer Shape24; - ModelRenderer Shape25; - ModelRenderer Shape26; - ModelRenderer Shape27; - ModelRenderer Shape28; - ModelRenderer Shape29; - ModelRenderer Shape30; - ModelRenderer Shape31; - ModelRenderer Shape32; - ModelRenderer Shape33; - - public ModelFatman() - { - textureWidth = 128; - textureHeight = 64; - - Shape1 = new ModelRenderer(this, 0, 0); - Shape1.addBox(0F, 0F, 0F, 40, 2, 4); - Shape1.setRotationPoint(-20F, 0F, 0F); - Shape1.setTextureSize(128, 64); - Shape1.mirror = true; - setRotation(Shape1, 0F, 0F, 0F); - Shape2 = new ModelRenderer(this, 0, 6); - Shape2.addBox(0F, 0F, 0F, 6, 2, 2); - Shape2.setRotationPoint(-19F, 2F, 1F); - Shape2.setTextureSize(128, 64); - Shape2.mirror = true; - setRotation(Shape2, 0F, 0F, 0F); - Shape3 = new ModelRenderer(this, 0, 10); - Shape3.addBox(0F, 0F, 0F, 1, 4, 1); - Shape3.setRotationPoint(-12F, 2F, 1.5F); - Shape3.setTextureSize(128, 64); - Shape3.mirror = true; - setRotation(Shape3, 0F, 0F, 0F); - Shape4 = new ModelRenderer(this, 16, 6); - Shape4.addBox(0F, 0F, 0F, 6, 1, 4); - Shape4.setRotationPoint(-10F, 2F, 0F); - Shape4.setTextureSize(128, 64); - Shape4.mirror = true; - setRotation(Shape4, 0F, 0F, 0F); - Shape5 = new ModelRenderer(this, 0, 15); - Shape5.addBox(0F, 0F, 0F, 2, 3, 1); - Shape5.setRotationPoint(-7F, 3F, 1.5F); - Shape5.setTextureSize(128, 64); - Shape5.mirror = true; - setRotation(Shape5, 0F, 0F, 0F); - Shape6 = new ModelRenderer(this, 4, 10); - Shape6.addBox(0F, 0F, 0F, 3, 3, 1); - Shape6.setRotationPoint(-10F, 3F, 1.5F); - Shape6.setTextureSize(128, 64); - Shape6.mirror = true; - setRotation(Shape6, 0F, 0F, 0F); - Shape7 = new ModelRenderer(this, 12, 10); - Shape7.addBox(-1F, 0F, 0F, 1, 2, 1); - Shape7.setRotationPoint(-7F, 3F, 1.5F); - Shape7.setTextureSize(128, 64); - Shape7.mirror = true; - setRotation(Shape7, 0F, 0F, 0.5235988F); - Shape8 = new ModelRenderer(this, 36, 6); - Shape8.addBox(0F, 0F, 0F, 10, 1, 4); - Shape8.setRotationPoint(-3F, 2F, 0F); - Shape8.setTextureSize(128, 64); - Shape8.mirror = true; - setRotation(Shape8, 0F, 0F, 0F); - Shape9 = new ModelRenderer(this, 64, 6); - Shape9.addBox(0F, 0F, 0F, 2, 3, 2); - Shape9.setRotationPoint(7F, 2F, 1F); - Shape9.setTextureSize(128, 64); - Shape9.mirror = true; - setRotation(Shape9, 0F, 0F, 0F); - Shape10 = new ModelRenderer(this, 88, 0); - Shape10.addBox(0F, 0F, 0F, 3, 4, 4); - Shape10.setRotationPoint(17F, -4F, 0F); - Shape10.setTextureSize(128, 64); - Shape10.mirror = true; - setRotation(Shape10, 0F, 0F, 0F); - Shape11 = new ModelRenderer(this, 72, 6); - Shape11.addBox(0F, 0F, 0F, 2, 3, 1); - Shape11.setRotationPoint(18F, -7F, 0F); - Shape11.setTextureSize(128, 64); - Shape11.mirror = true; - setRotation(Shape11, 0F, 0F, 0F); - Shape12 = new ModelRenderer(this, 78, 6); - Shape12.addBox(0F, 0F, 0F, 2, 3, 1); - Shape12.setRotationPoint(18F, -7F, 3F); - Shape12.setTextureSize(128, 64); - Shape12.mirror = true; - setRotation(Shape12, 0F, 0F, 0F); - Shape13 = new ModelRenderer(this, 0, 19); - Shape13.addBox(0F, -4F, 0F, 22, 4, 0); - Shape13.setRotationPoint(-17F, 0F, 1F); - Shape13.setTextureSize(128, 64); - Shape13.mirror = true; - setRotation(Shape13, 0.4363323F, 0F, 0F); - Shape14 = new ModelRenderer(this, 16, 11); - Shape14.addBox(0F, 0F, 0F, 33, 1, 1); - Shape14.setRotationPoint(-17F, -4F, -1F); - Shape14.setTextureSize(128, 64); - Shape14.mirror = true; - setRotation(Shape14, 0F, 0F, 0F); - Shape15 = new ModelRenderer(this, 0, 23); - Shape15.addBox(0F, -4F, 0F, 22, 4, 0); - Shape15.setRotationPoint(-17F, 0F, 3F); - Shape15.setTextureSize(128, 64); - Shape15.mirror = true; - setRotation(Shape15, -0.4363323F, 0F, 0F); - Shape16 = new ModelRenderer(this, 16, 13); - Shape16.addBox(0F, 0F, 0F, 33, 1, 1); - Shape16.setRotationPoint(-17F, -4F, 4F); - Shape16.setTextureSize(128, 64); - Shape16.mirror = true; - setRotation(Shape16, 0F, 0F, 0F); - Shape17 = new ModelRenderer(this, 44, 25); - Shape17.addBox(0F, -4F, 0F, 8, 4, 0); - Shape17.setRotationPoint(8F, 0F, 1F); - Shape17.setTextureSize(128, 64); - Shape17.mirror = true; - setRotation(Shape17, 0.4363323F, 0F, 0F); - Shape18 = new ModelRenderer(this, 44, 21); - Shape18.addBox(0F, -4F, 0F, 8, 4, 0); - Shape18.setRotationPoint(8F, 0F, 3F); - Shape18.setTextureSize(128, 64); - Shape18.mirror = true; - setRotation(Shape18, -0.4363323F, 0F, 0F); - Shape19 = new ModelRenderer(this, 0, 37); - Shape19.addBox(0F, 0F, 0F, 5, 4, 2); - Shape19.setRotationPoint(5F, -6F, 1F); - Shape19.setTextureSize(128, 64); - Shape19.mirror = true; - setRotation(Shape19, 0F, 0F, 0F); - Shape20 = new ModelRenderer(this, 0, 31); - Shape20.addBox(0F, 0F, 0F, 5, 2, 4); - Shape20.setRotationPoint(5F, -5F, 0F); - Shape20.setTextureSize(128, 64); - Shape20.mirror = true; - setRotation(Shape20, 0F, 0F, 0F); - Shape21 = new ModelRenderer(this, 0, 27); - Shape21.addBox(0F, 0F, 0F, 1, 2, 2); - Shape21.setRotationPoint(4F, -5F, 1F); - Shape21.setTextureSize(128, 64); - Shape21.mirror = true; - setRotation(Shape21, 0F, 0F, 0F); - Shape22 = new ModelRenderer(this, 6, 27); - Shape22.addBox(0F, 0F, 0F, 1, 2, 2); - Shape22.setRotationPoint(10F, -5F, 1F); - Shape22.setTextureSize(128, 64); - Shape22.mirror = true; - setRotation(Shape22, 0F, 0F, 0F); - Shape23 = new ModelRenderer(this, 8, 43); - Shape23.addBox(0F, 0F, 0F, 2, 2, 1); - Shape23.setRotationPoint(11F, -5F, 0F); - Shape23.setTextureSize(128, 64); - Shape23.mirror = true; - setRotation(Shape23, 0F, 0F, 0F); - Shape24 = new ModelRenderer(this, 8, 46); - Shape24.addBox(0F, 0F, 0F, 2, 2, 1); - Shape24.setRotationPoint(11F, -5F, 3F); - Shape24.setTextureSize(128, 64); - Shape24.mirror = true; - setRotation(Shape24, 0F, 0F, 0F); - Shape25 = new ModelRenderer(this, 0, 43); - Shape25.addBox(0F, 0F, 0F, 2, 1, 2); - Shape25.setRotationPoint(11F, -6F, 1F); - Shape25.setTextureSize(128, 64); - Shape25.mirror = true; - setRotation(Shape25, 0F, 0F, 0F); - Shape26 = new ModelRenderer(this, 0, 46); - Shape26.addBox(0F, 0F, 0F, 2, 1, 2); - Shape26.setRotationPoint(11F, -3F, 1F); - Shape26.setTextureSize(128, 64); - Shape26.mirror = true; - setRotation(Shape26, 0F, 0F, 0F); - Shape27 = new ModelRenderer(this, 18, 27); - Shape27.addBox(0F, 0F, 0F, 2, 5, 1); - Shape27.setRotationPoint(13F, -5F, 1.5F); - Shape27.setTextureSize(128, 64); - Shape27.mirror = true; - setRotation(Shape27, 0F, 0F, 0F); - Shape28 = new ModelRenderer(this, 84, 6); - Shape28.addBox(0F, 0F, 0F, 1, 3, 1); - Shape28.setRotationPoint(16F, -3F, 1.5F); - Shape28.setTextureSize(128, 64); - Shape28.mirror = true; - setRotation(Shape28, 0F, 0F, 0F); - Shape29 = new ModelRenderer(this, 6, 15); - Shape29.addBox(0F, 0F, 0F, 10, 2, 2); - Shape29.setRotationPoint(3F, -2F, 1F); - Shape29.setTextureSize(128, 64); - Shape29.mirror = true; - setRotation(Shape29, 0F, 0F, 0F); - Shape30 = new ModelRenderer(this, 30, 15); - Shape30.addBox(0F, 0F, 0F, 12, 2, 2); - Shape30.setRotationPoint(-7F, -1F, 4F); - Shape30.setTextureSize(128, 64); - Shape30.mirror = true; - setRotation(Shape30, 0F, 0F, 0F); - Shape31 = new ModelRenderer(this, 44, 19); - Shape31.addBox(0F, 0F, 0F, 14, 1, 1); - Shape31.setRotationPoint(5F, -0.5F, 4.5F); - Shape31.setTextureSize(128, 64); - Shape31.mirror = true; - setRotation(Shape31, 0F, 0F, 0F); - Shape32 = new ModelRenderer(this, 12, 27); - Shape32.addBox(0F, 0F, 0F, 1, 1, 1); - Shape32.setRotationPoint(18F, -0.5F, 3.5F); - Shape32.setTextureSize(128, 64); - Shape32.mirror = true; - setRotation(Shape32, 0F, 0F, 0F); - Shape33 = new ModelRenderer(this, 24, 29); - Shape33.addBox(0F, 0F, 0F, 21, 1, 2); - Shape33.setRotationPoint(-18F, -1F, 1F); - Shape33.setTextureSize(128, 64); - Shape33.mirror = true; - setRotation(Shape33, 0F, 0F, 0F); - } - - @Override -public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) - { - super.render(entity, f, f1, f2, f3, f4, f5); - setRotationAngles(f, f1, f2, f3, f4, f5, entity); - Shape1.render(f5); - GL11.glDisable(GL11.GL_CULL_FACE); - Shape2.render(f5); - GL11.glEnable(GL11.GL_CULL_FACE); - Shape3.render(f5); - Shape4.render(f5); - Shape5.render(f5); - GL11.glDisable(GL11.GL_CULL_FACE); - Shape6.render(f5); - GL11.glEnable(GL11.GL_CULL_FACE); - Shape7.render(f5); - Shape8.render(f5); - GL11.glDisable(GL11.GL_CULL_FACE); - Shape9.render(f5); - GL11.glEnable(GL11.GL_CULL_FACE); - Shape10.render(f5); - Shape11.render(f5); - Shape12.render(f5); - Shape13.render(f5); - Shape14.render(f5); - Shape15.render(f5); - Shape16.render(f5); - Shape17.render(f5); - Shape18.render(f5); - Shape19.render(f5); - Shape20.render(f5); - Shape21.render(f5); - Shape22.render(f5); - Shape23.render(f5); - Shape24.render(f5); - Shape25.render(f5); - Shape26.render(f5); - Shape27.render(f5); - Shape28.render(f5); - Shape29.render(f5); - Shape30.render(f5); - Shape31.render(f5); - Shape32.render(f5); - Shape33.render(f5); - } - - private void setRotation(ModelRenderer model, float x, float y, float z) - { - model.rotateAngleX = x; - model.rotateAngleY = y; - model.rotateAngleZ = z; - } - - @Override -public void setRotationAngles(float f, float f1, float f2, float f3, float f4, float f5, Entity entity) - { - super.setRotationAngles(f, f1, f2, f3, f4, f5, entity); - } +public class ModelFatman extends ModelBase { + // fields + ModelRenderer Shape1; + ModelRenderer Shape2; + ModelRenderer Shape3; + ModelRenderer Shape4; + ModelRenderer Shape5; + ModelRenderer Shape6; + ModelRenderer Shape7; + ModelRenderer Shape8; + ModelRenderer Shape9; + ModelRenderer Shape10; + ModelRenderer Shape11; + ModelRenderer Shape12; + ModelRenderer Shape13; + ModelRenderer Shape14; + ModelRenderer Shape15; + ModelRenderer Shape16; + ModelRenderer Shape17; + ModelRenderer Shape18; + ModelRenderer Shape19; + ModelRenderer Shape20; + ModelRenderer Shape21; + ModelRenderer Shape22; + ModelRenderer Shape23; + ModelRenderer Shape24; + ModelRenderer Shape25; + ModelRenderer Shape26; + ModelRenderer Shape27; + ModelRenderer Shape28; + ModelRenderer Shape29; + ModelRenderer Shape30; + ModelRenderer Shape31; + ModelRenderer Shape32; + ModelRenderer Shape33; + + public ModelFatman() { + textureWidth = 128; + textureHeight = 64; + + Shape1 = new ModelRenderer(this, 0, 0); + Shape1.addBox(0F, 0F, 0F, 40, 2, 4); + Shape1.setRotationPoint(-20F, 0F, 0F); + Shape1.setTextureSize(128, 64); + Shape1.mirror = true; + setRotation(Shape1, 0F, 0F, 0F); + Shape2 = new ModelRenderer(this, 0, 6); + Shape2.addBox(0F, 0F, 0F, 6, 2, 2); + Shape2.setRotationPoint(-19F, 2F, 1F); + Shape2.setTextureSize(128, 64); + Shape2.mirror = true; + setRotation(Shape2, 0F, 0F, 0F); + Shape3 = new ModelRenderer(this, 0, 10); + Shape3.addBox(0F, 0F, 0F, 1, 4, 1); + Shape3.setRotationPoint(-12F, 2F, 1.5F); + Shape3.setTextureSize(128, 64); + Shape3.mirror = true; + setRotation(Shape3, 0F, 0F, 0F); + Shape4 = new ModelRenderer(this, 16, 6); + Shape4.addBox(0F, 0F, 0F, 6, 1, 4); + Shape4.setRotationPoint(-10F, 2F, 0F); + Shape4.setTextureSize(128, 64); + Shape4.mirror = true; + setRotation(Shape4, 0F, 0F, 0F); + Shape5 = new ModelRenderer(this, 0, 15); + Shape5.addBox(0F, 0F, 0F, 2, 3, 1); + Shape5.setRotationPoint(-7F, 3F, 1.5F); + Shape5.setTextureSize(128, 64); + Shape5.mirror = true; + setRotation(Shape5, 0F, 0F, 0F); + Shape6 = new ModelRenderer(this, 4, 10); + Shape6.addBox(0F, 0F, 0F, 3, 3, 1); + Shape6.setRotationPoint(-10F, 3F, 1.5F); + Shape6.setTextureSize(128, 64); + Shape6.mirror = true; + setRotation(Shape6, 0F, 0F, 0F); + Shape7 = new ModelRenderer(this, 12, 10); + Shape7.addBox(-1F, 0F, 0F, 1, 2, 1); + Shape7.setRotationPoint(-7F, 3F, 1.5F); + Shape7.setTextureSize(128, 64); + Shape7.mirror = true; + setRotation(Shape7, 0F, 0F, 0.5235988F); + Shape8 = new ModelRenderer(this, 36, 6); + Shape8.addBox(0F, 0F, 0F, 10, 1, 4); + Shape8.setRotationPoint(-3F, 2F, 0F); + Shape8.setTextureSize(128, 64); + Shape8.mirror = true; + setRotation(Shape8, 0F, 0F, 0F); + Shape9 = new ModelRenderer(this, 64, 6); + Shape9.addBox(0F, 0F, 0F, 2, 3, 2); + Shape9.setRotationPoint(7F, 2F, 1F); + Shape9.setTextureSize(128, 64); + Shape9.mirror = true; + setRotation(Shape9, 0F, 0F, 0F); + Shape10 = new ModelRenderer(this, 88, 0); + Shape10.addBox(0F, 0F, 0F, 3, 4, 4); + Shape10.setRotationPoint(17F, -4F, 0F); + Shape10.setTextureSize(128, 64); + Shape10.mirror = true; + setRotation(Shape10, 0F, 0F, 0F); + Shape11 = new ModelRenderer(this, 72, 6); + Shape11.addBox(0F, 0F, 0F, 2, 3, 1); + Shape11.setRotationPoint(18F, -7F, 0F); + Shape11.setTextureSize(128, 64); + Shape11.mirror = true; + setRotation(Shape11, 0F, 0F, 0F); + Shape12 = new ModelRenderer(this, 78, 6); + Shape12.addBox(0F, 0F, 0F, 2, 3, 1); + Shape12.setRotationPoint(18F, -7F, 3F); + Shape12.setTextureSize(128, 64); + Shape12.mirror = true; + setRotation(Shape12, 0F, 0F, 0F); + Shape13 = new ModelRenderer(this, 0, 19); + Shape13.addBox(0F, -4F, 0F, 22, 4, 0); + Shape13.setRotationPoint(-17F, 0F, 1F); + Shape13.setTextureSize(128, 64); + Shape13.mirror = true; + setRotation(Shape13, 0.4363323F, 0F, 0F); + Shape14 = new ModelRenderer(this, 16, 11); + Shape14.addBox(0F, 0F, 0F, 33, 1, 1); + Shape14.setRotationPoint(-17F, -4F, -1F); + Shape14.setTextureSize(128, 64); + Shape14.mirror = true; + setRotation(Shape14, 0F, 0F, 0F); + Shape15 = new ModelRenderer(this, 0, 23); + Shape15.addBox(0F, -4F, 0F, 22, 4, 0); + Shape15.setRotationPoint(-17F, 0F, 3F); + Shape15.setTextureSize(128, 64); + Shape15.mirror = true; + setRotation(Shape15, -0.4363323F, 0F, 0F); + Shape16 = new ModelRenderer(this, 16, 13); + Shape16.addBox(0F, 0F, 0F, 33, 1, 1); + Shape16.setRotationPoint(-17F, -4F, 4F); + Shape16.setTextureSize(128, 64); + Shape16.mirror = true; + setRotation(Shape16, 0F, 0F, 0F); + Shape17 = new ModelRenderer(this, 44, 25); + Shape17.addBox(0F, -4F, 0F, 8, 4, 0); + Shape17.setRotationPoint(8F, 0F, 1F); + Shape17.setTextureSize(128, 64); + Shape17.mirror = true; + setRotation(Shape17, 0.4363323F, 0F, 0F); + Shape18 = new ModelRenderer(this, 44, 21); + Shape18.addBox(0F, -4F, 0F, 8, 4, 0); + Shape18.setRotationPoint(8F, 0F, 3F); + Shape18.setTextureSize(128, 64); + Shape18.mirror = true; + setRotation(Shape18, -0.4363323F, 0F, 0F); + Shape19 = new ModelRenderer(this, 0, 37); + Shape19.addBox(0F, 0F, 0F, 5, 4, 2); + Shape19.setRotationPoint(5F, -6F, 1F); + Shape19.setTextureSize(128, 64); + Shape19.mirror = true; + setRotation(Shape19, 0F, 0F, 0F); + Shape20 = new ModelRenderer(this, 0, 31); + Shape20.addBox(0F, 0F, 0F, 5, 2, 4); + Shape20.setRotationPoint(5F, -5F, 0F); + Shape20.setTextureSize(128, 64); + Shape20.mirror = true; + setRotation(Shape20, 0F, 0F, 0F); + Shape21 = new ModelRenderer(this, 0, 27); + Shape21.addBox(0F, 0F, 0F, 1, 2, 2); + Shape21.setRotationPoint(4F, -5F, 1F); + Shape21.setTextureSize(128, 64); + Shape21.mirror = true; + setRotation(Shape21, 0F, 0F, 0F); + Shape22 = new ModelRenderer(this, 6, 27); + Shape22.addBox(0F, 0F, 0F, 1, 2, 2); + Shape22.setRotationPoint(10F, -5F, 1F); + Shape22.setTextureSize(128, 64); + Shape22.mirror = true; + setRotation(Shape22, 0F, 0F, 0F); + Shape23 = new ModelRenderer(this, 8, 43); + Shape23.addBox(0F, 0F, 0F, 2, 2, 1); + Shape23.setRotationPoint(11F, -5F, 0F); + Shape23.setTextureSize(128, 64); + Shape23.mirror = true; + setRotation(Shape23, 0F, 0F, 0F); + Shape24 = new ModelRenderer(this, 8, 46); + Shape24.addBox(0F, 0F, 0F, 2, 2, 1); + Shape24.setRotationPoint(11F, -5F, 3F); + Shape24.setTextureSize(128, 64); + Shape24.mirror = true; + setRotation(Shape24, 0F, 0F, 0F); + Shape25 = new ModelRenderer(this, 0, 43); + Shape25.addBox(0F, 0F, 0F, 2, 1, 2); + Shape25.setRotationPoint(11F, -6F, 1F); + Shape25.setTextureSize(128, 64); + Shape25.mirror = true; + setRotation(Shape25, 0F, 0F, 0F); + Shape26 = new ModelRenderer(this, 0, 46); + Shape26.addBox(0F, 0F, 0F, 2, 1, 2); + Shape26.setRotationPoint(11F, -3F, 1F); + Shape26.setTextureSize(128, 64); + Shape26.mirror = true; + setRotation(Shape26, 0F, 0F, 0F); + Shape27 = new ModelRenderer(this, 18, 27); + Shape27.addBox(0F, 0F, 0F, 2, 5, 1); + Shape27.setRotationPoint(13F, -5F, 1.5F); + Shape27.setTextureSize(128, 64); + Shape27.mirror = true; + setRotation(Shape27, 0F, 0F, 0F); + Shape28 = new ModelRenderer(this, 84, 6); + Shape28.addBox(0F, 0F, 0F, 1, 3, 1); + Shape28.setRotationPoint(16F, -3F, 1.5F); + Shape28.setTextureSize(128, 64); + Shape28.mirror = true; + setRotation(Shape28, 0F, 0F, 0F); + Shape29 = new ModelRenderer(this, 6, 15); + Shape29.addBox(0F, 0F, 0F, 10, 2, 2); + Shape29.setRotationPoint(3F, -2F, 1F); + Shape29.setTextureSize(128, 64); + Shape29.mirror = true; + setRotation(Shape29, 0F, 0F, 0F); + Shape30 = new ModelRenderer(this, 30, 15); + Shape30.addBox(0F, 0F, 0F, 12, 2, 2); + Shape30.setRotationPoint(-7F, -1F, 4F); + Shape30.setTextureSize(128, 64); + Shape30.mirror = true; + setRotation(Shape30, 0F, 0F, 0F); + Shape31 = new ModelRenderer(this, 44, 19); + Shape31.addBox(0F, 0F, 0F, 14, 1, 1); + Shape31.setRotationPoint(5F, -0.5F, 4.5F); + Shape31.setTextureSize(128, 64); + Shape31.mirror = true; + setRotation(Shape31, 0F, 0F, 0F); + Shape32 = new ModelRenderer(this, 12, 27); + Shape32.addBox(0F, 0F, 0F, 1, 1, 1); + Shape32.setRotationPoint(18F, -0.5F, 3.5F); + Shape32.setTextureSize(128, 64); + Shape32.mirror = true; + setRotation(Shape32, 0F, 0F, 0F); + Shape33 = new ModelRenderer(this, 24, 29); + Shape33.addBox(0F, 0F, 0F, 21, 1, 2); + Shape33.setRotationPoint(-18F, -1F, 1F); + Shape33.setTextureSize(128, 64); + Shape33.mirror = true; + setRotation(Shape33, 0F, 0F, 0F); + } + + public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5, ItemStack item) { + super.render(entity, f, f1, f2, f3, f4, f5); + setRotationAngles(f, f1, f2, f3, f4, f5, entity); + Shape1.render(f5); + GL11.glDisable(GL11.GL_CULL_FACE); + Shape2.render(f5); + GL11.glEnable(GL11.GL_CULL_FACE); + Shape3.render(f5); + Shape4.render(f5); + Shape5.render(f5); + GL11.glDisable(GL11.GL_CULL_FACE); + Shape6.render(f5); + GL11.glEnable(GL11.GL_CULL_FACE); + Shape7.render(f5); + Shape8.render(f5); + GL11.glDisable(GL11.GL_CULL_FACE); + Shape9.render(f5); + GL11.glEnable(GL11.GL_CULL_FACE); + Shape10.render(f5); + Shape11.render(f5); + Shape12.render(f5); + Shape13.render(f5); + Shape14.render(f5); + Shape15.render(f5); + Shape16.render(f5); + Shape17.render(f5); + Shape18.render(f5); + + int ammo = ItemGunBase.getMag(item); + if(ammo > 0) { + Shape19.render(f5); + Shape20.render(f5); + Shape21.render(f5); + Shape22.render(f5); + Shape23.render(f5); + Shape24.render(f5); + Shape25.render(f5); + Shape26.render(f5); + } + + Shape27.render(f5); + Shape28.render(f5); + Shape29.render(f5); + Shape30.render(f5); + Shape31.render(f5); + Shape32.render(f5); + Shape33.render(f5); + } + + private void setRotation(ModelRenderer model, float x, float y, float z) { + model.rotateAngleX = x; + model.rotateAngleY = y; + model.rotateAngleZ = z; + } + + @Override + public void setRotationAngles(float f, float f1, float f2, float f3, float f4, float f5, Entity entity) { + super.setRotationAngles(f, f1, f2, f3, f4, f5, entity); + } } diff --git a/com/hbm/render/model/ModelMIRVLauncher.java b/com/hbm/render/model/ModelMIRVLauncher.java index 6cdcdfa22..a6dad112d 100644 --- a/com/hbm/render/model/ModelMIRVLauncher.java +++ b/com/hbm/render/model/ModelMIRVLauncher.java @@ -4,288 +4,284 @@ // Keep in mind that you still need to fill in some blanks // - ZeuX - - - - - package com.hbm.render.model; import org.lwjgl.opengl.GL11; +import com.hbm.items.weapon.ItemGunBase; + import net.minecraft.client.model.ModelBase; import net.minecraft.client.model.ModelRenderer; import net.minecraft.entity.Entity; +import net.minecraft.item.ItemStack; -public class ModelMIRVLauncher extends ModelBase -{ - //fields - ModelRenderer Shape1; - ModelRenderer Shape2; - ModelRenderer Shape3; - ModelRenderer Shape4; - ModelRenderer Shape5; - ModelRenderer Shape6; - ModelRenderer Shape7; - ModelRenderer Shape8; - ModelRenderer Shape9; - ModelRenderer Shape10; - ModelRenderer Shape11; - ModelRenderer Shape12; - ModelRenderer Shape13; - ModelRenderer Shape14; - ModelRenderer Shape15; - ModelRenderer Shape16; - ModelRenderer Shape17; - ModelRenderer Shape18; - ModelRenderer Shape27; - ModelRenderer Shape28; - ModelRenderer Shape29; - ModelRenderer Shape30; - ModelRenderer Shape31; - ModelRenderer Shape32; - ModelRenderer Shape33; - ModelRenderer Shape19; - ModelRenderer Shape20; - ModelRenderer Shape21; - ModelRenderer Shape22; - - public ModelMIRVLauncher() - { - textureWidth = 128; - textureHeight = 64; - - Shape1 = new ModelRenderer(this, 0, 0); - Shape1.addBox(0F, 0F, 0F, 40, 2, 4); - Shape1.setRotationPoint(-20F, 0F, 0F); - Shape1.setTextureSize(128, 64); - Shape1.mirror = true; - setRotation(Shape1, 0F, 0F, 0F); - Shape2 = new ModelRenderer(this, 0, 6); - Shape2.addBox(0F, 0F, 0F, 6, 2, 2); - Shape2.setRotationPoint(-19F, 2F, 1F); - Shape2.setTextureSize(128, 64); - Shape2.mirror = true; - setRotation(Shape2, 0F, 0F, 0F); - Shape3 = new ModelRenderer(this, 0, 10); - Shape3.addBox(0F, 0F, 0F, 1, 4, 1); - Shape3.setRotationPoint(-12F, 2F, 1.5F); - Shape3.setTextureSize(128, 64); - Shape3.mirror = true; - setRotation(Shape3, 0F, 0F, 0F); - Shape4 = new ModelRenderer(this, 16, 6); - Shape4.addBox(0F, 0F, 0F, 6, 1, 4); - Shape4.setRotationPoint(-10F, 2F, 0F); - Shape4.setTextureSize(128, 64); - Shape4.mirror = true; - setRotation(Shape4, 0F, 0F, 0F); - Shape5 = new ModelRenderer(this, 0, 15); - Shape5.addBox(0F, 0F, 0F, 2, 3, 1); - Shape5.setRotationPoint(-7F, 3F, 1.5F); - Shape5.setTextureSize(128, 64); - Shape5.mirror = true; - setRotation(Shape5, 0F, 0F, 0F); - Shape6 = new ModelRenderer(this, 4, 10); - Shape6.addBox(0F, 0F, 0F, 3, 3, 1); - Shape6.setRotationPoint(-10F, 3F, 1.5F); - Shape6.setTextureSize(128, 64); - Shape6.mirror = true; - setRotation(Shape6, 0F, 0F, 0F); - Shape7 = new ModelRenderer(this, 12, 10); - Shape7.addBox(-1F, 0F, 0F, 1, 2, 1); - Shape7.setRotationPoint(-7F, 3F, 1.5F); - Shape7.setTextureSize(128, 64); - Shape7.mirror = true; - setRotation(Shape7, 0F, 0F, 0.5235988F); - Shape8 = new ModelRenderer(this, 36, 6); - Shape8.addBox(0F, 0F, 0F, 10, 1, 4); - Shape8.setRotationPoint(-3F, 2F, 0F); - Shape8.setTextureSize(128, 64); - Shape8.mirror = true; - setRotation(Shape8, 0F, 0F, 0F); - Shape9 = new ModelRenderer(this, 64, 6); - Shape9.addBox(0F, 0F, 0F, 2, 3, 2); - Shape9.setRotationPoint(7F, 2F, 1F); - Shape9.setTextureSize(128, 64); - Shape9.mirror = true; - setRotation(Shape9, 0F, 0F, 0F); - Shape10 = new ModelRenderer(this, 88, 0); - Shape10.addBox(0F, 0F, 0F, 3, 4, 4); - Shape10.setRotationPoint(17F, -4F, 0F); - Shape10.setTextureSize(128, 64); - Shape10.mirror = true; - setRotation(Shape10, 0F, 0F, 0F); - Shape11 = new ModelRenderer(this, 72, 6); - Shape11.addBox(0F, 0F, 0F, 2, 3, 1); - Shape11.setRotationPoint(18F, -7F, 0F); - Shape11.setTextureSize(128, 64); - Shape11.mirror = true; - setRotation(Shape11, 0F, 0F, 0F); - Shape12 = new ModelRenderer(this, 78, 6); - Shape12.addBox(0F, 0F, 0F, 2, 3, 1); - Shape12.setRotationPoint(18F, -7F, 3F); - Shape12.setTextureSize(128, 64); - Shape12.mirror = true; - setRotation(Shape12, 0F, 0F, 0F); - Shape13 = new ModelRenderer(this, 0, 19); - Shape13.addBox(0F, -4F, 0F, 22, 4, 0); - Shape13.setRotationPoint(-17F, 0F, 1F); - Shape13.setTextureSize(128, 64); - Shape13.mirror = true; - setRotation(Shape13, 0.4363323F, 0F, 0F); - Shape14 = new ModelRenderer(this, 16, 11); - Shape14.addBox(0F, 0F, 0F, 33, 1, 1); - Shape14.setRotationPoint(-17F, -4F, -1F); - Shape14.setTextureSize(128, 64); - Shape14.mirror = true; - setRotation(Shape14, 0F, 0F, 0F); - Shape15 = new ModelRenderer(this, 0, 23); - Shape15.addBox(0F, -4F, 0F, 22, 4, 0); - Shape15.setRotationPoint(-17F, 0F, 3F); - Shape15.setTextureSize(128, 64); - Shape15.mirror = true; - setRotation(Shape15, -0.4363323F, 0F, 0F); - Shape16 = new ModelRenderer(this, 16, 13); - Shape16.addBox(0F, 0F, 0F, 33, 1, 1); - Shape16.setRotationPoint(-17F, -4F, 4F); - Shape16.setTextureSize(128, 64); - Shape16.mirror = true; - setRotation(Shape16, 0F, 0F, 0F); - Shape17 = new ModelRenderer(this, 44, 25); - Shape17.addBox(0F, -4F, 0F, 8, 4, 0); - Shape17.setRotationPoint(8F, 0F, 1F); - Shape17.setTextureSize(128, 64); - Shape17.mirror = true; - setRotation(Shape17, 0.4363323F, 0F, 0F); - Shape18 = new ModelRenderer(this, 44, 21); - Shape18.addBox(0F, -4F, 0F, 8, 4, 0); - Shape18.setRotationPoint(8F, 0F, 3F); - Shape18.setTextureSize(128, 64); - Shape18.mirror = true; - setRotation(Shape18, -0.4363323F, 0F, 0F); - Shape27 = new ModelRenderer(this, 18, 27); - Shape27.addBox(0F, 0F, 0F, 2, 5, 1); - Shape27.setRotationPoint(13F, -5F, 1.5F); - Shape27.setTextureSize(128, 64); - Shape27.mirror = true; - setRotation(Shape27, 0F, 0F, 0F); - Shape28 = new ModelRenderer(this, 84, 6); - Shape28.addBox(0F, 0F, 0F, 1, 3, 1); - Shape28.setRotationPoint(16F, -3F, 1.5F); - Shape28.setTextureSize(128, 64); - Shape28.mirror = true; - setRotation(Shape28, 0F, 0F, 0F); - Shape29 = new ModelRenderer(this, 6, 15); - Shape29.addBox(0F, 0F, 0F, 10, 2, 2); - Shape29.setRotationPoint(3F, -2F, 1F); - Shape29.setTextureSize(128, 64); - Shape29.mirror = true; - setRotation(Shape29, 0F, 0F, 0F); - Shape30 = new ModelRenderer(this, 30, 15); - Shape30.addBox(0F, 0F, 0F, 12, 2, 2); - Shape30.setRotationPoint(-7F, -1F, 4F); - Shape30.setTextureSize(128, 64); - Shape30.mirror = true; - setRotation(Shape30, 0F, 0F, 0F); - Shape31 = new ModelRenderer(this, 44, 19); - Shape31.addBox(0F, 0F, 0F, 14, 1, 1); - Shape31.setRotationPoint(5F, -0.5F, 4.5F); - Shape31.setTextureSize(128, 64); - Shape31.mirror = true; - setRotation(Shape31, 0F, 0F, 0F); - Shape32 = new ModelRenderer(this, 12, 27); - Shape32.addBox(0F, 0F, 0F, 1, 1, 1); - Shape32.setRotationPoint(18F, -0.5F, 3.5F); - Shape32.setTextureSize(128, 64); - Shape32.mirror = true; - setRotation(Shape32, 0F, 0F, 0F); - Shape33 = new ModelRenderer(this, 24, 29); - Shape33.addBox(0F, 0F, 0F, 21, 1, 2); - Shape33.setRotationPoint(-18F, -1F, 1F); - Shape33.setTextureSize(128, 64); - Shape33.mirror = true; - setRotation(Shape33, 0F, 0F, 0F); - Shape19 = new ModelRenderer(this, 0, 33); - Shape19.addBox(0F, 0F, 0F, 10, 4, 2); - Shape19.setRotationPoint(-9F, -5F, 1F); - Shape19.setTextureSize(128, 64); - Shape19.mirror = true; - setRotation(Shape19, 0F, 0F, 0F); - Shape20 = new ModelRenderer(this, 0, 39); - Shape20.addBox(0F, 0F, 0F, 10, 2, 4); - Shape20.setRotationPoint(-9F, -4F, 0F); - Shape20.setTextureSize(128, 64); - Shape20.mirror = true; - setRotation(Shape20, 0F, 0F, 0F); - Shape21 = new ModelRenderer(this, 0, 45); - Shape21.addBox(0F, 0F, 0F, 10, 3, 3); - Shape21.setRotationPoint(-9F, -4.5F, 0.5F); - Shape21.setTextureSize(128, 64); - Shape21.mirror = true; - setRotation(Shape21, 0F, 0F, 0F); - Shape22 = new ModelRenderer(this, 0, 51); - Shape22.addBox(0F, 0F, 0F, 4, 1, 1); - Shape22.setRotationPoint(-6F, -6F, 1F); - Shape22.setTextureSize(128, 64); - Shape22.mirror = true; - setRotation(Shape22, 0F, 0F, 0F); - } - - @Override -public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) - { - super.render(entity, f, f1, f2, f3, f4, f5); - setRotationAngles(f, f1, f2, f3, f4, f5, entity); - Shape1.render(f5); - GL11.glDisable(GL11.GL_CULL_FACE); - Shape2.render(f5); - GL11.glEnable(GL11.GL_CULL_FACE); - Shape3.render(f5); - Shape4.render(f5); - Shape5.render(f5); - GL11.glDisable(GL11.GL_CULL_FACE); - Shape6.render(f5); - GL11.glEnable(GL11.GL_CULL_FACE); - Shape7.render(f5); - Shape8.render(f5); - GL11.glDisable(GL11.GL_CULL_FACE); - Shape9.render(f5); - GL11.glEnable(GL11.GL_CULL_FACE); - Shape10.render(f5); - Shape11.render(f5); - Shape12.render(f5); - Shape13.render(f5); - Shape14.render(f5); - Shape15.render(f5); - Shape16.render(f5); - Shape17.render(f5); - Shape18.render(f5); - Shape27.render(f5); - Shape28.render(f5); - Shape29.render(f5); - Shape30.render(f5); - Shape31.render(f5); - Shape32.render(f5); - Shape33.render(f5); - Shape19.render(f5); - Shape20.render(f5); - Shape21.render(f5); - GL11.glDisable(GL11.GL_CULL_FACE); - Shape22.render(f5); - GL11.glEnable(GL11.GL_CULL_FACE); - } - - private void setRotation(ModelRenderer model, float x, float y, float z) - { - model.rotateAngleX = x; - model.rotateAngleY = y; - model.rotateAngleZ = z; - } - - @Override -public void setRotationAngles(float f, float f1, float f2, float f3, float f4, float f5, Entity entity) - { - super.setRotationAngles(f, f1, f2, f3, f4, f5, entity); - } +public class ModelMIRVLauncher extends ModelBase { + // fields + ModelRenderer Shape1; + ModelRenderer Shape2; + ModelRenderer Shape3; + ModelRenderer Shape4; + ModelRenderer Shape5; + ModelRenderer Shape6; + ModelRenderer Shape7; + ModelRenderer Shape8; + ModelRenderer Shape9; + ModelRenderer Shape10; + ModelRenderer Shape11; + ModelRenderer Shape12; + ModelRenderer Shape13; + ModelRenderer Shape14; + ModelRenderer Shape15; + ModelRenderer Shape16; + ModelRenderer Shape17; + ModelRenderer Shape18; + ModelRenderer Shape27; + ModelRenderer Shape28; + ModelRenderer Shape29; + ModelRenderer Shape30; + ModelRenderer Shape31; + ModelRenderer Shape32; + ModelRenderer Shape33; + ModelRenderer Shape19; + ModelRenderer Shape20; + ModelRenderer Shape21; + ModelRenderer Shape22; + + public ModelMIRVLauncher() { + textureWidth = 128; + textureHeight = 64; + + Shape1 = new ModelRenderer(this, 0, 0); + Shape1.addBox(0F, 0F, 0F, 40, 2, 4); + Shape1.setRotationPoint(-20F, 0F, 0F); + Shape1.setTextureSize(128, 64); + Shape1.mirror = true; + setRotation(Shape1, 0F, 0F, 0F); + Shape2 = new ModelRenderer(this, 0, 6); + Shape2.addBox(0F, 0F, 0F, 6, 2, 2); + Shape2.setRotationPoint(-19F, 2F, 1F); + Shape2.setTextureSize(128, 64); + Shape2.mirror = true; + setRotation(Shape2, 0F, 0F, 0F); + Shape3 = new ModelRenderer(this, 0, 10); + Shape3.addBox(0F, 0F, 0F, 1, 4, 1); + Shape3.setRotationPoint(-12F, 2F, 1.5F); + Shape3.setTextureSize(128, 64); + Shape3.mirror = true; + setRotation(Shape3, 0F, 0F, 0F); + Shape4 = new ModelRenderer(this, 16, 6); + Shape4.addBox(0F, 0F, 0F, 6, 1, 4); + Shape4.setRotationPoint(-10F, 2F, 0F); + Shape4.setTextureSize(128, 64); + Shape4.mirror = true; + setRotation(Shape4, 0F, 0F, 0F); + Shape5 = new ModelRenderer(this, 0, 15); + Shape5.addBox(0F, 0F, 0F, 2, 3, 1); + Shape5.setRotationPoint(-7F, 3F, 1.5F); + Shape5.setTextureSize(128, 64); + Shape5.mirror = true; + setRotation(Shape5, 0F, 0F, 0F); + Shape6 = new ModelRenderer(this, 4, 10); + Shape6.addBox(0F, 0F, 0F, 3, 3, 1); + Shape6.setRotationPoint(-10F, 3F, 1.5F); + Shape6.setTextureSize(128, 64); + Shape6.mirror = true; + setRotation(Shape6, 0F, 0F, 0F); + Shape7 = new ModelRenderer(this, 12, 10); + Shape7.addBox(-1F, 0F, 0F, 1, 2, 1); + Shape7.setRotationPoint(-7F, 3F, 1.5F); + Shape7.setTextureSize(128, 64); + Shape7.mirror = true; + setRotation(Shape7, 0F, 0F, 0.5235988F); + Shape8 = new ModelRenderer(this, 36, 6); + Shape8.addBox(0F, 0F, 0F, 10, 1, 4); + Shape8.setRotationPoint(-3F, 2F, 0F); + Shape8.setTextureSize(128, 64); + Shape8.mirror = true; + setRotation(Shape8, 0F, 0F, 0F); + Shape9 = new ModelRenderer(this, 64, 6); + Shape9.addBox(0F, 0F, 0F, 2, 3, 2); + Shape9.setRotationPoint(7F, 2F, 1F); + Shape9.setTextureSize(128, 64); + Shape9.mirror = true; + setRotation(Shape9, 0F, 0F, 0F); + Shape10 = new ModelRenderer(this, 88, 0); + Shape10.addBox(0F, 0F, 0F, 3, 4, 4); + Shape10.setRotationPoint(17F, -4F, 0F); + Shape10.setTextureSize(128, 64); + Shape10.mirror = true; + setRotation(Shape10, 0F, 0F, 0F); + Shape11 = new ModelRenderer(this, 72, 6); + Shape11.addBox(0F, 0F, 0F, 2, 3, 1); + Shape11.setRotationPoint(18F, -7F, 0F); + Shape11.setTextureSize(128, 64); + Shape11.mirror = true; + setRotation(Shape11, 0F, 0F, 0F); + Shape12 = new ModelRenderer(this, 78, 6); + Shape12.addBox(0F, 0F, 0F, 2, 3, 1); + Shape12.setRotationPoint(18F, -7F, 3F); + Shape12.setTextureSize(128, 64); + Shape12.mirror = true; + setRotation(Shape12, 0F, 0F, 0F); + Shape13 = new ModelRenderer(this, 0, 19); + Shape13.addBox(0F, -4F, 0F, 22, 4, 0); + Shape13.setRotationPoint(-17F, 0F, 1F); + Shape13.setTextureSize(128, 64); + Shape13.mirror = true; + setRotation(Shape13, 0.4363323F, 0F, 0F); + Shape14 = new ModelRenderer(this, 16, 11); + Shape14.addBox(0F, 0F, 0F, 33, 1, 1); + Shape14.setRotationPoint(-17F, -4F, -1F); + Shape14.setTextureSize(128, 64); + Shape14.mirror = true; + setRotation(Shape14, 0F, 0F, 0F); + Shape15 = new ModelRenderer(this, 0, 23); + Shape15.addBox(0F, -4F, 0F, 22, 4, 0); + Shape15.setRotationPoint(-17F, 0F, 3F); + Shape15.setTextureSize(128, 64); + Shape15.mirror = true; + setRotation(Shape15, -0.4363323F, 0F, 0F); + Shape16 = new ModelRenderer(this, 16, 13); + Shape16.addBox(0F, 0F, 0F, 33, 1, 1); + Shape16.setRotationPoint(-17F, -4F, 4F); + Shape16.setTextureSize(128, 64); + Shape16.mirror = true; + setRotation(Shape16, 0F, 0F, 0F); + Shape17 = new ModelRenderer(this, 44, 25); + Shape17.addBox(0F, -4F, 0F, 8, 4, 0); + Shape17.setRotationPoint(8F, 0F, 1F); + Shape17.setTextureSize(128, 64); + Shape17.mirror = true; + setRotation(Shape17, 0.4363323F, 0F, 0F); + Shape18 = new ModelRenderer(this, 44, 21); + Shape18.addBox(0F, -4F, 0F, 8, 4, 0); + Shape18.setRotationPoint(8F, 0F, 3F); + Shape18.setTextureSize(128, 64); + Shape18.mirror = true; + setRotation(Shape18, -0.4363323F, 0F, 0F); + Shape27 = new ModelRenderer(this, 18, 27); + Shape27.addBox(0F, 0F, 0F, 2, 5, 1); + Shape27.setRotationPoint(13F, -5F, 1.5F); + Shape27.setTextureSize(128, 64); + Shape27.mirror = true; + setRotation(Shape27, 0F, 0F, 0F); + Shape28 = new ModelRenderer(this, 84, 6); + Shape28.addBox(0F, 0F, 0F, 1, 3, 1); + Shape28.setRotationPoint(16F, -3F, 1.5F); + Shape28.setTextureSize(128, 64); + Shape28.mirror = true; + setRotation(Shape28, 0F, 0F, 0F); + Shape29 = new ModelRenderer(this, 6, 15); + Shape29.addBox(0F, 0F, 0F, 10, 2, 2); + Shape29.setRotationPoint(3F, -2F, 1F); + Shape29.setTextureSize(128, 64); + Shape29.mirror = true; + setRotation(Shape29, 0F, 0F, 0F); + Shape30 = new ModelRenderer(this, 30, 15); + Shape30.addBox(0F, 0F, 0F, 12, 2, 2); + Shape30.setRotationPoint(-7F, -1F, 4F); + Shape30.setTextureSize(128, 64); + Shape30.mirror = true; + setRotation(Shape30, 0F, 0F, 0F); + Shape31 = new ModelRenderer(this, 44, 19); + Shape31.addBox(0F, 0F, 0F, 14, 1, 1); + Shape31.setRotationPoint(5F, -0.5F, 4.5F); + Shape31.setTextureSize(128, 64); + Shape31.mirror = true; + setRotation(Shape31, 0F, 0F, 0F); + Shape32 = new ModelRenderer(this, 12, 27); + Shape32.addBox(0F, 0F, 0F, 1, 1, 1); + Shape32.setRotationPoint(18F, -0.5F, 3.5F); + Shape32.setTextureSize(128, 64); + Shape32.mirror = true; + setRotation(Shape32, 0F, 0F, 0F); + Shape33 = new ModelRenderer(this, 24, 29); + Shape33.addBox(0F, 0F, 0F, 21, 1, 2); + Shape33.setRotationPoint(-18F, -1F, 1F); + Shape33.setTextureSize(128, 64); + Shape33.mirror = true; + setRotation(Shape33, 0F, 0F, 0F); + Shape19 = new ModelRenderer(this, 0, 33); + Shape19.addBox(0F, 0F, 0F, 10, 4, 2); + Shape19.setRotationPoint(-9F, -5F, 1F); + Shape19.setTextureSize(128, 64); + Shape19.mirror = true; + setRotation(Shape19, 0F, 0F, 0F); + Shape20 = new ModelRenderer(this, 0, 39); + Shape20.addBox(0F, 0F, 0F, 10, 2, 4); + Shape20.setRotationPoint(-9F, -4F, 0F); + Shape20.setTextureSize(128, 64); + Shape20.mirror = true; + setRotation(Shape20, 0F, 0F, 0F); + Shape21 = new ModelRenderer(this, 0, 45); + Shape21.addBox(0F, 0F, 0F, 10, 3, 3); + Shape21.setRotationPoint(-9F, -4.5F, 0.5F); + Shape21.setTextureSize(128, 64); + Shape21.mirror = true; + setRotation(Shape21, 0F, 0F, 0F); + Shape22 = new ModelRenderer(this, 0, 51); + Shape22.addBox(0F, 0F, 0F, 4, 1, 1); + Shape22.setRotationPoint(-6F, -6F, 1F); + Shape22.setTextureSize(128, 64); + Shape22.mirror = true; + setRotation(Shape22, 0F, 0F, 0F); + } + + public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5, ItemStack item) { + super.render(entity, f, f1, f2, f3, f4, f5); + setRotationAngles(f, f1, f2, f3, f4, f5, entity); + Shape1.render(f5); + GL11.glDisable(GL11.GL_CULL_FACE); + Shape2.render(f5); + GL11.glEnable(GL11.GL_CULL_FACE); + Shape3.render(f5); + Shape4.render(f5); + Shape5.render(f5); + GL11.glDisable(GL11.GL_CULL_FACE); + Shape6.render(f5); + GL11.glEnable(GL11.GL_CULL_FACE); + Shape7.render(f5); + Shape8.render(f5); + GL11.glDisable(GL11.GL_CULL_FACE); + Shape9.render(f5); + GL11.glEnable(GL11.GL_CULL_FACE); + Shape10.render(f5); + Shape11.render(f5); + Shape12.render(f5); + Shape13.render(f5); + Shape14.render(f5); + Shape15.render(f5); + Shape16.render(f5); + Shape17.render(f5); + Shape18.render(f5); + Shape27.render(f5); + Shape28.render(f5); + Shape29.render(f5); + Shape30.render(f5); + Shape31.render(f5); + Shape32.render(f5); + Shape33.render(f5); + + int ammo = ItemGunBase.getMag(item); + if(ammo > 0) { + Shape19.render(f5); + Shape20.render(f5); + Shape21.render(f5); + GL11.glDisable(GL11.GL_CULL_FACE); + Shape22.render(f5); + GL11.glEnable(GL11.GL_CULL_FACE); + } + } + + private void setRotation(ModelRenderer model, float x, float y, float z) { + model.rotateAngleX = x; + model.rotateAngleY = y; + model.rotateAngleZ = z; + } + + @Override + public void setRotationAngles(float f, float f1, float f2, float f3, float f4, float f5, Entity entity) { + super.setRotationAngles(f, f1, f2, f3, f4, f5, entity); + } } diff --git a/com/hbm/render/model/ModelNightmare2.java b/com/hbm/render/model/ModelNightmare2.java index 565ec6997..143dfe549 100644 --- a/com/hbm/render/model/ModelNightmare2.java +++ b/com/hbm/render/model/ModelNightmare2.java @@ -12,6 +12,7 @@ import com.hbm.items.weapon.ItemGunBase; import net.minecraft.client.model.ModelBase; import net.minecraft.client.model.ModelRenderer; +import net.minecraft.client.renderer.Tessellator; import net.minecraft.entity.Entity; import net.minecraft.item.ItemStack; @@ -231,6 +232,23 @@ public class ModelNightmare2 extends ModelBase { Bullet5.render(f5); if(ammo > 5) Bullet6.render(f5); + + GL11.glPushMatrix(); + GL11.glDisable(GL11.GL_TEXTURE_2D); + GL11.glDisable(GL11.GL_LIGHTING); + + Tessellator tessellator = Tessellator.instance; + int color = 0xFF0000; + + tessellator.startDrawing(3); + tessellator.setColorOpaque_I(color); + tessellator.addVertex(-19F / 16F, -3F / 16F, -1F / 16F); + tessellator.addVertex(-150, 0, 0); + tessellator.draw(); + + GL11.glEnable(GL11.GL_LIGHTING); + GL11.glEnable(GL11.GL_TEXTURE_2D); + GL11.glPopMatrix(); } private void setRotation(ModelRenderer model, float x, float y, float z) { diff --git a/com/hbm/sound/AudioDynamic.java b/com/hbm/sound/AudioDynamic.java new file mode 100644 index 000000000..fd1237c44 --- /dev/null +++ b/com/hbm/sound/AudioDynamic.java @@ -0,0 +1,43 @@ +package com.hbm.sound; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.client.Minecraft; +import net.minecraft.client.audio.MovingSound; +import net.minecraft.client.audio.PositionedSound; +import net.minecraft.util.ResourceLocation; + +@SideOnly(Side.CLIENT) +public class AudioDynamic extends MovingSound { + + protected AudioDynamic(ResourceLocation loc) { + super(loc); + this.repeat = true; + } + + public void setPosition(float x, float y, float z) { + this.xPosF = x; + this.yPosF = y; + this.zPosF = z; + } + + @Override + public void update() { } + + public void start() { + Minecraft.getMinecraft().getSoundHandler().playSound(this); + } + + public void stop() { + Minecraft.getMinecraft().getSoundHandler().stopSound(this); + } + + public void setVolume(float volume) { + this.volume = volume; + } + + public void setPitch(float pitch) { + this.field_147663_c = pitch; + } + +} diff --git a/com/hbm/sound/AudioWrapper.java b/com/hbm/sound/AudioWrapper.java new file mode 100644 index 000000000..db2a3205b --- /dev/null +++ b/com/hbm/sound/AudioWrapper.java @@ -0,0 +1,17 @@ +package com.hbm.sound; + +public class AudioWrapper { + + public void updatePosition(float x, float y, float z) { } + + public void updateVolume(float pitch) { } + + public void updatePitch(float pitch) { } + + public void setDoesRepeat(boolean repeats) { } + + public void startSound() { } + + public void stopSound() { } + +} diff --git a/com/hbm/sound/AudioWrapperClient.java b/com/hbm/sound/AudioWrapperClient.java new file mode 100644 index 000000000..d14476113 --- /dev/null +++ b/com/hbm/sound/AudioWrapperClient.java @@ -0,0 +1,37 @@ +package com.hbm.sound; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.client.audio.MovingSound; +import net.minecraft.util.ResourceLocation; + +@SideOnly(Side.CLIENT) +public class AudioWrapperClient extends AudioWrapper { + + AudioDynamic sound; + + public AudioWrapperClient(ResourceLocation source) { + sound = new AudioDynamic(source); + } + + public void updatePosition(float x, float y, float z) { + sound.setPosition(x, y, z); + } + + public void updateVolume(float volume) { + sound.setVolume(volume); + } + + public void updatePitch(float pitch) { + sound.setPitch(pitch); + } + + public void startSound() { + sound.start(); + } + + public void stopSound() { + sound.stop(); + } + +} diff --git a/com/hbm/tileentity/machine/TileEntitySoyuzLauncher.java b/com/hbm/tileentity/machine/TileEntitySoyuzLauncher.java index f6fefd0e3..aa20eebb2 100644 --- a/com/hbm/tileentity/machine/TileEntitySoyuzLauncher.java +++ b/com/hbm/tileentity/machine/TileEntitySoyuzLauncher.java @@ -1,12 +1,290 @@ package com.hbm.tileentity.machine; +import java.util.ArrayList; +import java.util.List; + +import com.hbm.entity.missile.EntityMissileCustom; +import com.hbm.handler.MissileStruct; +import com.hbm.handler.FluidTypeHandler.FluidType; +import com.hbm.interfaces.IConsumer; +import com.hbm.interfaces.IFluidAcceptor; +import com.hbm.interfaces.IFluidContainer; +import com.hbm.inventory.FluidTank; +import com.hbm.items.ModItems; +import com.hbm.items.weapon.ItemCustomMissile; +import com.hbm.items.weapon.ItemMissile; +import com.hbm.items.weapon.ItemMissile.FuelType; +import com.hbm.items.weapon.ItemMissile.PartSize; +import com.hbm.lib.Library; +import com.hbm.main.MainRegistry; +import com.hbm.packet.AuxElectricityPacket; +import com.hbm.packet.AuxGaugePacket; +import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.TEMissileMultipartPacket; + import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.ISidedInventory; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.AxisAlignedBB; -public class TileEntitySoyuzLauncher extends TileEntity { +public class TileEntitySoyuzLauncher extends TileEntity implements ISidedInventory, IConsumer, IFluidContainer, IFluidAcceptor { + private ItemStack slots[]; + + public long power; + public static final long maxPower = 100000; + public FluidTank[] tanks; + + public MissileStruct load; + + private static final int[] access = new int[] { 0 }; + + private String customName; + + public TileEntitySoyuzLauncher() { + slots = new ItemStack[27]; + tanks = new FluidTank[2]; + tanks[0] = new FluidTank(FluidType.KEROSENE, 100000, 0); + tanks[1] = new FluidTank(FluidType.ACID, 100000, 1); + } + + @Override + public int getSizeInventory() { + return slots.length; + } + + @Override + public ItemStack getStackInSlot(int i) { + return slots[i]; + } + + @Override + public ItemStack getStackInSlotOnClosing(int i) { + if (slots[i] != null) { + ItemStack itemStack = slots[i]; + slots[i] = null; + return itemStack; + } else { + return null; + } + } + + @Override + public void setInventorySlotContents(int i, ItemStack itemStack) { + slots[i] = itemStack; + if (itemStack != null && itemStack.stackSize > getInventoryStackLimit()) { + itemStack.stackSize = getInventoryStackLimit(); + } + } + + @Override + public String getInventoryName() { + return this.hasCustomInventoryName() ? this.customName : "container.launchTable"; + } + + @Override + public boolean hasCustomInventoryName() { + return this.customName != null && this.customName.length() > 0; + } + + public void setCustomName(String name) { + this.customName = name; + } + + @Override + public int getInventoryStackLimit() { + return 64; + } + + @Override + public boolean isUseableByPlayer(EntityPlayer player) { + if (worldObj.getTileEntity(xCoord, yCoord, zCoord) != this) { + return false; + } else { + return player.getDistanceSq(xCoord + 0.5D, yCoord + 0.5D, zCoord + 0.5D) <= 64; + } + } + + // You scrubs aren't needed for anything (right now) + @Override + public void openInventory() { + } + + @Override + public void closeInventory() { + } + + @Override + public boolean isItemValidForSlot(int i, ItemStack stack) { + return false; + } + + @Override + public ItemStack decrStackSize(int i, int j) { + if (slots[i] != null) { + if (slots[i].stackSize <= j) { + ItemStack itemStack = slots[i]; + slots[i] = null; + return itemStack; + } + ItemStack itemStack1 = slots[i].splitStack(j); + if (slots[i].stackSize == 0) { + slots[i] = null; + } + + return itemStack1; + } else { + return null; + } + } + + public long getPowerScaled(long i) { + return (power * i) / maxPower; + } + + @Override + public void updateEntity() { + + if (!worldObj.isRemote) { + + tanks[0].loadTank(2, 3, slots); + tanks[1].loadTank(2, 3, slots); + + for (int i = 0; i < 2; i++) + tanks[i].updateTank(xCoord, yCoord, zCoord); + + power = Library.chargeTEFromItems(slots, 5, power, maxPower); + + PacketDispatcher.wrapper.sendToAll(new AuxElectricityPacket(xCoord, yCoord, zCoord, power)); + + } else { + + List entities = worldObj.getEntitiesWithinAABBExcludingEntity(null, AxisAlignedBB.getBoundingBox(xCoord - 0.5, yCoord, zCoord - 0.5, xCoord + 1.5, yCoord + 10, zCoord + 1.5)); + + for(Entity e : entities) { + + if(e instanceof EntityMissileCustom) { + + for(int i = 0; i < 15; i++) + MainRegistry.proxy.spawnParticle(xCoord + 0.5, yCoord + 0.25, zCoord + 0.5, "largelaunchsmoke", null); + + break; + } + } + } + } + + @Override + public void readFromNBT(NBTTagCompound nbt) { + super.readFromNBT(nbt); + NBTTagList list = nbt.getTagList("items", 10); + + tanks[0].readFromNBT(nbt, "fuel"); + tanks[1].readFromNBT(nbt, "oxidizer"); + power = nbt.getLong("power"); + + slots = new ItemStack[getSizeInventory()]; + + for (int i = 0; i < list.tagCount(); i++) { + NBTTagCompound nbt1 = list.getCompoundTagAt(i); + byte b0 = nbt1.getByte("slot"); + if (b0 >= 0 && b0 < slots.length) { + slots[b0] = ItemStack.loadItemStackFromNBT(nbt1); + } + } + } + + @Override + public void writeToNBT(NBTTagCompound nbt) { + super.writeToNBT(nbt); + + NBTTagList list = new NBTTagList(); + + tanks[0].writeToNBT(nbt, "fuel"); + tanks[1].writeToNBT(nbt, "oxidizer"); + nbt.setLong("power", power); + + for (int i = 0; i < slots.length; i++) { + if (slots[i] != null) { + NBTTagCompound nbt1 = new NBTTagCompound(); + nbt1.setByte("slot", (byte) i); + slots[i].writeToNBT(nbt1); + list.appendTag(nbt1); + } + } + nbt.setTag("items", list); + } + + @Override + public int[] getAccessibleSlotsFromSide(int p_94128_1_) { + return access; + } + + @Override + public boolean canInsertItem(int i, ItemStack itemStack, int j) { + return this.isItemValidForSlot(i, itemStack); + } + + @Override + public boolean canExtractItem(int i, ItemStack itemStack, int j) { + return false; + } + + @Override + public int getMaxFluidFill(FluidType type) { + if (type.name().equals(tanks[0].getTankType().name())) + return tanks[0].getMaxFill(); + else if (type.name().equals(tanks[1].getTankType().name())) + return tanks[1].getMaxFill(); + else + return 0; + } + + @Override + public void setFillstate(int fill, int index) { + if (index < 2 && tanks[index] != null) + tanks[index].setFill(fill); + } + + @Override + public void setFluidFill(int fill, FluidType type) { + if (type.name().equals(tanks[0].getTankType().name())) + tanks[0].setFill(fill); + else if (type.name().equals(tanks[1].getTankType().name())) + tanks[1].setFill(fill); + } + + @Override + public void setType(FluidType type, int index) { + if (index < 2 && tanks[index] != null) + tanks[index].setTankType(type); + } + + @Override + public List getTanks() { + List list = new ArrayList(); + list.add(tanks[0]); + list.add(tanks[1]); + + return list; + } + + @Override + public int getFluidFill(FluidType type) { + if (type.name().equals(tanks[0].getTankType().name())) + return tanks[0].getFill(); + else if (type.name().equals(tanks[1].getTankType().name())) + return tanks[1].getFill(); + else + return 0; + } + @Override public AxisAlignedBB getRenderBoundingBox() { return TileEntity.INFINITE_EXTENT_AABB; @@ -18,4 +296,19 @@ public class TileEntitySoyuzLauncher extends TileEntity { { return 65536.0D; } + + @Override + public void setPower(long i) { + this.power = i; + } + + @Override + public long getPower() { + return this.power; + } + + @Override + public long getMaxPower() { + return this.maxPower; + } }