From 35ee056d7ae542bf5869ccfc10a701270800982d Mon Sep 17 00:00:00 2001 From: Marisa Kirisame Date: Fri, 28 Dec 2018 19:10:35 +0100 Subject: [PATCH] Add separate player classes for separate sounds and whatnot. Fully implement UT movement for all modes (walk, swim, fly). --- Readme.md | 3 +- cvarinfo.txt | 3 +- graphics/Blake.png | Bin 0 -> 2673 bytes graphics/Brock.png | Bin 0 -> 4171 bytes graphics/Ivana.png | Bin 0 -> 3356 bytes graphics/Lauren.png | Bin 0 -> 3244 bytes graphics/Xan.png | Bin 0 -> 2878 bytes graphics/hud/Boss.png | Bin 0 -> 4553 bytes graphics/hud/BossArm.png | Bin 0 -> 1083 bytes graphics/hud/BossBlt.png | Bin 0 -> 2292 bytes graphics/hud/BossBot.png | Bin 0 -> 1299 bytes graphics/hud/BossPad.png | Bin 0 -> 879 bytes menudef.txt | 1 + sndinfo.txt | 150 ++++++++++++++++++++------- sounds/BFootstep.ogg | Bin 0 -> 8281 bytes sounds/MLand3.ogg | Bin 0 -> 6114 bytes sounds/TMJump3.ogg | Bin 0 -> 6130 bytes zmapinfo.txt | 2 +- zscript/utcommon.zsc | 218 ++++++++++++++++++++++++++++++++------- zscript/uthud.zsc | 24 ++++- 20 files changed, 319 insertions(+), 82 deletions(-) create mode 100644 graphics/Blake.png create mode 100644 graphics/Brock.png create mode 100644 graphics/Ivana.png create mode 100644 graphics/Lauren.png create mode 100644 graphics/Xan.png create mode 100644 graphics/hud/Boss.png create mode 100644 graphics/hud/BossArm.png create mode 100644 graphics/hud/BossBlt.png create mode 100644 graphics/hud/BossBot.png create mode 100644 graphics/hud/BossPad.png create mode 100644 sounds/BFootstep.ogg create mode 100644 sounds/MLand3.ogg create mode 100644 sounds/TMJump3.ogg diff --git a/Readme.md b/Readme.md index 0c90243..7bdc21f 100644 --- a/Readme.md +++ b/Readme.md @@ -3,7 +3,7 @@ What began as a test for importing UT vertex meshes has turned into an actual full UT weapon and item mod. -This mod requires a recent GZDoom devbuild (g3.6pre-31-gd965c9aa7 or later). +This mod requires GZDoom 3.7.0 or later. ## Currently implemented @@ -48,6 +48,7 @@ This mod requires a recent GZDoom devbuild (g3.6pre-31-gd965c9aa7 or later). - Visual recoil affecting aim (improved A_Swing from Soundless Mound, can be toggled) - UT-like weapon dropping style + - UT player classes (sound only, no models yet) ## In progress diff --git a/cvarinfo.txt b/cvarinfo.txt index f30080b..a35a451 100644 --- a/cvarinfo.txt +++ b/cvarinfo.txt @@ -19,6 +19,7 @@ user float flak_hudsize = 1.0; // 0.2 <-> 1.0 in steps of 0.2 (default 1.0) user float flak_weaponsize = 0.8; // 0.2 <-> 1.0 in steps of 0.2 (default 0.8) user float flak_statussize = 1.0; // 0.5 <-> 1.5 in steps of 0.1 (default 1.0) user bool flak_footsteps = true; // players make footstep sounds +user bool flak_bossfootsteps = false; // boss players play mechanic footsteps (unlike in vanilla UT) server bool flak_translocator = false; // translocator is enabled (hello, sequence breaking) server bool flak_transloc2k4 = false; // translocator has recharging ammo like in UT2k4 and up user bool flak_noswitchdeemer = true; // don't switch to redeemer when out of ammo @@ -34,4 +35,4 @@ server bool flak_swingers = true; // weapon recoil that affects player view server float flak_swingerstrength = 0.5; // strength of visual recoil server bool flak_radboots = true; // jump boots protect against damaging floors (this is to account for the lack of a radsuit) server bool flak_blood = true; // [WIP] use doom tournament blood (disable if using another gore mod) -server bool flak_gibs = false; // [WIP/UNSTABLE] use doom tournament gibbing (disable if using another gore mod) +server bool flak_gibs = false; // [WIP/UNSTABLE] use doom tournament gibbing (disable if using another gore mod) \ No newline at end of file diff --git a/graphics/Blake.png b/graphics/Blake.png new file mode 100644 index 0000000000000000000000000000000000000000..5b1d0b8acb2bb2f18335a568a97e9c167b7bbfc8 GIT binary patch literal 2673 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 literal 0 HcmV?d00001 diff --git a/graphics/Ivana.png b/graphics/Ivana.png new file mode 100644 index 0000000000000000000000000000000000000000..c16e1d1caf822e32972beeeb729d2b2d8032e3d0 GIT binary patch literal 3356 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 L)z4*}Q$iB}2N8c} literal 0 HcmV?d00001 diff --git a/graphics/Lauren.png b/graphics/Lauren.png new file mode 100644 index 0000000000000000000000000000000000000000..a3d748c833489f1f2c3d86055e11ad076cc20e29 GIT binary patch literal 3244 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 literal 0 HcmV?d00001 diff --git a/graphics/Xan.png b/graphics/Xan.png new file mode 100644 index 0000000000000000000000000000000000000000..6e971d5c75673a075c046965fd96f8fce3639a88 GIT binary patch literal 2878 zcmeAS@N?(olHy`uVBq!ia0y~yU~mCp4rT@h2L7|j4GauSe*=6%Tp1V`7#SIvn3$OO zn3r^9v~Qhj9o9a0?2u3knMf3GoOCa|nxY3X8}Ki|7iAiU^B~3A^!$i1Lbx zaf*s7h)PO``U#7P3yE_vi%W2eOQ?vKiAYEaNl0l*$Vf>_aZAhaNXzKRNQ=nGn#u(0 z%F6S~$}7n$^2#sdSCA7`P~uaF;Z;cGQJ5&Ks3@(d!mp?%q1Yy+q#&lODyXb(qoSsu zqNT2KhE-KvP+fpgT~kOy(@9fDNJ~Xpdzzw-o`{Z~mX5xg&K5qM)AD*6^7;m12HMI7 z28IU4;f99(hQ^|X;bumXLdNhH@rVhGrHL=2j9G7BQB_>Xz10RwfEomUdRF zbgZqEZS19OO|@-H0_~Iq?Cg~79Hs3Y@|-NSom^#{_ZT{#Fm%xnadA;{ahG+qH*~$B z=jLwZ=F#u&s_yP3=dsMq(?{N`LeAS&$J;~O+fUK^J%{fzIX^cee}8}fAf*6bonTLs z;9#wgkdV*_l`vn+uwa9*Xw^s+&d3PE=vdY0q^y`&z4%z8_+<42ZSI6n`-FJ2v_zY< zOzpHfql{>W%uJK)G>6<=i~KCdf_RsLVuQkkWyP=UOHzGG^Ia-7HB}liR~30z)frcp zx!2ZM*Vj7L&!5_m6VO`c(^iq#)$ZBd-Q8Oj-rMEV*WTB^C2&G*erD|W4^JFv0o;I6#Gd#a8et~z$E^Z3^GGiz$k?wx%8;`B>* zr(8Zf|H`iJTbJkDJ~8$7wUrNEPkV8C>f0;x-#uOV{ma4c|M&iRzh&VKl`IAZ_CKC3 zjv*0;&(1jAFXJwIeE;3p*sGUq*Uy_fb8hX~3i&=+vEv$IEqgdRR6Hge*L~8UWbx#H zy+g~61D)KDIE0v5T3lF!gkl7QG!z3BZZuBq6;7XA`lqA3ysRv4@85T;-s$oAEx8e= zo!iP>sx#H@*R}88SKohseeIlM>hZ7sH!w2Y`OYc0+>!6@a{jc1>>dmg45o4=KP~!u z>wVt(ClgFJ+szVE_^RTdD48&&+WpzT1MgWby;Qj@aTO`RW00;OhIFE}!e>$~V;|J@fn2((~!? zHukPk^$Ca1vuTL8Ym^n-2z;p$x^##7vrvX5Mad4%l1-YMG+dndR^0y)^8+T`sn6*&o!Y8r}CtXc>D;u&Z$4*A52dOh=9l{|=?Hb8Y(PIPK%zf^ED~ zvKpZa8~`@~ z)sjgTH+dRnOr34IRAR|bmbZMb`KM(*XgRTG&$}gY4}Ppj6G)5Je0Fm3YWIJ}RSV>w zA1beS)62I>XwSxkEp}Nxr?+Mbsy?|Q_1Ch0vrdn7_T6`zdfjSo^*j40ZkuNP)X7Ur z>E63YE(?<1;1RE|{Y9NmqyI zXisj?oQTz?6W->xuKdzA(K2}AkrQqjI5r zhO#{O$vqLfHz+^4vAck0F-H|s%49v+R1RZr{G_={#jGlD*B zF!G4Gu&cX6+}KRQ->ltg+vJFx)uQxtB@-s6#&5`F)OwPlb} ziFC+Wn-3OBvYOo*nQ7LUrU%ay{_Obn`}!3fSGP0Ow|?{<=KLia=5caE^YpDntNsPV z3KuW`*R=41S}}KjWQCz<%+x6#`r9?`g@!xVKFDscs}EO7+3pchxLEI|9A5uqvXS-{`KGF#l3??4^4N~o~_!GwqxUJf1QVltR5B5-d;I9 zk@@L{26d?$haS7{zIA91pXA=3-wgWh+6V}&6F*Wfl=@44TZ$949sL(;$4Bj*XT znq<085)9NxHfA~a?dE=Sar>)Q4?Zqk>o`YMl7Vl@g~p_LDV;|jZM>9Wa(gQ8W>vK- z-kk#1L>ex1o0eE=EKO~0bpPdb-q!u7=&`mdvl0tx?2}XR`XrMkMsQHdt#;m=w10nd-~dUsD(*-n;(wbuc~bK>#te8(VkU<=jXc_j;goyM4C+6U*ApXtogfiuJdB$!w+Sy0{K7@hA8RO#TzeKu3WgwD#SPE|L35lW6$UB z+8xB?t6{2SqI;OrAbnQXB8F>SsT28)%idM37S|KIKKVW4^YM3o4<&0~SKKQcAd*n2`z6_F%jEm>=kl>1xO|`UOoQR8 zTqk~uWe@XebC*UvG|~FLz|&Pxtvt|I#DR6y`G{qCx;9d86YD26*?s-`=aS==I}!2g z^@1c0Og?YcVeXn?XU80%^y9Bd`xT=C)^*B^OgXk+%-j3V&yzkY^|*Z1-UZ*zd{CdW zI56HdbJx!{IHkGvS@=`-sb|-$Uos;;LP&B?_|e*%$IcZkefd4I^{ds~rQMB>Sr*4~HiX{l zzFNgPYZ)_BgVi@XoqoL;u~s)V{U2Rh{Vr$yySM%fSquTi=}&x*X+CE#eH*#@s+sn@ zyW76Cy!(COOCXyD1EWm(EdB7eUW>2&{3g7$GrN4}>!mAaa~*i9A;o(VDNPHb6Mw<&;$Ug3*Ke` literal 0 HcmV?d00001 diff --git a/graphics/hud/Boss.png b/graphics/hud/Boss.png new file mode 100644 index 0000000000000000000000000000000000000000..d173a8b73aaedb048824a7768959aa032b339b0c GIT binary patch literal 4553 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 literal 0 HcmV?d00001 diff --git a/graphics/hud/BossArm.png b/graphics/hud/BossArm.png new file mode 100644 index 0000000000000000000000000000000000000000..194faff466bdfeb6a4e9430d4d14a2da3d391a8c GIT binary patch literal 1083 zcmeAS@N?(olHy`uVBq!ia0y~yU}#`qU}WH6W?*3OQSY0|z`*b=z$e6&fq~&ay+BV- zPk(>^gb5QSPo6w=>eOk|rp=f!W7e!$bLY;TH*em81q&7}TC{ZO(&fvSuUxru)v8r% z)~s2#Zrz3r8#Zs=yk*OlZQHi(+_`i2?%jL$?%ltC|G|R?4;?ym^yty!$B&;refr$F za~CdLxOVN@&6_tLK79D($&+W#p1pYS;`Qs-Z{NOs|Ni}l4<9~%{`~dp*PlOsw%Atf zU|?WSDGBlmW@v8d?CO~?dFqULOINPhuzAbQ-Fx>RI)3KTmD~3pKYRW5{pasL*&L#x z85o!@c)B=-RNQ(qEw_A@fkfM7zwLQ*W3NZvTD)zu-2w%tz#CZ$uUc)7yg&W_|MY1r z8#SJ5xP1s-r$6V3z`O1bEi8(S4hjMsEKCThW5UjJ#XY+$eYIp6>ibIMYa=r2I{8={ z{>n!DI?~Cp$6DW6?}}biiI89h&xd(@Cbh3ll&b0!)P$+LZ~Mq|Z=W}3+l+k$|7s%~ z%v0|x9@b_McK?@od)uYe2F;IS8dLqPc$cp1d8qZ{)`d{tt+ofwJW@JsbvnM(=*k{- zzUOm(MqbF-?LF_365CX+)5rEpbtT={vi}=btHS*S-)EXeX7|r<-Rbj5clO=zqpE(5 z+&aIRt}M9!`YVs?#mL#VH?I9-s{K-4aQ0{|%XY2nu};U&tN%U5V!@hMU|LbI`s4-(&W=9rJp-?&(i!Qg1&NZJ2ob?wRD}_ut>XH*I&$gEdYC*YEed*D4NETzyc5 zrDFAjs|i9(dqPiS8E`V*(`s2bb3((p@YXeK!h#Q0AJTc@$*EBj$`QPLHplsUr_M=A zclsXOXZ&Ers;2iA^)4l!Id7QW;OTujn<4E3+dW^0V+S2PC+S`Mr^EY*bHX1UuW1Jq zrZJp6uQa94aZf4#d;zbM3T+KW-m3E@k3@buYgvBvxWR^P=Nw9T(m9rxdj@S-!_w5?K3A>)Me<`Y-w2on2u29CV4~AE3rhGSlsc^wSE}Uh@_qnpm5+dT+ z%&vT___U;jWsOMqfu?K&@z;BO#cZaWI8+fePkK&$LlFDF3yT;1U2vA6Ysp+?F5k2B z8AX?TVa*Lh{(pOMfsH|cts#MzQ#-+7!~Z_j3K_;?_51(gHoJYPSS0&vhUq^o dMh0x4z?tdkmC6WXo;_wDX-`)_mvv4FO#qENOoIRb literal 0 HcmV?d00001 diff --git a/graphics/hud/BossBlt.png b/graphics/hud/BossBlt.png new file mode 100644 index 0000000000000000000000000000000000000000..137341182783bd31aaaae5b21a7a980fc2a8fa48 GIT binary patch literal 2292 zcmeAS@N?(olHy`uVBq!ia0y~yU}#`qU}WH6W?*3OQSY0|z`$@Uz$e6&fq~)w&_lX5{1-msQm^wsds& zPntG!?t&%DSFhW&b?2S~hmV~)d+y?u8@KNr=FnhaU|^r^>EaktaqI2u?EKqiB5j#o z`&|9zu;$)Mds!8EErGjh(d`X&&-AbJOI%oZw1H2Moxt+^9mKV%35o4b#3S zE)SGs$T@C*CsjF7lQH7pW8+tgSQI2Vbt8{5l>NK4BAkU`w{|4|jzo?yZKjOJ5)P;5 zD+-+a#F!G-ayokfU*b`Q?zjW{Z)JRQwoaCmJ-_SskDL0{(npr={C#=za(;(dmWc&F7}l_t8y6pU zEcox%y-(QW+V<h6z^aNdza=GFLkN(bJ3+cA*HvzT+7vK@T+>~ZTqZl-yhaf z1|KvZJn`$aF!P?w_asaq-ka^T(~)|!a0><<_7mpq%n3^!J$JjTJPpr`n5otcN3&dR9AjQAIZJ`qDjl}}1w0X16oDT5hsY{zG`0Ku=zoyh(yd0*3E=mz2q9&YUG3baRQw#{Bah*+E@JoHrH= z2;H+^bg7anc`x(i<^S?D89A1m;R?8OO66ccpjX*5W3CVDrfgQ&cz?TljxA50oo3*J z`S%h-ER6qrZGWJz%JBQarx{C|9|*|QYdvHZVmLR6uX|4Sew$AWFHVOkyt~ouyrDd- zrnV%YNOppV!~^;KuJ!l-Pv;2GW}WcmWI@6@MiI>eTmkb>E@fKqLXf$Rr_uVupCE?h zAf7uvXDNRDeXmcsP-7ooa)W{Xj>mfM-)u_Jnq6&nkX<>fAyBG*6W9AU*JjL{oAV~} zXW)y?OixVTG;e(`am;_-<@`JP>m81rd+RQC`A=c@+uqNGW*mPUL>Rtbsoudg> zL79dMrGIP>d_vv^9}Jzrkh17$PkxQLIqS2I#y~lS<)%#~0vnih%#ZTVs5rm&xR6QJ zBd(NhkBS?cKSwfrlQ?1WmXqPe-Y;n<7CQWLnWp|}J#$%=l$f=HRnzuYOjjR81+Osi zVYrlkc9$Px?87>XM26Yb0dF?0a zH#2SiyIYmT;Z8@vPqToct`$p|nrf#M1#B}A6jiL1{he(+|G(I=Bst@T?FW86e<(5g zM8(F~Jv^>?#}7IsivIbSos-VA@WZF=H~g3cSq~hVcvK+fnA#(bdIJd;2cCq)Jqt9Z zD`-Au<-V?N_@Y>I1CPRj114Mf(mVcncr;E}#h_IGu6YX6zZtR#c5xbO4j3^cy-$v8 z4Agkj<+n_nG|?B!`PVd!UaoDg*2kw4elE!-6%9FymAob7g+ z{Xfn6toHNsSrsB4QjbqBN?tch$-VL4%d52$xgR7I-BGf75iH7Zl&fL!%agsu{p=6U zRwl8p=U%Nf|4E1Tv&DZs& zg2_WJP{?oE`bYVK3pFOLWLW!6d0tgGpThPte_|Mw?lLH5YL~5MzOc$c-~}7U{*s1( z?c7dlxfZ;B$He`rjPc4|t|yE;ob(u`?nqc8t}tOgpW?=2CqosaG}$*qU74-u+qg}n zLG7)ty8~;6Cu7FN%Z(0}4$>k!8CI4$cJC7ojtvN2>mV>O_JLSSzX)rSp{-_)H^YY8 zTjtJ~HE&UrVa;{7HBIRW_{whAmxk4R;IO0hkAGf-2HYhyTKaR$UV#V zD3{1i2Ne#5<6290I~Z^TG3c)D;a1Ubc(1s|fiYkUm(pCW1o43DiQKC~8Fn{FvGh(W zV&z)2LC0aQtF40|(@*JxMh=bqi=7&(JR6!Mw8|P|&Db0Q1vbg`1TY)0HOvxQ&DNoG zmP_To+k@9k4wsAB=J~OH=wFz}FqcbZ^7mu2L_gS`Wr$#3!mjYCp-JHZ!v{Aj#tS-s zOtcu*u^$N7&6IqWVUjr$U&BKgmX$0HJI!vhsVTIWd5O-Ldp`Ij(|ggIjO*7o<^Px6 zc=31hB!rZMm| pFd8th9bk}PU{1ixDQo!85Pj^K{4v+ylMD>E literal 0 HcmV?d00001 diff --git a/graphics/hud/BossBot.png b/graphics/hud/BossBot.png new file mode 100644 index 0000000000000000000000000000000000000000..347a72f35c115a95b1826eabf23659a7e3aa3d45 GIT binary patch literal 1299 zcmeAS@N?(olHy`uVBq!ia0y~yU}#`qU}WH6W?*3OQSY0|z`*b`z$e6&fq~&a-9b-J zPk(>^gb5QSPo6w=>eOk|rp=f!W7e!$bLY;TH*em81q&7}TC{ZO(&fvSuUxru)v8r% z)~s2#Zrz3r8#Zs=yk*OlojZ5#-o1P8-o5+x?>~6(;Gsi@jvhUF{P^+Hr%#_dckaT4 z3zsfkx_0f_ojZ5#-@pIx;ln3So;-W@?8S>0Z{NOs|Ni~guU~)u{Hf2Z^oxOkLA@l% zFPNdZrLD88XTsDOv*s>Xx^m5iEjxGbKYIN1xeJ%BT)Tb$@w3GNuih)s{1-|ck|XX8+85pW`k*l%@lBj;Clu7ukrbKifoh+W%`D@7 z{p{U4oLCul-*(&UC}Ue&dY4_iVWCIE9-o3Ad)~L54qw0Dzx3+Y(#b1iJiJ(Ywg+(N zAE=ps(ny0xI5%VcB~Ov#^92jO1Xc&S%cuoQ{|wpF(BK%u8*KW@{lDrAhUEC;4_Rc+ zHntn>{(rPrcG9QU7G4a0m6&e*{=Ysw{K$jEJ!=@ZbhjM%G0CX5MMmJ>wv95Cs&`EG zGyu9*gv4WuDhSdoNn3&dtWnM^PbvwUrV@Jb|?|Tav8I@MI zWo(!%@FA96AmE1Zu{!ttAKyzevb^xSo&Vyk_wS9mP16-`dHd8POi1ioZr8w9DIIm7 zch)!N@*oG3uZ$*F_vhXaSd#I#bKQ|pK@0Y-Ro}m>mrY%gEEaL#l;x(%aEI$!U${E% zbSz=0j;iI1ZF}k1-Iw!0Dzx~|l-gzdTRPV(7qgUvO77svUVYBcV|C!pS?9_l?zW07 zC^WciHD8YBeYR7**Rs#mQ~tN`I4VX3Eq^I9MOLV`PIlE#t&loKwrU9L=E)cSA8W)SvC3ve!`fgm^{NdVl?RMs91nhLJQCTs zXU@6BmeuxigeQdO&x`oIxANT@huohGUluU8Ets;n{m`5Yrpvh}v?5Mwz1b-4xqsrh z0_mWJtgSI0!@fP7`Po&SD}psTz2tqH=e0zsfQC26C!O`Xw@Geqd>%OLwjnQKPu$FIs<9kJ2{y$PO-RnLSy43vKe%4^Kpxgh0elU>1NTNm5g z%s*=1y=d9k)>vm@_+oQ+QXc^gb5QSPo6w=>eOk|rp=f!W7e!$bLY;TH*em81q&7}TC{ZO(&fvSuUxru)v8r% z)~s2#ZrzqGTXyc;xqJ8Sy?giW-@pIh!Gnhm9XfjS=<(ynPo6w^`t<1w7cN}8cJ21< z+js8VdHC?*f%()AfuHC->_}S~X?>~J0`u%4jmv12h0~5Qai(^Q|t+!Wh zmt6`FXn0tmaV;!5#AfQWt}T-tg7}2k7G}5{%o2V6_x`bNwi_3Vo*$e2fA^fDQJ*Kz zovXlr2^xI)TwGkvm6`v2utTv(PwA27f+WvLJ^OFBwTLUFrR`4(j%N(*4&7`r=iame zjigL-*&2x#C&C>L-&!^El`dz$YtD=ntI}54#xoX8U6r<~Ue!iqqi3)wf5%?dGba22 zzSY5#C)enib$;5Jw#ql3@%rA-hP2EdOQ)T$Z#x&W^{w`TH1T(f?j5~&_D{*W)`lzL z2ePG8)@_+}zi)kO;kT3F4mZ2{t(VKpIJ(>BtQ)uNI7R=}Zi#)jhgLh^4!Ym0+=U9+{r>mdKI;Vst E08az%bN~PV literal 0 HcmV?d00001 diff --git a/menudef.txt b/menudef.txt index c626275..6633aaf 100644 --- a/menudef.txt +++ b/menudef.txt @@ -60,6 +60,7 @@ OptionMenu "UTOptionMenu" StaticText " " StaticText "Misc Options", "Gold" Option "UT Footsteps", "flak_footsteps", "YesNo" + Option "Use Boss Class Footsteps", "flak_bossfootsteps", "YesNo" Option "UT Blood", "flak_blood", "YesNo" Option "[WIP] UT Gibbing", "flak_gibs", "YesNo" Option "[WIP] Corpses Take Damage", "flak_corpsedamage", "YesNo" diff --git a/sndinfo.txt b/sndinfo.txt index c48f9c4..5f879a3 100644 --- a/sndinfo.txt +++ b/sndinfo.txt @@ -16,8 +16,11 @@ ut/malepain3 injurm04 ut/malepain4 injurh5 ut/land land1 ut/malegrunt land10 +ut/malegrunt1 mland3 ut/malejump jump1 +ut/malejump1 tmjump3 ut/malehump land01 +ut/malehump1 mland3 ut/malesurf gasp02 ut/malegasp hgasp1 ut/maledrowned1 uwinjr41 @@ -25,27 +28,54 @@ ut/drowned uwinjr42 $random ut/maledrowned { ut/maledrowned1 ut/drowned } ut/maledrowning drownm02 -$playeralias player male *death ut/maledie -$playeralias player male *xdeath ut/malexdie -$playeralias player male *gibbed ut/gibp -$playeralias player male *pain100 ut/malepain1 -$playeralias player male *pain75 ut/malepain2 -$playeralias player male *pain50 ut/malepain3 -$playeralias player male *pain25 ut/malepain4 -$playeralias player male *grunt ut/malegrunt -$playeralias player male *land DSEMPTY -$playeralias player male *uland ut/land -$playeralias player male *jump ut/malejump -$playeralias player male *usefail ut/malehump -$playeralias player male *surface ut/malesurface -$playeralias player male *gasp ut/malegasp +// hotfix for a doom glitch +$playeralias player male *land DSEMPTY +$playeralias player female *land DSEMPTY +$playeralias player other *land DSEMPTY -$playeralias player male *death-drowning ut/maledrowned -$playeralias player male *xdeath-drowning ut/maledrowned -$playeralias player male *pain100-drowning ut/maledrowning -$playeralias player male *pain75-drowning ut/maledrowning -$playeralias player male *pain50-drowning ut/maledrowning -$playeralias player male *pain25-drowning ut/maledrowning +$playeralias tmale1 neutral *death ut/maledie +$playeralias tmale1 neutral *xdeath ut/malexdie +$playeralias tmale1 neutral *gibbed ut/gibp +$playeralias tmale1 neutral *pain100 ut/malepain1 +$playeralias tmale1 neutral *pain75 ut/malepain2 +$playeralias tmale1 neutral *pain50 ut/malepain3 +$playeralias tmale1 neutral *pain25 ut/malepain4 +$playeralias tmale1 neutral *grunt ut/malegrunt +$playeralias tmale1 neutral *land DSEMPTY +$playeralias tmale1 neutral *uland ut/land1 +$playeralias tmale1 neutral *jump ut/malejump1 +$playeralias tmale1 neutral *usefail ut/malehump1 +$playeralias tmale1 neutral *surface ut/malesurface +$playeralias tmale1 neutral *gasp ut/malegasp + +$playeralias tmale1 neutral *death-drowning ut/maledrowned +$playeralias tmale1 neutral *xdeath-drowning ut/maledrowned +$playeralias tmale1 neutral *pain100-drowning ut/maledrowning +$playeralias tmale1 neutral *pain75-drowning ut/maledrowning +$playeralias tmale1 neutral *pain50-drowning ut/maledrowning +$playeralias tmale1 neutral *pain25-drowning ut/maledrowning + +$playeralias tmale2 neutral *death ut/maledie +$playeralias tmale2 neutral *xdeath ut/malexdie +$playeralias tmale2 neutral *gibbed ut/gibp +$playeralias tmale2 neutral *pain100 ut/malepain1 +$playeralias tmale2 neutral *pain75 ut/malepain2 +$playeralias tmale2 neutral *pain50 ut/malepain3 +$playeralias tmale2 neutral *pain25 ut/malepain4 +$playeralias tmale2 neutral *grunt ut/malegrunt +$playeralias tmale2 neutral *land DSEMPTY +$playeralias tmale2 neutral *uland ut/land +$playeralias tmale2 neutral *jump ut/malejump +$playeralias tmale2 neutral *usefail ut/malehump +$playeralias tmale2 neutral *surface ut/malesurface +$playeralias tmale2 neutral *gasp ut/malegasp + +$playeralias tmale2 neutral *death-drowning ut/maledrowned +$playeralias tmale2 neutral *xdeath-drowning ut/maledrowned +$playeralias tmale2 neutral *pain100-drowning ut/maledrowning +$playeralias tmale2 neutral *pain75-drowning ut/maledrowning +$playeralias tmale2 neutral *pain50-drowning ut/maledrowning +$playeralias tmale2 neutral *pain25-drowning ut/maledrowning ut/femaledie1 decap01 ut/femaledie2 death1d @@ -67,33 +97,73 @@ ut/femaledrowned1 uwhit01 $random ut/femaledrowned { ut/femaledroenwd1 ut/drowned } ut/femaledrowning mdrown2f -$playeralias player female *death ut/femaledie -$playeralias player female *xdeath ut/femalexdie -$playeralias player female *gibbed ut/gibp -$playeralias player female *pain100 ut/femalepain1 -$playeralias player female *pain75 ut/femalepain2 -$playeralias player female *pain50 ut/femalepain3 -$playeralias player female *pain25 ut/femalepain4 -$playeralias player female *grunt ut/femalegrunt -$playeralias player female *land DSEMPTY -$playeralias player female *uland ut/land -$playeralias player female *jump ut/femalejump -$playeralias player female *usefail ut/femalegrunt -$playeralias player female *surface ut/femalesurf -$playeralias player female *gasp ut/femalegasp +$playeralias tfemale neutral *death ut/femaledie +$playeralias tfemale neutral *xdeath ut/femalexdie +$playeralias tfemale neutral *gibbed ut/gibp +$playeralias tfemale neutral *pain100 ut/femalepain1 +$playeralias tfemale neutral *pain75 ut/femalepain2 +$playeralias tfemale neutral *pain50 ut/femalepain3 +$playeralias tfemale neutral *pain25 ut/femalepain4 +$playeralias tfemale neutral *grunt ut/femalegrunt +$playeralias tfemale neutral *land DSEMPTY +$playeralias tfemale neutral *uland ut/land +$playeralias tfemale neutral *jump ut/femalejump +$playeralias tfemale neutral *usefail ut/femalegrunt +$playeralias tfemale neutral *surface ut/femalesurf +$playeralias tfemale neutral *gasp ut/femalegasp -$playeralias player female *death-drowning ut/femaledrowned -$playeralias player female *xdeath-drowning ut/femaledrowned -$playeralias player female *pain100-drowning ut/femaledrowning -$playeralias player female *pain75-drowning ut/femaledrowning -$playeralias player female *pain50-drowning ut/femaledrowning -$playeralias player female *pain25-drowning ut/femaledrowning +$playeralias tfemale neutral *death-drowning ut/femaledrowned +$playeralias tfemale neutral *xdeath-drowning ut/femaledrowned +$playeralias tfemale neutral *pain100-drowning ut/femaledrowning +$playeralias tfemale neutral *pain75-drowning ut/femaledrowning +$playeralias tfemale neutral *pain50-drowning ut/femaledrowning +$playeralias tfemale neutral *pain25-drowning ut/femaledrowning + +ut/bossdie1 bdeath1 +ut/bossdie2 bdeath2 +ut/bossdie3 bdeath3 +$random ut/bossdie { ut/bossdie1 ut/bossdie2 ut/bossdie3 } +ut/bossxdie1 bdeath4 +ut/bossxdie2 bdeath3 +$random ut/bossxdie { ut/bossxdie1 ut/bossxdie2 } +ut/gibpboss bnewgib +ut/bosspain1 binjur1 +ut/bosspain2 binjur2 +ut/bosspain3 binjur3 +ut/bosspain4 binjur4 +ut/bossgrunt bland01 +ut/bossjump bjump1 +ut/bosshump bjump1 + +$playeralias tboss neutral *death ut/bossdie +$playeralias tboss neutral *xdeath ut/bossxdie +$playeralias tboss neutral *gibbed ut/gibpboss +$playeralias tboss neutral *pain100 ut/bosspain1 +$playeralias tboss neutral *pain75 ut/bosspain2 +$playeralias tboss neutral *pain50 ut/bosspain3 +$playeralias tboss neutral *pain25 ut/bosspain4 +$playeralias tboss neutral *grunt ut/bossgrunt +$playeralias tboss neutral *land DSEMPTY +$playeralias tboss neutral *uland ut/land +$playeralias tboss neutral *jump ut/bossjump +$playeralias tboss neutral *usefail ut/bosshump +$playeralias tboss neutral *surface ut/malesurf +$playeralias tboss neutral *gasp ut/malegasp + +$playeralias tboss neutral *death-drowning ut/maledrowned +$playeralias tboss neutral *xdeath-drowning ut/maledrowned +$playeralias tboss neutral *pain100-drowning ut/maledrowning +$playeralias tboss neutral *pain75-drowning ut/maledrowning +$playeralias tboss neutral *pain50-drowning ut/maledrowning +$playeralias tboss neutral *pain25-drowning ut/maledrowning ut/playerfootstep1 stone02 ut/playerfootstep2 stone04 ut/playerfootstep3 stone05 $random ut/playerfootstep { ut/playerfootstep1 ut/playerfootstep2 ut/playerfootstep3 } +ut/bossfootstep bfootstep + ut/playerfootstepwet lsplash ut/wetsplash dsplash diff --git a/sounds/BFootstep.ogg b/sounds/BFootstep.ogg new file mode 100644 index 0000000000000000000000000000000000000000..82560bcd4b4cf408b758c66d3a6910572eb26532 GIT binary patch literal 8281 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 PZN2I0ONME}+Dr@pPOQ2N literal 0 HcmV?d00001 diff --git a/sounds/MLand3.ogg b/sounds/MLand3.ogg new file mode 100644 index 0000000000000000000000000000000000000000..af427c38f22fe92852350ec869d839ff88387901 GIT binary patch literal 6114 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 literal 0 HcmV?d00001 diff --git a/sounds/TMJump3.ogg b/sounds/TMJump3.ogg new file mode 100644 index 0000000000000000000000000000000000000000..d4bd3094f56c7406eac0317b642391d8271e3eb2 GIT binary patch literal 6130 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

e3aHx$a2*`x|c6ef}NC+?dE2HKA)5_hm*a^1KM0 zdSf5sg1T5wP4zP?9=`P4najx-^3S>Qtuv#d;I_oCEAn`rP24IZuE^2F5a{yk>zTOH z2dq0M{Ip+YvEUsOgUGy|xI4wh3lt-&0`BjXyve}8d*qtFfo+J!p1G07`j*bUW6xFp zN<7$8{>Gj+`e}Ov7c?FJe#cTTR({4Q56RP2ysJ$a*{@p)MaVPAbz1vy7zCGmd8N&n zP-hW0SE=h*+xG3MZVf;F)KqwsbFqid&)>eAYnATfU-xtNUNLksY4b2qHcL@>UbA-j zMx)Pb@9qE1_VWF|C(3#Xt|dVn%_fJQWV$nG2*j)Hf9C%F>fCK|3%@LVbYb&;%{3EJ zTzhuse%)hwdyAK*$f};QsYRYjb6@Z^O#e{tykkah)Vg)ESnqjQpJ_0j*>KNNXnxPF z?8hh0eX-)#i~NV|0-(@VV+|ABF|H|L(agrD?Pw_(pxp*-+`bhqZF&#hbG* zEI1xf7!}*|R3aeE|9sqh>#21eDWZZhTN`GYr0jKOyeDy6OVy*capDtUh8b<*;*4SC zM{e+b)jS~bV&2~?S?~CHS?Aq5oM8FaLW3hSUB1qkiG!=lJm!Gu_5L*v)txWeeSX6$ zEWLTA?j8Ld?=QtK{W@cJ)wWFx3BRs(hM#?RFX~3GtiH|71zx*nuQc&r`^HyLBs1u3 zNm2cr`=y@J3@f@feK_^um%Y|Dw}9CFFJCX+#}apZm*M5kW$VL^+>vEsunuRgW;IE2 z6_k5^s^SUHtIdWbY_{vq-jDy%QQLUXBhmeI=HtpE; zyX&ObniA`e2QQ~*U8!a$)DQGxU6NsYGCuf9=gYUH-3#(xxpwn*6iVgkU3Ih3-<`|f zu;ZZBmY@F%L~>GeuK0aFe0)*CSBag=+zxR#=P0<9e2fUJuBqjYxO+k9OU;|c{|drO z_~*GNE#_Bxyhd`LXNU_&qQpAuO~yVfC$~JGcj4^T?Aqrl3`_o=U0;8Ctt#^ol>?R@ z(v!aS9x<0rIU0QY#p&zoX literal 0 HcmV?d00001 diff --git a/zmapinfo.txt b/zmapinfo.txt index 4ad1c5d..958dc67 100644 --- a/zmapinfo.txt +++ b/zmapinfo.txt @@ -1,7 +1,7 @@ GameInfo { AddEventHandlers = "RedeemerHUDHandler", "UTMainHandler" - PlayerClasses = "UTPlayer" + PlayerClasses = "UTPlayerTMale1", "UTPlayerTMale2", "UTPlayerTFemale1", "UTPlayerTFemale2", "UTPlayerTBoss" StatusBarClass = "UTHud" BackpackType = "UTBackpack" BorderFlat = "TEMPBG" diff --git a/zscript/utcommon.zsc b/zscript/utcommon.zsc index 27c6f97..17fd548 100644 --- a/zscript/utcommon.zsc +++ b/zscript/utcommon.zsc @@ -11,14 +11,29 @@ Class UTPlayer : DoomPlayer int last_tap_fm, last_tap_sm; int last_jump_held; + int dolltype; + + Property DollType : dolltype; + + enum EDollType + { + DOLL_Male, + DOLL_Female, + DOLL_Boss + }; + const groundspeed = 400.; + const swimspeed = 200.; const baseaccelrate = 2048.; const walkfactor = 0.3; const utaircontrol = 0.35; + const swimspeed_doomish = 400.; const groundspeed_doomish = 600.; - const terminalvelocity = 2500.; const dodgez = 210.; const utjumpz = 325.; + const groundfriction = 8.; + const fluidfriction = 1.2; + const terminalvelocity = 2500.; Default { @@ -28,6 +43,12 @@ Class UTPlayer : DoomPlayer Player.DamageScreenColor "FF 00 00"; Player.ViewHeight 46; Player.GruntSpeed 20; + MaxDropoffHeight 18; + MaxStepHeight 18; + +NOFRICTION; + +NOFRICTIONBOUNCE; + +NOMENU; + UTPlayer.DollType DOLL_Male; } // Have to modify the give cheat to handle UT armor @@ -188,7 +209,7 @@ Class UTPlayer : DoomPlayer if ( !footsteps.GetBool() ) return; double ang = level.time/(20*TICRATE/35.)*360.; bool forcefootstep = false; - if ( player.onground && !bNoGravity && !lastground && (waterlevel < 3) ) + if ( player.onground && !bNoGravity && !lastground && (waterlevel < 2) ) { player.jumptics = 0; if ( lastvelz < -8 ) @@ -199,16 +220,17 @@ Class UTPlayer : DoomPlayer } else forcefootstep = true; } - if ( forcefootstep || ((abs(sin(ang)) >= 1.0) && player.onground && lastground && (player.jumptics == 0) && (player.cmd.forwardmove || player.cmd.sidemove) && (waterlevel < 3)) ) + if ( forcefootstep || ((abs(sin(ang)) >= 1.0) && player.onground && lastground && (player.jumptics == 0) && (player.cmd.forwardmove || player.cmd.sidemove) && (waterlevel < 2)) ) { double vol = abs(vel.xy.length())*0.03; if ( forcefootstep ) vol = clamp(-lastvelz*0.05,0.01,1.0); if ( (waterlevel > 0) || GetFloorTerrain().IsLiquid && !bOnMobj ) A_PlaySound("ut/playerfootstepwet",CHAN_5,vol); - else A_PlaySound("ut/playerfootstep",CHAN_5,vol); + else PlayFootstep(vol); } lastground = player.onground; lastvelz = prevvelz; prevvelz = vel.z; + // TODO exit/entry sounds for water } double FrictionToUnreal() @@ -235,7 +257,7 @@ Class UTPlayer : DoomPlayer else Angle += cmd.yaw*(360./65536.); player.onground = (pos.z <= floorz) || bOnMobj || bMBFBouncer || (player.cheats & CF_NOCLIP2); if ( player.onground ) lastgroundtic = gametic; - if ( !player.onground && !bNoGravity && (waterlevel < 3) && (abs(pos.z-floorz) <= maxdropoffheight) && (player.jumptics == 0) ) + if ( !player.onground && !bNoGravity && (waterlevel < 2) && (abs(pos.z-floorz) <= maxdropoffheight) && (player.jumptics == 0) && (vel.z < 0) ) { SetOrigin(Vec2OffsetZ(0,0,floorz),true); player.onground = true; @@ -277,7 +299,7 @@ Class UTPlayer : DoomPlayer } } last_sm = sm; - if ( !bNoGravity && player.onground && (waterlevel < 3) ) + if ( !bNoGravity && player.onground && (waterlevel < 2) ) { if ( dodge.length() > 0 ) { @@ -329,7 +351,7 @@ Class UTPlayer : DoomPlayer player.vel = vel.xy; } } - else if ( !bNoGravity && (waterlevel < 3) ) + else if ( !bNoGravity && (waterlevel < 2) ) { // air acceleration when falling float maxaccel = accelrate/TICRATE; @@ -348,6 +370,7 @@ Class UTPlayer : DoomPlayer double maxvel; if ( flak_doomspeed ) maxvel = (groundspeed_doomish*fs)/TICRATE; else maxvel = (groundspeed*fs)/TICRATE; + // TODO attempt to replicate walk on ice velocity increase glitch // if new velocity is higher than ground speed, steer but don't increase it if ( (vel.xy+acceleration/TICRATE).length() > maxvel ) { @@ -359,41 +382,70 @@ Class UTPlayer : DoomPlayer player.vel *= 0; player.jumptics = -2; } + else if ( bFly || (player.cheats&CF_NOCLIP2) ) + { + // fly cheat has infinite friction (player stops moving when movement keys are released) + Vector3 dir = (0,0,0); + if ( vel.length() > double.epsilon ) dir = vel.unit(); + Vector3 x, y; + [x, y] = dt_Matrix4.GetAxes(pitch,angle,0); + acceleration3 = x*player.cmd.forwardmove+y*player.cmd.sidemove; + if ( player.cmd.buttons&BT_JUMP ) acceleration3.z = 0x500; + else if ( player.cmd.buttons&BT_CROUCH ) acceleration3.z = -0x500; + if ( acceleration3.length() <= double.epsilon ) vel *= 0; + else + { + Vector3 acceldir = acceleration3.unit(); + acceleration3 = acceldir*Min(acceleration3.length(),accelrate/TICRATE); + vel = vel-(dir-acceldir)*vel.length(); + } + vel = vel+acceleration3/TICRATE; + double maxvel; + if ( flak_doomspeed ) maxvel = groundspeed_doomish/TICRATE; + else maxvel = groundspeed/TICRATE; + maxvel *= fs; + if ( vel.length() > maxvel ) vel = vel.unit()*maxvel; + player.vel *= 0; + player.jumptics = -2; + if ( !(player.cheats & CF_PREDICTING) ) PlayIdle(); + } else { - // swimming uses standard physics, otherwise things break - double forwardmove, sidemove; - double bobfactor; - double friction, movefactor; - double fm, sm; - [friction, movefactor] = GetFriction(); - bobfactor = (friction double.epsilon ) dir = vel.unit(); + double doomfriction = clamp(GetFriction()/ORIG_FRICTION,0.0,1.0); + Vector3 x, y; + [x, y] = dt_Matrix4.GetAxes(pitch,angle,0); + acceleration3 = x*player.cmd.forwardmove+y*player.cmd.sidemove; + if ( player.cmd.buttons&BT_JUMP ) acceleration3.z = 0x500; + else if ( player.cmd.buttons&BT_CROUCH ) acceleration3.z = -0x500; + if ( acceleration3.length() <= double.epsilon ) { - fm *= player.crouchfactor; - sm *= player.crouchfactor; - bobfactor *= player.crouchfactor; + Vector3 oldvel = vel; + vel = vel-(2*dir)*vel.length()*friction/TICRATE; + if ( oldvel dot vel < 0.0 ) vel *= 0; } - forwardmove = fm*movefactor*(35/TICRATE); - sidemove = sm*movefactor*(35/TICRATE); - if ( forwardmove ) + else { - Bob(Angle, cmd.forwardmove*bobfactor/256.,true); - ForwardThrust(forwardmove,Angle); + Vector3 acceldir = acceleration3.unit(); + acceleration3 = acceldir*Min(acceleration3.length(),accelrate/TICRATE); + vel = vel-(dir-acceldir)*vel.length()*friction/TICRATE; } - if ( sidemove ) + vel = vel+acceleration3/TICRATE; + double maxvel; + if ( flak_doomspeed ) maxvel = swimspeed_doomish/TICRATE; + else maxvel = swimspeed/TICRATE; + maxvel *= fs*doomfriction; + if ( vel.length() > maxvel ) vel = vel.unit()*maxvel; + player.vel = vel.xy; + player.jumptics = -2; + if ( !(player.cheats & CF_PREDICTING) ) { - let a = Angle-90; - Bob(a,cmd.sidemove*bobfactor/256.,false); - Thrust(sidemove,a); + if ( acceleration3.length() <= double.epsilon ) PlayIdle(); + else PlayRunning(); } - if ( !(player.cheats&CF_PREDICTING) && ((forwardmove != 0) || (sidemove != 0)) ) - PlayRunning(); } if ( player.cheats & CF_REVERTPLEASE ) { @@ -401,6 +453,30 @@ Class UTPlayer : DoomPlayer player.camera = player.mo; } } + override void CheckCrouch( bool totallyfrozen ) + { + if ( !flak_utmovement || !player || (player.mo != self) ) + { + Super.CheckCrouch(totallyfrozen); + return; + } + if ( player.cmd.buttons&BT_JUMP ) player.cmd.buttons &= ~BT_CROUCH; + if ( CanCrouch() && (player.health > 0) && level.IsCrouchingAllowed() && player.onground ) // in UT you can't crouch unless you're on the ground + { + if ( !totallyfrozen ) + { + int crouchdir = player.crouching; + if ( !crouchdir ) crouchdir = (player.cmd.buttons&BT_CROUCH)?-1:1; + else if ( player.cmd.buttons&BT_CROUCH ) player.crouching = 0; + if ( (crouchdir == 1) && (player.crouchfactor < 1) && (pos.Z+height < ceilingz) ) + CrouchMove(1); + else if ( (crouchdir == -1) && (player.crouchfactor > 0.5 )) + CrouchMove(-1); + } + } + else player.Uncrouch(); + player.crouchoffset = -(ViewHeight)*(1-player.crouchfactor); + } override void CheckJump() { if ( !flak_utmovement || !player || (player.mo != self) ) @@ -411,9 +487,7 @@ Class UTPlayer : DoomPlayer if ( player.cmd.buttons&BT_JUMP ) { if ( player.crouchoffset ) player.crouching = 1; - else if ( waterlevel >= 2 ) Vel.z = 4*Speed; - else if ( bNoGravity ) Vel.z = 3.; - else if ( level.IsJumpingAllowed() && player.onground && (player.jumpTics == 0) && (last_jump_held < gametic-1) ) + else if ( level.IsJumpingAllowed() && player.onground && (player.jumpTics == 0) && (last_jump_held < gametic-1) && !bNoGravity && (waterlevel < 2) && !(player.cheats&(CF_FLY|CF_NOCLIP2)) ) { double jumpvelz; if ( flak_doomspeed ) jumpvelz = jumpz; @@ -438,6 +512,76 @@ Class UTPlayer : DoomPlayer if ( !player.onground || player.jumptics ) last_jump_held = gametic; } + + virtual void PlayFootstep( double vol ) + { + A_PlaySound("ut/playerfootstep",CHAN_5,vol); + } +} + +// these only exist for sound +// female classes have identical sounds, so they use the same soundclass here +Class UTPlayerTMale1 : UTPlayer +{ + Default + { + Player.SoundClass "tmale1"; + Player.DisplayName "M Commando"; + Player.Portrait "Blake"; + -NOMENU; + } +} +Class UTPlayerTMale2 : UTPlayer +{ + Default + { + Player.SoundClass "tmale2"; + Player.DisplayName "M Soldier"; + Player.Portrait "Brock"; + -NOMENU; + } +} +Class UTPlayerTFemale1 : UTPlayer +{ + Default + { + Player.SoundClass "tfemale"; + Player.DisplayName "F Commando"; + Player.Portrait "Ivana"; + UTPlayer.DollType DOLL_Female; + -NOMENU; + } +} +Class UTPlayerTFemale2 : UTPlayer +{ + Default + { + Player.SoundClass "tfemale"; + Player.DisplayName "F Soldier"; + Player.Portrait "Lauren"; + UTPlayer.DollType DOLL_Female; + -NOMENU; + } +} +Class UTPlayerTBoss : UTPlayer +{ + transient CVar bossfootsteps; + Default + { + Player.SoundClass "tboss"; + Player.DisplayName "Boss"; + Player.Portrait "Xan"; + UTPlayer.DollType DOLL_Boss; + // should have NOBLOOD, but Xan did bleed in vanilla UT so... + // (this is what gave birth to the theory that Xan was actually Jerl Liandri himself) + -NOMENU; + } + override void PlayFootstep( double vol ) + { + if ( !bossfootsteps ) bossfootsteps = CVar.GetCVar('flak_bossfootsteps',players[consoleplayer]); + if ( bossfootsteps.GetBool() ) A_PlaySound("ut/bossfootstep",CHAN_5,vol); + else Super.PlayFootstep(vol); + } } Class UTWeapon : Weapon diff --git a/zscript/uthud.zsc b/zscript/uthud.zsc index 543b5e1..e82eeb3 100644 --- a/zscript/uthud.zsc +++ b/zscript/uthud.zsc @@ -23,7 +23,7 @@ Class ViewTracer : LineTracer Class UTHud : BaseStatusBar { - TextureID AmmoBar, Boxes[4], Keys[5], BigNum[12], Flash, Slots[10], Icons[14], Uses[14], Man[5], Woman[5], WeaponBox, IconTloc2, UseTloc2; + TextureID AmmoBar, Boxes[4], Keys[5], BigNum[12], Flash, Slots[10], Icons[14], Uses[14], Man[5], Woman[5], Boss[5], WeaponBox, IconTloc2, UseTloc2; Class IconClasses[14]; double HScale; Color tintcolor, bgcolor; @@ -142,6 +142,11 @@ Class UTHud : BaseStatusBar Woman[2] = TexMan.CheckForTexture("WomanPad",TexMan.Type_Any); Woman[3] = TexMan.CheckForTexture("WomanBot",TexMan.Type_Any); Woman[4] = TexMan.CheckForTexture("WomanBlt",TexMan.Type_Any); + Boss[0] = TexMan.CheckForTexture("Boss",TexMan.Type_Any); + Boss[1] = TexMan.CheckForTexture("BossArm",TexMan.Type_Any); + Boss[2] = TexMan.CheckForTexture("BossPad",TexMan.Type_Any); + Boss[3] = TexMan.CheckForTexture("BossBot",TexMan.Type_Any); + Boss[4] = TexMan.CheckForTexture("BossBlt",TexMan.Type_Any); WeaponBox = TexMan.CheckForTexture("WpSel",TexMan.Type_Any); } @@ -330,7 +335,22 @@ Class UTHud : BaseStatusBar d = DamageAmplifier(CPlayer.mo.FindInventory("DamageAmplifier")); j = UTJumpBoots(CPlayer.mo.FindInventory("UTJumpBoots")); if ( d && !d.isBlinking() ) dollcolor = d.BlendColor; - if ( CPlayer.GetGender() == 1 ) + int dolltype = 0; + if ( CPlayer.mo is 'UTPlayer' ) dolltype = UTPlayer(CPlayer.mo).DollType; + else + { + // female doll for female, male doll for male/neutral, boss doll for object + dolltype = (CPlayer.GetGender()==3)?UTPlayer.DOLL_Boss:(CPlayer.GetGender()==1)?UTPlayer.DOLL_Female:UTPlayer.DOLL_Male; + } + if ( dolltype == UTPlayer.DOLL_Boss ) + { + UTDrawTintedTex(Boss[0],hudsize*statussize,min(opacity,15),dollcolor); + if ( a ) UTDrawTintedTex(Boss[1],hudsize*statussize,int(min(opacity,15)*(a.Amount/double(a.MaxAmount))),dollcolor); + if ( t ) UTDrawTintedTex(Boss[2],hudsize*statussize,int(min(opacity,15)*(t.Amount/double(t.MaxAmount))),dollcolor); + if ( j ) UTDrawTintedTex(Boss[3],hudsize*statussize,int(min(opacity,15)*(j.Amount/double(j.MaxAmount))),dollcolor); + if ( s ) UTDrawTintedTex(Boss[4],hudsize*statussize,int(min(opacity,15)*(s.Amount/double(s.MaxAmount))),GoldColor); + } + else if ( dolltype == UTPlayer.DOLL_Female ) { UTDrawTintedTex(Woman[0],hudsize*statussize,min(opacity,15),dollcolor); if ( a ) UTDrawTintedTex(Woman[1],hudsize*statussize,int(min(opacity,15)*(a.Amount/double(a.MaxAmount))),dollcolor);