From 08361babe6cbac82d9f1a7713f0915016ff3aa1d Mon Sep 17 00:00:00 2001 From: Marisa Kirisame Date: Mon, 28 Oct 2019 10:54:51 +0100 Subject: [PATCH] =?UTF-8?q?1.0.1=20Release:=20=20-=20Greatly=20improved=20?= =?UTF-8?q?responsiveness=20of=20Eightball.=20=20-=20Increase=20Betamag=20?= =?UTF-8?q?melee=20damage=20(15=20=E2=86=92=2025).=20=20-=20Reduce=20Demol?= =?UTF-8?q?isher=20visual=20sway.=20=20-=20Increase=20Razorclaw=20primary?= =?UTF-8?q?=20damage=20(6=20=E2=86=92=2010)=20and=20decrease=20interval=20?= =?UTF-8?q?(5=20=E2=86=92=204).=20=20-=20Add=20random=20chance=20of=20forc?= =?UTF-8?q?ing=20pain=20to=20each=20hit=20of=20Razorclaw=20primary=20(1/6?= =?UTF-8?q?=20for=20bosses,=201/4=20for=20normal=20enemies),=20making=20it?= =?UTF-8?q?=20a=20more=20viable=20melee=20weapon.=20=20-=20Razorclaw=20now?= =?UTF-8?q?=20propels=20you=20when=20fully=20submerged.=20=20-=20Fix=20Fla?= =?UTF-8?q?me=20Gun=20not=20checking=20for=20the=20correct=20minimum=20amm?= =?UTF-8?q?o=20for=20secondary=20fire.=20=20-=20Replacements=20respect=20I?= =?UTF-8?q?sFinal.=20=20-=20HUD=20will=20display=20BasicArmor=20if=20avail?= =?UTF-8?q?able,=20for=20compatibility.=20=20-=20Fix=20alignment=20for=20n?= =?UTF-8?q?on-standard=20item/ammo=20icons.=20=20-=20Fix=20Teleport=20Caps?= =?UTF-8?q?ules=20having=20a=20choppy=20twiddle=20animation.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Readme.md | 2 +- graphics/hud083/ammo/Tele083.png | Bin 2288 -> 2288 bytes zscript/betamag.zsc | 2 +- zscript/biggun.zsc | 8 ++--- zscript/bonesaw.zsc | 34 +++++++++++++++++-- zscript/flamegun.zsc | 3 +- zscript/ueightball.zsc | 18 ++++++++--- zscript/unrealcommon.zsc | 1 + zscript/unrealhud.zsc | 54 +++++++++++++++++++++++++------ zscript/utranslocator.zsc | 15 +++++++-- 10 files changed, 111 insertions(+), 26 deletions(-) diff --git a/Readme.md b/Readme.md index 33e474c..4fb6ece 100644 --- a/Readme.md +++ b/Readme.md @@ -73,7 +73,7 @@ This mod requires GZDoom 4.2.3 or later, and runs on top of Doom Tournament. ## In progress - - N/A, this is the 1.0 release. + - N/A, this is the 1.0.1 release. ## Planned diff --git a/graphics/hud083/ammo/Tele083.png b/graphics/hud083/ammo/Tele083.png index 2f4ea99bd9861e5202fdddae680cf827fb7e2dc4..135a62210c314b35f1ce52094afc8f498efd9b58 100644 GIT binary patch delta 20 ccmew$_(5=j4(AUB1_p*zjuRhjG~LYs08)Sl#Q*>R delta 20 ccmew$_(5=j4(Bfh1_p);jfWaGn(pQR094Qi{r~^~ diff --git a/zscript/betamag.zsc b/zscript/betamag.zsc index ea41a65..7431a80 100644 --- a/zscript/betamag.zsc +++ b/zscript/betamag.zsc @@ -176,7 +176,7 @@ Class Betamag : UnrealWeapon { if ( d.HitType == TRACE_HitActor ) { - int dmg = 15; + int dmg = 25; dmg = d.HitActor.DamageMobj(invoker,self,dmg,'Melee',DMG_USEANGLE|DMG_THRUSTLESS,atan2(d.HitDir.y,d.HitDir.x)); UTMainHandler.DoKnockback(d.HitActor,d.HitDir,35000); if ( d.HitActor.player ) d.HitActor.A_QuakeEx(2,2,2,6,0,1,"",QF_RELATIVE|QF_SCALEDOWN,rollIntensity:0.25); diff --git a/zscript/biggun.zsc b/zscript/biggun.zsc index dfc6260..978aaee 100644 --- a/zscript/biggun.zsc +++ b/zscript/biggun.zsc @@ -484,20 +484,20 @@ Class BigGun : UnrealWeapon Twiddle1: BIGW A 3 { - UTMainHandler.DoSwing(self,(FRandom[BigGun](-0.2,-0.3),FRandom[BigGun](0.2,0.3)),2,0,12,SWING_Spring,5,2); + UTMainHandler.DoSwing(self,(FRandom[BigGun](-0.1,-0.15),FRandom[BigGun](0.2,0.3)),2,0,12,SWING_Spring,5,2); } BIGW BCDEFGHIJKLMNO 3; Goto Idle; Twiddle2: BIGT A 2 { - UTMainHandler.DoSwing(self,(FRandom[BigGun](-0.2,-0.3),FRandom[BigGun](0.2,0.3)),3,0,6,SWING_Spring,5,2); - UTMainHandler.DoSwing(self,(FRandom[BigGun](-0.2,-0.3),FRandom[BigGun](-0.4,-0.6)),4,0,12,SWING_Spring,6,1.4); + UTMainHandler.DoSwing(self,(FRandom[BigGun](-0.1,-0.15),FRandom[BigGun](0.2,0.3)),3,0,6,SWING_Spring,5,2); + UTMainHandler.DoSwing(self,(FRandom[BigGun](-0.1,-0.15),FRandom[BigGun](-0.4,-0.6)),4,0,12,SWING_Spring,6,1.4); } BIGT BCDEFGHIJKLMNOP 2; BIGT Q 2 { - UTMainHandler.DoSwing(self,(FRandom[BigGun](-0.3,-0.2),FRandom[BigGun](0.4,0.5)),3,0.5,6,SWING_Spring,2,1.5); + UTMainHandler.DoSwing(self,(FRandom[BigGun](-0.15,-0.1),FRandom[BigGun](0.4,0.5)),3,0.5,6,SWING_Spring,2,1.5); } BIGT RSTUVWXY 2; Goto Idle; diff --git a/zscript/bonesaw.zsc b/zscript/bonesaw.zsc index afc558b..40ed64a 100644 --- a/zscript/bonesaw.zsc +++ b/zscript/bonesaw.zsc @@ -60,6 +60,7 @@ Class Bonesaw : UnrealWeapon { if ( d.HitType == TRACE_HitActor ) { + invoker.bFORCEPAIN = !Random[Bonesaw](0,d.HitActor.bBOSS?5:2); if ( d.HitLocation.z >= (d.HitActor.pos.z+d.HitActor.height*0.8) ) dmg = d.HitActor.DamageMobj(invoker,self,dmg*2,'Decapitated',DMG_USEANGLE|DMG_THRUSTLESS,atan2(d.HitDir.y,d.HitDir.x)); else dmg = d.HitActor.DamageMobj(invoker,self,dmg,'slashed',DMG_USEANGLE|DMG_THRUSTLESS,atan2(d.HitDir.y,d.HitDir.x)); @@ -83,7 +84,6 @@ Class Bonesaw : UnrealWeapon p.pitch = asin(-d.HitDir.z); } else A_PlaySound("ripper/flesh",CHAN_6); - A_AlertMonsters(); if ( invoker.bAltFire ) A_QuakeEx(3,3,3,3,0,1,"",QF_RELATIVE|QF_SCALEDOWN,rollIntensity:0.13); else A_QuakeEx(1,1,1,6,0,1,"",QF_RELATIVE|QF_SCALEDOWN,rollIntensity:0.06); return true; @@ -94,14 +94,42 @@ Class Bonesaw : UnrealWeapon { UTMainHandler.DoSwing(self,(FRandom[Bonesaw](-1,1),FRandom[Bonesaw](-1,1)),0.3,-0.2,2,SWING_Spring,0,2); invoker.special1++; - if ( invoker.special1 < 5 ) return; + Vector3 x, y, z, origin; + [x, y, z] = dt_CoordUtil.GetAxes(pitch,angle,roll); + origin = level.Vec3Offset(Vec2OffsetZ(0,0,player.viewz),x*15+y*4-z*4); + if ( waterlevel >= 3 ) + { + UTMainHandler.DoKnockback(self,x,5000); + for ( int i=0; i<3; i++ ) + { + let b = Spawn("UTBubble",level.Vec3Offset(origin,FRandom[Bonesaw](-4,4)*y+FRandom[Bonesaw](-4,4)*z)); + b.scale *= .5; + b.vel += vel*.5; + } + } + if ( invoker.special1 < 4 ) return; invoker.special1 = 0; invoker.FireEffect(); - for ( int i=0; i<8; i++ ) if ( TryHit(angle+i*(45./16),6) || TryHit(angle-i*(45./16),6) ) return; + A_AlertMonsters(); + for ( int i=0; i<8; i++ ) if ( TryHit(angle+i*(45./16),10) || TryHit(angle-i*(45./16),10) ) return; } action void A_Clamp() { invoker.FireEffect(); + A_AlertMonsters(); + Vector3 x, y, z, origin; + [x, y, z] = dt_CoordUtil.GetAxes(pitch,angle,roll); + origin = level.Vec3Offset(Vec2OffsetZ(0,0,player.viewz),x*15+y*4-z*4); + if ( waterlevel >= 3 ) + { + UTMainHandler.DoKnockback(self,x,20000); + for ( int i=0; i<12; i++ ) + { + let b = Spawn("UTBubble",level.Vec3Offset(origin,FRandom[Bonesaw](-4,4)*y+FRandom[Bonesaw](-4,4)*z)); + b.scale *= .5; + b.vel += vel*.5; + } + } for ( int i=0; i<8; i++ ) if ( TryHit(angle+i*(45./16),30) || TryHit(angle-i*(45./16),30) ) return; } Default diff --git a/zscript/flamegun.zsc b/zscript/flamegun.zsc index ba88f33..475ac03 100644 --- a/zscript/flamegun.zsc +++ b/zscript/flamegun.zsc @@ -430,7 +430,7 @@ Class FlameGun : UnrealWeapon { A_CheckReload(); int flags = (waterlevel>=2)?WRF_NOFIRE:0; - if ( invoker.Ammo1.Amount < 30 ) + if ( invoker.Ammo1.Amount < invoker.AmmoUse2 ) flags |= WRF_NOSECONDARY; A_WeaponReady(flags); } @@ -483,6 +483,7 @@ Class FlameGun : UnrealWeapon #### # 1 A_Overlay(-9999,"Null"); FGNF A 1 { + invoker.special1 = 0; A_PlaySound("flamegun/charge",CHAN_WEAPON,Dampener.Active(self)?.1:1.); if ( !Dampener.Active(self) ) A_AlertMonsters(); } diff --git a/zscript/ueightball.zsc b/zscript/ueightball.zsc index 776af98..1973662 100644 --- a/zscript/ueightball.zsc +++ b/zscript/ueightball.zsc @@ -401,6 +401,7 @@ Class Eightball : UnrealWeapon { Weapon weap = Weapon(invoker); if ( !weap ) return; + A_Overlay(-9999,"Null"); invoker.special1 = 0; if ( weap.bAltFire ) { @@ -592,28 +593,35 @@ Class Eightball : UnrealWeapon #### # 5 { A_Overlay(-9999,"Null"); - A_PlaySound("utrl/load",CHAN_6,Dampener.Active(self)?.03:.3); + A_PlaySound("utrl/load",CHAN_WEAPON,Dampener.Active(self)?.03:.3); if ( invoker.bSingleRocket = !invoker.bSingleRocket ) A_Print(StringTable.Localize("$M_SINGLEROCKETON")); else A_Print(StringTable.Localize("$M_SINGLEROCKETOFF")); } Goto Idle; + Dummy2: + TNT1 A 1 + { + if ( !(player.cmd.buttons&(BT_ATTACK|BT_ALTATTACK)) ) + player.SetPSprite(PSP_WEAPON,ResolveState("Release")); + } + Wait; Fire: AltFire: // one is loaded already #### # 1 { - A_Overlay(-9999,"Null"); + A_Overlay(-9999,"Dummy2"); A_LoadRocket(false); } - #### # 3 A_JumpIf(!invoker.bAltFire&&invoker.bSingleRocket,"Release"); + #### # 0 A_JumpIf(!invoker.bAltFire&&invoker.bSingleRocket,"Release"); #### # 0 A_LoadedRefire(1); Goto Release; Loading: EBLI A 0; - EBLL A 0 A_LoadRocket(); - EBLL A 0 A_PlaySound("utrl/load",CHAN_6,Dampener.Active(self)?.1:1.); + EBLL A 0 A_PlaySound("utrl/load",CHAN_WEAPON,Dampener.Active(self)?.1:1.); EBLL ABCDEFGHIJK 1; + EBLL L 0 A_LoadRocket(); EBLL L 0 A_PlaySound("utrl/rotate",CHAN_ITEM,Dampener.Active(self)?.01:.1); EBLL LMNOPQRSTUVWXYZ[ 1; EBLL Z 0; diff --git a/zscript/unrealcommon.zsc b/zscript/unrealcommon.zsc index 7f62a3d..763b5ae 100644 --- a/zscript/unrealcommon.zsc +++ b/zscript/unrealcommon.zsc @@ -963,6 +963,7 @@ Class UnrealMainHandler : EventHandler } override void CheckReplacement( ReplaceEvent e ) { + if ( e.IsFinal ) return; if ( (e.Replacee == 'Chainsaw') || (e.Replacee == 'Gauntlets') ) { if ( ((sting_proto && sting_dubious) || sting_olsmp) && !Random[Replacements](0,sting_proto?3:1) ) e.Replacement = 'WeaponPowerUp'; diff --git a/zscript/unrealhud.zsc b/zscript/unrealhud.zsc index ad3a9f2..6d63617 100644 --- a/zscript/unrealhud.zsc +++ b/zscript/unrealhud.zsc @@ -228,7 +228,7 @@ Class UnrealHUD : BaseStatusBar Vector2 scl = TexMan.GetScaledSize(i.Icon); double mscl = 32./max(scl.x,scl.y); double dw = (ClipX/mscl), dh = (ClipY/mscl); - double dx = CurX/mscl, dy = CurY/mscl; + double dx = (CurX+(32-scl.x*mscl)/2)/mscl, dy = (CurY+(32-scl.y*mscl)/2)/mscl; if ( bRed ) { Screen.DrawTexture(IconBase,false,CurX,CurY,DTA_VirtualWidthF,ClipX,DTA_VirtualHeightF,ClipY,DTA_KeepRatio,true,DTA_TranslationIndex,RedIcon); @@ -429,14 +429,40 @@ Class UnrealHUD : BaseStatusBar BestArmor = Inv; } } - if ( bDrawOne && BestArmor ) + let ba = CPlayer.mo.FindInventory("BasicArmor"); + if ( ba && (ba.Amount > 0) ) { - hasdrawn = true; - if ( !bCheckOnly ) DrawHudIcon(CurX,Y,BestArmor,false); - CurX += 32; - CurY += HudMode?29:27; - if ( !bCheckOnly ) DrawIconValue(BestArmor.Amount); - CurY -= HudMode?29:27; + ArmorAmount += ba.Amount; + if ( !bDrawOne ) + { + hasdrawn = true; + if ( !bCheckOnly ) DrawHudIcon(CurX,y,ba,false); + CurX += 32; + CurY += HudMode?29:27; + if ( !bCheckOnly ) DrawIconValue(ba.Amount); + CurY -= HudMode?29:27; + } + } + if ( bDrawOne ) + { + if ( BestArmor ) + { + hasdrawn = true; + if ( !bCheckOnly ) DrawHudIcon(CurX,Y,BestArmor,false); + CurX += 32; + CurY += HudMode?29:27; + if ( !bCheckOnly ) DrawIconValue(BestArmor.Amount); + CurY -= HudMode?29:27; + } + else if ( ba && (ba.Amount > 0) ) + { + hasdrawn = true; + if ( !bCheckOnly ) DrawHudIcon(CurX,Y,ba,false); + CurX += 32; + CurY += HudMode?29:27; + if ( !bCheckOnly ) DrawIconValue(ba.Amount); + CurY -= HudMode?29:27; + } } if ( (ArmorAmount > 0) && !HudMode ) { @@ -479,7 +505,7 @@ Class UnrealHUD : BaseStatusBar Vector2 scl = TexMan.GetScaledSize(icon); double mscl = 32./max(scl.x,scl.y); double dw = (ClipX/mscl), dh = (ClipY/mscl); - double dx = CurX/mscl, dy = CurY/mscl; + double dx = (CurX+(32-scl.x*mscl)/2)/mscl, dy = (CurY+(32-scl.y*mscl)/2)/mscl; Screen.DrawTexture(icon,false,dx,dy,DTA_VirtualWidthF,dw,DTA_VirtualHeightF,dh,DTA_KeepRatio,true,DTA_TopOffset,0,DTA_LeftOffset,0); CurX += 32; CurY += 29; @@ -683,18 +709,25 @@ Class UnrealHUD : BaseStatusBar BestArmor = Inv; } } + let ba = CPlayer.mo.FindInventory("BasicArmor"); + if ( ba ) ArmorAmount += ba.amount; + bool drawnarmor = false; for ( int i=0; i<6; i++ ) { if ( !(BestArmor is OldArmorType[i]) ) continue; DrawImage(OldArmor[i],(4,340),DI_ITEM_OFFSETS); + drawnarmor = true; break; } + if ( !drawnarmor && ba && (ba.Amount > 0) ) + DrawInventoryIcon(ba,(40,366),DI_ITEM_CENTER,1.,(-1,-1),(2.,2.)); if ( ArmorAmount ) DrawString(mOldDigits,FormatNumber(ArmorAmount,3),(167,366),DI_TEXT_ALIGN_RIGHT); Inventory Ammo1, Ammo2; [Ammo1, Ammo2] = GetCurrentAmmo(); if ( Ammo1 ) { if ( Ammo1.Amount ) DrawString(mOldDigits,FormatNumber(Ammo1.Amount,3),(549,366),DI_TEXT_ALIGN_RIGHT); + bool drawn = false; for ( int i=0; i<19; i++ ) { // match by ammo @@ -702,8 +735,11 @@ Class UnrealHUD : BaseStatusBar // match by weapon if ( (OldAmmoType[i] is 'Weapon') && !(CPlayer.ReadyWeapon is OldAmmoType[i]) ) continue; DrawImage(OldAmmo[i],(560,336),DI_ITEM_OFFSETS); + drawn = true; break; } + if ( !drawn ) + DrawInventoryIcon(Ammo1,(600,366),DI_ITEM_CENTER,1.,(-1,-1),(2.,2.)); } int sec = -1, sec2 = -1; if ( CPlayer.ReadyWeapon && (CPlayer.ReadyWeapon is 'UnrealWeapon') ) diff --git a/zscript/utranslocator.zsc b/zscript/utranslocator.zsc index 0d72608..e824450 100644 --- a/zscript/utranslocator.zsc +++ b/zscript/utranslocator.zsc @@ -276,8 +276,19 @@ Class UTranslocator : UnrealWeapon TLCI ABCDEFG 20 A_Jump(16,"Twiddle"); Goto Idle+1; Twiddle: - #### # 6 { invoker.special1 = Random[TeleHand](2,5); } - TLCT ABCDEFGHI 3 A_SetTics(invoker.special1); + #### # 6; + TLCT A 0 A_Jump(256,"Twiddle2","Twiddle3","Twiddle4","Twiddle5"); + Twiddle2: + TLCT ABCDEFGHI 2; + Goto Idle+1; + Twiddle3: + TLCT ABCDEFGHI 3; + Goto Idle+1; + Twiddle4: + TLCT ABCDEFGHI 4; + Goto Idle+1; + Twiddle5: + TLCT ABCDEFGHI 5; Goto Idle+1; Fire: TLCF A 0 A_Overlay(-9999,"Null");