From 2587d6c505150fb28cea7f1340fe52d0627e3075 Mon Sep 17 00:00:00 2001 From: Marisa Kirisame Date: Tue, 10 Sep 2019 19:49:05 +0200 Subject: [PATCH] Adjustments. --- cvarinfo.txt | 6 +-- language.txt | 8 ++- menudef.txt | 2 + sndinfo.txt | 2 + sounds/SentMovE.ogg | Bin 0 -> 4614 bytes sounds/SentMovS.ogg | Bin 0 -> 6602 bytes zscript/biggun.zsc | 84 +++++++++++++++++++++++++++++++- zscript/bonesaw.zsc | 41 ++++++++++++++++ zscript/gatling.zsc | 53 ++++++++++++++++++++ zscript/miscitems.zsc | 102 ++++++++++++++++++++++++--------------- zscript/stinger.zsc | 6 +++ zscript/ueightball.zsc | 6 +-- zscript/unrealcommon.zsc | 22 +++++---- zscript/unrealhud.zsc | 2 +- 14 files changed, 275 insertions(+), 59 deletions(-) create mode 100644 sounds/SentMovE.ogg create mode 100644 sounds/SentMovS.ogg diff --git a/cvarinfo.txt b/cvarinfo.txt index 6862345..4760a3d 100644 --- a/cvarinfo.txt +++ b/cvarinfo.txt @@ -77,11 +77,7 @@ server bool sting_olsmp = false; // adds the stupid oldskool SMP 7243 to server bool sting_msentry = false; // allows the new Minigun Sentry, which // is an original creation for this mod server bool sting_dubious = false; // allows weapons of dubious origin - // (Demolisher and Razorclaw) - // along with the Minigun Sentry, since - // it's an original creation -server bool sting_proto = true; // enable all prototype items and - // features + // (Demolisher, Razorclaw, Autocannon) server bool sting_autoscuba = false; // SCUBA gear toggles automatically // when needed server bool sting_ehold = false; // eightball can be held fully loaded diff --git a/language.txt b/language.txt index c6504ca..5e77188 100644 --- a/language.txt +++ b/language.txt @@ -33,8 +33,10 @@ O_FLAMETHROWER = "%o was thoroughly roasted by %k's Flamethrower."; O_BIGGUN = "%k blew a hole through %o with the Demolisher."; O_SMINI = "%o got blasted into steaming chunks by %k's Autocannon."; O_SENTRY = "%%o shouldn't have walked into the sights of %s."; +O_ROGUESENTRY = "%o was gunned down by a Minigun Sentry."; O_OWNSENTRY = "%o was gunned down by %p own Minigun Sentry."; O_OSENTRY = "%%o took a bullet from %s."; +O_ROGUEOSENTRY = "%o took a bullet from a Light Sentry."; O_OWNOSENTRY = "%o took a bullet from %p own Light Sentry."; O_STINGERX = "%o ate flaming Tarydium death thanks to %k."; O_STINGERX2 = "%o ate flaming Tarydium death."; @@ -230,7 +232,7 @@ STING_PSHIELD = "Power Shield does not drain over time"; STING_NOPSTART = "Players don't start up with an Automag"; STING_OLSMP = "Enable SMP 7243 from Oldskool Amp'd"; STING_MSENTRY = "Enable new Minigun Sentry"; -STING_DUBIOUS = "Disable weapons of dubious origin (Demolisher, Razorclaw)"; +STING_DUBIOUS = "Enable Demolisher, Razorclaw and Autocannon"; STING_QOPTS = "Convenience features"; STING_AUTOSCUBA = "Automatic SCUBA Gear toggling"; STING_MCREDS = "Unreal Credits"; @@ -277,8 +279,10 @@ O_FLAMETHROWER = "%o fue asad@[ao_esp] a conciencia por el Lanzallamas de %k."; O_BIGGUN = "%k abrió un hoyo a través de %o con el Demoledor."; O_SMINI = "%o fue reventad@[ao_esp] en pedazos humeantes por el Autocañón de %k."; O_SENTRY = "%%o no debería haberse metido en el punto de mira de la %s."; +O_ROGUESENTRY = "%o fue abatid@[ao_esp] por una Torreta."; O_OWNSENTRY = "%o fue abatid@[ao_esp] por su propi@[ao_esp] Torreta."; O_OSENTRY = "%%o se llevó un tiro de la %s."; +O_ROGUEOSENTRY = "%o se llevó un tiro de una Torreta Ligera."; O_OWNOSENTRY = "%o se llevó un tiro de su propi@[ao_esp] Torreta Ligera."; O_STINGERX = "%o tragó muerte ardiente de Tarydium gracias a %k."; O_STINGERX2 = "%o tragó muerte ardiente de Tarydium."; @@ -455,6 +459,8 @@ STING_DPISTOL = "El fuego alternativo de la Pistola de Dispersión no es mejorad STING_PSHIELD = "El Escudo de Fuerza no pierde carga con el tiempo"; STING_NOPSTART = "Los jugadores no empiezan la partida con un Automag"; STING_OLSMP = "Habilitar SMP 7243 de Oldskool Amp'd"; +STING_MSENTRY = "Habilitar nueva Torreta"; +STING_DUBIOUS = "Habilitar Demoledor, Garra y Autocañón"; STING_QOPTS = "Características de comodidad"; STING_AUTOSCUBA = "Uso automático de Kit de Buceo"; STING_MCREDS = "Créditos de Unreal"; diff --git a/menudef.txt b/menudef.txt index 60f4fc8..97e7471 100644 --- a/menudef.txt +++ b/menudef.txt @@ -44,6 +44,8 @@ OptionMenu "UnrealOptionMenu" Option "$STING_PSHIELD", "sting_pshield", "YesNo" Option "$STING_NOPSTART", "sting_nopstart", "YesNo" Option "$STING_OLSMP", "sting_olsmp", "YesNo" + Option "$STING_MSENTRY", "sting_msentry", "YesNo" + Option "$STING_DUBIOUS", "sting_dubious", "YesNo" StaticText " " StaticText "$STING_QOPTS", "Gold" Option "$STING_AUTOSCUBA", "sting_autoscuba", "YesNo" diff --git a/sndinfo.txt b/sndinfo.txt index e75da72..7163cff 100644 --- a/sndinfo.txt +++ b/sndinfo.txt @@ -226,6 +226,8 @@ sentry/wind sentwind sentry/fire sentfire sentry/unwind sentuwnd sentry/explode cannonex +sentry/move sentmovs +sentry/movestop sentmove vfrag/bounce1 glasstk1 vfrag/bounce2 glasstk2 diff --git a/sounds/SentMovE.ogg b/sounds/SentMovE.ogg new file mode 100644 index 0000000000000000000000000000000000000000..766d0beb291e8f72fb09a4385c88d1998ca6858c GIT binary patch literal 4614 zcmeZIPY-5bVt|6~x+%6GrpB*%zZvBi%kqnoGK)b1jDp%Aih*HA2ZWx<2-XSVFfcHH zbTTq9Frok5Hm~}7#Jcl3o`Wli_#TxGLyof-GQUg%~2_Kp1FNZv zoHX_wzZdjUx3w#}YwvZb;Mck>65g2yITDNCZoPWPE9iCj?vqqbGl7*jFo2>#qwk@{BxTP@DUs7s zBd0B^oVH@;D*fN<^j@!f`)U_oOWPV2h7$}75^aj@_dL%`2%g}nrWtz1l4IdlKFg;f zDVKtd%}DAAJU1bj$B@;q?Sf{jz!g8sr94U;&K`49&MA1?zIc%I+(JNVlM+J*69Yq! zV~^so3B^2KY>GvFo+lJs&RJ^Co#NxAv3AQePfp#b*OZ>mnd0ZAwsebF(CH;pt~qJ5 zGBB`MFfg!0aJ06q;b2(Az#z~(A;?4X$dn{M!}cjbeVWH71f8)wI-{t^@P$Ii8N(AY zEgqUjC5rtlpDCp9Xg!l@;V}ZmAs+(+qnOh|MQx@A3r2=!mCRX7GZ$rK&eEt_wqn&H zja93jRxW!vbJ?n@MJrb=TeWN5%2n%fD(7W_WanwFTD5Z3y6jb}UU#j^I=yW5t!*z? zZF_TSQ{L`PYi`e5b!ywnU7PY&t;^lLDd+V%o!h&fRIYk8bJ^>vWiNNFdVOott6iJk z&Rq7oYnArxWv@?ddVOl!+Ebg>WiNZVYtiak>sIdC^!5};@0#DsUccJ*>eQ}vr#8L2 zy=~p^O>4P#zu2{H-Kll!R&QGKdXw(!Z8^7{PJRx#YV3RctIy@q(Cb@sua@RU8~a{2 zjSZjXdbKq5>eSNM($whhK9@^6WR4o!`mntHb^HGI13^{u&~(`sW&Q{$)S-u<2$ zdA;^>X=(J-)Z5{yk>68ezqdwiue}=_8f_jMe%<%_)!OLmwTatu?~BKVUk|-`tu=I7 z>HTZ9sWVFF8thuPZuPb|uUF~3-nZ`cF@x8;4A$(*{j+W@_uTE-@9I&0&zdQ z-lxyA`1Pw@TBmnyxV35h>0Np}yVpq{&boc*-K|{(XEy2aY=5tPd_A}G)ora0ua+)e zefwBG_u)(CW&0Qy8W`Cb8W@C6Il!WrO_4)1SwQQULW@8Um*SETLpH@^KCfdkQv|#` z6{lR%I;N1)=XpYAvVd2{$|)DTG?p$6@bX?b`^d21RABy*eYv+jPpLD9@Eg1H7`= zZj}nwHf;?E;$FH%%qw&4*0Ag>-E9F**$bD5d21PN6-&-tdsMRG#WMzqh)qY>G>s$iq0T#E8qd-Ph=T9D;h z8>dc+0_lkAF`aTLNmFy{1h1U6TO*=#OqWed%Gr1|BBVgXsrZPB)Ffb(WB=74spm0p% zs6@*#g{2bB7bF&oBnxOQl_=(OS}Kx!&hdmq@i|9L$>ej6>Z&aQPMS+w1e`RMPGMqT z;F4irV9L2LB|>Jwg$bgJ5Ct1X*bcw)l9dFP$h9#jTk-&8tiG*qNx#wMTAv zaIS5=W|XaZ>{623+9MH3S_}+t4lpvjIpCyWlA_8mft|qtkb-EIAZSI1Hc3 zvb~VyI+bXfX7$R99WG9*~{?QjN)^e$0Ul+Sw06zJfBkxk|;iB36ijUJ_jVR zpm_p_b;0okh|8f^a?bL(Op5?EPdo&9VoH#g=F%xaUMm(uSxkx`E?A7##8jx=PDhLanx8^EEMFW*?b`? zYw40pL0*zAQVN2R>IRxZ6}^ju}hq$uyT+h$m@FI{pi zDr@ag0Vl7GTdxIWZ!8T8@?5+1T2!v?k||Nyy2q|1<)|*57L~p7=(Q-Hm0QK4y+LB$ zYmeSY>NY$k#m(>_uYjS!V?$xv)Fqn_U3>se4~mQoEJj|I&*y;Bkz!Dn;qwJxmW!9+ zGl*DAk0Cg{aV(rN0h}70KuOK&xk5{T7bhshL9ql%gF#-LijeFPm0zeVKBbgn z^6(I|00XEg!sNry$k@~r$idVi$N_4FF>o;aU|{gzYUt?5c*esgAS5CtAtfWHpritp zg%T{_W+4kB$Pj3=5Y)O1Rk&y+R8U=0TU}9S_?bLS_xbLt^Y$!XvTI-kCDE~!)C zcT&+R&12g)F-r5s$O^H@`OLRE@WD^cjG3KRtc_FQM_gR?uHKjRz0tR)U;FKIlQWs-Aqu2N`f&8zYy!5)_@-t>tts7gMUY%W+6X?KHrY1HX! z;(xDPS+%)BwRGXM2T5hur(at7`OJF1H4Y4AtF+Ef?>@?-(YT5|+>*Kapn)Fy0Z9i2 z8#YFRmEXQ>zWw|0s~PuH_J&;8HRtb4Is4gbSW1t6(P`KnF5H!P?S+NSmox7Uc|2Ed zub#fAN2>9p4=<`xjcgCWXnup?L6WG=$*zP!6$}~0Luqwkn z2BCx;3kKak_0#=apDlO1^)M^?gKX!K8+6D-zjI=1 zcdXu7d%sBRkyD0Gn%K6MW)APAae_rNEGk!8RtTRe5*UlPpRp~JQoz57=c!SMU!rOY9`u2$d=DY%1kMo`S z=ezF8Lb)?lBD$RxpLM_2-1Ta^tb0l(ti7#$^6lsqldirOPYc{#rWx$7U}d!b+fv3K zCtlQU)b&_vy6lwi=Gl9%S1%NLEVRwQlHuxP=3M2cjIZS<`z$wRE?Xn@^f>nwhK9vV z2Pzp9j{SG{&QhG`r<(U{U1+h-yYp2Ok16alpZ8*o>eQs~|NHsR$*gX_E9sdp_bB4n z!ap;vNp0?0?6v6L+%-qd7cJ!9r@3j<@0#@?wLgA*4>p)?qIGHFX*tWchCe13h5u3A z8!1$zYy2o|<_4(`I~fiz?B_8JV7xNRJ@BhtVZ7G5Z2SHD-73o;Z|2~9`=Ux^!^cl= z%Hrzwawi@0^frFZEc+6YLYLYav?4%dd17G8NPbyNi27F>-sJ? z2~oIito!2b#afOc-LR*tnVD`dOp{(9s1W7fzIfik|G&#i-u_X}m;8G0*WV>k+bk)FYmv; zyHVL(JO0@G;W9P|Kxi5cJ|IF)S z{@23As>ie=)!x;fD*Ew#viP&s`&M6ar{@K+U!TKqaJSL5`=5ViSa2RY$Q?A{Y+Ake z{_i&}<>XGwE?IFU4ThHnze->(cvo7=hwaP8>&`EyJnKJUe^K54Bn`vig zU$Jx5#l&^R^XHUt35F%|s$IQgnm8k$LH48&=Zqj_yO_$T)s~@5-V^da!xl# z-pbm5Z!CHdLOchaId!r5mo|4`cf%+n*znE!9j z9M`Wa{@b+OsqvUC;lJ)or;Uow{*E}>A`!|a z;HiD~QhoO&-`_1;i^^qXP3FGU3fn7u@~(dWp@qkrUEOByabKo+VaC72xe7CitjsMM zDq>HyDhr*J+}|3IRkYJ{$?Scp%vtFRpBXVQG(2Ij4{JE)RP4X)>gM({dmeARWmf)o z+rL*HsnOr_Bxc+E-Taqj{rShqYk%)4&T?~TUT{40sl>ysV|P@~Dkt9fd(bU(=A?}2 z_WvVa-S7PBGGV*-GJB^B+owu|+?=;x^UHtcVUbH;V@1MNH yQ0Dd7L%-h5|KD_Z&ch4u<+od({cLl%B57r{w}R~gD~sciD^g#c{a*f#fdK$*6$$|W literal 0 HcmV?d00001 diff --git a/sounds/SentMovS.ogg b/sounds/SentMovS.ogg new file mode 100644 index 0000000000000000000000000000000000000000..30b2720652d8739e3d4d3f42eeff4ba9f4d822c8 GIT binary patch literal 6602 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 0 ) return Super.PickupMessage(); return String.Format("%s%d%s",StringTable.Localize("$I_BIGAMMOL"),Amount,StringTable.Localize("$I_BIGAMMOR")); } + override bool TryPickup( in out Actor toucher ) + { + if ( !sting_dubious ) return false; // not allowed + return Super.TryPickup(toucher); + } + override void Tick() + { + Super.Tick(); + if ( sting_dubious ) return; + if ( !Owner ) + { + let r = Spawn((GetClass()=="BigAmmo")?"CellPack":"Cell",pos,ALLOW_REPLACE); + r.spawnangle = spawnangle; + r.spawnpoint = spawnpoint; + r.angle = angle; + r.pitch = pitch; + r.roll = roll; + r.special = special; + r.args[0] = args[0]; + r.args[1] = args[1]; + r.args[2] = args[2]; + r.args[3] = args[3]; + r.args[4] = args[4]; + r.ChangeTid(tid); + r.SpawnFlags = SpawnFlags&~MTF_SECRET; + r.HandleSpawnFlags(); + r.SpawnFlags = SpawnFlags; + r.bCountSecret = SpawnFlags&MTF_SECRET; + r.vel = vel; + r.master = master; + r.target = target; + r.tracer = tracer; + r.bDropped = bDropped; + Destroy(); + } + else + { + Owner.RemoveInventory(self); + Destroy(); + } + } States { Spawn: @@ -70,12 +111,53 @@ Class BigCasing : UTCasing { Default { - BounceSound "flak/bounce"; // much heavier sound + BounceSound "big/bounce"; // much heavier sound } } Class BigGun : UnrealWeapon { + override bool TryPickup( in out Actor toucher ) + { + if ( !sting_dubious ) return false; // not allowed + return Super.TryPickup(toucher); + } + override void Tick() + { + Super.Tick(); + if ( sting_dubious ) return; + if ( !Owner ) + { + let r = Spawn("BFG9000",pos,ALLOW_REPLACE); + r.spawnangle = spawnangle; + r.spawnpoint = spawnpoint; + r.angle = angle; + r.pitch = pitch; + r.roll = roll; + r.special = special; + r.args[0] = args[0]; + r.args[1] = args[1]; + r.args[2] = args[2]; + r.args[3] = args[3]; + r.args[4] = args[4]; + r.ChangeTid(tid); + r.SpawnFlags = SpawnFlags&~MTF_SECRET; + r.HandleSpawnFlags(); + r.SpawnFlags = SpawnFlags; + r.bCountSecret = SpawnFlags&MTF_SECRET; + r.vel = vel; + r.master = master; + r.target = target; + r.tracer = tracer; + r.bDropped = bDropped; + Destroy(); + } + else + { + Owner.RemoveInventory(self); + Destroy(); + } + } Default { Tag "$T_BIGGUN"; diff --git a/zscript/bonesaw.zsc b/zscript/bonesaw.zsc index 785268e..5d7f9f8 100644 --- a/zscript/bonesaw.zsc +++ b/zscript/bonesaw.zsc @@ -1,5 +1,46 @@ Class Bonesaw : UnrealWeapon { + override bool TryPickup( in out Actor toucher ) + { + if ( !sting_dubious ) return false; // not allowed + return Super.TryPickup(toucher); + } + override void Tick() + { + Super.Tick(); + if ( sting_dubious ) return; + if ( !Owner ) + { + let r = Spawn("Chainsaw",pos,ALLOW_REPLACE); + r.spawnangle = spawnangle; + r.spawnpoint = spawnpoint; + r.angle = angle; + r.pitch = pitch; + r.roll = roll; + r.special = special; + r.args[0] = args[0]; + r.args[1] = args[1]; + r.args[2] = args[2]; + r.args[3] = args[3]; + r.args[4] = args[4]; + r.ChangeTid(tid); + r.SpawnFlags = SpawnFlags&~MTF_SECRET; + r.HandleSpawnFlags(); + r.SpawnFlags = SpawnFlags; + r.bCountSecret = SpawnFlags&MTF_SECRET; + r.vel = vel; + r.master = master; + r.target = target; + r.tracer = tracer; + r.bDropped = bDropped; + Destroy(); + } + else + { + Owner.RemoveInventory(self); + Destroy(); + } + } Default { Tag "$T_BONESAW"; diff --git a/zscript/gatling.zsc b/zscript/gatling.zsc index 70cbc46..8681245 100644 --- a/zscript/gatling.zsc +++ b/zscript/gatling.zsc @@ -8,6 +8,18 @@ Class SMiniAmmo : Ammo Ammo.BackpackAmount 0; Ammo.BackpackMaxAmount 32; } + override bool TryPickup( in out Actor toucher ) + { + if ( !sting_dubious ) return false; // not allowed + return Super.TryPickup(toucher); + } + override void Tick() + { + Super.Tick(); + if ( sting_dubious ) return; + if ( Owner ) Owner.RemoveInventory(self); + Destroy(); + } } Class SMiniBlast : Actor @@ -16,6 +28,47 @@ Class SMiniBlast : Actor Class SMiniGun : UnrealWeapon { + override bool TryPickup( in out Actor toucher ) + { + if ( !sting_dubious ) return false; // not allowed + return Super.TryPickup(toucher); + } + override void Tick() + { + Super.Tick(); + if ( sting_dubious ) return; + if ( !Owner ) + { + let r = Spawn("BFG9000",pos,ALLOW_REPLACE); + r.spawnangle = spawnangle; + r.spawnpoint = spawnpoint; + r.angle = angle; + r.pitch = pitch; + r.roll = roll; + r.special = special; + r.args[0] = args[0]; + r.args[1] = args[1]; + r.args[2] = args[2]; + r.args[3] = args[3]; + r.args[4] = args[4]; + r.ChangeTid(tid); + r.SpawnFlags = SpawnFlags&~MTF_SECRET; + r.HandleSpawnFlags(); + r.SpawnFlags = SpawnFlags; + r.bCountSecret = SpawnFlags&MTF_SECRET; + r.vel = vel; + r.master = master; + r.target = target; + r.tracer = tracer; + r.bDropped = bDropped; + Destroy(); + } + else + { + Owner.RemoveInventory(self); + Destroy(); + } + } Default { Tag "$T_SMINI"; diff --git a/zscript/miscitems.zsc b/zscript/miscitems.zsc index 2536352..6e96b6e 100644 --- a/zscript/miscitems.zsc +++ b/zscript/miscitems.zsc @@ -1432,17 +1432,35 @@ Class SentryItem : UnrealInventory UnrealInventory.Charge MinigunSentryBase.sentryhealth; +UNREALINVENTORY.DRAWSPECIAL; } + override bool TryPickup( in out Actor toucher ) + { + if ( !sting_msentry ) return false; // not allowed + return Super.TryPickup(toucher); + } + override void Tick() + { + Super.Tick(); + if ( sting_msentry ) return; + if ( Owner ) Owner.RemoveInventory(self); + else + { + // TODO replace + } + Destroy(); + } override bool HandlePickup( Inventory item ) { if ( item.GetClass() == GetClass() ) return true; // can never get more than one return Super.HandlePickup(item); } - static void TransferOwnership( Actor newowner, Actor sentry ) + static bool TransferOwnership( Actor newowner, Actor sentry ) { - if ( sentry.master ) sentry.master.TakeInventory("SentryItem",200); + if ( sentry.master == newowner ) return false; + if ( sentry.master ) sentry.master.TakeInventory("SentryItem",1); sentry.master = newowner; sentry.SetTag(String.Format(StringTable.Localize("$T_OWNEDSENTRY"),newowner.player.GetUserName())); sentry.tracer.A_ClearTarget(); + sentry.tracer.bFRIENDLY = true; sentry.tracer.SetFriendPlayer(newowner.player); let si = SentryItem(newowner.FindInventory("SentryItem")); if ( si ) @@ -1457,6 +1475,7 @@ Class SentryItem : UnrealInventory si.bActive = true; si.tracer = sentry; } + return true; } override void AttachToOwner( Actor other ) { @@ -1632,7 +1651,7 @@ Class MinigunSentry : Actor angle = clamp(angle+clamp(angledelta,-angleturn,angleturn),master.angle-maxangle,master.angle+maxangle); pitch = clamp(pitch+clamp(pitchdelta,-pitchturn,pitchturn),master.pitch-maxpitch,master.pitch+maxpitch); } - void A_SentryFaceDir( int dest, statelabel next ) + void A_SentryFaceDir( double dest, statelabel next ) { double angledelta = DeltaAngle(angle,master.angle+dest); double pitchdelta = DeltaAngle(pitch,master.pitch); @@ -1714,34 +1733,31 @@ Class MinigunSentry : Actor SENR ABCDEFGHIJKLMNO 3; Goto Idle; Idle: - SENI A 1 A_SentryFaceDir(0,1); - Wait; - SENI A 1 + SENI A 0 { - A_LookEx(LOF_NOSOUNDCHECK|LOF_NOJUMP); - A_SentryFaceDir(-maxangle,1); - return A_JumpIf(TargetVisible(),"See"); - } - Wait; - SENI AAAAAA 1 - { - A_LookEx(LOF_NOSOUNDCHECK|LOF_NOJUMP); - return A_JumpIf(TargetVisible(),"See"); + A_PlaySound("sentry/move",CHAN_BODY,0.4,true,pitch:0.8); + if ( specialf1 > 0 ) specialf1 = -maxangle; + else specialf1 = maxangle; + special2 = 0; } SENI A 1 { A_LookEx(LOF_NOSOUNDCHECK|LOF_NOJUMP); - A_SentryFaceDir(maxangle,1); + A_SentryFaceDir(specialf1,"IdleStop"); return A_JumpIf(TargetVisible(),"See"); } Wait; - SENI AAAAAA 1 + IdleStop: + SENI A 0 A_PlaySound("sentry/movestop",CHAN_BODY,0.4,pitch:0.8); + SENI A 1 { A_LookEx(LOF_NOSOUNDCHECK|LOF_NOJUMP); + if ( special2++ > 20 ) return ResolveState("Idle"); return A_JumpIf(TargetVisible(),"See"); } - Goto Idle+1; + Wait; See: + SENI A 0 A_PlaySound("sentry/movestop",CHAN_BODY,0.4,pitch:0.8); SENI A 1 { if ( !TargetVisible() ) @@ -1992,6 +2008,7 @@ Class MinigunSentryBase : Actor Default { + Tag "$T_SENTRY"; Health sentryhealth; Mass int.max; Radius 12; @@ -2000,7 +2017,6 @@ Class MinigunSentryBase : Actor +SHOOTABLE; +NOBLOOD; +DONTTHRUST; - +SPECIAL; } override void PostBeginPlay() { @@ -2012,8 +2028,8 @@ Class MinigunSentryBase : Actor } else { - SetTag(StringTable.Localize("$T_SENTRY")); rememberedplayer = -1; + special1 = sentryammo; // rogue sentries need ammo assigned } tracer = Spawn("MinigunSentry",pos); tracer.special1 = special1; @@ -2026,15 +2042,23 @@ Class MinigunSentryBase : Actor tracer.SetOrigin(level.Vec3Offset(pos,z*38),false); if ( !deathmatch ) { - if ( !master || !master.player ) bFRIENDLY = false; + if ( !master || !master.player ) tracer.bFRIENDLY = bFRIENDLY; + bFRIENDLY = false; return; } if ( master && master.player ) tracer.SetFriendPlayer(master.player); - else tracer.bFRIENDLY = false; + else tracer.bFRIENDLY = bFRIENDLY; + bFRIENDLY = false; } override void Tick() { Super.Tick(); + if ( !sting_msentry ) + { + if ( tracer ) tracer.Destroy(); + Destroy(); + return; + } // hub return support if ( !master && (rememberedplayer != -1) && playeringame[rememberedplayer] ) { @@ -2056,25 +2080,28 @@ Class MinigunSentryBase : Actor } override string GetObituary( Actor victim, Actor inflictor, Name mod, bool playerattack ) { - if ( victim == master ) return String.Format(StringTable.Localize("$O_OWNSENTRY"),GetTag()); - return String.Format(StringTable.Localize("$O_SENTRY"),GetTag()); + if ( victim == master ) return StringTable.Localize("$O_OWNSENTRY"); + else if ( master && master.player ) return String.Format(StringTable.Localize("$O_SENTRY"),GetTag()); + return StringTable.Localize("$O_ROGUESENTRY"); } - override void Touch( Actor toucher ) + override bool Used( Actor user ) { - if ( !toucher.player || !bSPECIAL ) return; - if ( abs(DeltaAngle(angle,AngleTo(toucher))) < 120 ) return; + if ( !user.player || !InStateSequence(CurState,FindState("Idle")) ) return false; + if ( abs(DeltaAngle(angle,AngleTo(user))) < 120 ) return false; if ( deathmatch || !master ) { - if ( master && (toucher != master) && master.CheckLocalView() ) + if ( master && (user != master) && master.CheckLocalView() ) Console.Printf(StringTable.Localize("$M_SENTRYHIJACK")); - SentryItem.TransferOwnership(toucher,self); + if ( SentryItem.TransferOwnership(user,self) ) + return false; // on first touch only transfer ownership } - let amo = toucher.FindInventory("UMiniAmmo"); - if ( !amo || (amo.Amount <= 0) || (tracer.special1 >= sentryammo) ) return; + let amo = user.FindInventory("UMiniAmmo"); + if ( !amo || (amo.Amount <= 0) || (tracer.special1 >= sentryammo) ) return false; A_PlaySound("misc/i_pkup",CHAN_ITEM); int xammo = min(sentryammo-tracer.special1,amo.Amount); special1 = tracer.special1 += xammo; amo.Amount -= xammo; + return false; } override int DamageMobj( Actor inflictor, Actor source, int damage, Name mod, int flags, double angle ) { @@ -2110,7 +2137,6 @@ Class MinigunSentryBase : Actor PackUp: SENI A -1 { - bSPECIAL = false; tracer.SetStateLabel("PackUp"); } Stop; @@ -2222,6 +2248,7 @@ Class SentryGun : Actor int rememberedplayer; Default { + Tag "$T_OSENTRY"; Health 50; Mass int.max; Radius 10; @@ -2240,11 +2267,7 @@ Class SentryGun : Actor SetTag(String.Format(StringTable.Localize("$T_OWNEDOSENTRY"),master.player.GetUserName())); rememberedplayer = master.playernumber(); } - else - { - SetTag(StringTable.Localize("$T_OSENTRY")); - rememberedplayer = -1; - } + else rememberedplayer = -1; if ( !deathmatch ) { if ( !master || !master.player ) bFRIENDLY = false; @@ -2255,8 +2278,9 @@ Class SentryGun : Actor } override string GetObituary( Actor victim, Actor inflictor, Name mod, bool playerattack ) { - if ( victim == master ) return String.Format(StringTable.Localize("$O_OWNOSENTRY"),GetTag()); - return String.Format(StringTable.Localize("$O_OSENTRY"),GetTag()); + if ( victim == master ) return StringTable.Localize("$O_OWNOSENTRY"); + else if ( master && master.player ) return String.Format(StringTable.Localize("$O_OSENTRY"),GetTag()); + return StringTable.Localize("$O_ROGUEOSENTRY"); } override void Tick() { diff --git a/zscript/stinger.zsc b/zscript/stinger.zsc index dae65c9..c70f60f 100644 --- a/zscript/stinger.zsc +++ b/zscript/stinger.zsc @@ -264,6 +264,11 @@ Class TarydiumDebuff : Thinker override void Tick() { + if ( !sting_stinger ) + { + Destroy(); + return; + } if ( !victim || (victim.Health <= 0) ) { BlowUp(); @@ -316,6 +321,7 @@ Class TarydiumDebuff : Thinker static void Apply( Actor victim, Actor instigator, int amount ) { if ( !victim || (victim.Health <= 0) || !victim.bISMONSTER ) return; + if ( !sting_stinger ) return; let ti = ThinkerIterator.Create("TarydiumDebuff",STAT_USER); TarydiumDebuff t; while ( t = TarydiumDebuff(ti.Next()) ) diff --git a/zscript/ueightball.zsc b/zscript/ueightball.zsc index 54bf23f..29059d8 100644 --- a/zscript/ueightball.zsc +++ b/zscript/ueightball.zsc @@ -68,14 +68,14 @@ Class URocketTrail : Actor override void PostBeginPlay() { Super.PostBeginPlay(); - let l = Spawn("RocketLight",pos); - l.target = self; + A_AttachLight('RocketLight',DynamicLight.PointLight,Color(255,224,128),32,32); } override void Tick() { Super.Tick(); - if ( !target || target.InStateSequence(target.CurState,target.FindState("Death")) ) + if ( !target || !target.bMISSILE ) { + A_RemoveLight('RocketLight'); Destroy(); return; } diff --git a/zscript/unrealcommon.zsc b/zscript/unrealcommon.zsc index 890a573..c76edaa 100644 --- a/zscript/unrealcommon.zsc +++ b/zscript/unrealcommon.zsc @@ -830,10 +830,10 @@ Class UnrealMainHandler : EventHandler { if ( (e.Replacee == 'Chainsaw') || (e.Replacee == 'Gauntlets') ) { - if ( !Random[Replacements](0,3) ) e.Replacement = 'WeaponPowerUp'; + if ( (sting_dubious || sting_olsmp) && !Random[Replacements](0,3) ) e.Replacement = 'WeaponPowerUp'; else if ( Random[Replacements](0,2) ) { - if ( Random[Replacements](0,1) ) e.Replacement = 'Bonesaw'; + if ( sting_dubious && Random[Replacements](0,1) ) e.Replacement = 'Bonesaw'; else e.Replacement = 'Stunner'; } else if ( !Random[Replacements](0,2) ) e.Replacement = 'Betamag'; @@ -888,9 +888,13 @@ Class UnrealMainHandler : EventHandler } else if ( (e.Replacee == 'BFG9000') || (e.Replacee == 'Mace') ) { - if ( sting_olsmp && Random[Replacements](0,1) ) e.Replacement = 'OLSMP'; - else if ( Random[Replacements](0,1) ) e.Replacement = 'SMiniGun'; - else e.Replacement = 'BigGun'; + if ( sting_olsmp && (!sting_dubious || Random[Replacements](0,1)) ) e.Replacement = 'OLSMP'; + else if ( sting_dubious ) + { + if ( Random[Replacements](0,1) ) e.Replacement = 'SMiniGun'; + else e.Replacement = 'BigGun'; + } + else e.Replacement = 'WeaponPowerup'; // lousy, I know } else if ( (e.Replacee == 'Clip') || (e.Replacee == 'GoldWandAmmo') || (e.Replacee == 'GoldWandHefty') ) e.Replacement = 'UClip'; else if ( (e.Replacee == 'ClipBox') ) @@ -957,7 +961,7 @@ Class UnrealMainHandler : EventHandler } else if ( (e.Replacee == 'Cell') || (e.Replacee == 'SkullRodAmmo') ) { - if ( !Random[Replacements](0,4) ) + if ( sting_dubious && !Random[Replacements](0,4) ) { if ( !Random[Replacements](0,2) ) e.Replacement = 'BigAmmo2'; else e.Replacement = 'BigAmmo3'; @@ -980,7 +984,7 @@ Class UnrealMainHandler : EventHandler } else if ( (e.Replacee == 'CellPack') || (e.Replacee == 'SkullRodHefty') ) { - if ( !Random[Replacements](0,4) ) + if ( sting_dubious && !Random[Replacements](0,4) ) { if ( !Random[Replacements](0,2) ) e.Replacement = 'BigAmmo'; else e.Replacement = 'BigAmmo2'; @@ -993,8 +997,8 @@ Class UnrealMainHandler : EventHandler else if ( (e.Replacee == 'InvulnerabilitySphere') || (e.Replacee == 'ArtiInvulnerability') ) e.Replacement = 'PowerShield'; else if ( (e.Replacee == 'Berserk') || (e.Replacee == 'ArtiTomeOfPower') ) { - if ( !Random[Replacements](0,9) ) e.Replacement = 'SentryItem'; - else if ( !Random[Replacements](0,2) ) e.Replacement = 'WeaponPowerUp'; + if ( sting_msentry && !Random[Replacements](0,9) ) e.Replacement = 'SentryItem'; + else if ( (sting_dubious || sting_olsmp) && !Random[Replacements](0,2) ) e.Replacement = 'WeaponPowerUp'; else e.Replacement = 'Amplifier'; } else if ( e.Replacee == 'ArtiEgg' ) e.Replacement = 'VoiceBox'; diff --git a/zscript/unrealhud.zsc b/zscript/unrealhud.zsc index 279c18b..213baa3 100644 --- a/zscript/unrealhud.zsc +++ b/zscript/unrealhud.zsc @@ -190,7 +190,7 @@ Class UnrealHUD : BaseStatusBar private void DrawNumberOf( Inventory i, double x, double y ) { - if ( (i.Amount <= 1) && !((i is 'UnrealInventory') || !UnrealInventory(i).bDRAWSPECIAL) ) return; + if ( (i.Amount <= 1) && !((i is 'UnrealInventory') && UnrealInventory(i).bDRAWSPECIAL) ) return; double TempX = CurX, TempY = CurY; string itxt = String.Format("%d",((i is 'UnrealInventory')&&UnrealInventory(i).bDRAWSPECIAL)?i.special1:i.Amount); CurX += 30;