From f84959442623455fe3cc9f14e7abc0389d9b4e9e Mon Sep 17 00:00:00 2001 From: 4zk Date: Sat, 25 Jul 2020 19:06:33 +0300 Subject: [PATCH 01/28] Add Green Dummy and AI Box Actors along with new script to display a different frame when HFlipped --- Base.rte/Actors.ini | 6 + .../Actors/Infantry/GreenDummy/ArmBGA000.bmp | Bin 0 -> 1222 bytes .../Actors/Infantry/GreenDummy/ArmBGA001.bmp | Bin 0 -> 1222 bytes .../Actors/Infantry/GreenDummy/ArmBGA002.bmp | Bin 0 -> 1222 bytes .../Actors/Infantry/GreenDummy/ArmBGA003.bmp | Bin 0 -> 1222 bytes .../Actors/Infantry/GreenDummy/ArmBGA004.bmp | Bin 0 -> 1222 bytes .../Actors/Infantry/GreenDummy/ArmFGA000.bmp | Bin 0 -> 1222 bytes .../Actors/Infantry/GreenDummy/ArmFGA001.bmp | Bin 0 -> 1222 bytes .../Actors/Infantry/GreenDummy/ArmFGA002.bmp | Bin 0 -> 1222 bytes .../Actors/Infantry/GreenDummy/ArmFGA003.bmp | Bin 0 -> 1222 bytes .../Actors/Infantry/GreenDummy/ArmFGA004.bmp | Bin 0 -> 1222 bytes .../Actors/Infantry/GreenDummy/FootBGA000.bmp | Bin 0 -> 1150 bytes .../Actors/Infantry/GreenDummy/FootBGA001.bmp | Bin 0 -> 1150 bytes .../Actors/Infantry/GreenDummy/FootBGA002.bmp | Bin 0 -> 1150 bytes .../Actors/Infantry/GreenDummy/FootBGA003.bmp | Bin 0 -> 1150 bytes .../Actors/Infantry/GreenDummy/FootFGA000.bmp | Bin 0 -> 1150 bytes .../Actors/Infantry/GreenDummy/FootFGA001.bmp | Bin 0 -> 1150 bytes .../Actors/Infantry/GreenDummy/FootFGA002.bmp | Bin 0 -> 1150 bytes .../Actors/Infantry/GreenDummy/FootFGA003.bmp | Bin 0 -> 1150 bytes .../Infantry/GreenDummy/Gibs/HeadGibA.bmp | Bin 0 -> 1238 bytes .../Infantry/GreenDummy/Gibs/RibCageGibA.bmp | Bin 0 -> 1224 bytes .../Infantry/GreenDummy/Gibs/RibCageGibB.bmp | Bin 0 -> 1186 bytes .../Actors/Infantry/GreenDummy/GreenDummy.ini | 915 ++++++++++++++++++ .../Actors/Infantry/GreenDummy/HandBGA.bmp | Bin 0 -> 1118 bytes .../Actors/Infantry/GreenDummy/HandFGA.bmp | Bin 0 -> 1118 bytes Base.rte/Actors/Infantry/GreenDummy/HeadA.bmp | Bin 0 -> 1210 bytes .../Actors/Infantry/GreenDummy/LegBGA000.bmp | Bin 0 -> 1298 bytes .../Actors/Infantry/GreenDummy/LegBGA001.bmp | Bin 0 -> 1298 bytes .../Actors/Infantry/GreenDummy/LegBGA002.bmp | Bin 0 -> 1298 bytes .../Actors/Infantry/GreenDummy/LegBGA003.bmp | Bin 0 -> 1298 bytes .../Actors/Infantry/GreenDummy/LegBGA004.bmp | Bin 0 -> 1298 bytes .../Actors/Infantry/GreenDummy/LegFGA000.bmp | Bin 0 -> 1298 bytes .../Actors/Infantry/GreenDummy/LegFGA001.bmp | Bin 0 -> 1298 bytes .../Actors/Infantry/GreenDummy/LegFGA002.bmp | Bin 0 -> 1298 bytes .../Actors/Infantry/GreenDummy/LegFGA003.bmp | Bin 0 -> 1298 bytes .../Actors/Infantry/GreenDummy/LegFGA004.bmp | Bin 0 -> 1298 bytes .../Actors/Infantry/GreenDummy/TorsoA.bmp | Bin 0 -> 1294 bytes .../GreenDummy/Wounds/GreenWoundA.bmp | Bin 0 -> 1118 bytes .../GreenDummy/Wounds/GreenWoundB.bmp | Bin 0 -> 1126 bytes Base.rte/Actors/Mecha/AIBox/AIBox.ini | 352 +++++++ Base.rte/Actors/Mecha/AIBox/DroneTop000.bmp | Bin 0 -> 1862 bytes Base.rte/Actors/Mecha/AIBox/DroneTop001.bmp | Bin 0 -> 1862 bytes Base.rte/Actors/Mecha/AIBox/LegBG000.bmp | Bin 0 -> 1302 bytes Base.rte/Actors/Mecha/AIBox/LegBG001.bmp | Bin 0 -> 1302 bytes Base.rte/Actors/Mecha/AIBox/LegBG002.bmp | Bin 0 -> 1302 bytes Base.rte/Actors/Mecha/AIBox/LegBG003.bmp | Bin 0 -> 1302 bytes Base.rte/Actors/Mecha/AIBox/LegBG004.bmp | Bin 0 -> 1302 bytes Base.rte/Actors/Mecha/AIBox/LegFG000.bmp | Bin 0 -> 1302 bytes Base.rte/Actors/Mecha/AIBox/LegFG001.bmp | Bin 0 -> 1302 bytes Base.rte/Actors/Mecha/AIBox/LegFG002.bmp | Bin 0 -> 1302 bytes Base.rte/Actors/Mecha/AIBox/LegFG003.bmp | Bin 0 -> 1302 bytes Base.rte/Actors/Mecha/AIBox/LegFG004.bmp | Bin 0 -> 1302 bytes Base.rte/Actors/Mecha/AIBox/MountMobile.bmp | Bin 0 -> 1378 bytes Base.rte/Scripts/Shared/FlippedFrame.lua | 4 + 54 files changed, 1277 insertions(+) create mode 100644 Base.rte/Actors/Infantry/GreenDummy/ArmBGA000.bmp create mode 100644 Base.rte/Actors/Infantry/GreenDummy/ArmBGA001.bmp create mode 100644 Base.rte/Actors/Infantry/GreenDummy/ArmBGA002.bmp create mode 100644 Base.rte/Actors/Infantry/GreenDummy/ArmBGA003.bmp create mode 100644 Base.rte/Actors/Infantry/GreenDummy/ArmBGA004.bmp create mode 100644 Base.rte/Actors/Infantry/GreenDummy/ArmFGA000.bmp create mode 100644 Base.rte/Actors/Infantry/GreenDummy/ArmFGA001.bmp create mode 100644 Base.rte/Actors/Infantry/GreenDummy/ArmFGA002.bmp create mode 100644 Base.rte/Actors/Infantry/GreenDummy/ArmFGA003.bmp create mode 100644 Base.rte/Actors/Infantry/GreenDummy/ArmFGA004.bmp create mode 100644 Base.rte/Actors/Infantry/GreenDummy/FootBGA000.bmp create mode 100644 Base.rte/Actors/Infantry/GreenDummy/FootBGA001.bmp create mode 100644 Base.rte/Actors/Infantry/GreenDummy/FootBGA002.bmp create mode 100644 Base.rte/Actors/Infantry/GreenDummy/FootBGA003.bmp create mode 100644 Base.rte/Actors/Infantry/GreenDummy/FootFGA000.bmp create mode 100644 Base.rte/Actors/Infantry/GreenDummy/FootFGA001.bmp create mode 100644 Base.rte/Actors/Infantry/GreenDummy/FootFGA002.bmp create mode 100644 Base.rte/Actors/Infantry/GreenDummy/FootFGA003.bmp create mode 100644 Base.rte/Actors/Infantry/GreenDummy/Gibs/HeadGibA.bmp create mode 100644 Base.rte/Actors/Infantry/GreenDummy/Gibs/RibCageGibA.bmp create mode 100644 Base.rte/Actors/Infantry/GreenDummy/Gibs/RibCageGibB.bmp create mode 100644 Base.rte/Actors/Infantry/GreenDummy/GreenDummy.ini create mode 100644 Base.rte/Actors/Infantry/GreenDummy/HandBGA.bmp create mode 100644 Base.rte/Actors/Infantry/GreenDummy/HandFGA.bmp create mode 100644 Base.rte/Actors/Infantry/GreenDummy/HeadA.bmp create mode 100644 Base.rte/Actors/Infantry/GreenDummy/LegBGA000.bmp create mode 100644 Base.rte/Actors/Infantry/GreenDummy/LegBGA001.bmp create mode 100644 Base.rte/Actors/Infantry/GreenDummy/LegBGA002.bmp create mode 100644 Base.rte/Actors/Infantry/GreenDummy/LegBGA003.bmp create mode 100644 Base.rte/Actors/Infantry/GreenDummy/LegBGA004.bmp create mode 100644 Base.rte/Actors/Infantry/GreenDummy/LegFGA000.bmp create mode 100644 Base.rte/Actors/Infantry/GreenDummy/LegFGA001.bmp create mode 100644 Base.rte/Actors/Infantry/GreenDummy/LegFGA002.bmp create mode 100644 Base.rte/Actors/Infantry/GreenDummy/LegFGA003.bmp create mode 100644 Base.rte/Actors/Infantry/GreenDummy/LegFGA004.bmp create mode 100644 Base.rte/Actors/Infantry/GreenDummy/TorsoA.bmp create mode 100644 Base.rte/Actors/Infantry/GreenDummy/Wounds/GreenWoundA.bmp create mode 100644 Base.rte/Actors/Infantry/GreenDummy/Wounds/GreenWoundB.bmp create mode 100644 Base.rte/Actors/Mecha/AIBox/AIBox.ini create mode 100644 Base.rte/Actors/Mecha/AIBox/DroneTop000.bmp create mode 100644 Base.rte/Actors/Mecha/AIBox/DroneTop001.bmp create mode 100644 Base.rte/Actors/Mecha/AIBox/LegBG000.bmp create mode 100644 Base.rte/Actors/Mecha/AIBox/LegBG001.bmp create mode 100644 Base.rte/Actors/Mecha/AIBox/LegBG002.bmp create mode 100644 Base.rte/Actors/Mecha/AIBox/LegBG003.bmp create mode 100644 Base.rte/Actors/Mecha/AIBox/LegBG004.bmp create mode 100644 Base.rte/Actors/Mecha/AIBox/LegFG000.bmp create mode 100644 Base.rte/Actors/Mecha/AIBox/LegFG001.bmp create mode 100644 Base.rte/Actors/Mecha/AIBox/LegFG002.bmp create mode 100644 Base.rte/Actors/Mecha/AIBox/LegFG003.bmp create mode 100644 Base.rte/Actors/Mecha/AIBox/LegFG004.bmp create mode 100644 Base.rte/Actors/Mecha/AIBox/MountMobile.bmp create mode 100644 Base.rte/Scripts/Shared/FlippedFrame.lua diff --git a/Base.rte/Actors.ini b/Base.rte/Actors.ini index ef0c688e7..2a320f908 100644 --- a/Base.rte/Actors.ini +++ b/Base.rte/Actors.ini @@ -15,9 +15,15 @@ IncludeFile = Base.rte/Actors/Brains/Case/BrainCase.ini IncludeFile = Base.rte/Actors/Brains/Brainbot/Brainbot.ini +// Infantry + +IncludeFile = Base.rte/Actors/Infantry/GreenDummy/GreenDummy.ini + + // Mecha IncludeFile = Base.rte/Actors/Mecha/Medic/MedicDrone.ini +IncludeFile = Base.rte/Actors/Mecha/AIBox/AIBox.ini // Wildlife diff --git a/Base.rte/Actors/Infantry/GreenDummy/ArmBGA000.bmp b/Base.rte/Actors/Infantry/GreenDummy/ArmBGA000.bmp new file mode 100644 index 0000000000000000000000000000000000000000..55b00f82da3a2d39785ce078f59349c5283a91da GIT binary patch literal 1222 zcmY+EeN0t#7{@=k{x~eAw=g&gB4)&4LS9(ZxhT$z!I77ch&sB+ywo@l0~RbUxP*;Z zyeKO8R%lD-jCd&$hW57H3KZ=UwW+M2MK5s8IhtGJ-fX))@CVA-zUTLQe!u7WexK*} zd(PRCIdnhs&yzB0GFv7H5Zs3{zkXo;z4+zFkFFaShKXfW@%xk)|4bIk)HEVAlSj4P zvTvd&8wd!i<$=%+0#;6wX}*qG;G($lBuz)U*n9E{y%+9~7#q$~HJYGD91?G!33r6V zYkCQeR13{;;Ye}KkM`6CVvOV1%?37@$FT1_%f`|UO4~-ruk+E+?!%_)D3XUwv#{xN zaPeTuDVA=&$V1MXgxCGWq0T-&J@+NO7f0zDonr9XPvWm*bBMmwr3*Aew6lsu%M!S- z@2bIWxiG9fXwG9e3Xk%9#eU)ro*{Q{H`y&6JX1eNX=^Xfof@I6ca)a?>y&?fgQVeq zI50ep^ZO~u%|J;s3Cb*Gd3G}^%0FQFo$vX)ur&8U-V7(9o#SV8>}wNM6cZ`d=`=Q zyD%CHarC@P{>N?PeAg{}eK`LZ;>64^C>u4*YD?}>lYHWcOV^3d*-S`r0?9=gtbZq& ztoi~HPiJ92kxz1O6-tcC!}T#zx72PKQnyK4=MnlZ58&~7P*eq5hDvl^6lpcty!>Gi z+9s8Z5}h(v0e^ePq<>WDJ&knZDNNxh6pqG*O5STf#MP^p@Ob7hhFADh;ad?LMD*HK z#73<_kB_1AqtkrzSvO-N=kSc37hJ+C{+jse!kuIfCskM3nh?hHnb)}WNeQ>lzsc;^ zZ}H#I+eCzhur_=pQ4wLpJhq1Tb&(`Kv7W7Z9R0@+^TMVmD$*0UP!!8xc>-5Hq)$ literal 0 HcmV?d00001 diff --git a/Base.rte/Actors/Infantry/GreenDummy/ArmBGA001.bmp b/Base.rte/Actors/Infantry/GreenDummy/ArmBGA001.bmp new file mode 100644 index 0000000000000000000000000000000000000000..021f9b659d213a077383a2036d851682bd382bac GIT binary patch literal 1222 zcmY+EeN0t#7{@=g{x~eAw=g&gB4)&4LS9(ZxhRf|!I77ch&r;sgc=88z=FjEm#`6w z7exi%3T^3}5ido;(B76?fudcaHkF06=ml;$M{{f3JKJs##2{a@FK+rNB>cAIf6<;Ntn-lMf%dZeSQDmQ}-VGah_%nXFV(3DZm-)Aq=^ ziK1-AFQlFagS+rsGfRf~I%biR(&|&R9PMG>sjKu~yi0s^C@a)R0v>fpy@4j&VN$Q@ zWjInSG{cD_*|~VNr!)~|oWO22vDrM1eb+g*ly_0yF-Bp7m!?iHHdRLvA2!XxrZ2$B zL&>LEk$8!R3vLnG@E3=>2l({-m-Js6r)PYI;p;z1zK+cy`qGy!&%^7B7Q82yKX zqcWnl_lan|Cjt);59 zjkYV_a%1)nhCCjo1vXU`?;5svT|6788ClqOn&Q%x1Jb|2x{3_+`dz|j5#G2P zqq!JI-@6ok+(Gtty}~y@!S5rSockGNi-uWi$v$f0Cx)0bo!IO|f=c5^DoJP4J4s|V z77>3Y6Z^?RlKN{8B!5&JAuChHYgxRyNar=`p?p%12`LEyN z-;uWo3l3sK=o%uzLWp{NJ+T|ZiGOkv+w~X*PaNUJtr1kE#c{DDn&HYguI@=-yfK;U z`=4X-NDkBQ=P~e7Fhehg@kK$nXlhty4o=z2=?U@e7T=13wgB1p=IT0hH56S5lUyA` zPsL2xDK(bV)Sv}!#HPqQk(sk88d^}6)LA&RT;WON)w~|eXKpWk;Qs#pXriaf{24Mw zrp%uux^B_*dcF93K3UiA{TVDhO-?QkyC$cmmIYj{`*W8ET)8bRu6(y^sl?@KX~}iX gdh?e8?x`u47hE^*{-5BU>RnuMxt9vMyO)dcA3E7&-2eap literal 0 HcmV?d00001 diff --git a/Base.rte/Actors/Infantry/GreenDummy/ArmBGA002.bmp b/Base.rte/Actors/Infantry/GreenDummy/ArmBGA002.bmp new file mode 100644 index 0000000000000000000000000000000000000000..41f8303abb754f31440d391d8847fbf91d9b18e9 GIT binary patch literal 1222 zcmZ9MeN0t#7{@=k{x~eAw=g&gB4)&4LS9(Zx%e_NCr4gFBI>{*18N+I0SgybT*8Jd zKt%=L3T^3}AumP3(B76?fudfbHkAdm=!JXDIhtGZGTLs>z4k};+rH;_e$VfDzTfBh z{ho6+WDY+_U_33eCU1)bL4pTR0`~oZ=lu^KK6Kr{Fib3KJHO6&@y%wjNKGS3GkILw zA^RqZvWB3DdL9bzBxtFdO!H055+~&~Culj`&7Koi=({jaa(pBU)mTCvb4a{_CfrdH zujv&yQY|#YiDQ#9Fxyj`h%=61H=9^v9>u=(ENd$}scavmxM7Z_jyY_qjv{&3Gz**V zhm(glon&FkMII@-MP$Pt9PH}n({o?acX5pFu^EQ0|0w=CHizg-UAjOsL_4cov@C%W zdtn`R%ZXv_L@PRqqx1+bZrew~fz#yf=^?wdljjA={-wj zZ$CL-ea~AXKd^gzhN7SEvf+*wr^ic`@U`9b5?WgczxYJoWbc7}Qoq6Ss!a6yt-@y! z-B^gxT#BRjJ&HeWC+BL9@by#l+c3vxe?nQSVb)r5kDBC@Ktj4sVonNS8qXtS2yV><}-lk6~MS5*Nzi8LCd=%8qr6 zHE!bi-shP(l*{x71@ylh&fqIid{GoFni`gwi&O4$dR+4MNZyKq=7-#Sb4?w(8i}q% ziLZ{Kr(ve%NsJ{i+tET-VN>Kxq~~mkh8C7BaTX3OUwBe@y`UTO+1r5+JUBQQP4sl> zKSTP+l>W0s*CU#9b94B7KH1mr{~18Z{|s&Z^;MT^;y?C@ynNUEzlK6^=eOifP0hOk w9&NbXEiL)(N!Qdp!1qM?iM{{djqV4v8Ys>#S+xPc7=l6S_@Avzh z-*e8EtdVAnLMQJ zmVFaN*+@WGJ@1v6Is3lemubu=nH@`Y$Yy7#q$qHJYFY9g=UL33r6# zYkC=uGz-me;z)Ha&Gxh=VvOV1%_cUQ$FT1>%ck;9%G<{&YM7^~V;-BTqlgciW?|D8 z;pD#5Q!Goq$o+*k2yghEL)`;>caz2vlZ@?_&M0I%U^Qc^D9F>AJYPxs)~0FTcR$W4b-e0?AuN8Y7tUahT*K|k%l_9wYIUX?=0ng z1LS`84X=)VOUvX8g+I=*<(3bp*GGl$waxhmt}Tb3{GxBN@8Eu^-(XEe7JB^-;j@Tr z+=& zWH%O*csd*Vi6T<^YfxfT9%zh_x}|o@kh)FUyN@t0;lEYqoQ7W0R1Qu;@g-qXl19>)}(65(iWs^;yELtMRj39ok%llX*B6~2|hK}4@x zO>ER!^!OOMyH4}PN4-prpTj$OUT_JY#A_0(3wM$|oHSi!YeE>FGcR-VgEDTNe~r1% zU+3?UH;4!gVO{ttq9VeGd3Y`H>mx~gbOT%UI0la&=Go0rRAnS^VOK1}l?hzgoy0_A zD%bWs#nj+k#{0JXHzt^kQ~XgaA^6$lgvv6J(y42T>8KR0|U`SPnZ5P zq>oJLKTCAIqB%c5kKgZ?ef`d#!T)^ncs&1!^mttPcaKf|yW;V>T&{e#d+PSenA`oA iYhldo^)8HcOH7yBy&&mhW3tih#YIkU0@ptWfNG!s literal 0 HcmV?d00001 diff --git a/Base.rte/Actors/Infantry/GreenDummy/ArmBGA004.bmp b/Base.rte/Actors/Infantry/GreenDummy/ArmBGA004.bmp new file mode 100644 index 0000000000000000000000000000000000000000..e0cd832bb532cbd38f10af3df7d35edc9d525376 GIT binary patch literal 1222 zcmZ9MeN0t#7{@g?%pv{;nsA4SzowVs zNU_iiCyr$2@@P+KB+59A-E3r=c?$c!i)=6Jq^x~{f_g8F9bRmzjv{f`Gz*))1SbzC zpJP?xRUXN|Lumb<9Pb|B(@S5{e|3_c$$5rv{V4W2Hizg-Ub;XtL_4!Yv@C%WdtNPe z%ZXtfK+8Xcqv%~;s60ZLshSlV=--DQoNJ`EwJL_fOI~c$vx7c9_9o#Rh8H^Z1K9pY@lXjVc%m)tQJ9~r5MgSo~W;7cWWEF`z}(}H$e7R z-}C0^5423plmGJ~JMVdLx;>N&U)!RGz?w4n#V7hEhmReR{0%mgXQ0>Z6F!UZhCGa> zA{>41QSfm)*<-!JH$eVxBb-_I31z#6S!2mNY7$QjF=;xn*@*;|#F12-&enI5$ZRMi z{(L6(GX*5|SEEF!JlYT?c}wn=A$gm$cb{bN`Vel98%0&HrK?2dMvz*Y#Va2bqwP>h zFV!h`7V?*8O6o_I+S5ogp2ifOBH?Iitm6HSd*%S>eC`<9;T`w5q>YbviIa=}0RNh9#sB~S literal 0 HcmV?d00001 diff --git a/Base.rte/Actors/Infantry/GreenDummy/ArmFGA000.bmp b/Base.rte/Actors/Infantry/GreenDummy/ArmFGA000.bmp new file mode 100644 index 0000000000000000000000000000000000000000..31542576c360c9c95acfb933eb86a4a0df5d8929 GIT binary patch literal 1222 zcmY+Ee@s| zIomRa?qT71R7Oo^0Rlh4GL(h&qYLlp-Yox4uYZ;te$64wraM zFTs&&p&2e5DXxXlp4vdPaR$5Dz-IF__WX-%Dea)Nb%cVtSsL1Av8g(Wh&^_J+(X@DH+S$v{UD_+Jv`MuLRrr!&3(5h|M)hE!+&yg z_y?R{Pe^VCN`gsXW+|((n^;}`4yz6fvaan8YX_&LZe8@{d`(ldEKI=*u4-J>)l@V! z(|qkqZcYA1zt_vSz^1B_yM`@6mz)jM%xvsCP07_FxTFNbRm;P5HSB0^VTb!7rS4vG zKKq7OhQFn0Yy#&`GinrwEzyBBS% zN=AuJnX8aLykpWos`Q>ly73sM@DvG0V?!lxwH@cijjMP(^BBV`e5&xR4hke{!&+h@ z*Q3Wp)A`r=RS z_({G$k<0kodGtOTLjSICK5<5friNwa;*z@@ACtU2lDDFu%|q_Jv9bnT4MSJL#aGAB z(=bzaN{l5jRcJvQu_K<5LSCxWB(Yn&|1$e}?pt zDg9@Ou17RyXJ_&Ge6p|4`%e8EvG`w@iXB+GFlolRm)M@?TiWwh{nfpto%kvlQe*j@KUUL8d literal 0 HcmV?d00001 diff --git a/Base.rte/Actors/Infantry/GreenDummy/ArmFGA001.bmp b/Base.rte/Actors/Infantry/GreenDummy/ArmFGA001.bmp new file mode 100644 index 0000000000000000000000000000000000000000..4e38d1f757aca1f80559bfd377850931f65ab8d5 GIT binary patch literal 1222 zcmY+Ee@ssB=*q8G|D~LNe;eG!tqbjd5ABxZn~t zWI-zG#b1TCymLkGKrRnMLM)^ep>MU8DEX6j>R`%vIBff53vw~}t0z+tws$~=x^%XwCNy6|*dr?NRhYi9(Ts-s9AHqFAO zPs7XnJU?@DF7rUeILXa_a=5#Xj|M)Y_wop5N5&Yu`Mvn-*xaHob?E}l5bcsG(Xs?y z99tW4SY8ZkH(JGU+}n@wZ0!M@ht5#8?;NG=T|Ct?h{xBNtseb0G3 zJ$-EW{99ff{*JwYF)Dt(!`jrgZ;ZucgVM07< z%a@Rmx(wZwPWSt#`SRm)1g;Md3S1OiAuRry`0B!)?MNnHS6P?2nBbY0nfS1p+ZSKs z&KIxq&(I$1Nr@~^UPP*WG3k#i!?hxXtjAWePIq$Q#1WoblS*x2CYN?(Ft{_5YrC=; zY02Z}{-^ojNExH=Y^Lw|B>Fem`LrTMG&L-<46mH!Xh8A~N#2TrHVrxVwz@`iH5py8 zi?5EM7hvXZlo(55>d_KbU{mCqNYB|64K1-$;w;=+x$xxh(&n?6PfpDI;Bj$rXriY} z{~6Lpru3gBx*^ewL?T3^QQ6n;y$ojG#>ekAPmDX~-(?8S+2nIM|2Itd_V~+PF=MkK s6XkxtFBqKbnl;1>3`9b51#OxCpF_+*W@LIbXZmsiKT}gPi`l{dF9^9@FaQ7m literal 0 HcmV?d00001 diff --git a/Base.rte/Actors/Infantry/GreenDummy/ArmFGA002.bmp b/Base.rte/Actors/Infantry/GreenDummy/ArmFGA002.bmp new file mode 100644 index 0000000000000000000000000000000000000000..e5190ea52c31f3d7b7ef5224627b4b9c6b7c342a GIT binary patch literal 1222 zcmZ{keN0t#7{@=b{x~eAmoPXAB4)&4LS9(ZxhRf|!I77ch&q@=LX874V8P;oCTzfh zP}GZWg|=kQh?gQ^U~kKH_`n^RdiF)F+ow|5-pue*i;=w;;?BJHhmdR z0#dqIm2{cA3g-xG{DosZgS7ATm^u||WuVZtFzT~9~G()tr%0$Z&II-`o z$8I?>tOIC;r*M><}8 zF$w3gu%9U+d7u_0TIKHMXvtf0w+zYKq@(8qLsy4!d)z3hf-OTODnF96`fQ$lvlMN+ zN=CU(rL&k{JyTLYs??rFy73UE@RSHgYfBBUbsppT^((mD%b3C=e5&xR4GJV`(|Tee zH=@Ty)AQCjK6$T?sfiKXQx^qS@QA%8wz_a9+QUfIRd&XQGJF0x=HDsj*2NcD{P-pQ z7;7RtB$!QM>xc{wCHlUN#BGis;ejpe)MFVseViw@M^c?0&!y5BMyukvwl9&%<`ixm zdX%q^=Q90zK7&t&FuW(64+b;$w+VEn3iKY>J$T)SOMx(1NqY&%&YY7M>)Y&F{s0cz)#v_xJZl6Fpt(&yYGY zrT#3@b&KZG(h^>;SN8SWAA|py&6)Fa|Jj;zx$*-3UC47axklmwX8yLAd8(GA8(Dsi*j=#Sk+(eX30Rrq>$^Prr~L_9?o?g? literal 0 HcmV?d00001 diff --git a/Base.rte/Actors/Infantry/GreenDummy/ArmFGA003.bmp b/Base.rte/Actors/Infantry/GreenDummy/ArmFGA003.bmp new file mode 100644 index 0000000000000000000000000000000000000000..38504e319740157923188238e4a3d5f55e28cd57 GIT binary patch literal 1222 zcma)+eN0tl9LGOse;gLmOBfvA5L4nfA@5~T=b|_=21i~(BI?K>@>=6S4p_K6;1V`q zK`1JyS!he)F2NInT@Q`~Ci& z=XcJwoRND7wnwDbINbna7(;_CfqR+ zujv)IGb}X2#+_~lduK*7@y02fW;2`3lQ>Jxv!$||%8qe%H_Xx8Ifp~lQN)KsvvBAO zunAA^VoB;1?(@tL-S9iddItI6;wKDTnV@%Kn&BJY%6=V(Tl6I_U7#7Fox4Z0EP;)4 zR~=5v#;^{cc~0Ukd!48D9>#U_90dpa$ZPB7@up!a+Xr~EYn-Zq3ED2)r23=ZNE!Q+ zBV*s=`D$9c87Rpn5jmAC%WGwM_1i2vFwC0H8CDO^O5VEY%lVq7Xjzzo=j>YS+FJIu zw$XO=3vPOUWytSmO5jjc@vh-W*2S}dnv;ifrzu`7qADsd?0Oz*sAET4J3IQ%Q`tXA z{-}m~s)Vooj-SZdO86-t`X+~t9+vzK)>P%7*Ov&NMQqb9 zjFvLo{co`Qy$=V90Jim-^diDpDEgEL6CHJU_9~Z7Hoy7c9qV^<_R-VnKSJTLC zDkb@BF3!`tNgJp^iC4M5DPHoH+$}@$HtFa&!G)_s`20Q;Rl$+1vY|MR%(^_DeWx64 zt4el-PL*BCAO18)|>%}U~Oc>=@LNnG2X!bDR# zHx50)cgG8udaIbhXI3&)6vM}!Skct5%mQq=%c)86?GxXMg0=v;_m+Ki=xQ{&5+i$c z3_TMwW2eMe5>tZ~xe*7=qX9?RU*Dri;SDMgN3)#T8wD1H188{Qv*} literal 0 HcmV?d00001 diff --git a/Base.rte/Actors/Infantry/GreenDummy/ArmFGA004.bmp b/Base.rte/Actors/Infantry/GreenDummy/ArmFGA004.bmp new file mode 100644 index 0000000000000000000000000000000000000000..ceb68c7f06505cb6133921b92ba5cd4a558dd780 GIT binary patch literal 1222 zcmb`HeN0tl9LGPn{x~eA*DyE=B4)&4LSF8o&P8!#434~nMAX4aB-A(%0~RbUxP%Q@ z5Q+-E721+HBVLMxp}j4)0zn&5n|fERMK5rRF`8TBUTVAj;6MNG*}l(np7T7v@AvzA zp5Hlpvc~UYwLLDQCQs`Gfr0>()%V9&`+GY-estZyFib3~j$dcJ_!qNTr=}CBnLMl= zl64bB*-2n{Blm~(61ZuOEb|r25*OvQ7kKk@KSwUyWa!#IB*sOsR*fO}A*aL}Xu=&S z@tR(NGtELXTsTu*tD`-wm005(cC(e8=2`58m)TX>OJ&y-#Z5k1yM5SH9YuWDGz*)) z0vGF3dsv%%od=5MiD>$hlYPT{bmcRKu20iHJ7A0$ow z&GE?}Df(tsycsBoCc#;iY{+S6WA(diI6TId?s+zkElS?H=*#(39XXrR`lL;+PAf+sm9dD$N z-BLp0#cb^7i%A)(Ly1*+uq9UVmfS5v@;2$}JI%PMB@)5tKMz!aWR;b?2EG21p1 z7rhnT5li3u7y0tz0o+qp@VKuECh*FBP4?=-on((7O;_2Q5YF7Cms$9*g1c8=W9f_6 z`FFgT$gohhMQkEEGMv~)w&K_xMdD*S*sI4ga_$t*?T)4Tzp^2U@^=C*O znNok2=z2uc=kwwB`(<6f_h;~b%$C>qMax{6@UOBh$2$%*H}~`eIM&b3&(E_m@0NL? X!x!)H6~J zbI#VBhI?2ZPsml1)qR3{1$Ut=KR1@=JEs5vblt!(Of0L8>vMhr^SP{4GqGzXk7#@3 zy@{f1A}F$n`y+Y@TH__hd=0b2O?mBc-Z|3G-s6`UI`=Or2~mWov4lSClzanCxb2d! z=@mFLEHuN7Gu^#>b!4;>Z}i|WTiIkD#j)!&n=5;%?3$#wd6CxcMQo~$B0g-Ig-u_A zn+MWQ5R!I*2VFOaYW|BueZzcq<|~FSOwm6z$Jo`MC0@to6n&{n7iflP=a!3>C2-@| z-H5|-V^|GnuA?|h-{rZQ{UjbdMZw+y@;Z8Xx@C;Y&LN&XF-g_X6dfbisQ%(lQpf+{ z!1xTVALhiHfs$epnp4TDymnSsf5@taG1hh8VC~qv)UAuY?5}BxmW3&J*-Zg9~x_CBFbMkQPG{vh$ctr(K!o;h5mGE^g_zA18gx><9Z?f;;eyQJJT~!Wx(=Oq&h;G@9 z(N>Cc@I8t@=_3F80pT0Q_4|2_&HsY3S;MTi5+ATxsHtFg+!pNmje10E_s$k1ji7kpDvoVjCJ}N`o zqLN*qQ{^tab8^H>@Qg zW<7dRJbfRZY7H^=Na7z|Pf}boDUWYtyPn8M&tab55<^W^GUv(?7^_a^@}5+tTGF|? z?-`~K7cl!l5yLM;Fj{EmOINgLYFK6gZaK?YkNEb9Z$&{{f}DF>Z6mrGg|65oR>#mY zF*9~bjwLyDXkl^K6xkE$Ih&%Ph3840g;RS`c+z;Ks2}sGo68?~aBwi1=;_jbhV+ps z{bz};Pc#=77YPIc@?O95XK?#2=x%SJjER| literal 0 HcmV?d00001 diff --git a/Base.rte/Actors/Infantry/GreenDummy/FootBGA001.bmp b/Base.rte/Actors/Infantry/GreenDummy/FootBGA001.bmp new file mode 100644 index 0000000000000000000000000000000000000000..ca6064cc5f6e0fd8122d0ab1ae3d5d9e672a9fc1 GIT binary patch literal 1150 zcmY+Ee@s*W}z*eGvY^)FtlIGtx(YzcY~S;~?|Gl+`~5!W zea_iXwEa#(*JCnjGP_%Fm*5VR&~qbnzx@^@h^`wLhKXf0aedBDaK4y()qD~(lZUiz zvTvd&YgrQ4%003DELrBI$b1E}(nC$-Vcyz5$d1G389DVgnW^zasL4b==#YE^O}G;z zU(;)GBikIP2W~xO=ClXbaHM7r>_KDB{DWS=jVN zc(^b32oc$5xZiby__jaTJ21*8C%$0h%rt}3b4*ZbeLH(d7q#<<_ltiYzK;$6d*sf%X=wWtL9W>dUc#MIVecv^X+t%Xh9J!~32j(d2N z(l5W~)yW^|nwi7(^8y=g`SJMt)CphDf}iMSH~bP5eUqJgc1isPE9#2STek?GMPmC_ zjLs??!|zb>Q7@(64hi2Vu3t}cX#OXZbsA=~CFiJ#pES}6bka++iK)pTr@D|eZ{|?k zUP_+yM24Pc=0Sg-y&x43!f@{OQR!6UbURm zq?PFDDGYpgl&?P>VrJ?DzL}GPv-l-mlUQB2v+VKY=_(sD;_x1OnVTQia_i)4EPVAk z|D1k?>pTy>dpMi)GxIz~`<+(bTZaGCXpYvoqq`C%zR0Z4q+rosBK%YCO7s?h)LD68vri-*>+J_|bI(!!WU|25!uH@z3XRpPGeTGkI9sDf=dh zvW~^kEi8%ZWAXAia?MvT%Uo2}ALXrsgX}tbk&!e1lA0Jpm>N&`Lr$qT(1hDA^_pIV zGt)vdTsSja!PSx3PJ(e5huO|L^AL{hCs|+JM|IB>rL8{Ndwtkc9YuWDGz*&^fQ$Px zjuDoAjt5F^64Ux8`v*q( z<-)L<&`J*BEPtD4>-Lbe?*xUrhRE;g+GWI z!Z%!*`<-#Gml=UgRmHo8EmarK25N3Tj;*G6wTP^$!f>_lXlpZDy1Lmie3I(nQ3}5N zfmbJgq|-f1$uA3RyzRy1@lqpv-3wkK8mr+~zv!Fn-nU2kH&|Jdi{7$b_$*@Ec3^ar z;~aj6(vNy5_;yJ6Mk)F2EJx;lMp>_6Hd=Czn)pc~DO)GGAf3p{6gE}lu=dSO;+a!Z;qU2Srt|<*39L$C1^X&kG+`plwje zsnV%&mGPI?E%T$w>}g~hPhbj9xo~u}*Yj@gelA@)kH-^$8?W%G!nZ6UocPr%NQ_&B zo}9oy|8c(lbO`sv$S&K^y|BdbVW6HDr2YuT(PF?RR>&uxgKE<1%Y6^TsLrf_j*8q;kVT;BaO zR}U02^IkEd&qpy{WasmeSkct5%tBmpmoskh?GfLKf);?>dq;gUx*CJ7*d2aYv(T2#8Scrs^o-!=_o-^m%x= zFZ(Frndi9Qb%WTJKiSte%*UrbXXxA{{gX3{UH(z>b!-mNm%em?W{7s-cG0o~9_-ti zuv;Dss}aq05J$z^JX5=yl)c9(**QQ_XD?5-j^XYa;_0IkR1ZzkIdX-XPyZle{BQP* zU&Zy^jCeCp(oG@?+$=5XU|G%kENvWPWzP*(jLk~ly6DUKnx<%3n1UBQ4R{(FsO{*a z^TO9$@&3-J-_NwbrmEsy!TXOyjnz6RbhCVd8DO@&7ECr9z2PAaG2sR zzUS5PALy8x!S%}=8*lmX`2180U)P+U$Obq38Weq#U3+&+{{}0o3(%Xl3ZF%M>o$z` z3LJy)Q1)Rr#or7F-!QJ<&T@G6XO#6CW`ia7sEMBxQu1_Ci!+JZo<>$>K5O61qOi4` z^kaqC50{ZORF9IR@<3~n^ew$xhV*UH-FJYI3#0h_J``2Kmamdnnm}$-5ifjDiMBx{ zze=atQ_f%hDVZNtW=|u}cpOuBDukoGt&Vql_HpUbd3?TkOyL(kRrr=gMv%CA1<47k z&{LD>J8_J!J{e$Y;uOBA(}MH(C0~vV>DLm?76!xu96*69s*E^LGM LpX&?p;yeEXWiwP~ literal 0 HcmV?d00001 diff --git a/Base.rte/Actors/Infantry/GreenDummy/FootFGA000.bmp b/Base.rte/Actors/Infantry/GreenDummy/FootFGA000.bmp new file mode 100644 index 0000000000000000000000000000000000000000..9312f1ced170617fdb81009e5e539e0b85f0e7cb GIT binary patch literal 1150 zcmY+Ee@s#aO6iwL>-$q@>1hKjLU+>1r6AU z1)->*W}z*eGvY^)FtlIGtx(ZM)TZ85Ytaw5#Td=4aanD*2l~T#w(tAC=e*DJ{eGYG zKId%BYgob3^@z-xtnLupE?9=L^xRk)ZykaJ(RBmEFtMyUew_*soXh7fH5^*UX!Snx+ni#`MHJ-5hoRV*#3AbJH zHN6sNmW5_`ab|j#W=B>l3C1xTW-FV_qd1Dsu-Vgtr)!*&<^@{27qF>1iukZ;7B+nm zUhd93$;$ML+~b}hruk0}^$zjT+0PifI6>dU6rcT} zfw3QPe={ZC43t!pusjdp1?{Y=ewXluQPy_Pux4~l>efYH-mhtjmW3&J-dm5izMh)) z4mvJ>#r5gm83_cK6xdW%yldD}b@6PV<`v-BVTxCa$jV9#ZxatTH?qB>lkEd%@C*!5 z`1!ZIJoX*!zA4;4&$IPL0IxqlmGE`W2Z*Tmz%N13H`#Y^ztnHAwki+3saW_dVq11$ zw3Xo;c#Dz`x+wg*U-*V_|8{}nb3dVM)-dZWIY&+WB$1S(lU$fiWJL-Y<+*HpJ%jv~ zQc_Rl<2YVI#$X*vg37%u2~xMzZW&UyNmuU?hA)rc5BO131zWC4yep3E#sZ#uuN-ZQ zN^Yf2mA90?0zT;LvXCMfeB^pDKK-BEpDYzlOxP zb?C_n^uB+JFF)?bH+~ks@0{Qg0g2ZnRu}FxM+{lI%C?kfrcb}f?1z=yIQI(kU%bk{ z7hc0270LRT)x_DONqAr#$s1xxeRw0=^dyFl9p>pRan$6baK1c|(drbg>`r5%C6jCW zp5TYWMNGcqV(6JDMt0iy)Ez6D8kSjvSI%n)ra}m?9vAw8XAfwdb;$VA$?>@ z|5>8z7tMu*1%kn#?CZDw3~t_qhZM`Te9xX4c{a1t#aO6iwL>(G*^HSqL3|O$ZpaC1P zAQThSEVQL_M*JuehW2Z@6)M_@+EiApML*ycV>GwMWwqTNZvByG`@ZKr?|Gi@_xrr> zbIy*O##IEa2j#BG>{h`of)yx%bt5p|JoxdW>js8lVp;Y4JmbT^kjw3ACU(u_9&L}j zH&K+W1V=V=TSPCx>t@L@pT{iqP*Hb+SC90w@5B{`&i_Snd=#tISVHf1O1^<6+;+*= z^h%r=7MkI~neGYP9T{!J8OLy#ZEQ7<;&7c|TU9Sr-4m3wEYa4pgiX~^#D`6@u<6V2 za7X${R;OO%PWK#9Ex&W9ZpWh2fP{mmDcCnaUS}_lw2o2LHN;~lC#W8pq;uptH6Q&(%J`qW zHvT>CuV%!Xfs$+znp4G^ybjjZyv>@%F*fwfv3_hp>efYH_SZB;%fb{q<7vRt&_HcR zC!LqS;QH*ZjQV^`3v8+?-ZgB=x_CBFbMkN$n&QP3-FIV%Ojqss@M2 z|MY8K82^TjsTtfqF0$i>50BSJweWQ<`Uq>Nf}i}NZ?ga30jb|$Lv;>%vrG6aqFZ-k zw3p!=e1nqry2<}?K=_7n|8jxj3qPQ2(=Zz>IY&+WB#@A$lbD}MctsLv<=Jd`C5_zH zQj$;Q;y7MH+E6`8oXTCTaZkO?f>1PC43k zmF!BLYELPD_@<^a2MtC#S4mobG;_*CIr8x~6JruD?f zY(!6tqwn2QeE#78Qxj+LPMs56!YA>X#OlJG;)o(cSJ{~q$?WOpn18>L8|PkR@w1os z`@+lEBf{AfwT>8jBysm{Byn>z$q#H{r=GybvBNyEJ%-w>B+i$|Gggztl|3m;wx)A! z|D$|&xPa-miWz<~g3%&7AG@PPQ^PU~@W@$CPl<1@_*N9OWyra=*EON5QRs?YVs#8X z6EmYwaxBTIM+@7GO_4p3p0g<$T6mu1Sva+)geR3}i~BJjo)3KBAt51XqNhv$8PZ3l z^q(cVUeR1yTEg%5%X|HQKZBB+=D|fSm#a7^ur^m*pF literal 0 HcmV?d00001 diff --git a/Base.rte/Actors/Infantry/GreenDummy/FootFGA002.bmp b/Base.rte/Actors/Infantry/GreenDummy/FootFGA002.bmp new file mode 100644 index 0000000000000000000000000000000000000000..3ba58511fe9ee5394131b24e5eb93919e1acb2ab GIT binary patch literal 1150 zcmY+D4NO&K7{`CH){e#O8U{x}yk^81hK3|O$Z-~u*c zK`17uS!he=jQA)L2KKew3KeZcZR%aM7Ja}?#%OMh%WAtl+}c|2_J7}Z=Y5|4|Np%2 zb9Ux7-AZsgD61yB+Xc4?Zb1otH-hv3rvL$T-M}zREUST^XZ-{g^SD#Z!mgRztL>9> z6Ghp^s;Cz3i0ot4`Z;pV=P}DXRMwy5)uRLKKY4}W^M8_(5Y1{ej<9>2l5e01w_Wlz zy$WZhg=TngW_W_DBeR`&<2Vkpoo(hZ93^MjUfoA^&lIJt%e40{V^eh$@nO>}Z2Ag3 ztjRdV>a>g8<(?ruS=drqjBpy0L;r>DLyZYGGHbHgwFpr*^qGouSuF>n%e)JoulYj8q z}>vO*{=Jzuru&Jte*RZAN;@LpW&Bsw>idTz>swxam3-`A+v!|<@Jws=y9vY$G z)3149@*6t6v$%g;V&_di9-p5Y;p<-V6W&-2KLteJ{(!Pw!)&zV9X0WjNMg25Qb8IKmC2-6I=={=2X;~`ApDHo28_IlpzJToH8dUqMMbM3i%Ztr2>EC4Dv^;E%aO6iwL>(Kqn^5CG3|O$Z-~u*c zK`17uS!he=jQCL`4DHu)D^#=*wW)X2TJ!^MIY)DAT&nH%aQUmVec$)p`##V2`+eT` zIotD_R}%almRXb4oq{_AD^P;_MsWQ95FmiA8yJR(Wi|54te?Pq0jty;?3&4a+Fm&~ zQIsu&#I$l(bUz_$=g2o-z%2Jr)o_B>jtsKz#1%%)|3g|*EMaN_;rBWv-#`;?yX0$n zHO_1c&G6vN@&so`b_a>ZF&t(GTg;<4+-KNY(@#zB6lHCTbo4D^Q*{*aVbd&Z`Vu^> z&N@k0#zpQfy+Lf-9~>GO<-@a|GIDX6!Rc8hu6-x*IyR^1OI^A^Geobv z=qZT|ymyK(J{rP1brzrZoZu3EiPt1n7w&XNEZMrs&eRy@PCw7h530F!?j;sJf0=(T zyn;PCijA>riMPj)c>e}cHpP+l&}Me($&4L4%#+*Vsn1R2d}R_7b*Wt0o6dB57T5Ma z#`lMdnR(mA=u^>*m)QBFG)^=%EVCGoyyc8neEY<=qM$87-o3M-1zn9rSL_n2W9T`U z*}EmjlAK1g$W7Q3xfAI*o1&pb6-u6kQ+rx?GI-84i23Nv;13=e8j2=*y7ZqRePl}i zS)%I`&Bet<0)c>>>k?byS~Z*!7ECH}uMTtny|j!7iFUhPw*_|zDRH~q%MlSPT+t=2 PGwMWwf21OMi8??>XoB{hsIh{XXaS z+`BRV`rXW5kIPe&xBCS52qIAC*H6yh|9`Ww(RBmEFtMx#ewzqkPZtoa=8&M7Jgn`I zeG^4lOXSjB+`FWk$i|Y;ZBfx zO|Qn4ZJ`-HTv@*Pr!%{i6yrEfvz4{xF`S;Wtn+r`?HHwE_bjcQvp7^8MSM6k3x^(t zkNdL%EZA^~2g+{~zxz)PpBdoebDz_HX^ft+35Ku#Ao)5Dm*`7hx-iQ2Xg0WRCnz z`^Zm}e>)-G43rF$n0zk_3-__8_9P2;4zs-THp_;mrEgvI<@=hZXjzzomwb)*8XKwG z*GAiwuemY#J42xmHw6w=74I633|%}MsQHCB-KKc8h^wx~@a^K!-OX%i^RuPzEZ)8W zioW=c?IYi_Z+wFCUuM{NCxkB;qDJ`qGa+Idz3{6o`X&bs9hCkJme=H?@A3$rMPf@C z#-44s`re`9!w!nR=@q^K%5Pod#PrW7>om+pOU_XfKWU`p>Z~c+KwMQin=12I{njQ5 zTDFpLssQJS3O4mOproig*pecBOYfE;eVcTgIm+ObA%dYGimKqqQ%NpOBB!~K7vHZ$ zTd$H=tyAOM%3q;znIBbVPb1fO0#kUl3CEt+dfx3k%(ZKm2?oO$CnS8T@GXjsA$jF8 zQj=DouSwy|2dDVzlU~M0&k-CyFStxd@-@lTg*($3PqwbIIejUUr(a>}qiXJ)f1Q~x z-{7B%Z<4Sij+OC?NlI8s$|EaSvnr8{$5yjhPh;@-5uRJ0L|tw=7b;U3u1)9aj!ec{ zvbcWWX?{FX%+2>o8F+pPLoX!oS$U#pYFK75J~_*qWN@ND4a(jLqwr{;g)QBhH7qNmIJ z88Szv%%3H?LD8I@oyE3o+1JClwrxrOKs_#83>UuuwToqP|!xyrm|`*`f<7D9L=qH7;UHL-s;`Hd*1hbp6C00p7TCu zZSlx`gw|tXHQ6bG1%j~9F63gtJh>D6zZ@KN-M}zREUSTE{Wi`_3HPf7BxxoOX}iR4 zqA06~OlW3a{5c{QPg88ZjJefE&CXN2d9<7Tr>@a=X^!mlM55JHVjlEJzJVs(Ns_PW zwRrL^G{c7{&lj@p{5H~z6S&PbR+-0eZ@$3lx^vWZj#1SzOWW~TT&j*Db+|MOmmY+V z`FW>_&b`8d%G)Hi{K4U_em)-hoW3jLbdUQPzVU;^>$p6kFMa6(%@FO98qu-@KHOWH za9chMYY$rGF+A08^Yo5`WE?t6`Tp~iwx45N>o9d4eLQt~jQYND+6Qj3{nK0IjQ+)2 zqd!sktzT+0P_j*8itAWdx{pQM-)G^TVU`}h&6436>01|l`M#zpS{A0@1z#h+#zuDR zYp4C{*W8@`ok81XO5jpesa?aBtxL@YYH=yCSCub&6R%@7zmb{}T^<$erL@{RSB zv~DH)ObPCjRjlu8KuJ@1pfyeUmfkHx`Znq8I?BM+K>~IFMOAPWsianjEIQF*fs$Eq5=z%DpdN z%2B$NHj44gQ^Giy@VQJBT0ZRree&*Ivy9L8Jo zxN+b~emqjn)O!{5KO4{B^GSSGnJk(bmRXKZ-g0U}>JCWVih>q|y!+mrP3USOx{@TZ zI)+|=nZHSLEXip=i(P?Bk#8b1=TbDZxKhcp@MzBoPcAQ3bYnhoC-iGaMMa^Bo-Xre z$Q+q6f0pP5M00j_7RPbKuZLp&ekW-CUT;JggnO5G=ZhWjc)VFb>y4fc7k8w`4o2DQ zB0@IIiHww^}Z2AH` z+@0%ZQTBQ6abG8~{WlJr80G!bA2V`(lA*~N#;<-O@j5oA=u2I?Kr=+Us7ACbfd|L- zRveZG!`g-BK8&;Kb)IP4OWMBUl@`0?qO-eF&6I{XNB)N%g1j@-MZ+@`!!9`vM>eDdRp+bw9we& z#e3;wY3;K#7&o9x-QSL!!dQD2DORxW%NNgdlU zx~g!Ve1nR2_fzu4u<(uI{`nk7Z+?%mLBnjZP zRFXMRgyU!hIU~&|sVet&q)OdVyJbk-Ci_nuB5-MpU?_;9D%c8CQp%FaZ!Koq+tp|r zRSIf#>OGbG9-5N=QKk1Zwipj%3Qv`AbagiIrtbh(u3R7(T)-3|;Zucg>5^DdRxM|3 z@=EmdR8G7zz-J!}Gc|FV;M5tx1ws<9Nvtm1S&l^Vbd}8+3CtdUo*VDga_h`X%zgSY zf1i5=dwd+L5|@!|Pat*mO48RPk@?^{HtT5wjvVC4jmb1_$>41DTE-hPxV$5a$&OsE z?s<%F50*0hRvDvD#WVJdosZl}qN!n-rFi5lr>DesP<$&2+5+U zo{yR5k{nBNn$ec5!KTPNk)E?D8d_Yj}FPynPesAL#2d|J~?!4fy@x$U5M4_4@sh o=Yf8&&*v{+SerY${l1<4G8a*p+seEBy?w5Qa5Kuaa78lz0j61Df&c&j literal 0 HcmV?d00001 diff --git a/Base.rte/Actors/Infantry/GreenDummy/GreenDummy.ini b/Base.rte/Actors/Infantry/GreenDummy/GreenDummy.ini new file mode 100644 index 000000000..90e111c8d --- /dev/null +++ b/Base.rte/Actors/Infantry/GreenDummy/GreenDummy.ini @@ -0,0 +1,915 @@ +/////////////////////////////////////////////////////////////////////// +// Green Dummy Wounds + + +AddEffect = AEmitter + PresetName = Wound Plastic Green Entry + Mass = 0.0001 + HitsMOs = 0 + GetsHitByMOs = 0 + SpriteFile = ContentFile + FilePath = Base.rte/Actors/Infantry/GreenDummy/Wounds/GreenWoundA.bmp + FrameCount = 1 + SpriteOffset = Vector + X = -1 + Y = -1 + AtomGroup = AtomGroup + AutoGenerate = 1 + Material = Material + CopyOf = Bone + Resolution = 2 + Depth = 10 + DeepGroup = AtomGroup + AutoGenerate = 1 + Material = Material + CopyOf = Bone + Resolution = 3 + Depth = 10 + DeepCheck = 0 + JointStrength = 10000000 + JointStiffness = 1 + DrawAfterParent = 1 + AddEmission = Emission + EmittedParticle = MOPixel + CopyOf = Bone Particle + PresetName = Plastic Particle Green + Color = Color + R = 103 + G = 121 + B = 88 + Spread = 0.1 + MaxVelocity = 5 + MinVelocity = 1 + BurstSound = SoundContainer + CopyOf = Bone Hit + EmissionEnabled = 1 + EmissionCountLimit = 10 + EmissionsIgnoreThis = 1 + ParticlesPerMinute = 0 + BurstSize = 3 + BurstScale = 5 + BurstDamage = 2 + BurstTriggered = 1 + EmissionDamage = 0.12 + + +AddEffect = AEmitter + CopyOf = Wound Plastic Green Entry + PresetName = Wound Plastic Green Exit + SpriteFile = ContentFile + FilePath = Base.rte/Actors/Infantry/GreenDummy/Wounds/GreenWoundB.bmp + FrameCount = 1 + SpriteOffset = Vector + X = -2 + Y = -2 + AddEmission = Emission + EmittedParticle = MOPixel + CopyOf = Plastic Particle Green + Spread = 0.1 + MaxVelocity = 10 + MinVelocity = 1 + EmittedParticle = MOPixel + CopyOf = Plastic Particle Green + Spread = 0.1 + MaxVelocity = 10 + MinVelocity = 1 + AddEmission = Emission + EmittedParticle = MOSParticle + CopyOf = Gib Military Micro A + Spread = 0.1 + MaxVelocity = 10 + MinVelocity = 1 + AddEmission = Emission + EmittedParticle = MOPixel + CopyOf = Spark Yellow 1 + Spread = 0.1 + MaxVelocity = 10 + MinVelocity = 1 + BurstSound = SoundContainer + CopyOf = Metal Penetration Hit + EmissionEnabled = 1 + EmissionCountLimit = 10 + EmissionsIgnoreThis = 1 + ParticlesPerMinute = 0 + BurstSize = 6 + BurstScale = 6 + BurstDamage = 2 + BurstTriggered = 1 + EmissionDamage = 0.02 + + +/////////////////////////////////////////////////////////////////////// +// Green Dummy Gibs + + +AddEffect = MOSRotating + PresetName = Green Dummy Head Gib A + Mass = 10 + HitsMOs = 0 + GetsHitByMOs = 1 + SpriteFile = ContentFile + FilePath = Base.rte/Actors/Infantry/GreenDummy/Gibs/HeadGibA.bmp + FrameCount = 1 + SpriteOffset = Vector + X = -6 + Y = -5 + AngularVel = 6 + EntryWound = AEmitter + CopyOf = Wound Plastic Green Entry + ExitWound = AEmitter + CopyOf = Wound Plastic Green Exit + AtomGroup = AtomGroup + AutoGenerate = 1 + Material = Material + CopyOf = Bone + Resolution = 4 + Depth = 0 + DeepCheck = 0 + AddGib = Gib + GibParticle = MOSParticle + CopyOf = Gib Military Tiny A + Offset = Vector + X = -4 + Y = -3 + Count = 1 + Spread = 0 + MinVelocity = 0 + MaxVelocity = 0 + AddGib = Gib + GibParticle = MOSParticle + CopyOf = Gib Military Tiny A + Offset = Vector + X = 3 + Y = -1 + Count = 1 + Spread = 0 + MinVelocity = 0 + MaxVelocity = 0 + AddGib = Gib + GibParticle = MOSParticle + CopyOf = Gib Military Micro A + Offset = Vector + X = -3 + Y = -5 + Count = 1 + Spread = 0 + MinVelocity = 0 + MaxVelocity = 0 + AddGib = Gib + GibParticle = MOSParticle + CopyOf = Gib Military Micro A + Offset = Vector + X = 3 + Y = 2 + Count = 1 + Spread = 0 + MinVelocity = 0 + MaxVelocity = 0 + AddGib = Gib + GibParticle = MOSParticle + CopyOf = Gib Military Micro A + Offset = Vector + X = 1 + Y = -3 + Count = 1 + Spread = 0 + MinVelocity = 0 + MaxVelocity = 0 + AddGib = Gib + GibParticle = MOSRotating + CopyOf = Gib Metal Grey Small A + Offset = Vector + X = -2 + Y = -3.5 + Count = 1 + Spread = 0 + MinVelocity = 0 + MaxVelocity = 0 + AddGib = Gib + GibParticle = MOSRotating + CopyOf = Gib Joint Small C + Offset = Vector + X = -2 + Y = 1 + Count = 1 + Spread = 0 + MinVelocity = 0 + MaxVelocity = 0 + GibImpulseLimit = 125 + GibWoundLimit = 4 + GibSound = SoundContainer + CopyOf = Bone Crack + + +AddEffect = MOSRotating + PresetName = Green Dummy Rib Cage Gib A + Mass = 26.77 + HitsMOs = 0 + GetsHitByMOs = 1 + SpriteFile = ContentFile + FilePath = Base.rte/Actors/Infantry/GreenDummy/Gibs/RibCageGibA.bmp + FrameCount = 1 + SpriteOffset = Vector + X = -3 + Y = -10 + AngularVel = 6 + EntryWound = AEmitter + CopyOf = Wound Plastic Green Entry + ExitWound = AEmitter + CopyOf = Wound Plastic Green Exit + AtomGroup = AtomGroup + AutoGenerate = 1 + Material = Material + CopyOf = Civilian Stuff + Resolution = 4 + Depth = 0 + DeepCheck = 0 + GibImpulseLimit = 85 + GibWoundLimit = 3 + GibSound = SoundContainer + CopyOf = Bone Crack + + +AddEffect = MOSRotating + PresetName = Green Dummy Rib Cage Gib B + Mass = 10.42 + HitsMOs = 0 + GetsHitByMOs = 1 + SpriteFile = ContentFile + FilePath = Base.rte/Actors/Infantry/GreenDummy/Gibs/RibCageGibB.bmp + FrameCount = 1 + SpriteOffset = Vector + X = -5 + Y = -5 + AngularVel = 6 + EntryWound = AEmitter + CopyOf = Wound Plastic Green Entry + ExitWound = AEmitter + CopyOf = Wound Plastic Green Exit + AtomGroup = AtomGroup + AutoGenerate = 1 + Material = Material + CopyOf = Civilian Stuff + Resolution = 4 + Depth = 0 + DeepCheck = 0 + AddGib = Gib + GibParticle = MOSParticle + CopyOf = Gib Military Tiny A + Offset = Vector + X = -4 + Y = -4 + Count = 1 + Spread = 0 + MinVelocity = 0 + MaxVelocity = 0 + AddGib = Gib + GibParticle = MOSParticle + CopyOf = Gib Military Tiny A + Offset = Vector + X = 0 + Y = 2 + Count = 1 + Spread = 0 + MinVelocity = 0 + MaxVelocity = 0 + AddGib = Gib + GibParticle = MOSParticle + CopyOf = Gib Military Micro A + Offset = Vector + X = -1 + Y = 1 + Count = 1 + Spread = 0 + MinVelocity = 0 + MaxVelocity = 0 + AddGib = Gib + GibParticle = MOSParticle + CopyOf = Gib Military Micro A + Offset = Vector + X = -2 + Y = -5 + Count = 1 + Spread = 0 + MinVelocity = 0 + MaxVelocity = 0 + AddGib = Gib + GibParticle = MOSParticle + CopyOf = Gib Metal Rust Tiny A + Offset = Vector + X = -2 + Y = -1 + Count = 1 + Spread = 0 + MinVelocity = 0 + MaxVelocity = 0 + AddGib = Gib + GibParticle = MOSRotating + CopyOf = Gib Metal Grey Small C + Offset = Vector + X = 2 + Y = -3 + Count = 1 + Spread = 0 + MinVelocity = 0 + MaxVelocity = 0 + GibImpulseLimit = 85 + GibWoundLimit = 3 + GibSound = SoundContainer + CopyOf = Bone Crack + + +/////////////////////////////////////////////////////////////////////// +// Green Dummy + + +AddEffect = Attachable + PresetName = Green Dummy Head + Mass = 19.03 + HitsMOs = 1 + GetsHitByMOs = 1 + SpriteFile = ContentFile + FilePath = Base.rte/Actors/Infantry/GreenDummy/HeadA.bmp + FrameCount = 1 + SpriteOffset = Vector + X = -5 + Y = -5 + AngularVel = 6 + EntryWound = AEmitter + CopyOf = Wound Plastic Green Entry + ExitWound = AEmitter + CopyOf = Wound Plastic Green Exit + AtomGroup = AtomGroup + AutoGenerate = 1 + Material = Material + CopyOf = Civilian Stuff + Resolution = 4 + Depth = 0 + DeepGroup = AtomGroup + AutoGenerate = 1 + Material = Material + CopyOf = Civilian Stuff + Resolution = 6 + Depth = 2 + DeepCheck = 1 + JointStrength = 145 + JointStiffness = 0.1 + BreakWound = AEmitter + CopyOf = Leaking Machinery + JointOffset = Vector + X = 0 + Y = 6 + DrawAfterParent = 1 + AddGib = Gib + GibParticle = MOSRotating + CopyOf = Green Dummy Head Gib A + Offset = Vector + X = 0 + Y = 0 + Count = 1 + Spread = 0 + MinVelocity = 0 + MaxVelocity = 0 + AddGib = Gib + GibParticle = MOSParticle + CopyOf = Gib Military Micro A + Offset = Vector + X = -6 + Y = 0 + Count = 1 + Spread = 0 + MinVelocity = 0 + MaxVelocity = 0 + AddGib = Gib + GibParticle = MOSParticle + CopyOf = Gib Panel White Tiny A + Offset = Vector + X = -2 + Y = 3 + Count = 2 + AddGib = Gib + GibParticle = MOSParticle + CopyOf = Gib Military Tiny A + Offset = Vector + X = 0.5 + Y = 2.5 + Count = 1 + Spread = 0 + MinVelocity = 0 + MaxVelocity = 0 + GibImpulseLimit = 100 + GibWoundLimit = 3 + GibSound = SoundContainer + CopyOf = Bone Crack + + +AddActor = Arm + PresetName = Green Dummy Arm FG + Mass = 7 + HitsMOs = 0 + GetsHitByMOs = 1 + SpriteFile = ContentFile + FilePath = Base.rte/Actors/Infantry/GreenDummy/ArmFGA.bmp + FrameCount = 5 + SpriteOffset = Vector + X = -6 + Y = -3 + AngularVel = 6 + EntryWound = AEmitter + CopyOf = Wound Plastic Green Entry + ExitWound = AEmitter + CopyOf = Wound Plastic Green Exit + AtomGroup = AtomGroup + AutoGenerate = 1 + Material = Material + CopyOf = Civilian Stuff + Resolution = 4 + Depth = 0 + DeepCheck = 0 + ParentOffset = Vector + X = -1 + Y = -4 + JointStrength = 185 + JointStiffness = 0.5 + BreakWound = AEmitter + CopyOf = Leaking Machinery + JointOffset = Vector + X = -3.5 + Y = -1 + DrawAfterParent = 1 + HeldDevice = None + Hand = ContentFile + FilePath = Base.rte/Actors/Infantry/GreenDummy/HandFGA.bmp + MaxLength = 12 + IdleOffset = Vector + X = 5 + Y = 6 + MoveSpeed = 0.2 + AddGib = Gib + GibParticle = MOSParticle + CopyOf = Gib Military Tiny A + Offset = Vector + X = -3 + Y = -2 + Count = 1 + Spread = 0 + MinVelocity = 0 + MaxVelocity = 0 + AddGib = Gib + GibParticle = MOSParticle + CopyOf = Gib Military Tiny A + Offset = Vector + X = 3 + Y = -2 + Count = 1 + Spread = 0 + MinVelocity = 0 + MaxVelocity = 0 + AddGib = Gib + GibParticle = MOSParticle + CopyOf = Gib Military Micro A + Offset = Vector + X = -2 + Y = -3 + Count = 1 + Spread = 0 + MinVelocity = 0 + MaxVelocity = 0 + AddGib = Gib + GibParticle = MOSParticle + CopyOf = Gib Military Micro A + Offset = Vector + X = -1 + Y = -2 + Count = 1 + Spread = 0 + MinVelocity = 0 + MaxVelocity = 0 + AddGib = Gib + GibParticle = MOSParticle + CopyOf = Gib Military Micro A + Offset = Vector + X = 5 + Y = -3 + Count = 1 + Spread = 0 + MinVelocity = 0 + MaxVelocity = 0 + AddGib = Gib + GibParticle = MOSParticle + CopyOf = Gib Metal Dark Micro A + Offset = Vector + X = 6 + Y = -2 + Count = 1 + Spread = 0 + MinVelocity = 0 + MaxVelocity = 0 + AddGib = Gib + GibParticle = MOSParticle + CopyOf = Gib Metal Dark Micro A + Offset = Vector + X = 0 + Y = -3 + Count = 1 + Spread = 0 + MinVelocity = 0 + MaxVelocity = 0 + AddGib = Gib + GibParticle = MOSParticle + CopyOf = Gib Metal Grey Micro A + Offset = Vector + X = -4.5 + Y = -3 + Count = 1 + Spread = 0 + MinVelocity = 0 + MaxVelocity = 0 + GibImpulseLimit = 50 + GibWoundLimit = 2 + GibSound = SoundContainer + CopyOf = Bone Crack + + +AddActor = Arm + CopyOf = Green Dummy Arm FG + PresetName = Green Dummy Arm BG + SpriteFile = ContentFile + FilePath = Base.rte/Actors/Infantry/GreenDummy/ArmBGA.bmp + FrameCount = 5 + Hand = ContentFile + FilePath = Base.rte/Actors/Infantry/GreenDummy/HandBGA.bmp + + +AddActor = Attachable + PresetName = Green Dummy Foot FG + Mass = 4 + HitsMOs = 0 + GetsHitByMOs = 0 + SpriteFile = ContentFile + FilePath = Base.rte/Actors/Infantry/GreenDummy/FootFGA.bmp + FrameCount = 4 + SpriteOffset = Vector + X = -5 + Y = -3 + EntryWound = AEmitter + CopyOf = Wound Plastic Green Entry + ExitWound = AEmitter + CopyOf = Wound Plastic Green Exit + AtomGroup = AtomGroup + AutoGenerate = 1 + Material = Material + CopyOf = Civilian Stuff + Resolution = 4 + Depth = 0 + DeepGroup = AtomGroup + AutoGenerate = 1 + Material = Material + CopyOf = Civilian Stuff + Resolution = 4 + Depth = 2 + DeepCheck = 0 + JointStrength = 155 + JointStiffness = 0.5 + BreakWound = AEmitter + CopyOf = Leaking Machinery + JointOffset = Vector + X = -3 + Y = -2 + DrawAfterParent = 1 + + +AddActor = Attachable + CopyOf = Green Dummy Foot FG + PresetName = Green Dummy Foot BG + SpriteFile = ContentFile + FilePath = Base.rte/Actors/Infantry/GreenDummy/FootBGA.bmp + FrameCount = 4 + + +AddActor = Leg + PresetName = Green Dummy Leg FG + Mass = 10 + HitsMOs = 0 + GetsHitByMOs = 1 + SpriteFile = ContentFile + FilePath = Base.rte/Actors/Infantry/GreenDummy/LegFGA.bmp + FrameCount = 5 + SpriteOffset = Vector + X = -7 + Y = -7 + AngularVel = 6 + EntryWound = AEmitter + CopyOf = Wound Plastic Green Entry + ExitWound = AEmitter + CopyOf = Wound Plastic Green Exit + AtomGroup = AtomGroup + AutoGenerate = 1 + Material = Material + CopyOf = Civilian Stuff + Resolution = 4 + Depth = 0 + DeepCheck = 0 + JointStrength = 200 + JointStiffness = 0.5 + BreakWound = AEmitter + CopyOf = Leaking Machinery + JointOffset = Vector + X = -5 + Y = 2 + DrawAfterParent = 0 + Foot = Attachable + CopyOf = Green Dummy Foot FG + ParentOffset = Vector + X = -11 + Y = -10 + ExtendedOffset = Vector + X = 14 + Y = 0 + ContractedOffset = Vector + X = 7 + Y = 0 + IdleOffset = Vector + X = 1 + Y = 3 + MoveSpeed = 0.4 + AddGib = Gib + GibParticle = MOSParticle + CopyOf = Gib Military Tiny A + Offset = Vector + X = -6 + Y = 1 + Count = 1 + Spread = 0 + MinVelocity = 0 + MaxVelocity = 0 + AddGib = Gib + GibParticle = MOSParticle + CopyOf = Gib Military Tiny A + Offset = Vector + X = -5 + Y = -2 + Count = 1 + Spread = 0 + MinVelocity = 0 + MaxVelocity = 0 + AddGib = Gib + GibParticle = MOSParticle + CopyOf = Gib Military Tiny A + Offset = Vector + X = 0 + Y = -3 + Count = 1 + Spread = 0 + MinVelocity = 0 + MaxVelocity = 0 + AddGib = Gib + GibParticle = MOSParticle + CopyOf = Gib Military Micro A + Offset = Vector + X = -7 + Y = 0 + Count = 1 + Spread = 0 + MinVelocity = 0 + MaxVelocity = 0 + AddGib = Gib + GibParticle = MOSParticle + CopyOf = Gib Military Micro A + Offset = Vector + X = -3 + Y = 0 + Count = 1 + Spread = 0 + MinVelocity = 0 + MaxVelocity = 0 + AddGib = Gib + GibParticle = MOSParticle + CopyOf = Gib Military Micro A + Offset = Vector + X = -2 + Y = -2 + Count = 1 + Spread = 0 + MinVelocity = 0 + MaxVelocity = 0 + AddGib = Gib + GibParticle = MOSRotating + CopyOf = Gib Pipe Small C + Offset = Vector + X = 3 + Y = 0 + Count = 1 + Spread = 0 + MinVelocity = 0 + MaxVelocity = 0 + GibImpulseLimit = 60 + GibWoundLimit = 3 + GibSound = SoundContainer + CopyOf = Bone Crack + + +AddActor = Leg + CopyOf = Green Dummy Leg FG + PresetName = Green Dummy Leg BG + SpriteFile = ContentFile + FilePath = Base.rte/Actors/Infantry/GreenDummy/LegBGA.bmp + FrameCount = 5 + Foot = Attachable + CopyOf = Green Dummy Foot BG + ParentOffset = Vector + X = -11 + Y = -10 + + +AddActor = AHuman + PresetName = Green Dummy + Description = TradeStar's factory worker unit. Agile, but not fit for warfare! + AddToGroup = Actors + AddToGroup = Actors - Light + AddToGroup = Actors - Heavy + Mass = 34 + GoldValue = 45 + HitsMOs = 1 + GetsHitByMOs = 1 + ScriptPath = Base.rte/AI/HumanAI.lua + SpriteFile = ContentFile + FilePath = Base.rte/Actors/Infantry/GreenDummy/TorsoA.bmp + FrameCount = 1 + SpriteOffset = Vector + X = -4 + Y = -16 + AngularVel = 0 + EntryWound = AEmitter + CopyOf = Wound Plastic Green Entry + ExitWound = AEmitter + CopyOf = Wound Plastic Green Exit + AtomGroup = AtomGroup + AutoGenerate = 1 + Material = Material + CopyOf = Civilian Stuff + Resolution = 4 + Depth = 0 + DeepGroup = AtomGroup + AutoGenerate = 1 + Material = Material + CopyOf = Civilian Stuff + Resolution = 6 + Depth = 3 + DeepCheck = 0 + BodyHitSound = SoundContainer + CopyOf = Bone Crack + PainSound = SoundContainer + CopyOf = Robot Pain + DeathSound = SoundContainer + CopyOf = Robot Death + DeviceSwitchSound = SoundContainer + CopyOf = Device Switch + Status = 0 + Health = 100 + ImpulseDamageThreshold = 2600 + AimAngle = 0 + AimDistance = 30 + Perceptiveness = 1 + CharHeight = 100 + HolsterOffset = Vector + X = -6 + Y = -8 + Head = Attachable + CopyOf = Green Dummy Head + ParentOffset = Vector + X = -1 + Y = -13 + Jetpack = AEmitter + CopyOf = Jetpack + ParentOffset = Vector + X = -6 + Y = -1 + JumpTime = 1.5 + FGArm = Arm + CopyOf = Green Dummy Arm FG + ParentOffset = Vector + X = 0 + Y = -8 + BGArm = Arm + CopyOf = Green Dummy Arm BG + ParentOffset = Vector + X = 4 + Y = -9 + FGLeg = Leg + CopyOf = Green Dummy Leg FG + ParentOffset = Vector + X = 0 + Y = 1 + BGLeg = Leg + CopyOf = Green Dummy Leg BG + ParentOffset = Vector + X = 2 + Y = 1 + HandGroup = AtomGroup + CopyOf = Human Hand + FGFootGroup = AtomGroup + CopyOf = Human Foot + BGFootGroup = AtomGroup + CopyOf = Human Foot + StrideSound = SoundContainer + CopyOf = Robot Stride + StandLimbPath = LimbPath + PresetName = Green Dummy Stand Path + StartOffset = Vector + X = 0 + Y = 17 + StartSegCount = 0 + SlowTravelSpeed = 0.1 + NormalTravelSpeed = 0.5 + FastTravelSpeed = 1.5 + PushForce = 1800 + StandLimbPathBG = LimbPath + CopyOf = Green Dummy Stand Path + PresetName = Green Dummy Stand Path BG + StartOffset = Vector + X = 5 + Y = 17 + WalkLimbPath = LimbPath + CopyOf = Human Walk Path + PresetName = Green Dummy Walk Path + SlowTravelSpeed = 1.5 + NormalTravelSpeed = 3.5 + FastTravelSpeed = 4.5 + PushForce = 8000 + CrouchLimbPath = LimbPath + CopyOf = Human Crouch Path + CrawlLimbPath = LimbPath + CopyOf = Human Crawl Path + ArmCrawlLimbPath = LimbPath + CopyOf = Human Arm Crawl Path + ClimbLimbPath = LimbPath + CopyOf = Human Climb Path + JumpLimbPath = LimbPath + CopyOf = Human Jump Path + DislodgeLimbPath = LimbPath + CopyOf = Human Dislodge Path + AddGib = Gib + GibParticle = MOSRotating + CopyOf = Green Dummy Rib Cage Gib A + Offset = Vector + X = -2 + Y = -3 + Count = 1 + Spread = 0 + MinVelocity = 0 + MaxVelocity = 0 + AddGib = Gib + GibParticle = MOSRotating + CopyOf = Green Dummy Rib Cage Gib B + Offset = Vector + X = 0 + Y = -5 + Count = 1 + Spread = 0 + MinVelocity = 0 + MaxVelocity = 0 + AddGib = Gib + GibParticle = MOSRotating + CopyOf = Gib Metal Rusty Small C + Offset = Vector + X = -3 + Y = -6 + Count = 1 + Spread = 0 + MinVelocity = 0 + MaxVelocity = 0 + AddGib = Gib + GibParticle = MOSParticle + CopyOf = Gib Military Tiny A + Offset = Vector + X = -3 + Y = -9 + Count = 1 + Spread = 0 + MinVelocity = 0 + MaxVelocity = 0 + AddGib = Gib + GibParticle = MOSParticle + CopyOf = Gib Military Micro A + Offset = Vector + X = -1 + Y = -1 + Count = 1 + Spread = 0 + MinVelocity = 0 + MaxVelocity = 0 + AddGib = Gib + GibParticle = MOSParticle + CopyOf = Gib Military Micro A + Offset = Vector + X = -4 + Y = -10 + Count = 1 + Spread = 0 + MinVelocity = 0 + MaxVelocity = 0 + GibImpulseLimit = 3000 + GibWoundLimit = 5 + GibSound = SoundContainer + CopyOf = Bone Crack \ No newline at end of file diff --git a/Base.rte/Actors/Infantry/GreenDummy/HandBGA.bmp b/Base.rte/Actors/Infantry/GreenDummy/HandBGA.bmp new file mode 100644 index 0000000000000000000000000000000000000000..f8bbad5dc641c66aebc69a1c7b3e70425e19408e GIT binary patch literal 1118 zcmZ9Me@sS!)3Oy!90p<=UFy-d+~NpP}UNpttW^>)ltNUL$h$`3$VE_ z`xFtGm$=_EOI*tz9O@h9qjR4zbZL_Q$!W%}e=p~C9B$EXjuXq*RCd9 zmW^TUMe`iRUGXMQ)g2(^;2BEx4N%nC%M-0*c)Nyp^3()1Lz8rl+@SW8-^m#Ni#Nt^ z;`wG;ycsCzCXoeRmKAldy!IWI?HyxP&nzp)=A>?2^yPj{Q?x8h!Si+_c4H%T9i4Pu z`HCAezcCsJFePxPs(9CMr0e3@KrJZ3wcQl27SYw!7vx{wmXYmdWQ~de2 z>>mG)4&OAMpXS+oJAmyEP$PU@^8un7z3_8L^iB33JRtQOtg0zMZ{8_<7V)jSFxo3{ z557g&2i+8ZJs^C;cz(Ue@wp#SHforSmb{}Teo{!u(@8DPB)Te%tjc`Wzm`Q|YdPts z3vnGUBWtJuB}wIh)+DK0YPSrj+oZei2qRZU@dx}Us)8e5C9yPt+@>OSyjO{~NhQBp zr^YVl&wx+*N0r{w$TJ?p6rKv*Q_KtVKsVc z5`FKV=F5)<@J*bjHJOhC?Sa#k1a3|AaEy2_TcSZ2<=$gK~nxqbd+=D&D_zc0Ru zGbWlfaVto0#**~VYEsw5lm5thw&*F096QX@n-ZwYOXEUiGGn!AT-}qwWNS9p_iyEg z!zE0eC}sGW7)GCS@~J0YG&L-<1Y6#6$|t`4;#*PB79j85Uf+bS#-S@tIjdvnxtKZI zCC8GS2DGSkI25@P={bj@p+y%-o`qX`R(LXbp|l_K@mq_ZczAd?n&|1$e}?ptDg9@O pu3t2R!62bfNcMGP0lVL2HY{RxVGf1ek${Akgb9)V=70Z-e*hksOz!{y literal 0 HcmV?d00001 diff --git a/Base.rte/Actors/Infantry/GreenDummy/HandFGA.bmp b/Base.rte/Actors/Infantry/GreenDummy/HandFGA.bmp new file mode 100644 index 0000000000000000000000000000000000000000..3acf62c2a8b5f7c492b11fbd768c45c0a34a29ac GIT binary patch literal 1118 zcmZ9Le@snKk)Z^&f&zme-fo{yzc)&~*dDFtMz9ewpzTn9pOannjdma-X(e_DvLJ z8>=IlxHG(u)f;BXHJ`^Uv#G2*#cRh0IC$zR!x#Q0B_WbEY8)Z=x+LE~6YeO<*Yqk} znHHL19y{D0FJd7zk<-*a{TE|=6N4a+GGCtoDy!eGr6~6VMA;d**Bq4S)dQv?7 z@AdMpzsSPpFZ0jESBMG^ zBRX;eu~8Ak-@lopEit4#xRqUcBBLjd@#OYcYO|BMP?5lRO)^*ar!m#Clk0~bs$W!5rJsrg-?ikV3u*^bixyxy<`1Xl!ML}DF+1s`pA_2vqaY? tnv08z1Ofrs*I{lBQhWKMWX}XQiI`jaQW2|G-VqeEV#U(`GFfyF{{rWiN%{Z) literal 0 HcmV?d00001 diff --git a/Base.rte/Actors/Infantry/GreenDummy/HeadA.bmp b/Base.rte/Actors/Infantry/GreenDummy/HeadA.bmp new file mode 100644 index 0000000000000000000000000000000000000000..8049f5cea3db4140ac127a5431d86f662f7c5423 GIT binary patch literal 1210 zcmY+Ee@s#Y|4%`J=(>Snm{?W=KhFjTF648MnoXQ$@}Ray z&P^0$3t=(MtcdO_6b9mr|6%WW&Fms;;&g7}h?t(i1o<-sI`sheWnl_lbT{H|Y-D$b z2hY_nxHyJbk-CS85U8M!)&Kj24E6>PaG2}SW_Hx=;0yOn6$ zRC23zYTf1h5tx?#QKk1Za*W3?g{ML|+S}@R%XgIP*RSCBhcHb*_*CIr9T`EwhP5Qc zuSZWwr0=~meE!h@)01QPr_T$n5DKzq~~mkh89&IaTZSPIpIm?rJ{b!$8Rlv;NjunXriY}{~6Lp zru3gBx_;4IT3R9)49dBF=VxG=^Ku*-<>j89Zm%~?%=!6_&K_@PryR_m^mw{^WVk|R z%GiH)v!kSB%zI})WT$u!ba%T578f}jdwss1Vi#s8%qMn{3tY14^X>JD2^B6Gb0PB| DgI;%T literal 0 HcmV?d00001 diff --git a/Base.rte/Actors/Infantry/GreenDummy/LegBGA000.bmp b/Base.rte/Actors/Infantry/GreenDummy/LegBGA000.bmp new file mode 100644 index 0000000000000000000000000000000000000000..6aa6d0c197035511c8a8bdaae3eeb16006f38898 GIT binary patch literal 1298 zcmY+E3v3i+6oo$%jYDW~q1X8%@@`8v#4XnaBC>J?Gx} z@65vDF%OYEo_r8Axf?AQDR=-S$qyvY!%uPI=(>Snm{?XdzYa!;50&tUT7*+GnWk-# zbrVII%ZQ0}jGWNMi1A^H&DSy4*=*c=5bvI&Y&&?7&eMOBmz}{Vbq1-Axh3B~6K$vD zYkE2ELJQ5XaWAryS65*pS;l@`W+QXWy|~sKXI@1c6+3$=tB=vRFNQ5^cjlk} z3;+26Jl_pUZ3ar7NosKgV@sPESM?!dxAri3-%Td<3`yU*_{;k>P4TiY1+UmO*flk5 zYHp$B!na%v|3-H-%5{N5Ri$q#lxK^4{t3`TwIfh-wtomA(wY0MA*l{Y3 zb+P=b?|I|=4>X4c@%(&;g}0;Fktmg-*Lo*PT1^G~5*L3H-;V9lzrp0nV)VK-qGvI^ zVJ$|}dfdm}qwM3IEWgwtdR=&KoZ-OGPbl*=%oU=rSfP)mh>&XTZZ&)vNN!U6BoLPL?bAwf@7)5jMbSG)t2(| zM;p)QZt}j;O?I603{$d{+jAy2|3*iG+{5#;s4vxqa$Q z?tJ|g|D1Un=Y({oW{fA(IgzZ#r!Z&cbn>2<&0;-=6Z?1b!h%dTEy?BdhHQGOa=Ex= zK79>~xZ-=3{@p9M{=sUxUYtPpDkoofri-VBWv;-My}TZhx+7AzqM#)p``)y<7G2Fi zSDX^7W9UVgg)1e;lALO^w3#>*c_%V+4n;#tFO@tCxAv0g5`y?%MT6o}mAZX~(> zU@#E4Cs81JUT^SPa3FS%D-_P}_4Nm?-J`@qWqFDgj1Yp*hgRAEz9Na1XBVppuyMP_igs5CsUb1UMw9inv?TuLCTG6c^WA&S zz4P6f1tnu1WbpUo1E9&>Xu(K93d$hgGkE>)B}o!pH!utn%i6@vK8Iv~DG#Yj$ka?8 z)i%q%iK5JA#H6i^oOpr}6JnH@uVYr)RBb$h??5vOVH4mz@_RaQin^k zaOnfE8NKKzqvl^=O!+M`w*A4rrglC(^CfK;x@qq2qx1TY60hU(h`;ou3p7K#ORL1o z64kEuBnhyv5|se(75me|f&9DP9();1#?9on$(j=UXjkMW%Eg|%4gxa zVrIUxkka}}3XYZHK3u`VwoNEGDi7D^NZ-=CWk}y9dz%i>arrcHCyt^jxQbP>S7ouJ zu8fyIT8B1IrMOzB#;)W~CoJ=$%Is+r8Bbw~&RWsf-msDP8~1VT+C}2=0fccxPZhoK zX=BNrHksV4spzwEXgYa}Z$4`weDw_R@L9n{9EsN?Ru}EL?hFcbmBsm!h#h~8+n-c( z=j@x@{rWBbIsZ196VsWNF@dbiN#r~>m02^UQ}D!07VCL*9NNzd^Rn1bl+U?!xpc12 z=gQ`}bk{H9y8l@s`RX3VE=55C~3 zsi|n=X2y= zBziM3%n2Fn>gkF^qfJ8^vJ>(L{h??m8Xclinbcc@)Q%v#csULvd3-+p2@qHV3h(I*Qa`(=2Ry z7;a`}o@7S)WoEhV5Lf*t2V1-N?EF`BULK%rV3eMlKS{oh%_;uUmoCr@@y^{TUY5X( zV{0W2%Z*{}L316&x%~()mhC6`z-jXLwv*>M!*ew~6gPJA!pVM0ItTD{-=g%3KS;a! zH{Pp5xV|5i+6P4TiY1+Td)a931N z*5JW&?K^Ib{m!{SfDwUBRi$l&XI0{Uu)grd22*X{)Q`MDh@HDca<1ED; zU2OdN2j05+BMrV$T)#}P=3W4|KR}7-HBJPGsVIhDL*j3;@4$ZP-(X=$4tmuV(X)uJ z*@{uO9cRb;Z2P2%jlJ!n*M;l1OB^5n8D*7*Sz*aNYEn-!$?J8NZ%ik4X9^iRvRU?C z2Dvqbq@K#faeNyYo#iM=Dv#A9N#D}DWk}y9O|6INzIG0Oz>lIT*s@g;Hz%;JGLKh3 z-hsASCA&zc#9hc=0iVo|Dzm4t-dKStI@?8~u67q6G#})~jVt*5VfYA$o+^5CVxmc0 zynv+%i_n)R(b{r~Z$EFx*MA`<`d;P(C9cZl>$yd7Rs1=Sx?-cxqT?K5n_o5ueoUm%0@NEeyH$x?Pp%Y8<*^ zms}k~Ux%4hAZIK&Q;rt11e+r7L}t#WXlSu{a?Zl3y&^j4yuP^&^Vz$RKX_DB6q@+y zGJl55kty?MiLYNggTWx7P)OoBj13Mx_(j;nSbe>xcZ%%m3vW`woOdv?@9S%gd`NW0 zy!G|H!$S793=KtMD@4!Z^#+H+N#Te*;z3`Sygl49JmuvG2ZZ!^JS|gHK|w);?3L8} b6-{yA^-gMqGl+_;OjZ`z|DQJ*xzGIv6()PL literal 0 HcmV?d00001 diff --git a/Base.rte/Actors/Infantry/GreenDummy/LegBGA003.bmp b/Base.rte/Actors/Infantry/GreenDummy/LegBGA003.bmp new file mode 100644 index 0000000000000000000000000000000000000000..edcbd4b73b03a394cf01a6bb3bf7c3ec4ec451fa GIT binary patch literal 1298 zcmbW1e@s;cEE0xRw%iJTUX9vR7T6+-d&@bRTl3y*yFHhz&3`-F_kEx9yzle< zKF@id^DZx%^bljulMjL>)8`{-Lq){vk>fT{kcc6U*Anjgc_X(PAD}^GViB z=4xAH-9%9qF)p!=@iW>OH$6y^`5I=qhmF;TXx{5*`=N_;oxV#}dJ+@Vc}#xPA@K&9 za3@Q=rn_+DS!jj_N3LgVw&yjHW*oq7HnPavhkfmF7Q5SUw_c{KK0@RE2sTwmkvwdg zg-wsa!^GUfOvpaVBVIQ*M>n6GI7Qdle*FC-^j-a4_UqUjqAzvn0?iQZ;*FwZ z2|U=>)nd0i7}i!a=RO=8-r>2bon-7f%IfW%lz7{Cx}gtuOBc@`zD#9TKi-~eZ2Ih1 zmYn|s-}xb&-;79Z21=I6V{iuQ4T8iv*Vo!&ArO^|h?@wy^Tp zaooqcS@p%Yyng;WwhfHn{P7OUZ-?=O!c+=h%bhS&YuxZtRP;@D?Aj^y8_cRKLa$pZ zd=@DU>oA%&;5ha!WgoS&D$pr>-8g?f!@k!7_5XHlw7eJkpRRbxZA*A$6OycI>6+LNB3k2t`$}6{^fDO(nm! zgqJ_8KwGL(=+de5l=FLdK>A0O-qR>Bp28HK4Z_jXSj~I;cXQ>+IYOZr1_%qEDtyzX zPG;VmnWU%AMqijlNBa@J`m~dQ%O?m8oD`fREc-Rts|)uMdlGrN%8JZHf=AbL>th$U zPrkvOFW=;^GjEYRBY`S&{k4E<#Fl{dDwgWI-QpukhVCM>1ra8PdFssKojmb z$=CEU9GMoH;l`2S9^dVmbtD-_v72=)HIHE5c!p)JHe4-z6z>XA*BZj6>L^l&O|!7+ zV{kJg;{?-JTw$j3F0s4*;6Qs9pPj!*=aqgu{lj$M`cdL_Y!1lHlDBT#?{=(izoUh@9d}X>}|Gv@jK}~ zf6>(A!};B?)MlWhnMCHgn3cbW+1oy3*3NF`x87x5_lWeZi@v;H(-bWWQ}CL*3U^f% z6?+{%I}oH?_?kz9L{+)qm$2xYH0<9e{Ts|L&qc4n@iGD3rJZMPuep}SfeL%_UJ)gUY&si~>K=M#7DfUE(ips>DPoDIE$ zgCUQnJ+%G-E{Pj+Hu+_FJU*XqkTNLrPx1Q)*4GyfjO7Y*@dUTue`CU2IblrNos;Z; R&5Qqc!G?!8vmWBR!#{z^diVeU literal 0 HcmV?d00001 diff --git a/Base.rte/Actors/Infantry/GreenDummy/LegFGA000.bmp b/Base.rte/Actors/Infantry/GreenDummy/LegFGA000.bmp new file mode 100644 index 0000000000000000000000000000000000000000..0df15fc1edce847defc11718ddc10d8de0633304 GIT binary patch literal 1298 zcmY+E4NO&K7{`CKTF1%cDh5YE#Edvj$P0@+7e8jk3$)#y%LeAV{oi}`f1l_7f1dL` z=Wfkh@&L2ziTgp5r^SMWf*_Px{?_b%@8-vkt{WJJiDgyto5zQLB8w0;jcCo}5pAEG zn<&Z#7DU#tFru9W%g4wxU&Y+xqPXHTZy)RA!0BuBT$&*{K8i)^8bTj-NWOt4+R>7) z=}sJ}7MkJ0vCTF6Yfr5w&NzwPtY?FH0(<^BHkPzg(mF(8?G*KGQ`l4;Me49=7B)Qq z7mK&KS+wN}OA5w`s{M;29ldKr9-_2on5OeLDf{eCHVytm z^WZHCzVk?J21>F?Xl4mZvm04f_C8DZ_p`EXoE7~O(zh=D@_tQIyev$?ORg$hRaKNX zHqmtT8*YyM!3Cd>QGrcWrFIQlvMx0nsF~T=b4{t$BHZc3aMkcwZ8bZZTG-Kjj*{+P za=!eY*9L!}al}KxFOzJ&ZlRm<#O5j(&_?sL&d`S8?SXr8hUXw3+7BO|Z zF&g&b=zfR7k6Ow3woCMSDfs;|rzU)RRC$x=v!w7Q%~@NGZx--CHSS z)$JkqOcwT2g{1UUqQt2@R2L_GOYfE;eVep)9OL}e3wV8A6ji~Np|U0~mbB_@Ui_d4 zZL>;-Q>WCmhrfLzGC!)!o<_Q{9#eGoibg|y1@E>U;rjIfyxsst@QI!(ddtE>S+jZt z@v*DW6XWRk@C;vn+QrCFAKsCRf&qLIuSu*f+MDcAr0Oc$lOh>A`wF)|c5>(9>r8(2 z2LE1uljw+WR!1!-Hae2HM^}-!HiqQK*Rfqs;QYy>JhwTP^7JGw6~)tEmc+Gvn;5R! z#*Kqd^V89tjJ}sg@ADB{*cHv^1u^2OVVOH|$z6_)NZnqkTT##gkb7^as76<#(3NP3 z)iLxm%+y@Tu_UJwEo?0|Mc#?boK4Zt!m}mM!lAt&I$L--uM_jh+p`~daBwi1_~|l# zhRl&E^Jj^#S3IYtrttgya<0SJ_`QD!>>}6g4v_wtskx)10N3IPa3OP?9^l;Lo}ihT zfjMry=(*kZ^#$cm&&vip-0tS_nZEfj?2-`F(mdULHQrAk&|x9so^FA%X>hAe3qT=JfjiB|rdOH!utn%i6=OQ6GVcY#vrKiPlUW)Aq`9 z6Gd6a{K#4sM6@%1=@?n&tC+i8lvbVO?V}y+KY5j|i}y&5k7A)3OX#Bx$v4nMJ6iHJ z-H9W^LNi=A(p}TLJ)?m*<2ZJ+fpz9F>^sk~zO0?H)RA4`aa6sT|DO*q`Yg0=AIi=eEugX1Ao&p zaFfFCN2N9cCD|l2tBl1tO)RPSfW`azSl%|yvc3uFTNi(Mzosc(7N+1OS2eEcYATzW zX}QBtmuI2Z?i4+XRrR|t z8jEpszDv=^t!(@5tmt)9`1>VJO#FhfUc;=mNa-^lll_w@K@nqx4+q#q0B;s0y|%DzODIWY*-c#`B7!|G&UP+F-50XG#VSKc(3g+*RJ*B^-f_JpXjNgwI{!o+Eh{4sE;Wr1Ek>2j0}A5%7y<|BRTdRWqkHPs^;S ae9xcZ^78(p;Gr4vzSVc%dG6?RI{yWXFKc=L literal 0 HcmV?d00001 diff --git a/Base.rte/Actors/Infantry/GreenDummy/LegFGA002.bmp b/Base.rte/Actors/Infantry/GreenDummy/LegFGA002.bmp new file mode 100644 index 0000000000000000000000000000000000000000..34e30743c54ede36d6fdbf9975c1cd4598f04335 GIT binary patch literal 1298 zcmai!e@s-!7UUD4BxGY#)(1guc zkcxUyv(%P%&P=697}&4nR;XwrYExOc7FlrX&e7Z&_g35Oxi|a6zk0Xt`@ZLSpXd91 zp7TEEtSXp!FVXSHJ)p^MhG3e&h7z^kh|YIUVZ!LTfnk_fRwFmZf`lgunXcxMq?tUR zZIyEqMOntw`7KPFcao`d$0;yhz^wGJrQsN_A3V*jV^`=t{}vCKS#W8+ztyHDco9HL@Jh_=Ha?5d6;dDt}z zyB>ju8EbsRt-Q!gSAfJFzp?*R4sKCEIb@w!N7#nt&6_AU(*yV3sdl%rwLC} z6ZJbg=(zkP*T;XMFBoK0U{_ViUBjNOOU?#rK@pBpQ*yOPsHws5wD8c5X4ZFjS>JUQ zcUKR^pMAqigWs}qWDM7jldQTO#N!WAD}3I`AhVm?@KadyO?L0wBlR0BtSvxq*(iJ# z$*r3(+N*GOy-CIUofLm{M)-Pg{d|F=6F;CV*D#wbxkpX%$si+NC$o4Z30tyQUA>N_ zudSxAwUX@Pg*c8@u)4buB~9hN)-q_+S$F zo-X}oNFSNff0pR_MKcr%5e|ptT!-;M;O;-dX2yNK((oN)FcjI;Q|j}11GdP1EErQB zS>2R+eLk~aJj0>#ZPBw$P`cOWi`!c1nfYh`rAQ=fh)lLAzL@DT gQ~r~e*oZM8@prty5w(HW`!84IQF4wBDd2y`Kiwp0aw}A{5w)qTT#GWe#T?D8aj&-Bo=fzHe|NU;Ip=-OdA{H0 zIp=xLmh6QOFxwuzA2gXQ5X=_@q0HKE%=Y(oe*EaVfnk_f)-HaX@Zz7&;XyTnXw77` zwp-Rs6lFcZ%l0xqvXkJYlVqDOWA1QKR&$a!k9M>FicmFfP{kme?I^FAN^e_vi#e*M5-wIyQ&sOJ2G_GekS5OtdV4 z3;XtZ?3N3|+Jjbn49Cv5c)I!^iHA;;zrTmvmQJ2%7^0%BkEh%tRQ8S1GH{)$Pk(3Q z@L#kJ-=O&035m@>Nihk_u3%AaGfS%8W6_==R&-3Ud}vzo)M}X zOLcP#EtkLM`s8m6dcBMbY^o};YuHkBiP=ES&c*IDC02`w@^TE7}=RA!^^EfPM9 zn1<~bO*?V)zD>!8?c{yaBYgc7-@L$y>7P(GXqdH@+@mJ(B$Ak^la#lah_Yl-OS4$_ zMk+ZCJ4iW|gZ)GaseQXp;#C$m#7o|iyJbk;Chc8E8Mr)%$Lm2+6>M25afPvD)aUa2 z`=w}`RIo^hqe|^*WEziQ3eQgAXlktCosPp?y?P0cCx9`$!lw$~lJGF% zRxKwXb|rdJJY650;;T=37#lf@XY8Ed5?3-kWOb(bXt) zC0h3C7I~C@!5qIz6P5jXCgIcQ#7=QT=BDTXwM1HW?n4p#(ezN><=Ci5`rdr zy40T`b!1BYS)%I^O`p$)-|v@oT^@&^se5090z%#H)~PwG|88J41E;&AqqRt^Q+|J4 zQK8sw;%w`1yXV!-^WLeGmMFGVa5@XbJ*oF@U7hc~fNy%B3kq`j-R?VnU*H1@{vBv@ StBdERteu-Ug8#Gp-|-&^RA@s0 literal 0 HcmV?d00001 diff --git a/Base.rte/Actors/Infantry/GreenDummy/LegFGA004.bmp b/Base.rte/Actors/Infantry/GreenDummy/LegFGA004.bmp new file mode 100644 index 0000000000000000000000000000000000000000..34779feaef24f465af817601c2d224b11b0760d1 GIT binary patch literal 1298 zcmZXU4NO&K7{`CN)pneWt|D^$!fR$6Cgg=hor@nsV{rT+B%%(Kl9wDuV_cRju6PqS zV__=lMa@E6-Z>*aiiDw+Ew@5Mn^Bv3SFU9r_ug{O=GM4m+wB2kv-xiS^FDju=lTDi z=Y5~^E-RS)0Au6v`#}?Hl3=31hBCH(b?p29PmCD4ZeSQDmbIB*LQ!Hj3wcmofkQKS zSlc4|CW^9<2{X4baYh>xriUpoU&gHTQdM`9HxG8O>*xi#&)gbt4AzT~Y;+fh#Wb8Xm$*xX{n%j7?u^*4Wo2LU8sp%e~x%Ud2KK-4= zgMYDi@G9ok11RGncaGwS^YPqZe8@{d`(ldEKI?R-g>h1w}YZP07_Fsk$1&yNyS;H?X?d&+4ud zc)EHh{`^~B8T^i&!4U4BhFNwiiZ>FaM)>^0QKr^=;OCg=o9y1VN9s42T~mO*tz7sl z<~6Rv*s%du*V|Nl*h2Bwox<0H``5D^x%nf?A`P?Nl6%x7pA0fq>SPw@kW`gL?#5Lt zcq5m>#!9k}72-TnL2mbElr)vZ#x$v0YPSrj+oYxaAid}Nh(seOs)Bu$O6r;vRx}i` z_Wg}$OH@`>>(qEF`7;`n{!yj(G*%iks$2+b2xpe6qk;o{5M1@ZkzG+hv zNS!;2^prX1nQ63taEvcM=_GjZB$41L!8xMhuZgcN+>4#b-wO^tbI%h^4a+RSD|dME zHQ+BRvt?$+`+T?mE}w))`~rc1-~W7T`F%d$TA#0rYA7oW+iYeaus0Sn&4F;3itz`> fW{ZuROUI47X7^q8f97f8?_FGf?~>$q@9^+1gJ5h| literal 0 HcmV?d00001 diff --git a/Base.rte/Actors/Infantry/GreenDummy/TorsoA.bmp b/Base.rte/Actors/Infantry/GreenDummy/TorsoA.bmp new file mode 100644 index 0000000000000000000000000000000000000000..24649979cdc5efd0f1a3552670f17f3dd7db4032 GIT binary patch literal 1294 zcmY+Ddu$X{6vlt8j|{OX3q?9WDMiE%p_MIIoh^?b5;{C;skJ&KbSp)|fY@zpW48rq z6KpIN3Y3TFf{_hDzXXO@kpZokf%J?DCg4Idi|9d(L;h zbMKi&CF%E&T#w!jnxIi)W5rTXlKxQg`~Q!FgRUDGhKXf0@oU(|xmn6+bs0ID$%EQv zIX6+1xs1wc<-SSB88tCNiTMKNdOw>QkMR0|lk7Nhh3@nJP?Vodx;lf52RxE*pb2-5 zL{YarCGT2 zg!vh>BuM(gi;S&_k-hCt_MPbA!?T~!eQ}7BLt*-_eJ}AkE|1igzH~9oklLl2q?RS- z$GxTnx8=vMwxZP>#IxZIo^IGh!JcDO>^MbP=W(8B>&MsC%~Qca>bi&M?7dF?Cx0;i z(%r!9t*EFS;g(>!&zZrjX zGYuV`bYA|7>yh8-vu$pOxl~oOYq*MZ(QKfWl;N&4MXN<-Z7qhsm4~;ru(Gp@m8Z|( zJKaP1=il@ghjV({85`a;p-Z)8Q<)KUmU4#vUATa>EB>VT?u+?weVR? zZ(D=0eFL7;Z?g9Ny_A1_O89!H`RxLSZ~lZbPs41shdZGp;)TAe!odj7IQGC!)!p2l+HF-+mvAROD<8+j|RkE>S)h(;3@!WKSN_$G|c zV8*n`%A-G4oP?ESSOlWyH-^Sq(M06%n<>JbuY2>)Fl4s7{qFQ Pcl@j6D3%Z=tAYOjp3#K6 literal 0 HcmV?d00001 diff --git a/Base.rte/Actors/Infantry/GreenDummy/Wounds/GreenWoundA.bmp b/Base.rte/Actors/Infantry/GreenDummy/Wounds/GreenWoundA.bmp new file mode 100644 index 0000000000000000000000000000000000000000..0d19dc9f311eb6d425551608e99117f7be9ddd91 GIT binary patch literal 1118 zcmZ9Me@s|Pcu4!DF3 zSs;oEY8Kk^#|-&VBn<7>a;vMNji^n%tJb0)aLYNGTjR3YZV%*Nz1w%^-TOYz_xpX` z_c`yzf~|M6Fdmn$CbN6);4YMf_4&2`k1%0$-M}zREUSTErb2{g3b|j+#i^OB)^^Cg ziK47yQEW5!#q_dh*)#>_E0`5F)%C~OeYl@J$FDMU;cwED<5;XF68W%O@(ncMc1pgc zdvWJjXoihD+g|v(a@t5Tj^Z-gSZ5x=Rd$y3zFvIYeQ8(h-=#^V2LFZ-=mhA!>xLYc@nwqYr)#i@wR;1N)?YgB3Le=*?xqXA$4J4Wqph z_uyNUzu!&qR|CQ~jOW*j9Gm$OWxa;kXvsZl;wOcaJe}0yOropP$g0X`?HgGXwpNgS zsu0()a5rFP4Zx=p(K4l{CPlwc@`qAED@RT4`R$ZaZO>w8sb8&vYW zIyH6$e})3mKdSVeMxOBmrtnk>M|)d6Z}%MJ+O^9BgYyUw5J=hg>aZl8aR+0S3+pNqS2 z#zeC!ZW#&ASdt!DN$Q$-(jQyPCOw6bqlb8ILjrYqXSoZb*o`ZYO!2T|oS3}v!T~GtND^J4qJI_Tm{{nCtM$rHO literal 0 HcmV?d00001 diff --git a/Base.rte/Actors/Infantry/GreenDummy/Wounds/GreenWoundB.bmp b/Base.rte/Actors/Infantry/GreenDummy/Wounds/GreenWoundB.bmp new file mode 100644 index 0000000000000000000000000000000000000000..34cb1a1ff2457abe6cf0fa47f7ed26f8fdad59b5 GIT binary patch literal 1126 zcmY+Ee@s1`BkVjd$gU$789DPe>B(^{RTGK4*Dd)5ns7TM zU(>5`=U8ZljXT>8&#s&{l8i&R%r@4W2XU31WP`6CU(Y4VTNY^RUBIF0DB{DRSvd4X z*xZ$Ul%<*HxZ87$xRyWIH!#YFr#@xm+!TXTGfZ6hPU3YOZqb*zbb)4wc43uhSppl^ zwkBMbjbZIT^BlzOeS;_J_K>poI3>G=DC+Fz(bfrk-6K4H^b$2AQ*@49rS{|B$(a0$ zuE`(pd_5!H43u<}$O0eBiaJ}pSTHsJs@vh-W*Tu7eT2O>*t0`VBqN}Sh>}DQlX<|!fH(Q2J;u{{N z__J?#dGcF2{4;odnrG9EAa)=~jqr8P2Z?I*!OtPlH`%>+kJN9ls-^(FxlH&h;#;?2 zw0m(6ze)M~JrsX6Bz&WIem%?KxgSwBXqb(boTDawQb@_uNiEJKx+;yV%6!(no<(76 z1?k5MaUCuvYoq}sN#&l_B&l0!w+yM;VHK2IR92tPsLQ-yDNR3wROR+5~s z8a*|Mf%lH_#YaQLB;CK7)V1-XKe&#~dJ1EQ_VeV%1nTnAI8&L-L~R-uw`VZbn$4Bn zkMaHf5~klSW%Q{S#-DNWi6>q(H7v6PTh4OYFTMlfTT##!A?My+--NElp({>_)iLy3 z%$%)~V@XZ}TGUz`io6r)IftU5MHfk)g){VPA|e7!^mOSzL;A>+ s{ literal 0 HcmV?d00001 diff --git a/Base.rte/Actors/Mecha/AIBox/AIBox.ini b/Base.rte/Actors/Mecha/AIBox/AIBox.ini new file mode 100644 index 000000000..ed7370726 --- /dev/null +++ b/Base.rte/Actors/Mecha/AIBox/AIBox.ini @@ -0,0 +1,352 @@ +/////////////////////////////////////////////////////////////////////// +// AI Box + + +AddActor = Turret + PresetName = AI Box Top + ScriptPath = Base.rte/Scripts/Shared/FlippedFrame.lua + Mass = 40 + HitsMOs = 1 + GetsHitByMOs = 1 + CollidesWithTerrainWhenAttached = 1 + SpriteFile = ContentFile + FilePath = Base.rte/Actors/Mecha/AIBox/DroneTop.bmp + FrameCount = 2 + SpriteOffset = Vector + X = -13 + Y = -15 + EntryWound = AEmitter + CopyOf = Leaking Machinery Light + ExitWound = AEmitter + CopyOf = Leaking Machinery + AtomGroup = AtomGroup + AutoGenerate = 1 + Material = Material + CopyOf = Military Stuff + Resolution = 4 + Depth = 0 + DeepCheck = 0 + AtomGroup = AtomGroup + AutoGenerate = 1 + Material = Material + CopyOf = Military Stuff + Resolution = 4 + Depth = 0 + DeepCheck = 0 + JointStrength = 4000 + JointStiffness = 0.9 + BreakWound = AEmitter + CopyOf = Leaking Machinery Heavy + JointOffset = Vector + X = 0 + Y = 9 + DrawAfterParent = 1 + AddGib = Gib + GibParticle = MOSParticle + CopyOf = Oil Spray Particle + Count = 5 + Spread = 3.1 + MaxVelocity = 10 + MinVelocity = 1 + LifeVariation = 0.30 + AddGib = Gib + GibParticle = MOSParticle + CopyOf = Spark Yellow Particle + Count = 5 + Spread = 3.1 + MaxVelocity = 10 + MinVelocity = 1 + LifeVariation = 0.30 + AddGib = Gib + GibParticle = MOSParticle + CopyOf = Explosion Smoke 1 + Count = 5 + Spread = 3.1 + MaxVelocity = 10 + MinVelocity = 1 + LifeVariation = 0.50 + AddGib = Gib + GibParticle = MOSParticle + CopyOf = Explosion Smoke 2 + Count = 5 + Spread = 3.1 + MaxVelocity = 10 + MinVelocity = 1 + LifeVariation = 0.50 + AddGib = Gib + GibParticle = MOSRotating + CopyOf = Gib Pipe Small A + Offset = Vector + X = 1 + Y = -1 + AddGib = Gib + GibParticle = MOSRotating + CopyOf = Gib Pipe Small D + Offset = Vector + X = 2 + Y = 3 + AddGib = Gib + GibParticle = MOSRotating + CopyOf = Gib Pipe Small D + Offset = Vector + X = 2 + Y = 1 + AddGib = Gib + GibParticle = MOSParticle + CopyOf = Gib Metal Grey Tiny A + Offset = Vector + X = -1.5 + Y = -2.5 + AddGib = Gib + GibParticle = MOSParticle + CopyOf = Gib Metal Grey Tiny A + Offset = Vector + X = 0.5 + Y = -0.5 + AddGib = Gib + GibParticle = MOSParticle + CopyOf = Gib Metal Dark Tiny A + Offset = Vector + X = 1.5 + Y = -2.5 + GibImpulseLimit = 6000 + GibWoundLimit = 26 + GibSound = SoundContainer + CopyOf = Crash Woosh + + +AddActor = Leg + PresetName = AI Box Leg FG + Mass = 10 + HitsMOs = 1 + GetsHitByMOs = 1 + SpriteFile = ContentFile + FilePath = Base.rte/Actors/Mecha/AIBox/LegFG.bmp + FrameCount = 5 + SpriteOffset = Vector + X = -6 + Y = -7 + AngularVel = 6 + EntryWound = AEmitter + CopyOf = Dent Metal Light + ExitWound = AEmitter + CopyOf = Wound Bone Exit + AtomGroup = AtomGroup + AutoGenerate = 1 + Material = Material + CopyOf = Military Stuff + Resolution = 4 + Depth = 0 + DeepCheck = 0 + JointStrength = 165 + JointStiffness = 0.5 + BreakWound = AEmitter + CopyOf = Wound Bone Break + JointOffset = Vector + X = -2 + Y = 6 + DrawAfterParent = 0 + ExtendedOffset = Vector + X = 8 + Y = -10 + ContractedOffset = Vector + X = 4 + Y = 0 + IdleOffset = Vector + X = 4 + Y = 4 + MoveSpeed = 0.4 + AddGib = Gib + GibParticle = MOSRotating + CopyOf = Gib Pipe Small A + Offset = Vector + X = -3 + Y = 0 + GibImpulseLimit = 2200 + GibWoundLimit = 5 + GibSound = SoundContainer + CopyOf = Bone Crack + + +AddActor = Leg + CopyOf = AI Box Leg FG + PresetName = AI Box Leg BG + SpriteFile = ContentFile + FilePath = Base.rte/Actors/Mecha/AIBox/LegBG.bmp + FrameCount = 5 + SpriteOffset = Vector + X = -6 + Y = -7 + + +AddActor = ACrab + PresetName = AI Box + Description = Artificial Intelligence control module that boosts your AI control capacity by 10 units. Keep them safe; if your capacity drops under your unit count, the AI stops functioning! + AddToGroup = Actors + Mass = 50 + GoldValue = 250 + HitsMOs = 1 + GetsHitByMOs = 1 + ScriptPath = Base.rte/AI/CrabAI.lua + SpriteFile = ContentFile + FilePath = Base.rte/Actors/Mecha/AIBox/MountMobile.bmp + FrameCount = 1 + SpriteOffset = Vector + X = -9 + Y = -7 + EntryWound = AEmitter + CopyOf = Leaking Machinery Light + ExitWound = AEmitter + CopyOf = Leaking Machinery Light + AtomGroup = AtomGroup + AutoGenerate = 1 + Material = Material + CopyOf = Military Stuff + Resolution = 4 + Depth = 0 + DeepCheck = 0 + BodyHitSound = SoundContainer + CopyOf = Metal Body Blunt Hit + PainSound = SoundContainer + CopyOf = Robot Pain + DeathSound = SoundContainer + CopyOf = Robot Death + // AddSound = ContentFile + // FilePath = Base.rte/Actors/Brains/Case/Sounds/EnergyExplosion.wav + DeviceSwitchSound = SoundContainer + CopyOf = Device Switch + Status = 0 + Health = 100 + ImpulseDamageThreshold = 5000 + AimAngle = 0 + AimRange = 1.5 + AimDistance = 30 + Perceptiveness = 0.1 + CharHeight = 100 + Turret = Turret + CopyOf = AI Box Top + ParentOffset = Vector + X = 0 + Y = -5 + Jetpack = AEmitter + CopyOf = Jump Light + BurstSpacing = 1100 + ParentOffset = Vector + X = 0 + Y = 0 + DrawAfterParent = 0 + JumpTime = 1 + LFGLeg = Leg + CopyOf = AI Box Leg FG + ParentOffset = Vector + X = -4 + Y = 3 + LBGLeg = Leg + CopyOf = AI Box Leg BG + ParentOffset = Vector + X = -6 + Y = 2 + RFGLeg = Leg + CopyOf = AI Box Leg FG + ParentOffset = Vector + X = 4 + Y = 3 + RBGLeg = Leg + CopyOf = AI Box Leg BG + ParentOffset = Vector + X = 6 + Y = 2 + LFootGroup = AtomGroup + CopyOf = Crab Foot + RFootGroup = AtomGroup + CopyOf = Crab Foot + StrideSound = SoundContainer + CopyOf = Robot Stride + LStandLimbPath = LimbPath + PresetName = AI Box Stand Path Left + StartOffset = Vector + X = -6 + Y = 6 + StartSegCount = 0 + SlowTravelSpeed = 0.4 + NormalTravelSpeed = 0.8 + FastTravelSpeed = 1.8 + PushForce = 2200 + LWalkLimbPath = LimbPath + PresetName = AI Box Walk Path Left + StartOffset = Vector + X = -13 + Y = -12 + StartSegCount = 4 + AddSegment = Vector + X = 10 + Y = 0 + AddSegment = Vector + X = 5 + Y = 8 + AddSegment = Vector + X = 0 + Y = 3 + AddSegment = Vector + X = 0 + Y = 3 + AddSegment = Vector + X = 0 + Y = 3 + AddSegment = Vector + X = -2 + Y = 2 + AddSegment = Vector + X = -13 + Y = 0 + SlowTravelSpeed = 2.5 + NormalTravelSpeed = 3.5 + FastTravelSpeed = 5.5 + PushForce = 6000 + LDislodgeLimbPath = LimbPath + PresetName = AI Box Dislodge Path Left + StartOffset = Vector + X = -1 + Y = -10 + StartSegCount = 0 + AddSegment = Vector + X = 0 + Y = 6 + SlowTravelSpeed = 2.5 + NormalTravelSpeed = 3.5 + FastTravelSpeed = 4.5 + PushForce = 12000 + RStandLimbPath = LimbPath + CopyOf = AI Box Stand Path Left + PresetName = AI Box Stand Path Right + StartOffset = Vector + X = 6 + Y = 6 + RWalkLimbPath = LimbPath + CopyOf = AI Box Walk Path Left + PresetName = AI Box Walk Path Right + StartOffset = Vector + X = -2 + Y = -12 + RDislodgeLimbPath = LimbPath + CopyOf = AI Box Dislodge Path Left + PresetName = AI Box Dislodge Path Right + StartOffset = Vector + X = 2 + Y = -10 + AddGib = Gib + GibParticle = MOSRotating + CopyOf = Gib Metal Grey Small B + Offset = Vector + X = 0 + Y = -1 + AddGib = Gib + GibParticle = MOSRotating + CopyOf = Gib Device Small A + Offset = Vector + X = -1 + Y = -3 + GibImpulseLimit = 8000 + GibWoundLimit = 10 + GibSound = SoundContainer + CopyOf = Bone Crack \ No newline at end of file diff --git a/Base.rte/Actors/Mecha/AIBox/DroneTop000.bmp b/Base.rte/Actors/Mecha/AIBox/DroneTop000.bmp new file mode 100644 index 0000000000000000000000000000000000000000..d811a438aac1202fe58fff74e2fc9b377297753e GIT binary patch literal 1862 zcmaJ>Yitx%6#nX(MZq0v7fNXnhfv%$qSF?vmeAqRv;|QI6J8m1XQyPFZ4K0rZHb|U zCJn6xit-S}LYfE(;jyHckye5aOng-yOAtwr2GfXQSBU|$GjnH5)^oSN`o}YKcIMvi zo^!tQ-Mh2&)tU*&Soxzs5xwP;&mhmjW10DEPv$Z1Cyg{DNro&d(Di2gKFW}OP>m=2 zi;*uXcuL$txB{=Y6ccjW@ObViOqiNPl@fsxj-h_@QFI?XgIz}xFurzCIwud4{If8* zpoHROh?F~@;zcQnl1d$-97D;%Smqh1>_nk_1OcTJrOF`$)|^9G!zncEzmE0o4muAz z@cAWpiHA?r;gh(>AS^tFN#&OysP~cA{ud6!2k^;-i!d(Tz?mDP82b4Rt(V{{q59O9 zL@vryySkog>Etm4*0my_#~|xlA*zQ^QuhH~ZrX#Qy(h3@S3hcdPNAY>2o3uTEIW1` zjm8c14Bp13FaE^5D<fUGRSn3l-H9oiK0@}^AxuAfAJc{&P~Q^O zCw&!#YUxnO*Tz~9YiU8#&K~q!{T{cIf8ac0xJ&Ny`-!^1ZR~)DW zH>3CP0o=NE8ObE~VKB<)r+ia#CS%r&X_zAxKq@Xo{Pb~r_jx~tuU|lN_%rg$V62#WKY23G9 z{9xtSFw$ojmPuw=R{hkGk&%c2)Dsrz>pK^*nGhoL&=n>N2`2yYL@Xdm$^>1 z;PHf)5f(J@CeUYDCr*0^(^6V091Oa)9k%U|#p4XyvNhMvV1^b922-|Ro(!c>m%&(A z<8g*&66U&&;5wRxV#2c0sg%u_hw4=XdxIWLqnoe@$9O)9^Y9ol%XX-W#k(Vn;wqRY z)Z6O@Lt)pnos>lw=aQ8s{uL~wGH!y0RC9Q}jf64FOl46{Ri!!A(Huv}V5E!Tu!;)C z99Q6&<9GzVh~h|V%SzErae~Th#xa316V?PI%1986xC%~v=zT{GYMQHQZ5G!oaYr-D z2=fRIQE}AXl;v6$VYEjHhnalV<3yt!O;I&ySj^-YaiN@MSsTZ8cf8#lReN2R8jV|A z&jjtKZL$i@+1=j#);3Kf*{aDSv(%6y~$WSo=ET>V3?-OY=bBnmS8xhLvIA} mIBu-WVixEcv$4tQv4^bmkR%zp-iY6aIa2p3@I+uC zas?Sr2^$HQ;q?|_Om+(%&pv@M6B8(xYamBrsNHZF+xDNrj>7{mzIISFBM0LG(=a}- zkoXb=%AHGmL5!lXREHqNP&hx9z6VR&kuM!WP;N(&d;r0fXHZ;s0(E<@Voj@!_JcNj z0TEuR!zbwQiLS@spMM17N-n^!+(l07U)UG##V6;^!?+g7|L0pYUxcra^r_WlrV_3SQ2UVRX5Nhj3-5vvrk6cB) zaSfe)H?jVUKQZT$iFYsk0_DeHs!f8oNXGc`I%HOD$AtACA#+ndCLg?uN&WYzZ;|wA zePx-nbjakZVoiuOHKAd9Cps^GkDG})1Xx4CPk~Fa5(2OK{XvzC9L4R#P4DTZ;5$ z?A*PJ`j;@dz8qr9O3J5WYTIf^9n~m2{UO$TycbKZ^iaNDD0hB9_q`!_iv`F{I_;xC z^%S6Bk%*Z~N|04M3-i{NA-HuOD%v6_I$D8X_ZrMI8sW_k;K{ap>YIAkCF)zo-uQm> zT|SEhPrw`S!dDi+wB-U8HdkTA@wE`<22d6iQ6G!oJ|Cp>6QHvvV39N%GUchJ93AZ& z&~bX}&;n zMan%Vn1fO=fCaO%ap!0)?)Eg`{-+zkzTAv|zuk)5>?};lnFt{_8~IP?VdnIyD0(i4 z1!4jE4!wt0<_c(7Gz;h7cpl%xUciOsQe0`T#PwaT;pYAo80rqgSe1ufRlvEmGe}c_ zE-yul_VV^1)t#Way`6!#LC{T7T4 zYDdDFZo^R@2>mrpDs_aD*)Ep^MCKVjV$@)f|6>bBD0S5s$~8 zX*=9eO_T%Oj2%1aAHiN-X>BO38+ z$8S5t(@a7&mc}wt$)v@(N7LM)cBvuKBkWD$Wl%nsXEEDij%%vwA#8RUBVLGmSkksk zClXejuC6d)WJX4cJ5Gp)X|-(I7 z*;f1`JjRkVh)3D{F2*hX5F03_RyDU)jfSe&?}uw`e@nWSfm@ncOqho;hb6ldn@af~ zv$^TU9%gc8s7kbI9*C~+uLnB?f6Je+E2^mAx+b4S8wxM+geAk zXTf*|tr}tOni&pZ9q$}-d2}Wi)l3%BXw8`EDA6rjI=LMmaQEG`T`Z);(|V5LPE2F; zZ)8x%ep>wEc$_5D7LUgV(mWWZX>rS-k__fIY}2MEf?Peqm#9qHXvO-5tbr literal 0 HcmV?d00001 diff --git a/Base.rte/Actors/Mecha/AIBox/LegBG000.bmp b/Base.rte/Actors/Mecha/AIBox/LegBG000.bmp new file mode 100644 index 0000000000000000000000000000000000000000..615c24b56269d94281f43834aa1d0cb5d720a79c GIT binary patch literal 1302 zcma)+eN0t#7{@=2+K!9p76wOA#LPHM$P0@)7sbdJ98p3d>ew>#lH))QSTMcf5;tQ( zDk`X1YD>qAcqtNx_O{##6>UUq;$5|-z1(xiIh$MKa%;Oi_eyU4*WJFq^ZPw7-|zFB z-*fKL;)FYh{vNpvzuzPI2AXiE zNWP}m;3>4w3?H5XU-aoNY$4q^gxhRkk$C|3n&T|4?V`40gocqorRpeBhfA|? z=@Iz2r{E}Yd1txTdzIvEzq7Y{fR9doM*rDSdPV~bjeRfiIxdgsOJBM`Geo;&y=Yki zAMUkHxGf)swFS+408iDMJl(L1%ss~_-_c8HTNh6>4^i9R&r?T7sOul4?ZhSOKN%-? z_)m5Z|A_aSfYfH7Dz@@5EyM`-AmzoXK;!@nJOsUl(v8D#Yx0Q#sHL+=%>l)#+ znBTk>qqPc8-&<6C&_UVPy}~zu_t!HVzWx)+Vhyv=l6%yoo=h^A>tvPXk+?pa{OT1f zd_A9%=1OupOK=~qAisYTO1jE@&FRv&^lll_w@F9$eomYp#0fems)B2UO4{mFikeD! z;k|0KB`Pawbn1MS{1Noa{HQW}8q1AGF@>i}I9gja^7g^KT)cP=$BDpCQ212gn~@Mt z+Pv9hq|QapN~in%PQLuO7yrmf9RDf7If4?eNvtm1x$a~Nb(Lk=v#^h?xS&~Y_@@!65XE0Qs&4tam zj5ZfAw)07T*jLV#cUCj-Y!ZXdr|_wFzG!M#W;s5&%PW4V+mX5z1uX)(_tuR~=xQ>$ zk|MD>hF*kOxJq&?$=QUKumG1L??h(KrD$l0rIKgi(Vi2YJYHJegZcQi=m#Df8;d4- zy3C&;b7ac=S)%KR=H%og;c!^|dL-7dZ~Y}aCObPz40cx3wl3n%vTb{OJQ^ftN8FAR z3Pk-IBz)YqotT)Is3Bj@;*1GRo$JLtJ{}Va1#ZSyh&vRr?VBf9O2C%bTLriy`BS-3 S0a*f5xw0MW{MY!upZ@?5D0(*l literal 0 HcmV?d00001 diff --git a/Base.rte/Actors/Mecha/AIBox/LegBG001.bmp b/Base.rte/Actors/Mecha/AIBox/LegBG001.bmp new file mode 100644 index 0000000000000000000000000000000000000000..0efd57f82f36eb9368aff05f304149dc19205a89 GIT binary patch literal 1302 zcma)+e@sG_gi<67?bmWERJ0MbiFehS_T!#&bI#`0yinWixpz_PzuxWpp7(j*=lOo0 z=e*B3`K1ZB5gQNP3Yx6$5X=zVf)d-m9Gm|;MTns528Ll`S)2GN7$$PPj62n0+?vUK z+GaU7QIthYPj2D%q#mZvwkb7V#9ZsAcH<#l+k1>{hc3{6`VVq5Q<$Nq6MwH);te$6 zc1ygb*WoR)&+{yHwN=u2I?Kr=+UtX8xv zfgjK6W;~W3!`gyYy$|oY*LkvW2U)w0Qn~Fo<()k|);5fN4}@}tDxj&pyZmwm-?7l-odPfx0$(Rn7R9}GH3X@)UAuYykFB4EelidyuS&5 zQxlCHophf6f=l)<428p75x7)Ua@TO>>XNg8T3U{0r75{uB-Yho_*;0OwV4&2U99Lk zfv<0Xici1hrIByw2n4CVe3SeeVf;>*dg1H3878602R}wc-(>r)9a6u+-1<`VmQ})M zk=nKzW9vG+eQ!|nUN;qA9v8j=s((Ji!RtSuEY>iaEV)Nb^2s8rL?^pqDT%c?6s%v) z!dD9@Ygf^&q$UlU(lxbr+I6zM9MNmgI1HeI~;VIb7JB z$5>k-+nr;`|Z*3HM&siLW2nU(nEF0TY6Z%6W06tpPh-nVXSMpskN z6}R~67Oo((TRrR1f%B-*iI-kIZZ~)t|2%%IcZPIPR!01^=Z@Wpp2+H9)eLjww{{) OK8l*-N2WIa_wz4ItbKU^ literal 0 HcmV?d00001 diff --git a/Base.rte/Actors/Mecha/AIBox/LegBG002.bmp b/Base.rte/Actors/Mecha/AIBox/LegBG002.bmp new file mode 100644 index 0000000000000000000000000000000000000000..eeae86a0f3293459ac12248a2e8c199ba4864251 GIT binary patch literal 1302 zcma)+e@s(3Z}O_)#Pb?bmWERJ0MbsjOO)e%yP=IhtGJLT$H)ODp-Wcl*BYdEe)GzTf9L z?{m(^+^|~+j0bK8O`dKOga~dz37lUE%!?;KestZyFib3~o}WEF{L^{du4WOfncSmo z7rTj~tYb;!PHv6pX326dx#shjrEV(fj_~S%UUnV1z`*H0NlAzzM2#c#ZkNOxXu=&W z@tR(VE7L+V+_*B_fz_GWLcDPZr`f_f^B~TxCs<$AO;zU@B~7!mbj{*Wbri|Np;1FiTVuCmv8tacBHdyiANtB?HlZXRwPp{iqmM~{wCJupuD&}C{qo+5Sh z4_+Jnf#R<{lAD2&ViKBL#nSvXmest?(j6nL?7GT|k!h)07kzoZrYTw$rr;TO1MY?f zYTMdrKmR3{y}vT-^D!xKsH)_y;YiUXX9G1iALkZRa^Kc321NA8JDt9%Lg%Y=V z1qrdM(39fndG8oseALIp*h%b(Q-X8 tF%UAR-7QDo{Wo022(9)FH&A5?Pv)Qik~ z{t|zkd70>la8^exCpJ2g_``5BbPh{xOejeWtOKo;Cr^^!T_d_0g|0-4 zua2Q-VP5R!NI|3qNhv$ z8PZ3l^q(cVwrI}I&f@p`#jel$+TKOK1aH#62U+jTo0GhY9PIz>fjIBf)Qxtp*Y+-q z1*<(ZC7QN9l@!=}=H}+SK{7n{f_*M1$exqQ6WHRhgMz%C`LVD^o^GW7=k$Lse*>2n Bc`X0{ literal 0 HcmV?d00001 diff --git a/Base.rte/Actors/Mecha/AIBox/LegBG003.bmp b/Base.rte/Actors/Mecha/AIBox/LegBG003.bmp new file mode 100644 index 0000000000000000000000000000000000000000..201b7e166a70168ec968f5f02362daf789a83cd5 GIT binary patch literal 1302 zcmY+E4NO&a7{-6?)^=QEw=g&g;x!`<6Y_EwbuNlCb8-X;iKt`COssh{1}s?|a0#2S zAQTfnve1^!jQA)LhW54G3KeZeZ7QqQw2ylZIcIZgTyAZ*7c|#B+jH(c@5l2z@A<#? zE-p;CjmhhwTS1d=cL=5mZb6xhU!1(h-l9a&bpyjNv8-Bt4TXtbE#gi!AD?D&pSDTz zCWt`nk2Vfc+1AVB2hUQ~J4|c;1vY*W#5Lxn}L#J5?@%!wBi<~Z+w?&n+KWIewmqrS7mNp^yU4Urf6B1g6Hfy?7BLt zTUu#7{WTYy-x&ypxg_was(9D%=IG+tKrJlBztR-17Ks%V7Y^i5OYa1(ij!@at zN68o8@zT)uw2Xu(yEw+;Yhi3ROqKApjfF|5tAt;oqHnTo$99?DU{+Njdc$hrvq)`R zgVDU6V9#5u{ctBG-*gLKA7#ItVE@&hQ5I;Jb(Wl?CVsNWD$og(EF!Tyn1GxvtBrwn`(HweHZ7>ox*h|FhW@PRNNUb>YtSr;w+sEXz*DIs5`wKC0l_v6mV9 z@)iC$@hZNgMCPQ-AkCLd#{IJi%uOZd!Fepxv*_Qqn_Zp`M)rd);_ zmvVmFWBj#ouG4obRk0m{|XbE%iD)LTb=e&xBmRKx(7D4T4;aSAcC#Jx0 zB`?0BI3fm5prCQC*l#fqk+j1$K!D#5{ZP|>n)*>6AF1ep&JDM1!JFMlK*@7 E7mI6p_W%F@ literal 0 HcmV?d00001 diff --git a/Base.rte/Actors/Mecha/AIBox/LegBG004.bmp b/Base.rte/Actors/Mecha/AIBox/LegBG004.bmp new file mode 100644 index 0000000000000000000000000000000000000000..9da52b374b32b93c3952657ae43009cd8147bd36 GIT binary patch literal 1302 zcmY+E4@^~c6vsd9)plJ(uQ0d@B4)&8Vm?^ZefTF+CRhH1MAWrKCgi*j0ShJ%T;gUd zOvMy63$1j{NU%tl+P~#isAwZGwMSnm{?XLzxe}%#tXSy%_T`Qc|hAJ z=O&7>kZB21L-#2fp%*na3DJ!k$QYknfpYAP}JdnMmM6YnI+ z*Ys+d9?2^Q6KQqw+2`IbpqJ0@|fI*Rn+)-2q5 z7(VVtuOLKQ+61c=GTdwLL?$^IBQK2k$bml9W%Np@vE z3trEruw^}2M+)&AEGN6C5hYFKzLqqZTV}TmncJlO*gpC$oWuz@D5`=xUnR9Ph1}*M zp8uc{ZHY>LwN9;XJ%0s;Wq(xJJ&io$QB3iv5Ra{`4ZPE_hf9~v<2Ydq6A(XD{AR?) zkUDo3^Hb)aXQXlL!y|nCX*a`zr*MW(3(gY|y(U^+ycc^C$N$=aTrmELm!5SY`=6d6px?(zhdhD+*c|^4zyJG^4AD z=t`1kbqqZhGiSBrSd!C-7CR5OBKJgg&aG%@aYd46;nkiMpQXH5+J*V}SmXtdii$#$ zdb;eNA$w%X{#jDjk(!f}lY~McIoHEl$G-KK@K~5;j5A*kzC82-lIAmZ*3QAR{WMa2;nVU%%1VP%97(Lqhcc~C|e6%i3-bP%`|6%`Q` z6%`c~h1EnR4aYBE=0FF z4oiiQY6hzlqwYuWCp);q9N{d7Zm=$S=)!|8Zx%qe7r1LA(A^B?FvB#85w9N*CwoNu z6v^Sp{gQiGpM6Q1a9F$PvzA8-V7UWWUI51%K)5qVZ;Ez*3~RDPd%Qwx9HB8v$R$Q= zu|qH3W4u0~x5-f7zF@Nb2zQr~n*)vg>BKIzLKwXTN`nOEjNFn7`ftT=H zc8~Cw!acp9@th;ba`cEddC5@c^n=1hrX%B92FlFzjPC zo8oZTBFk=eL{2<|ct%NwD4VEO%8*tSQMAP4W`*O9HIEzG7CH9|?v=!@TPAF2z^R!? zmt9;|KAtyyygUqWO-3jiC6rAAl~0(Ks6f`(leDm&Q!n)j`sDWLRgv^+*amg%c@~Fp z6US*Ar+Ei)+rYY0#>QnX@6}Un1iZ`Bk-RhV)-;Hl@!rG!0MalaHS(u^9qL!v{4S~4 zfLawL>O$k0P;7;CFX-5UeMuBZoRt)R4!z8EfX$#r1mS zy1ebpp8owMe9zgRZw#E@ideVs&reVH_vc%HK9|o~_L>&!ztO)xpVRcihazADTufhI uKl#7XfBW|5^py&~jbCp5+x?e+d%%y3ojHm{KCFKxpMM{I|9t#^qJIIJyLGJq literal 0 HcmV?d00001 diff --git a/Base.rte/Actors/Mecha/AIBox/LegFG001.bmp b/Base.rte/Actors/Mecha/AIBox/LegFG001.bmp new file mode 100644 index 0000000000000000000000000000000000000000..33108a15973e2e4a25a325f7d963f05331bdc003 GIT binary patch literal 1302 zcmb_cA&lx+6g`{lCKc=kK{gc?2*eYJW(0?TyTMu7A#A_b$uL?440FQoNl2g6iUM9x`L)jXht8J z9uf&`1PNg8S*;oQb%66$jd8ylnKv!7|HmAo99S?c6`+3Fhf`gL)OUx+r)aEWeL(zejx|G!_v&qVcpvXT3$R zPv9KhQG3harx`lr8@*>J_#SY$u)e}@#2%Feqhmw%TjX<58aS{57jiLyvmozgLB0r1 z5@UM$0<9{b7*~{ndQ6y>gxRQ3PX%??MtM+&J!nJDZJ1LB^~i@-)=?Og**AN4E%vQ2 z3ddNkmq@de9@4mHIz+1ktJgql&hx42usw;6-^N?Er+;*MPtcncDDt@E2!bvqlQDL? zHPZBoJu>p?{Gl9Mxfi>kjs3WZ z!?cB{sbkqHV&yQG=jy5^e4gcDPu(eXYZ}BAJolj6gVYU3jr!?di~d!0ewXyDPp^ss zeW7tr=()TmIBzhI=Oz?+YG}7YsM_iFf#-5L2-cJIkwqUVddOwnlr=N@;&QogT{8Cb z=k)mRe?odrU+(ii=X^-d$M5s&>(|HhIzOK8F|Uu0$K%V(@iG1O;`PW99AEG2$MbKW dJ{}%u@o(dJK7YJEJbZkggV_nkefj^s{R5iKb!q?r literal 0 HcmV?d00001 diff --git a/Base.rte/Actors/Mecha/AIBox/LegFG002.bmp b/Base.rte/Actors/Mecha/AIBox/LegFG002.bmp new file mode 100644 index 0000000000000000000000000000000000000000..65bf2fc8ad75c13f57d741514562dd56c03fc9fa GIT binary patch literal 1302 zcmZ8hA&4ti6g`C&Mx>t+p^O+25%EOCP(pc>i13LR$`oQE-a;r-h#2U!q!2N%5fKq1 zA|fIpA|ke8M8t@Qh!rbFL_|bH_4)tD8D~go!?qPXFTf$qaXvXH7&b~mp)3NvSI{&G z%^W~8B3cSZc~G4Ies7L&5@9r7BYwysD<*RV^pa%04MFS@^M&*w8yph?6a% zZHi>KXS`%A>$5LO6E1k^d@NaMzF?rXpI(Vjv~~D3Aw~* z&Nt}BTa1=FbXOT_>nDuYAK`9Na@q7SD|4 z1_1(EFC1aCPOwW;Eb|-(nr;~6&hulQV4mSL$ybr9hobMp4hEW?{sEJv4kjyf*`u;yb{)t;n|L0|Ll<`FK`y3n7sTBx zh!?|66U1eI_RZcs zn|&*cqY0MlC9*uDhBTg;0nskQ?l;lC)so8d-L+J#yk1#50OIM9D;@T!OSJh@v|@tQOdBSaZLkt&uZcFjf+~W|?S619sI! zde^~e;p1`D!_$2q=VXYIQAEi!P=3L*L>aQmo}`84jC!e+(IdA9uY#mo#X6{A%d^;x z9PB489A<6AEd$GT2`iVmyjM@P5b!P!d-Bf6Thkye#(NKYeMrNE)X1OuwW(j#;CD&Q z2Gpu3QWqM}gqqVeLBGj7-kVUwsiV`5pz5dV2VN)?AXraQM>ch&s3DJaGuF(hi}U%+ z_wo{(9p8QlEv}Bw|84w9|I_pF!)w4lS3i66-AnxK?VJBQ!;jhV_<`es`ksDv%bHns z`%J%cf&2cK&o?(|n$iFDQttWlryFk2y$)ulmqBOt*UR4P^yBN|W&Y_4|FV1Mv-%`}aTY_s_Q*ZjjQ1Y1(jIABQBv?Q9{ZnJ5SwMd5SahN4I)dLN1w z5(zBZh28Sub!G_0A%?RRqSp+vq%&7QElB2@5acc}Uq}zK=0cd{tNHh*Q43Hqr!edQ z(w@L*MyPlpywMs?KSMCdplYm39jb7l$`ANZYcu4kF;pjo-cKjrb z!Em`n`#D8r^^Vc%3!HUAZ6*}|3%v*VndLi)%(Wz7L=1 z1Vap0F}6v9WtQPUsG3IYTtDUs=4n=)dTnZTk@q~9ejlZNkNQTaFCutE{bhspYJ*^x zz&X65`j){@GqlM!de4yeJ>YO-eH+6Od$djHZ40vBB%h1oz=0XKkc$bN1$oyC@gnlm<0egBIl6f-!Yai+m_04f#QdeY1DhWZyPM z;TX%+5^0vwLkibSgJ>3E_UdTPxjz*RmM78nTX@TM^p8gG33{^(n>;Q#f}n%RWQ^^0 zg*5%Z4jK70@@aV$qM)NxEI=A1gy9^o&kO9&AH7%RzLF?7_V2D7XqnYVCW zczAp6;QghCTRcEP%cG!cC_Xq1QG_hBCuv|grC%yVbg1psEg^1~vGOa}a4oh&3%hXx zhiMa0L&LIJz_Y_#?yGAz;BzkzJL*oUTTviBz-G2J<#Op>A7xM7%kk;y@>lv8W4}+Ho|3Pl`!nI0`9Ig+xRQ6K literal 0 HcmV?d00001 diff --git a/Base.rte/Actors/Mecha/AIBox/LegFG004.bmp b/Base.rte/Actors/Mecha/AIBox/LegFG004.bmp new file mode 100644 index 0000000000000000000000000000000000000000..2a0675ba29bb885432368f745edf10540fd7ef31 GIT binary patch literal 1302 zcmY*ZF{tWR82(CI$Y6_ulnfah9M0en9#YQWAPG|C}$r|K+Fe zasB-K9U%Dh1MwsA4U}vAuj}{!zs@*AN&|*r!Erq7;uPnDiHvF>FDw*<$9)TmBB5wq zC~82&Ff9jG(}UZdz#j(aPnHOuQplplT7hg{vfh9ocb@e^x{y@|!XRJOyZ-7`A4Ovf z-SQ!=5%flgvKzo1tYCLj_@fkAm3^rrD;#9y1s<~12{M%kSv!H&O)v~Xg!4y)(Hg-z zMzq;7Uow~dIhQ1a!QQ6JUJl_ww>!`s4~El$ut$*25cPH+`e2HBe}-B=K&2N^ONiQJ zg;uymf4)I$k)XVM#bEgb_9~_}0}AKMk~>%Pp|&Q-bs}gZYKsn>Te3gT*Rt4)XGYkb z2ajm`ee{Z@5;~K5y z8vZthy?aIFC54xyXpwL5nj+`9!0ycc7WxCuXc^F2CS1ejB6F z5Sz^sNpis!Dfv|LsktmfUPG~vht!J*f+?OBGi+Dvxm^%Tq|6u0mEfr|ye!&yeeB>I^^jL{$ZIMJZ=AX)K$bX@)G;5^FXaN-)b`{Q5w%KKdS$G67Ms3_ z?XZsBxPh>)V&2GOVY8O^>R5GnyvyB|x)bVF6o?CW?|!=jscMi4_0zuw{cBbEUedE3 zy()6_g~BtT=dz06y2d)*o3O}JL9-FSsvNE_cqWs9U_VJ88T64w4>|0cuxCnNoX=S-TVxU6MpnkCmOL`JE^QnkWF;l$= zM%u|#&xCrI^JFklfqAbIy_)hmkS1P)N$P+_IuFy~tH`#Ez}7d5inb6s20}3K0yyf! zz+@PN2o%Kay^PH{(}=S!BdP5VoEvlEqsbdkr|009Tf)?j3zRRwU?zW>OCT_jyo>9| zOC~5V9c_h4Rv^kJ!K~+Du6_qEH1;6l?EBb%dK{(QBY3`j3btMqWtV5spw6M&HIL(; z{*K)<0lYQy6Rh7aQEwtRi-hSYHoOvEzxhR+M!2 zqGaMKY!gnDfBpkrpSguD?-Hy(2l3orIuxId2GZ*d>M*w0fM3GoFX7DD9-3do_J$$| z_QRwnV`uwOh@I6iPh3F72Yo2NIZk>`Snqy|!IedD*$h&POy|g`pA2La2*@nYfw3+N zxiy6_oytXVdlf80#V`$4AXjY$m&W7K_B5KCW|u{pTSDJhKU|*c@aaBqJO@J|kJN(< z`K_fmG+YC=heu((fCi-s_jE7q4^O+tP#``HiFB$-qqCz4?+%>9?b~knd=Yq|lO9ic zTaEEZ-LVbnECoVl8pcM4@bxF-@Xk)c=lz)AhEDm6as|@fZAwC(z++!lBJK{=VR^g} z_pY6Q_SqZw`>Rt(PBdaiQUX|VBGMjDLFTTVusmtPJ|P3Hi*Mt_Jq(QnS-A1qQ}|MO z2Ggy1xY<#HTRkshzW)#w2VaGHBn8f643jnKDfP{zwg-C zSTOPvX#YgoBZ>A;CSM;eV^*-tMhga2* z%jH-NuakaVkJI$*N-gNnbZsp&5b%e!PUvOH zcdiYp0rh@FYX`e3?XD|M&!}g?<+8gMBc!Tp`tTX&@W?2IRd+|Y4|Th}(&ce2P+aq@ faj4Z-?Jkce%3X=3QD&{%?bg>~or(x-h=hLt8qc?{ literal 0 HcmV?d00001 diff --git a/Base.rte/Scripts/Shared/FlippedFrame.lua b/Base.rte/Scripts/Shared/FlippedFrame.lua new file mode 100644 index 000000000..d581c37fc --- /dev/null +++ b/Base.rte/Scripts/Shared/FlippedFrame.lua @@ -0,0 +1,4 @@ +--Use this script to display a different sprite frame when facing left, instead of the same sprite mirrored +function Update(self) + self.Frame = self.HFlipped and 1 or 0; +end \ No newline at end of file From 8413f58fbe13fc6b0962f8bf1ec957a64db00ce2 Mon Sep 17 00:00:00 2001 From: 4zk Date: Sat, 25 Jul 2020 19:08:28 +0300 Subject: [PATCH 02/28] Minor material edits --- Base.rte/Materials.ini | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/Base.rte/Materials.ini b/Base.rte/Materials.ini index 771737836..3bf9a2c41 100644 --- a/Base.rte/Materials.ini +++ b/Base.rte/Materials.ini @@ -284,7 +284,7 @@ AddMaterial = Material PresetName = Dense Red Earth Bounce = 0.1 Friction = 0.85 - StructuralIntegrity = 80 + StructuralIntegrity = 90 DensityKGPerVolumeL = 2.0 GibImpulseLimitPerVolumeL = 15 GibWoundLimitPerVolumeL = 0.1 @@ -302,7 +302,7 @@ AddMaterial = Material PresetName = Red Earth Bounce = 0.1 Friction = 0.85 - StructuralIntegrity = 60 + StructuralIntegrity = 70 DensityKGPerVolumeL = 2.0 GibImpulseLimitPerVolumeL = 15 GibWoundLimitPerVolumeL = 0.1 @@ -318,7 +318,7 @@ AddMaterial = Material PresetName = Red Stone Bounce = 0.6 Friction = 0.9 - StructuralIntegrity = 100 + StructuralIntegrity = 110 DensityKGPerVolumeL = 2.5 GibImpulseLimitPerVolumeL = 15 GibWoundLimitPerVolumeL = 0.1 @@ -622,7 +622,7 @@ AddMaterial = Material PresetName = Kevlared Flesh Bounce = 0.6 Friction = 0.6 - StructuralIntegrity = 45 + StructuralIntegrity = 50 DensityKGPerVolumeL = 1.4 GibImpulseLimitPerVolumeL = 22 GibWoundLimitPerVolumeL = 0.2 @@ -640,7 +640,7 @@ AddMaterial = Material PresetName = Armoured Flesh Bounce = 0.6 Friction = 0.6 - StructuralIntegrity = 50 + StructuralIntegrity = 55 DensityKGPerVolumeL = 2.5 GibImpulseLimitPerVolumeL = 30 GibWoundLimitPerVolumeL = 0.3 @@ -822,7 +822,7 @@ AddMaterial = Material GibImpulseLimitPerVolumeL = 15 GibWoundLimitPerVolumeL = 0.1 Priority = 10 - SettleMaterial = 182 + SettleMaterial = 180 Color = Color R = 185 G = 195 @@ -838,7 +838,7 @@ AddMaterial = Material GibImpulseLimitPerVolumeL = 15 GibWoundLimitPerVolumeL = 0.1 Priority = 10 - SettleMaterial = 182 + SettleMaterial = 180 Color = Color R = 220 G = 235 From f9ff4723b251406b4b1f482ad67436bd76732197 Mon Sep 17 00:00:00 2001 From: 4zk Date: Sat, 25 Jul 2020 19:41:35 +0300 Subject: [PATCH 03/28] Minor edits to Actors and Craft: reorganizing, fixed spacing, etc. --- Base.rte/AI/DropShipAI.lua | 10 +++ Base.rte/AI/HumanAI.lua | 3 +- Base.rte/AI/HumanFunctions.lua | 76 ++++++++++----------- Base.rte/Actors/Mecha/Medic/Medic.lua | 6 +- Base.rte/Actors/Mecha/Medic/MedicDrone.ini | 20 ++++-- Base.rte/Actors/Shared.ini | 5 +- Base.rte/Craft/DropShips/DropshipMK1.ini | 27 ++++---- Base.rte/Craft/Rockets/MK2/RocketMK2.ini | 12 ++-- Base.rte/Craft/Shared/MGTurret.lua | 22 +++--- Base.rte/Craft/Shared/ScuttleExplosions.lua | 19 ++++++ Base.rte/Craft/Shared/Turrets.ini | 3 + Base.rte/Craft/StorageCrate/Crate.ini | 6 +- Base.rte/Craft/StorageCrate/DropCrate.lua | 16 +++-- 13 files changed, 135 insertions(+), 90 deletions(-) create mode 100644 Base.rte/Craft/Shared/ScuttleExplosions.lua diff --git a/Base.rte/AI/DropShipAI.lua b/Base.rte/AI/DropShipAI.lua index 31c6e210c..d16171c91 100644 --- a/Base.rte/AI/DropShipAI.lua +++ b/Base.rte/AI/DropShipAI.lua @@ -10,3 +10,13 @@ end function UpdateAI(self) self.AI:Update(self) end + +function Update(self) + --Re-orient the craft at 180 degrees to help rotational AI + if self.RotAngle > math.pi then + self.RotAngle = self.RotAngle - (math.pi * 2); + end + if self.RotAngle < -math.pi then + self.RotAngle = self.RotAngle + (math.pi * 2); + end +end \ No newline at end of file diff --git a/Base.rte/AI/HumanAI.lua b/Base.rte/AI/HumanAI.lua index eb83845e8..82d82b3db 100644 --- a/Base.rte/AI/HumanAI.lua +++ b/Base.rte/AI/HumanAI.lua @@ -11,7 +11,6 @@ function Create(self) self.visibleInventory = true; end function Update(self) - self.controller = self:GetController(); if self.alternativeGib then @@ -21,7 +20,7 @@ function Update(self) HumanFunctions.DoAutomaticEquip(self); end if self.armSway then - HumanFunctions.DoArmSway(self, (self.Health / self.MaxHealth)); --Argument: shove strength + HumanFunctions.DoArmSway(self, (self.Health/self.MaxHealth)); --Argument: shove strength end if self.visibleInventory then HumanFunctions.DoVisibleInventory(self, false); --Argument: whether to show all items diff --git a/Base.rte/AI/HumanFunctions.lua b/Base.rte/AI/HumanFunctions.lua index 8339e4b11..c64d70665 100644 --- a/Base.rte/AI/HumanFunctions.lua +++ b/Base.rte/AI/HumanFunctions.lua @@ -2,26 +2,27 @@ HumanFunctions = {}; function HumanFunctions.DoAlternativeGib(actor) --Detach limbs instead of regular gibbing - if not actor.detachLimit then - actor.detachLimit = actor.GibWoundLimit; - actor.GibWoundLimit = actor.GibWoundLimit * 1.5; - end - if actor.WoundCount > actor.detachLimit then - actor.detachLimit = actor.WoundCount + 1; - local parts = {actor.BGArm, actor.BGLeg, actor.FGArm, actor.FGLeg, actor.Head}; --Piority order - local mostWounds = -1; - local detachLimb; - --Pick the limb with most wounds and detach it - for i = 1, #parts do - local limb = parts[i]; - if limb and limb.WoundCount > mostWounds then - detachLimb = limb; - mostWounds = limb.WoundCount; + if actor.detachLimit then + if actor.WoundCount > actor.detachLimit then + actor.detachLimit = actor.WoundCount + 1; + local parts = {actor.BGArm, actor.BGLeg, actor.FGArm, actor.FGLeg, actor.Head}; --Piority order + local mostWounds = -1; + local detachLimb; + --Pick the limb with most wounds and detach it + for i = 1, #parts do + local limb = parts[i]; + if limb and limb.WoundCount > mostWounds then + detachLimb = limb; + mostWounds = limb.WoundCount; + end + end + if detachLimb then + detachLimb.JointStrength = -1; end end - if detachLimb then - detachLimb.JointStrength = -1; - end + elseif actor.GibWoundLimit > 0 then + actor.detachLimit = actor.GibWoundLimit; + actor.GibWoundLimit = actor.GibWoundLimit * 1.5; end end @@ -39,20 +40,15 @@ function HumanFunctions.DoArmSway(actor, pushStrength) actor.lastAngle = aimAngle; actor.lastHandPos = {actor.Pos, actor.Pos}; end - if actor.controller:IsMouseControlled() then - --Flail around if moving mouse too fast - local mouseVec = Vector(actor.controller.MouseMovement.X, actor.controller.MouseMovement.Y):SetMagnitude(math.sqrt(actor.controller.MouseMovement.Magnitude)); - local ang = actor.lastAngle - aimAngle; - - actor.AngularVel = actor.AngularVel - (2 * ang * actor.FlipFactor + mouseVec.Y * actor.FlipFactor /10) /math.sqrt(math.abs(actor.AngularVel) + 1); - - actor.lastAngle = aimAngle; - end + --Flail around if aiming around too fast + local ang = actor.lastAngle - aimAngle; + actor.AngularVel = actor.AngularVel - (2 * ang * actor.FlipFactor)/(math.abs(actor.AngularVel)/10 + 1); + actor.lastAngle = aimAngle; --Shove when unarmed if actor.controller:IsState(Controller.WEAPON_FIRE) and (actor.FGArm or actor.BGArm) and not (actor.EquippedItem or actor.EquippedBGItem) and actor.Status == Actor.STABLE then - actor.AngularVel = actor.AngularVel /(actor.shoved and 1.3 or 3) + (aimAngle - actor.RotAngle * actor.FlipFactor - 1.57) * (actor.shoved and 0.3 or 3) * actor.FlipFactor /(1 + math.abs(actor.RotAngle)); + actor.AngularVel = actor.AngularVel/(actor.shoved and 1.3 or 3) + (aimAngle - actor.RotAngle * actor.FlipFactor - 1.57) * (actor.shoved and 0.3 or 3) * actor.FlipFactor/(1 + math.abs(actor.RotAngle)); if not actor.shoved then - actor.Vel = actor.Vel + Vector(2 /(1 + actor.Vel.Magnitude), 0):RadRotate(actor:GetAimAngle(true)) * math.abs(math.cos(actor:GetAimAngle(true))); + actor.Vel = actor.Vel + Vector(2/(1 + actor.Vel.Magnitude), 0):RadRotate(actor:GetAimAngle(true)) * math.abs(math.cos(actor:GetAimAngle(true))); actor.shoved = true; end else @@ -78,31 +74,31 @@ function HumanFunctions.DoArmSway(actor, pushStrength) if actor.controller:IsState(Controller.AIM_SHARP) then arm.IdleOffset = Vector(0, 1):RadRotate(aimAngle); else - arm.IdleOffset = Vector(0, (armLength + arm.SpriteOffset.X) * 1.1):RadRotate(rotAng * actor.FlipFactor + 1.5 + (i /5)); + arm.IdleOffset = Vector(0, (armLength + arm.SpriteOffset.X) * 1.1):RadRotate(rotAng * actor.FlipFactor + 1.5 + (i/5)); end if actor.shoved or (actor.EquippedItem and IsTDExplosive(actor.EquippedItem) and actor.controller:IsState(Controller.WEAPON_FIRE)) then arm.IdleOffset = Vector(armLength + (pushStrength * armLength), 0):RadRotate(aimAngle); local handVector = SceneMan:ShortestDistance(actor.lastHandPos[i], arm.HandPos, SceneMan.SceneWrapsX); --Diminish hand relocation vector to potentially prevent post-superhuman pushing powers - handVector:SetMagnitude(handVector.Magnitude / (1 + handVector.Magnitude / 100)); + handVector:SetMagnitude(handVector.Magnitude/(1 + handVector.Magnitude/100)); --Emphasize the first frames that signify contracted arm = highest potential energy - local dots = math.sqrt(arm.Radius) / (1 + arm.Frame /arm.FrameCount); + local dots = math.sqrt(arm.Radius)/(1 + arm.Frame/arm.FrameCount); local armStrength = (arm.Mass + arm.Material.StructuralIntegrity) * pushStrength; for i = 1, dots do local part = CreateMOPixel("Smack Particle Light"); - part.Pos = arm.HandPos - Vector(handVector.X/2, handVector.Y /2); + part.Pos = arm.HandPos - Vector(handVector.X/2, handVector.Y/2); part.Vel = Vector(handVector.X, handVector.Y):RadRotate(RangeRand(-0.1, 0.1)) + Vector(0, -0.5); part.Mass = armStrength; part.Sharpness = math.random() * 0.1; part.Team = actor.Team; part.IgnoresTeamHits = true; MovableMan:AddParticle(part); end --Apply some additional forces if the travel vector of the moving hand is half an arms length - if handVector.Magnitude > (armLength /2) then + if handVector.Magnitude > (armLength/2) then local moCheck = SceneMan:GetMOIDPixel(arm.HandPos.X, arm.HandPos.Y) if moCheck ~= rte.NoMOID then local mo = MovableMan:GetMOFromID(MovableMan:GetMOFromID(moCheck).RootID); - if mo and mo.Team ~= actor.Team and IsActor(mo) and actor.Mass > (mo.Mass / 2) then - mo:AddForce(handVector * (actor.Mass / 2), Vector()); + if mo and mo.Team ~= actor.Team and IsActor(mo) and actor.Mass > (mo.Mass/2) then + mo:AddForce(handVector * (actor.Mass/2), Vector()); ToActor(mo).Status = Actor.UNSTABLE; end end @@ -141,11 +137,13 @@ function HumanFunctions.DoVisibleInventory(actor, showAll) local tallAng = ToMOSprite(item):GetSpriteWidth() > ToMOSprite(item):GetSpriteHeight() and 1.57 or 0; local tilt = 0.3; - local rotAng = actor.RotAngle + tallAng + (heldCount * tilt - itemCount * tilt + isFirearm /itemSize) /itemCount * actor.FlipFactor; + local rotAng = actor.RotAngle + tallAng + (heldCount * tilt - itemCount * tilt + isFirearm/itemSize)/itemCount * actor.FlipFactor; for player = Activity.PLAYER_1, Activity.MAXPLAYERCOUNT - 1 do - if not SceneMan:IsUnseen(drawPos.X, drawPos.Y, ActivityMan:GetActivity():GetTeamOfPlayer(player)) then - PrimitiveMan:DrawBitmapPrimitive(ActivityMan:GetActivity():ScreenOfPlayer(player), drawPos, item, rotAng, 0); + + local screen = ActivityMan:GetActivity():ScreenOfPlayer(player); + if screen ~= -1 and not SceneMan:IsUnseen(drawPos.X, drawPos.Y, ActivityMan:GetActivity():GetTeamOfPlayer(player)) then + PrimitiveMan:DrawBitmapPrimitive(screen, drawPos, item, rotAng, 0); end end end diff --git a/Base.rte/Actors/Mecha/Medic/Medic.lua b/Base.rte/Actors/Mecha/Medic/Medic.lua index 2ded01722..d111bd24f 100644 --- a/Base.rte/Actors/Mecha/Medic/Medic.lua +++ b/Base.rte/Actors/Mecha/Medic/Medic.lua @@ -1,6 +1,8 @@ function Create(self) self.healTimer = Timer(); - self.healTimer:SetSimTimeLimitMS(150); + self.baseHealDelay = 100; + self.healIncrementPerTarget = 50; + self.healTimer:SetSimTimeLimitMS(self.baseHealDelay); self.crossTimer = Timer(); self.crossTimer:SetSimTimeLimitMS(800); @@ -54,7 +56,7 @@ function Update(self) end end end - self.healTimer:SetSimTimeLimitMS(100 + #self.healTargets * 50); + self.healTimer:SetSimTimeLimitMS(self.baseHealDelay + (#self.healTargets * self.healIncrementPerTarget)); end end end \ No newline at end of file diff --git a/Base.rte/Actors/Mecha/Medic/MedicDrone.ini b/Base.rte/Actors/Mecha/Medic/MedicDrone.ini index df778e3c9..a7da870a4 100644 --- a/Base.rte/Actors/Mecha/Medic/MedicDrone.ini +++ b/Base.rte/Actors/Mecha/Medic/MedicDrone.ini @@ -27,7 +27,7 @@ AddEffect = MOSParticle EffectStopStrength = 0 -AddEffect = Attachable +AddActor = Turret PresetName = Medic Drone Top Mass = 25 HitsMOs = 1 @@ -41,9 +41,9 @@ AddEffect = Attachable X = -9 Y = -8 EntryWound = AEmitter - CopyOf = Leaking Machinery Heavy + CopyOf = Leaking Machinery ExitWound = AEmitter - CopyOf = Leaking Machinery Light + CopyOf = Leaking Machinery AtomGroup = AtomGroup AutoGenerate = 1 Material = Material @@ -66,6 +66,14 @@ AddEffect = Attachable X = 0 Y = 7 DrawAfterParent = 1 + AddGib = Gib + GibParticle = MOSParticle + CopyOf = Spark Yellow Particle + Count = 5 + Spread = 3.1 + MaxVelocity = 10 + MinVelocity = 1 + LifeVariation = 0.30 AddGib = Gib GibParticle = MOSRotating CopyOf = Gib Pipe Small A @@ -177,7 +185,7 @@ AddActor = ACrab Description = Send this into the battlefield and place it near a units to heal them. AddToGroup = Actors Mass = 45 - GoldValue = 110 + GoldValue = 100 HitsMOs = 1 GetsHitByMOs = 1 ScriptPath = Base.rte/AI/CrabAI.lua @@ -210,11 +218,11 @@ AddActor = ACrab Health = 100 ImpulseDamageThreshold = 5000 AimAngle = 0 - AimRange = 0.5 + AimRange = 1.5 AimDistance = 30 Perceptiveness = 0.1 CharHeight = 100 - AddAttachable = Attachable + Turret = Turret CopyOf = Medic Drone Top ParentOffset = Vector X = 0 diff --git a/Base.rte/Actors/Shared.ini b/Base.rte/Actors/Shared.ini index baa13b80b..259683b09 100644 --- a/Base.rte/Actors/Shared.ini +++ b/Base.rte/Actors/Shared.ini @@ -50,7 +50,7 @@ AddLimbPath = LimbPath Y = 5 AddSegment = Vector X = 0 - Y = 6 + Y = 5 AddSegment = Vector X = -4 Y = 3 @@ -508,7 +508,8 @@ AddEffect = AEmitter MaxVelocity = 26 MinVelocity = 10 ParticlesPerMinute = 10800 - BurstSize = 7 + BurstSize = 8 + BurstSpacing = 200 AddEffect = AEmitter diff --git a/Base.rte/Craft/DropShips/DropshipMK1.ini b/Base.rte/Craft/DropShips/DropshipMK1.ini index b4b47c2a8..b9993d936 100644 --- a/Base.rte/Craft/DropShips/DropshipMK1.ini +++ b/Base.rte/Craft/DropShips/DropshipMK1.ini @@ -830,13 +830,13 @@ AddEffect = AEmitter EmittedParticle = MOPixel CopyOf = Jet Air Blast Spread = 0.15 - MaxVelocity = 40 + MaxVelocity = 45 MinVelocity = 30 AddEmission = Emission EmittedParticle = MOPixel CopyOf = Jet Air Blast 2 Spread = 0.25 - MaxVelocity = 40 + MaxVelocity = 45 MinVelocity = 30 EmissionSound = SoundContainer AddSound = ContentFile @@ -1067,13 +1067,13 @@ AddEffect = AEmitter EmittedParticle = MOPixel CopyOf = Jet Air Blast Spread = 0.15 - MaxVelocity = 40 + MaxVelocity = 45 MinVelocity = 30 AddEmission = Emission EmittedParticle = MOPixel CopyOf = Jet Air Blast 2 Spread = 0.25 - MaxVelocity = 40 + MaxVelocity = 45 MinVelocity = 30 EmissionSound = SoundContainer AddSound = ContentFile @@ -1441,7 +1441,9 @@ AddActor = ACDropShip MaxPassengers = 3 HitsMOs = 1 GetsHitByMOs = 1 - ScriptPath = Base.rte/Craft/Dropships/DropshipMK1.lua + ScriptPath = Base.rte/AI/DropShipAI.lua + ScriptPath = Base.rte/Craft/Shared/ScuttleExplosions.lua + ScriptPath = Base.rte/Scripts/Shared/RandomFrame.lua SpriteFile = ContentFile FilePath = Base.rte/Craft/Dropships/HullA.bmp FrameCount = 2 @@ -1473,7 +1475,7 @@ AddActor = ACDropShip StableVelocityThreshold = Vector X = 200 Y = 200 - ImpulseDamageThreshold = 9000 + ImpulseDamageThreshold = 10000 CharHeight = 100 AddEmitter = AEmitter CopyOf = Machine Gun Turret @@ -1535,15 +1537,13 @@ AddActor = ACDropShip CrashSound = SoundContainer CopyOf = Metal Body Blunt Hit Large CanLand = 0 - GibImpulseLimit = 18000 - GibWoundLimit = 60 + GibImpulseLimit = 20000 + GibWoundLimit = 75 GibSound = SoundContainer CopyOf = Ship Explosion AddGib = Gib GibParticle = AEmitter - CopyOf = Fuel Fire Trace Gray - PresetName = Ship Explosion - LifeTime = 175 + CopyOf = Ship Explosion Count = 8 Spread = 2.25 MaxVelocity = 20 @@ -1569,12 +1569,11 @@ AddActor = ACDropShip AddGib = Gib GibParticle = MOSRotating CopyOf = Flame Ball 1 - PresetName = Flame Ball Dropship - LifeTime = 400 - Count = 15 + Count = 20 Spread = 3.1 MaxVelocity = 6 MinVelocity = 4 + LifeVariation = 0.30 AddGib = Gib GibParticle = MOSParticle CopyOf = Explosion Smoke 1 diff --git a/Base.rte/Craft/Rockets/MK2/RocketMK2.ini b/Base.rte/Craft/Rockets/MK2/RocketMK2.ini index dd47bb580..2c31233bd 100644 --- a/Base.rte/Craft/Rockets/MK2/RocketMK2.ini +++ b/Base.rte/Craft/Rockets/MK2/RocketMK2.ini @@ -530,6 +530,7 @@ AddActor = ACRocket HitsMOs = 1 GetsHitByMOs = 1 ScriptPath = Base.rte/AI/RocketAI.lua + ScriptPath = Base.rte/Craft/Shared/ScuttleExplosions.lua SpriteFile = ContentFile FilePath = Base.rte/Craft/Rockets/MK2/RocketMK2.bmp FrameCount = 6 @@ -545,13 +546,13 @@ AddActor = ACRocket AtomGroup = AtomGroup AutoGenerate = 1 Material = Material - CopyOf = Civilian Stuff + CopyOf = Military Stuff Resolution = 8 Depth = 0 DeepGroup = AtomGroup AutoGenerate = 1 Material = Material - CopyOf = Civilian Stuff + CopyOf = Military Stuff Resolution = 20 Depth = 10 DeepCheck = 1 @@ -692,9 +693,7 @@ AddActor = ACRocket CopyOf = Ship Explosion AddGib = Gib GibParticle = AEmitter - CopyOf = Fuel Fire Trace Gray - PresetName = Ship Explosion - LifeTime = 175 + CopyOf = Ship Explosion Count = 8 Spread = 2.25 MaxVelocity = 20 @@ -711,12 +710,11 @@ AddActor = ACRocket AddGib = Gib GibParticle = MOSRotating CopyOf = Flame Ball 1 - PresetName = Flame Ball Dropship - LifeTime = 400 Count = 15 Spread = 3.1 MaxVelocity = 6 MinVelocity = 4 + LifeVariation = 0.20 AddGib = Gib GibParticle = MOSParticle CopyOf = Explosion Smoke 1 diff --git a/Base.rte/Craft/Shared/MGTurret.lua b/Base.rte/Craft/Shared/MGTurret.lua index 0f58c28cd..0aba8816d 100644 --- a/Base.rte/Craft/Shared/MGTurret.lua +++ b/Base.rte/Craft/Shared/MGTurret.lua @@ -28,25 +28,25 @@ function Update(self) end end if math.abs(self.rotation) > 0.001 then - self.rotation = self.rotation / (1 + self.turnSpeed * 2); + self.rotation = self.rotation/(1 + self.turnSpeed * 2); else self.rotation = 0; end if math.abs(self.verticalFactor) > 0.001 then - self.verticalFactor = self.verticalFactor / (1 + self.turnSpeed * 4); + self.verticalFactor = self.verticalFactor/(1 + self.turnSpeed * 4); else self.verticalFactor = 0; end -- Aim directly away from parent - local posTrace = SceneMan:ShortestDistance(parent.Pos, self.Pos, SceneMan.SceneWrapsX):SetMagnitude(self.searchRange / 2); - self.RotAngle = (1.57 * self.verticalFactor + posTrace.AbsRadAngle + (parent.HFlipped and math.pi or 0)) / (1 + self.verticalFactor) - self.rotation; + local posTrace = SceneMan:ShortestDistance(parent.Pos, self.Pos, SceneMan.SceneWrapsX):SetMagnitude(self.searchRange/2); + self.RotAngle = (1.57 * self.verticalFactor + posTrace.AbsRadAngle + (parent.HFlipped and math.pi or 0))/(1 + self.verticalFactor) - self.rotation; if self.areaMode then -- Area Mode - local aimPos = self.Pos + Vector((self.searchRange / 2), 0):RadRotate(self.RotAngle); + local aimPos = self.Pos + Vector((self.searchRange/2), 0):RadRotate(self.RotAngle); -- Debug: visualize aim area if self.showAim then - PrimitiveMan:DrawCirclePrimitive(self.Team, aimPos, (self.searchRange / 2), 13); + PrimitiveMan:DrawCirclePrimitive(self.Team, aimPos, (self.searchRange/2), 13); end - local aimTarget = MovableMan:GetClosestEnemyActor(self.Team, aimPos, (self.searchRange / 2), Vector()); + local aimTarget = MovableMan:GetClosestEnemyActor(self.Team, aimPos, (self.searchRange/2), Vector()); if aimTarget then -- Debug: visualize search trace if self.showAim then @@ -69,11 +69,11 @@ function Update(self) local target; local aimTrace = Vector(self.searchRange, 0):RadRotate(self.RotAngle); -- Search for MOs directly in line of sight of two rays - local moCheck1 = SceneMan:CastMORay(self.Pos, aimTrace:RadRotate(1 / math.sqrt(self.searchRange)), parent.ID, self.Team, 0, false, 5); + local moCheck1 = SceneMan:CastMORay(self.Pos, aimTrace:RadRotate(1/math.sqrt(self.searchRange)), parent.ID, self.Team, 0, false, 5); if moCheck1 ~= rte.NoMOID then target = MovableMan:GetMOFromID(MovableMan:GetMOFromID(moCheck1).RootID); else - local moCheck2 = SceneMan:CastMORay(self.Pos, aimTrace:RadRotate(-1 / math.sqrt(self.searchRange)), parent.ID, self.Team, 0, false, 5); + local moCheck2 = SceneMan:CastMORay(self.Pos, aimTrace:RadRotate(-1/math.sqrt(self.searchRange)), parent.ID, self.Team, 0, false, 5); if moCheck2 ~= rte.NoMOID then target = MovableMan:GetMOFromID(MovableMan:GetMOFromID(moCheck2).RootID); end @@ -89,8 +89,8 @@ function Update(self) end -- Debug: visualize aim traces if self.showAim then - PrimitiveMan:DrawLinePrimitive(self.Team, self.Pos, self.Pos + aimTrace:RadRotate(1 / math.sqrt(self.searchRange)), color); - PrimitiveMan:DrawLinePrimitive(self.Team, self.Pos, self.Pos + aimTrace:RadRotate(-1 / math.sqrt(self.searchRange)), color); + PrimitiveMan:DrawLinePrimitive(self.Team, self.Pos, self.Pos + aimTrace:RadRotate(1/math.sqrt(self.searchRange)), color); + PrimitiveMan:DrawLinePrimitive(self.Team, self.Pos, self.Pos + aimTrace:RadRotate(-1/math.sqrt(self.searchRange)), color); end end end diff --git a/Base.rte/Craft/Shared/ScuttleExplosions.lua b/Base.rte/Craft/Shared/ScuttleExplosions.lua new file mode 100644 index 000000000..f707c7d8b --- /dev/null +++ b/Base.rte/Craft/Shared/ScuttleExplosions.lua @@ -0,0 +1,19 @@ +function Create(self) + self.explosionTimer = Timer(); + + self.height = ToMOSprite(self):GetSpriteHeight(); + self.width = ToMOSprite(self):GetSpriteWidth(); + + self.explosiondelay = 5000/math.sqrt(self.width + self.height); +end +function Update(self) + if self.Status > Actor.INACTIVE or self.AIMode == Actor.AIMODE_SCUTTLE then + if self.explosionTimer:IsPastSimMS(self.explosiondelay) then + self.explosionTimer:Reset(); + local expl = CreateAEmitter("Scuttle Explosion"); + expl.Pos = self.Pos + Vector(self.width/2 * RangeRand(-0.9, 0.9), self.height/2 * RangeRand(-0.9, 0.9)):RadRotate(self.RotAngle); + expl.Vel = self.Vel; + MovableMan:AddParticle(expl); + end + end +end \ No newline at end of file diff --git a/Base.rte/Craft/Shared/Turrets.ini b/Base.rte/Craft/Shared/Turrets.ini index 8df278583..4127d3895 100644 --- a/Base.rte/Craft/Shared/Turrets.ini +++ b/Base.rte/Craft/Shared/Turrets.ini @@ -1,3 +1,6 @@ +/////////////////////////////////////////////////////////////////////// +// Craft Turrets + AddEffect = AEmitter PresetName = Machine Gun Turret diff --git a/Base.rte/Craft/StorageCrate/Crate.ini b/Base.rte/Craft/StorageCrate/Crate.ini index 8df5578af..efdd6e8a9 100644 --- a/Base.rte/Craft/StorageCrate/Crate.ini +++ b/Base.rte/Craft/StorageCrate/Crate.ini @@ -54,8 +54,8 @@ AddActor = ACRocket MaxMass = 600 MaxPassengers = 1 Position = Vector - X = 520 - Y = 20 + X = 0 + Y = -50 Velocity = Vector X = 0 Y = 0 @@ -238,7 +238,7 @@ AddActor = ACRocket CopyOf = Crate PresetName = Drop Crate ScriptPath = Base.rte/Craft/StorageCrate/DropCrate.lua - Description = Quick drop from an orbiting station in a strong metal crate and amazing cushions to preserve the contents that would usually never survive an orbital drop. + Description = Quick drop from an orbiting station in a strong metal crate and amazing cushions to preserve the contents that would usually never survive an orbital drop. Organic contents may suffer mild bruising. AddToGroup = Craft - Crates Velocity = Vector X = 0 diff --git a/Base.rte/Craft/StorageCrate/DropCrate.lua b/Base.rte/Craft/StorageCrate/DropCrate.lua index 638af2f2b..89c5f7f80 100644 --- a/Base.rte/Craft/StorageCrate/DropCrate.lua +++ b/Base.rte/Craft/StorageCrate/DropCrate.lua @@ -4,8 +4,14 @@ function Create(self) -- Choose a random horizontal direction local randomDirection = math.random() > 0.5 and 1 or -1; -- Randomize velocities - self.AngularVel = -randomDirection * math.random(1, 5); - self.Vel = Vector(randomDirection * math.random(5, 20), 30); + self.RotAngle = math.random() * (math.pi * 2); + self.AngularVel = -randomDirection * math.random(1, 10); + self.Pos = Vector(self.Pos.X - randomDirection * math.random(99), self.Pos.Y); + -- Try not to fly off the edge in non-wrapping scenes + if not SceneMan.SceneWrapsX then + randomDirection = self.Pos.X > (SceneMan.SceneWidth - 99) and -1 or (self.Pos.X < 99 and 1 or randomDirection); + end + self.Vel = Vector(randomDirection * math.random(1, 20), 40); end function Update(self) -- Apply damage to the actors inside based on impulse forces @@ -16,7 +22,7 @@ function Update(self) actor = ToActor(actor); -- The following method is a slightly revised version of the hardcoded impulse damage system local impulse = self.TravelImpulse.Magnitude - actor.ImpulseDamageThreshold; - local damage = impulse / (actor.GibImpulseLimit * 0.1 + actor.Material.StructuralIntegrity * 10); + local damage = impulse/(actor.GibImpulseLimit * 0.1 + actor.Material.StructuralIntegrity * 10); actor.Health = damage > 0 and actor.Health - damage or actor.Health; actor.Status = actor.Status < Actor.DYING and Actor.UNSTABLE or actor.Status; end @@ -25,8 +31,10 @@ function Update(self) end if self.GibTimer:IsPastSimTimeLimit() then self:GibThis(); - elseif self.Vel.Largest > 5 or self.AIMode == Actor.AIMODE_STAY then + elseif (self.Vel.Largest + math.abs(self.AngularVel)) > 5 or self.AIMode == Actor.AIMODE_STAY then self.GibTimer:Reset(); + else + self:OpenHatch(); end end function Destroy(self) From 978b63ccd29903b605ebeb2004adbb5b33ca9f9c Mon Sep 17 00:00:00 2001 From: 4zk Date: Sat, 25 Jul 2020 19:51:08 +0300 Subject: [PATCH 04/28] Misc effects edits; Scripted Air Blast now deals .lua damage --- Base.rte/Effects.ini | 8 ++++---- Base.rte/Effects/Pyro.ini | 21 ++++++++++++--------- Base.rte/Effects/Pyro/Flame/Flame.lua | 10 ++++++---- Base.rte/Effects/Wounds.ini | 17 ++++++++++------- Base.rte/Scripts/AirBlast.lua | 14 +++++++++++--- Base.rte/Scripts/Shared/SmokeTrail.lua | 2 +- 6 files changed, 44 insertions(+), 28 deletions(-) diff --git a/Base.rte/Effects.ini b/Base.rte/Effects.ini index d2c53dbf4..8b97eddc2 100644 --- a/Base.rte/Effects.ini +++ b/Base.rte/Effects.ini @@ -186,9 +186,9 @@ AddEffect = MOPixel PresetName = Grenade Fragment Yellow Mass = 0.15 LifeTime = 200 - Sharpness = 22 - AirResistance = 0.05 - WoundDamageMultiplier = 1.3 + Sharpness = 30 + AirResistance = 0.075 + WoundDamageMultiplier = 1.1 HitsMOs = 1 GetsHitByMOs = 0 Color = Color @@ -417,7 +417,7 @@ AddEffect = MOPixel PresetName = Jet Air Blast Mass = 15 LifeTime = 45 - Sharpness = 0.3 + Sharpness = 0.2 HitsMOs = 1 GetsHitByMOs = 0 Color = Color diff --git a/Base.rte/Effects/Pyro.ini b/Base.rte/Effects/Pyro.ini index 82e167ea4..bef4602b1 100644 --- a/Base.rte/Effects/Pyro.ini +++ b/Base.rte/Effects/Pyro.ini @@ -616,7 +616,7 @@ AddEffect = MOSParticle PresetName = Main Thruster Blast Ball 1 Mass = 9 GlobalAccScalar = -0.05 - AirResistance = 0.002 + AirResistance = 0.01 RestThreshold = -1 LifeTime = 300 Sharpness = 0.1 @@ -692,6 +692,7 @@ AddEffect = MOSParticle AddEffect = AEmitter PresetName = Fuel Fire Trace Gray LifeTime = 200 + AirResistance = 0.1 Mass = 0.1 HitsMOs = 0 GetsHitByMOs = 0 @@ -774,6 +775,12 @@ AddEffect = AEmitter FlashOnlyOnBurst = 0 +AddEffect = AEmitter + CopyOf = Fuel Fire Trace Gray + PresetName = Ship Explosion + LifeTime = 150 + + AddEffect = PEmitter PresetName = Fuel Fire Trace Black LifeTime = 150 @@ -981,7 +988,7 @@ AddEffect = AEmitter AddAmmo = MOSRotating PresetName = Flame Ball 1 - LifeTime = 150 + LifeTime = 200 Mass = 2 RestThreshold = -1 Sharpness = 1 @@ -1370,7 +1377,7 @@ AddAmmo = MOSParticle AddAmmo = MOSParticle CopyOf = Small Smoke Ball 1 PresetName = Grenade Smoke 2 - LifeTime = 400 + LifeTime = 500 Mass = 0.1 Sharpness = 0.01 HitsMOs = 0 @@ -1480,7 +1487,6 @@ AddAmmo = AEmitter FilePath = Base.rte/Null.bmp AtomGroup = AtomGroup CopyOf = Null AtomGroup - BurstTriggered = 1 AddEmission = Emission EmittedParticle = MOSParticle CopyOf = Tiny Smoke Ball 1 @@ -1509,8 +1515,7 @@ AddAmmo = AEmitter BurstScale = 1 BurstTriggered = 1 EmissionDamage = 0 - Flash = None - FlashOnlyOnBurst = 0 + GibImpulseLimit = 0 AddAmmo = AEmitter @@ -1523,7 +1528,6 @@ AddAmmo = AEmitter FilePath = Base.rte/Null.bmp AtomGroup = AtomGroup CopyOf = Null AtomGroup - BurstTriggered = 1 AddEmission = Emission EmittedParticle = MOSParticle CopyOf = Flame Smoke 1 @@ -1616,5 +1620,4 @@ AddAmmo = AEmitter BurstScale = 1 BurstTriggered = 1 EmissionDamage = 0 - Flash = None - FlashOnlyOnBurst = 0 \ No newline at end of file + GibImpulseLimit = 0 \ No newline at end of file diff --git a/Base.rte/Effects/Pyro/Flame/Flame.lua b/Base.rte/Effects/Pyro/Flame/Flame.lua index fa168d544..58575c9ce 100644 --- a/Base.rte/Effects/Pyro/Flame/Flame.lua +++ b/Base.rte/Effects/Pyro/Flame/Flame.lua @@ -22,6 +22,8 @@ function Update(self) if math.random() < (self.strength * self.target.DamageMultiplier) / (actor.Mass + self.target.Material.StructuralIntegrity) then actor.Health = actor.Health - 1; end + -- Stop, drop and roll! + self.Lifetime = self.Lifetime - math.abs(actor.AngularVel); end else self.target = nil; @@ -53,19 +55,19 @@ function Update(self) local age = (self.Age * 0.0001) + 1; -- Have age slightly affect particle settings relative to 10 seconds local chance = math.random(); local particle; - if chance < (0.1 / age) then + if chance < (0.1/age) then particle = CreateMOPixel("Ground Fire Burn Particle"); particle.Vel = self.Vel + Vector(RangeRand(-15, 15), -math.random(-10, 20)); particle.Sharpness = particle.Sharpness * RangeRand(0.5, 1.0); - elseif chance < (0.5 / age) then + elseif chance < (0.5/age) then -- Spawn another, shorter flame particle occasionally if not self.isShort and math.random() < 0.05 then particle = CreateMOSParticle("Flame Hurt Short Float"); - particle.Lifetime = 4000 / age; + particle.Lifetime = 4000/age; particle.Vel = self.Vel + Vector(0, -3); else particle = CreateMOSParticle("Flame Smoke 2"); - particle.Lifetime = math.random(250, 1000) / age; + particle.Lifetime = math.random(250, 1000)/age; particle.Vel = self.Vel + Vector(0, -1); end particle.Vel = particle.Vel + Vector(math.random(), 0):RadRotate(math.random() * 6.28); diff --git a/Base.rte/Effects/Wounds.ini b/Base.rte/Effects/Wounds.ini index 572855a4a..6bcb2c983 100644 --- a/Base.rte/Effects/Wounds.ini +++ b/Base.rte/Effects/Wounds.ini @@ -66,7 +66,7 @@ AddEffect = MOPixel AddEffect = MOSParticle PresetName = Blood Spray Particle RestThreshold = -1 - Mass = 0 + Mass = 0.1 LifeTime = 300 Sharpness = 0.1 AirResistance = 0.02 @@ -817,8 +817,9 @@ AddEffect = AEmitter Spread = 0.3 MaxVelocity = 6 MinVelocity = 3 - EmissionCountLimit = 100 - EmissionDamage = 0.05 + EmissionCountLimit = 160 + EmissionDamage = 0.08 + BurstDamage = 3 AddEffect = AEmitter @@ -856,12 +857,14 @@ AddEffect = AEmitter AddEmission = Emission EmittedParticle = MOPixel CopyOf = Spark Yellow 1 - Spread = 0.2 - MaxVelocity = 6 - MinVelocity = 3 + LifeVariation = 0.20 + Spread = 0.1 + MaxVelocity = 12 + MinVelocity = 9 AddEmission = Emission EmittedParticle = MOPixel CopyOf = Spark Yellow 2 + LifeVariation = 0.20 Spread = 0.2 MaxVelocity = 6 MinVelocity = 3 @@ -870,7 +873,7 @@ AddEffect = AEmitter EmissionEnabled = 1 EmissionsIgnoreThis = 1 ParticlesPerMinute = 0 - BurstSize = 10 + BurstSize = 9 BurstScale = 4 BurstDamage = 1 BurstTriggered = 1 diff --git a/Base.rte/Scripts/AirBlast.lua b/Base.rte/Scripts/AirBlast.lua index 25807f60a..a82836049 100644 --- a/Base.rte/Scripts/AirBlast.lua +++ b/Base.rte/Scripts/AirBlast.lua @@ -13,10 +13,18 @@ function Update(self) if strSumCheck < self.strength then local massFactor = math.sqrt(1 + math.abs(mo.Mass)); local distFactor = 1 + dist.Magnitude * 0.1; - local forceVector = dist:SetMagnitude((self.strength - strSumCheck) /distFactor); - mo.Vel = mo.Vel + forceVector /massFactor; - mo.AngularVel = mo.AngularVel - forceVector.X /(massFactor + math.abs(mo.AngularVel)); + local forceVector = dist:SetMagnitude((self.strength - strSumCheck)/distFactor); + mo.Vel = mo.Vel + forceVector/massFactor; + mo.AngularVel = mo.AngularVel - forceVector.X/(massFactor + math.abs(mo.AngularVel)); mo:AddForce(forceVector * massFactor, Vector()); + -- Add some additional points damage to actors + if IsActor(mo) then + local actor = ToActor(mo); + local impulse = (forceVector.Magnitude * self.strength/massFactor) - actor.ImpulseDamageThreshold; + local damage = impulse/(actor.GibImpulseLimit * 0.1 + actor.Material.StructuralIntegrity * 10); + actor.Health = damage > 0 and actor.Health - damage or actor.Health; + actor.Status = (actor.Status == Actor.STABLE and damage > (actor.Health/2)) and Actor.UNSTABLE or actor.Status; + end end end end diff --git a/Base.rte/Scripts/Shared/SmokeTrail.lua b/Base.rte/Scripts/Shared/SmokeTrail.lua index 4067799a3..dc14fe96e 100644 --- a/Base.rte/Scripts/Shared/SmokeTrail.lua +++ b/Base.rte/Scripts/Shared/SmokeTrail.lua @@ -1,7 +1,7 @@ function Update(self) local Effect - local Offset = self.Vel*(20*TimerMan.DeltaTimeSecs) -- the effect will be created the next frame so move it one frame backwards towards the barrel + local Offset = self.Vel * rte.PxTravelledPerFrame -- the effect will be created the next frame so move it one frame backwards towards the barrel for i = 1, math.floor(self.Vel.Magnitude*0.045) do Effect = CreateMOSParticle("Tiny Smoke Trail " .. math.random(3), "Base.rte") From e0625e3d43b066c64c1ae6e4805a1b2fc1146497 Mon Sep 17 00:00:00 2001 From: 4zk Date: Sat, 25 Jul 2020 19:55:27 +0300 Subject: [PATCH 05/28] Activity edits: Brain vs. Brain now spawns faction brain unit, all doors are destroyed One Man Army activities, PosRand() function changed to math.random(), removed Difficulty factor from Crab unit spawn method (since it calls for crabs to be spawned even when crab-to-human ratio is zero) --- Base.rte/Activities/BrainVsBrain.lua | 6 +++--- Base.rte/Activities/BunkerBreach.lua | 6 +++--- Base.rte/Activities/Harvester.lua | 4 ++-- Base.rte/Activities/KeepieUppie.lua | 4 ++-- Base.rte/Activities/Massacre.lua | 4 ++-- Base.rte/Activities/OneManArmy.lua | 17 ++++++++++++----- Base.rte/Activities/OneManArmyDiggers.lua | 11 +++++++++-- Base.rte/Activities/Siege.lua | 4 ++-- Base.rte/Activities/SkirmishDefense.lua | 2 +- Base.rte/Activities/Survival.lua | 4 ++-- Base.rte/Activities/Unused/ZombiePit.lua | 2 +- 11 files changed, 39 insertions(+), 25 deletions(-) diff --git a/Base.rte/Activities/BrainVsBrain.lua b/Base.rte/Activities/BrainVsBrain.lua index dbc16e2f4..4f6ad3707 100644 --- a/Base.rte/Activities/BrainVsBrain.lua +++ b/Base.rte/Activities/BrainVsBrain.lua @@ -85,9 +85,9 @@ function BrainvsBrain:StartActivity() local foundBrain = MovableMan:GetUnassignedBrain(self:GetTeamOfPlayer(player)) -- Spawn a brain if we can't find an unassigned brain in the scene to give each player if not foundBrain then - local Brain = CreateAHuman("Brain Robot", "Base.rte") + local Brain = RandomAHuman("Brains", self:GetTeamTech(self:GetTeamOfPlayer(player))) if Brain then - local Weapon = CreateHDFirearm("SMG", "Base.rte") + local Weapon = RandomHDFirearm("Weapons - Primary", self:GetTeamTech(self:GetTeamOfPlayer(player))) if Weapon then Brain:AddInventoryItem(Weapon) end @@ -548,7 +548,7 @@ function BrainvsBrain:CreateHeavyDrop(xPosLZ) Craft.Pos = Vector(xPosLZ, -30) -- Set the spawn point of the craft for i = 1, Craft.MaxPassengers do - if math.random() < self:GetCrabToHumanSpawnRatio(PresetMan:GetModuleID(self.TechName[self.CPUTeam])) + self.Difficulty / 800 then + if math.random() < self:GetCrabToHumanSpawnRatio(PresetMan:GetModuleID(self.TechName[self.CPUTeam])) then Passenger = self:CreateCrab(self.CPUTeam) elseif RangeRand(0, 105) < self.Difficulty then Passenger = self:CreateHeavyInfantry(self.CPUTeam) diff --git a/Base.rte/Activities/BunkerBreach.lua b/Base.rte/Activities/BunkerBreach.lua index 20184bfe5..5e75341b4 100644 --- a/Base.rte/Activities/BunkerBreach.lua +++ b/Base.rte/Activities/BunkerBreach.lua @@ -50,7 +50,7 @@ function BunkerBreach:StartActivity() -- Add player brains for player = Activity.PLAYER_1, Activity.MAXPLAYERCOUNT - 1 do if self:PlayerActive(player) and self:PlayerHuman(player) then - local Brain = CreateAHuman("Brain Robot", "Base.rte") + local Brain = RandomAHuman("Brains", self:GetTeamTech(self:GetTeamOfPlayer(player))) if Brain then local Weapon = RandomHDFirearm("Weapons - Light", self:GetTeamTech(self:GetTeamOfPlayer(player))) if Weapon then @@ -488,7 +488,7 @@ function BunkerBreach:CreateHeavyDrop(xPosLZ) Craft.Pos = Vector(xPosLZ, -30) -- Set the spawn point of the craft for i = 1, Craft.MaxPassengers do - if math.random() < self:GetCrabToHumanSpawnRatio(PresetMan:GetModuleID(self.CPUTechName)) + self.Difficulty / 800 then + if math.random() < self:GetCrabToHumanSpawnRatio(PresetMan:GetModuleID(self.CPUTechName)) then Passenger = self:CreateCrab() elseif RangeRand(0, 105) < self.Difficulty then Passenger = self:CreateHeavyInfantry() @@ -841,7 +841,7 @@ function BunkerBreach:CreateBrainBot(mode) Act:AddInventoryItem(RandomHDFirearm("Weapons - Light", self.CPUTechName)) Act:AddInventoryItem(CreateHDFirearm("Medium Digger", "Base.rte")) - if PosRand() < 0.5 then + if math.random() < 0.5 then Act:AddInventoryItem(RandomHDFirearm("Weapons - Secondary", self.CPUTechName)) end diff --git a/Base.rte/Activities/Harvester.lua b/Base.rte/Activities/Harvester.lua index 3d9b8f1ac..51faf31c4 100644 --- a/Base.rte/Activities/Harvester.lua +++ b/Base.rte/Activities/Harvester.lua @@ -173,7 +173,7 @@ function Harvester:UpdateActivity() if self.CPUTeam ~= Activity.NOTEAM and self.ESpawnTimer:LeftTillSimMS(self.TimeLeft) <= 0 and MovableMan:GetTeamMOIDCount(self.CPUTeam) <= rte.AIMOIDMax * 3 / self:GetActiveCPUTeamCount() then local ship, actorsInCargo - if PosRand() < 0.5 then + if math.random() < 0.5 then -- Set up the ship to deliver this stuff ship = RandomACDropShip("Any", self.CPUTechName); -- If we can't afford this dropship, then try a rocket instead @@ -202,7 +202,7 @@ function Harvester:UpdateActivity() if IsAHuman(passenger) then passenger:AddInventoryItem(RandomHDFirearm("Weapons - Primary", self.CPUTechName)); passenger:AddInventoryItem(RandomHDFirearm("Weapons - Secondary", self.CPUTechName)); - if PosRand() < 0.5 then + if math.random() < 0.5 then passenger:AddInventoryItem(RandomHDFirearm("Tools - Diggers", self.CPUTechName)); end end diff --git a/Base.rte/Activities/KeepieUppie.lua b/Base.rte/Activities/KeepieUppie.lua index 4d58ecd33..255e987ae 100644 --- a/Base.rte/Activities/KeepieUppie.lua +++ b/Base.rte/Activities/KeepieUppie.lua @@ -135,7 +135,7 @@ function KeepieUppie:UpdateActivity() if self.CPUTeam ~= Activity.NOTEAM and self.ESpawnTimer:LeftTillSimMS(self.TimeLeft) <= 0 and MovableMan:GetTeamMOIDCount(self.CPUTeam) <= rte.AIMOIDMax * 3 / self:GetActiveCPUTeamCount() then local ship, actorsInCargo - if PosRand() < 0.5 then + if math.random() < 0.5 then -- Set up the ship to deliver this stuff ship = RandomACDropShip("Any", self.CPUTechName); actorsInCargo = ship.MaxPassengers @@ -159,7 +159,7 @@ function KeepieUppie:UpdateActivity() if IsAHuman(passenger) then passenger:AddInventoryItem(RandomHDFirearm("Weapons - Primary", self.CPUTechName)); passenger:AddInventoryItem(RandomHDFirearm("Weapons - Secondary", self.CPUTechName)); - if PosRand() < 0.5 then + if math.random() < 0.5 then passenger:AddInventoryItem(RandomHDFirearm("Tools - Diggers", self.CPUTechName)); end end diff --git a/Base.rte/Activities/Massacre.lua b/Base.rte/Activities/Massacre.lua index 8d718a75a..fd7246a3f 100644 --- a/Base.rte/Activities/Massacre.lua +++ b/Base.rte/Activities/Massacre.lua @@ -169,7 +169,7 @@ function Massacre:UpdateActivity() if self.CPUTeam ~= Activity.NOTEAM and self.ESpawnTimer:LeftTillSimMS(self.TimeLeft) <= 0 and MovableMan:GetTeamMOIDCount(self.CPUTeam) <= rte.AIMOIDMax * 3 / self:GetActiveCPUTeamCount() then local ship, actorsInCargo - if PosRand() < 0.5 then + if math.random() < 0.5 then -- Set up the ship to deliver this stuff ship = RandomACDropShip("Any", self.CPUTechName); -- If we can't afford this dropship, then try a rocket instead @@ -198,7 +198,7 @@ function Massacre:UpdateActivity() if IsAHuman(passenger) then passenger:AddInventoryItem(RandomHDFirearm("Weapons - Primary", self.CPUTechName)); passenger:AddInventoryItem(RandomHDFirearm("Weapons - Secondary", self.CPUTechName)); - if PosRand() < 0.5 then + if math.random() < 0.5 then passenger:AddInventoryItem(RandomHDFirearm("Tools - Diggers", self.CPUTechName)); end end diff --git a/Base.rte/Activities/OneManArmy.lua b/Base.rte/Activities/OneManArmy.lua index d1bab9705..16ea85b39 100644 --- a/Base.rte/Activities/OneManArmy.lua +++ b/Base.rte/Activities/OneManArmy.lua @@ -55,7 +55,14 @@ function OneManArmy:StartActivity() secondaryGroup = "Weapons - Secondary"; actorGroup = "Actors - Light"; end - + -- Destroy all doors for this Activity + MovableMan:OpenAllDoors(true, -1); + for actor in MovableMan.AddedActors do + if actor.ClassName == "ADoor" then + actor.ToSettle = true; + actor:GibThis(); + end + end -- Check if we already have a brain assigned for player = Activity.PLAYER_1, Activity.MAXPLAYERCOUNT - 1 do if self:PlayerActive(player) and self:PlayerHuman(player) then @@ -111,9 +118,9 @@ function OneManArmy:StartActivity() else -- If no tech selected, use default items local weapons = {defaultPrimary, defaultSecondary}; for i = 1, #weapons do - local item = weapons[i]; + local item = CreateHDFirearm(weapons[i]); if item then - item.GibWoundLimit = item.GibWoundLimit * self.multiplier; + item.GibWoundLimit = item.GibWoundLimit and item.GibWoundLimit * self.multiplier or item.GibWoundLimit; item.JointStrength = item.JointStrength * self.multiplier; foundBrain:AddInventoryItem(CreateHDFirearm(weapons[i])); end @@ -262,7 +269,7 @@ function OneManArmy:UpdateActivity() if self.CPUTeam ~= Activity.NOTEAM and self.ESpawnTimer:LeftTillSimMS(self.TimeLeft) <= 0 and MovableMan:GetTeamMOIDCount(self.CPUTeam) <= rte.AIMOIDMax * 3 / self:GetActiveCPUTeamCount() then local ship, actorsInCargo - if PosRand() < 0.5 then + if math.random() < 0.5 then -- Set up the ship to deliver this stuff ship = RandomACDropShip("Any", self.CPUTechName); -- If we can't afford this dropship, then try a rocket instead @@ -299,7 +306,7 @@ function OneManArmy:UpdateActivity() if IsAHuman(passenger) then passenger:AddInventoryItem(RandomHDFirearm("Weapons - Light", self.CPUTechName)); passenger:AddInventoryItem(RandomHDFirearm("Weapons - Secondary", self.CPUTechName)); - if PosRand() < 0.5 then + if math.random() < 0.5 then passenger:AddInventoryItem(RandomHDFirearm("Tools - Diggers", self.CPUTechName)); end end diff --git a/Base.rte/Activities/OneManArmyDiggers.lua b/Base.rte/Activities/OneManArmyDiggers.lua index 9575bc219..3d4e59e7e 100644 --- a/Base.rte/Activities/OneManArmyDiggers.lua +++ b/Base.rte/Activities/OneManArmyDiggers.lua @@ -57,7 +57,14 @@ function OneManArmy:StartActivity() primaryGroup = "Weapons - Secondary"; secondaryGroup = "Tools"; end - + -- Destroy all doors for this Activity + MovableMan:OpenAllDoors(true, -1); + for actor in MovableMan.AddedActors do + if actor.ClassName == "ADoor" then + actor.ToSettle = true; + actor:GibThis(); + end + end -- Check if we already have a brain assigned for player = Activity.PLAYER_1, Activity.MAXPLAYERCOUNT - 1 do if self:PlayerActive(player) and self:PlayerHuman(player) then @@ -228,7 +235,7 @@ function OneManArmy:UpdateActivity() if self.CPUTeam ~= Activity.NOTEAM and self.ESpawnTimer:LeftTillSimMS(self.TimeLeft) <= 0 and MovableMan:GetTeamMOIDCount(self.CPUTeam) <= rte.AIMOIDMax * 3 / self:GetActiveCPUTeamCount() then local ship, actorsInCargo - if PosRand() < 0.5 then + if math.random() < 0.5 then -- Set up the ship to deliver this stuff ship = RandomACDropShip("Any", self.CPUTechName); -- If we can't afford this dropship, then try a rocket instead diff --git a/Base.rte/Activities/Siege.lua b/Base.rte/Activities/Siege.lua index 85aedfd06..3c758daf9 100644 --- a/Base.rte/Activities/Siege.lua +++ b/Base.rte/Activities/Siege.lua @@ -481,7 +481,7 @@ function Siege:CreateHeavyDrop(xPosLZ, techName) Craft.Pos = Vector(xPosLZ, -30) -- Set the spawn point of the craft for i = 1, Craft.MaxPassengers do - if math.random() < self:GetCrabToHumanSpawnRatio(PresetMan:GetModuleID(techName)) + self.Difficulty / 800 then + if math.random() < self:GetCrabToHumanSpawnRatio(PresetMan:GetModuleID(techName)) then Passenger = self:CreateCrab(Actor.AIMODE_GOTO, techName) elseif RangeRand(0, 105) < self.Difficulty then Passenger = self:CreateHeavyInfantry(Actor.AIMODE_GOTO,techName) @@ -1019,7 +1019,7 @@ function Siege:CreateBrainBot(mode, team, techName) Act:AddInventoryItem(RandomHDFirearm("Weapons - Light", techName)) Act:AddInventoryItem(CreateHDFirearm("Medium Digger", "Base.rte")) - if PosRand() < 0.5 then + if math.random() < 0.5 then Act:AddInventoryItem(RandomHDFirearm("Weapons - Secondary", techName)) end diff --git a/Base.rte/Activities/SkirmishDefense.lua b/Base.rte/Activities/SkirmishDefense.lua index 9944d7a05..2941ca99f 100644 --- a/Base.rte/Activities/SkirmishDefense.lua +++ b/Base.rte/Activities/SkirmishDefense.lua @@ -601,7 +601,7 @@ function SkirmishDefense:CreateHeavyDrop(xPosLZ, Destination, Team) for _ = 1, actorsInCargo do local Passenger - if math.random() < self:GetCrabToHumanSpawnRatio(self.AI[Team].TechID) + self.Difficulty / 800 then + if math.random() < self:GetCrabToHumanSpawnRatio(self.AI[Team].TechID) then Passenger = self:CreateCrab(Team) elseif RangeRand(0, 105) < self.Difficulty then Passenger = self:CreateHeavyInfantry(Team) diff --git a/Base.rte/Activities/Survival.lua b/Base.rte/Activities/Survival.lua index 25edb0d32..ddea01590 100644 --- a/Base.rte/Activities/Survival.lua +++ b/Base.rte/Activities/Survival.lua @@ -177,7 +177,7 @@ function Survival:UpdateActivity() if self.CPUTeam ~= Activity.NOTEAM and self.ESpawnTimer:LeftTillSimMS(self.TimeLeft) <= 0 and MovableMan:GetTeamMOIDCount(self.CPUTeam) <= rte.AIMOIDMax * 3 / self:GetActiveCPUTeamCount() then local ship, actorsInCargo - if PosRand() < 0.5 then + if math.random() < 0.5 then -- Set up the ship to deliver this stuff ship = RandomACDropShip("Any", self.CPUTechName); -- If we can't afford this dropship, then try a rocket instead @@ -206,7 +206,7 @@ function Survival:UpdateActivity() if IsAHuman(passenger) then passenger:AddInventoryItem(RandomHDFirearm("Weapons - Primary", self.CPUTechName)); passenger:AddInventoryItem(RandomHDFirearm("Weapons - Secondary", self.CPUTechName)); - if PosRand() < 0.5 then + if math.random() < 0.5 then passenger:AddInventoryItem(RandomHDFirearm("Tools - Diggers", self.CPUTechName)); end end diff --git a/Base.rte/Activities/Unused/ZombiePit.lua b/Base.rte/Activities/Unused/ZombiePit.lua index 69e624bf7..06f265c87 100644 --- a/Base.rte/Activities/Unused/ZombiePit.lua +++ b/Base.rte/Activities/Unused/ZombiePit.lua @@ -203,7 +203,7 @@ function ZombiePitMission:UpdateActivity() zombie.Pos = attackLZ:GetRandomPoint(); else -- Will appear anywhere when there is no designated LZ - zombie.Pos = Vector(SceneMan.Scene.Width * PosRand(), 0); + zombie.Pos = Vector(SceneMan.Scene.Width * math.random(), 0); end zombie.Team = self.CPUTeam; zombie:SetControllerMode(Controller.CIM_AI, -1); From 0b15c2554ef0106f28a379c7bca2fac7bf433743 Mon Sep 17 00:00:00 2001 From: 4zk Date: Sat, 25 Jul 2020 19:56:20 +0300 Subject: [PATCH 06/28] Brain cases are no longer made out of Concrete + minor edits --- Base.rte/Actors/Brains/Brainbot/Brainbot.ini | 32 +++++++++++++++----- Base.rte/Actors/Brains/Case/BrainCase.ini | 32 +++++++++++++++----- 2 files changed, 48 insertions(+), 16 deletions(-) diff --git a/Base.rte/Actors/Brains/Brainbot/Brainbot.ini b/Base.rte/Actors/Brains/Brainbot/Brainbot.ini index b4a3c7afb..472a18249 100644 --- a/Base.rte/Actors/Brains/Brainbot/Brainbot.ini +++ b/Base.rte/Actors/Brains/Brainbot/Brainbot.ini @@ -22,20 +22,20 @@ AddActor = Attachable AtomGroup = AtomGroup AutoGenerate = 1 Material = Material - CopyOf = Concrete + CopyOf = Civilian Stuff Resolution = 3 Depth = 0 DeepGroup = AtomGroup AutoGenerate = 1 Material = Material - CopyOf = Concrete + CopyOf = Civilian Stuff Resolution = 4 Depth = 6 DeepCheck = 1 - JointStrength = 1200 + JointStrength = 1000 JointStiffness = 0.3 BreakWound = AEmitter - CopyOf = Leaking Machinery + CopyOf = Leaking Machinery Heavy JointOffset = Vector X = 0.5 Y = 7 @@ -46,14 +46,14 @@ AddActor = Attachable AddGib = Gib GibParticle = MOPixel CopyOf = Drop Brain Fluid - Count = 180 + Count = 140 Spread = 2.25 MaxVelocity = 10 MinVelocity = 1 AddGib = Gib GibParticle = MOPixel CopyOf = Drop Brain Fluid Dark - Count = 120 + Count = 100 Spread = 2.25 MaxVelocity = 10 MinVelocity = 1 @@ -265,6 +265,22 @@ AddActor = Attachable Spread = 2.25 MaxVelocity = 10 MinVelocity = 1 + AddGib = Gib + GibParticle = MOSParticle + CopyOf = Spark Yellow Particle + Count = 3 + Spread = 3.14 + MaxVelocity = 10 + MinVelocity = 1 + InheritsVel = 0 + AddGib = Gib + GibParticle = MOSParticle + CopyOf = Oil Spray Particle + Count = 3 + Spread = 3.14 + MaxVelocity = 10 + MinVelocity = 1 + InheritsVel = 0 AddGib = Gib GibParticle = MOSParticle CopyOf = Gib Metal Rust Tiny A @@ -299,7 +315,7 @@ AddActor = Attachable AddActor = Arm PresetName = Brainbot Arm FG - Mass = 5 + Mass = 6 HitsMOs = 0 GetsHitByMOs = 1 SpriteFile = ContentFile @@ -554,7 +570,7 @@ AddActor = AHuman AddToGroup = Brains GoldValue = 100 Buyable = 1 - Mass = 24 + Mass = 30 HitsMOs = 1 GetsHitByMOs = 1 ScriptPath = Base.rte/AI/HumanAI.lua diff --git a/Base.rte/Actors/Brains/Case/BrainCase.ini b/Base.rte/Actors/Brains/Case/BrainCase.ini index 9ce2d96dc..5ebe02187 100644 --- a/Base.rte/Actors/Brains/Case/BrainCase.ini +++ b/Base.rte/Actors/Brains/Case/BrainCase.ini @@ -50,7 +50,7 @@ AddEffect = MOSRotating AddActor = Actor PresetName = Brain Case - Description = Primary field command unit. A brain enclosed within a glass jar that can control bodies/crafts/vehicles and such. It's very fragile by itself, so make sure to guard it at all costs! + Description = Primary field command unit. A jar-enclosed brain that can remotely control bodies, craft and other units. It's very fragile by itself, so make sure to guard it at all costs! AddToGroup = Brains PinStrength = 500 Mass = 43.54 @@ -74,13 +74,13 @@ AddActor = Actor AtomGroup = AtomGroup AutoGenerate = 1 Material = Material - CopyOf = Concrete + CopyOf = Civilian Stuff Resolution = 1 Depth = 0 DeepGroup = AtomGroup AutoGenerate = 1 Material = Material - CopyOf = Concrete + CopyOf = Civilian Stuff Resolution = 4 Depth = 6 DeepCheck = 1 @@ -108,35 +108,51 @@ AddActor = Actor AddGib = Gib GibParticle = MOPixel CopyOf = Spark Yellow 1 - Count = 12 + Count = 6 Spread = 2.25 MaxVelocity = 5 MinVelocity = 8 AddGib = Gib GibParticle = MOPixel CopyOf = Spark Yellow 2 - Count = 12 + Count = 5 Spread = 2.25 MaxVelocity = 20 MinVelocity = 8 + AddGib = Gib + GibParticle = MOSParticle + CopyOf = Spark Yellow Particle + Count = 3 + Spread = 3.14 + MaxVelocity = 10 + MinVelocity = 1 + InheritsVel = 0 + AddGib = Gib + GibParticle = MOSParticle + CopyOf = Oil Spray Particle + Count = 3 + Spread = 3.14 + MaxVelocity = 10 + MinVelocity = 1 + InheritsVel = 0 AddGib = Gib GibParticle = MOPixel CopyOf = Drop Brain Fluid - Count = 200 + Count = 140 Spread = 2.25 MaxVelocity = 10 MinVelocity = 1 AddGib = Gib GibParticle = MOPixel CopyOf = Drop Brain Fluid Dark - Count = 125 + Count = 100 Spread = 2.25 MaxVelocity = 10 MinVelocity = 1 AddGib = Gib GibParticle = MOPixel CopyOf = Drop Blood - Count = 50 + Count = 40 Spread = 2.25 MaxVelocity = 10 MinVelocity = 1 From d46bb6d05c25c73bdfd06208217eb0b43796ef6f Mon Sep 17 00:00:00 2001 From: 4zk Date: Sat, 25 Jul 2020 20:09:56 +0300 Subject: [PATCH 07/28] Edits to HumanAI: default AI skill is now higher, AI bursts jetpack randomly less while walking, AI uses grenades if in a flanking position, AI only attacks doors if capable of harming them and prefers Heavy Digger for breaching + other minor edits/organization --- Base.rte/AI/HumanBehaviors.lua | 64 +++++++++++++++------------------- Base.rte/AI/NativeHumanAI.lua | 60 ++++++++++++++++++------------- 2 files changed, 64 insertions(+), 60 deletions(-) diff --git a/Base.rte/AI/HumanBehaviors.lua b/Base.rte/AI/HumanBehaviors.lua index a3779e1f5..74cba8e37 100644 --- a/Base.rte/AI/HumanBehaviors.lua +++ b/Base.rte/AI/HumanBehaviors.lua @@ -9,18 +9,14 @@ function HumanBehaviors.GetTeamShootingSkill(team) end local aimSpeed, aimSkill - if skill < Activity.AVERAGESKILL then -- the AI shoot later and tracks the target slower - aimSpeed = -0.025 * skill + 3.3 -- affects the delay before the shooting starts [3.30 .. 1.55] - aimSkill = -0.011 * skill + 2.2 -- affects the precision of the shots [2.20 .. 1.43] - elseif skill >= Activity.UNFAIRSKILL then - aimSpeed = 0.05 - aimSkill = 0.05 + if skill >= Activity.UNFAIRSKILL then + aimSpeed = 0.04 + aimSkill = 0.04 else -- the AI shoot sooner and with slightly better precision - aimSpeed = 1/(0.55/(2.9-math.exp(skill*0.01))) -- [1.42 .. 0.38] - aimSkill = 1/(0.65/(3.0-math.exp(skill*0.01))) -- [1.36 .. 0.48] + aimSpeed = 1/(0.65/(2.9-math.exp(skill*0.01))) -- [1.42 .. 0.38] + aimSkill = 1/(0.75/(3.0-math.exp(skill*0.01))) -- [1.36 .. 0.48] end - return aimSpeed, aimSkill, skill end @@ -84,6 +80,8 @@ function HumanBehaviors.CheckEnemyLOS(AI, Owner, Skill) local LookTarget if Enemy.ClassName == "ADoor" then + -- TO-DO: use explosive weapons on doors? + local Door = ToADoor(Enemy).Door if Door and Door:IsAttached() then LookTarget = Door.Pos @@ -500,8 +498,7 @@ function HumanBehaviors.Sentry(AI, Owner, Abort) elseif AI.SentryFacing and Owner.HFlipped ~= AI.SentryFacing then Owner.HFlipped = AI.SentryFacing -- turn to the direction we have been order to guard break -- restart this behavior - elseif math.random() < Owner.Perceptiveness then - + elseif AI.Target == nil and math.random() < Owner.Perceptiveness then -- turn around occasionally if there is open space behind our back local backAreaRay = Vector(-math.random(FrameMan.PlayerScreenWidth/4, FrameMan.PlayerScreenWidth/2) * Owner.FlipFactor, 0):DegRotate(math.random(-25, 25) * Owner.Perceptiveness) if not SceneMan:CastStrengthRay(Owner.EyePos, backAreaRay, 10, Vector(), 10, rte.grassID, SceneMan.SceneWrapsX) then @@ -1682,13 +1679,12 @@ function HumanBehaviors.GoToWpt(AI, Owner, Abort) else nextLatMove = Actor.LAT_STILL end - if not (Owner.FGLeg and Owner.BGLeg) and not AI.jump then - Owner:GetController():SetState(Controller.BODY_CROUCH,true) -- crawl if no legs - end end elseif ((CurrDist.X < -5 and Owner.HFlipped) or (CurrDist.X > 5 and not Owner.HFlipped)) and math.abs(Owner.Vel.X) < 1 then -- no legs, jump forward AI.jump = true + elseif not AI.jump then + AI.proneState = AHuman.GOPRONE end if Waypoint.Type == "right" then @@ -1821,7 +1817,7 @@ function HumanBehaviors.GoToWpt(AI, Owner, Abort) local delta = SceneMan:ShortestDistance(Waypoint.Pos, FallPos, false).Magnitude - Facings[1].range if delta < 1 then AI.jump = false - elseif AI.flying or delta > 15 then + elseif AI.flying or delta > 25 then AI.jump = true nextAimAngle = Owner:GetAimAngle(false) * 0.5 + Facings[1].aim * 0.5 -- adjust jetpack nozzle direction nextLatMove = Actor.LAT_STILL @@ -2146,7 +2142,6 @@ function HumanBehaviors.GetProjectileData(Owner) -- find muzzle velocity PrjDat.vel = Weapon:GetAIFireVel() - -- half of the theoretical upper limit for the total amount of material strength this weapon can destroy in 250ms PrjDat.pen = Weapon:GetAIPenetration() * math.max((Weapon.RateOfFire / 240), 1) @@ -2162,8 +2157,9 @@ function HumanBehaviors.GetProjectileData(Owner) PrjDat.rng = math.huge elseif PrjDat.drg < 1 then -- AirResistance PrjDat.rng = 0 - local threshold = PrjDat.thr * GetPPM() * TimerMan.DeltaTimeSecs -- AirThreshold in pixels/frame - local vel = PrjDat.vel * GetPPM() * TimerMan.DeltaTimeSecs -- muzzle velocity in pixels/frame + local threshold = PrjDat.thr * rte.PxTravelledPerFrame -- AirThreshold in pixels/frame + local vel = PrjDat.vel * rte.PxTravelledPerFrame -- muzzle velocity in pixels/frame + for _ = 0, math.ceil(lifeTime/TimerMan.DeltaTimeMS) do PrjDat.rng = PrjDat.rng + vel if vel > threshold then @@ -2171,7 +2167,7 @@ function HumanBehaviors.GetProjectileData(Owner) end end else -- no AirResistance - PrjDat.rng = PrjDat.vel * GetPPM() * TimerMan.DeltaTimeSecs * (lifeTime / TimerMan.DeltaTimeMS) + PrjDat.rng = PrjDat.vel * rte.PxTravelledPerFrame * (lifeTime / TimerMan.DeltaTimeMS) end -- Artificially decrease reported range to make sure AI @@ -2633,9 +2629,9 @@ function HumanBehaviors.ThrowTarget(AI, Owner, Abort) local scan = 0 local miss = 0 -- stop scanning after a few missed attempts local AimPoint, Dist, MO, ID, rootID, LOS, aim - + AI.TargetLostTimer:SetSimTimeLimitMS(1500) - + while true do if not MovableMan:ValidMO(AI.Target) then break @@ -2747,7 +2743,7 @@ function HumanBehaviors.ThrowTarget(AI, Owner, Abort) aim = HumanBehaviors.GetGrenadeAngle(AimPoint, Vector(), Grenade.MuzzlePos, Grenade.MaxThrowVel) if aim then ThrowTimer:Reset() - aimTime = RangeRand(1000, 1200) + aimTime = RangeRand(900, 1100) local maxAim = aim -- try again with an average throw vel @@ -2829,24 +2825,22 @@ function HumanBehaviors.AttackTarget(AI, Owner, Abort) local meleeDist = 0 local startPos = Vector(Owner.EyePos.X, Owner.EyePos.Y) - if Owner.EquippedItem then - if Owner.EquippedItem:HasObjectInGroup("Tools - Diggers") or Owner.EquippedItem:HasObjectInGroup("Weapons - Melee") then - meleeDist = Owner.Radius + 25 - startPos = Vector(Owner.EquippedItem.Pos.X, Owner.EquippedItem.Pos.Y) - end + if Owner:EquipDeviceInGroup("Tools - Diggers", true) or Owner:EquipDeviceInGroup("Weapons - Melee", true) then + meleeDist = Owner.Radius + 25 + startPos = Vector(Owner.EquippedItem.Pos.X, Owner.EquippedItem.Pos.Y) elseif Owner.armSway then - if Owner.FGArm then - meleeDist = Owner.Radius + Owner.FGArm.Radius - startPos = Owner.FGArm.Pos - elseif Owner.BGArm then - meleeDist = Owner.Radius + Owner.BGArm.Radius - startPos = Owner.BGArm.Pos + local arm = Owner.FGArm or Owner.BGArm + if arm then + meleeDist = arm.Radius + arm.Radius + startPos = arm.Pos end end if meleeDist > 0 then - local dist = SceneMan:ShortestDistance(startPos, AI.Target.Pos, false) + local attackPos = (AI.Target.ClassName == "ADoor" and ToADoor(AI.Target).Door and ToADoor(AI.Target).Door:IsAttached()) and ToADoor(AI.Target).Door.Pos or AI.Target.Pos + local dist = SceneMan:ShortestDistance(startPos, attackPos, false) if dist.Magnitude < meleeDist then - AI.Ctrl.AnalogAim = SceneMan:ShortestDistance(Owner.EyePos, AI.Target.Pos, false).Normalized + AI.lateralMoveState = Actor.LAT_STILL + AI.Ctrl.AnalogAim = SceneMan:ShortestDistance(Owner.EyePos, attackPos, false).Normalized AI.fire = true else AI.fire = false diff --git a/Base.rte/AI/NativeHumanAI.lua b/Base.rte/AI/NativeHumanAI.lua index e3579abaf..200baf4c2 100644 --- a/Base.rte/AI/NativeHumanAI.lua +++ b/Base.rte/AI/NativeHumanAI.lua @@ -218,25 +218,28 @@ function NativeHumanAI:Update(Owner) end - -- check if the legs reach the ground + -- check if the feet reach the ground if self.AirTimer:IsPastSimMS(120) then self.AirTimer:Reset() - local Origin - if Owner.FGLeg then - Origin = Vector(Owner.FGLeg.Pos.X, Owner.FGLeg.Pos.Y) - elseif Owner.BGLeg then - Origin = Vector(Owner.BGLeg.Pos.X, Owner.BGLeg.Pos.Y) - else - Origin = Vector(Owner.Pos.X, Owner.Pos.Y) + local Origin = {} + if Owner.FGFoot then + table.insert(Origin, Vector(Owner.FGFoot.Pos.X, Owner.FGFoot.Pos.Y) + Vector(0, 4)) end - - if -1 < SceneMan:CastObstacleRay(Origin, Vector(RangeRand(-8, 8), Owner.Height * 0.17), Vector(), Vector(), Owner.ID, Owner.IgnoresWhichTeam, rte.grassID, 3) then - self.groundContact = 3 - else - self.groundContact = self.groundContact - 1 + if Owner.BGFoot then + table.insert(Origin, Vector(Owner.BGFoot.Pos.X, Owner.BGFoot.Pos.Y) + Vector(0, 4)) + end + if #Origin == 0 then + table.insert(Origin, Vector(Owner.Pos.X, Owner.Pos.Y) + Vector(0, 4 + ToMOSprite(Owner):GetSpriteHeight() + Owner.SpriteOffset.Y)) + end + for i = 1, #Origin do + if SceneMan:GetTerrMatter(Origin[i].X, Origin[i].Y) ~= rte.airID then + self.groundContact = 3 + break + else + self.groundContact = self.groundContact - 1 + end end - self.flying = false if self.groundContact < 0 then self.flying = true @@ -275,7 +278,8 @@ function NativeHumanAI:Update(Owner) FoundMO = ToACRocket(FoundMO) elseif FoundMO.ClassName == "ACDropShip" then FoundMO = ToACDropShip(FoundMO) - elseif FoundMO.ClassName == "ADoor" then + elseif FoundMO.ClassName == "ADoor" and ToADoor(FoundMO).Door and ToADoor(FoundMO).Door:IsAttached() + and (Owner:EquipNamedDevice("Heavy Digger", true) or (Owner.FirearmIsReady and HumanBehaviors.GetProjectileData(Owner).pen > ToADoor(FoundMO).Door.Material.StructuralIntegrity)) then FoundMO = ToADoor(FoundMO) elseif FoundMO.ClassName == "Actor" then FoundMO = ToActor(FoundMO) @@ -409,9 +413,6 @@ function NativeHumanAI:Update(Owner) end if Leader.AIMode == Actor.AIMODE_GOTO then Owner.leaderWaypoint = Leader:GetLastAIWaypoint() - elseif Leader.AIMode ~= Actor.AIMODE_SENTRY then - Owner.AIMode = Leader.AIMode - Owner:ClearMovePath() end end end @@ -484,6 +485,8 @@ function NativeHumanAI:Update(Owner) self.jump = false self.lateralMoveState = Actor.LAT_STILL end + else + self.jump = false end -- run the selected behavior and delete it if it returns true @@ -543,8 +546,7 @@ function NativeHumanAI:Update(Owner) if Owner.Health < (Owner.MaxHealth / 2) then if Owner:HasObject("Medikit") then - Owner:EquipNamedDevice("Medikit", true) - self.useMedikit = true + self.useMedikit = Owner:EquipNamedDevice("Medikit", true) else self.useMedikit = false if self.scatter ~= true and Owner.AIMode == Actor.AIMODE_SENTRY then @@ -714,8 +716,18 @@ end function NativeHumanAI:CreateAttackBehavior(Owner) self.ReloadTimer:Reset() self.TargetLostTimer:Reset() + + local dist = SceneMan:ShortestDistance(Owner.Pos, self.Target.Pos, false).Magnitude - if Owner:EquipFirearm(true) then + if self.Target and IsADoor(self.Target) and Owner:EquipNamedDevice("Heavy Digger", true) then + self.NextBehavior = coroutine.create(HumanBehaviors.AttackTarget) + self.NextBehaviorName = "AttackTarget" + -- favor grenades as the initiator to a sneak attack + elseif Owner.AIMode ~= Actor.AIMODE_SQUAD and Owner.AIMode ~= Actor.AIMODE_SENTRY and self.Target.HFlipped == Owner.HFlipped and Owner:EquipDeviceInGroup("Bombs - Grenades", true) and + dist > 100 and dist < ToThrownDevice(Owner.EquippedItem).MaxThrowVel * 20 and (self.Target.Pos.Y + 20) > Owner.Pos.Y then + self.NextBehavior = coroutine.create(HumanBehaviors.ThrowTarget) + self.NextBehaviorName = "ThrowTarget" + elseif Owner:EquipFirearm(true) then if Owner.EquippedItem:HasObjectInGroup("Weapons - Melee") then self.NextBehavior = coroutine.create(HumanBehaviors.AttackTarget) self.NextBehaviorName = "AttackTarget" @@ -723,12 +735,10 @@ function NativeHumanAI:CreateAttackBehavior(Owner) self.NextBehavior = coroutine.create(HumanBehaviors.ShootTarget) self.NextBehaviorName = "ShootTarget" end - elseif Owner.AIMode ~= Actor.AIMODE_SQUAD and Owner:EquipThrowable(true) then + elseif Owner.AIMode ~= Actor.AIMODE_SQUAD and Owner:EquipThrowable(true) and dist < (ToThrownDevice(Owner.EquippedItem).MaxThrowVel * 10) then self.NextBehavior = coroutine.create(HumanBehaviors.ThrowTarget) self.NextBehaviorName = "ThrowTarget" - elseif Owner.AIMode ~= Actor.AIMODE_SQUAD and Owner:EquipDiggingTool(true) and - SceneMan:ShortestDistance(Owner.Pos, self.Target.Pos, false).Magnitude < 150 - then + elseif Owner.AIMode ~= Actor.AIMODE_SQUAD and Owner:EquipDiggingTool(true) and dist < 150 then self.NextBehavior = coroutine.create(HumanBehaviors.AttackTarget) self.NextBehaviorName = "AttackTarget" else -- unarmed or far away From 84b6a961c171b7e970c26f60db96394ab49da3ec Mon Sep 17 00:00:00 2001 From: 4zk Date: Sat, 25 Jul 2020 20:11:13 +0300 Subject: [PATCH 08/28] Craft price and delivery delay inflation --- Base.rte/Craft/DropShips/DropshipMK1.ini | 3 ++- Base.rte/Craft/Rockets/MK2/RocketMK2.ini | 3 +-- Base.rte/Craft/StorageCrate/Crate.ini | 6 +++--- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/Base.rte/Craft/DropShips/DropshipMK1.ini b/Base.rte/Craft/DropShips/DropshipMK1.ini index b9993d936..170d9d8b3 100644 --- a/Base.rte/Craft/DropShips/DropshipMK1.ini +++ b/Base.rte/Craft/DropShips/DropshipMK1.ini @@ -1454,7 +1454,8 @@ AddActor = ACDropShip CopyOf = Dent Metal ExitWound = AEmitter CopyOf = Dent Metal - GoldValue = 300 + GoldValue = 500 + DeliveryDelayMultiplier = 2.0 AtomGroup = AtomGroup AutoGenerate = 1 Material = Material diff --git a/Base.rte/Craft/Rockets/MK2/RocketMK2.ini b/Base.rte/Craft/Rockets/MK2/RocketMK2.ini index 2c31233bd..41379d882 100644 --- a/Base.rte/Craft/Rockets/MK2/RocketMK2.ini +++ b/Base.rte/Craft/Rockets/MK2/RocketMK2.ini @@ -541,8 +541,7 @@ AddActor = ACRocket CopyOf = Gas Leak ExitWound = AEmitter CopyOf = Gas Leak - GoldValue = 240 - DeliveryDelayMultiplier = 0.60 + GoldValue = 300 AtomGroup = AtomGroup AutoGenerate = 1 Material = Material diff --git a/Base.rte/Craft/StorageCrate/Crate.ini b/Base.rte/Craft/StorageCrate/Crate.ini index efdd6e8a9..dbdb85cb8 100644 --- a/Base.rte/Craft/StorageCrate/Crate.ini +++ b/Base.rte/Craft/StorageCrate/Crate.ini @@ -71,7 +71,7 @@ AddActor = ACRocket CopyOf = Dent Metal ExitWound = AEmitter CopyOf = Dent Metal - GoldValue = 20 + GoldValue = 25 Buyable = 0 AtomGroup = AtomGroup AutoGenerate = 1 @@ -243,8 +243,8 @@ AddActor = ACRocket Velocity = Vector X = 0 Y = 20 - GoldValue = 20 - DeliveryDelayMultiplier = 2.25 + GoldValue = 50 + DeliveryDelayMultiplier = 2.5 Buyable = 1 GibImpulseLimit = 20000 GibWoundLimit = 10 \ No newline at end of file From b17ea26f914e6a9da32064b0278c99c20ba1814f Mon Sep 17 00:00:00 2001 From: 4zk Date: Sat, 25 Jul 2020 20:15:54 +0300 Subject: [PATCH 09/28] Edits to Dropship bombs: can now be shot in midair --- .../Explosives/ClusterMineBomb/ClusterMineBomb.ini | 8 ++++---- Base.rte/Devices/Explosives/NapalmBomb/NapalmBomb.ini | 8 ++++---- Base.rte/Devices/Explosives/StandardBomb/StandardBomb.ini | 8 ++++---- 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/Base.rte/Devices/Explosives/ClusterMineBomb/ClusterMineBomb.ini b/Base.rte/Devices/Explosives/ClusterMineBomb/ClusterMineBomb.ini index 66f9b2d7a..d77a80d3d 100644 --- a/Base.rte/Devices/Explosives/ClusterMineBomb/ClusterMineBomb.ini +++ b/Base.rte/Devices/Explosives/ClusterMineBomb/ClusterMineBomb.ini @@ -94,11 +94,11 @@ AddDevice = TDExplosive AddToGroup = Bombs AddToGroup = Bombs - Payloads Description = Mine field deployment bomb. ONLY for dropship use. Scatter mines across the battlefield to stop enemy advances! Explodes several meters above the ground to assure maximum coverage. - Mass = 20 + Mass = 30 OrientToVel = 0.8 RestThreshold = -500 HitsMOs = 1 - GetsHitByMOs = 0 + GetsHitByMOs = 1 ScriptPath = Base.rte/Devices/Explosives/ClusterMineBomb/ClusterMineBomb.lua SpriteFile = ContentFile FilePath = Base.rte/Devices/Explosives/ClusterMineBomb/ClusterMineBomb.bmp @@ -169,5 +169,5 @@ AddDevice = TDExplosive MinVelocity = 30 LifeVariation = 0.50 InheritsVel = 0 - GibImpulseLimit = 10 - GibWoundLimit = 8 \ No newline at end of file + GibImpulseLimit = 20 + GibWoundLimit = 5 \ No newline at end of file diff --git a/Base.rte/Devices/Explosives/NapalmBomb/NapalmBomb.ini b/Base.rte/Devices/Explosives/NapalmBomb/NapalmBomb.ini index 590bc14d7..d287a169c 100644 --- a/Base.rte/Devices/Explosives/NapalmBomb/NapalmBomb.ini +++ b/Base.rte/Devices/Explosives/NapalmBomb/NapalmBomb.ini @@ -130,11 +130,11 @@ AddDevice = TDExplosive AddToGroup = Bombs AddToGroup = Bombs - Payloads Description = Napalm craft-bombardment bomb. ONLY for dropship use. Rain flaming death upon troopers by cooking them with hot napalm ordnance! - Mass = 20 + Mass = 30 OrientToVel = 0.8 RestThreshold = -500 HitsMOs = 1 - GetsHitByMOs = 0 + GetsHitByMOs = 1 SpriteFile = ContentFile FilePath = Base.rte/Devices/Explosives/NapalmBomb/NapalmBomb.bmp FrameCount = 1 @@ -293,5 +293,5 @@ AddDevice = TDExplosive MaxVelocity = 50 LifeVariation = 0.20 InheritsVel = 0 - GibImpulseLimit = 10 - GibWoundLimit = 8 \ No newline at end of file + GibImpulseLimit = 20 + GibWoundLimit = 4 \ No newline at end of file diff --git a/Base.rte/Devices/Explosives/StandardBomb/StandardBomb.ini b/Base.rte/Devices/Explosives/StandardBomb/StandardBomb.ini index f83cea385..2f4272f86 100644 --- a/Base.rte/Devices/Explosives/StandardBomb/StandardBomb.ini +++ b/Base.rte/Devices/Explosives/StandardBomb/StandardBomb.ini @@ -7,11 +7,11 @@ AddDevice = TDExplosive AddToGroup = Bombs AddToGroup = Bombs - Payloads Description = Normal craft-bombardment bomb. ONLY for dropship use. Fly high above before dropping these so you won't hit yourself with your own payload! - Mass = 10 + Mass = 20 OrientToVel = 0.8 RestThreshold = -500 HitsMOs = 1 - GetsHitByMOs = 0 + GetsHitByMOs = 1 SpriteFile = ContentFile FilePath = Base.rte/Devices/Explosives/StandardBomb/StandardBomb.bmp FrameCount = 1 @@ -132,5 +132,5 @@ AddDevice = TDExplosive MinVelocity = 40 MaxVelocity = 40 InheritsVel = 0 - GibImpulseLimit = 10 - GibWoundLimit = 5 \ No newline at end of file + GibImpulseLimit = 20 + GibWoundLimit = 3 \ No newline at end of file From 37961bcdad94283623a83e6c89b931d55c1b3e21 Mon Sep 17 00:00:00 2001 From: 4zk Date: Sat, 25 Jul 2020 20:18:59 +0300 Subject: [PATCH 10/28] Remote Explosive rework: now spawns a free Detonator tool for the user --- .../RemoteExplosive/RemoteExplosive.ini | 118 ++++++------------ .../RemoteExplosive/RemoteExplosiveDeploy.lua | 28 +++-- .../RemoteExplosiveDetonator.lua | 48 +++---- .../RemoteExplosive/RemoteExplosiveSet.lua | 16 +-- 4 files changed, 85 insertions(+), 125 deletions(-) diff --git a/Base.rte/Devices/Explosives/RemoteExplosive/RemoteExplosive.ini b/Base.rte/Devices/Explosives/RemoteExplosive/RemoteExplosive.ini index 60befdc94..a91d82bc2 100644 --- a/Base.rte/Devices/Explosives/RemoteExplosive/RemoteExplosive.ini +++ b/Base.rte/Devices/Explosives/RemoteExplosive/RemoteExplosive.ini @@ -28,15 +28,6 @@ AddEffect = AEmitter // Remote Explosive Detonator -AddAmmo = Round - PresetName = Round Detonator - ParticleCount = 1 - Particle = MOPixel - CopyOf = Null Bullet - Shell = None - FireVelocity = 1 - - AddAmmo = Magazine PresetName = Magazine Detonator Mass = 0 @@ -51,7 +42,7 @@ AddAmmo = Magazine Stiffness = 1 RoundCount = -1 RegularRound = Round - CopyOf = Round Detonator + CopyOf = Null Round AddDevice = HDFirearm @@ -59,7 +50,7 @@ AddDevice = HDFirearm AddToGroup = Tools AddToGroup = Bombs Description = Detonates all Remote Explosives that have been placed by your team. - Mass = 3 + Mass = 1.5 HitsMOs = 0 GetsHitByMOs = 1 ScriptPath = Base.rte/Devices/Explosives/RemoteExplosive/RemoteExplosiveDetonator.lua @@ -77,13 +68,13 @@ AddDevice = HDFirearm AtomGroup = AtomGroup AutoGenerate = 1 Material = Material - CopyOf = Metal + CopyOf = Military Stuff Resolution = 4 Depth = 0 DeepGroup = AtomGroup AutoGenerate = 1 Material = Material - CopyOf = Metal + CopyOf = Military Stuff Resolution = 4 Depth = 10 DeepCheck = 0 @@ -91,45 +82,27 @@ AddDevice = HDFirearm Stiffness = 0.3 JointOffset = Vector X = -2 - Y = -3 + Y = -1 DrawAfterParent = 0 OneHanded = 0 StanceOffset = Vector - X = 6 - Y = 4 + X = 8 + Y = 5 SharpStanceOffset = Vector - X = 9 - Y = -4 + X = 7 + Y = 1 SupportOffset = Vector - X = 3 - Y = 2 + X = 99 + Y = 99 SharpLength = 0 Magazine = Magazine CopyOf = Magazine Detonator ParentOffset = Vector X = -2 Y = 1 - Flash = None -// FireSound = SoundContainer -// AddSound = ContentFile -// FilePath = Base.rte/Devices/Explosives/RemoteExplosive/Sounds/RemoteExplosiveDetonate.wav - RateOfFire = 200 - ReloadTime = 0 - FullAuto = 0 - FireIgnoresThis = 0 - ShakeRange = 0 - SharpShakeRange = 0 - NoSupportFactor = 0 - ParticleSpreadRange = 0 - ShellSpreadRange = 0 - ShellAngVelRange = 0 - MuzzleOffset = Vector - X = 0 - Y = 0 - EjectionOffset = Vector - X = 0 - Y = 0 - GibWoundLimit = 2 + RateOfFire = 60 + ReloadTime = 400 + GibWoundLimit = 3 /////////////////////////////////////////////////////////////////////// @@ -172,43 +145,44 @@ AddMOSRotating = MOSRotating AddGib = Gib GibParticle = MOPixel CopyOf = Glow Explosion Huge - Spread = 2.25 - MaxVelocity = 0.1 - MinVelocity = 0 - InheritsVel = 0 + Spread = 3.14 + MaxVelocity = 1 + MinVelocity = 1 AddGib = Gib GibParticle = MOSParticle CopyOf = Main Thruster Blast Ball 1 Glow - Count = 10 + Count = 25 + Spread = 3.14 MaxVelocity = 20 - MinVelocity = 10 + MinVelocity = 5 LifeVariation = 0.30 InheritsVel = 0 AddGib = Gib GibParticle = MOPixel CopyOf = Grenade Fragment Gray - Count = 20 + Count = 25 Spread = 3.14 - MaxVelocity = 75 - MinVelocity = 50 + MaxVelocity = 80 + MinVelocity = 60 InheritsVel = 0 AddGib = Gib GibParticle = MOPixel CopyOf = Grenade Fragment Yellow PresetName = Remote Explosive Door Buster LifeTime = 10 - Count = 60 - Spread = 3.1 + Count = 150 + Spread = 3.14 MinVelocity = 100 - MaxVelocity = 150 + MaxVelocity = 200 InheritsVel = 0 - AddGib = Gib +/* AddGib = Gib GibParticle = MOPixel CopyOf = Air Blast Count = 100 + Spread = 3.14 MinVelocity = 100 MaxVelocity = 100 - InheritsVel = 0 + InheritsVel = 0 */ AddGib = Gib GibParticle = MOPixel CopyOf = Air Blast Scripted @@ -221,45 +195,27 @@ AddMOSRotating = MOSRotating AddGib = Gib GibParticle = MOSParticle CopyOf = Grenade Smoke 1 - Count = 30 + Count = 35 Spread = 3.14 - MaxVelocity = 120 - MinVelocity = 60 + MaxVelocity = 100 + MinVelocity = 25 LifeVariation = 0.50 InheritsVel = 0 AddGib = Gib GibParticle = MOSParticle CopyOf = Grenade Smoke 2 - Count = 30 + Count = 35 Spread = 3.14 - MaxVelocity = 120 - MinVelocity = 60 - LifeVariation = 0.50 - InheritsVel = 0 - AddGib = Gib - GibParticle = MOSParticle - CopyOf = Explosion Smoke 1 - Count = 15 - Spread = 3.1 - MaxVelocity = 20 - MinVelocity = 0 - LifeVariation = 0.50 - InheritsVel = 0 - AddGib = Gib - GibParticle = MOSParticle - CopyOf = Explosion Smoke 2 - Count = 15 - Spread = 3.1 - MaxVelocity = 15 - MinVelocity = 0 + MaxVelocity = 100 + MinVelocity = 25 LifeVariation = 0.50 InheritsVel = 0 - + AddDevice = TDExplosive PresetName = Remote Explosive AddToGroup = Bombs - Description = Manually placed C4 explosives that are automatically set to operate on your team's frequency. Detonate using the Detonator tool. + Description = Manually placed C4 explosives that are automatically set to operate on your team's frequency. Mass = 3 HitsMOs = 1 GetsHitByMOs = 1 diff --git a/Base.rte/Devices/Explosives/RemoteExplosive/RemoteExplosiveDeploy.lua b/Base.rte/Devices/Explosives/RemoteExplosive/RemoteExplosiveDeploy.lua index 07894d1d0..61332da83 100644 --- a/Base.rte/Devices/Explosives/RemoteExplosive/RemoteExplosiveDeploy.lua +++ b/Base.rte/Devices/Explosives/RemoteExplosive/RemoteExplosiveDeploy.lua @@ -5,15 +5,11 @@ function Create(self) end function Update(self) - - if self.ID ~= self.RootID then - local actor = MovableMan:GetMOFromID(self.RootID); - if MovableMan:IsActor(actor) then - self.alliedTeam = ToActor(actor).Team; - end - end - - if self:IsActivated() and self.ID == self.RootID then + local parent = self:GetRootParent(); + if parent and IsAHuman(parent) then + self.alliedTeam = ToAHuman(parent).Team; + self.user = ToAHuman(parent); + elseif self:IsActivated() then local explosive = CreateMOSRotating("Remote Explosive Active"); explosive.Pos = self.Pos; @@ -21,9 +17,17 @@ function Update(self) explosive.RotAngle = self.RotAngle; explosive.Sharpness = self.alliedTeam; MovableMan:AddParticle(explosive); - + + if self.user and IsAHuman(self.user) then + if not self.user:HasObject("Detonator") then + self.user:AddInventoryItem(CreateHDFirearm("Base.rte/Detonator")); + end + if not self.user:EquipNamedDevice(self.PresetName, true) then + self.user:EquipNamedDevice("Detonator", true); + end + end self.ToDelete = true; - + else + self.user = nil; end - end \ No newline at end of file diff --git a/Base.rte/Devices/Explosives/RemoteExplosive/RemoteExplosiveDetonator.lua b/Base.rte/Devices/Explosives/RemoteExplosive/RemoteExplosiveDetonator.lua index 05282e350..50104c48a 100644 --- a/Base.rte/Devices/Explosives/RemoteExplosive/RemoteExplosiveDetonator.lua +++ b/Base.rte/Devices/Explosives/RemoteExplosive/RemoteExplosiveDetonator.lua @@ -16,35 +16,35 @@ function Update(self) self.alliedTeam = ToActor(actor).Team; end end + if self.Magazine then + if self:IsActivated() then + if self.fireOn == false then + self.Magazine.RoundCount = 500 - self.overallTimer.ElapsedSimTimeMS; + if self.delayTimer:IsPastSimMS(500) then + self.delayTimer:Reset(); + self.actionPhase = self.actionPhase + 1; + self.blink = false; + end + if self.actionPhase >= 1 then - if self:IsActivated() then - - if self.fireOn == false then - self.Magazine.RoundCount = 500-self.overallTimer.ElapsedSimTimeMS; - if self.delayTimer:IsPastSimMS(500) then - self.delayTimer:Reset(); - self.actionPhase = self.actionPhase + 1; - self.blink = false; - end - if self.actionPhase >= 1 then - - if coalitionC4TableA ~= nil and coalitionC4TableB ~= nil then - for i = 1, #coalitionC4TableA do - if MovableMan:IsParticle(coalitionC4TableA[i]) and coalitionC4TableB[i] == self.alliedTeam then - coalitionC4TableA[i].Sharpness = 2; + if RemoteExplosiveTableA and RemoteExplosiveTableB then + for i = 1, #RemoteExplosiveTableA do + if MovableMan:IsParticle(RemoteExplosiveTableA[i]) and RemoteExplosiveTableB[i] == self.alliedTeam then + RemoteExplosiveTableA[i].Sharpness = 2; + end end end + AudioMan:PlaySound("Base.rte/Devices/Explosives/AntiPersonnelMine/Sounds/MineDetonate.wav", self.Pos); + self.fireOn = true; + self:Reload(); end - AudioMan:PlaySound("Base.rte/Devices/Explosives/AntiPersonnelMine/Sounds/MineDetonate.wav", self.Pos); - self.fireOn = true; end + else + self.delayTimer:Reset(); + self.overallTimer:Reset(); + self.Magazine.RoundCount = 500; + self.fireOn = false; + self.actionPhase = 0; end - else - self.delayTimer:Reset(); - self.overallTimer:Reset(); - self.Magazine.RoundCount = 500; - self.fireOn = false; - self.actionPhase = 0; end - end \ No newline at end of file diff --git a/Base.rte/Devices/Explosives/RemoteExplosive/RemoteExplosiveSet.lua b/Base.rte/Devices/Explosives/RemoteExplosive/RemoteExplosiveSet.lua index 0b52e1cd8..1d83cba38 100644 --- a/Base.rte/Devices/Explosives/RemoteExplosive/RemoteExplosiveSet.lua +++ b/Base.rte/Devices/Explosives/RemoteExplosive/RemoteExplosiveSet.lua @@ -10,14 +10,14 @@ function Create(self) self.Team = self.alliedTeam; self.Sharpness = 0; - if coalitionC4TableA == nil then - coalitionC4TableA = {}; - coalitionC4TableB = {}; + if RemoteExplosiveTableA == nil then + RemoteExplosiveTableA = {}; + RemoteExplosiveTableB = {}; end - self.tableNum = #coalitionC4TableA+1; - coalitionC4TableA[self.tableNum] = self; - coalitionC4TableB[self.tableNum] = self.alliedTeam; + self.tableNum = #RemoteExplosiveTableA + 1; + RemoteExplosiveTableA[self.tableNum] = self; + RemoteExplosiveTableB[self.tableNum] = self.alliedTeam; self.breachStrength = 100; end @@ -98,6 +98,6 @@ function Update(self) end end function Destroy(self) - coalitionC4TableA[self.tableNum] = nil; - coalitionC4TableB[self.tableNum] = nil; + RemoteExplosiveTableA[self.tableNum] = nil; + RemoteExplosiveTableB[self.tableNum] = nil; end \ No newline at end of file From 33a3b773c01f6ada22026c7933d9e816680833aa Mon Sep 17 00:00:00 2001 From: 4zk Date: Sat, 25 Jul 2020 20:27:09 +0300 Subject: [PATCH 11/28] Lots of minor device-related edits and cleanup (to-do: preserve legacy Base.rte weapons or create new ones?) --- .../Explosives/AntiPersonnelMine/MineSet.lua | 36 +++---- Base.rte/Devices/Shared.ini | 6 ++ .../Devices/Shared/Scripts/AutoReload.lua | 4 +- Base.rte/Devices/Shared/Scripts/BurstFire.lua | 2 +- .../Shared/Scripts/MuzzleSmokeHigh.lua | 2 +- .../Devices/Shared/Scripts/MuzzleSmokeLow.lua | 36 +++---- .../Shared/Scripts/MuzzleSmokeMedium.lua | 36 +++---- .../Devices/Shared/Scripts/RecoilTilt.lua | 6 +- .../Shared/Scripts/RevolverCylinderReload.lua | 27 ++--- .../Devices/Shared/Scripts/ShotgunReload.lua | 23 ++--- .../Shared/Scripts/TrajectoryGuide.lua | 35 ++++--- .../Devices/Shields/RiotShield/RiotShield.ini | 2 +- Base.rte/Devices/Special/Medikit/Medikit.lua | 13 +-- Base.rte/Devices/Tools/Digger/Digger.ini | 2 +- Base.rte/Devices/Tools/Disarmer/Disarmer.ini | 13 +-- Base.rte/Devices/Tools/Disarmer/Disarmer.lua | 26 ++--- Base.rte/Devices/Tools/GrappleGun/Grapple.lua | 93 ++++++++++-------- .../Devices/Tools/GrappleGun/GrappleGun.ini | 14 +-- .../Devices/Tools/GrappleGun/GrappleGun.lua | 5 +- Base.rte/Devices/Tools/GrappleGun/Pie.lua | 8 +- Base.rte/Devices/Tools/Repeller/Repeller.ini | 1 + .../Devices/Tools/Scanner/ScannerHeavy.lua | 12 +-- .../Devices/Tools/Scanner/ScannerLight.lua | 11 +-- .../Devices/Tools/Scanner/ScannerMedium.lua | 11 +-- Base.rte/Devices/Weapons/Pistol/Pistol.ini | 4 +- Base.rte/Devices/Weapons/Pistol/Pistol000.bmp | Bin 1208 -> 1206 bytes Base.rte/Devices/Weapons/Pistol/Pistol001.bmp | Bin 1208 -> 1206 bytes Base.rte/Devices/Weapons/SMG/SMG.ini | 4 +- Base.rte/Devices/Weapons/SMG/SMG000.bmp | Bin 1278 -> 1278 bytes Base.rte/Devices/Weapons/SMG/SMG001.bmp | Bin 1278 -> 1278 bytes Base.rte/Devices/Weapons/Shotgun/Shotgun.ini | 6 +- .../Devices/Weapons/Shotgun/Shotgun000.bmp | Bin 1344 -> 1342 bytes .../Devices/Weapons/Shotgun/Shotgun001.bmp | Bin 1344 -> 1342 bytes 33 files changed, 194 insertions(+), 244 deletions(-) diff --git a/Base.rte/Devices/Explosives/AntiPersonnelMine/MineSet.lua b/Base.rte/Devices/Explosives/AntiPersonnelMine/MineSet.lua index 9cd09bc6b..08b81e521 100644 --- a/Base.rte/Devices/Explosives/AntiPersonnelMine/MineSet.lua +++ b/Base.rte/Devices/Explosives/AntiPersonnelMine/MineSet.lua @@ -17,14 +17,14 @@ function Create(self) self.Sharpness = 0; self.blink = false; - self.Frame = (self.alliedTeam+1)*2; + self.Frame = (self.alliedTeam + 1) * 2; - if coalitionMineTable == nil then - coalitionMineTable = {}; + if AntiPersonnelMineTable == nil then + AntiPersonnelMineTable = {}; end - self.tableNum = #coalitionMineTable+1; - coalitionMineTable[self.tableNum] = self; + self.tableNum = #AntiPersonnelMineTable + 1; + AntiPersonnelMineTable[self.tableNum] = self; self.checkDelay = 100; self.checkDelayExtension = 0.1; @@ -35,9 +35,9 @@ end function Update(self) self.ToSettle = false; - if coalitionMineTable == nil then - coalitionMineTable = {}; - coalitionMineTable[self.tableNum] = self; + if AntiPersonnelMineTable == nil then + AntiPersonnelMineTable = {}; + AntiPersonnelMineTable[self.tableNum] = self; end if self.Sharpness ~= 0 then self.ToDelete = true; @@ -56,16 +56,16 @@ function Update(self) local terrainRaycastA = SceneMan:CastStrengthRay(self.Pos + Vector(0, 3):RadRotate(Vector(self.Vel.X,self.Vel.Y).AbsRadAngle), trace, 5, rayHitPosA, 0, 0, SceneMan.SceneWrapsX); local rayHitPosB = Vector(); - local terrainRaycastB = SceneMan:CastStrengthRay(self.Pos + Vector(0,-3):RadRotate(Vector(self.Vel.X,self.Vel.Y).AbsRadAngle), trace, 5, rayHitPosB, 0, 0, SceneMan.SceneWrapsX); + local terrainRaycastB = SceneMan:CastStrengthRay(self.Pos + Vector(0, -3):RadRotate(Vector(self.Vel.X,self.Vel.Y).AbsRadAngle), trace, 5, rayHitPosB, 0, 0, SceneMan.SceneWrapsX); if terrainRaycastA == true and terrainRaycastB == true then - self.faceDirection = SceneMan:ShortestDistance(rayHitPosA, rayHitPosB, SceneMan.SceneWrapsX).AbsRadAngle + (math.pi /2); + self.faceDirection = SceneMan:ShortestDistance(rayHitPosA, rayHitPosB, SceneMan.SceneWrapsX).AbsRadAngle + (math.pi/2); else - self.faceDirection = (self.Vel*-1).AbsRadAngle; + self.faceDirection = (self.Vel * -1).AbsRadAngle; end self.Pos = rayHitPos + SceneMan:ShortestDistance(rayHitPos,self.Pos,SceneMan.SceneWrapsX):SetMagnitude(2); - self.RotAngle = self.faceDirection-(math.pi/2); + self.RotAngle = self.faceDirection - (math.pi/2); self.PinStrength = self.GibImpulseLimit; self.actionPhase = 1; AudioMan:PlaySound("Base.rte/Devices/Explosives/AntiPersonnelMine/Sounds/MineActivate.wav", self.Pos); @@ -82,10 +82,10 @@ function Update(self) if self.blink == false then self.blink = true; - self.Frame = (self.alliedTeam+1)*2; + self.Frame = (self.alliedTeam + 1) * 2; else self.blink = false; - self.Frame = ((self.alliedTeam+1)*2)+1; + self.Frame = ((self.alliedTeam + 1) * 2) + 1; end end @@ -93,7 +93,7 @@ function Update(self) self.checkDelay = self.checkDelay + self.checkDelayExtension; self.detectionAngleTurn = self.detectionAngleTurn + math.rad(self.detectionTurnSpeed); - local detectionAngle = self.faceDirection + (math.sin(self.detectionAngleTurn) * math.rad(self.detectionAngleDegrees / 2)); + local detectionAngle = self.faceDirection + (math.sin(self.detectionAngleTurn) * math.rad(self.detectionAngleDegrees/2)); self.delayTimer:Reset(); @@ -106,7 +106,7 @@ function Update(self) else self.tempLaserLength = self.laserLength; end - local raycast = SceneMan:CastMORay(startPos,Vector(self.tempLaserLength,0):RadRotate(detectionAngle),self.ID,self.alliedTeam,0,true,4); + local raycast = SceneMan:CastMORay(startPos,Vector(self.tempLaserLength, 0):RadRotate(detectionAngle),self.ID,self.alliedTeam, 0, true, 4); if raycast ~= rte.NoMOID then local targetpart = ToMOSRotating(MovableMan:GetMOFromID(raycast)); local target = ToMOSRotating(MovableMan:GetMOFromID(targetpart.RootID)); @@ -126,7 +126,7 @@ function Update(self) if self.blink == false then self.blink = true; - self.Frame = ((self.alliedTeam+1)*2)+1; + self.Frame = ((self.alliedTeam + 1) * 2) + 1; self.delayTimer:Reset(); AudioMan:PlaySound("Base.rte/Devices/Explosives/AntiPersonnelMine/Sounds/MineDetonate.wav", self.Pos); end @@ -137,5 +137,5 @@ function Update(self) end end function Destroy(self) - coalitionMineTable[self.tableNum] = nil; + AntiPersonnelMineTable[self.tableNum] = nil; end \ No newline at end of file diff --git a/Base.rte/Devices/Shared.ini b/Base.rte/Devices/Shared.ini index 7319b9a40..3609ef9fa 100644 --- a/Base.rte/Devices/Shared.ini +++ b/Base.rte/Devices/Shared.ini @@ -50,6 +50,12 @@ AddAmmo = Magazine Discardable = 0 +AddAmmo = Magazine + CopyOf = Null Magazine + PresetName = Null Magazine Infinite + RoundCount = -1 + + /////////////////////////////////////////////////////////////////////// // Ammo diff --git a/Base.rte/Devices/Shared/Scripts/AutoReload.lua b/Base.rte/Devices/Shared/Scripts/AutoReload.lua index 8f857bde2..13b5fe5ce 100644 --- a/Base.rte/Devices/Shared/Scripts/AutoReload.lua +++ b/Base.rte/Devices/Shared/Scripts/AutoReload.lua @@ -1,8 +1,8 @@ function Update(self) - if not (self.Magazine) or (self.Magazine and self.Magazine.RoundCount == 0) then + if self.RoundInMagCount == 0 then local actor = MovableMan:GetMOFromID(self.RootID); if MovableMan:IsActor(actor) then - ToActor(actor):GetController():SetState(Controller.WEAPON_RELOAD,true); + self:Reload(); end end end \ No newline at end of file diff --git a/Base.rte/Devices/Shared/Scripts/BurstFire.lua b/Base.rte/Devices/Shared/Scripts/BurstFire.lua index 013abe14b..1778e1b8f 100644 --- a/Base.rte/Devices/Shared/Scripts/BurstFire.lua +++ b/Base.rte/Devices/Shared/Scripts/BurstFire.lua @@ -1,6 +1,6 @@ function Create(self) self.shotsPerBurst = 3; - self.coolDownDelay = (60000 / self.RateOfFire); + self.coolDownDelay = (60000/self.RateOfFire) + 60; end function Update(self) if self.Magazine then diff --git a/Base.rte/Devices/Shared/Scripts/MuzzleSmokeHigh.lua b/Base.rte/Devices/Shared/Scripts/MuzzleSmokeHigh.lua index af4a526bf..fedde3c4d 100644 --- a/Base.rte/Devices/Shared/Scripts/MuzzleSmokeHigh.lua +++ b/Base.rte/Devices/Shared/Scripts/MuzzleSmokeHigh.lua @@ -1,6 +1,6 @@ function Create(self) local Effect - local Offset = self.Vel*(20*TimerMan.DeltaTimeSecs) -- the effect will be created the next frame so move it one frame backwards towards the barrel + local Offset = self.Vel * rte.PxTravelledPerFrame -- The effect will be created the next frame so move it one frame backwards towards the barrel for i = 1, 2 do Effect = CreateMOSParticle("Tiny Smoke Ball 1", "Base.rte") diff --git a/Base.rte/Devices/Shared/Scripts/MuzzleSmokeLow.lua b/Base.rte/Devices/Shared/Scripts/MuzzleSmokeLow.lua index 640587c3a..59e744fb1 100644 --- a/Base.rte/Devices/Shared/Scripts/MuzzleSmokeLow.lua +++ b/Base.rte/Devices/Shared/Scripts/MuzzleSmokeLow.lua @@ -1,31 +1,17 @@ function Create(self) - if self.Magazine then - self.ammo = self.Magazine.RoundCount - else - self.ammo = 0 - end + self.minSmokeCount = 1; + self.maxSmokeCount = 3; + self.spread = 0.2; end - function Update(self) - if self.Magazine then - if self.ammo > self.Magazine.RoundCount then - - local checkFlip = 1; - if self.HFlipped then - checkFlip = -1; - end - - local randomSmoke = math.floor(math.random()*3)+1; - - for i = 1, randomSmoke do - local smokefx = CreateMOSParticle("Tiny Smoke Ball 1"); - smokefx.Pos = self.MuzzlePos; - smokefx.Vel = Vector(2*checkFlip,0):RadRotate(self.RotAngle+(math.random()*0.2)-0.1); - MovableMan:AddParticle(smokefx); - smokefx = nil; - end + if self.FiredFrame then + local smokeCount = math.random(self.minSmokeCount, self.maxSmokeCount); + for i = 1, smokeCount do + local smokefx = CreateMOSParticle("Tiny Smoke Ball 1"); + smokefx.Pos = self.MuzzlePos; + smokefx.Vel = Vector(i * self.FlipFactor, 0):RadRotate(self.RotAngle + (math.random() * self.spread) - (self.spread/2)); + MovableMan:AddParticle(smokefx); end - self.ammo = self.Magazine.RoundCount end -end +end \ No newline at end of file diff --git a/Base.rte/Devices/Shared/Scripts/MuzzleSmokeMedium.lua b/Base.rte/Devices/Shared/Scripts/MuzzleSmokeMedium.lua index 6b0bb0c12..ccf6b407c 100644 --- a/Base.rte/Devices/Shared/Scripts/MuzzleSmokeMedium.lua +++ b/Base.rte/Devices/Shared/Scripts/MuzzleSmokeMedium.lua @@ -1,31 +1,17 @@ function Create(self) - if self.Magazine then - self.ammo = self.Magazine.RoundCount - else - self.ammo = 0 - end + self.minSmokeCount = 3; + self.maxSmokeCount = 6; + self.spread = 0.6; end - function Update(self) - if self.Magazine then - if self.ammo > self.Magazine.RoundCount then - - local checkFlip = 1; - if self.HFlipped then - checkFlip = -1; - end - - local randomSmoke = math.floor(math.random()*3)+3; - - for i = 1, randomSmoke do - local smokefx = CreateMOSParticle("Tiny Smoke Ball 1"); - smokefx.Pos = self.MuzzlePos; - smokefx.Vel = Vector(((math.random()*4)+1)*checkFlip,0):RadRotate(self.RotAngle+(math.random()*0.6)-0.3); - MovableMan:AddParticle(smokefx); - smokefx = nil; - end + if self.FiredFrame then + local smokeCount = math.random(self.minSmokeCount, self.maxSmokeCount); + for i = 1, smokeCount do + local smokefx = CreateMOSParticle("Tiny Smoke Ball 1"); + smokefx.Pos = self.MuzzlePos; + smokefx.Vel = Vector(i * self.FlipFactor, 0):RadRotate(self.RotAngle + (math.random() * self.spread) - (self.spread/2)); + MovableMan:AddParticle(smokefx); end - self.ammo = self.Magazine.RoundCount end -end +end \ No newline at end of file diff --git a/Base.rte/Devices/Shared/Scripts/RecoilTilt.lua b/Base.rte/Devices/Shared/Scripts/RecoilTilt.lua index 86ac4d4d4..bbeaf5d5c 100644 --- a/Base.rte/Devices/Shared/Scripts/RecoilTilt.lua +++ b/Base.rte/Devices/Shared/Scripts/RecoilTilt.lua @@ -1,16 +1,16 @@ function Create(self) self.setAngle = 0; - self.tilt = 0.5 / math.sqrt(self.Radius); + self.tilt = 1/math.sqrt(self.Radius); end function Update(self) if self.setAngle > 0 then - self.setAngle = self.setAngle - (0.001 * (10 + math.sqrt(self.RateOfFire) * self.setAngle)); + self.setAngle = self.setAngle - (0.003 * (10 + math.sqrt(self.RateOfFire) * self.setAngle)); if self.setAngle < 0 then self.setAngle = 0; end end if self.FiredFrame then - self.setAngle = self.setAngle + self.tilt * math.random(); + self.setAngle = self.setAngle + (self.tilt/(1 + self.setAngle) * math.random()); end self.RotAngle = self.RotAngle + self.setAngle * self.FlipFactor; local jointOffset = Vector(self.JointOffset.X * self.FlipFactor, self.JointOffset.Y):RadRotate(self.RotAngle); diff --git a/Base.rte/Devices/Shared/Scripts/RevolverCylinderReload.lua b/Base.rte/Devices/Shared/Scripts/RevolverCylinderReload.lua index 7652bf7f1..eec585d75 100644 --- a/Base.rte/Devices/Shared/Scripts/RevolverCylinderReload.lua +++ b/Base.rte/Devices/Shared/Scripts/RevolverCylinderReload.lua @@ -1,25 +1,16 @@ function Create(self) - self.shellsToEject = self.Magazine.Capacity; - self.ejectedShell = false; + self.shellsToEject = self.RoundInMagCount; end - function Update(self) if self.Magazine ~= nil then - self.ejectedShell = false; - else - if self.ejectedShell == false then - self.ejectedShell = true; - if self.HFlipped == false then - self.negativeNum = 1; - else - self.negativeNum = -1; - end - for i = 1, self.shellsToEject do - local shell = CreateMOSParticle("Casing", "Base.rte"); - shell.Pos = self.Pos; - shell.Vel = Vector(math.random() * (-3) * self.negativeNum, 0):RadRotate(self.RotAngle):DegRotate((math.random() * 32) - 16); - MovableMan:AddParticle(shell); - end + self.shellsToEject = self.Magazine.Capacity - self.Magazine.RoundCount; + elseif self.shellsToEject > 0 then + for i = 1, self.shellsToEject do + local shell = CreateMOSParticle("Casing", "Base.rte"); + shell.Pos = self.Pos; + shell.Vel = Vector(math.random() * (-3) * self.FlipFactor, 0):RadRotate(self.RotAngle):DegRotate((math.random() * 32) - 16); + MovableMan:AddParticle(shell); end + self.shellsToEject = 0; end end \ No newline at end of file diff --git a/Base.rte/Devices/Shared/Scripts/ShotgunReload.lua b/Base.rte/Devices/Shared/Scripts/ShotgunReload.lua index 20c3ac454..90af08274 100644 --- a/Base.rte/Devices/Shared/Scripts/ShotgunReload.lua +++ b/Base.rte/Devices/Shared/Scripts/ShotgunReload.lua @@ -5,38 +5,29 @@ function Create(self) self.reloadDelay = 100; - if self.Magazine then - self.ammoCounter = self.Magazine.RoundCount; - else - self.ammoCounter = 0; - end + self.ammoCounter = self.RoundInMagCount; end - function Update(self) - - if self.Magazine ~= nil then - if self.loadedShell == false then - self.ammoCounter = self.Magazine.RoundCount; - else + if self.Magazine then + if self.loadedShell then self.loadedShell = false; self.Magazine.RoundCount = self.ammoCounter + 1; + else + self.ammoCounter = self.Magazine.RoundCount; end else self.reloadTimer:Reset(); self.reloadCycle = true; self.loadedShell = true; end - if self:IsActivated() then self.reloadCycle = false; end - - if self.reloadCycle == true and self.reloadTimer:IsPastSimMS(self.reloadDelay) and self:IsFull() == false then + if self.reloadCycle and self.reloadTimer:IsPastSimMS(self.reloadDelay) and self:IsFull() == false then local actor = MovableMan:GetMOFromID(self.RootID); if MovableMan:IsActor(actor) then - ToActor(actor):GetController():SetState(Controller.WEAPON_RELOAD,true); + self:Reload(); end self.reloadCycle = false; end - end \ No newline at end of file diff --git a/Base.rte/Devices/Shared/Scripts/TrajectoryGuide.lua b/Base.rte/Devices/Shared/Scripts/TrajectoryGuide.lua index 93f517226..f78adaf81 100644 --- a/Base.rte/Devices/Shared/Scripts/TrajectoryGuide.lua +++ b/Base.rte/Devices/Shared/Scripts/TrajectoryGuide.lua @@ -1,47 +1,42 @@ function Create(self) self.laserTimer = Timer(); + self.laserTimer:SetSimTimeLimitMS(25); self.guideTable = {}; self.projectileVel = 30; - if self.Magazine ~= null and self.Magazine.RoundCount ~= 0 then + if self.Magazine and self.Magazine.RoundCount ~= 0 then self.projectileVel = self.Magazine.NextRound.FireVel; + self.projectileGravity = self.Magazine.NextRound.NextParticle.GlobalAccScalar; end self.maxTrajectoryPars = 60; + self.guideColor = 120; end function Update(self) local actor = MovableMan:GetMOFromID(self.RootID); if MovableMan:IsActor(actor) and ToActor(actor):IsPlayerControlled() and ToActor(actor):GetController():IsState(Controller.AIM_SHARP) then - if self.laserTimer:IsPastSimMS(25) then + if self.laserTimer:IsPastSimTimeLimit() then self.laserTimer:Reset(); self.guideTable = {}; - self.guideTable[1] = Vector(self.MuzzlePos.X,self.MuzzlePos.Y); + self.guideTable[1] = Vector(self.MuzzlePos.X, self.MuzzlePos.Y); local actor = ToActor(actor); local guideParPos = self.MuzzlePos; - local guideParVel = Vector(self.projectileVel,0):RadRotate(actor:GetAimAngle(true)); + local guideParVel = Vector(self.projectileVel, 0):RadRotate(actor:GetAimAngle(true)); for i = 1, self.maxTrajectoryPars do - guideParVel = guideParVel + Vector((SceneMan.GlobalAcc.X/GetPPM()),(SceneMan.GlobalAcc.Y/GetPPM())); + guideParVel = guideParVel + Vector((SceneMan.GlobalAcc.X/GetPPM()), (SceneMan.GlobalAcc.Y/GetPPM())) * self.projectileGravity; guideParPos = guideParPos + guideParVel; - -- No need to wrap the seam manually, primitives can handle out-of-scene coordinates correctly - --if SceneMan.SceneWrapsX == true then - -- if guideParPos.X > SceneMan.SceneWidth then - -- guideParPos = Vector(guideParPos.X - SceneMan.SceneWidth,guideParPos.Y); - -- elseif guideParPos.X < 0 then - -- guideParPos = Vector(SceneMan.SceneWidth + guideParPos.X,guideParPos.Y); - -- end - --end if SceneMan:GetTerrMatter(guideParPos.X,guideParPos.Y) == 0 then - self.guideTable[#self.guideTable+1] = guideParPos; + self.guideTable[#self.guideTable + 1] = guideParPos; else local hitPos = Vector(self.guideTable[#self.guideTable].X,self.guideTable[#self.guideTable].Y); - SceneMan:CastStrengthRay(self.guideTable[#self.guideTable],SceneMan:ShortestDistance(self.guideTable[#self.guideTable],guideParPos,false),0,hitPos,3,0,false); - self.guideTable[#self.guideTable+1] = hitPos; + SceneMan:CastStrengthRay(self.guideTable[#self.guideTable], SceneMan:ShortestDistance(self.guideTable[#self.guideTable], guideParPos,false), 0, hitPos, 3, 0, false); + self.guideTable[#self.guideTable + 1] = hitPos; break; end end @@ -52,9 +47,13 @@ function Update(self) if #self.guideTable > 1 then for i = 1, #self.guideTable-1 do - PrimitiveMan:DrawLinePrimitive(self.guideTable[i],self.guideTable[i+1],120); + PrimitiveMan:DrawLinePrimitive(self.guideTable[i],self.guideTable[i+1], self.guideColor); end - PrimitiveMan:DrawCirclePrimitive(self.guideTable[#self.guideTable],12,120); + PrimitiveMan:DrawCirclePrimitive(self.guideTable[#self.guideTable], 12, self.guideColor); end + if self:DoneReloading() and self.Magazine and self.Magazine.RoundCount ~= 0 then + self.projectileVel = self.Magazine.NextRound.FireVel; + self.projectileGravity = self.Magazine.NextRound.NextParticle.GlobalAccScalar; + end end \ No newline at end of file diff --git a/Base.rte/Devices/Shields/RiotShield/RiotShield.ini b/Base.rte/Devices/Shields/RiotShield/RiotShield.ini index 9d239f836..41bf85964 100644 --- a/Base.rte/Devices/Shields/RiotShield/RiotShield.ini +++ b/Base.rte/Devices/Shields/RiotShield/RiotShield.ini @@ -119,7 +119,7 @@ AddDevice = HeldDevice Resolution = 4 Depth = 10 DeepCheck = 0 - JointStrength = 220 + JointStrength = 300 JointStiffness = 0.5 JointOffset = Vector X = -2 diff --git a/Base.rte/Devices/Special/Medikit/Medikit.lua b/Base.rte/Devices/Special/Medikit/Medikit.lua index df9215807..9c16011f3 100644 --- a/Base.rte/Devices/Special/Medikit/Medikit.lua +++ b/Base.rte/Devices/Special/Medikit/Medikit.lua @@ -19,27 +19,28 @@ function Update(self) end end if target and (target.Health < target.MaxHealth or target.TotalWoundCount > 0) then - local strength = self.baseStrength + math.ceil(2000 / (1 + math.abs(target.Mass) / 2)); + local strength = self.baseStrength + math.ceil(2000/(1 + math.abs(target.Mass)/2)); if target.Health < target.MaxHealth then target.Health = math.min(target.Health + strength, target.MaxHealth); end if target.TotalWoundCount > 0 then - target:RemoveAnyRandomWounds(math.ceil(strength / 7)); + target:RemoveAnyRandomWounds(math.ceil(strength/7)); end target:FlashWhite(50); AudioMan:PlaySound("Base.rte/Sounds/GUIs/SlicePicked.wav", self.Pos); - local targetSize = math.ceil(5 + target.Radius / 2); + local targetSize = math.ceil(5 + target.Radius/2); for i = 1, targetSize do local part = CreateMOPixel("Heal Glow", "Base.rte"); - local vec = Vector(targetSize * 2, 0):RadRotate(6.28 / targetSize * i); - part.Pos = target.Pos + Vector(0, -targetSize / 3):RadRotate(target.RotAngle) + vec; - part.Vel = target.Vel * 0.5 - Vector(vec.X, vec.Y) / 4; + local vec = Vector(targetSize * 2, 0):RadRotate(6.28/targetSize * i); + part.Pos = target.Pos + Vector(0, -targetSize/3):RadRotate(target.RotAngle) + vec; + part.Vel = target.Vel * 0.5 - Vector(vec.X, vec.Y)/4; MovableMan:AddParticle(part); end local cross = CreateMOSParticle("Particle Heal Effect", "Base.rte"); cross.Pos = target.AboveHUDPos + Vector(0, 5); MovableMan:AddParticle(cross); + self.ToDelete = true; end end diff --git a/Base.rte/Devices/Tools/Digger/Digger.ini b/Base.rte/Devices/Tools/Digger/Digger.ini index 7a3fe75bd..267dcdf33 100644 --- a/Base.rte/Devices/Tools/Digger/Digger.ini +++ b/Base.rte/Devices/Tools/Digger/Digger.ini @@ -38,7 +38,7 @@ AddAmmo = Round Mass = 0.05 RestThreshold = 500 LifeTime = 15 - Sharpness = 13 + Sharpness = 15 HitsMOs = 1 GetsHitByMOs = 0 RemoveOrphanTerrainRadius = 5 diff --git a/Base.rte/Devices/Tools/Disarmer/Disarmer.ini b/Base.rte/Devices/Tools/Disarmer/Disarmer.ini index 74cd15fa3..9bc159fdf 100644 --- a/Base.rte/Devices/Tools/Disarmer/Disarmer.ini +++ b/Base.rte/Devices/Tools/Disarmer/Disarmer.ini @@ -97,7 +97,7 @@ AddEffect = AEmitter AddAmmo = Magazine PresetName = Magazine Disarmer - Mass = 2 + Mass = 1 HitsMOs = 0 GetsHitByMOs = 0 SpriteFile = ContentFile @@ -168,6 +168,7 @@ AddDevice = HDFirearm SharpLength = 0 Magazine = Magazine CopyOf = Magazine Disarmer + Loudness = 0 RateOfFire = 60 ReloadTime = 2000 FullAuto = 0 @@ -176,14 +177,6 @@ AddDevice = HDFirearm SharpShakeRange = 0 NoSupportFactor = 0 ParticleSpreadRange = 0 - ShellSpreadRange = 0 - ShellAngVelRange = 0 - MuzzleOffset = Vector - X = 0 - Y = 0 - EjectionOffset = Vector - X = -3 - Y = -3 AddGib = Gib GibParticle = MOPixel CopyOf = Spark Yellow 1 @@ -221,7 +214,7 @@ AddDevice = HDFirearm MinVelocity = 5 AddGib = Gib GibParticle = MOSRotating - CopyOf = Gib Device Small D + CopyOf = Gib Device Small I Count = 1 Spread = 2.25 MaxVelocity = 10 diff --git a/Base.rte/Devices/Tools/Disarmer/Disarmer.lua b/Base.rte/Devices/Tools/Disarmer/Disarmer.lua index 878d0bff7..91b3d9f24 100644 --- a/Base.rte/Devices/Tools/Disarmer/Disarmer.lua +++ b/Base.rte/Devices/Tools/Disarmer/Disarmer.lua @@ -16,7 +16,7 @@ function Update(self) if self.Magazine then if self:IsActivated() then if self.fireOn == false then - self.Magazine.RoundCount = 4000-self.overallTimer.ElapsedSimTimeMS; + self.Magazine.RoundCount = 4000 - self.overallTimer.ElapsedSimTimeMS; if self.delayTimer:IsPastSimMS(1000) then self.delayTimer:Reset(); self.blink = false; @@ -77,29 +77,29 @@ function Update(self) self.scanTimer:Reset(); local alarm = false; local alarmType = "Safe"; - if coalitionMineTable ~= nil then - for i = 1, #coalitionMineTable do - if MovableMan:IsParticle(coalitionMineTable[i]) and SceneMan:ShortestDistance(self.Pos,coalitionMineTable[i].Pos,SceneMan.SceneWrapsX).Magnitude < self.disarmRange then + if AntiPersonnelMineTable then + for i = 1, #AntiPersonnelMineTable do + if MovableMan:IsParticle(AntiPersonnelMineTable[i]) and SceneMan:ShortestDistance(self.Pos,AntiPersonnelMineTable[i].Pos,SceneMan.SceneWrapsX).Magnitude < self.disarmRange then alarm = true; - local isFriendly = coalitionMineTable[i].Team == self.Team; + local isFriendly = AntiPersonnelMineTable[i].Team == self.Team; alarmType = isFriendly and alarmType or "Danger"; local detectPar = CreateMOPixel("Disarmer Detection Particle ".. (isFriendly and "Safe" or "Danger")); - detectPar.Pos = coalitionMineTable[i].Pos; + detectPar.Pos = AntiPersonnelMineTable[i].Pos; MovableMan:AddParticle(detectPar); - table.insert(self.targetTable, coalitionMineTable[i]); + table.insert(self.targetTable, AntiPersonnelMineTable[i]); end end end - if coalitionC4TableA ~= nil and coalitionC4TableB ~= nil then - for i = 1, #coalitionC4TableA do - if MovableMan:IsParticle(coalitionC4TableA[i]) and SceneMan:ShortestDistance(self.Pos,coalitionC4TableA[i].Pos,SceneMan.SceneWrapsX).Magnitude < self.disarmRange then + if RemoteExplosiveTableA and RemoteExplosiveTableB then + for i = 1, #RemoteExplosiveTableA do + if MovableMan:IsParticle(RemoteExplosiveTableA[i]) and SceneMan:ShortestDistance(self.Pos,RemoteExplosiveTableA[i].Pos,SceneMan.SceneWrapsX).Magnitude < self.disarmRange then alarm = true; - local isFriendly = coalitionC4TableA[i].Team == self.Team; + local isFriendly = RemoteExplosiveTableA[i].Team == self.Team; alarmType = isFriendly and alarmType or "Danger"; local detectPar = CreateMOPixel("Disarmer Detection Particle ".. (isFriendly and "Safe" or "Danger")); - detectPar.Pos = coalitionC4TableA[i].Pos; + detectPar.Pos = RemoteExplosiveTableA[i].Pos; MovableMan:AddParticle(detectPar); - table.insert(self.targetTable, coalitionC4TableA[i]); + table.insert(self.targetTable, RemoteExplosiveTableA[i]); end end end diff --git a/Base.rte/Devices/Tools/GrappleGun/Grapple.lua b/Base.rte/Devices/Tools/GrappleGun/Grapple.lua index 5cff9b888..5fbf5fb10 100644 --- a/Base.rte/Devices/Tools/GrappleGun/Grapple.lua +++ b/Base.rte/Devices/Tools/GrappleGun/Grapple.lua @@ -13,13 +13,11 @@ function Create(self) self.fireVel = 40; -- This immediately overwrites the .ini FireVel self.maxLineLength = 500; - self.setLineLength = 0; - self.lineLength = 0; - self.lineVec = Vector(); self.limitReached = false; self.stretchMode = false; -- Alternative elastic pull mode a là Liero + self.stretchPullRatio = 0.1; self.pieSelection = 0; -- 0 is nothing, 1 is full retract, 2 is partial retract, 3 is partial extend, 4 is full extend self.climbDelay = 10; -- MS time delay between "climbs" to keep the speed consistant @@ -30,7 +28,7 @@ function Create(self) self.autoClimbIntervalA = 4.0; -- How many pixels the rope retracts / extends at a time when auto-climbing (fast) self.autoClimbIntervalB = 2.0; -- How many pixels the rope retracts / extends at a time when auto-climbing (slow) - for i = 1, MovableMan:GetMOIDCount()-1 do + for i = 1, MovableMan:GetMOIDCount() - 1 do local gun = MovableMan:GetMOFromID(i); if gun and gun.ClassName == "HDFirearm" and gun.PresetName == "Grapple Gun" and SceneMan:ShortestDistance(self.Pos, ToHDFirearm(gun).MuzzlePos, self.mapWrapsX).Magnitude < 5 then self.parentGun = ToHDFirearm(gun); @@ -42,15 +40,12 @@ function Create(self) elseif IsACrab(self.parent) then self.parent = ToACrab(self.parent); end - self.Vel = (self.parent.Vel / 2) + Vector(self.fireVel, 0):RadRotate(self.parent:GetAimAngle(true)); - self.parentGun.Sharpness = 0; - for i = 1, MovableMan:GetMOIDCount() - 1 do - local part = MovableMan:GetMOFromID(i); - if part and part.RootID == self.parent.ID and part.ClassName ~= "HDFirearm" and part.ClassName ~= "TDExplosive" and part.ClassName ~= "HeldDevice" then - local radcheck = SceneMan:ShortestDistance(self.parent.Pos, part.Pos, self.mapWrapsX).Magnitude + part.Radius; - if self.parentRadius == nil or (self.parentRadius ~= nil and radcheck > self.parentRadius) then - self.parentRadius = radcheck; - end + self.Vel = (self.parent.Vel/2) + Vector(self.fireVel, 0):RadRotate(self.parent:GetAimAngle(true)); + self.parentGun:RemoveNumberValue("GrappleMode"); + for part in self.parent.Attachables do + local radcheck = SceneMan:ShortestDistance(self.parent.Pos, part.Pos, self.mapWrapsX).Magnitude + part.Radius; + if self.parentRadius == nil or (self.parentRadius ~= nil and radcheck > self.parentRadius) then + self.parentRadius = radcheck; end end self.actionMode = 1; @@ -74,6 +69,7 @@ function Update(self) self.lineLength = self.lineVec.Magnitude; if self.parentGun and self.parentGun.ID ~= rte.NoMOID then + self.parent = ToMOSRotating(MovableMan:GetMOFromID(self.parentGun.RootID)); if self.parentGun.Magazine then @@ -82,9 +78,12 @@ function Update(self) startPos = self.parentGun.Pos; local flipAng = self.parent.HFlipped and 3.14 or 0; self.parentGun.RotAngle = self.lineVec.AbsRadAngle + flipAng; - if self.parentGun.Sharpness ~= 0 then - self.pieSelection = self.parentGun.Sharpness; - self.parentGun.Sharpness = 0; + + local mode = self.parentGun:GetNumberValue("GrappleMode"); + + if mode ~= 0 then + self.pieSelection = mode; + self.parentGun:RemoveNumberValue("GrappleMode"); end if self.parentGun.FiredFrame then if self.actionMode == 1 then @@ -103,7 +102,15 @@ function Update(self) controller = self.parent:GetController(); -- Point the gun towards the hook if our user is holding it if (self.parentGun and self.parentGun.ID ~= rte.NoMOID) and (self.parentGun:GetRootParent().ID == self.parent.ID) then - local offset = Vector(ToMOSprite(self.parentGun:GetParent()):GetSpriteWidth(), 0):RadRotate(self.parent.FlipFactor * (self.lineVec.AbsRadAngle - self.parent:GetAimAngle(true))) + if self.parent:IsPlayerControlled() then + if controller:IsState(Controller.WEAPON_RELOAD) then + self.ToDelete = true; + end + if self.parentGun.Magazine then + self.parentGun.Magazine.RoundCount = 0; + end + end + local offset = Vector(self.lineLength, 0):RadRotate(self.parent.FlipFactor * (self.lineVec.AbsRadAngle - self.parent:GetAimAngle(true))); self.parentGun.StanceOffset = offset; if self.parent.EquippedItem and self.parent.EquippedItem.ID == self.parentGun.ID and (self.parent.Vel.Magnitude < 5 and controller:IsState(Controller.AIM_SHARP)) then self.parentGun.RotAngle = self.parent:GetAimAngle(false) * self.parentGun.FlipFactor; @@ -141,8 +148,8 @@ function Update(self) if self.actionMode == 1 then -- Hook is in flight self.rayVec = Vector(); -- Stretch mode: gradually retract the hook for a return hit - if self.stretchMode == true then - self.Vel = self.Vel - self.lineVec / self.maxLineLength; + if self.stretchMode then + self.Vel = self.Vel - Vector(self.lineVec.X, self.lineVec.Y):SetMagnitude(math.sqrt(self.lineLength) * self.stretchPullRatio/2); end local length = math.sqrt(self.Diameter + self.Vel.Magnitude); -- Detect terrain and stick if found @@ -151,7 +158,7 @@ function Update(self) self.actionMode = 2; else -- Detect MOs and stick if found local moRay = SceneMan:CastMORay(self.Pos, ray, self.parent.ID, -2, 0, false, 0); - if moRay ~= 255 then + if moRay ~= rte.NoMOID then self.target = MovableMan:GetMOFromID(moRay); -- Treat pinned MOs as terrain if self.target.PinStrength > 0 then @@ -225,7 +232,7 @@ function Update(self) end end -- Control the rope if the user is holding the gun - if self.parentGun and self.parentGun.ID ~= 255 and controller then + if self.parentGun and self.parentGun.ID ~= rte.NoMOID and controller then -- These forces are to help the user nudge across obstructing terrain local nudge = math.sqrt(self.lineVec.Magnitude + self.parent.Radius) /(10 + self.parent.Vel.Magnitude); -- Retract automatically by holding fire or control the rope through the pie menu @@ -236,7 +243,7 @@ function Update(self) if self.setLineLength > self.autoClimbIntervalA and self.terrcheck == false then self.setLineLength = self.setLineLength - (self.autoClimbIntervalA /parentForces); else - self.parentGun.Sharpness = 0; + self.parentGun:RemoveNumberValue("GrappleMode"); self.pieSelection = 0; if self.terrcheck ~= false then -- Try to nudge past terrain @@ -248,7 +255,7 @@ function Update(self) if self.setLineLength < (self.maxLineLength - self.autoClimbIntervalB) then self.setLineLength = self.setLineLength + self.autoClimbIntervalB; else - self.parentGun.Sharpness = 0; + self.parentGun:RemoveNumberValue("GrappleMode"); self.pieSelection = 0; end end @@ -353,21 +360,29 @@ function Update(self) end elseif self.actionMode == 3 then -- Stuck MO - if self.target.ID ~= 255 then + if self.target.ID ~= rte.NoMOID then self.Pos = self.target.Pos + Vector(self.stickPosition.X, self.stickPosition.Y):RadRotate(self.target.RotAngle - self.stickRotation); self.RotAngle = self.stickDirection + (self.target.RotAngle - self.stickRotation); - if self.lineLength > self.setLineLength then - - local jointStiffness; - local target = self.target; - if target.ID ~= target.RootID then - local mo = MovableMan:GetMOFromID(target.RootID); - if mo.ID ~= 255 and IsAttachable(target) then - -- It's best to apply all the forces to the parent instead of utilizing JointStiffness - target = mo; - end + + local jointStiffness; + local target = self.target; + if target.ID ~= target.RootID then + local mo = MovableMan:GetMOFromID(target.RootID); + if mo.ID ~= rte.NoMOID and IsAttachable(target) then + -- It's best to apply all the forces to the parent instead of utilizing JointStiffness + target = mo; end + end + if self.stretchMode then + + local pullVec = self.lineVec:SetMagnitude(self.stretchPullRatio * math.sqrt(self.lineLength)/parentForces); + self.parent.Vel = self.parent.Vel + pullVec; + + local targetForces = 1 + (target.Vel.Magnitude * 10 + target.Mass) / (1 + self.lineLength); + target.Vel = target.Vel - (pullVec) * parentForces/targetForces; + + elseif self.lineLength > self.setLineLength then -- Take wrapping to account, treat all distances relative to hook local parentPos = target.Pos + SceneMan:ShortestDistance(target.Pos, self.parent.Pos, self.mapWrapsX); -- Add forces to both user and the target MO @@ -403,8 +418,8 @@ function Update(self) if self.canTap == true then controller:SetState(Controller.BODY_CROUCH, false); self.climb = 0; - if self.parentGun ~= nil and self.parentGun.ID ~= 255 then - self.parentGun.Sharpness = 0; + if self.parentGun ~= nil and self.parentGun.ID ~= rte.NoMOID then + self.parentGun:RemoveNumberValue("GrappleMode"); end self.tapTimer:Reset(); self.didTap = true; @@ -424,7 +439,7 @@ function Update(self) -- Fine tuning: take the seam into account when drawing the rope local drawPos = self.parent.Pos + self.lineVec:SetMagnitude(self.lineLength); if self.ToDelete == true then - drawPos = self.parent.Pos + (self.lineVec / 2); + drawPos = self.parent.Pos + (self.lineVec/2); if self.parentGun and self.parentGun.Magazine then -- Show the magazine as if the hook is being retracted self.parentGun.Magazine.Pos = drawPos; @@ -444,8 +459,8 @@ function Destroy(self) if MovableMan:IsParticle(self.crankSound) then self.crankSound.ToDelete = true; end - if self.parentGun and self.parentGun.ID ~= 255 then + if self.parentGun and self.parentGun.ID ~= rte.NoMOID then self.parentGun.HUDVisible = true; - self.parentGun.Sharpness = 0; + self.parentGun:RemoveNumberValue("GrappleMode"); end end \ No newline at end of file diff --git a/Base.rte/Devices/Tools/GrappleGun/GrappleGun.ini b/Base.rte/Devices/Tools/GrappleGun/GrappleGun.ini index ccfaf9ccc..18d620b85 100644 --- a/Base.rte/Devices/Tools/GrappleGun/GrappleGun.ini +++ b/Base.rte/Devices/Tools/GrappleGun/GrappleGun.ini @@ -117,6 +117,7 @@ AddAmmo = Magazine Mass = 0 HitsMOs = 0 GetsHitByMOs = 0 + CollidesWithTerrainWhenAttached = 1 SpriteFile = ContentFile FilePath = Base.rte/Devices/Tools/GrappleGun/Claw.bmp FrameCount = 2 @@ -149,7 +150,7 @@ AddAmmo = Magazine X = 0 Y = 0 DrawAfterParent = 0 - RoundCount = -1 // Means infinite ammo + RoundCount = -1 RTTRatio = 0 Discardable = 0 RegularRound = Round @@ -214,17 +215,8 @@ AddDevice = HDFirearm FireSound = SoundContainer AddSound = ContentFile FilePath = Base.rte/Devices/Tools/GrappleGun/Sounds/ClawFire.wav - EmptySound = SoundContainer - AddSound = ContentFile - FilePath = Base.rte/Sounds/Devices/EmptyClick1.wav - ReloadStartSound = SoundContainer - AddSound = ContentFile - FilePath = Base.rte/Sounds/Devices/ReloadStart.wav - ReloadEndSound = SoundContainer - AddSound = ContentFile - FilePath = Base.rte/Sounds/Devices/ReloadEnd.wav RateOfFire = 500 - ReloadTime = 2000 + ReloadTime = 0 FullAuto = 0 FireIgnoresThis = 1 ShakeRange = 1 diff --git a/Base.rte/Devices/Tools/GrappleGun/GrappleGun.lua b/Base.rte/Devices/Tools/GrappleGun/GrappleGun.lua index fa9a42e8f..3e45cfac3 100644 --- a/Base.rte/Devices/Tools/GrappleGun/GrappleGun.lua +++ b/Base.rte/Devices/Tools/GrappleGun/GrappleGun.lua @@ -66,7 +66,7 @@ function Update(self) if parent.Vel.Magnitude > 12 then frame = 1; end - local startPos = (parent.Pos + parent.EyePos + self.Pos) / 3; + local startPos = (parent.Pos + parent.EyePos + self.Pos)/3; local guidePos = startPos + Vector(parent.AimDistance + (parent.Vel.Magnitude), 0):RadRotate(parent:GetAimAngle(true)); PrimitiveMan:DrawBitmapPrimitive(ActivityMan:GetActivity():ScreenOfPlayer(controller.Player), guidePos, self.arrow, parent:GetAimAngle(true), frame); end @@ -76,8 +76,9 @@ function Update(self) self.StanceOffset = Vector(ToMOSprite(self:GetParent()):GetSpriteWidth(), 1); self.SharpStanceOffset = Vector(ToMOSprite(self:GetParent()):GetSpriteWidth(), 1); if self.Magazine then + self.Magazine.RoundCount = 1; self.Magazine.Scale = 1; - self.Magazine.Frame = 1; + self.Magazine.Frame = 0; end end end \ No newline at end of file diff --git a/Base.rte/Devices/Tools/GrappleGun/Pie.lua b/Base.rte/Devices/Tools/GrappleGun/Pie.lua index 05cb42de7..6b6ea6e1e 100644 --- a/Base.rte/Devices/Tools/GrappleGun/Pie.lua +++ b/Base.rte/Devices/Tools/GrappleGun/Pie.lua @@ -1,13 +1,13 @@ function GrapplePieRetract(actor) local gun = ToAHuman(actor).EquippedItem; - if gun ~= nil then - gun.Sharpness = 1; + if gun then + ToMOSRotating(gun):SetNumberValue("GrappleMode", 1); end end function GrapplePieExtend(actor) local gun = ToAHuman(actor).EquippedItem; - if gun ~= nil then - gun.Sharpness = 2; + if gun then + ToMOSRotating(gun):SetNumberValue("GrappleMode", 2); end end \ No newline at end of file diff --git a/Base.rte/Devices/Tools/Repeller/Repeller.ini b/Base.rte/Devices/Tools/Repeller/Repeller.ini index 7056bf985..57662eea4 100644 --- a/Base.rte/Devices/Tools/Repeller/Repeller.ini +++ b/Base.rte/Devices/Tools/Repeller/Repeller.ini @@ -96,6 +96,7 @@ AddDevice = HDFirearm ExitWound = AEmitter CopyOf = Dent Metal GoldValue = 20 + Buyable = 0 AtomGroup = AtomGroup AutoGenerate = 1 Material = Material diff --git a/Base.rte/Devices/Tools/Scanner/ScannerHeavy.lua b/Base.rte/Devices/Tools/Scanner/ScannerHeavy.lua index 9a0f20bd2..deb0b4945 100644 --- a/Base.rte/Devices/Tools/Scanner/ScannerHeavy.lua +++ b/Base.rte/Devices/Tools/Scanner/ScannerHeavy.lua @@ -19,17 +19,12 @@ function Update(self) local actor = MovableMan:GetMOFromID(self.RootID); if MovableMan:IsActor(actor) then self.parent = ToActor(actor); - if self.HFlipped == false then - self.negativeNum = 1; - else - self.negativeNum = -1; - end for x = 1, self.numberOfScans do local angleVariance = (-self.scanSpreadAngle*0.5) + (math.random()*self.scanSpreadAngle); local terrHitCount = 0; local dots = math.floor(self.maxScanRange/self.scanSpacing) for i = 1, dots do - local checkPos = self.MuzzlePos + Vector((self.scanSpacing*i)*self.negativeNum,0):RadRotate(self.RotAngle):DegRotate(angleVariance); + local checkPos = self.MuzzlePos + Vector((self.scanSpacing*i)*self.FlipFactor,0):RadRotate(self.RotAngle):DegRotate(angleVariance); if SceneMan.SceneWrapsX == true then if checkPos.X > SceneMan.SceneWidth then checkPos = Vector(checkPos.X - SceneMan.SceneWidth,checkPos.Y); @@ -38,13 +33,13 @@ function Update(self) end end local terrCheck = SceneMan:GetTerrMatter(checkPos.X,checkPos.Y); - if terrCheck ~= 0 then + if terrCheck ~= rte.airID then terrHitCount = terrHitCount + 1; end end local scanLength = math.floor((self.maxScanRange-(self.scanDisruption*(terrHitCount/dots)))/self.scanSpacing); for i = 1, scanLength do - local checkPos = self.MuzzlePos + Vector((self.scanSpacing*i)*self.negativeNum,0):RadRotate(self.RotAngle):DegRotate(angleVariance); + local checkPos = self.MuzzlePos + Vector((self.scanSpacing*i)*self.FlipFactor,0):RadRotate(self.RotAngle):DegRotate(angleVariance); if SceneMan.SceneWrapsX == true then if checkPos.X > SceneMan.SceneWidth then checkPos = Vector(checkPos.X - SceneMan.SceneWidth,checkPos.Y); @@ -58,5 +53,4 @@ function Update(self) end end end - end \ No newline at end of file diff --git a/Base.rte/Devices/Tools/Scanner/ScannerLight.lua b/Base.rte/Devices/Tools/Scanner/ScannerLight.lua index c9d5b3aeb..fa01518b4 100644 --- a/Base.rte/Devices/Tools/Scanner/ScannerLight.lua +++ b/Base.rte/Devices/Tools/Scanner/ScannerLight.lua @@ -19,17 +19,12 @@ function Update(self) local actor = MovableMan:GetMOFromID(self.RootID); if MovableMan:IsActor(actor) then self.parent = ToActor(actor); - if self.HFlipped == false then - self.negativeNum = 1; - else - self.negativeNum = -1; - end for x = 1, self.numberOfScans do local angleVariance = (-self.scanSpreadAngle*0.5) + (math.random()*self.scanSpreadAngle); local terrHitCount = 0; local dots = math.floor(self.maxScanRange/self.scanSpacing) for i = 1, dots do - local checkPos = self.MuzzlePos + Vector((self.scanSpacing*i)*self.negativeNum,0):RadRotate(self.RotAngle):DegRotate(angleVariance); + local checkPos = self.MuzzlePos + Vector((self.scanSpacing*i)*self.FlipFactor,0):RadRotate(self.RotAngle):DegRotate(angleVariance); if SceneMan.SceneWrapsX == true then if checkPos.X > SceneMan.SceneWidth then checkPos = Vector(checkPos.X - SceneMan.SceneWidth,checkPos.Y); @@ -38,13 +33,13 @@ function Update(self) end end local terrCheck = SceneMan:GetTerrMatter(checkPos.X,checkPos.Y); - if terrCheck ~= 0 then + if terrCheck ~= rte.airID then terrHitCount = terrHitCount + 1; end end local scanLength = math.floor((self.maxScanRange-(self.scanDisruption*(terrHitCount/dots)))/self.scanSpacing); for i = 1, scanLength do - local checkPos = self.MuzzlePos + Vector((self.scanSpacing*i)*self.negativeNum,0):RadRotate(self.RotAngle):DegRotate(angleVariance); + local checkPos = self.MuzzlePos + Vector((self.scanSpacing*i)*self.FlipFactor,0):RadRotate(self.RotAngle):DegRotate(angleVariance); if SceneMan.SceneWrapsX == true then if checkPos.X > SceneMan.SceneWidth then checkPos = Vector(checkPos.X - SceneMan.SceneWidth,checkPos.Y); diff --git a/Base.rte/Devices/Tools/Scanner/ScannerMedium.lua b/Base.rte/Devices/Tools/Scanner/ScannerMedium.lua index 6904d0c6f..c64629607 100644 --- a/Base.rte/Devices/Tools/Scanner/ScannerMedium.lua +++ b/Base.rte/Devices/Tools/Scanner/ScannerMedium.lua @@ -19,17 +19,12 @@ function Update(self) local actor = MovableMan:GetMOFromID(self.RootID); if MovableMan:IsActor(actor) then self.parent = ToActor(actor); - if self.HFlipped == false then - self.negativeNum = 1; - else - self.negativeNum = -1; - end for x = 1, self.numberOfScans do local angleVariance = (-self.scanSpreadAngle*0.5) + (math.random()*self.scanSpreadAngle); local terrHitCount = 0; local dots = math.floor(self.maxScanRange/self.scanSpacing) for i = 1, dots do - local checkPos = self.MuzzlePos + Vector((self.scanSpacing*i)*self.negativeNum,0):RadRotate(self.RotAngle):DegRotate(angleVariance); + local checkPos = self.MuzzlePos + Vector((self.scanSpacing*i)*self.FlipFactor,0):RadRotate(self.RotAngle):DegRotate(angleVariance); if SceneMan.SceneWrapsX == true then if checkPos.X > SceneMan.SceneWidth then checkPos = Vector(checkPos.X - SceneMan.SceneWidth,checkPos.Y); @@ -38,13 +33,13 @@ function Update(self) end end local terrCheck = SceneMan:GetTerrMatter(checkPos.X,checkPos.Y); - if terrCheck ~= 0 then + if terrCheck ~= rte.airID then terrHitCount = terrHitCount + 1; end end local scanLength = math.floor((self.maxScanRange-(self.scanDisruption*(terrHitCount/dots)))/self.scanSpacing); for i = 1, scanLength do - local checkPos = self.MuzzlePos + Vector((self.scanSpacing*i)*self.negativeNum,0):RadRotate(self.RotAngle):DegRotate(angleVariance); + local checkPos = self.MuzzlePos + Vector((self.scanSpacing*i)*self.FlipFactor,0):RadRotate(self.RotAngle):DegRotate(angleVariance); if SceneMan.SceneWrapsX == true then if checkPos.X > SceneMan.SceneWidth then checkPos = Vector(checkPos.X - SceneMan.SceneWidth,checkPos.Y); diff --git a/Base.rte/Devices/Weapons/Pistol/Pistol.ini b/Base.rte/Devices/Weapons/Pistol/Pistol.ini index f2344efa7..995d26678 100644 --- a/Base.rte/Devices/Weapons/Pistol/Pistol.ini +++ b/Base.rte/Devices/Weapons/Pistol/Pistol.ini @@ -117,10 +117,10 @@ AddDevice = HDFirearm ReloadTime = 1500 FullAuto = 0 FireIgnoresThis = 1 - ShakeRange = 13 + ShakeRange = 10 SharpShakeRange = 3 NoSupportFactor = 1.5 - ParticleSpreadRange = 3 + ParticleSpreadRange = 1 ShellSpreadRange = 8 ShellAngVelRange = 2 MuzzleOffset = Vector diff --git a/Base.rte/Devices/Weapons/Pistol/Pistol000.bmp b/Base.rte/Devices/Weapons/Pistol/Pistol000.bmp index dbf4a7ccd31bebcb39a77094b00f86d549416ed0..2bd9512b9adf49b9f9d8bff4189960ca5f9b90d4 100644 GIT binary patch delta 168 zcmdnNxs6lD$#)wI0~nYAX$>HY7l=84m=R1eFf;(!5U^24f~BY!%sz4AJ5;a)On+xO z3FYTN`9FR_1d>72_a8sLfBz1|3=9Ea{;!`ufByRQD~^F72CVG+&+XfP009GoGnkJc GoEZR4JSUU@ delta 170 zcmdnSxr0;3$#(|}0~nYAX$>HY7l=84m=R1eFf;+#Lfjy{QAdKM1jqw|@87>e7*O*2 q&y#5UA3u=HY7l=84m=R1eFf>eF$RfPajE|+L7_9EZiSJ;VfuRIU ze`h)g<>x^8KYl_4l0nq>A3wf-2NFPL0Fd|V=g*(Ne*OCW9cV}lNc!i=lRtler5T(- J>XCpm0{|m7Dv$sG delta 170 zcmdnSxr0;3$#(|}0~nYAX$>HY7l=84m=R1eFf;+#Lfjy{QAdKM1jqw|@87>e7*O*2 r&y#5UA3u=w diff --git a/Base.rte/Devices/Weapons/SMG/SMG.ini b/Base.rte/Devices/Weapons/SMG/SMG.ini index 871416fe1..7ffdc71e4 100644 --- a/Base.rte/Devices/Weapons/SMG/SMG.ini +++ b/Base.rte/Devices/Weapons/SMG/SMG.ini @@ -68,7 +68,7 @@ AddDevice = HDFirearm AddToGroup = Weapons AddToGroup = Weapons - Primary AddToGroup = Weapons - Light - Mass = 10 + Mass = 8 HitsMOs = 0 GetsHitByMOs = 1 SpriteFile = ContentFile @@ -148,7 +148,7 @@ AddDevice = HDFirearm ShakeRange = 8 SharpShakeRange = 3 NoSupportFactor = 3 - ParticleSpreadRange = 3 + ParticleSpreadRange = 1 ShellSpreadRange = 8 ShellAngVelRange = 2 MuzzleOffset = Vector diff --git a/Base.rte/Devices/Weapons/SMG/SMG000.bmp b/Base.rte/Devices/Weapons/SMG/SMG000.bmp index e85259c3d04fd46cc3776d2f4efd86fe89f513d2..bee2d11386855c52f5756dc274861fc5920420cb 100644 GIT binary patch delta 191 zcmZXNu?fRK3`KQuAh^j6p2915imc*^3<34mU!i$)(!t>`+bK+5Bk{h_?_(do%X6Iw zFqarVUa^$-%?&VcYDB`))vC1*s4 PqwSQqz6xTZ5A@!GHb`+9o3 z&H&6z^}xMTYx$?$I+!#MfaTbP6(`*zN`v&VT}EWi!jj9}UOz#yX2vwRG#>(6E_h+B RvShckEm+Jw;LH2?Lm#UUL>&MC diff --git a/Base.rte/Devices/Weapons/SMG/SMG001.bmp b/Base.rte/Devices/Weapons/SMG/SMG001.bmp index 4f2a6a612ada0e6705a979e67c62e372afc07951..ae9cc407e1fcc5b269154110ca087f129bcf4e9b 100644 GIT binary patch delta 191 zcmZXN%MHUo2t-*slI2T!NEL1&RiqWS6p8!ZIZzJ^D_I%*IYfRJ&>O^T^EQ9qkM%`> zS#n%VxybX+jWBTLM9Sx3IyO}^cTV67T)0Ox&^?++I#sO^E@Hj+_Hi2aAG&C*h!AJn NA#r^cJg2t_HhuyY$%a0Wdf{zJK2W6GG5A zKyh<(Oo=?O`1c>^GBH4{-~a#rz6A(?tdr&^&B2Bx0y&Zp@c-w}?~dk<=HGvOXJDuV ziaQ1eI|Ty)|7%IesrA(Nei34$noP-NhtUb|BnJ^A{lJ%|s?LUQg z7;pD0IpgA;JL=Z!v^tGjn;#nIIyJiXH4c8I9)NV9-hxB658Y(H>Dh|N2z^0T(`%>X$g3Xp;uor!&zPWpYc8 diff --git a/Base.rte/Devices/Weapons/Shotgun/Shotgun001.bmp b/Base.rte/Devices/Weapons/Shotgun/Shotgun001.bmp index cf6ea0e7fc4c9284f5682c695e63abe7b9207483..36a002d594a32524d54d690626f02b2c6f0a8889 100644 GIT binary patch delta 252 zcmZXMF$%&!5JhJpfe>pE8%b%A+UWwD-fE9vZ6#I~9>S9dsU>ahVQK$2TC6{7f}jun z%QV$!$Rb7;-Rq?fHhCjGp~O9W;D`IT#9tTtln?N BM{588 delta 222 zcmX|(Jr2S!3`Sj)AV{~O4lJl_3>71mGGTTm4#XjH5-xyPd!jFNs_RgmrONRge From 05b5b7c7a80a2c16c86f647e331c286216188a06 Mon Sep 17 00:00:00 2001 From: 4zk Date: Sat, 25 Jul 2020 20:30:15 +0300 Subject: [PATCH 12/28] Constructor rework: the cursor is now a Vector rather than a loose Actor, no longer relies on filthy Sharpness hack for different modes --- .../Devices/Tools/Constructor/Constructor.ini | 41 +--- .../Devices/Tools/Constructor/Constructor.lua | 178 ++++++++++-------- .../Tools/Constructor/ConstructorPie.lua | 18 +- 3 files changed, 113 insertions(+), 124 deletions(-) diff --git a/Base.rte/Devices/Tools/Constructor/Constructor.ini b/Base.rte/Devices/Tools/Constructor/Constructor.ini index 431181b69..94b1f795a 100644 --- a/Base.rte/Devices/Tools/Constructor/Constructor.ini +++ b/Base.rte/Devices/Tools/Constructor/Constructor.ini @@ -17,13 +17,13 @@ AddEffect = MOSRotating AtomGroup = AtomGroup AutoGenerate = 1 Material = Material - CopyOf = Metal + CopyOf = Concrete Resolution = 1 Depth = 1 DeepGroup = AtomGroup AutoGenerate = 1 Material = Material - CopyOf = Metal + CopyOf = Concrete Resolution = 1 Depth = 1 DeepCheck = 0 @@ -477,39 +477,6 @@ AddActor = AtomGroup Y = 0 -AddActor = Actor - PresetName = Constructor Cursor - Mass = 1 - RestThreshold = -500 - HitsMOs = 0 - GetsHitByMOs = 0 - LifeTime = 100 - Sharpness = -1 - ScriptPath = Base.rte/Devices/Tools/Constructor/Cursor.lua - SpriteFile = ContentFile - FilePath = Base.rte/Null.bmp - FrameCount = 1 - SpriteOffset = Vector - X = -1 - Y = -1 - Buyable = 0 - AtomGroup = AtomGroup - CopyOf = Constructor Null AtomGroup - DeepCheck = 0 - Status = 0 - Health = 100 - Team = 0 - Perceptiveness = 0.0 - AimAngle = 0 - AimDistance = 0 - CharHeight = 99999 - HolsterOffset = Vector - X = -0 - Y = -0 - GibImpulseLimit = 10000 - GibWoundLimit = 10000 - - AddAmmo = Magazine PresetName = Magazine Constructor Mass = 1 @@ -567,7 +534,9 @@ AddDevice = HDFirearm Mass = 8 HitsMOs = 0 GetsHitByMOs = 1 - Sharpness = 0 + ProvidesPieMenuContext = 1 + AddCustomValue = StringValue + ConstructorMode = Dig ScriptPath = Base.rte/Devices/Tools/Constructor/Constructor.lua SpriteFile = ContentFile FilePath = Base.rte/Devices/Tools/Constructor/ConstructorA.bmp diff --git a/Base.rte/Devices/Tools/Constructor/Constructor.lua b/Base.rte/Devices/Tools/Constructor/Constructor.lua index 93ad9d9b0..a98610f81 100644 --- a/Base.rte/Devices/Tools/Constructor/Constructor.lua +++ b/Base.rte/Devices/Tools/Constructor/Constructor.lua @@ -2,7 +2,7 @@ function OnPieMenu(item) if item and IsHDFirearm(item) and item.PresetName == "Constructor" then item = ToHDFirearm(item); - if item:GetNumberValue("Constructor Mode") == 1 then + if item:GetStringValue("ConstructorMode") == "Spray" then ToGameActivity(ActivityMan:GetActivity()):RemovePieMenuSlice("Spray Mode", "ConstructorSprayMode"); else ToGameActivity(ActivityMan:GetActivity()):RemovePieMenuSlice("Dig Mode", "ConstructorDigMode"); @@ -28,25 +28,25 @@ function ConstructorFloodFill(x, y, startnum, maxnum, array, realposition, reals if startnum < maxnum then if array[x+1][y] == -1 or array[x+1][y] > startnum then local checkPos = ConstructorWrapPos(realposition + Vector(realspacing,0)); - if SceneMan:GetTerrMatter(checkPos.X+(realspacing*0.5),checkPos.Y+(realspacing*0.5)) == 0 then + if SceneMan:GetTerrMatter(checkPos.X+(realspacing*0.5),checkPos.Y+(realspacing*0.5)) == rte.airID then ConstructorFloodFill(x+1, y, startnum+1, maxnum, array, checkPos, realspacing); end end if array[x-1][y] == -1 or array[x-1][y] > startnum then local checkPos = ConstructorWrapPos(realposition + Vector(-realspacing,0)); - if SceneMan:GetTerrMatter(checkPos.X+(realspacing*0.5),checkPos.Y+(realspacing*0.5)) == 0 then + if SceneMan:GetTerrMatter(checkPos.X+(realspacing*0.5),checkPos.Y+(realspacing*0.5)) == rte.airID then ConstructorFloodFill(x-1, y, startnum+1, maxnum, array, checkPos, realspacing); end end if array[x][y+1] == -1 or array[x][y+1] > startnum then local checkPos = ConstructorWrapPos(realposition + Vector(0,realspacing)); - if SceneMan:GetTerrMatter(checkPos.X+(realspacing*0.5),checkPos.Y+(realspacing*0.5)) == 0 then + if SceneMan:GetTerrMatter(checkPos.X+(realspacing*0.5),checkPos.Y+(realspacing*0.5)) == rte.airID then ConstructorFloodFill(x, y+1, startnum+1, maxnum, array, checkPos, realspacing); end end if array[x][y-1] == -1 or array[x][y-1] > startnum then local checkPos = ConstructorWrapPos(realposition + Vector(0,-realspacing)); - if SceneMan:GetTerrMatter(checkPos.X+(realspacing*0.5),checkPos.Y+(realspacing*0.5)) == 0 then + if SceneMan:GetTerrMatter(checkPos.X+(realspacing*0.5),checkPos.Y+(realspacing*0.5)) == rte.airID then ConstructorFloodFill(x, y-1, startnum+1, maxnum, array, checkPos, realspacing); end end @@ -69,7 +69,7 @@ function ConstructorTerrainRay(start, trace, skip) local invector = start + Vector(skip*i,0):RadRotate(angle); local checkPos = ConstructorWrapPos(invector); local terrCheck = SceneMan:GetTerrMatter(checkPos.X,checkPos.Y); - if terrCheck ~= 0 then + if terrCheck ~= rte.airID then roughLandPos = checkPos; break; end @@ -81,7 +81,7 @@ function ConstructorTerrainRay(start, trace, skip) local checkPos = ConstructorWrapPos(invector); local terrCheck = SceneMan:GetTerrMatter(checkPos.X,checkPos.Y); roughLandPos = checkPos; - if terrCheck ~= 0 then + if terrCheck ~= rte.airID then break; end end @@ -93,7 +93,7 @@ end function Create(self) self.fireTimer = Timer(); - self.fired = false; + self.displayTimer = Timer(); self.startresource = 3; -- how many blocks of concrete to start with @@ -107,7 +107,7 @@ function Create(self) self.clearer = CreateMOSRotating("Constructor Terrain Clearer"); - self.digstrength = 100; -- the StructualIntegrity limit the device can harvest + self.digstrength = 210; -- the StructualIntegrity limit the device can harvest self.diglength = 50; self.digspersecond = 100; @@ -123,6 +123,7 @@ function Create(self) self.toautobuild = false; self.aicontrolled = false; self.displaygrid = true; + self.cursormovespeed = 2; -- autobuild for standard units self.autobuildlist = { @@ -196,7 +197,7 @@ end function Update(self) - if self.RootID ~= 255 then + if self.RootID ~= rte.NoMOID then local actor = MovableMan:GetMOFromID(self.RootID); if MovableMan:IsActor(actor) then @@ -204,20 +205,21 @@ function Update(self) local ctrl = actor:GetController(); local screen = ActivityMan:GetActivity():ScreenOfPlayer(ctrl.Player); - if self.Magazine ~= nil then + if self.Magazine then self.Magazine.RoundCount = self.resource; end - -- display dig/spray mode when opening pie menu - local mode = {"Dig", "Spray"}; if ctrl:IsState(Controller.PIE_MENU_ACTIVE) then - PrimitiveMan:DrawTextPrimitive(screen, actor.AboveHUDPos + Vector(0, 26), "Mode: " .. mode[self:GetNumberValue("Constructor Mode") + 1], true, 1); + PrimitiveMan:DrawTextPrimitive(screen, actor.AboveHUDPos + Vector(0, 26), "Mode: ".. self:GetStringValue("ConstructorMode"), true, 1); end -- constructor actions if the user is in gold dig mode if actor.AIMode == Actor.AIMODE_GOLDDIG then if self.toautobuild == false then if actor:IsPlayerControlled() == false then + if self:GetStringValue("ConstructorMode") == "Spray" then + self:SetStringValue("ConstructorMode", "Dig"); + end if ctrl:IsState(Controller.WEAPON_FIRE) and SceneMan:ShortestDistance(actor.Pos, ConstructorTerrainRay(actor.Pos,Vector(0,50),3), SceneMan.SceneWrapsX).Magnitude < 30 then self.tunnelFillTimer:Reset(); self.aicontrolled = true; @@ -287,20 +289,19 @@ function Update(self) end end end - end end else self.toautobuild = false; end - - if self.Sharpness == 0 then -- dig/spray + local mode = self:GetNumberValue("BuildMode"); + if mode == 0 then -- activation if ctrl:IsState(Controller.WEAPON_FIRE) then local angle = actor:GetAimAngle(true); - if self:GetNumberValue("Constructor Mode") == 1 then + if self:GetStringValue("ConstructorMode") == "Spray" then if self.resource > self.buildcost / 5 then for i = 1, 4 do @@ -367,77 +368,108 @@ function Update(self) collectfx.Sharpness = self.UniqueID; MovableMan:AddParticle(collectfx); end - else -- deactivate if digging air self:Deactivate(); break; end - end - end - else self.fireTimer:Reset(); end - elseif self.Sharpness == 1 then -- cancel - self.Sharpness = 0; + elseif mode == 1 then -- cancel + self:RemoveNumberValue("BuildMode"); self.buildlist = {}; + self.cursor = nil; - elseif self.Sharpness == 2 then -- build - self.Sharpness = 0; + elseif mode == 2 then -- build + self:RemoveNumberValue("BuildMode"); -- constructor build cursor + if actor:IsPlayerControlled() then + self.cursor = Vector(self.MuzzlePos.X, self.MuzzlePos.Y); + end + end + local displayColorBlue = 5; + local displayColorYellow = 120; + local displayColorRed = 13; + local displayColorWhite = 254; + if self.displayTimer:IsPastSimMS(TimerMan.DeltaTimeMS) then + self.displayTimer:Reset(); + -- flickering colors + displayColorBlue = 195; + displayColorYellow = 116; + displayColorRed = 12; + displayColorWhite = 252; + end - if MovableMan:IsActor(self.cursor) then - self.cursor.Sharpness = -2; + if self.cursor then + + actor.ViewPoint = self.cursor; + + local cursorMovement = Vector(); + + if ctrl:IsMouseControlled() then + cursorMovement = cursorMovement + ctrl.MouseMovement; + else + if ctrl:IsState(Controller.HOLD_UP) or ctrl:IsState(Controller.BODY_JUMP) then + cursorMovement = cursorMovement + Vector(0, -1); + end + if ctrl:IsState(Controller.HOLD_DOWN) or ctrl:IsState(Controller.BODY_CROUCH) then + cursorMovement = cursorMovement + Vector(0, 1); + end + if ctrl:IsState(Controller.HOLD_LEFT) then + cursorMovement = cursorMovement + Vector(-1, 0); + end + if ctrl:IsState(Controller.HOLD_RIGHT) then + cursorMovement = cursorMovement + Vector(1, 0); + end end - if actor:IsPlayerControlled() then - self.cursor = CreateActor("Constructor Cursor"); - self.cursor.Pos = self.MuzzlePos; - self.cursor.Team = actor.Team; - self.cursor.Sharpness = self.UniqueID; - MovableMan:AddActor(self.cursor); - ActivityMan:GetActivity():SwitchToActor(self.cursor, ctrl.Player, actor.Team); + if cursorMovement.Magnitude > 0 then + if ctrl:IsMouseControlled() then + self.cursor = self.cursor + cursorMovement; + else + self.cursor = self.cursor + cursorMovement:SetMagnitude(self.cursormovespeed); + end end - end - if MovableMan:IsActor(self.cursor) then - if self.cursor.Sharpness == self.UniqueID then + local mapx = math.floor((self.cursor.X - 12)/24) * 24 + 12; + local mapy = math.floor((self.cursor.Y - 12)/24) * 24 + 12; - local mapx = math.floor((self.cursor.Pos.X-12)/24)*24+12; - local mapy = math.floor((self.cursor.Pos.Y-12)/24)*24+12; - PrimitiveMan:DrawBoxPrimitive(screen, Vector(mapx, mapy), Vector(mapx+23, mapy+23), 120); + PrimitiveMan:DrawLinePrimitive(screen, self.cursor + Vector(0, 4), self.cursor + Vector(0, -4), displayColorYellow); + PrimitiveMan:DrawLinePrimitive(screen, self.cursor + Vector(4, 0), self.cursor + Vector(-4, 0), displayColorYellow); + PrimitiveMan:DrawBoxPrimitive(screen, Vector(mapx, mapy), Vector(mapx + 23, mapy + 23), displayColorYellow); + if ctrl:IsState(Controller.PIE_MENU_ACTIVE) then + self.cursor = nil; + elseif actor:IsPlayerControlled() then -- add blocks to the build queue if the cursor is firing - if self.cursor:IsPlayerControlled() then - if self.cursor:GetController():IsState(Controller.WEAPON_FIRE) then - local freeslot = true; - for i = 1, #self.buildlist do - if self.buildlist[i] ~= nil and self.buildlist[i][1] == mapx and self.buildlist[i][2] == mapy then - freeslot = false; - break; - end - end - if freeslot then - local buildthis = {}; - buildthis[1] = mapx; - buildthis[2] = mapy; - buildthis[3] = 0; - self.buildlist[#self.buildlist+1] = buildthis; + if ctrl:IsState(Controller.WEAPON_FIRE) then + local freeslot = true; + for i = 1, #self.buildlist do + if self.buildlist[i] ~= nil and self.buildlist[i][1] == mapx and self.buildlist[i][2] == mapy then + freeslot = false; + break; end end - else - self.cursor.Sharpness = -2; + if freeslot then + local buildthis = {}; + buildthis[1] = mapx; + buildthis[2] = mapy; + buildthis[3] = 0; + self.buildlist[#self.buildlist+1] = buildthis; + end + end + for state = 0, 40 do -- go through and disable all 41 controller states when moving the build cursor + ctrl:SetState(state, false); end else self.cursor = nil; end end - -- clean up the build list of nil slots and draw the squares to show the build layout local templist = {}; for i = 1, #self.buildlist do @@ -445,9 +477,9 @@ function Update(self) templist[#templist+1] = self.buildlist[i]; if self.displaygrid then if SceneMan:ShortestDistance(actor.Pos, Vector(self.buildlist[i][1],self.buildlist[i][2]), SceneMan.SceneWrapsX).Magnitude < self.builddistance then - PrimitiveMan:DrawBoxPrimitive(screen, Vector(self.buildlist[i][1],self.buildlist[i][2]), Vector(self.buildlist[i][1]+23,self.buildlist[i][2]+23), 5); + PrimitiveMan:DrawBoxPrimitive(screen, Vector(self.buildlist[i][1],self.buildlist[i][2]), Vector(self.buildlist[i][1]+23,self.buildlist[i][2]+23), displayColorBlue); else - PrimitiveMan:DrawBoxPrimitive(screen, Vector(self.buildlist[i][1],self.buildlist[i][2]), Vector(self.buildlist[i][1]+23,self.buildlist[i][2]+23), 13); + PrimitiveMan:DrawBoxPrimitive(screen, Vector(self.buildlist[i][1],self.buildlist[i][2]), Vector(self.buildlist[i][1]+23,self.buildlist[i][2]+23), displayColorRed); end end end @@ -469,10 +501,10 @@ function Update(self) local bx = self.buildlist[1][3]-(by*8); by = by*3-1; bx = bx*3-1; - - PrimitiveMan:DrawLinePrimitive(screen, self.Pos, self.Pos + SceneMan:ShortestDistance(self.Pos, Vector(bx+self.buildlist[1][1]+2,by+self.buildlist[1][2]+2), SceneMan.SceneWrapsX ), 5); - PrimitiveMan:DrawBoxFillPrimitive(screen, Vector(bx+self.buildlist[1][1]+1,by+self.buildlist[1][2]+1),Vector(bx+self.buildlist[1][1]+3,by+self.buildlist[1][2]+3),254); + PrimitiveMan:DrawLinePrimitive(screen, self.Pos, self.Pos + SceneMan:ShortestDistance(self.Pos, Vector(bx+self.buildlist[1][1]+2,by+self.buildlist[1][2]+2), SceneMan.SceneWrapsX ), displayColorBlue); + PrimitiveMan:DrawBoxFillPrimitive(screen, Vector(bx+self.buildlist[1][1]+1,by+self.buildlist[1][2]+1),Vector(bx+self.buildlist[1][1]+3,by+self.buildlist[1][2]+3), displayColorWhite); + for x = 1, 3 do for y = 1, 3 do local name = ""; @@ -496,24 +528,14 @@ function Update(self) self.buildlist[#self.buildlist+1] = self.buildlist[1]; self.buildlist[1] = nil; end - end end end - - else - if MovableMan:IsActor(self.cursor) then - self.cursor.Sharpness = -2; - self.cursor = nil; + if display then + self.displayTimer:Reset(); end + elseif self.cursor then + self.cursor = nil; end - - end - -end - -function Destroy(self) - if MovableMan:IsActor(self.cursor) then - self.cursor.Sharpness = -2; end end \ No newline at end of file diff --git a/Base.rte/Devices/Tools/Constructor/ConstructorPie.lua b/Base.rte/Devices/Tools/Constructor/ConstructorPie.lua index 564e9787d..ea8750b80 100644 --- a/Base.rte/Devices/Tools/Constructor/ConstructorPie.lua +++ b/Base.rte/Devices/Tools/Constructor/ConstructorPie.lua @@ -1,29 +1,27 @@ function ConstructorModeCancel(actor) local gun = ToAHuman(actor).EquippedItem; - if gun ~= nil then - gun.Sharpness = 1; + if gun then + ToMOSRotating(gun):SetNumberValue("BuildMode", 1); end end function ConstructorModeBuild(actor) local gun = ToAHuman(actor).EquippedItem; - if gun ~= nil then - gun.Sharpness = 2; + if gun then + ToMOSRotating(gun):SetNumberValue("BuildMode", 2); end end function ConstructorDigMode(actor) local gun = ToAHuman(actor).EquippedItem; - if gun ~= nil then - gun = ToMOSRotating(gun); - gun:SetNumberValue("Constructor Mode", 0); + if gun then + ToMOSRotating(gun):SetStringValue("ConstructorMode", "Dig"); end end function ConstructorSprayMode(actor) local gun = ToAHuman(actor).EquippedItem; - if gun ~= nil then - gun = ToMOSRotating(gun); - gun:SetNumberValue("Constructor Mode", 1); + if gun then + ToMOSRotating(gun):SetStringValue("ConstructorMode", "Spray"); end end \ No newline at end of file From 94650a48c5a7bcea08671c72186b74bc587f85be Mon Sep 17 00:00:00 2001 From: 4zk Date: Sat, 25 Jul 2020 20:34:16 +0300 Subject: [PATCH 13/28] Door GibLimit and JointStrength buff (awaiting further door material nerfs..?) --- .../Bunkers/BunkerSystems/Doors/Doors.ini | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/Base.rte/Scenes/Objects/Bunkers/BunkerSystems/Doors/Doors.ini b/Base.rte/Scenes/Objects/Bunkers/BunkerSystems/Doors/Doors.ini index cc837961d..3562794e2 100644 --- a/Base.rte/Scenes/Objects/Bunkers/BunkerSystems/Doors/Doors.ini +++ b/Base.rte/Scenes/Objects/Bunkers/BunkerSystems/Doors/Doors.ini @@ -284,7 +284,7 @@ AddEffect = Attachable Resolution = 6 Depth = 4 DeepCheck = 1 - JointStrength = 300 + JointStrength = 400 JointStiffness = 0.5 BreakWound = AEmitter CopyOf = Wound Bone Break @@ -293,7 +293,7 @@ AddEffect = Attachable Y = 0 DrawAfterParent = 1 GibImpulseLimit = 5000 - GibWoundLimit = 100 + GibWoundLimit = 150 // GibSound = SoundContainer // CopyOf = Bone Crack AddGib = Gib @@ -415,7 +415,7 @@ AddEffect = Attachable Resolution = 6 Depth = 4 DeepCheck = 1 - JointStrength = 300 + JointStrength = 400 JointStiffness = 0.5 BreakWound = AEmitter CopyOf = Wound Bone Break @@ -424,7 +424,7 @@ AddEffect = Attachable Y = 0 DrawAfterParent = 0 GibImpulseLimit = 5000 - GibWoundLimit = 100 + GibWoundLimit = 150 // GibSound = SoundContainer // CopyOf = Bone Crack AddGib = Gib @@ -559,7 +559,7 @@ AddEffect = Attachable Resolution = 6 Depth = 4 DeepCheck = 1 - JointStrength = 300 + JointStrength = 600 JointStiffness = 0.5 BreakWound = AEmitter CopyOf = Wound Bone Break @@ -568,7 +568,7 @@ AddEffect = Attachable Y = 0 DrawAfterParent = 0 GibImpulseLimit = 5000 - GibWoundLimit = 112 + GibWoundLimit = 250 // GibSound = SoundContainer // CopyOf = Bone Crack AddGib = Gib @@ -713,7 +713,7 @@ AddEffect = Attachable Resolution = 6 Depth = 4 DeepCheck = 1 - JointStrength = 300 + JointStrength = 600 JointStiffness = 0.5 BreakWound = AEmitter CopyOf = Wound Bone Break @@ -722,7 +722,7 @@ AddEffect = Attachable Y = 0 DrawAfterParent = 0 GibImpulseLimit = 5000 - GibWoundLimit = 112 + GibWoundLimit = 250 // GibSound = SoundContainer // CopyOf = Bone Crack AddGib = Gib @@ -907,7 +907,7 @@ AddEffect = ADoor // AddSound = ContentFile // FilePath = ... GibImpulseLimit = 5000 - GibWoundLimit = 35 + GibWoundLimit = 100 AddGib = Gib GibParticle = MOSRotating CopyOf = Door Motor Gib A From 850dafc1f5db048624f96b0f031785ed51600be4 Mon Sep 17 00:00:00 2001 From: 4zk Date: Sat, 25 Jul 2020 20:35:35 +0300 Subject: [PATCH 14/28] Added new bunker module: Spikes --- .../Objects/Bunkers/BunkerBits/BunkerBits.ini | 5 +- .../BunkerBits/Spikes/SpikeEmitter.lua | 27 ++++ .../Bunkers/BunkerBits/Spikes/Spikes.ini | 136 ++++++++++++++++++ .../Bunkers/BunkerBits/Spikes/Spikes2XBG.bmp | Bin 0 -> 2230 bytes .../Bunkers/BunkerBits/Spikes/Spikes2XFG.bmp | Bin 0 -> 2230 bytes .../Bunkers/BunkerBits/Spikes/Spikes2XMat.bmp | Bin 0 -> 2230 bytes .../Bunkers/BunkerBits/Spikes/SpikesBG.bmp | Bin 0 -> 1654 bytes .../Bunkers/BunkerBits/Spikes/SpikesFG.bmp | Bin 0 -> 1654 bytes .../Bunkers/BunkerBits/Spikes/SpikesMat.bmp | Bin 0 -> 1654 bytes 9 files changed, 167 insertions(+), 1 deletion(-) create mode 100644 Base.rte/Scenes/Objects/Bunkers/BunkerBits/Spikes/SpikeEmitter.lua create mode 100644 Base.rte/Scenes/Objects/Bunkers/BunkerBits/Spikes/Spikes.ini create mode 100644 Base.rte/Scenes/Objects/Bunkers/BunkerBits/Spikes/Spikes2XBG.bmp create mode 100644 Base.rte/Scenes/Objects/Bunkers/BunkerBits/Spikes/Spikes2XFG.bmp create mode 100644 Base.rte/Scenes/Objects/Bunkers/BunkerBits/Spikes/Spikes2XMat.bmp create mode 100644 Base.rte/Scenes/Objects/Bunkers/BunkerBits/Spikes/SpikesBG.bmp create mode 100644 Base.rte/Scenes/Objects/Bunkers/BunkerBits/Spikes/SpikesFG.bmp create mode 100644 Base.rte/Scenes/Objects/Bunkers/BunkerBits/Spikes/SpikesMat.bmp diff --git a/Base.rte/Scenes/Objects/Bunkers/BunkerBits/BunkerBits.ini b/Base.rte/Scenes/Objects/Bunkers/BunkerBits/BunkerBits.ini index c7acef121..7b24ac2b3 100644 --- a/Base.rte/Scenes/Objects/Bunkers/BunkerBits/BunkerBits.ini +++ b/Base.rte/Scenes/Objects/Bunkers/BunkerBits/BunkerBits.ini @@ -1186,4 +1186,7 @@ AddTerrainObject = TerrainObject CopyOf = Tut Tiny Flat Concrete Bit PresetName = Tiny Flat Concrete Bit AddToGroup = Bunker Odds & Ends - GoldValue = 5 \ No newline at end of file + GoldValue = 5 + + +IncludeFile = Base.rte/Scenes/Objects/Bunkers/BunkerBits/Spikes/Spikes.ini \ No newline at end of file diff --git a/Base.rte/Scenes/Objects/Bunkers/BunkerBits/Spikes/SpikeEmitter.lua b/Base.rte/Scenes/Objects/Bunkers/BunkerBits/Spikes/SpikeEmitter.lua new file mode 100644 index 000000000..aff82474e --- /dev/null +++ b/Base.rte/Scenes/Objects/Bunkers/BunkerBits/Spikes/SpikeEmitter.lua @@ -0,0 +1,27 @@ +function Create(self) + self.Team = Activity.NOTEAM; + self.IgnoresTeamHits = false; + + self.updateTimer = Timer(); + self.updateTimer:SetSimTimeLimitMS(math.random(900, 1000)); + + self.materialID = SceneMan:GetTerrMatter(self.Pos.X, self.Pos.Y); +end +function Update(self) + --Check if the terrain piece still exists and delete the emitter if it does not + if self.updateTimer:IsPastSimTimeLimit() then + self.updateTimer:Reset(); + local terrainFound = false; + local checkPosY = {-2, 0, 2}; + for i = 1, #checkPosY do + local checkPos = self.Pos + Vector(0, checkPosY[i]):RadRotate(self.RotAngle); + if SceneMan:GetTerrMatter(checkPos.X, checkPos.Y) == self.materialID then + terrainFound = true; + break; + end + end + if not terrainFound then + self:GibThis(); + end + end +end \ No newline at end of file diff --git a/Base.rte/Scenes/Objects/Bunkers/BunkerBits/Spikes/Spikes.ini b/Base.rte/Scenes/Objects/Bunkers/BunkerBits/Spikes/Spikes.ini new file mode 100644 index 000000000..49429a1d6 --- /dev/null +++ b/Base.rte/Scenes/Objects/Bunkers/BunkerBits/Spikes/Spikes.ini @@ -0,0 +1,136 @@ +/////////////////////////////////////////////////////////////////////// +// Spikes + + +AddEffect = MOPixel + PresetName = Spike Particle + Mass = 1 + RestThreshold = -1 + Sharpness = 20 + GlobalAccScalar = -1 + WoundDamageMultiplier = 5 + IgnoresTeamHits = 0 + HitsMOs = 1 + GetsHitByMOs = 0 + LifeTime = 20 + Color = Color + R = 255 + G = 0 + B = 255 + Atom = Atom + Material = Material + CopyOf = Air Blast + TrailColor = Color + R = 37 + G = 43 + B = 50 + TrailLength = 0 + + +AddTerrainObject = TerrainObject + PresetName = Spikes + AddToGroup = Bunker Bits + GoldValue = 50 + FGColorFile = ContentFile + Path = Base.rte/Scenes/Objects/Bunkers/BunkerBits/Spikes/SpikesFG.bmp + MaterialFile = ContentFile + Path = Base.rte/Scenes/Objects/Bunkers/BunkerBits/Spikes/SpikesMat.bmp + BGColorFile = ContentFile + Path = Base.rte/Scenes/Objects/Bunkers/BunkerBits/Spikes/SpikesBG.bmp + BitmapOffset = Vector + X = 0 + Y = 0 + AddChildObject = SOPlacer + PlacedObject = AEmitter + PresetName = Spike Emitter + Mass = 1 + PinStrength = 1000 + RestThreshold = -1 + HitsMOs = 0 + GetsHitByMOs = 1 + ScriptPath = Base.rte/Scenes/Objects/Bunkers/BunkerBits/Spikes/SpikeEmitter.lua + SpriteFile = ContentFile + FilePath = Base.rte/Null.bmp + FrameCount = 1 + AtomGroup = AtomGroup + CopyOf = Null AtomGroup + GibSound = SoundContainer + CopyOf = Metal Penetration Hit + AddEmission = Emission + EmittedParticle = MOPixel + CopyOf = Spike Particle + ParticlesPerMinute = 2000 + Spread = 0.1 + MaxVelocity = 1 + MinVelocity = 0 + EmissionAngle = Matrix + AngleDegrees = 90 + EmissionEnabled = 1 + EmissionOffset = Vector + X = 0 + Y = -5 + AddGib = Gib + GibParticle = MOSParticle + CopyOf = Gib Metal Grey Micro A + AddGib = Gib + GibParticle = MOSParticle + CopyOf = Gib Metal Grey Tiny A + AddGib = Gib + GibParticle = MOSParticle + CopyOf = Gib Metal Dark Micro A + AddGib = Gib + GibParticle = MOSParticle + CopyOf = Gib Metal Dark Tiny A + AddGib = Gib + GibParticle = MOPixel + CopyOf = Spark Yellow 1 + Count = 5 + Spread = 3.14 + MaxVelocity = 30 + MinVelocity = 15 + LifeVariation = 0.25 + Offset = Vector + X = 4 + Y = 10 + AddChildObject = SOPlacer + PlacedObject = AEmitter + CopyOf = Spike Emitter + Offset = Vector + X = 12 + Y = 10 + AddChildObject = SOPlacer + PlacedObject = AEmitter + CopyOf = Spike Emitter + Offset = Vector + X = 20 + Y = 10 + + +AddTerrainObject = TerrainObject + CopyOf = Spikes + PresetName = Spikes 2X + GoldValue = 100 + FGColorFile = ContentFile + Path = Base.rte/Scenes/Objects/Bunkers/BunkerBits/Spikes/Spikes2XFG.bmp + MaterialFile = ContentFile + Path = Base.rte/Scenes/Objects/Bunkers/BunkerBits/Spikes/Spikes2XMat.bmp + BGColorFile = ContentFile + Path = Base.rte/Scenes/Objects/Bunkers/BunkerBits/Spikes/Spikes2XBG.bmp + AddChildObject = SOPlacer + PlacedObject = AEmitter + CopyOf = Spike Emitter + Offset = Vector + X = 28 + Y = 10 + AddChildObject = SOPlacer + PlacedObject = AEmitter + CopyOf = Spike Emitter + Offset = Vector + X = 36 + Y = 10 + AddChildObject = SOPlacer + PlacedObject = AEmitter + CopyOf = Spike Emitter + Offset = Vector + X = 44 + Y = 10 \ No newline at end of file diff --git a/Base.rte/Scenes/Objects/Bunkers/BunkerBits/Spikes/Spikes2XBG.bmp b/Base.rte/Scenes/Objects/Bunkers/BunkerBits/Spikes/Spikes2XBG.bmp new file mode 100644 index 0000000000000000000000000000000000000000..ba5b14698e2055570b41d0a1070dc952a555c5f8 GIT binary patch literal 2230 zcmdUudu$X{6vlrh{xL*?s~{a-rHIfW6xkB1v*i&)LWf5!716 zobUV2oja2X0}7qbqj!TQZ*B=y;x4*2swCh2NsvI-4GhD?vR3eOyF=ni5%;Ro$kI$6 z(pJj8iK2|9$G|G?8L*EY{V!5zzJj^X%aY~0cx&qc*6p&XKX#q`QJM5oN6`C0kMtX8 z!ks1knqG>hz(O;;c&2ze(OpnOjJ$&oLp54LcirJbfTKS;ff%Om&)>3=&8_r(*m4M@LLBge~;$6d)uZw2`wXhiX98_^6Iq;e*20NXak9*?HwBlyMqng(crn6F<4+PS+VTYa$s- z@|e7M2BY7cOi}eh^7jh^ENe=T#PnBWk#t^xpyIdIIVJjRJnT^(~ZY4g=dj)tf^Vfd)qg2`gDkBv?E$^ zgijT|etmm0V(1`7We-6glf!=B9=`tcAg!m45N$mw5yFvrO=@-F9`DYiKv$WXH;{{a zU*_`1rCdGw8nLfl=da^$kToEKp_%>3&KgM0@F9#DIgI>AMl)5<#lK?<&rHZ>+4MY) zEgnVF(md>y<7ug$!kP6?^5d4-TzG#jjn57s@O&1Zmkbk44a=O3SH9(iR`DGb--?3P z5%S&FEU!dYGtreSsns#`X_y6bq{ot;6=;1&;!@;H;BqAX1^7vzsNJF}O zW7xLsK-dnSw8P=U65+5NI2;J3$)9fsH-~*bUvsm7w8|>r^VzPhx7F!tVLbGO52q?6lW$A(HjC!!B7ucZk@Xe&f|w4JTE{HL`c$3I9(e2W4VZ8Goj~1 zJkIT+?;;px1!ga-#X}3Mm_7eGa>O?vZn0qdjuUwQsEj=)RCJ%4Kzec<=CFx~e#}Vm z0yxU8r+AJpgE2z_Cs<%yZwaCyqX9|6F&M-KtPopZC_aOgUdlcj~Tk(8-Kgthw zbMG}&esKe<2L8hSff1B`?;>pim~;`*Ipvs}*MxbMA7k$Bek^XgiADWm)HhG{X}+RJ zwIqmSuUe{Msjfy^y_=&K~4{{R7?{_z_JG7fOHiV(o1W7Pp29%6HJKA*Q+<_{~rCMeIGW zkNOv|xFQF9Z87DO5MN&cp>ZpWogZRz*CFH&DwMAWrN5uY@v&dPtmGh8OZ1K$=}AFK z7LU~YHHh7whIQMrvHZPt$gSUk^i#Po9N&y}-8;b~v3RsTiTbAAC4u@Daj4@cdN0}G z*4$uN2D)q(iA4#>tjUAw}CXq1noeDh+Wk+^gbk`tDIPfbFH?G(QKT!CY#4{pa^_4gSu-KhU?ek>fRUd^N|9KepG~>R~Eo-(&Nk0c&f=k5({9V zw;XklZa3*>7;pijcW>NL1D=fo&*;gQhrnk-%-BRR629lgGBOez)#GXZ1ll8!_D`a^ZmQ|?`QZ2a={pZ^@1UmIHM?Ea zTrQWUUA{c%qMJ7yueOhm6t+gpl6~VQPfMYxz138BqodVky*F>QMwr{3irHf}N13C> z-BIl~T0KsW(`vgnuMXH|sW#h)Y#R@tJZ>9t6Lwg`@fc8LWkOYAKT#ll_I`m9&|+SL)r2ergB kiJ^N4@8W}Q6nCH4H|2M~7#w?Gfu`dA0|VOsKVc^D4}>@3Q~&?~ literal 0 HcmV?d00001 diff --git a/Base.rte/Scenes/Objects/Bunkers/BunkerBits/Spikes/Spikes2XMat.bmp b/Base.rte/Scenes/Objects/Bunkers/BunkerBits/Spikes/Spikes2XMat.bmp new file mode 100644 index 0000000000000000000000000000000000000000..1f372d636c145473b854aad6a9428bbe4fc58ebc GIT binary patch literal 2230 zcmZ?r-NwNH24*Y_3>rX|0T4?7F(U&+q5&w54*oOzXJ`OIjZ6Q5QvVr@{%=81(y;Fi zgF{LWLqO9O2DdyQ9U6rquV7xmpb)Typ`vFWia5PEhfnNdSh{KfLvd{$y{sHo_C&49 zWC+Ns!09J*MyN)$tAPY+)8=#mpN`582fmNJ;@+AwJB z+``b*)P$}CFF$JHDu$&?mol6^yp!SU>pOVWVw0?>ZD*J`Z2`l?1rxDJ6BG;GcY@*n ze^A~b5Bz`K!|>tKL-I6Js0-xkje`$t+O!GmD57YFjhi-Y25KOhX4tfO^X5%JpO4Z5 m6b`_E2ZukAG%%tzfz*>igOr2R4+lqPPAXY;H_7L*yFimSH5GTDB=?K%Ou|h+2@>eKfnk_f)(U>^c1c_<6Q43Ei}WAZ;C&O-r{<4ja_)ndd8VM@Xl>!eANM}wwz}EnmF}4<9JjZMSOTP z3yZT4F0_Rxr z*>6lZ`6q9m?4sh^Zt-TI6q@uasiJ?`ItDKJfc~pm8MgB>LtC#(-@53__ccw?vM?oH z^4H+6sbT551{zL%!?{bp5_DZIN_bRNylZ$0b@6PVmXzV0ZHiZm%*sj(|7sptQ_IYT z&CER9Ox58Q%D?=M*G_)Vy3TGYF2tC0&BY&esTRJ?F_!@~RS-#tzR8A78>N4PVbvw* ztLF-z#mKsO7;6{eJNz#5KiWch_>l0mQ1QzNc3=GoWxR%2W63>g;wPW{={jS}i^yDD zz~n_U81v?2O6wL-xUUrN?)gk^T7io4_`xo$s+bQ#-%Is-OHy+0no`u4(wthM9?cBd`HE%qM-GJ z-22+)wdiUVx{@uqI)*+Cvv{`DSW>eBZNO+eihL89Igg^DWtK^ug-?54c#3#=P9x?M zSCaqljEoF4(bHxA44ETS=Fbw{sA$IHaT1Ayoa;14VzEdd7KlUyINbLWC5oo$=(>Svt|t(*iQXKQQnI{C(%7|Xq^T6dWD_xad%*rNILU2-O-F-RHD;K$ukucHcg zy40&$DegQIRrlha<&C2&ubNE#ATFbtDaL+WOHMGgte&#nmsqyBhw1}8I28?t^x;%Z zoLbDhJTmJDgL2REXvs~|Hiy~M*uv*0zoz+YC%(=g?N@%5d<~~t^kpthOw~oZV3lZ@ zVqRQJD{+}#baNwW$$s1`KIG*!JILC3jD_3$6xP)9LRC9uyPA3F$R)~~JE>{C%IYs~ zFs5g>P5HW@tqj{2mp3gY7$a$ox8^%k$AT zEfGGGaaBvvx2(W@{3Dh%?PkFRzwotC^2Zqt-ToEFR28GblzUXApDeQGYD`{`OX{j@ zX0Dvar1xf0P_>+#qXoDQEn{Z$dK{Swk5y&L+%mhV%iIRL8~4$AzKxI_!l5{D&Qln_ zID2&kcVGDFx^$9I*D0}c*pjbGt|r{mTxsNK3bV6Ea{bsF z-1@APJEztX`Su*BT^ZgHk^#~kz_tOhRGAgk@L(XW@}lr9^A_-(=%8zH=ENd zC(^z;8*9TfI;&=JW&4Z#vUefZK3+`At0QPDPUowVaiXbW8Vm8tU0&;wzC+Tt!+{zz zx%VyWD$$fQG)KDRYUtV=jJ!osV@l0>)S(k_I^>nYh&=;mPIo#XgMZ zZ^ggwfddDkik>F>r^_B0vVW%NhD5Wcr-x`XDshcS>jm3tv)kG%I~WYw_Qi`Ag5pK2 zy58=h+W!4~J-x-@{YAxfwZ%m@8f)w8`+MpFeoxrrN%5rghEnQo)P@7$fYs5^&uVDs z_BHgz(AV409TIG;r^E93?^+g?<$K!~$Gd)?)d7~j$!|%of`J4k{Ur8}NIa5^2a@?u z`(x);!k2h5Kgr{X^M(7)?~nKK^u-f(+4u2EUrXXT3H?5uKvOu*Uwp4V;!E)Ovg15h lO^vZQ*3#m8nDm?CuEhU?ClmgEG2V7;&_q1p$GHDD&%YQd5rY5# literal 0 HcmV?d00001 diff --git a/Base.rte/Scenes/Objects/Bunkers/BunkerBits/Spikes/SpikesMat.bmp b/Base.rte/Scenes/Objects/Bunkers/BunkerBits/Spikes/SpikesMat.bmp new file mode 100644 index 0000000000000000000000000000000000000000..8bc7f087d8b495b71514e6688adccba3c94a2557 GIT binary patch literal 1654 zcmds$A#B1x6o!A6h0M(&ku{i#)l9$yj-;lh8iT1>vYa6yH8W?`Zh?(tyr%c{{{Owccj6vKPi>gEy9ONf)!Dx-+!(!oWne855;OHU zrBu3vD|5@A6&v)&6n>mz7%2v!<##=TuAhU@!qU&RS*{B3G{NIEI#Jz3D_z^jH zCU4*#^tAE1UW27u1f)c793r5!F~4fE$t@h0!|UC{S>%Z0xSG3@Pxzj6+T literal 0 HcmV?d00001 From 3d026094ad9faecb3d8c8985385b8e9ef9b42d9b Mon Sep 17 00:00:00 2001 From: 4zk Date: Sat, 25 Jul 2020 20:37:52 +0300 Subject: [PATCH 15/28] New bunker module: Background Ladder --- .../BunkerSystems/Ladders/LadderBG.lua | 71 ++++++++++++++++++ .../BunkerSystems/Ladders/LadderCBG.bmp | Bin 0 -> 1654 bytes .../Ladders/LadderCBGDestroyed.bmp | Bin 0 -> 1654 bytes .../BunkerSystems/Ladders/LadderCFG.bmp | Bin 0 -> 1654 bytes .../BunkerSystems/Ladders/LadderCMat.bmp | Bin 0 -> 1654 bytes .../BunkerSystems/Ladders/LadderNode.lua | 12 +-- .../Bunkers/BunkerSystems/Ladders/Ladders.ini | 55 +++++++++++++- 7 files changed, 131 insertions(+), 7 deletions(-) create mode 100644 Base.rte/Scenes/Objects/Bunkers/BunkerSystems/Ladders/LadderBG.lua create mode 100644 Base.rte/Scenes/Objects/Bunkers/BunkerSystems/Ladders/LadderCBG.bmp create mode 100644 Base.rte/Scenes/Objects/Bunkers/BunkerSystems/Ladders/LadderCBGDestroyed.bmp create mode 100644 Base.rte/Scenes/Objects/Bunkers/BunkerSystems/Ladders/LadderCFG.bmp create mode 100644 Base.rte/Scenes/Objects/Bunkers/BunkerSystems/Ladders/LadderCMat.bmp diff --git a/Base.rte/Scenes/Objects/Bunkers/BunkerSystems/Ladders/LadderBG.lua b/Base.rte/Scenes/Objects/Bunkers/BunkerSystems/Ladders/LadderBG.lua new file mode 100644 index 000000000..b1ffadc63 --- /dev/null +++ b/Base.rte/Scenes/Objects/Bunkers/BunkerSystems/Ladders/LadderBG.lua @@ -0,0 +1,71 @@ +function Create(self) + self.skipFrames = 2; + self.checkDelay = math.ceil(self.skipFrames * TimerMan.DeltaTimeMS); + self.idleDelay = self.checkDelay * 5; + self.checkTimer = Timer(); + self.checkTimer:SetSimTimeLimitMS(self.idleDelay); + self.checkCounter = 0; + self.idleCheckLimit = 50; + + self.checkPos = self.Pos; + + self.width = (ToMOSprite(self):GetSpriteWidth()/5) - 1; + self.height = (ToMOSprite(self):GetSpriteHeight()/3) - 1; + + self.gib = CreateTerrainObject("Destroyed Background Ladder"); + self.gib.Pos = Vector(self.Pos.X, self.Pos.Y); +end +function Update(self) + if self.PinStrength ~= 0 then + if self.checkTimer:IsPastSimTimeLimit() then + self.checkTimer:Reset(); + self.Vel, self.AngularVel = Vector(), 0; + local moCheck = SceneMan:GetMOIDPixel(self.checkPos.X, self.checkPos.Y); + local actor; + if moCheck ~= rte.NoMOID then + local mo = MovableMan:GetMOFromID(MovableMan:GetMOFromID(moCheck).RootID); + if mo and IsAHuman(mo) then + actor = ToAHuman(MovableMan:GetMOFromID(mo.RootID)); + local controller = actor:GetController(); + local limbs = actor.FGLeg or actor.BGLeg or actor.FGArm or actor.BGArm; + if limbs and actor.Status == Actor.STABLE and not controller:IsState(Controller.BODY_JUMP) then + local velFactor, aimAngle, climb = 1 + actor.Vel.Magnitude * 0.3, actor:GetAimAngle(false), false; + -- Climb by looking up/down or moving + if (aimAngle > 1.5 and controller:IsState(Controller.MOVE_UP)) or (aimAngle < -1.5 and controller:IsState(Controller.MOVE_DOWN)) then + climb = true; + end + local gravity = SceneMan.GlobalAcc * TimerMan.DeltaTimeSecs; + if climb or (controller:IsState(Controller.MOVE_LEFT) or controller:IsState(Controller.MOVE_RIGHT)) then + local speed = actor:GetLimbPathSpeed(1)/velFactor; + actor.Vel = actor.Vel * (1 - 1/velFactor) + Vector(speed, 0):RadRotate(actor:GetAimAngle(true)) - gravity * (0.4 + self.skipFrames/velFactor); + elseif actor.Vel.Magnitude < 5 then + -- Counter gravity to keep actor still + actor.Vel = Vector() - gravity * (0.4 + self.skipFrames/velFactor); + end + end + end + else + self.checkPos = self.Pos + Vector(math.random(-self.width, self.width), math.random(-self.height, self.height)); + end + -- Go into a less frequent "idle" mode after enough empty checks + if actor then + self.checkCounter = self.idleCheckLimit; + self.checkTimer:SetSimTimeLimitMS(self.checkDelay); + elseif self.checkCounter ~= 0 then + self.checkCounter = self.checkCounter - 1; + if self.checkCounter <= 0 then + self.checkCounter = 0; + self.checkTimer:SetSimTimeLimitMS(self.idleDelay); + end + end + end + else + self.ToDelete = true; + end +end +function Destroy(self) + -- If this MO is somehow deleted, a new background sprite will indicate the destruction of the ladder + if self.gib then + SceneMan:AddTerrainObject(self.gib); + end +end \ No newline at end of file diff --git a/Base.rte/Scenes/Objects/Bunkers/BunkerSystems/Ladders/LadderCBG.bmp b/Base.rte/Scenes/Objects/Bunkers/BunkerSystems/Ladders/LadderCBG.bmp new file mode 100644 index 0000000000000000000000000000000000000000..22d78d39b9e0a5a93b8cff3dc9b0bce53a5e703b GIT binary patch literal 1654 zcmZ{k4@^~c6vsdPS-UP~uQa&+L(GipgnY25`|!`moLmJ$GV9tx6KGt_0ZS(jT;gUd zOvV3ZsV$wEh!*kSY5$g6;k(F_s7+;+4f_MH)Y066$7*|>i)D%U-Oju3eDC?4^F8Nx z-kX)R>MjQG=$)X+H}xO84P}5&yM5qs!$*V&x^7??CYDvsPhDXmJ=xr&&Ld7Uc~Dy| z?@bhC8pFn}G;=rZB@Ik3IZVm+HuBf?Q@y7jm#U+P4wq)( z(jD`1@0e{<#KKHG}>$p5pU;5I;G(&12ibO5Bzg!&-xuw;NB<8$7*oGf7(yv2f#2a%v9qL{&2-+v<7hKpUm??bI}$XT`_A zGNa`WwzPat-dA0s%|J;t8Ie`O$eay~TJa7e*EBPJ&n3n+_ekHm)R+01rqr@9#a{4M z;H{`&<%Sw+PJhYy?qBeS!(0?|sj6t#aHZ;^*+9+8!M(^7trjuG#TeeTJiM-w`8C^^ zf2@I$V?Gvq_BAiJe8Yy0F7i72m~}ObHx#B+@@?x26J1dPKSrd!$)>HFrGJC*rCI1} zmqy&y6`90hr`=iS4X=E6WVM?AN$+5n=jJNje;OtqOP{^?k!jeyw ze50aAFnQuQ65}VJCns>E_8?z;bd-*^KU|G&EedpC;4vYLN30Yi|^Sn_@9sCle|e%Q^PVB;+4C+*de+@qFYhW9Fu!r zUsj2(#-b~6602kA^DxsF$r($|l%qvY!KKJdWanIph8B|}=PW$hbCM^Gg4{aH$FB_h zzN4a|(4?L&`)9}=nX-SD)D20^{{DUv$b_FKfnZfhd=-V zfyIIg*Wq{phqoQ-j_Ytd+u_d?6cqUW2XW6hd~NOEy0x{!w=^{k=9`*Yzzzln^TD8f z>-byizgefF-)B40op;yZc+P-Yf_;5`_J8_qaf71AH`Lsm_*>}r4aG~m&+l*G1~mBn z!rMcPzt`!vw@&b{$_p19uUGU0F25^qR9}PRU3TW&YTLHV{5r&K6~5Dd^FH{U2@ky| Fe*=p`I|u*( literal 0 HcmV?d00001 diff --git a/Base.rte/Scenes/Objects/Bunkers/BunkerSystems/Ladders/LadderCBGDestroyed.bmp b/Base.rte/Scenes/Objects/Bunkers/BunkerSystems/Ladders/LadderCBGDestroyed.bmp new file mode 100644 index 0000000000000000000000000000000000000000..73220468b2f0b3a359113696bff6ed5c0be171e0 GIT binary patch literal 1654 zcmZ8hYitx%6#g{E43Xd}NQYM`V(k!$Y>Cy`@<>HOhes_H(ZPsF(J)}sHbP)2k&<9z z5hzj~qJR-Xkh_3Z_U;8=kwnXO_TIs20yIjD_$aG{U`Q-G(PTY4_-8xGnLBgtIp6o4 zbI;7o>a}+xxE{L;Fz8AD-|m1G_$%)Wmb_aQS(v5;%d+7(>+x$}2H6`mxL2QxBE!Z* z#s=EAp=nbwX!IuBGwK)yjl7C#`&HO0qNrbY2yg8@j%|k|I?w)tib;hSqEEok2P2ek z!657+$~VjgM5-JZRuqxh(O?Z%wV~8HfUw<$srEjEm!873#$#yQbsoz%`)J$mBcz+q zNJq$U5HfQX#eK66V@PEZ_t#xR;pRWFI~K<$r@ugFvIoa|`p|Xp2Z}cliV#25Ws(^d zao5xnmqQjscv%a=P86225k}oUL{`3oXV&aM+0LU_wCx0H+mGSN)-E)5bmHm5=h4*J zgLZxit3Ue#)7`)EwtE?M-}aF<3tEMZq1BBTR=X7=R)2tD8@n)e|22&1x-lU4@>4GplO zoAAiy7A$D*z=D&f(0DSAgv8ZkvyJCC6 zQv&Hs8k(*lG+)PrB_){KQi~TqTm@r>j`2%I|ks&;t@J0+DiV5S#U{c9Am{Up-V@L4yrzg;R{xs6PXUMvdp?HI0 zO~RfYE<}~7V@~;KTs`^p6N-*a!EXjB2l7mh?p(P)%DJPuPP7Ng?P z$(Uo7fgjj|XJ?dP&Af7)T{Q_^tIHubOh-@aY+T&_6n@;Z2v^=;g7|ZzAYLfK=XJ%z zX~3};AxdX?rI&Q4Nw=oK$QhmcmUS&K^+K3h5yhIY%(<|u7E_KxIqP8zpNNn~J)xNk zX$FjfTFP?}F`g%!O1!+}IP52`2jBPL!GmECpGos)(Hz+{e-81ciPQIeWV2b?Hz_vB z-Ml{nT%IIHTuPbmmm<+meoryZc`}vauH@WJO2%ZI{61H-r5N2jzMltr z;!GuZ%I!{a$)!wkp5nLlD=)!3AsAgs2-3+_fRj+Jq&MZ|iipu>!dE$brAWV@D@iEf zOJ5}z3;N>^&_l%qel|dViUs&e4Cp^;2>QSV_92$5w_kWNMg5l~pC`LrdJgpWOP*l9 z@I0Xs!lNMJcFP J_Y02%{s#dyPon?; literal 0 HcmV?d00001 diff --git a/Base.rte/Scenes/Objects/Bunkers/BunkerSystems/Ladders/LadderCFG.bmp b/Base.rte/Scenes/Objects/Bunkers/BunkerSystems/Ladders/LadderCFG.bmp new file mode 100644 index 0000000000000000000000000000000000000000..2c14f96c3e3d41f1ec203e7ae1980080f019ad7f GIT binary patch literal 1654 zcmeH{eN0t#7{@=g){cwWEewu=c+H5zguJk*-$ij`434~nMAWfG=B37g7?%Z;11@1B z7KCDgnuWG>&WM*HVQ6p5tx(ZM)TZ85Ytakba*pQKxU9C@1M46E?0?VpJ#W9~`F_98 z^Lx(ORIuZA7LSK+14Hig|8NW1;`_{77cV!Q!h})E#565zyMbS(Lxg7wxl_-@ZCKoA z?38s2O1D}^849cyvC18)>W}i;!G3lhy~xm+ze!JyW2v4<$rBwv%k|_u}uKpsZz{ww`%hxvb;Pfjy-`8$bMxV)k-bt!>iigsa@XxRb> z&-Nxfwu5Q!!tfo!Tk!@@)a@l@-w8@~4^Y(E%cHGh_`8O9{MZCFLz8rlT%q>k-^m#N zi`U10!1wjEcr($`Eg}p2EGz0@dF?wa+cn0jo~x`Jo0Yni=u3YsOSEh(!E;U{PGci= z9i4Pu_>wC#zcCsLF(q*6x_CEmr7Q7lq8Ak5*=mVbo9OClOsAO#TAJ9>*~ON@llTXR zDgNvmUK;G^ey)6+bi{(tg0zMHE$C>oA}o4 znC%sK2j8UZ{ceiC8W6r=e7~OM$n1}38w{*QTlUcqKPjZ-DN>6wiLOc`t1_Q;uVzu$ zT2A`$LOe&x$Qo)uOVYWgHA(80+HF(nw&?CV$jF6Jf}tRquHnkpNi0nux2cF{->t;h zsFPo^gr`C{+S}@Rt7ku#E}bVBTtI-3@ae+0JSvjJH7iL@ zSdB_eqVK)qeDTo$fr(QD1E&S&2}!&mu}ZizJaObGoy}>n%$#_EYadi|{qzpzK7W~i z&c1>>CYm*ID@bt1l63!SQrE_l{@^+`s}x2KAK=N23Do7Kai%hvvD!2)?#y7aHJi(O z9^?B1B}~0t%J5S$j6UP$6JNY&8rW6|j_l=BKzs+qx29n%K=!@8z6qtrp)|L|DomA& zm9tfHY{_ZBh+2zFlb*=TxikYKx=8YDyvEbQlgaa?{aBA&Tl~HwA|fzEPs#k5GDnuo dpDnsU(VU;3CmasTy1LQO3`>_TWjK3yC&Sm*ckrskCRtJ2&M0&G%5iG}Vv!SMe-X1*axGf>h0 a*F6j$E 0 and self.checkTimer:IsPastSimTimeLimit() then @@ -11,7 +11,7 @@ function Update(self) self.Vel, self.AngularVel = Vector(), 0; local checkPos = self.Pos + Vector(self.width * self.FlipFactor, math.random(-self.height, self.height)):RadRotate(self.RotAngle); local moCheck = SceneMan:GetMOIDPixel(checkPos.X, checkPos.Y); - if moCheck ~= 255 then + if moCheck ~= rte.NoMOID then local mo = MovableMan:GetMOFromID(moCheck); if IsAttachable(mo) and ToAttachable(mo):GetParent() and IsAHuman(ToAttachable(mo):GetParent()) then local actor = ToAHuman(MovableMan:GetMOFromID(mo.RootID)); @@ -19,10 +19,10 @@ function Update(self) if actor.Status == Actor.STABLE and actor.FlipFactor ~= self.FlipFactor and not controller:IsState(Controller.BODY_JUMP) then actor.Vel = actor.Vel * (1 - 1 / velFactor); if controller:IsState(Controller.MOVE_LEFT) or controller:IsState(Controller.MOVE_RIGHT) then - local speed = actor:GetLimbPathSpeed(1) / velFactor; - actor.Vel = actor.Vel + Vector(speed / 2, 0):RadRotate(actor:GetAimAngle(true)) - Vector(0, speed); + local speed = actor:GetLimbPathSpeed(1)/velFactor; + actor.Vel = actor.Vel + Vector(speed/2, 0):RadRotate(actor:GetAimAngle(true)) - Vector(0, speed); elseif controller:IsState(Controller.BODY_CROUCH) then - actor.Vel = actor.Vel / 2; + actor.Vel = actor.Vel/2; end end end diff --git a/Base.rte/Scenes/Objects/Bunkers/BunkerSystems/Ladders/Ladders.ini b/Base.rte/Scenes/Objects/Bunkers/BunkerSystems/Ladders/Ladders.ini index 8b7782be2..a275f3dda 100644 --- a/Base.rte/Scenes/Objects/Bunkers/BunkerSystems/Ladders/Ladders.ini +++ b/Base.rte/Scenes/Objects/Bunkers/BunkerSystems/Ladders/Ladders.ini @@ -88,6 +88,25 @@ AddActor = MOSRotating CopyOf = Robot Death +AddActor = MOSRotating + PresetName = Background Ladder Node + PinStrength = 1000 + MissionCritical = 1 + Mass = 0 + RestThreshold = 0 + HitsMOs = 0 + GetsHitByMOs = 0 + SpriteFile = ContentFile + FilePath = Base.rte/Scenes/Objects/Bunkers/BunkerSystems/Ladders/LadderCFG.bmp + FrameCount = 1 + SpriteOffset = Vector + X = -12 + Y = -12 + ScriptPath = Base.rte/Scenes/Objects/Bunkers/BunkerSystems/Ladders/LadderBG.lua + AtomGroup = AtomGroup + CopyOf = Null AtomGroup + + AddTerrainObject = TerrainObject PresetName = Powered Ladder Left Description = Having trouble climbing regular ladders? This model will offer you the vertical assistance you need. @@ -131,4 +150,38 @@ AddTerrainObject = TerrainObject X = 12 Y = 12 HFlipped = 1 - \ No newline at end of file + + +AddTerrainObject = TerrainObject + PresetName = Background Ladder + AddToGroup = Bunker Systems + GoldValue = 10 + FGColorFile = ContentFile + Path = Base.rte/Scenes/Objects/Bunkers/BunkerSystems/Ladders/LadderCFG.bmp + MaterialFile = ContentFile + Path = Base.rte/Scenes/Objects/Bunkers/BunkerSystems/Ladders/LadderCMat.bmp + BGColorFile = ContentFile + Path = Base.rte/Scenes/Objects/Bunkers/BunkerSystems/Ladders/LadderCBG.bmp + BitmapOffset = Vector + X = 0 + Y = 0 + AddChildObject = SOPlacer + PlacedObject = MOSRotating + CopyOf = Background Ladder Node + Offset = Vector + X = 12 + Y = 12 + + +AddTerrainObject = TerrainObject + PresetName = Destroyed Background Ladder + Buyable = 0 + FGColorFile = ContentFile + Path = Base.rte/Scenes/Objects/Bunkers/BunkerSystems/Ladders/LadderCFG.bmp + MaterialFile = ContentFile + Path = Base.rte/Scenes/Objects/Bunkers/BunkerSystems/Ladders/LadderCMat.bmp + BGColorFile = ContentFile + Path = Base.rte/Scenes/Objects/Bunkers/BunkerSystems/Ladders/LadderCBGDestroyed.bmp + BitmapOffset = Vector + X = -12 + Y = -12 \ No newline at end of file From 640b6d727a581ed0f2dc38dfa95f63db9237a703 Mon Sep 17 00:00:00 2001 From: 4zk Date: Sat, 25 Jul 2020 20:38:49 +0300 Subject: [PATCH 16/28] Missed a new file for devices-related commit --- Base.rte/Devices/Weapons/Shotgun/Shotgun.lua | 49 ++++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 Base.rte/Devices/Weapons/Shotgun/Shotgun.lua diff --git a/Base.rte/Devices/Weapons/Shotgun/Shotgun.lua b/Base.rte/Devices/Weapons/Shotgun/Shotgun.lua new file mode 100644 index 000000000..b00aae9fa --- /dev/null +++ b/Base.rte/Devices/Weapons/Shotgun/Shotgun.lua @@ -0,0 +1,49 @@ +function Create(self) + self.pullTimer = Timer(); + self.loaded = false; + self.rotFactor = math.pi; +end +function Update(self) + local parent; + local actor = self:GetRootParent(); + if actor and IsAHuman(actor) then + parent = ToAHuman(actor); + end + if self.FiredFrame then + self.shell = CreateMOSParticle("Shell"); + self.loaded = false; + self.playedSound = false; + self.rotFactor = math.pi; + end + if parent and not self.loaded and self.RoundInMagCount > 0 and not self.reloadCycle then + self:Deactivate(); + if self.pullTimer:IsPastSimMS(15000/self.RateOfFire) then + if not self.playedSound then + AudioMan:PlaySound("Base.rte/Sounds/Devices/ChamberRound.wav", self.Pos); + self.playedSound = true; + end + if self.shell then + self.shell.Pos = self.Pos; + self.shell.Vel = self.Vel + Vector(-6 * self.FlipFactor, -4):RadRotate(self.RotAngle); + self.shell.Team = self.Team; + MovableMan:AddParticle(self.shell); + self.shell = nil; + end + self.Frame = 1; + self.SupportOffset = Vector(1, 3); + local rotTotal = math.sin(self.rotFactor)/5; + self.RotAngle = self.RotAngle + self.FlipFactor * rotTotal; + local jointOffset = Vector(self.JointOffset.X * self.FlipFactor, self.JointOffset.Y):RadRotate(self.RotAngle); + self.Pos = self.Pos - jointOffset + Vector(jointOffset.X, jointOffset.Y):RadRotate(-rotTotal * self.FlipFactor); + self.rotFactor = self.rotFactor - math.pi * 0.0005 * self.RateOfFire; + end + if self.rotFactor <= 0 then + self.loaded = true; + self.Frame = 0; + self.SupportOffset = Vector(4, 2); + self.rotFactor = 0; + end + else + self.pullTimer:Reset(); + end +end \ No newline at end of file From d127d0b6428853f4291a4756a035dea8b3297cd6 Mon Sep 17 00:00:00 2001 From: 4zk Date: Sat, 25 Jul 2020 21:06:15 +0300 Subject: [PATCH 17/28] Rename "FlameBall00.bmp" to "FlameBall.bmp" --- Base.rte/Effects/Pyro.ini | 2 +- .../Flame/{FlameBall00000.bmp => FlameBall000.bmp} | Bin .../Flame/{FlameBall00001.bmp => FlameBall001.bmp} | Bin .../Flame/{FlameBall00002.bmp => FlameBall002.bmp} | Bin .../Flame/{FlameBall00003.bmp => FlameBall003.bmp} | Bin .../Flame/{FlameBall00004.bmp => FlameBall004.bmp} | Bin .../Flame/{FlameBall00005.bmp => FlameBall005.bmp} | Bin .../Flame/{FlameBall00006.bmp => FlameBall006.bmp} | Bin .../Flame/{FlameBall00007.bmp => FlameBall007.bmp} | Bin .../Flame/{FlameBall00008.bmp => FlameBall008.bmp} | Bin .../Flame/{FlameBall00009.bmp => FlameBall009.bmp} | Bin .../Flame/{FlameBall00010.bmp => FlameBall010.bmp} | Bin .../Flame/{FlameBall00011.bmp => FlameBall011.bmp} | Bin .../Flame/{FlameBall00012.bmp => FlameBall012.bmp} | Bin .../Flame/{FlameBall00013.bmp => FlameBall013.bmp} | Bin 15 files changed, 1 insertion(+), 1 deletion(-) rename Base.rte/Effects/Pyro/Flame/{FlameBall00000.bmp => FlameBall000.bmp} (100%) rename Base.rte/Effects/Pyro/Flame/{FlameBall00001.bmp => FlameBall001.bmp} (100%) rename Base.rte/Effects/Pyro/Flame/{FlameBall00002.bmp => FlameBall002.bmp} (100%) rename Base.rte/Effects/Pyro/Flame/{FlameBall00003.bmp => FlameBall003.bmp} (100%) rename Base.rte/Effects/Pyro/Flame/{FlameBall00004.bmp => FlameBall004.bmp} (100%) rename Base.rte/Effects/Pyro/Flame/{FlameBall00005.bmp => FlameBall005.bmp} (100%) rename Base.rte/Effects/Pyro/Flame/{FlameBall00006.bmp => FlameBall006.bmp} (100%) rename Base.rte/Effects/Pyro/Flame/{FlameBall00007.bmp => FlameBall007.bmp} (100%) rename Base.rte/Effects/Pyro/Flame/{FlameBall00008.bmp => FlameBall008.bmp} (100%) rename Base.rte/Effects/Pyro/Flame/{FlameBall00009.bmp => FlameBall009.bmp} (100%) rename Base.rte/Effects/Pyro/Flame/{FlameBall00010.bmp => FlameBall010.bmp} (100%) rename Base.rte/Effects/Pyro/Flame/{FlameBall00011.bmp => FlameBall011.bmp} (100%) rename Base.rte/Effects/Pyro/Flame/{FlameBall00012.bmp => FlameBall012.bmp} (100%) rename Base.rte/Effects/Pyro/Flame/{FlameBall00013.bmp => FlameBall013.bmp} (100%) diff --git a/Base.rte/Effects/Pyro.ini b/Base.rte/Effects/Pyro.ini index bef4602b1..60f4cb278 100644 --- a/Base.rte/Effects/Pyro.ini +++ b/Base.rte/Effects/Pyro.ini @@ -995,7 +995,7 @@ AddAmmo = MOSRotating HitsMOs = 1 GetsHitByMOs = 0 SpriteFile = ContentFile - FilePath = Base.rte/Effects/Pyro/Flame/FlameBall00.bmp + FilePath = Base.rte/Effects/Pyro/Flame/FlameBall.bmp FrameCount = 14 SpriteOffset = Vector X = -10 diff --git a/Base.rte/Effects/Pyro/Flame/FlameBall00000.bmp b/Base.rte/Effects/Pyro/Flame/FlameBall000.bmp similarity index 100% rename from Base.rte/Effects/Pyro/Flame/FlameBall00000.bmp rename to Base.rte/Effects/Pyro/Flame/FlameBall000.bmp diff --git a/Base.rte/Effects/Pyro/Flame/FlameBall00001.bmp b/Base.rte/Effects/Pyro/Flame/FlameBall001.bmp similarity index 100% rename from Base.rte/Effects/Pyro/Flame/FlameBall00001.bmp rename to Base.rte/Effects/Pyro/Flame/FlameBall001.bmp diff --git a/Base.rte/Effects/Pyro/Flame/FlameBall00002.bmp b/Base.rte/Effects/Pyro/Flame/FlameBall002.bmp similarity index 100% rename from Base.rte/Effects/Pyro/Flame/FlameBall00002.bmp rename to Base.rte/Effects/Pyro/Flame/FlameBall002.bmp diff --git a/Base.rte/Effects/Pyro/Flame/FlameBall00003.bmp b/Base.rte/Effects/Pyro/Flame/FlameBall003.bmp similarity index 100% rename from Base.rte/Effects/Pyro/Flame/FlameBall00003.bmp rename to Base.rte/Effects/Pyro/Flame/FlameBall003.bmp diff --git a/Base.rte/Effects/Pyro/Flame/FlameBall00004.bmp b/Base.rte/Effects/Pyro/Flame/FlameBall004.bmp similarity index 100% rename from Base.rte/Effects/Pyro/Flame/FlameBall00004.bmp rename to Base.rte/Effects/Pyro/Flame/FlameBall004.bmp diff --git a/Base.rte/Effects/Pyro/Flame/FlameBall00005.bmp b/Base.rte/Effects/Pyro/Flame/FlameBall005.bmp similarity index 100% rename from Base.rte/Effects/Pyro/Flame/FlameBall00005.bmp rename to Base.rte/Effects/Pyro/Flame/FlameBall005.bmp diff --git a/Base.rte/Effects/Pyro/Flame/FlameBall00006.bmp b/Base.rte/Effects/Pyro/Flame/FlameBall006.bmp similarity index 100% rename from Base.rte/Effects/Pyro/Flame/FlameBall00006.bmp rename to Base.rte/Effects/Pyro/Flame/FlameBall006.bmp diff --git a/Base.rte/Effects/Pyro/Flame/FlameBall00007.bmp b/Base.rte/Effects/Pyro/Flame/FlameBall007.bmp similarity index 100% rename from Base.rte/Effects/Pyro/Flame/FlameBall00007.bmp rename to Base.rte/Effects/Pyro/Flame/FlameBall007.bmp diff --git a/Base.rte/Effects/Pyro/Flame/FlameBall00008.bmp b/Base.rte/Effects/Pyro/Flame/FlameBall008.bmp similarity index 100% rename from Base.rte/Effects/Pyro/Flame/FlameBall00008.bmp rename to Base.rte/Effects/Pyro/Flame/FlameBall008.bmp diff --git a/Base.rte/Effects/Pyro/Flame/FlameBall00009.bmp b/Base.rte/Effects/Pyro/Flame/FlameBall009.bmp similarity index 100% rename from Base.rte/Effects/Pyro/Flame/FlameBall00009.bmp rename to Base.rte/Effects/Pyro/Flame/FlameBall009.bmp diff --git a/Base.rte/Effects/Pyro/Flame/FlameBall00010.bmp b/Base.rte/Effects/Pyro/Flame/FlameBall010.bmp similarity index 100% rename from Base.rte/Effects/Pyro/Flame/FlameBall00010.bmp rename to Base.rte/Effects/Pyro/Flame/FlameBall010.bmp diff --git a/Base.rte/Effects/Pyro/Flame/FlameBall00011.bmp b/Base.rte/Effects/Pyro/Flame/FlameBall011.bmp similarity index 100% rename from Base.rte/Effects/Pyro/Flame/FlameBall00011.bmp rename to Base.rte/Effects/Pyro/Flame/FlameBall011.bmp diff --git a/Base.rte/Effects/Pyro/Flame/FlameBall00012.bmp b/Base.rte/Effects/Pyro/Flame/FlameBall012.bmp similarity index 100% rename from Base.rte/Effects/Pyro/Flame/FlameBall00012.bmp rename to Base.rte/Effects/Pyro/Flame/FlameBall012.bmp diff --git a/Base.rte/Effects/Pyro/Flame/FlameBall00013.bmp b/Base.rte/Effects/Pyro/Flame/FlameBall013.bmp similarity index 100% rename from Base.rte/Effects/Pyro/Flame/FlameBall00013.bmp rename to Base.rte/Effects/Pyro/Flame/FlameBall013.bmp From 598c3d3dfc724955762fd86900ef4645628d7201 Mon Sep 17 00:00:00 2001 From: 4zk Date: Sat, 25 Jul 2020 21:06:56 +0300 Subject: [PATCH 18/28] Missed a few removals for unused files --- Base.rte/Craft/DropShips/DropshipMK1.lua | 37 ----------- Base.rte/Devices/Tools/Constructor/Cursor.lua | 64 ------------------- 2 files changed, 101 deletions(-) delete mode 100644 Base.rte/Craft/DropShips/DropshipMK1.lua delete mode 100644 Base.rte/Devices/Tools/Constructor/Cursor.lua diff --git a/Base.rte/Craft/DropShips/DropshipMK1.lua b/Base.rte/Craft/DropShips/DropshipMK1.lua deleted file mode 100644 index 0ef1c787b..000000000 --- a/Base.rte/Craft/DropShips/DropshipMK1.lua +++ /dev/null @@ -1,37 +0,0 @@ -dofile("Base.rte/Constants.lua") -require("AI/NativeDropShipAI") - -function Create(self) - self.AI = NativeDropShipAI:Create(self); - self.Frame = math.random(0, self.FrameCount - 1); - - self.explosionTimer = Timer(); - self.explosiondelay = 3000 / math.sqrt(self.Radius + 1); - - self.height = ToMOSprite(self):GetSpriteHeight(); - self.width = ToMOSprite(self):GetSpriteWidth(); -end - -function UpdateAI(self) - self.AI:Update(self); -end - -function Update(self) - -- Re-orient the craft at 180 degrees to help rotational AI - if self.RotAngle > math.pi then - self.RotAngle = self.RotAngle - (math.pi * 2); - end - if self.RotAngle < -math.pi then - self.RotAngle = self.RotAngle + (math.pi * 2); - end - -- Explosion effects on scuttle - if self.Status > Actor.UNSTABLE or self.AIMode == Actor.AIMODE_SCUTTLE then - if self.explosionTimer:IsPastSimMS(self.explosiondelay) then - self.explosionTimer:Reset(); - local expl = CreateAEmitter("Scuttle Explosion"); - expl.Pos = self.Pos + Vector(self.width / 2, self.height / 2):RadRotate(self.RotAngle) * RangeRand(-0.8, 0.8); - expl.Vel = self.Vel; - MovableMan:AddParticle(expl); - end - end -end \ No newline at end of file diff --git a/Base.rte/Devices/Tools/Constructor/Cursor.lua b/Base.rte/Devices/Tools/Constructor/Cursor.lua deleted file mode 100644 index 1ee0dab8d..000000000 --- a/Base.rte/Devices/Tools/Constructor/Cursor.lua +++ /dev/null @@ -1,64 +0,0 @@ -function Create(self) - self.DelayTimer = Timer(); - self.movespeed = 10; - self.futurevel = Vector(0,0); -end - -function Update(self) - self.ToDelete = false; - self.ToSettle = false; - self.AngularVel = 0; - self.RotAngle = 0; - - self.ctrl = self:GetController(); - - local screen = ActivityMan:GetActivity():ScreenOfPlayer(self.ctrl.Player); - PrimitiveMan:DrawLinePrimitive(screen, self.Pos + Vector(0, 4), self.Pos + Vector(0, -4), 120); - PrimitiveMan:DrawLinePrimitive(screen, self.Pos + Vector(4, 0), self.Pos + Vector(-4, 0), 120); - - if self.ctrl:IsMouseControlled() == false then - if self.ctrl:IsState(Controller.HOLD_UP) or self.ctrl:IsState(Controller.BODY_JUMP) then - self.futurevel = self.futurevel + Vector(0,-1); - end - - if self.ctrl:IsState(Controller.HOLD_DOWN) or self.ctrl:IsState(Controller.BODY_CROUCH) then - self.futurevel = self.futurevel + Vector(0,1); - end - - if self.ctrl:IsState(Controller.HOLD_LEFT) then - self.futurevel = self.futurevel + Vector(-1,0); - end - - if self.ctrl:IsState(Controller.HOLD_RIGHT) then - self.futurevel = self.futurevel + Vector(1,0); - end - elseif self.ctrl:IsMouseControlled() == true then - self.futurevel = self.futurevel + self.ctrl.MouseMovement; - end - - if self.futurevel == Vector(0,0) then - self.Vel = ((SceneMan.GlobalAcc * TimerMan.DeltaTimeSecs)*-1); - elseif not(self.futurevel == Vector(0,0)) then - if self.ctrl:IsMouseControlled() == false then - self.Vel = (self.futurevel:SetMagnitude(self.movespeed)) + ((SceneMan.GlobalAcc * TimerMan.DeltaTimeSecs)*-1); - elseif self.ctrl:IsMouseControlled() == true then - self.Vel = (self.futurevel) + ((SceneMan.GlobalAcc * TimerMan.DeltaTimeSecs)*-1); - end - end - - self.futurevel = Vector(0,0); - - if self.Sharpness == -2 or self:IsPlayerControlled() == false then - self.ToDelete = true; - end -end - -function Destroy(self) - ActivityMan:GetActivity():ReportDeath(self.Team,-1); - - if MovableMan:IsParticle(self.drawlighta) then - self.drawlighta.ToDelete = true; - self.drawlighta.LifeTime = 1; - end - -end \ No newline at end of file From fef71c867f7dcbb85195bd27713e7d5d6fe51d86 Mon Sep 17 00:00:00 2001 From: 4zk Date: Sun, 26 Jul 2020 00:27:52 +0300 Subject: [PATCH 19/28] Reverting filepath edit mishap --- Base.rte/Actors/Shared.ini | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Base.rte/Actors/Shared.ini b/Base.rte/Actors/Shared.ini index 259683b09..748519570 100644 --- a/Base.rte/Actors/Shared.ini +++ b/Base.rte/Actors/Shared.ini @@ -50,7 +50,7 @@ AddLimbPath = LimbPath Y = 5 AddSegment = Vector X = 0 - Y = 5 + Y = 6 AddSegment = Vector X = -4 Y = 3 From 527b68b338da6c68272c26f159d084e287c307ea Mon Sep 17 00:00:00 2001 From: 4zk Date: Fri, 14 Aug 2020 21:36:39 +0300 Subject: [PATCH 20/28] Changes requested by Gacyr --- Base.rte/AI/HumanBehaviors.lua | 4 +- Base.rte/AI/HumanFunctions.lua | 6 +- Base.rte/AI/NativeHumanAI.lua | 6 +- Base.rte/Activities/OneManArmyDiggers.lua | 19 ++---- .../Actors/Infantry/GreenDummy/GreenDummy.ini | 1 - Base.rte/Actors/Mecha/Medic/Medic.lua | 38 +++++++----- Base.rte/Craft/Shared/ScuttleExplosions.lua | 16 +++-- Base.rte/Craft/StorageCrate/DropCrate.lua | 2 +- .../RemoteExplosive/RemoteExplosive.ini | 2 +- .../Tools/Constructor/ConstructorCollect.lua | 15 ++--- .../Constructor/ConstructorCollectGold.lua | 15 ++--- .../Devices/Tools/GrappleGun/GrappleGun.ini | 14 ++++- Base.rte/Devices/Tools/GrappleGun/Pie.lua | 7 +++ .../Tools/GrappleGun/PieIcons/Hand000.bmp | Bin 0 -> 1222 bytes .../Tools/GrappleGun/PieIcons/Hand001.bmp | Bin 0 -> 1222 bytes Base.rte/Devices/Tools/Scanner/Scanner.ini | 45 +++++++++++--- Base.rte/Devices/Tools/Scanner/Scanner.lua | 55 ++++++++++++++++++ Base.rte/Devices/Weapons/Shotgun/Shotgun.lua | 2 +- .../BunkerSystems/Ladders/LadderBG.lua | 4 +- .../BunkerSystems/Ladders/LadderNode.lua | 5 +- 20 files changed, 178 insertions(+), 78 deletions(-) create mode 100644 Base.rte/Devices/Tools/GrappleGun/PieIcons/Hand000.bmp create mode 100644 Base.rte/Devices/Tools/GrappleGun/PieIcons/Hand001.bmp create mode 100644 Base.rte/Devices/Tools/Scanner/Scanner.lua diff --git a/Base.rte/AI/HumanBehaviors.lua b/Base.rte/AI/HumanBehaviors.lua index 74cba8e37..4d4ab738a 100644 --- a/Base.rte/AI/HumanBehaviors.lua +++ b/Base.rte/AI/HumanBehaviors.lua @@ -14,8 +14,8 @@ function HumanBehaviors.GetTeamShootingSkill(team) aimSkill = 0.04 else -- the AI shoot sooner and with slightly better precision - aimSpeed = 1/(0.65/(2.9-math.exp(skill*0.01))) -- [1.42 .. 0.38] - aimSkill = 1/(0.75/(3.0-math.exp(skill*0.01))) -- [1.36 .. 0.48] + aimSpeed = 1/(0.65/(2.9-math.exp(skill*0.01))) + aimSkill = 1/(0.75/(3.0-math.exp(skill*0.01))) end return aimSpeed, aimSkill, skill end diff --git a/Base.rte/AI/HumanFunctions.lua b/Base.rte/AI/HumanFunctions.lua index c64d70665..dade274de 100644 --- a/Base.rte/AI/HumanFunctions.lua +++ b/Base.rte/AI/HumanFunctions.lua @@ -5,7 +5,7 @@ function HumanFunctions.DoAlternativeGib(actor) if actor.detachLimit then if actor.WoundCount > actor.detachLimit then actor.detachLimit = actor.WoundCount + 1; - local parts = {actor.BGArm, actor.BGLeg, actor.FGArm, actor.FGLeg, actor.Head}; --Piority order + local parts = {actor.BGArm, actor.BGLeg, actor.FGArm, actor.FGLeg, actor.Head}; --Priority order local mostWounds = -1; local detachLimb; --Pick the limb with most wounds and detach it @@ -41,8 +41,8 @@ function HumanFunctions.DoArmSway(actor, pushStrength) actor.lastHandPos = {actor.Pos, actor.Pos}; end --Flail around if aiming around too fast - local ang = actor.lastAngle - aimAngle; - actor.AngularVel = actor.AngularVel - (2 * ang * actor.FlipFactor)/(math.abs(actor.AngularVel)/10 + 1); + local angleMovement = actor.lastAngle - aimAngle; + actor.AngularVel = actor.AngularVel - (2 * angleMovement * actor.FlipFactor)/(math.abs(actor.AngularVel)/10 + 1); actor.lastAngle = aimAngle; --Shove when unarmed if actor.controller:IsState(Controller.WEAPON_FIRE) and (actor.FGArm or actor.BGArm) and not (actor.EquippedItem or actor.EquippedBGItem) and actor.Status == Actor.STABLE then diff --git a/Base.rte/AI/NativeHumanAI.lua b/Base.rte/AI/NativeHumanAI.lua index 8264750a3..aed21ea46 100644 --- a/Base.rte/AI/NativeHumanAI.lua +++ b/Base.rte/AI/NativeHumanAI.lua @@ -279,7 +279,7 @@ function NativeHumanAI:Update(Owner) elseif FoundMO.ClassName == "ACDropShip" then FoundMO = ToACDropShip(FoundMO) elseif FoundMO.ClassName == "ADoor" and ToADoor(FoundMO).Door and ToADoor(FoundMO).Door:IsAttached() - and (Owner:EquipNamedDevice("Heavy Digger", true) or (Owner.FirearmIsReady and HumanBehaviors.GetProjectileData(Owner).pen > ToADoor(FoundMO).Door.Material.StructuralIntegrity)) then + and (Owner:EquipNamedDevice("Heavy Digger", true) or (Owner.FirearmIsReady and HumanBehaviors.GetProjectileData(Owner).pen * 0.9 > ToADoor(FoundMO).Door.Material.StructuralIntegrity)) then FoundMO = ToADoor(FoundMO) elseif FoundMO.ClassName == "Actor" then FoundMO = ToActor(FoundMO) @@ -723,8 +723,8 @@ function NativeHumanAI:CreateAttackBehavior(Owner) self.NextBehavior = coroutine.create(HumanBehaviors.AttackTarget) self.NextBehaviorName = "AttackTarget" -- favor grenades as the initiator to a sneak attack - elseif Owner.AIMode ~= Actor.AIMODE_SQUAD and Owner.AIMode ~= Actor.AIMODE_SENTRY and self.Target.HFlipped == Owner.HFlipped and Owner:EquipDeviceInGroup("Bombs - Grenades", true) and - dist > 100 and dist < ToThrownDevice(Owner.EquippedItem).MaxThrowVel * 20 and (self.Target.Pos.Y + 20) > Owner.Pos.Y then + elseif Owner.AIMode ~= Actor.AIMODE_SQUAD and Owner.AIMode ~= Actor.AIMODE_SENTRY and self.Target.HFlipped == Owner.HFlipped and Owner:EquipDeviceInGroup("Bombs - Grenades", true) + and dist > 100 and dist < ToThrownDevice(Owner.EquippedItem).MaxThrowVel * 20 and (self.Target.Pos.Y + 20) > Owner.Pos.Y then self.NextBehavior = coroutine.create(HumanBehaviors.ThrowTarget) self.NextBehaviorName = "ThrowTarget" elseif Owner:EquipFirearm(true) then diff --git a/Base.rte/Activities/OneManArmyDiggers.lua b/Base.rte/Activities/OneManArmyDiggers.lua index 3d4e59e7e..c8dbe33c1 100644 --- a/Base.rte/Activities/OneManArmyDiggers.lua +++ b/Base.rte/Activities/OneManArmyDiggers.lua @@ -233,21 +233,10 @@ function OneManArmy:UpdateActivity() --Spawn the AI. if self.CPUTeam ~= Activity.NOTEAM and self.ESpawnTimer:LeftTillSimMS(self.TimeLeft) <= 0 and MovableMan:GetTeamMOIDCount(self.CPUTeam) <= rte.AIMOIDMax * 3 / self:GetActiveCPUTeamCount() then - local ship, actorsInCargo - - if math.random() < 0.5 then - -- Set up the ship to deliver this stuff - ship = RandomACDropShip("Any", self.CPUTechName); - -- If we can't afford this dropship, then try a rocket instead - if ship:GetTotalValue(0,3) > self:GetTeamFunds(self.CPUTeam) then - DeleteEntity(ship); - ship = RandomACRocket("Any", self.CPUTechName); - end - actorsInCargo = ship.MaxPassengers - else - ship = RandomACRocket("Any", self.CPUTechName); - actorsInCargo = math.min(ship.MaxPassengers, 2) - end + + -- Set up the ship to deliver this stuff + local ship = RandomACRocket("Any", self.CPUTechName); + local actorsInCargo = math.min(ship.MaxPassengers, 2) ship.Team = self.CPUTeam; diff --git a/Base.rte/Actors/Infantry/GreenDummy/GreenDummy.ini b/Base.rte/Actors/Infantry/GreenDummy/GreenDummy.ini index 90e111c8d..bc8f7460e 100644 --- a/Base.rte/Actors/Infantry/GreenDummy/GreenDummy.ini +++ b/Base.rte/Actors/Infantry/GreenDummy/GreenDummy.ini @@ -727,7 +727,6 @@ AddActor = AHuman Description = TradeStar's factory worker unit. Agile, but not fit for warfare! AddToGroup = Actors AddToGroup = Actors - Light - AddToGroup = Actors - Heavy Mass = 34 GoldValue = 45 HitsMOs = 1 diff --git a/Base.rte/Actors/Mecha/Medic/Medic.lua b/Base.rte/Actors/Mecha/Medic/Medic.lua index d111bd24f..96e7a78aa 100644 --- a/Base.rte/Actors/Mecha/Medic/Medic.lua +++ b/Base.rte/Actors/Mecha/Medic/Medic.lua @@ -1,28 +1,40 @@ function Create(self) self.healTimer = Timer(); - self.baseHealDelay = 100; - self.healIncrementPerTarget = 50; + self.baseHealDelay = 150; + self.healIncrementPerTarget = 100; + self.healIncrementPerWound = 50; self.healTimer:SetSimTimeLimitMS(self.baseHealDelay); self.crossTimer = Timer(); self.crossTimer:SetSimTimeLimitMS(800); - self.healRange = 100 + self.Radius; + self.colors = {135, 133, 149, 148, 145}; + self.maxHealRange = 100 + self.Radius; self.healStrength = 1; self.healTargets = {}; end - function Update(self) - if self.healTimer:IsPastSimTimeLimit() then - self.healTimer:Reset(); - local parent = self:GetParent(); - if parent and IsActor(parent) then - parent = ToActor(parent); + local parent = self:GetParent(); + if parent and IsActor(parent) then + parent = ToActor(parent); + local healRange = self.maxHealRange * (1 - (self.WoundCount/self.GibWoundLimit)); + if (parent:IsPlayerControlled() and parent:GetController():IsState(Controller.WEAPON_FIRE)) or #self.healTargets > 0 then + local screen = ActivityMan:GetActivity():ScreenOfPlayer(parent:GetController().Player); + if screen ~= -1 then + PrimitiveMan:DrawCirclePrimitive(screen, self.Pos, healRange, self.colors[math.random(#self.colors)]); + for i = 1, math.random(10, 20) do + local vector = Vector(healRange, 0):RadRotate(6.28 * math.random()); + PrimitiveMan:DrawLinePrimitive(screen, self.Pos + vector * RangeRand(0.66, 0.99), self.Pos + vector, self.colors[math.random(#self.colors)]); + end + end + end + if self.healTimer:IsPastSimTimeLimit() then + self.healTimer:Reset(); for i = 1, #self.healTargets do local targetFound = false; local healTarget = self.healTargets[i]; if healTarget and IsActor(healTarget) and (healTarget.Health < healTarget.MaxHealth or healTarget.TotalWoundCount > 0) and healTarget.Vel.Largest < 10 then local trace = SceneMan:ShortestDistance(self.Pos, healTarget.Pos, false); - if (trace.Magnitude - healTarget.Radius) < self.healRange then + if (trace.Magnitude - healTarget.Radius) < healRange then if SceneMan:CastObstacleRay(self.Pos, trace, Vector(), Vector(), parent.ID, parent.IgnoresWhichTeam, rte.grassID, 5) < 0 then targetFound = true; end @@ -49,14 +61,14 @@ function Update(self) for act in MovableMan.Actors do if act.Team == parent.Team and act.ID ~= parent.ID and (act.Health < act.MaxHealth or act.TotalWoundCount > 0) and act.Vel.Largest < 5 then local trace = SceneMan:ShortestDistance(self.Pos, act.Pos, false); - if (trace.Magnitude - act.Radius) < (self.healRange * 0.9) then - if SceneMan:CastObstacleRay(self.Pos, trace, Vector(), Vector(), parent.ID, parent.IgnoresWhichTeam, 0, 3) < 0 then + if (trace.Magnitude - act.Radius) < (healRange * 0.9) then + if SceneMan:CastObstacleRay(self.Pos, trace, Vector(), Vector(), parent.ID, parent.IgnoresWhichTeam, rte.airID, 3) < 0 then table.insert(self.healTargets, act); end end end end - self.healTimer:SetSimTimeLimitMS(self.baseHealDelay + (#self.healTargets * self.healIncrementPerTarget)); + self.healTimer:SetSimTimeLimitMS(self.baseHealDelay + (self.healIncrementPerWound * self.WoundCount) + (#self.healTargets * self.healIncrementPerTarget)); end end end \ No newline at end of file diff --git a/Base.rte/Craft/Shared/ScuttleExplosions.lua b/Base.rte/Craft/Shared/ScuttleExplosions.lua index f707c7d8b..b167bcc15 100644 --- a/Base.rte/Craft/Shared/ScuttleExplosions.lua +++ b/Base.rte/Craft/Shared/ScuttleExplosions.lua @@ -4,16 +4,20 @@ function Create(self) self.height = ToMOSprite(self):GetSpriteHeight(); self.width = ToMOSprite(self):GetSpriteWidth(); - self.explosiondelay = 5000/math.sqrt(self.width + self.height); + if self:NumberValueExists("ScuttleExplosionDelay") then + self.explosionDelay = self:GetNumberValue("ScuttleExplosionDelay"); + else + self.explosionDelay = 5000/math.sqrt(self.width + self.height); + end end function Update(self) if self.Status > Actor.INACTIVE or self.AIMode == Actor.AIMODE_SCUTTLE then - if self.explosionTimer:IsPastSimMS(self.explosiondelay) then + if self.explosionTimer:IsPastSimMS(self.explosionDelay) then self.explosionTimer:Reset(); - local expl = CreateAEmitter("Scuttle Explosion"); - expl.Pos = self.Pos + Vector(self.width/2 * RangeRand(-0.9, 0.9), self.height/2 * RangeRand(-0.9, 0.9)):RadRotate(self.RotAngle); - expl.Vel = self.Vel; - MovableMan:AddParticle(expl); + local explosion = CreateAEmitter("Scuttle Explosion"); + explosion.Pos = self.Pos + Vector(self.width/2 * RangeRand(-0.9, 0.9), self.height/2 * RangeRand(-0.9, 0.9)):RadRotate(self.RotAngle); + explosion.Vel = self.Vel; + MovableMan:AddParticle(explosion); end end end \ No newline at end of file diff --git a/Base.rte/Craft/StorageCrate/DropCrate.lua b/Base.rte/Craft/StorageCrate/DropCrate.lua index 89c5f7f80..970b8e7c4 100644 --- a/Base.rte/Craft/StorageCrate/DropCrate.lua +++ b/Base.rte/Craft/StorageCrate/DropCrate.lua @@ -4,7 +4,7 @@ function Create(self) -- Choose a random horizontal direction local randomDirection = math.random() > 0.5 and 1 or -1; -- Randomize velocities - self.RotAngle = math.random() * (math.pi * 2); + self.RotAngle = RangeRand(0, math.pi * 2); self.AngularVel = -randomDirection * math.random(1, 10); self.Pos = Vector(self.Pos.X - randomDirection * math.random(99), self.Pos.Y); -- Try not to fly off the edge in non-wrapping scenes diff --git a/Base.rte/Devices/Explosives/RemoteExplosive/RemoteExplosive.ini b/Base.rte/Devices/Explosives/RemoteExplosive/RemoteExplosive.ini index a91d82bc2..10e850413 100644 --- a/Base.rte/Devices/Explosives/RemoteExplosive/RemoteExplosive.ini +++ b/Base.rte/Devices/Explosives/RemoteExplosive/RemoteExplosive.ini @@ -64,7 +64,7 @@ AddDevice = HDFirearm CopyOf = Dent Metal ExitWound = AEmitter CopyOf = Dent Metal - GoldValue = 25 + GoldValue = 10 AtomGroup = AtomGroup AutoGenerate = 1 Material = Material diff --git a/Base.rte/Devices/Tools/Constructor/ConstructorCollect.lua b/Base.rte/Devices/Tools/Constructor/ConstructorCollect.lua index 2ea1df325..a7cfd62b1 100644 --- a/Base.rte/Devices/Tools/Constructor/ConstructorCollect.lua +++ b/Base.rte/Devices/Tools/Constructor/ConstructorCollect.lua @@ -3,15 +3,12 @@ function Create(self) self.speed = 8; self.ToSettle = false; - if self.Sharpness > -1 then - for i = 1, MovableMan:GetMOIDCount()-1 do - local mo = MovableMan:GetMOFromID(i); - if mo.UniqueID == self.Sharpness then - self.target = mo; - self.Sharpness = 0; - self.PinStrength = 0; - break; - end + if self.Sharpness ~= rte.NoMOID then + local mo = MovableMan:GetMOFromID(i); + if mo then + self.target = mo; + self.Sharpness = 0; + self.PinStrength = 0; end else self.ToDelete = true; diff --git a/Base.rte/Devices/Tools/Constructor/ConstructorCollectGold.lua b/Base.rte/Devices/Tools/Constructor/ConstructorCollectGold.lua index d70d0f59f..1ed4c3272 100644 --- a/Base.rte/Devices/Tools/Constructor/ConstructorCollectGold.lua +++ b/Base.rte/Devices/Tools/Constructor/ConstructorCollectGold.lua @@ -5,15 +5,12 @@ function Create(self) self.lifeTimer = Timer(); self.ToSettle = false; - if self.Sharpness > -1 then - for i = 1, MovableMan:GetMOIDCount()-1 do - local mo = MovableMan:GetMOFromID(i); - if mo.UniqueID == self.Sharpness then - self.target = mo; - self.Sharpness = 0; - self.PinStrength = 0; - break; - end + if self.Sharpness ~= rte.NoMOID then + local mo = MovableMan:GetMOFromID(i); + if mo then + self.target = mo; + self.Sharpness = 0; + self.PinStrength = 0; end else self.ToDelete = true; diff --git a/Base.rte/Devices/Tools/GrappleGun/GrappleGun.ini b/Base.rte/Devices/Tools/GrappleGun/GrappleGun.ini index 18d620b85..e92c0a1b6 100644 --- a/Base.rte/Devices/Tools/GrappleGun/GrappleGun.ini +++ b/Base.rte/Devices/Tools/GrappleGun/GrappleGun.ini @@ -161,7 +161,7 @@ AddAmmo = Magazine AddDevice = HDFirearm PresetName = Grapple Gun AddToGroup = Tools - Description = Use this to climb walls and descend dangerous drops! Climb up by crouching and then holding up/down or scrolling up/down. + Description = Use this to climb walls and descend dangerous drops! Control the length of the rope by crouching and then holding up/down or scrolling up/down. Reload or double tap crouch to release the hook. Mass = 5 Sharpness = 0 HitsMOs = 0 @@ -198,7 +198,7 @@ AddDevice = HDFirearm X = -2 Y = 1.5 DrawAfterParent = 0 - DualWieldable = 1 + DualWieldable = 0 StanceOffset = Vector X = 12 Y = 1 @@ -251,6 +251,16 @@ AddDevice = HDFirearm FilePath = Base.rte/Devices/Tools/GrappleGun/PieIcons/Extend.bmp ScriptPath = Base.rte/Devices/Tools/GrappleGun/Pie.lua FunctionName = GrapplePieExtend + AddPieSlice = Slice + Description = Toggle Dual Wield + Direction = 3 + Icon = Icon + PresetName = Grapple Gun Hand + FrameCount = 2 + BitmapFile = ContentFile + FilePath = Base.rte/Devices/Tools/GrappleGun/PieIcons/Hand.bmp + ScriptPath = Base.rte/Devices/Tools/GrappleGun/Pie.lua + FunctionName = GrapplePieDualWield AddGib = Gib GibParticle = MOPixel CopyOf = Spark Yellow 1 diff --git a/Base.rte/Devices/Tools/GrappleGun/Pie.lua b/Base.rte/Devices/Tools/GrappleGun/Pie.lua index 6b6ea6e1e..a0c7caf7e 100644 --- a/Base.rte/Devices/Tools/GrappleGun/Pie.lua +++ b/Base.rte/Devices/Tools/GrappleGun/Pie.lua @@ -10,4 +10,11 @@ function GrapplePieExtend(actor) if gun then ToMOSRotating(gun):SetNumberValue("GrappleMode", 2); end +end + +function GrapplePieDualWield(actor) + local gun = ToAHuman(actor).EquippedItem; + if gun then + ToHDFirearm(gun):SetDualWieldable(not ToHDFirearm(gun):IsDualWieldable()); + end end \ No newline at end of file diff --git a/Base.rte/Devices/Tools/GrappleGun/PieIcons/Hand000.bmp b/Base.rte/Devices/Tools/GrappleGun/PieIcons/Hand000.bmp new file mode 100644 index 0000000000000000000000000000000000000000..296f80d51bf49a6d07bfad144703a965c1947f3a GIT binary patch literal 1222 zcmY+De@Iz>UyUF(%;SIIi}Zp%vMnLkjoRcFC|p$m_ac#S5=(fu(E zL8jzVQkS%H2yGx`ipFi)W(!7xlr)55mv`Ds2(WU-J{dM-)I;$C$~ z&Mh>}$BKj|?oJqF#kvp$)^k|p4pnt0d8v1pqbI*2@abRp(h^yzrx2g)m3$K=+)0wJ zjB30&Hp+DHZg*mg}gknKi}g(ghNmf92TF81GG-BQO+ zkL_UEhf$@+@m9RX6SbYBcfG~Vqaze|4DwjZB>wIIkDr>MCJ>}!e3pYB{leDiKX_&O zdrH5am)cA;pGACupEbqptUdT9YYtDcp>KiplZ(=~A^P%tElad)Eb)C#15QH&we1~r zT>OIB(9fI+hq)&1(sij_;qn<$vx#0%jAxf6wc5C=t1+D>?r(0SsH2;r(bM=x$0+&a z8(x^cO#9qCr9a%{(ci;3p)fVV*L^dLyTK1XMnvD@<*rWY-(*8g0Y=ka;j`J)vLCap z0`KVSl)c+S$)yqD8>964m-H`QMcbmV8f>{oCH16}o@bCzl7+h}lkCcTJV&xAY$?Y# zP>83$jO;)?TB^=HEveGC^lqEdw?)rTFXI=_5DJITbPZR&PRedYZeuZf-mXM#)5)(k zsBy}<5uTIz(Pj1&dFDe{!c!p}ZLM{@(RYk1S1u3=MSYI2@ae+0)*VmE#`UDBWQ>ed zhTa+A^AAUuo0%Xq_ks8Y!V<3}))4Nko5QLvl_$3;YV$HV_xyu=<~+<)V-A;Ei@4nRG_$>X zxZ3|Lfqlu09Z*bErirG)wszvkU0$1$xdntIlCms zmYjN&dowOgzKP77OH;BhmOLA;dPaD%IIw#d>yh7LKX_bR97^;InLktJ$ddW9MK>gx z%gf6|A`v+^Ab8sZp1o!APSBE=EKwYV(T(8XQt&ojiXF&#EI!J#BmvR*Xw=!If3d8B SVmKH>(fFu9%!0xH*6}5h17Ip4bqhfO8$AHM{*ygW+jRT8uY01V8_=nKg zn6NNdfU!&*Te`6#7_^&^qaU`FMTj{fH-pt&mT`+UY?POpx98rRt7m)8`+d**Jm2s0 zocB3-PoKY=sAbBUCTP`dzl(dK?>nQ<|3AWnF$@#aw6N_uewq&vUMyghoJ`~&#Arzve(rlofomu{d*9WG_#G9vD< zdi!ZsW=^uYWPyaHUpY27%6sGI2u#i}G&9e{x8F&;fy*oU(w8BwOwlf=6fIla!Lz>s zkL_UEhfyWR@s_{NlQkWrb-u;Uqr()n5Ab;N1pcl7Pn@2nIxs`~*enM>`h~4ifAH$m z_mq4+FSVIyK8x6VKWmEGSbOkI)*PN-L+=9XCl;k|L-ghQT9# zZ+LO)GHrA7l>Bg$$9@mt1VdB{U)RkLarJ)qF)aEPuXJ`u|0Wx%^D!Ft3ZKoU=KYwh z<#Rd35ZDyb)pv|NMq;!NTyGsvpQ!*e8yg61-O z{RMdXO34b;p{3}!n^UB3>D@M^Z;S519>y-7B^U~#=^Cy)o#fq$oQ5Lyyj_9Xrju7? zQ0>Pq%n5#HJ;k0sL9RX+zSu!nezyf4cT03Ddcj;GtBnv z;cDM=1okB{dO$H=kt&)B+uDgEcX@42>JCcXnudzF+uHU)w9Br$${NNSdab|{lQ~mVo;)I$o!cyN0!W=ExJL` zTwY!#91hF50q#2{@YZdUcY>D0WQpJijBEtEm)v*oQuIL1qwx`@B?*YcN1|>m{flK4 T6vgf+io{0*qULu0w}yWJf>? SceneMan.SceneWidth then + checkPos = Vector(checkPos.X - SceneMan.SceneWidth, checkPos.Y); + elseif checkPos.X < 0 then + checkPos = Vector(SceneMan.SceneWidth + checkPos.X, checkPos.Y); + end + end + local terrCheck = SceneMan:GetTerrMatter(checkPos.X, checkPos.Y); + if terrCheck ~= rte.airID then + terrHitCount = terrHitCount + 1; + end + end + local scanLength = math.floor((self.maxScanRange - (self.scanDisruption * (terrHitCount/dots)))/self.scanSpacing); + for i = 1, scanLength do + local checkPos = self.MuzzlePos + Vector((self.scanSpacing * i) * self.FlipFactor, 0):RadRotate(self.RotAngle):DegRotate(angleVariance); + if SceneMan.SceneWrapsX == true then + if checkPos.X > SceneMan.SceneWidth then + checkPos = Vector(checkPos.X - SceneMan.SceneWidth, checkPos.Y); + elseif checkPos.X < 0 then + checkPos = Vector(SceneMan.SceneWidth + checkPos.X, checkPos.Y); + end + end + SceneMan:RevealUnseen(checkPos.X, checkPos.Y, self.parent.Team); + end + end + end + end + end +end \ No newline at end of file diff --git a/Base.rte/Devices/Weapons/Shotgun/Shotgun.lua b/Base.rte/Devices/Weapons/Shotgun/Shotgun.lua index b00aae9fa..27bb2b138 100644 --- a/Base.rte/Devices/Weapons/Shotgun/Shotgun.lua +++ b/Base.rte/Devices/Weapons/Shotgun/Shotgun.lua @@ -10,7 +10,7 @@ function Update(self) parent = ToAHuman(actor); end if self.FiredFrame then - self.shell = CreateMOSParticle("Shell"); + self.shell = CreateMOSParticle("Base.rte/Shell"); self.loaded = false; self.playedSound = false; self.rotFactor = math.pi; diff --git a/Base.rte/Scenes/Objects/Bunkers/BunkerSystems/Ladders/LadderBG.lua b/Base.rte/Scenes/Objects/Bunkers/BunkerSystems/Ladders/LadderBG.lua index b1ffadc63..4cae6d74f 100644 --- a/Base.rte/Scenes/Objects/Bunkers/BunkerSystems/Ladders/LadderBG.lua +++ b/Base.rte/Scenes/Objects/Bunkers/BunkerSystems/Ladders/LadderBG.lua @@ -29,7 +29,9 @@ function Update(self) local controller = actor:GetController(); local limbs = actor.FGLeg or actor.BGLeg or actor.FGArm or actor.BGArm; if limbs and actor.Status == Actor.STABLE and not controller:IsState(Controller.BODY_JUMP) then - local velFactor, aimAngle, climb = 1 + actor.Vel.Magnitude * 0.3, actor:GetAimAngle(false), false; + local velFactor = 1 + actor.Vel.Magnitude * 0.3; + local aimAngle = actor:GetAimAngle(false); + local climb = false; -- Climb by looking up/down or moving if (aimAngle > 1.5 and controller:IsState(Controller.MOVE_UP)) or (aimAngle < -1.5 and controller:IsState(Controller.MOVE_DOWN)) then climb = true; diff --git a/Base.rte/Scenes/Objects/Bunkers/BunkerSystems/Ladders/LadderNode.lua b/Base.rte/Scenes/Objects/Bunkers/BunkerSystems/Ladders/LadderNode.lua index b9d68d338..a39a3324c 100644 --- a/Base.rte/Scenes/Objects/Bunkers/BunkerSystems/Ladders/LadderNode.lua +++ b/Base.rte/Scenes/Objects/Bunkers/BunkerSystems/Ladders/LadderNode.lua @@ -15,9 +15,10 @@ function Update(self) local mo = MovableMan:GetMOFromID(moCheck); if IsAttachable(mo) and ToAttachable(mo):GetParent() and IsAHuman(ToAttachable(mo):GetParent()) then local actor = ToAHuman(MovableMan:GetMOFromID(mo.RootID)); - local controller, velFactor = actor:GetController(), 1 + actor.Vel.Magnitude * 0.3; + local controller = actor:GetController(); + local velFactor = 1 + actor.Vel.Magnitude * 0.3; if actor.Status == Actor.STABLE and actor.FlipFactor ~= self.FlipFactor and not controller:IsState(Controller.BODY_JUMP) then - actor.Vel = actor.Vel * (1 - 1 / velFactor); + actor.Vel = actor.Vel * (1 - 1/velFactor); if controller:IsState(Controller.MOVE_LEFT) or controller:IsState(Controller.MOVE_RIGHT) then local speed = actor:GetLimbPathSpeed(1)/velFactor; actor.Vel = actor.Vel + Vector(speed/2, 0):RadRotate(actor:GetAimAngle(true)) - Vector(0, speed); From 09846a48e4822988c7e7056a127dcc494dc35957 Mon Sep 17 00:00:00 2001 From: 4zk Date: Fri, 14 Aug 2020 21:40:10 +0300 Subject: [PATCH 21/28] Changes requested by MaximDude --- Base.rte/Actors/Mecha/AIBox/AIBox.ini | 8 ++++---- Base.rte/Actors/Mecha/AIBox/MountMobile.bmp | Bin 1378 -> 1378 bytes .../Objects/Bunkers/BunkerBits/BunkerBits.ini | 5 +---- .../Bunkers/BunkerBits/Spikes/Spikes2XBG.bmp | Bin 2230 -> 2230 bytes .../Bunkers/BunkerBits/Spikes/Spikes2XFG.bmp | Bin 2230 -> 2230 bytes .../Bunkers/BunkerBits/Spikes/SpikesBG.bmp | Bin 1654 -> 1654 bytes .../Bunkers/BunkerBits/Spikes/SpikesFG.bmp | Bin 1654 -> 1654 bytes .../Bunkers/BunkerSystems/Ladders/Ladders.ini | 10 +++++----- Base.rte/Scenes/Objects/Bunkers/Bunkers.ini | 1 + 9 files changed, 11 insertions(+), 13 deletions(-) diff --git a/Base.rte/Actors/Mecha/AIBox/AIBox.ini b/Base.rte/Actors/Mecha/AIBox/AIBox.ini index ed7370726..89d2620b0 100644 --- a/Base.rte/Actors/Mecha/AIBox/AIBox.ini +++ b/Base.rte/Actors/Mecha/AIBox/AIBox.ini @@ -239,22 +239,22 @@ AddActor = ACrab LFGLeg = Leg CopyOf = AI Box Leg FG ParentOffset = Vector - X = -4 + X = -6 Y = 3 LBGLeg = Leg CopyOf = AI Box Leg BG ParentOffset = Vector - X = -6 + X = -4 Y = 2 RFGLeg = Leg CopyOf = AI Box Leg FG ParentOffset = Vector - X = 4 + X = 6 Y = 3 RBGLeg = Leg CopyOf = AI Box Leg BG ParentOffset = Vector - X = 6 + X = 4 Y = 2 LFootGroup = AtomGroup CopyOf = Crab Foot diff --git a/Base.rte/Actors/Mecha/AIBox/MountMobile.bmp b/Base.rte/Actors/Mecha/AIBox/MountMobile.bmp index 649e4f9547c3b196b49bdaf321dec7b4d5c09685..ecd91fe42a0e401d84272c718ff782e3946372f5 100644 GIT binary patch delta 146 zcmaFF^@wXjAj{++7O9}kUm1Xa5s1J3|GoLw_U&tbr~KRu5(9#-Kl#4@G>ZHFW9|3v zKR|*&b>F`J|NhJ9SKQCFKmLO>gS39z{Gajr_ix|7fB*X9`{cbWCL+Jjtv+{e`}UeM Z4?*T^{`vjq${&+iS>44z%F#hR0{~XnL0bR- delta 145 zcmaFF^@wXjAj{+c7U@6+82I}2|L@Jewr^ki`~POB*w>#w`M&=&iu?X!?f0MGA%fq& zef|Iam(j1dpKE{o{|Xb^{Gajr_ix|7fB*Vp@?I7bk!|NzpS!nxd(D}LAQhW`e*d|$ PdonAlyBI_R8Yv0@&`v+G diff --git a/Base.rte/Scenes/Objects/Bunkers/BunkerBits/BunkerBits.ini b/Base.rte/Scenes/Objects/Bunkers/BunkerBits/BunkerBits.ini index 7b24ac2b3..c7acef121 100644 --- a/Base.rte/Scenes/Objects/Bunkers/BunkerBits/BunkerBits.ini +++ b/Base.rte/Scenes/Objects/Bunkers/BunkerBits/BunkerBits.ini @@ -1186,7 +1186,4 @@ AddTerrainObject = TerrainObject CopyOf = Tut Tiny Flat Concrete Bit PresetName = Tiny Flat Concrete Bit AddToGroup = Bunker Odds & Ends - GoldValue = 5 - - -IncludeFile = Base.rte/Scenes/Objects/Bunkers/BunkerBits/Spikes/Spikes.ini \ No newline at end of file + GoldValue = 5 \ No newline at end of file diff --git a/Base.rte/Scenes/Objects/Bunkers/BunkerBits/Spikes/Spikes2XBG.bmp b/Base.rte/Scenes/Objects/Bunkers/BunkerBits/Spikes/Spikes2XBG.bmp index ba5b14698e2055570b41d0a1070dc952a555c5f8..e3149b942bfdd9f3dba6249bfaddf4a33a22cf69 100644 GIT binary patch delta 742 zcmbV|%?-jZ424|@iJlOhgjLumL*&Q=zHw<+NM#ry-Ghb;`LRpWHYy^QPkxF0p3^m5 zbAKHap+)MU&uGA8wcHy3vV$e~i;nw*VU7v|MM!jF@J>cj3++Px2FmA@^l47;QE`)n zu>{~?S;K7elD-be!B)W?dH?wj$i~~7I1V&&Kos)ef(|rb_+%O5-H9SLpe|D*F$4m9lRo&`yefj_(vrsqy delta 743 zcmbV|!41MN3`LEEL{Es0zye52m?1KSZ(Q0HVhKh__n_fI+}NdQh^Xl0$=|jAclx$( zZ_m9U^hgAh(Sgfq?K=SSgD3clLFSaa$M8ZG5`!ANl9AR*ztTT}@;x(l$$S+ h|9>(01L0W)W}&F<<8Zm&Iez?7cLVLN>FlXFz5%MGPXPb` diff --git a/Base.rte/Scenes/Objects/Bunkers/BunkerBits/Spikes/Spikes2XFG.bmp b/Base.rte/Scenes/Objects/Bunkers/BunkerBits/Spikes/Spikes2XFG.bmp index 4c284f09690ce29b785d06b7b0608abc992fa4e8..41e977f141f5b2ff555c142ea07bc8e4dd4d13bb 100644 GIT binary patch delta 656 zcma)2!41P845X^sy!yx%{a4v0YSl>?qFXcwAyrD3@D}_s0nZwPBMd_7hm#Nc?(B73 zM|VAGFxG%l3ejienz6?p1I~qZPV%1hZzlEw*9kQm%MTQ+jqfp7kB4pVmvcRy1CWm{ zHWwcSZzh@C*avOW<BlKfbx~U!=>U4&_GVnz7=^l%9_p&WD#9El=%K{DD8{flXEgsjcztpvOS%7_1 zc6m|Acs-PxYxCesntV)hTiBU3Pq^U8A8?Ep_&HrN4>9rv4`^OtAmDS1D1X6<=Qh$+ f82o9_zVJzn{~{+JB1^g-$fo?fZFfFQw!3@*v9$)! diff --git a/Base.rte/Scenes/Objects/Bunkers/BunkerBits/Spikes/SpikesBG.bmp b/Base.rte/Scenes/Objects/Bunkers/BunkerBits/Spikes/SpikesBG.bmp index 012d69c1e55029ff06a3c87b35f2e02d8c519698..d84e364bdb1ef2b21ee205bef6e26d92ff5e1ff4 100644 GIT binary patch delta 399 zcmeyy^NnZ243_#+EAOm4b%Nmp3Vob`;nbbGcTO?jrGG)?A@nbp`riSzV@9q42U4|d&1cwj+ diff --git a/Base.rte/Scenes/Objects/Bunkers/BunkerSystems/Ladders/Ladders.ini b/Base.rte/Scenes/Objects/Bunkers/BunkerSystems/Ladders/Ladders.ini index a275f3dda..80584be8a 100644 --- a/Base.rte/Scenes/Objects/Bunkers/BunkerSystems/Ladders/Ladders.ini +++ b/Base.rte/Scenes/Objects/Bunkers/BunkerSystems/Ladders/Ladders.ini @@ -97,7 +97,7 @@ AddActor = MOSRotating HitsMOs = 0 GetsHitByMOs = 0 SpriteFile = ContentFile - FilePath = Base.rte/Scenes/Objects/Bunkers/BunkerSystems/Ladders/LadderCFG.bmp + FilePath = Base.rte/Scenes/Objects/Bunkers/BunkerBackgrounds/Empty1XFG.bmp FrameCount = 1 SpriteOffset = Vector X = -12 @@ -157,9 +157,9 @@ AddTerrainObject = TerrainObject AddToGroup = Bunker Systems GoldValue = 10 FGColorFile = ContentFile - Path = Base.rte/Scenes/Objects/Bunkers/BunkerSystems/Ladders/LadderCFG.bmp + Path = Base.rte/Scenes/Objects/Bunkers/BunkerBackgrounds/Empty1XFG.bmp MaterialFile = ContentFile - Path = Base.rte/Scenes/Objects/Bunkers/BunkerSystems/Ladders/LadderCMat.bmp + Path = Base.rte/Scenes/Objects/Bunkers/BunkerBackgrounds/Empty1XMat.bmp BGColorFile = ContentFile Path = Base.rte/Scenes/Objects/Bunkers/BunkerSystems/Ladders/LadderCBG.bmp BitmapOffset = Vector @@ -177,9 +177,9 @@ AddTerrainObject = TerrainObject PresetName = Destroyed Background Ladder Buyable = 0 FGColorFile = ContentFile - Path = Base.rte/Scenes/Objects/Bunkers/BunkerSystems/Ladders/LadderCFG.bmp + Path = Base.rte/Scenes/Objects/Bunkers/BunkerBackgrounds/Empty1XFG.bmp MaterialFile = ContentFile - Path = Base.rte/Scenes/Objects/Bunkers/BunkerSystems/Ladders/LadderCMat.bmp + Path = Base.rte/Scenes/Objects/Bunkers/BunkerBackgrounds/Empty1XMat.bmp BGColorFile = ContentFile Path = Base.rte/Scenes/Objects/Bunkers/BunkerSystems/Ladders/LadderCBGDestroyed.bmp BitmapOffset = Vector diff --git a/Base.rte/Scenes/Objects/Bunkers/Bunkers.ini b/Base.rte/Scenes/Objects/Bunkers/Bunkers.ini index 86eeef3f3..2073e93da 100644 --- a/Base.rte/Scenes/Objects/Bunkers/Bunkers.ini +++ b/Base.rte/Scenes/Objects/Bunkers/Bunkers.ini @@ -5,6 +5,7 @@ // Bits and Pieces IncludeFile = Base.rte/Scenes/Objects/Bunkers/BunkerBits/BunkerBits.ini +IncludeFile = Base.rte/Scenes/Objects/Bunkers/BunkerBits/Spikes/Spikes.ini IncludeFile = Base.rte/Scenes/Objects/Bunkers/BunkerBackgrounds/BunkerBackgrounds.ini From 478a316f12f848682b7a1d463b602c9ae96c9c41 Mon Sep 17 00:00:00 2001 From: 4zk Date: Fri, 14 Aug 2020 21:41:45 +0300 Subject: [PATCH 22/28] Delete unused files --- .../Devices/Tools/Scanner/ScannerHeavy.lua | 56 ----------------- .../Devices/Tools/Scanner/ScannerLight.lua | 57 ------------------ .../Devices/Tools/Scanner/ScannerMedium.lua | 57 ------------------ .../BunkerSystems/Ladders/LadderCFG.bmp | Bin 1654 -> 0 bytes .../BunkerSystems/Ladders/LadderCMat.bmp | Bin 1654 -> 0 bytes 5 files changed, 170 deletions(-) delete mode 100644 Base.rte/Devices/Tools/Scanner/ScannerHeavy.lua delete mode 100644 Base.rte/Devices/Tools/Scanner/ScannerLight.lua delete mode 100644 Base.rte/Devices/Tools/Scanner/ScannerMedium.lua delete mode 100644 Base.rte/Scenes/Objects/Bunkers/BunkerSystems/Ladders/LadderCFG.bmp delete mode 100644 Base.rte/Scenes/Objects/Bunkers/BunkerSystems/Ladders/LadderCMat.bmp diff --git a/Base.rte/Devices/Tools/Scanner/ScannerHeavy.lua b/Base.rte/Devices/Tools/Scanner/ScannerHeavy.lua deleted file mode 100644 index deb0b4945..000000000 --- a/Base.rte/Devices/Tools/Scanner/ScannerHeavy.lua +++ /dev/null @@ -1,56 +0,0 @@ -function Create(self) - - self.ScanTimer = Timer(); - self.scanDelay = 100; - self.maxScanRange = 500; - self.scanDisruption = 300; - self.scanSpacing = 10; - - self.numberOfScans = 6; - self.scanSpreadAngle = 30; -- Degrees! - -end - -function Update(self) - - if self:IsActivated() then - if self.ScanTimer:IsPastSimMS(self.scanDelay) then - self.ScanTimer:Reset(); - local actor = MovableMan:GetMOFromID(self.RootID); - if MovableMan:IsActor(actor) then - self.parent = ToActor(actor); - for x = 1, self.numberOfScans do - local angleVariance = (-self.scanSpreadAngle*0.5) + (math.random()*self.scanSpreadAngle); - local terrHitCount = 0; - local dots = math.floor(self.maxScanRange/self.scanSpacing) - for i = 1, dots do - local checkPos = self.MuzzlePos + Vector((self.scanSpacing*i)*self.FlipFactor,0):RadRotate(self.RotAngle):DegRotate(angleVariance); - if SceneMan.SceneWrapsX == true then - if checkPos.X > SceneMan.SceneWidth then - checkPos = Vector(checkPos.X - SceneMan.SceneWidth,checkPos.Y); - elseif checkPos.X < 0 then - checkPos = Vector(SceneMan.SceneWidth + checkPos.X,checkPos.Y); - end - end - local terrCheck = SceneMan:GetTerrMatter(checkPos.X,checkPos.Y); - if terrCheck ~= rte.airID then - terrHitCount = terrHitCount + 1; - end - end - local scanLength = math.floor((self.maxScanRange-(self.scanDisruption*(terrHitCount/dots)))/self.scanSpacing); - for i = 1, scanLength do - local checkPos = self.MuzzlePos + Vector((self.scanSpacing*i)*self.FlipFactor,0):RadRotate(self.RotAngle):DegRotate(angleVariance); - if SceneMan.SceneWrapsX == true then - if checkPos.X > SceneMan.SceneWidth then - checkPos = Vector(checkPos.X - SceneMan.SceneWidth,checkPos.Y); - elseif checkPos.X < 0 then - checkPos = Vector(SceneMan.SceneWidth + checkPos.X,checkPos.Y); - end - end - SceneMan:RevealUnseen(checkPos.X,checkPos.Y,self.parent.Team); - end - end - end - end - end -end \ No newline at end of file diff --git a/Base.rte/Devices/Tools/Scanner/ScannerLight.lua b/Base.rte/Devices/Tools/Scanner/ScannerLight.lua deleted file mode 100644 index fa01518b4..000000000 --- a/Base.rte/Devices/Tools/Scanner/ScannerLight.lua +++ /dev/null @@ -1,57 +0,0 @@ -function Create(self) - - self.ScanTimer = Timer(); - self.scanDelay = 100; - self.maxScanRange = 300; - self.scanDisruption = 200; - self.scanSpacing = 10; - - self.numberOfScans = 2; - self.scanSpreadAngle = 10; -- Degrees! - -end - -function Update(self) - - if self:IsActivated() then - if self.ScanTimer:IsPastSimMS(self.scanDelay) then - self.ScanTimer:Reset(); - local actor = MovableMan:GetMOFromID(self.RootID); - if MovableMan:IsActor(actor) then - self.parent = ToActor(actor); - for x = 1, self.numberOfScans do - local angleVariance = (-self.scanSpreadAngle*0.5) + (math.random()*self.scanSpreadAngle); - local terrHitCount = 0; - local dots = math.floor(self.maxScanRange/self.scanSpacing) - for i = 1, dots do - local checkPos = self.MuzzlePos + Vector((self.scanSpacing*i)*self.FlipFactor,0):RadRotate(self.RotAngle):DegRotate(angleVariance); - if SceneMan.SceneWrapsX == true then - if checkPos.X > SceneMan.SceneWidth then - checkPos = Vector(checkPos.X - SceneMan.SceneWidth,checkPos.Y); - elseif checkPos.X < 0 then - checkPos = Vector(SceneMan.SceneWidth + checkPos.X,checkPos.Y); - end - end - local terrCheck = SceneMan:GetTerrMatter(checkPos.X,checkPos.Y); - if terrCheck ~= rte.airID then - terrHitCount = terrHitCount + 1; - end - end - local scanLength = math.floor((self.maxScanRange-(self.scanDisruption*(terrHitCount/dots)))/self.scanSpacing); - for i = 1, scanLength do - local checkPos = self.MuzzlePos + Vector((self.scanSpacing*i)*self.FlipFactor,0):RadRotate(self.RotAngle):DegRotate(angleVariance); - if SceneMan.SceneWrapsX == true then - if checkPos.X > SceneMan.SceneWidth then - checkPos = Vector(checkPos.X - SceneMan.SceneWidth,checkPos.Y); - elseif checkPos.X < 0 then - checkPos = Vector(SceneMan.SceneWidth + checkPos.X,checkPos.Y); - end - end - SceneMan:RevealUnseen(checkPos.X,checkPos.Y,self.parent.Team); - end - end - end - end - end - -end \ No newline at end of file diff --git a/Base.rte/Devices/Tools/Scanner/ScannerMedium.lua b/Base.rte/Devices/Tools/Scanner/ScannerMedium.lua deleted file mode 100644 index c64629607..000000000 --- a/Base.rte/Devices/Tools/Scanner/ScannerMedium.lua +++ /dev/null @@ -1,57 +0,0 @@ -function Create(self) - - self.ScanTimer = Timer(); - self.scanDelay = 100; - self.maxScanRange = 400; - self.scanDisruption = 250; - self.scanSpacing = 10; - - self.numberOfScans = 4; - self.scanSpreadAngle = 20; -- Degrees! - -end - -function Update(self) - - if self:IsActivated() then - if self.ScanTimer:IsPastSimMS(self.scanDelay) then - self.ScanTimer:Reset(); - local actor = MovableMan:GetMOFromID(self.RootID); - if MovableMan:IsActor(actor) then - self.parent = ToActor(actor); - for x = 1, self.numberOfScans do - local angleVariance = (-self.scanSpreadAngle*0.5) + (math.random()*self.scanSpreadAngle); - local terrHitCount = 0; - local dots = math.floor(self.maxScanRange/self.scanSpacing) - for i = 1, dots do - local checkPos = self.MuzzlePos + Vector((self.scanSpacing*i)*self.FlipFactor,0):RadRotate(self.RotAngle):DegRotate(angleVariance); - if SceneMan.SceneWrapsX == true then - if checkPos.X > SceneMan.SceneWidth then - checkPos = Vector(checkPos.X - SceneMan.SceneWidth,checkPos.Y); - elseif checkPos.X < 0 then - checkPos = Vector(SceneMan.SceneWidth + checkPos.X,checkPos.Y); - end - end - local terrCheck = SceneMan:GetTerrMatter(checkPos.X,checkPos.Y); - if terrCheck ~= rte.airID then - terrHitCount = terrHitCount + 1; - end - end - local scanLength = math.floor((self.maxScanRange-(self.scanDisruption*(terrHitCount/dots)))/self.scanSpacing); - for i = 1, scanLength do - local checkPos = self.MuzzlePos + Vector((self.scanSpacing*i)*self.FlipFactor,0):RadRotate(self.RotAngle):DegRotate(angleVariance); - if SceneMan.SceneWrapsX == true then - if checkPos.X > SceneMan.SceneWidth then - checkPos = Vector(checkPos.X - SceneMan.SceneWidth,checkPos.Y); - elseif checkPos.X < 0 then - checkPos = Vector(SceneMan.SceneWidth + checkPos.X,checkPos.Y); - end - end - SceneMan:RevealUnseen(checkPos.X,checkPos.Y,self.parent.Team); - end - end - end - end - end - -end \ No newline at end of file diff --git a/Base.rte/Scenes/Objects/Bunkers/BunkerSystems/Ladders/LadderCFG.bmp b/Base.rte/Scenes/Objects/Bunkers/BunkerSystems/Ladders/LadderCFG.bmp deleted file mode 100644 index 2c14f96c3e3d41f1ec203e7ae1980080f019ad7f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1654 zcmeH{eN0t#7{@=g){cwWEewu=c+H5zguJk*-$ij`434~nMAWfG=B37g7?%Z;11@1B z7KCDgnuWG>&WM*HVQ6p5tx(ZM)TZ85Ytakba*pQKxU9C@1M46E?0?VpJ#W9~`F_98 z^Lx(ORIuZA7LSK+14Hig|8NW1;`_{77cV!Q!h})E#565zyMbS(Lxg7wxl_-@ZCKoA z?38s2O1D}^849cyvC18)>W}i;!G3lhy~xm+ze!JyW2v4<$rBwv%k|_u}uKpsZz{ww`%hxvb;Pfjy-`8$bMxV)k-bt!>iigsa@XxRb> z&-Nxfwu5Q!!tfo!Tk!@@)a@l@-w8@~4^Y(E%cHGh_`8O9{MZCFLz8rlT%q>k-^m#N zi`U10!1wjEcr($`Eg}p2EGz0@dF?wa+cn0jo~x`Jo0Yni=u3YsOSEh(!E;U{PGci= z9i4Pu_>wC#zcCsLF(q*6x_CEmr7Q7lq8Ak5*=mVbo9OClOsAO#TAJ9>*~ON@llTXR zDgNvmUK;G^ey)6+bi{(tg0zMHE$C>oA}o4 znC%sK2j8UZ{ceiC8W6r=e7~OM$n1}38w{*QTlUcqKPjZ-DN>6wiLOc`t1_Q;uVzu$ zT2A`$LOe&x$Qo)uOVYWgHA(80+HF(nw&?CV$jF6Jf}tRquHnkpNi0nux2cF{->t;h zsFPo^gr`C{+S}@Rt7ku#E}bVBTtI-3@ae+0JSvjJH7iL@ zSdB_eqVK)qeDTo$fr(QD1E&S&2}!&mu}ZizJaObGoy}>n%$#_EYadi|{qzpzK7W~i z&c1>>CYm*ID@bt1l63!SQrE_l{@^+`s}x2KAK=N23Do7Kai%hvvD!2)?#y7aHJi(O z9^?B1B}~0t%J5S$j6UP$6JNY&8rW6|j_l=BKzs+qx29n%K=!@8z6qtrp)|L|DomA& zm9tfHY{_ZBh+2zFlb*=TxikYKx=8YDyvEbQlgaa?{aBA&Tl~HwA|fzEPs#k5GDnuo dpDnsU(VU;3CmasTy1LQO3`>_TWjK3yC&Sm*ckrskCRtJ2&M0&G%5iG}Vv!SMe-X1*axGf>h0 a*F6j$E Date: Fri, 14 Aug 2020 21:52:57 +0300 Subject: [PATCH 23/28] Minor changes --- Base.rte/AI/HumanBehaviors.lua | 6 +- Base.rte/AI/HumanFunctions.lua | 3 +- Base.rte/AI/NativeHumanAI.lua | 2 +- .../Actors/Infantry/GreenDummy/GreenDummy.ini | 8 +-- Base.rte/Actors/Mecha/AIBox/AIBox.ini | 2 +- Base.rte/Actors/Mecha/Medic/MedicDrone.ini | 2 +- Base.rte/Craft/DropShips/DropshipMK1.ini | 18 +++--- Base.rte/Craft/StorageCrate/Crate.ini | 2 +- .../AntiPersonnelMine/AntiPersonnelMine.ini | 8 +-- .../Explosives/AntiPersonnelMine/MineSet.lua | 13 ++--- .../ClusterMineBomb/ClusterMineBomb.ini | 8 +-- .../ClusterMineBomb/ClusterMineBomb.lua | 53 +++++++++--------- .../Explosives/NapalmBomb/NapalmBomb.ini | 8 +-- .../Explosives/StandardBomb/StandardBomb.ini | 4 +- Base.rte/Devices/Shared.ini | 2 +- Base.rte/Devices/Shared/Scripts/BurstFire.lua | 10 +++- .../Devices/Shared/Scripts/MuzzleSmokeLow.lua | 4 +- .../Devices/Shared/Scripts/RecoilTilt.lua | 4 +- .../Devices/Tools/Constructor/Constructor.lua | 12 ++-- .../Tools/Constructor/ConstructorCollect.lua | 2 +- .../Constructor/ConstructorCollectGold.lua | 2 +- .../Tools/Constructor/ConstructorMag.lua | 4 +- Base.rte/Devices/Tools/GrappleGun/Grapple.lua | 42 +++++++------- Base.rte/Devices/Tools/Scanner/Scanner.ini | 36 +----------- .../Weapons/BattleRifle/BattleRifle.ini | 2 +- .../Weapons/BattleRifle/BattleRifle000.bmp | Bin 1398 -> 1398 bytes .../Weapons/BattleRifle/BattleRifle001.bmp | Bin 1398 -> 1398 bytes Base.rte/Devices/Weapons/Pistol/Pistol000.bmp | Bin 1206 -> 1206 bytes Base.rte/Devices/Weapons/Pistol/Pistol001.bmp | Bin 1206 -> 1206 bytes Base.rte/Devices/Weapons/SMG/SMG.ini | 4 +- Base.rte/Devices/Weapons/SMG/SMG000.bmp | Bin 1278 -> 1278 bytes Base.rte/Devices/Weapons/SMG/SMG001.bmp | Bin 1278 -> 1278 bytes Base.rte/Devices/Weapons/Shotgun/Shotgun.ini | 4 +- Base.rte/Devices/Weapons/Shotgun/Shotgun.lua | 4 +- .../Devices/Weapons/Shotgun/Shotgun000.bmp | Bin 1342 -> 1342 bytes .../Devices/Weapons/Shotgun/Shotgun001.bmp | Bin 1342 -> 1342 bytes Base.rte/Effects.ini | 1 - Base.rte/Effects/Glows/FireGlow2.bmp | Bin 13722 -> 13254 bytes Base.rte/Effects/Pyro.ini | 24 ++++---- Base.rte/Effects/Pyro/FireBlastSmallB009.bmp | Bin 1186 -> 1186 bytes Base.rte/Effects/Pyro/FireBlastSmallB010.bmp | Bin 1186 -> 1186 bytes Base.rte/Effects/Pyro/FireBlastSmallB011.bmp | Bin 1186 -> 1186 bytes Base.rte/Effects/Pyro/FireBlastSmallB012.bmp | Bin 1186 -> 1186 bytes Base.rte/Effects/Pyro/FireBlastSmallB013.bmp | Bin 1186 -> 1186 bytes Base.rte/Effects/Pyro/FireBlastSmallB014.bmp | Bin 1186 -> 1186 bytes Base.rte/Effects/Pyro/FireBlastSmallB015.bmp | Bin 1186 -> 1186 bytes Base.rte/Effects/Pyro/FireBlastSmallB018.bmp | Bin 1186 -> 1186 bytes Base.rte/Effects/Pyro/Flame/Flame.lua | 2 +- Base.rte/Effects/Wounds.ini | 2 - Base.rte/Scripts/Shared/FlippedFrame.lua | 2 + Base.rte/Scripts/Shared/SmokeTrail.lua | 25 +++++---- 51 files changed, 154 insertions(+), 171 deletions(-) diff --git a/Base.rte/AI/HumanBehaviors.lua b/Base.rte/AI/HumanBehaviors.lua index 4d4ab738a..022169313 100644 --- a/Base.rte/AI/HumanBehaviors.lua +++ b/Base.rte/AI/HumanBehaviors.lua @@ -32,10 +32,10 @@ end -- spot targets by casting a ray in a random direction function HumanBehaviors.LookForTargets(AI, Owner, Skill) - local viewAngDeg = RangeRand(50, 120) * Owner.Perceptiveness * (0.5 + Skill / 200) + local viewAngDeg = RangeRand(50, 120) * Owner.Perceptiveness * (0.5 + Skill/200) if AI.deviceState == AHuman.AIMING then AI.Ctrl:SetState(Controller.AIM_SHARP, true) -- reinforce sharp aim controller state to enable SharpLength in LookForMOs - viewAngDeg = 15 * Owner.Perceptiveness + (Skill / 10) + viewAngDeg = 15 * Owner.Perceptiveness + (Skill/10) end local FoundMO = Owner:LookForMOs(viewAngDeg, rte.grassID, false) @@ -2143,13 +2143,13 @@ function HumanBehaviors.GetProjectileData(Owner) -- find muzzle velocity PrjDat.vel = Weapon:GetAIFireVel() -- half of the theoretical upper limit for the total amount of material strength this weapon can destroy in 250ms - PrjDat.pen = Weapon:GetAIPenetration() * math.max((Weapon.RateOfFire / 240), 1) PrjDat.g = SceneMan.GlobalAcc.Y * 0.67 * Weapon:GetBulletAccScalar() -- underestimate gravity PrjDat.vsq = PrjDat.vel^2 -- muzzle velocity squared PrjDat.vqu = PrjDat.vsq^2 -- muzzle velocity quad PrjDat.drg = 1 - Projectile.AirResistance * TimerMan.DeltaTimeSecs -- AirResistance is stored as the ini-value times 60 PrjDat.thr = math.min(Projectile.AirThreshold, PrjDat.vel) + PrjDat.pen = (Projectile.Mass * Projectile.Sharpness * PrjDat.vel) * PrjDat.drg -- estimate theoretical max range with ... local lifeTime = Weapon:GetAIBulletLifeTime() diff --git a/Base.rte/AI/HumanFunctions.lua b/Base.rte/AI/HumanFunctions.lua index dade274de..1369fa6a4 100644 --- a/Base.rte/AI/HumanFunctions.lua +++ b/Base.rte/AI/HumanFunctions.lua @@ -116,7 +116,6 @@ function HumanFunctions.DoVisibleInventory(actor, showAll) for i = 1, actor.InventorySize do local item = actor:Inventory(); if item then - local fixNum = actor.HFlipped and -1 or 0; --Fix offsets slightly when facing left if item.ClassName == "TDExplosive" then thrownCount = thrownCount + 1; elseif item.ClassName == "HDFirearm" or item.ClassName == "HeldDevice" then @@ -127,7 +126,7 @@ function HumanFunctions.DoVisibleInventory(actor, showAll) local isFirearm = item.ClassName == "HeldDevice" and 0 or 1; local actorSize, itemSize = math.sqrt(actor.Radius), math.sqrt(item.Radius + math.abs(item.Mass)); - fixNum = fixNum + item.Radius * 0.2 + math.sqrt(heldCount); + local fixNum = item.Radius * 0.2 + math.sqrt(heldCount); --Bigger actors carry weapons higher up, smaller weapons are carried lower down local drawPos = actor.Pos + Vector((-actorSize - fixNum) * actor.FlipFactor, -actorSize - itemSize + 1 + isFirearm * 3):RadRotate(actor.RotAngle); diff --git a/Base.rte/AI/NativeHumanAI.lua b/Base.rte/AI/NativeHumanAI.lua index aed21ea46..ae7673149 100644 --- a/Base.rte/AI/NativeHumanAI.lua +++ b/Base.rte/AI/NativeHumanAI.lua @@ -543,7 +543,7 @@ function NativeHumanAI:Update(Owner) end elseif not self.Target and not self.UnseenTarget then -- use medikit if not engaging enemy - if Owner.Health < (Owner.MaxHealth / 2) then + if Owner.Health < (Owner.MaxHealth/2) then if Owner:HasObject("Medikit") then self.useMedikit = Owner:EquipNamedDevice("Medikit", true) diff --git a/Base.rte/Actors/Infantry/GreenDummy/GreenDummy.ini b/Base.rte/Actors/Infantry/GreenDummy/GreenDummy.ini index bc8f7460e..50205edd9 100644 --- a/Base.rte/Actors/Infantry/GreenDummy/GreenDummy.ini +++ b/Base.rte/Actors/Infantry/GreenDummy/GreenDummy.ini @@ -832,10 +832,10 @@ AddActor = AHuman WalkLimbPath = LimbPath CopyOf = Human Walk Path PresetName = Green Dummy Walk Path - SlowTravelSpeed = 1.5 - NormalTravelSpeed = 3.5 - FastTravelSpeed = 4.5 - PushForce = 8000 + StartOffset = Vector + X = 6 + Y = -3 + NormalTravelSpeed = 3.4 CrouchLimbPath = LimbPath CopyOf = Human Crouch Path CrawlLimbPath = LimbPath diff --git a/Base.rte/Actors/Mecha/AIBox/AIBox.ini b/Base.rte/Actors/Mecha/AIBox/AIBox.ini index 89d2620b0..0cba5323f 100644 --- a/Base.rte/Actors/Mecha/AIBox/AIBox.ini +++ b/Base.rte/Actors/Mecha/AIBox/AIBox.ini @@ -219,7 +219,7 @@ AddActor = ACrab Health = 100 ImpulseDamageThreshold = 5000 AimAngle = 0 - AimRange = 1.5 + AimRange = 1.57 AimDistance = 30 Perceptiveness = 0.1 CharHeight = 100 diff --git a/Base.rte/Actors/Mecha/Medic/MedicDrone.ini b/Base.rte/Actors/Mecha/Medic/MedicDrone.ini index a7da870a4..520e74656 100644 --- a/Base.rte/Actors/Mecha/Medic/MedicDrone.ini +++ b/Base.rte/Actors/Mecha/Medic/MedicDrone.ini @@ -218,7 +218,7 @@ AddActor = ACrab Health = 100 ImpulseDamageThreshold = 5000 AimAngle = 0 - AimRange = 1.5 + AimRange = 1.57 AimDistance = 30 Perceptiveness = 0.1 CharHeight = 100 diff --git a/Base.rte/Craft/DropShips/DropshipMK1.ini b/Base.rte/Craft/DropShips/DropshipMK1.ini index 170d9d8b3..e2aaf7599 100644 --- a/Base.rte/Craft/DropShips/DropshipMK1.ini +++ b/Base.rte/Craft/DropShips/DropshipMK1.ini @@ -788,7 +788,7 @@ AddEffect = MOSRotating AddEffect = AEmitter PresetName = Dropship Engine A Left - Mass = 600 + Mass = 300 HitsMOs = 1 GetsHitByMOs = 1 SpriteFile = ContentFile @@ -830,13 +830,13 @@ AddEffect = AEmitter EmittedParticle = MOPixel CopyOf = Jet Air Blast Spread = 0.15 - MaxVelocity = 45 + MaxVelocity = 40 MinVelocity = 30 AddEmission = Emission EmittedParticle = MOPixel CopyOf = Jet Air Blast 2 Spread = 0.25 - MaxVelocity = 45 + MaxVelocity = 40 MinVelocity = 30 EmissionSound = SoundContainer AddSound = ContentFile @@ -1028,7 +1028,7 @@ AddEffect = AEmitter AddEffect = AEmitter PresetName = Dropship Engine A Right - Mass = 600 + Mass = 300 HitsMOs = 1 GetsHitByMOs = 1 SpriteFile = ContentFile @@ -1067,13 +1067,13 @@ AddEffect = AEmitter EmittedParticle = MOPixel CopyOf = Jet Air Blast Spread = 0.15 - MaxVelocity = 45 + MaxVelocity = 40 MinVelocity = 30 AddEmission = Emission EmittedParticle = MOPixel CopyOf = Jet Air Blast 2 Spread = 0.25 - MaxVelocity = 45 + MaxVelocity = 40 MinVelocity = 30 EmissionSound = SoundContainer AddSound = ContentFile @@ -1437,7 +1437,7 @@ AddActor = ACDropShip Description = Trade Star's reliable and safe dropship. Its tough armor can withstand numerous hits while delivering or transporting troops to the field. Its powerful thrusters allow it to carry even very heavy loads. Equipped with two underslung machine gun turrets. AddToGroup = Craft Mass = 2400 - MaxMass = 3600 + MaxMass = 3700 MaxPassengers = 3 HitsMOs = 1 GetsHitByMOs = 1 @@ -1493,13 +1493,13 @@ AddActor = ACDropShip ParentOffset = Vector X = -49 Y = -3 - Mass = 100 +// Mass = 100 RThruster = AEmitter CopyOf = Dropship Engine A Right ParentOffset = Vector X = 49 Y = -3 - Mass = 100 +// Mass = 100 URThruster = AEmitter CopyOf = Dropship Retro Thruster ParentOffset = Vector diff --git a/Base.rte/Craft/StorageCrate/Crate.ini b/Base.rte/Craft/StorageCrate/Crate.ini index dbdb85cb8..9b5ca3508 100644 --- a/Base.rte/Craft/StorageCrate/Crate.ini +++ b/Base.rte/Craft/StorageCrate/Crate.ini @@ -238,7 +238,7 @@ AddActor = ACRocket CopyOf = Crate PresetName = Drop Crate ScriptPath = Base.rte/Craft/StorageCrate/DropCrate.lua - Description = Quick drop from an orbiting station in a strong metal crate and amazing cushions to preserve the contents that would usually never survive an orbital drop. Organic contents may suffer mild bruising. + Description = Quick drop from an orbiting station in a strong metal crate and amazing cushions to preserve the contents that would usually never survive an orbital drop. Organic contents may suffer from mild blunt trauma. AddToGroup = Craft - Crates Velocity = Vector X = 0 diff --git a/Base.rte/Devices/Explosives/AntiPersonnelMine/AntiPersonnelMine.ini b/Base.rte/Devices/Explosives/AntiPersonnelMine/AntiPersonnelMine.ini index 8bb32b57f..76fcdefff 100644 --- a/Base.rte/Devices/Explosives/AntiPersonnelMine/AntiPersonnelMine.ini +++ b/Base.rte/Devices/Explosives/AntiPersonnelMine/AntiPersonnelMine.ini @@ -158,7 +158,7 @@ AddEffect = MOSRotating AddDevice = TDExplosive PresetName = Anti Personnel Mine AddToGroup = Bombs - Description = A plantable mine that detonates when enemy movement interrupts its laser. Disarm with the Disarmer. This mine must be activated before it can detect enemies! + Description = A plantable explosive that detonates when enemy movement interrupts its laser. Disarm with the Disarmer. This mine must be activated before it can detect enemies! Mass = 3 RestThreshold = -500 HitsMOs = 0 @@ -190,13 +190,13 @@ AddDevice = TDExplosive DeepCheck = 0 JointStrength = 40 JointStiffness = 0.5 - DrawAfterParent = 1 + DrawAfterParent = 0 StanceOffset = Vector X = 4 Y = 4 StartThrowOffset = Vector - X = 7 - Y = 2 + X = 9 + Y = -2 EndThrowOffset = Vector X = 4 Y = 4 diff --git a/Base.rte/Devices/Explosives/AntiPersonnelMine/MineSet.lua b/Base.rte/Devices/Explosives/AntiPersonnelMine/MineSet.lua index 08b81e521..a79498d61 100644 --- a/Base.rte/Devices/Explosives/AntiPersonnelMine/MineSet.lua +++ b/Base.rte/Devices/Explosives/AntiPersonnelMine/MineSet.lua @@ -47,16 +47,16 @@ function Update(self) local trace = Vector(self.Vel.X, self.Vel.Y):SetMagnitude(self.Radius + self.Vel.Magnitude); local rayHitPos = Vector(); - local terrainRaycast = SceneMan:CastStrengthRay(self.Pos, trace, 5, rayHitPos, 0, 0, SceneMan.SceneWrapsX); + local terrainRaycast = SceneMan:CastStrengthRay(self.Pos, trace, 5, rayHitPos, 0, rte.airID, SceneMan.SceneWrapsX); if terrainRaycast == true then trace = Vector(trace.X, trace.Y):SetMagnitude(trace.Magnitude + 5); local rayHitPosA = Vector(); - local terrainRaycastA = SceneMan:CastStrengthRay(self.Pos + Vector(0, 3):RadRotate(Vector(self.Vel.X,self.Vel.Y).AbsRadAngle), trace, 5, rayHitPosA, 0, 0, SceneMan.SceneWrapsX); + local terrainRaycastA = SceneMan:CastStrengthRay(self.Pos + Vector(0, 3):RadRotate(Vector(self.Vel.X,self.Vel.Y).AbsRadAngle), trace, 5, rayHitPosA, 0, rte.airID, SceneMan.SceneWrapsX); local rayHitPosB = Vector(); - local terrainRaycastB = SceneMan:CastStrengthRay(self.Pos + Vector(0, -3):RadRotate(Vector(self.Vel.X,self.Vel.Y).AbsRadAngle), trace, 5, rayHitPosB, 0, 0, SceneMan.SceneWrapsX); + local terrainRaycastB = SceneMan:CastStrengthRay(self.Pos + Vector(0, -3):RadRotate(Vector(self.Vel.X,self.Vel.Y).AbsRadAngle), trace, 5, rayHitPosB, 0, rte.airID, SceneMan.SceneWrapsX); if terrainRaycastA == true and terrainRaycastB == true then self.faceDirection = SceneMan:ShortestDistance(rayHitPosA, rayHitPosB, SceneMan.SceneWrapsX).AbsRadAngle + (math.pi/2); @@ -99,17 +99,16 @@ function Update(self) local rayHitPos = Vector(); local startPos = self.Pos + Vector(self.Radius, 0):RadRotate(detectionAngle); - local terrainRaycast = SceneMan:CastStrengthRay(startPos, Vector(self.laserLength, 0):RadRotate(detectionAngle), 10, rayHitPos, 1, 0, SceneMan.SceneWrapsX); + local terrainRaycast = SceneMan:CastStrengthRay(startPos, Vector(self.laserLength, 0):RadRotate(detectionAngle), 10, rayHitPos, 1, rte.airID, SceneMan.SceneWrapsX); if terrainRaycast == true then self.tempLaserLength = SceneMan:ShortestDistance(startPos,rayHitPos,SceneMan.SceneWrapsX).Magnitude; else self.tempLaserLength = self.laserLength; end - local raycast = SceneMan:CastMORay(startPos,Vector(self.tempLaserLength, 0):RadRotate(detectionAngle),self.ID,self.alliedTeam, 0, true, 4); + local raycast = SceneMan:CastMORay(startPos,Vector(self.tempLaserLength, 0):RadRotate(detectionAngle), self.ID, self.alliedTeam, rte.airID, true, 4); if raycast ~= rte.NoMOID then - local targetpart = ToMOSRotating(MovableMan:GetMOFromID(raycast)); - local target = ToMOSRotating(MovableMan:GetMOFromID(targetpart.RootID)); + local target = ToMOSRotating(MovableMan:GetMOFromID(raycast)):GetRootParent(); if not (target.Team == self.alliedTeam and IsActor(target)) and (target.Vel.Magnitude * (1 + math.abs(target.AngularVel) + math.sqrt(target.Radius))) > self.detonateThreshold then self.actionPhase = 2; self.blink = false; diff --git a/Base.rte/Devices/Explosives/ClusterMineBomb/ClusterMineBomb.ini b/Base.rte/Devices/Explosives/ClusterMineBomb/ClusterMineBomb.ini index d77a80d3d..4df062045 100644 --- a/Base.rte/Devices/Explosives/ClusterMineBomb/ClusterMineBomb.ini +++ b/Base.rte/Devices/Explosives/ClusterMineBomb/ClusterMineBomb.ini @@ -126,7 +126,7 @@ AddDevice = TDExplosive DeepCheck = 0 JointStrength = 40 JointStiffness = 0.5 - DrawAfterParent = 1 + DrawAfterParent = 0 DetonationSound = SoundContainer AddSound = ContentFile Path = Base.rte/Devices/Explosives/NapalmBomb/Sounds/NapalmBombExplode.wav @@ -134,13 +134,13 @@ AddDevice = TDExplosive X = 4 Y = 4 StartThrowOffset = Vector - X = 5 - Y = 1 + X = 6 + Y = -7 EndThrowOffset = Vector X = 4 Y = 4 MinThrowVel = 1 - MaxThrowVel = 10 + MaxThrowVel = 8 TriggerDelay = 5000 ActivatesWhenReleased = 1 AddGib = Gib diff --git a/Base.rte/Devices/Explosives/ClusterMineBomb/ClusterMineBomb.lua b/Base.rte/Devices/Explosives/ClusterMineBomb/ClusterMineBomb.lua index 51c51b438..93e7ae0be 100644 --- a/Base.rte/Devices/Explosives/ClusterMineBomb/ClusterMineBomb.lua +++ b/Base.rte/Devices/Explosives/ClusterMineBomb/ClusterMineBomb.lua @@ -2,7 +2,7 @@ function Create(self) self.alliedTeam = -1; self.lastAngle = self.RotAngle; - self.lastVel = Vector(self.Vel.X,self.Vel.Y); + self.lastVel = Vector(self.Vel.X, self.Vel.Y); self.deployRange = 100; @@ -12,31 +12,33 @@ end function Update(self) self.lastAngle = self.RotAngle; - self.lastVel = Vector(self.Vel.X,self.Vel.Y); + self.lastVel = Vector(self.Vel.X, self.Vel.Y); - if self.ID == self.RootID and self.alliedTeam == -1 then - self.curdist = 500; - for actor in MovableMan.Actors do - local dist = SceneMan:ShortestDistance(self.Pos,actor.Pos,SceneMan.SceneWrapsX).Magnitude; - if dist < self.curdist then - self.curdist = dist; - self.alliedTeam = ToActor(actor).Team; + if not self:GetParent() then + if self.alliedTeam == -1 then + self.curdist = 500; + for actor in MovableMan.Actors do + local dist = SceneMan:ShortestDistance(self.Pos, actor.Pos, SceneMan.SceneWrapsX).Magnitude - actor.Radius; + if dist < self.curdist then + self.curdist = dist; + self.alliedTeam = ToActor(actor).Team; + end end end - end - local rayHitPos = Vector(); - local terrainRaycast = SceneMan:CastStrengthRay(self.Pos, Vector(self.Vel.X,self.Vel.Y):SetMagnitude(self.Radius + self.deployRange + self.Vel.Magnitude),0,rayHitPos,0,0,SceneMan.SceneWrapsX); + local rayHitPos = Vector(); + local terrainRaycast = SceneMan:CastStrengthRay(self.Pos, Vector(self.Vel.X, self.Vel.Y):SetMagnitude(self.Radius + self.deployRange + self.Vel.Magnitude), 0, rayHitPos, 1, rte.airID, SceneMan.SceneWrapsX); - if terrainRaycast == true then - local spread = 3; - for i = 1, self.mineCount do - local mine = CreateMOSRotating("Anti Personnel Mine Active"); - mine.Pos = self.Pos; - mine.Vel = self.Vel /2 + Vector(self.Vel.X, self.Vel.Y):RadRotate(spread * 0.6 - (spread * (i / self.mineCount)) + RangeRand(-0.1, 0.1)):SetMagnitude(20); - mine.Sharpness = self.alliedTeam; - MovableMan:AddParticle(mine); - self:GibThis(); + if terrainRaycast == true then + local spread = 3; + for i = 1, self.mineCount do + local mine = CreateMOSRotating("Anti Personnel Mine Active"); + mine.Pos = self.Pos; + mine.Vel = self.Vel/2 + Vector(self.Vel.X, self.Vel.Y):RadRotate(spread * 0.6 - (spread * (i/self.mineCount)) + RangeRand(-0.1, 0.1)):SetMagnitude(20); + mine.Sharpness = self.alliedTeam; + MovableMan:AddParticle(mine); + self:GibThis(); + end end end end @@ -50,17 +52,16 @@ function Destroy(self) MovableMan:AddParticle(gibA); local gibB = CreateMOSRotating("Cluster Mine Bomb Gib B"); - gibB.Pos = self.Pos + Vector(1,-3):RadRotate(self.lastAngle); - gibB.Vel = self.Vel + Vector(0,20):RadRotate(self.lastAngle); + gibB.Pos = self.Pos + Vector(1, -3):RadRotate(self.lastAngle); + gibB.Vel = self.Vel + Vector(0, 20):RadRotate(self.lastAngle); gibB.AngularVel = 10; gibB.RotAngle = self.lastAngle; MovableMan:AddParticle(gibB); local gibC = CreateMOSRotating("Cluster Mine Bomb Gib C"); - gibC.Pos = self.Pos + Vector(1,3):RadRotate(self.lastAngle); - gibC.Vel = self.Vel + Vector(0,-20):RadRotate(self.lastAngle); + gibC.Pos = self.Pos + Vector(1, 3):RadRotate(self.lastAngle); + gibC.Vel = self.Vel + Vector(0, -20):RadRotate(self.lastAngle); gibC.AngularVel = -10; gibC.RotAngle = self.lastAngle; MovableMan:AddParticle(gibC); - end \ No newline at end of file diff --git a/Base.rte/Devices/Explosives/NapalmBomb/NapalmBomb.ini b/Base.rte/Devices/Explosives/NapalmBomb/NapalmBomb.ini index d287a169c..63632f603 100644 --- a/Base.rte/Devices/Explosives/NapalmBomb/NapalmBomb.ini +++ b/Base.rte/Devices/Explosives/NapalmBomb/NapalmBomb.ini @@ -161,20 +161,20 @@ AddDevice = TDExplosive DeepCheck = 0 JointStrength = 40 JointStiffness = 0.5 - DrawAfterParent = 1 + DrawAfterParent = 0 DetonationSound = SoundContainer CopyOf = Crash Woosh StanceOffset = Vector X = 4 Y = 4 StartThrowOffset = Vector - X = 5 - Y = 1 + X = 6 + Y = -7 EndThrowOffset = Vector X = 4 Y = 4 MinThrowVel = 1 - MaxThrowVel = 10 + MaxThrowVel = 8 TriggerDelay = 5000 ActivatesWhenReleased = 1 AddGib = Gib diff --git a/Base.rte/Devices/Explosives/StandardBomb/StandardBomb.ini b/Base.rte/Devices/Explosives/StandardBomb/StandardBomb.ini index 2f4272f86..8a86644ff 100644 --- a/Base.rte/Devices/Explosives/StandardBomb/StandardBomb.ini +++ b/Base.rte/Devices/Explosives/StandardBomb/StandardBomb.ini @@ -38,7 +38,7 @@ AddDevice = TDExplosive DeepCheck = 0 JointStrength = 40 JointStiffness = 0.5 - DrawAfterParent = 1 + DrawAfterParent = 0 DetonationSound = SoundContainer AddSound = ContentFile Path = Base.rte/Sounds/Explosions/Explode1.wav @@ -51,7 +51,7 @@ AddDevice = TDExplosive Y = 4 StartThrowOffset = Vector X = 5 - Y = 1 + Y = -8 EndThrowOffset = Vector X = 4 Y = 4 diff --git a/Base.rte/Devices/Shared.ini b/Base.rte/Devices/Shared.ini index 3609ef9fa..0e64879b4 100644 --- a/Base.rte/Devices/Shared.ini +++ b/Base.rte/Devices/Shared.ini @@ -82,7 +82,7 @@ AddAmmo = Round R = 155 G = 155 B = 155 - TrailLength = 25 + TrailLength = 30 Shell = MOSParticle CopyOf = Casing FireVelocity = 110 diff --git a/Base.rte/Devices/Shared/Scripts/BurstFire.lua b/Base.rte/Devices/Shared/Scripts/BurstFire.lua index 1778e1b8f..cbcf95bae 100644 --- a/Base.rte/Devices/Shared/Scripts/BurstFire.lua +++ b/Base.rte/Devices/Shared/Scripts/BurstFire.lua @@ -5,13 +5,19 @@ end function Update(self) if self.Magazine then if self.coolDownTimer then - local parent = self:GetRootParent(); - if self.coolDownTimer:IsPastSimMS(self.coolDownDelay) and parent and IsActor(parent) and not (self:IsActivated() and ToActor(parent):IsPlayerControlled()) then + if self.coolDownTimer:IsPastSimMS(self.coolDownDelay) and not (self:IsActivated() and self.triggerPulled) then self.coolDownTimer, self.shotCounter = nil; else self:Deactivate(); + local parent = self:GetRootParent(); + if parent and IsActor(parent) and not ToActor(parent):IsPlayerControlled() then + self.triggerPulled = false; + end end elseif self.shotCounter then + + self.triggerPulled = self:IsActivated(); + self:Activate(); if self.FiredFrame then self.shotCounter = self.shotCounter + 1; diff --git a/Base.rte/Devices/Shared/Scripts/MuzzleSmokeLow.lua b/Base.rte/Devices/Shared/Scripts/MuzzleSmokeLow.lua index 59e744fb1..9bf7210dc 100644 --- a/Base.rte/Devices/Shared/Scripts/MuzzleSmokeLow.lua +++ b/Base.rte/Devices/Shared/Scripts/MuzzleSmokeLow.lua @@ -1,7 +1,7 @@ function Create(self) self.minSmokeCount = 1; self.maxSmokeCount = 3; - self.spread = 0.2; + self.smokeSpread = math.rad(self.ParticleSpreadRange) + 0.1; end function Update(self) if self.FiredFrame then @@ -10,7 +10,7 @@ function Update(self) for i = 1, smokeCount do local smokefx = CreateMOSParticle("Tiny Smoke Ball 1"); smokefx.Pos = self.MuzzlePos; - smokefx.Vel = Vector(i * self.FlipFactor, 0):RadRotate(self.RotAngle + (math.random() * self.spread) - (self.spread/2)); + smokefx.Vel = Vector(i * self.FlipFactor, 0):RadRotate(self.RotAngle + (math.random() * self.smokeSpread) - (self.smokeSpread/2)); MovableMan:AddParticle(smokefx); end end diff --git a/Base.rte/Devices/Shared/Scripts/RecoilTilt.lua b/Base.rte/Devices/Shared/Scripts/RecoilTilt.lua index bbeaf5d5c..53c71c7dd 100644 --- a/Base.rte/Devices/Shared/Scripts/RecoilTilt.lua +++ b/Base.rte/Devices/Shared/Scripts/RecoilTilt.lua @@ -10,9 +10,9 @@ function Update(self) end end if self.FiredFrame then - self.setAngle = self.setAngle + (self.tilt/(1 + self.setAngle) * math.random()); + self.setAngle = self.setAngle + (self.tilt * RangeRand(0.1, 1))/(1 + self.setAngle); end - self.RotAngle = self.RotAngle + self.setAngle * self.FlipFactor; + self.RotAngle = self.RotAngle + (self.setAngle * self.FlipFactor); local jointOffset = Vector(self.JointOffset.X * self.FlipFactor, self.JointOffset.Y):RadRotate(self.RotAngle); self.Pos = self.Pos - jointOffset + Vector(jointOffset.X, jointOffset.Y):RadRotate(-self.setAngle * self.FlipFactor); end \ No newline at end of file diff --git a/Base.rte/Devices/Tools/Constructor/Constructor.lua b/Base.rte/Devices/Tools/Constructor/Constructor.lua index a98610f81..412c35582 100644 --- a/Base.rte/Devices/Tools/Constructor/Constructor.lua +++ b/Base.rte/Devices/Tools/Constructor/Constructor.lua @@ -11,7 +11,7 @@ function OnPieMenu(item) end function ConstructorWrapPos(checkPos) - if SceneMan.SceneWrapsX == true then + if SceneMan.SceneWrapsX then if checkPos.X > SceneMan.SceneWidth then checkPos = Vector(checkPos.X - SceneMan.SceneWidth,checkPos.Y); elseif checkPos.X < 0 then @@ -491,7 +491,7 @@ function Update(self) self.buildTimer:Reset(); for i = 1, buildamount do if self.resource > self.buildcost then - if self.buildlist[1] ~= nil then + if self.buildlist[1] then if SceneMan:ShortestDistance(actor.Pos, Vector(self.buildlist[1][1],self.buildlist[1][2]), SceneMan.SceneWrapsX).Magnitude < self.builddistance then @@ -502,16 +502,17 @@ function Update(self) by = by*3-1; bx = bx*3-1; - PrimitiveMan:DrawLinePrimitive(screen, self.Pos, self.Pos + SceneMan:ShortestDistance(self.Pos, Vector(bx+self.buildlist[1][1]+2,by+self.buildlist[1][2]+2), SceneMan.SceneWrapsX ), displayColorBlue); + local bpos = self.Pos + SceneMan:ShortestDistance(self.Pos, Vector(bx+self.buildlist[1][1]+2,by+self.buildlist[1][2]+2), SceneMan.SceneWrapsX); + PrimitiveMan:DrawLinePrimitive(screen, self.Pos, bpos, displayColorBlue); PrimitiveMan:DrawBoxFillPrimitive(screen, Vector(bx+self.buildlist[1][1]+1,by+self.buildlist[1][2]+1),Vector(bx+self.buildlist[1][1]+3,by+self.buildlist[1][2]+3), displayColorWhite); for x = 1, 3 do for y = 1, 3 do local name = ""; if bx+x == 0 or bx+x == 23 or by+y == 0 or by+y == 23 then - name = "Particle Constructor Concrete Border "..(math.floor(math.random()*4)+1); + name = "Particle Constructor Concrete Border "..math.random(4); else - name = "Particle Constructor Concrete "..(math.floor(math.random()*13)+1); + name = "Particle Constructor Concrete "..math.random(13); end local terrainpar = CreateMOPixel(name); terrainpar.Pos = ConstructorWrapPos(Vector(bx+self.buildlist[1][1]+x,by+self.buildlist[1][2]+y)); @@ -519,6 +520,7 @@ function Update(self) terrainpar.ToSettle = true; end end + AudioMan:PlaySound("Base.rte/Sounds/Geiger".. math.random(3) ..".wav", bpos); self.buildlist[1][3] = self.buildlist[1][3] + 1; else self.buildlist[1] = nil; diff --git a/Base.rte/Devices/Tools/Constructor/ConstructorCollect.lua b/Base.rte/Devices/Tools/Constructor/ConstructorCollect.lua index a7cfd62b1..92d81ff2d 100644 --- a/Base.rte/Devices/Tools/Constructor/ConstructorCollect.lua +++ b/Base.rte/Devices/Tools/Constructor/ConstructorCollect.lua @@ -18,7 +18,7 @@ end function Update(self) self.ToSettle = false; - if self.target ~= nil and self.target.ID ~= 255 then + if self.target and self.target.ID ~= rte.NoMOID then local dist = SceneMan:ShortestDistance(self.Pos, self.target.Pos, SceneMan.SceneWrapsX); if dist.Magnitude > self.speed then self.Vel = Vector(dist.X,dist.Y):SetMagnitude(self.speed); diff --git a/Base.rte/Devices/Tools/Constructor/ConstructorCollectGold.lua b/Base.rte/Devices/Tools/Constructor/ConstructorCollectGold.lua index 1ed4c3272..2aef44482 100644 --- a/Base.rte/Devices/Tools/Constructor/ConstructorCollectGold.lua +++ b/Base.rte/Devices/Tools/Constructor/ConstructorCollectGold.lua @@ -20,7 +20,7 @@ end function Update(self) self.ToSettle = false; - if self.target ~= nil and self.target.ID ~= 255 then + if self.target and self.target.ID ~= rte.NoMOID then local dist = SceneMan:ShortestDistance(self.Pos, self.target.Pos, SceneMan.SceneWrapsX); self.Vel = Vector(dist.X,dist.Y):SetMagnitude(self.speed); end diff --git a/Base.rte/Devices/Tools/Constructor/ConstructorMag.lua b/Base.rte/Devices/Tools/Constructor/ConstructorMag.lua index b78404032..4fb1176d3 100644 --- a/Base.rte/Devices/Tools/Constructor/ConstructorMag.lua +++ b/Base.rte/Devices/Tools/Constructor/ConstructorMag.lua @@ -5,8 +5,8 @@ end function Update(self) - self.Mass = 1 + self.RoundCount / (self.maxresource / 100); -- full mag is 101kg - self.Scale = 0.5 + (self.RoundCount / self.maxresource) * 0.5; + self.Mass = 1 + self.RoundCount/(self.maxresource/100); --Full mag is 101kg + self.Scale = 0.5 + (self.RoundCount/self.maxresource)/2; local fixNum = self.HFlipped and -1 or 0; diff --git a/Base.rte/Devices/Tools/GrappleGun/Grapple.lua b/Base.rte/Devices/Tools/GrappleGun/Grapple.lua index 5fbf5fb10..2ef1765f4 100644 --- a/Base.rte/Devices/Tools/GrappleGun/Grapple.lua +++ b/Base.rte/Devices/Tools/GrappleGun/Grapple.lua @@ -44,7 +44,7 @@ function Create(self) self.parentGun:RemoveNumberValue("GrappleMode"); for part in self.parent.Attachables do local radcheck = SceneMan:ShortestDistance(self.parent.Pos, part.Pos, self.mapWrapsX).Magnitude + part.Radius; - if self.parentRadius == nil or (self.parentRadius ~= nil and radcheck > self.parentRadius) then + if self.parentRadius == nil or radcheck > self.parentRadius then self.parentRadius = radcheck; end end @@ -121,7 +121,7 @@ function Update(self) end -- Prevent the user from spinning like crazy if self.parent.Status > 0 then - self.parent.AngularVel = self.parent.AngularVel / (1 + math.abs(self.parent.AngularVel) * 0.01); + self.parent.AngularVel = self.parent.AngularVel/(1 + math.abs(self.parent.AngularVel) * 0.01); end else -- If the gun is by itself, hide the HUD self.parentGun.HUDVisible = false; @@ -154,10 +154,10 @@ function Update(self) local length = math.sqrt(self.Diameter + self.Vel.Magnitude); -- Detect terrain and stick if found local ray = Vector(length, 0):RadRotate(self.Vel.AbsRadAngle); - if SceneMan:CastStrengthRay(self.Pos, ray, 0, self.rayVec, 0, 0, self.mapWrapsX) then + if SceneMan:CastStrengthRay(self.Pos, ray, 0, self.rayVec, 0, rte.airID, self.mapWrapsX) then self.actionMode = 2; else -- Detect MOs and stick if found - local moRay = SceneMan:CastMORay(self.Pos, ray, self.parent.ID, -2, 0, false, 0); + local moRay = SceneMan:CastMORay(self.Pos, ray, self.parent.ID, -2, rte.airID, false, 0); if moRay ~= rte.NoMOID then self.target = MovableMan:GetMOFromID(moRay); -- Treat pinned MOs as terrain @@ -199,16 +199,16 @@ function Update(self) end self.Pos = movetopos; - local pullamountnumber = math.abs(-self.lineVec.AbsRadAngle + self.Vel.AbsRadAngle) / 6.28; + local pullamountnumber = math.abs(-self.lineVec.AbsRadAngle + self.Vel.AbsRadAngle)/6.28; self.Vel = self.Vel - self.lineVec:SetMagnitude(self.Vel.Magnitude * pullamountnumber); end elseif self.actionMode > 1 then -- Hook has stuck -- Actor mass and velocity affect pull strength negatively, rope length affects positively (diminishes the former) - local parentForces = 1 + (self.parent.Vel.Magnitude * 10 + self.parent.Mass) / (1 + self.lineLength); + local parentForces = 1 + (self.parent.Vel.Magnitude * 10 + self.parent.Mass)/(1 + self.lineLength); local terrVector = Vector(); -- Check if there is terrain between the hook and the user if self.parentRadius ~= nil then - self.terrcheck = SceneMan:CastStrengthRay(self.parent.Pos, self.lineVec:SetMagnitude(self.parentRadius), 0, terrVector, 2, 0, self.mapWrapsX); + self.terrcheck = SceneMan:CastStrengthRay(self.parent.Pos, self.lineVec:SetMagnitude(self.parentRadius), 0, terrVector, 2, rte.airID, self.mapWrapsX); else self.terrcheck = false; end @@ -219,7 +219,7 @@ function Update(self) if self.pieSelection == 1 then if self.setLineLength > self.autoClimbIntervalA and self.terrcheck == false then - self.setLineLength = self.setLineLength - (self.autoClimbIntervalA /parentForces); + self.setLineLength = self.setLineLength - (self.autoClimbIntervalA/parentForces); else self.pieSelection = 0; end @@ -234,20 +234,20 @@ function Update(self) -- Control the rope if the user is holding the gun if self.parentGun and self.parentGun.ID ~= rte.NoMOID and controller then -- These forces are to help the user nudge across obstructing terrain - local nudge = math.sqrt(self.lineVec.Magnitude + self.parent.Radius) /(10 + self.parent.Vel.Magnitude); + local nudge = math.sqrt(self.lineVec.Magnitude + self.parent.Radius)/(10 + self.parent.Vel.Magnitude); -- Retract automatically by holding fire or control the rope through the pie menu if self.parentGun:IsActivated() and self.climbTimer:IsPastSimMS(self.climbDelay) then self.climbTimer:Reset(); if self.pieSelection == 0 and self.parentGun:IsActivated() then if self.setLineLength > self.autoClimbIntervalA and self.terrcheck == false then - self.setLineLength = self.setLineLength - (self.autoClimbIntervalA /parentForces); + self.setLineLength = self.setLineLength - (self.autoClimbIntervalA/parentForces); else self.parentGun:RemoveNumberValue("GrappleMode"); self.pieSelection = 0; if self.terrcheck ~= false then -- Try to nudge past terrain - local aimvec = Vector(self.lineVec.Magnitude, 0):SetMagnitude(nudge):RadRotate((self.lineVec.AbsRadAngle + self.parent:GetAimAngle(true)) / 2 + self.parent.FlipFactor * 0.7); + local aimvec = Vector(self.lineVec.Magnitude, 0):SetMagnitude(nudge):RadRotate((self.lineVec.AbsRadAngle + self.parent:GetAimAngle(true))/2 + self.parent.FlipFactor * 0.7); self.parent.Vel = self.parent.Vel + aimvec; end end @@ -267,7 +267,7 @@ function Update(self) self.climbTimer:Reset(); if self.pieSelection == 0 then if self.climb == 1 then - self.setLineLength = self.setLineLength - (self.climbInterval / parentForces); + self.setLineLength = self.setLineLength - (self.climbInterval/parentForces); elseif self.climb == 2 then self.setLineLength = self.setLineLength + self.climbInterval; end @@ -284,11 +284,11 @@ function Update(self) self.mouseClimbTimer:Reset(); if self.climb == 3 then if (self.setLineLength-self.climbInterval) >= 0 and self.terrcheck == false then - self.setLineLength = self.setLineLength - (self.climbInterval / parentForces); + self.setLineLength = self.setLineLength - (self.climbInterval/parentForces); elseif self.terrcheck ~= false then -- Try to nudge past terrain - local aimvec = Vector(self.lineVec.Magnitude, 0):SetMagnitude(nudge):RadRotate((self.lineVec.AbsRadAngle + self.parent:GetAimAngle(true)) / 2 + self.parent.FlipFactor * 0.7); + local aimvec = Vector(self.lineVec.Magnitude, 0):SetMagnitude(nudge):RadRotate((self.lineVec.AbsRadAngle + self.parent:GetAimAngle(true))/2 + self.parent.FlipFactor * 0.7); self.parent.Vel = self.parent.Vel + aimvec; end elseif self.climb == 4 then @@ -316,7 +316,7 @@ function Update(self) self.climb = 1; elseif self.terrcheck ~= false then -- Try to nudge past terrain - local aimvec = Vector(self.lineVec.Magnitude, 0):SetMagnitude(nudge):RadRotate((self.lineVec.AbsRadAngle + self.parent:GetAimAngle(true)) / 2 + self.parent.FlipFactor * 0.7); + local aimvec = Vector(self.lineVec.Magnitude, 0):SetMagnitude(nudge):RadRotate((self.lineVec.AbsRadAngle + self.parent:GetAimAngle(true))/2 + self.parent.FlipFactor * 0.7); self.parent.Vel = self.parent.Vel + aimvec; end end @@ -331,7 +331,7 @@ function Update(self) if self.actionMode == 2 then -- Stuck terrain if self.stretchMode then - local pullVec = self.lineVec:SetMagnitude(0.15 * math.sqrt(self.lineLength) / parentForces); + local pullVec = self.lineVec:SetMagnitude(0.15 * math.sqrt(self.lineLength)/parentForces); self.parent.Vel = self.parent.Vel + pullVec; elseif self.lineLength > self.setLineLength then @@ -342,7 +342,7 @@ function Update(self) if pullAmountNumber < 0 then pullAmountNumber = pullAmountNumber * -1; end - pullAmountNumber = pullAmountNumber / 6.28; + pullAmountNumber = pullAmountNumber/6.28; self.parent:AddAbsForce(self.lineVec:SetMagnitude(((self.lineLength - self.setLineLength) ^3 ) * pullAmountNumber) + hookVel:SetMagnitude(math.pow(self.lineLength - self.setLineLength,2)*0.8), self.parent.Pos); local moveToPos = self.Pos + (self.lineVec*-1):SetMagnitude(self.setLineLength); @@ -355,7 +355,7 @@ function Update(self) end self.parent.Pos = moveToPos; - local pullAmountNumber = math.abs(self.lineVec.AbsRadAngle - self.parent.Vel.AbsRadAngle) / 6.28; + local pullAmountNumber = math.abs(self.lineVec.AbsRadAngle - self.parent.Vel.AbsRadAngle)/6.28; self.parent.Vel = self.parent.Vel + self.lineVec:SetMagnitude(self.parent.Vel.Magnitude * pullAmountNumber); end @@ -379,7 +379,7 @@ function Update(self) local pullVec = self.lineVec:SetMagnitude(self.stretchPullRatio * math.sqrt(self.lineLength)/parentForces); self.parent.Vel = self.parent.Vel + pullVec; - local targetForces = 1 + (target.Vel.Magnitude * 10 + target.Mass) / (1 + self.lineLength); + local targetForces = 1 + (target.Vel.Magnitude * 10 + target.Mass)/(1 + self.lineLength); target.Vel = target.Vel - (pullVec) * parentForces/targetForces; elseif self.lineLength > self.setLineLength then @@ -392,14 +392,14 @@ function Update(self) if pullAmountNumber < 0 then pullAmountNumber = pullAmountNumber * -1; end - pullAmountNumber = pullAmountNumber / 6.28; + pullAmountNumber = pullAmountNumber/6.28; self.parent:AddAbsForce(self.lineVec:SetMagnitude(((self.lineLength - self.setLineLength) ^3 ) * pullAmountNumber) + hookVel:SetMagnitude(math.pow(self.lineLength - self.setLineLength,2)*0.8), self.parent.Pos); pullAmountNumber = (self.lineVec*-1).AbsRadAngle - (hookVel).AbsRadAngle; if pullAmountNumber < 0 then pullAmountNumber = pullAmountNumber * -1; end - pullAmountNumber = pullAmountNumber / 6.28; + pullAmountNumber = pullAmountNumber/6.28; local targetforce = ((self.lineVec*-1):SetMagnitude(((self.lineLength - self.setLineLength) ^3 ) * pullAmountNumber) + (self.lineVec*-1):SetMagnitude(math.pow(self.lineLength - self.setLineLength,2)*0.8)); target:AddAbsForce(targetforce, self.Pos);--target.Pos + SceneMan:ShortestDistance(target.Pos, self.Pos, self.mapWrapsX)); diff --git a/Base.rte/Devices/Tools/Scanner/Scanner.ini b/Base.rte/Devices/Tools/Scanner/Scanner.ini index 923c7905d..932a6a9bd 100644 --- a/Base.rte/Devices/Tools/Scanner/Scanner.ini +++ b/Base.rte/Devices/Tools/Scanner/Scanner.ini @@ -1,33 +1,3 @@ -/////////////////////////////////////////////////////////////////////// -// Scanner Ammo - - -AddAmmo = Magazine - PresetName = Magazine Scanner - Mass = 0 - HitsMOs = 0 - GetsHitByMOs = 0 - SpriteFile = ContentFile - FilePath = Base.rte/Null.bmp - AtomGroup = AtomGroup - CopyOf = Null AtomGroup - JointStrength = 200 - JointStiffness = 1 - RoundCount = -1 - RTTRatio = 0 - RegularRound = Round - PresetName = Round Scanner - ParticleCount = 1 - Particle = MOPixel - CopyOf = Null Bullet - Shell = None - FireVelocity = 1 - ShellVelocity = 0 - Separation = 0 - TracerRound = None - Discardable = 0 - - /////////////////////////////////////////////////////////////////////////////// // Scanners @@ -91,7 +61,7 @@ AddDevice = HDFirearm Y = 2 SharpLength = 0 Magazine = Magazine - CopyOf = Magazine Scanner + CopyOf = Null Magazine Infinite // Flash = Attachable // CopyOf = Muzzle Flash SMG FireSound = SoundContainer @@ -234,7 +204,7 @@ AddDevice = HDFirearm Y = 3 SharpLength = 0 Magazine = Magazine - CopyOf = Magazine Scanner + CopyOf = Null Magazine Infinite // Flash = Attachable // CopyOf = Muzzle Flash SMG FireSound = SoundContainer @@ -377,7 +347,7 @@ AddDevice = HDFirearm Y = 3 SharpLength = 0 Magazine = Magazine - CopyOf = Magazine Scanner + CopyOf = Null Magazine Infinite // Flash = Attachable // CopyOf = Muzzle Flash SMG FireSound = SoundContainer diff --git a/Base.rte/Devices/Weapons/BattleRifle/BattleRifle.ini b/Base.rte/Devices/Weapons/BattleRifle/BattleRifle.ini index b0798f2a6..730ba0c5a 100644 --- a/Base.rte/Devices/Weapons/BattleRifle/BattleRifle.ini +++ b/Base.rte/Devices/Weapons/BattleRifle/BattleRifle.ini @@ -40,7 +40,7 @@ AddAmmo = Magazine X = -1 Y = 1 DrawAfterParent = 0 - RoundCount = 5 + RoundCount = 10 RTTRatio = 3 RegularRound = Round CopyOf = Round 7.62x39 diff --git a/Base.rte/Devices/Weapons/BattleRifle/BattleRifle000.bmp b/Base.rte/Devices/Weapons/BattleRifle/BattleRifle000.bmp index 74b9210c04b9ceaa00343bc5180d18294f8fe266..ebff0a11634ff9428d223681f7e6c71a7176d7b9 100644 GIT binary patch delta 223 zcmXw!y9vWU42F-`B;X=Vz(uyn2IF zz1zF@tDTK&I=pca3vlvi80o(!9`B*|JrASG&6mn8pqm^v_en{L~#aFH#uYO){ K&s^M2q4@$qIdGBy delta 232 zcmY+8u?@mN3`JdpB3XczDN@4-RCHd2Au>)BWtA464 zTNW#-#pV#^hR3)OBR*294w{1%6%o|{&c7xR;YG|!SsEfMyCo3zPXHob`E%CqSeveg F(;Ll)cl!VU diff --git a/Base.rte/Devices/Weapons/BattleRifle/BattleRifle001.bmp b/Base.rte/Devices/Weapons/BattleRifle/BattleRifle001.bmp index 795eba2a00da15ad121209d037b1378c6596ccfd..1208de390a7d39de0c1c22282d6f6d3764dbc350 100644 GIT binary patch delta 234 zcmY+9u?fRK3`G@eL*hQ9%r4m=MOu-7_s9^Q!w}GMGswkpD|m(!*6Gyb4&x%P&=>y; zA+7z|e;)1l?2gSa$awEACuRl!Mj2o2`OUy4QYs2j2qpQ4fHi=K=B!x))3Pi?Us!2g)njr delta 234 zcmY+9u?@mN3`Jd}A+#VG=Afcs0~%Vd!VsAw64FICgHu>u;buSzcV{>FKtbZk&9|Oy z`PIMr$F1A$fC!uu<>AsDHe@*i5Vo|xM<8R)+4Hh6H}MYxs+_D=HPy@%mXtyWvP$Cf zYF52epBAGP)nZc!Q^PfGq=Yt()j@Nxq9UT&dEEmd!cojhi4BpNz4g2E^+Y}^LrXLJ J1IOXo^>14Mc|QOE diff --git a/Base.rte/Devices/Weapons/Pistol/Pistol000.bmp b/Base.rte/Devices/Weapons/Pistol/Pistol000.bmp index 2bd9512b9adf49b9f9d8bff4189960ca5f9b90d4..9115e43471bd147f3c6b2dc914292c7fd10f95cd 100644 GIT binary patch delta 116 zcmdnSxs7v!7fa6O&EFXypae{vWI74u=Ro;CenJG2LDb3bKcc>${C*Os$Q{K0{_E$@ hpTBW0fguL0?EBB{+kXH71A{Y|k06{G081|@~ diff --git a/Base.rte/Devices/Weapons/Pistol/Pistol001.bmp b/Base.rte/Devices/Weapons/Pistol/Pistol001.bmp index 9c1095bbefe475703abf6b5bcc0de3c75bce92f7..0955d645732423759cb93a227c1a138c11956b4a 100644 GIT binary patch delta 116 zcmXX;xeb6Y5IZ57jKdU2j6h49681uhlpSs&`;LYr7dQT7*HqJcthp3O;2xxlPM@cz gMR0Xe@C3*vcM-Umx%-E9^0W+8HI7en99YHvj+t delta 116 zcmdnSxs7v!7fa5G6Wt%BP82A33Sl(Q`2nGq>xEPwwk%opzU<5Ab$`o%Dt=_t z^(Lx<$G_GMpldBe2tBtU+Q`--0PUdzK&EGgdz7b-E9{7>*fv&`*Ua0KW_Fn5_02eK JoMg^d`vQm5MSB1M delta 191 zcmZXNu?fRK3`KQuAh^j6p2915imc*^3<34mU!i$)(!t>`+bK+5Bk{h_?_(do%X6Iw zFqarVUa^$-%?&VcYDB`))vC1*s4 PqwSQqz6xTZO^T^EQ9qkM%`> zS#n%VxybX+jWBTLM9Sx3IyO}^cTV67T)0Ox&^?++I#sO^E@Hj+_Hi2aAG&C*h!AJn NA#r^c~*}}l^{iMXn?+hT22;@jugTenF-@iLZI7s{e$y5Tx9U$V2 zKYoBzNc{NmgMpz0D97l`S5w2}!1VjquU|ibIPMn%gA2$oMhP(Z2?q=e`5tD-ytS~ z)k|1|!T;|L5)KmIfBXQ-fyEuHW55!OAO#XXKmaVk!01r3Ws8FY-|t_)e*FaExL*)) b21W@m0P2PUs5qMQe}FBRtjH?HB*zQ@cphBF delta 252 zcmZ{cArgZ?3`MguRosA+LmBX zz2zf!&BiVcVn1Hq(|=Ef&=xe;M%3hzBcI(lm!O~N7V6o@P@J~}f1 V<~}5Fz9F|cT?spUIO9U+(;o?UMpgg- diff --git a/Base.rte/Effects.ini b/Base.rte/Effects.ini index 8b97eddc2..42bec69c8 100644 --- a/Base.rte/Effects.ini +++ b/Base.rte/Effects.ini @@ -320,7 +320,6 @@ AddEffect = MOPixel TrailLength = 2 ScreenEffect = ContentFile FilePath = Base.rte/Effects/Glows/FireGlowTiny.bmp - EffectStartTime = 0 /////////////////////////////////////////////////////////////////////// diff --git a/Base.rte/Effects/Glows/FireGlow2.bmp b/Base.rte/Effects/Glows/FireGlow2.bmp index 68c3c533f56d6ccca18f4b0b60cea1c0e406201a..f2cf03f40f5167065f6a35028a5941f319cd2631 100644 GIT binary patch delta 618 zcmXYvzb^w(0LQiUtJIISM>&p`wt7`Rt`(7pp%R0^U@$Z+T}X(*ASMZegh-_4ONc}e ziI5Pf#9$B+(b)V01_pz{AYw4l_kDNCyU*wQefNg<-tEogrh-VDi;6% delta 599 zcmX|;Pe>a<6o<31*_fDQvl_E@>z`=UCK`>|nh1f$t)6O8da0s#@E`>3S;d?5SWC+I zYbk_Ugn}TX6#@&PfzZ@F!O!yHw(+WXBW#a`=@5hS(meN zbS7v|-)_m(;pD4Xky#aHSiCO^vw)mb5@r^Er4Pb1@XcLjylQeVbB~aQ;@KBw3O_st zjE^!QiR%^_MK4{%5pO{pF~e^-#0%PFAtqQKwspquhP|u!;4bqYA67bK1^Ydcdl&&UfCW z-Ce9Irx%X;Sig32>il)H#}?x%p2q6%8Yt-; z@QOI=)p0sdMc9bo&0vk&weXO-rlT)W#eqA9KZy!=*h*4|W7rv@DvoEv)crw3Q-?gA z^VDaaRb_-`mB!X6&8dL7G>y7|=osM%&c}8cM;XEk>_|cE8SA9N3}WfgjZrc1A3WQ> Ang9R* diff --git a/Base.rte/Effects/Pyro.ini b/Base.rte/Effects/Pyro.ini index 60f4cb278..c949c62f8 100644 --- a/Base.rte/Effects/Pyro.ini +++ b/Base.rte/Effects/Pyro.ini @@ -1072,9 +1072,9 @@ AddEffect = MOSParticle FilePath = Base.rte/Effects/Glows/FireGlow1.bmp EffectAlwaysShows = 0 EffectStartTime = 0 - EffectStopTime = 6000 - EffectStartStrength = 0.5 - EffectStopStrength = 0.1 + EffectStopTime = 5000 + EffectStartStrength = 0.4 + EffectStopStrength = 0.0 RandomizeEffectRotAngle = 1 @@ -1083,8 +1083,8 @@ AddEffect = MOSParticle PresetName = Flame 2 Hurt ScreenEffect = ContentFile FilePath = Base.rte/Effects/Glows/FireGlow1.bmp - EffectStopTime = 4000 - EffectStartStrength = 0.75 + EffectStopTime = 3000 + EffectStartStrength = 0.6 EffectStopStrength = 0.0 @@ -1461,20 +1461,22 @@ AddEffect = AEmitter AddEffect = MOSParticle CopyOf = Tiny Smoke Ball 1 PresetName = Tiny Smoke Trail 1 - LifeTime = 160 - GlobalAccScalar = -0.2 + LifeTime = 200 + GlobalAccScalar = -0.1 + AirResistance = 0.3 + AirThreshold = 3 AddEffect = MOSParticle CopyOf = Tiny Smoke Trail 1 PresetName = Tiny Smoke Trail 2 - LifeTime = 140 - + LifeTime = 175 + AddEffect = MOSParticle CopyOf = Tiny Smoke Trail 1 - PresetName = Tiny Smoke Trail 3 - LifeTime = 120 + PresetName = Tiny Smoke Trail 2 + LifeTime = 150 AddAmmo = AEmitter diff --git a/Base.rte/Effects/Pyro/FireBlastSmallB009.bmp b/Base.rte/Effects/Pyro/FireBlastSmallB009.bmp index 156d5b79412bd14c70ccd24f1ac3d9d43f234cf9..4efba399cd6d32ca6eef374e3e3c8a55c2141f57 100644 GIT binary patch delta 106 zcmXAhu?>JQ3Fao`68eI delta 106 zcmXAhyAgme3`1W*!%9@#u|-NaY6_Sr6HsL$b|A7FoKRR#@-L5hyysz^z$q^zIDslv i1$U6#)J9KaB~uL^QSK74w1J^w(dxI2?a$TCFAE=a%_1cL diff --git a/Base.rte/Effects/Pyro/FireBlastSmallB010.bmp b/Base.rte/Effects/Pyro/FireBlastSmallB010.bmp index ec99f50a347dcbde4257c57a35c9551d50fa4fcd..1f969618bbcd360043cba107f8f34e5be672f251 100644 GIT binary patch delta 101 zcmZ3)xrlRvD@*M6A3uLEFfbGWF_7_-0m#V#vbO=bF!ry=9}K^KGB7xT)cj&#hy+R| Yg4sYNKyi?IAOOlRFyw&JQ5CgBE$ufu~V1ZPTpk=U3K*bJBl>e{rBP`iE%kHI@Yn_f~_y88!4M!#U cR!yG8(Tp%S^ApfC?jP&ou!$utP&0m2Ua4SiocZQ$ezXRzfK>P#9ISHimf%qp7 bf>CJU>;a6Q0xZ~mw+Upz?lI64YfM0^J`8PY)PA3sil)Wm><8GZn{ R3=D1{aVQ9eF@SV10{}{d78U>i diff --git a/Base.rte/Effects/Pyro/FireBlastSmallB013.bmp b/Base.rte/Effects/Pyro/FireBlastSmallB013.bmp index 86f7b2dfb56097273aa932ea19b61b7f461b8d9a..a8f7f5009e2b3b1ef334f0619b25d2531dc71373 100644 GIT binary patch delta 106 zcmZ3)xrlRv14~jW0}y-%5ey7PK>P#51M+i#Y#;+H17b6L2g(3}BM|=p%7A!@AORo% RDT1g0a~bj=6qrnA008QO6Ttug delta 106 zcmZ3)xrlRv151(>0}y-%5ey8)K>P#51M*XW?C%UGPk_XqfQXYo86e09;vYa65HA@d V00bw27^D}Z4+Kge6qs~o007rl6Kntg diff --git a/Base.rte/Effects/Pyro/FireBlastSmallB014.bmp b/Base.rte/Effects/Pyro/FireBlastSmallB014.bmp index 6b7532288879c8a9724df3a3b7506201c844a769..20f933df3e751c8f6f1f5582672ff47a2b1fe9e9 100644 GIT binary patch delta 106 zcmZ3)xrlRv14~jW1H*R)C@2EbU=EPT0kVHEd1H(xMC@2Qf-$863kqV?vGJFTiJpqX^{MZH}^FaghoaYKsuQL0I1Ch AjQ{`u delta 106 ocmZ3)xrlRv14|MEI@pFT0ON1_4r7666b?uaBV0Bd&H^!*0PIo+7XSbN diff --git a/Base.rte/Effects/Pyro/FireBlastSmallB018.bmp b/Base.rte/Effects/Pyro/FireBlastSmallB018.bmp index ba0a531be21c70d6ff801c313fa37e93a55abb82..22b1443b3a5fe8fc83e55807c1da83a841f475e1 100644 GIT binary patch delta 106 pcmZ3)xrlRv14~jW0|FEwm<&1S>>m&TM Date: Fri, 14 Aug 2020 23:30:21 +0300 Subject: [PATCH 24/28] whoops lol --- Base.rte/Devices/Tools/Constructor/ConstructorCollect.lua | 2 +- Base.rte/Devices/Tools/Constructor/ConstructorCollectGold.lua | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Base.rte/Devices/Tools/Constructor/ConstructorCollect.lua b/Base.rte/Devices/Tools/Constructor/ConstructorCollect.lua index 92d81ff2d..f5b6f2d0c 100644 --- a/Base.rte/Devices/Tools/Constructor/ConstructorCollect.lua +++ b/Base.rte/Devices/Tools/Constructor/ConstructorCollect.lua @@ -4,7 +4,7 @@ function Create(self) self.ToSettle = false; if self.Sharpness ~= rte.NoMOID then - local mo = MovableMan:GetMOFromID(i); + local mo = MovableMan:GetMOFromID(self.Sharpness); if mo then self.target = mo; self.Sharpness = 0; diff --git a/Base.rte/Devices/Tools/Constructor/ConstructorCollectGold.lua b/Base.rte/Devices/Tools/Constructor/ConstructorCollectGold.lua index 2aef44482..20a5ca1a3 100644 --- a/Base.rte/Devices/Tools/Constructor/ConstructorCollectGold.lua +++ b/Base.rte/Devices/Tools/Constructor/ConstructorCollectGold.lua @@ -6,7 +6,7 @@ function Create(self) self.ToSettle = false; if self.Sharpness ~= rte.NoMOID then - local mo = MovableMan:GetMOFromID(i); + local mo = MovableMan:GetMOFromID(self.Sharpness); if mo then self.target = mo; self.Sharpness = 0; From 84f7a6327e656bed4bd1cc50e9bfc72e99319c42 Mon Sep 17 00:00:00 2001 From: 4zk Date: Fri, 14 Aug 2020 23:35:21 +0300 Subject: [PATCH 25/28] Switched constructor collect particle reliance to MOID for now --- Base.rte/Devices/Tools/Constructor/Constructor.lua | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Base.rte/Devices/Tools/Constructor/Constructor.lua b/Base.rte/Devices/Tools/Constructor/Constructor.lua index 412c35582..08cd72a89 100644 --- a/Base.rte/Devices/Tools/Constructor/Constructor.lua +++ b/Base.rte/Devices/Tools/Constructor/Constructor.lua @@ -342,7 +342,7 @@ function Update(self) self.clearer:EraseFromTerrain(); local collectfx2 = CreateMOPixel("Particle Constructor Gather Material Gold"); collectfx2.Pos = Vector(checkpos.X,checkpos.Y); - collectfx2.Sharpness = self.UniqueID; + collectfx2.Sharpness = self.ID; MovableMan:AddParticle(collectfx2); else local matstrength = SceneMan:CastStrengthSumRay(Vector(checkpos.X,checkpos.Y-1),Vector(checkpos.X,checkpos.Y),0,0); @@ -365,7 +365,7 @@ function Update(self) if diddig then local collectfx = CreateMOPixel("Particle Constructor Gather Material"); collectfx.Pos = Vector(digpos.X,digpos.Y); - collectfx.Sharpness = self.UniqueID; + collectfx.Sharpness = self.ID; MovableMan:AddParticle(collectfx); end else -- deactivate if digging air From 07b5e848589f8c5a21f058e15070f282f4bf25e7 Mon Sep 17 00:00:00 2001 From: 4zk Date: Fri, 14 Aug 2020 23:49:38 +0300 Subject: [PATCH 26/28] Missions.rte fixes + disable WIP factions --- Missions.rte/Activities/Dummy Assault.lua | 6 +++--- Missions.rte/Activities/Maginot.lua | 12 ++++++------ Missions.rte/Activities/ZombieCave.lua | 2 +- MuIlaak.rte/Index.ini | 2 +- Uzira.rte/Index.ini | 2 +- 5 files changed, 12 insertions(+), 12 deletions(-) diff --git a/Missions.rte/Activities/Dummy Assault.lua b/Missions.rte/Activities/Dummy Assault.lua index 8bc2cf3ee..677cd28a4 100644 --- a/Missions.rte/Activities/Dummy Assault.lua +++ b/Missions.rte/Activities/Dummy Assault.lua @@ -160,12 +160,12 @@ function DummyAssault:UpdateActivity() if MovableMan:GetTeamMOIDCount(Activity.TEAM_2) < rte.DefenderMOIDMax then local actor - if math.random() > 0.05 then - actor = RandomAHuman("Infantry Light", self.CPUTech) + if math.random() > self:GetCrabToHumanSpawnRatio(PresetMan:GetModuleID(self.CPUTech)) then + actor = RandomAHuman("Actors - Light", self.CPUTech) if math.random() > 0.5 then actor.AIMode = Actor.AIMODE_BRAINHUNT if math.random() > 0.5 then - actor:AddInventoryItem(RandomHDFirearm("Diggers", self.CPUTech)) + actor:AddInventoryItem(RandomHDFirearm("Tools - Diggers", self.CPUTech)) end else actor.AIMode = Actor.AIMODE_GOTO diff --git a/Missions.rte/Activities/Maginot.lua b/Missions.rte/Activities/Maginot.lua index 6662f8aeb..0e388952a 100644 --- a/Missions.rte/Activities/Maginot.lua +++ b/Missions.rte/Activities/Maginot.lua @@ -244,9 +244,9 @@ function MaginotMission:UpdateActivity() if math.random() > 0.4 then dummya:AddInventoryItem(RandomTDExplosive("Bombs - Grenades", self.EnemyTech)) else - local digger = RandomHDFirearm("Diggers", self.EnemyTech) + local digger = RandomHDFirearm("Tools - Diggers", self.EnemyTech) if not digger then - digger = RandomHDFirearm("Diggers", "Base.rte") + digger = RandomHDFirearm("Tools - Diggers", "Base.rte") end if digger then dummya:AddInventoryItem(digger) @@ -269,9 +269,9 @@ function MaginotMission:UpdateActivity() if math.random() > 0.4 then dummyb:AddInventoryItem(RandomTDExplosive("Bombs - Grenades", self.EnemyTech)) else - local digger = RandomHDFirearm("Diggers", self.EnemyTech) + local digger = RandomHDFirearm("Tools - Diggers", self.EnemyTech) if not digger then - digger = RandomHDFirearm("Diggers", "Base.rte") + digger = RandomHDFirearm("Tools - Diggers", "Base.rte") end if digger then dummyb:AddInventoryItem(digger) @@ -302,14 +302,14 @@ function MaginotMission:UpdateActivity() if MovableMan:GetTeamMOIDCount(Activity.TEAM_2) <= rte.DefenderMOIDMax then local actor local y = math.random() - if y > 0.05 then + if y > self:GetCrabToHumanSpawnRatio(PresetMan:GetModuleID(self.EnemyTech)) then actor = RandomAHuman("Actors - Light", self.EnemyTech) if actor then actor:AddInventoryItem(RandomHDFirearm("Weapons - Primary", self.EnemyTech)) if math.random() > 0.1 then actor:AddInventoryItem(RandomTDExplosive("Bombs - Grenades", self.EnemyTech)) else - actor:AddInventoryItem(RandomHDFirearm("Diggers", self.EnemyTech)) + actor:AddInventoryItem(RandomHDFirearm("Tools - Diggers", self.EnemyTech)) end end else diff --git a/Missions.rte/Activities/ZombieCave.lua b/Missions.rte/Activities/ZombieCave.lua index 3609e5d1f..08be1abba 100644 --- a/Missions.rte/Activities/ZombieCave.lua +++ b/Missions.rte/Activities/ZombieCave.lua @@ -143,7 +143,7 @@ function ZombieCaveMission:MakeEnemy(whichMode) passenger:AddInventoryItem(RandomHDFirearm("Weapons - Primary", self.CPUTechName)); passenger:AddInventoryItem(RandomHDFirearm("Weapons - Secondary", self.CPUTechName)); if PosRand() < 0.25 then - passenger:AddInventoryItem(RandomHDFirearm("Diggers", self.CPUTechName)); + passenger:AddInventoryItem(RandomHDFirearm("Tools - Diggers", self.CPUTechName)); end end diff --git a/MuIlaak.rte/Index.ini b/MuIlaak.rte/Index.ini index 5c329ab6d..41ee3861b 100644 --- a/MuIlaak.rte/Index.ini +++ b/MuIlaak.rte/Index.ini @@ -1,5 +1,5 @@ DataModule - ModuleName = Mu-Ilaak Tech + ModuleName = Mu-Ilaak IconFile = ContentFile Path = MuIlaak.rte/ModuleIcon.bmp Description = TBA diff --git a/Uzira.rte/Index.ini b/Uzira.rte/Index.ini index 2195a001d..b0b54d8f7 100644 --- a/Uzira.rte/Index.ini +++ b/Uzira.rte/Index.ini @@ -1,5 +1,5 @@ DataModule - ModuleName = Uzira Tech + ModuleName = Uzira IconFile = ContentFile Path = Uzira.rte/ModuleIcon.bmp Description = TBA From 72c1f0453d4b86d959e44eb3ef3eb96de5587d7b Mon Sep 17 00:00:00 2001 From: 4zk Date: Mon, 17 Aug 2020 02:08:14 +0300 Subject: [PATCH 27/28] Setting the AI Box as unbuyable since it doesn't serve a purpose yet --- Base.rte/Actors/Mecha/AIBox/AIBox.ini | 1 + 1 file changed, 1 insertion(+) diff --git a/Base.rte/Actors/Mecha/AIBox/AIBox.ini b/Base.rte/Actors/Mecha/AIBox/AIBox.ini index 0cba5323f..387919617 100644 --- a/Base.rte/Actors/Mecha/AIBox/AIBox.ini +++ b/Base.rte/Actors/Mecha/AIBox/AIBox.ini @@ -185,6 +185,7 @@ AddActor = ACrab AddToGroup = Actors Mass = 50 GoldValue = 250 + Buyable = 0 HitsMOs = 1 GetsHitByMOs = 1 ScriptPath = Base.rte/AI/CrabAI.lua From a7c1d4c8ef4cbd9ea0a8d1f6d62391f7bfc2640c Mon Sep 17 00:00:00 2001 From: 4zk Date: Mon, 17 Aug 2020 02:10:47 +0300 Subject: [PATCH 28/28] Misc changes --- Base.rte/Craft/DropShips/DropshipMK1.ini | 2 +- Base.rte/Devices/Shared/Scripts/RecoilTilt.lua | 18 +++++++++--------- .../Devices/Shared/Scripts/ShotgunReload.lua | 2 +- Base.rte/Devices/Special/Medikit/Medikit.ini | 3 +++ .../Weapons/BattleRifle/BattleRifle.ini | 2 +- Base.rte/Effects/Pyro/Flame/Flame.lua | 8 ++++---- Base.rte/Scripts/Shared/FlippedFrame.lua | 2 -- 7 files changed, 19 insertions(+), 18 deletions(-) diff --git a/Base.rte/Craft/DropShips/DropshipMK1.ini b/Base.rte/Craft/DropShips/DropshipMK1.ini index e2aaf7599..ab2fa9c45 100644 --- a/Base.rte/Craft/DropShips/DropshipMK1.ini +++ b/Base.rte/Craft/DropShips/DropshipMK1.ini @@ -1532,7 +1532,7 @@ AddActor = ACDropShip Y = 28 Velocity = Vector X = 0 - Y = 6 + Y = 5 Radius = 22 Range = 45 CrashSound = SoundContainer diff --git a/Base.rte/Devices/Shared/Scripts/RecoilTilt.lua b/Base.rte/Devices/Shared/Scripts/RecoilTilt.lua index 53c71c7dd..5178c4255 100644 --- a/Base.rte/Devices/Shared/Scripts/RecoilTilt.lua +++ b/Base.rte/Devices/Shared/Scripts/RecoilTilt.lua @@ -1,18 +1,18 @@ function Create(self) - self.setAngle = 0; - self.tilt = 1/math.sqrt(self.Radius); + self.setRecoilAngle = 0; + self.recoilTilt = 1/math.sqrt(self.Radius); end function Update(self) - if self.setAngle > 0 then - self.setAngle = self.setAngle - (0.003 * (10 + math.sqrt(self.RateOfFire) * self.setAngle)); - if self.setAngle < 0 then - self.setAngle = 0; + if self.setRecoilAngle > 0 then + self.setRecoilAngle = self.setRecoilAngle - (0.003 * (10 + math.sqrt(self.RateOfFire) * self.setRecoilAngle)); + if self.setRecoilAngle < 0 then + self.setRecoilAngle = 0; end end if self.FiredFrame then - self.setAngle = self.setAngle + (self.tilt * RangeRand(0.1, 1))/(1 + self.setAngle); + self.setRecoilAngle = self.setRecoilAngle + (self.recoilTilt * RangeRand(0.1, 1))/(1 + self.setRecoilAngle); end - self.RotAngle = self.RotAngle + (self.setAngle * self.FlipFactor); + self.RotAngle = self.RotAngle + (self.setRecoilAngle * self.FlipFactor); local jointOffset = Vector(self.JointOffset.X * self.FlipFactor, self.JointOffset.Y):RadRotate(self.RotAngle); - self.Pos = self.Pos - jointOffset + Vector(jointOffset.X, jointOffset.Y):RadRotate(-self.setAngle * self.FlipFactor); + self.Pos = self.Pos - jointOffset + Vector(jointOffset.X, jointOffset.Y):RadRotate(-self.setRecoilAngle * self.FlipFactor); end \ No newline at end of file diff --git a/Base.rte/Devices/Shared/Scripts/ShotgunReload.lua b/Base.rte/Devices/Shared/Scripts/ShotgunReload.lua index 90af08274..303e93495 100644 --- a/Base.rte/Devices/Shared/Scripts/ShotgunReload.lua +++ b/Base.rte/Devices/Shared/Scripts/ShotgunReload.lua @@ -3,7 +3,7 @@ function Create(self) self.loadedShell = false; self.reloadCycle = false; - self.reloadDelay = 100; + self.reloadDelay = 75; self.ammoCounter = self.RoundInMagCount; end diff --git a/Base.rte/Devices/Special/Medikit/Medikit.ini b/Base.rte/Devices/Special/Medikit/Medikit.ini index badee03aa..367258cf2 100644 --- a/Base.rte/Devices/Special/Medikit/Medikit.ini +++ b/Base.rte/Devices/Special/Medikit/Medikit.ini @@ -150,4 +150,7 @@ AddDevice = HDFirearm Spread = 2.25 MaxVelocity = 10 MinVelocity = 1 + AddGib = Gib + GibParticle = MOSRotating + CopyOf = Gib Panel White Small D GibWoundLimit = 3 \ No newline at end of file diff --git a/Base.rte/Devices/Weapons/BattleRifle/BattleRifle.ini b/Base.rte/Devices/Weapons/BattleRifle/BattleRifle.ini index 730ba0c5a..b2eacb7bc 100644 --- a/Base.rte/Devices/Weapons/BattleRifle/BattleRifle.ini +++ b/Base.rte/Devices/Weapons/BattleRifle/BattleRifle.ini @@ -67,7 +67,7 @@ AddDevice = HDFirearm CopyOf = Dent Metal ExitWound = AEmitter CopyOf = Dent Metal - GoldValue = 50 + GoldValue = 40 AtomGroup = AtomGroup AutoGenerate = 1 Material = Material diff --git a/Base.rte/Effects/Pyro/Flame/Flame.lua b/Base.rte/Effects/Pyro/Flame/Flame.lua index 545728835..d7274c82f 100644 --- a/Base.rte/Effects/Pyro/Flame/Flame.lua +++ b/Base.rte/Effects/Pyro/Flame/Flame.lua @@ -22,14 +22,14 @@ function Update(self) if math.random() < (self.strength * self.target.DamageMultiplier) / (actor.Mass + self.target.Material.StructuralIntegrity) then actor.Health = actor.Health - 1; end - -- Stop, drop and roll! + --Stop, drop and roll! self.Lifetime = self.Lifetime - math.abs(actor.AngularVel); end else self.target = nil; if self.checkTimer:IsPastSimMS(self.checkDelay) then self.checkTimer:Reset(); - self.checkDelay = self.checkDelay + 3; -- Gradually extend the delay for optimization reasons + self.checkDelay = self.checkDelay + 3; --Gradually extend the delay for optimization reasons local checkPos = self.Pos + self.Vel * rte.PxTravelledPerFrame * math.random(); local moCheck = SceneMan:GetMOIDPixel(checkPos.X, checkPos.Y); if moCheck ~= rte.NoMOID then @@ -52,7 +52,7 @@ function Update(self) end end end - local age = (self.Age * 0.0001) + 1; -- Have age slightly affect particle settings relative to 10 seconds + local age = (self.Age * 0.0001) + 1; --Have age slightly affect particle settings relative to 10 seconds local chance = math.random(); local particle; if chance < (0.1/age) then @@ -60,7 +60,7 @@ function Update(self) particle.Vel = self.Vel + Vector(RangeRand(-15, 15), -math.random(-10, 20)); particle.Sharpness = particle.Sharpness * RangeRand(0.5, 1.0); elseif chance < (0.5/age) then - -- Spawn another, shorter flame particle occasionally + --Spawn another, shorter flame particle occasionally if not self.isShort and math.random() < 0.05 then particle = CreateMOSParticle("Flame Hurt Short Float"); particle.Lifetime = 4000/age; diff --git a/Base.rte/Scripts/Shared/FlippedFrame.lua b/Base.rte/Scripts/Shared/FlippedFrame.lua index 033d2e241..d581c37fc 100644 --- a/Base.rte/Scripts/Shared/FlippedFrame.lua +++ b/Base.rte/Scripts/Shared/FlippedFrame.lua @@ -1,6 +1,4 @@ --Use this script to display a different sprite frame when facing left, instead of the same sprite mirrored -function Create(self) -end function Update(self) self.Frame = self.HFlipped and 1 or 0; end \ No newline at end of file