From 879120ac906191fe2ba7b0f516053270d633c063 Mon Sep 17 00:00:00 2001 From: "Gustavo R. 'Gustavo6046' Rehermann" Date: Sun, 22 Jul 2018 16:06:08 -0300 Subject: [PATCH] [v0.2.0] Failed attempt to make bots use lifts and doors and dodge obstacles. --- KeyConf.txt | 15 ++- ZScript.zsc | 99 ++++++++++--------- ZetaCode/Pathing.zsc | 2 + ZetaCode/WeaponSupport/Doom/ZetaBFG.zsc | 2 +- ZetaCode/WeaponSupport/Doom/ZetaPR.zsc | 2 +- ZetaCode/WeaponSupport/Doom/ZetaRL.zsc | 2 +- .../SentientMushes/ZetaFireBallista.zsc | 4 +- .../SentientMushes/ZetaRocketeer.zsc | 6 +- .../SentientMushes/ZetaRockox.zsc | 2 +- .../WeaponSupport/Strife/ZetaCrossbow1.zsc | 2 +- .../WeaponSupport/Strife/ZetaCrossbow2.zsc | 2 +- .../WeaponSupport/Strife/ZetaMiniMissile.zsc | 2 +- ZetaCode/WeaponSupport/ZetaBullet.zsc | 1 + 13 files changed, 78 insertions(+), 63 deletions(-) diff --git a/KeyConf.txt b/KeyConf.txt index 3b4d4e0..d11078f 100644 --- a/KeyConf.txt +++ b/KeyConf.txt @@ -1,6 +1,17 @@ defaultbind kp1 "summonfriend zetabot 0" defaultbind kp2 "summon ztpathnode 0" defaultbind kp3 "summon ztusenode 0" -defaultbind kp4 "summon ztjumpnode 0" +defaultbind kp4 "summon ztjumpnode 0" +defaultbind kp7 "kill zetadoom; kill zetastrife; kill zetasmushes" defaultbind kp8 "summon ZTUploadNodes" -defaultbind kp9 "summon ZTPromptNodes" \ No newline at end of file +defaultbind kp9 "summon ZTPromptNodes" + +addkeysection "ZetaBot" "zetabots" + +addmenukey "Spawn ZetaBot" "summonfriend zetabot 0" +addmenukey "Create Normal Path Node" "summon ztpathnode 0" +addmenukey "Create Use Path Node" "summon ztusenode 0" +addmenukey "Create Jump Path Node" "summon ztjumpnode 0" +addmenukey "Save Path Nodes" "summon ztuploadnodes" +addmenukey "Load Path Nodes" "summon ztpromptnodes" +addmenukey "Kill All Bots" "kill zetadoom; kill zetastrife; kill zetasmushes" \ No newline at end of file diff --git a/ZScript.zsc b/ZScript.zsc index dc8d131..2f6c89a 100644 --- a/ZScript.zsc +++ b/ZScript.zsc @@ -515,15 +515,12 @@ class ZTBotController : Actor { if ( CVar.FindCVar("zb_debug").GetInt() > 0 && debugCount < 1 ) { - debugCount += 10; + debugCount = 20; DestBall db = DestBall(possessed.SpawnMissile(Other, "DestBall")); if ( db != null ) db.targetNode = Other; } - - else - debugCount--; } void SmartMove() @@ -598,11 +595,14 @@ class ZTBotController : Actor void SetCurrentNode(ZTPathNode pn) { - bool use = pn.nodeType == ZTPathNode.NT_USE; - - if ( pn != currNode ) - DebugLog(LT_VERBOSE, myName.." is now at the node: \ck"..pn.serialize()..(use ? " | It's an USE node!" : "")); - + if ( pn != null ) + { + bool use = pn.nodeType == ZTPathNode.NT_USE; + + if ( pn != currNode ) + DebugLog(LT_VERBOSE, myName.." is now at the node: \ck"..pn.serialize()..(use ? " | It's an USE node!" : "")); + } + currNode = pn; } @@ -624,17 +624,14 @@ class ZTBotController : Actor return best; } - bool LineOfSight(Actor other, Actor from = null, bool CountActors = false) + bool LineOfSight(Actor other, Actor from = null) { if ( from == null ) from = possessed; - FLineTraceData data; - int flags = (CountActors ? 0 : TRF_THRUACTORS); - - from.LineTrace(from.AngleTo(other), from.Distance2D(other), from.pitch, flags: flags, data: data); - - return data.HitType == TRACE_HitNone; + // For a while, used to be a LineTrace, for multiple reasons. + // That didn't work, though :( + return from.CheckSight(other); } ZTPathNode ClosestVisibleNode(Actor other) @@ -895,7 +892,7 @@ class ZTBotController : Actor void BotChat(String kind, double importance) { - if ( importance < FRandom(0, 9.9999) ) + if ( importance < FRandom(0, 2.25) ) return; A_PlaySound("zetabot/"..myVoice.."/"..kind, CHAN_VOICE, attenuation: 0.7); @@ -942,16 +939,17 @@ class ZTBotController : Actor lastWeapS = lastWeap.GetClassName(); if ( enemy == null ) - DebugLog(LT_VERBOSE, "["..myName.."'s STATS] Health: "..possessed.health.." | Current State: "..BStateNames[bstate].." | Enemy Type: "..enemyType.." | Going After Type: "..goingAfterType.." | Current Pathnode: "..currNodeS..(useNode ? " (use)" : "").." | Destination Pathnode: "..navDestS.." | Age: "..age.."s | Best Weapon: none. | Last Weapon: "..lastWeapS); + DebugLog(LT_VERBOSE, "["..myName.."'s STATS] Health: "..possessed.health.." | Current State: "..BStateNames[bstate].." | Enemy Type: None | Going After Type: "..goingAfterType.." | Current Pathnode: "..currNodeS..(useNode ? " (use)" : "").." | Destination Pathnode: "..navDestS.." | Age: "..age.."s | Best Weapon: none. | Last Weapon: "..lastWeapS); else { ZetaWeapon wp; double rt; bool _; + string enemyH = " | Enemy Health: "..enemy.Health; [ wp, _, rt ] = BestWeaponAllTic(); - DebugLog(LT_VERBOSE, "["..myName.."'s STATS] Health: "..possessed.health.." | Current State: "..BStateNames[bstate].." | Enemy Type: "..enemyType.." | Going After Type: "..goingAfterType.." | Current Pathnode: "..currNodeS..(useNode ? " (use)" : "").." | Destination Pathnode: "..navDestS.." | Age: "..age.."s | Best Weapon: "..wp.GetClassName().." ("..rt.." dopamine molecules"..(_ ? ", alt" : "")..") | Last Weapon: "..lastWeapS); + DebugLog(LT_VERBOSE, "["..myName.."'s STATS] Health: "..possessed.health.." | Current State: "..BStateNames[bstate].." | Enemy Type: "..enemyType..enemyH.." | Going After Type: "..goingAfterType.." | Current Pathnode: "..currNodeS..(useNode ? " (use)" : "").." | Destination Pathnode: "..navDestS.." | Age: "..age.."s | Best Weapon: "..wp.GetClassName().." ("..rt.." dopamine molecules"..(_ ? ", alt" : "")..") | Last Weapon: "..lastWeapS); } } @@ -1034,6 +1032,7 @@ class ZTBotController : Actor return; age += 1. / 35; + debugCount -= 1; if ( age - lastShot > 0.7 && possessed.bShooting ) possessed.EndShoot(); @@ -1085,7 +1084,8 @@ class ZTBotController : Actor PriorityQueue targets = new("PriorityQueue"); for ( uint i = 0; i < mon.length(); i++ ) - targets.add(mon.get(i), TargetPriority(mon.get(i))); + if ( mon.get(i).Health > 0 ) + targets.add(mon.get(i), TargetPriority(mon.get(i))); if ( bstate != BS_ATTACKING || enemy == null ) enemy = Actor(targets.poll()); @@ -1113,7 +1113,10 @@ class ZTBotController : Actor } else + { + MakeDestBall(enemy); SetBotState(BS_ATTACKING); + } return; } @@ -1347,6 +1350,8 @@ class ZTBotController : Actor possessed.EndShoot(); lastEnemyPos = enemy.pos; SetBotState(BS_HUNTING); + + return; } /* - our bots can't be cowards @@ -1357,37 +1362,33 @@ class ZTBotController : Actor } */ - else - { - if ( FRandom(0, 1) < 0.2 ) - possessed.Jump(); - - BotChat("ACTV", 0.08); - - ZetaWeapon w = BestWeapon(); - // MakeDestBall(enemy); + if ( FRandom(0, 1) < 0.2 ) + possessed.Jump(); + + BotChat("ACTV", 0.08); + + ZetaWeapon w = BestWeapon(); - if ( BestWeaponAllTic() == null ) - { - SetBotState(BS_FLEEING); - return; - } + if ( BestWeaponAllTic() == null ) + { + SetBotState(BS_FLEEING); + return; + } - if ( possessed.Distance3D(enemy) > 256 + enemy.radius || ( w != null && w.IsMelee() ) ) - MoveToward(enemy, 0.282); - - else if ( possessed.Distance3D(enemy) < 128 + enemy.radius ) - StepBackFrom(enemy); - - RandomStrafe(); - AimToward(enemy, 0.27, 30); - - if ( fireBestWeapon() ) - possessed.BeginShoot(); - - else - possessed.EndShoot(); - } + if ( possessed.Distance3D(enemy) > 256 + enemy.radius || ( w != null && w.IsMelee() ) ) + MoveToward(enemy, 0.282); + + else if ( possessed.Distance3D(enemy) < 128 + enemy.radius ) + StepBackFrom(enemy); + + RandomStrafe(); + AimToward(enemy, 0.27, 30); + + if ( fireBestWeapon() ) + possessed.BeginShoot(); + + else + possessed.EndShoot(); } else diff --git a/ZetaCode/Pathing.zsc b/ZetaCode/Pathing.zsc index ec74c1b..fd92e14 100644 --- a/ZetaCode/Pathing.zsc +++ b/ZetaCode/Pathing.zsc @@ -24,6 +24,8 @@ class PathBall : DoomImpBall Default { Damage 0; + + +PAINLESS; } States diff --git a/ZetaCode/WeaponSupport/Doom/ZetaBFG.zsc b/ZetaCode/WeaponSupport/Doom/ZetaBFG.zsc index 075a80f..4301d9b 100644 --- a/ZetaCode/WeaponSupport/Doom/ZetaBFG.zsc +++ b/ZetaCode/WeaponSupport/Doom/ZetaBFG.zsc @@ -24,6 +24,6 @@ class ZetaBFG : ZetaWeapon override void Fire(Actor shooter, Actor target) { - shooter.SpawnMissileAngle("BFGBall", shooter.angle, tan(shooter.pitch)); + shooter.SpawnMissileAngle("BFGBall", shooter.angle, (target.pos.z - shooter.pos.z) * 25 / target.Distance2D(shooter)); } } \ No newline at end of file diff --git a/ZetaCode/WeaponSupport/Doom/ZetaPR.zsc b/ZetaCode/WeaponSupport/Doom/ZetaPR.zsc index 15b713a..bee24b2 100644 --- a/ZetaCode/WeaponSupport/Doom/ZetaPR.zsc +++ b/ZetaCode/WeaponSupport/Doom/ZetaPR.zsc @@ -24,6 +24,6 @@ class ZetaPR : ZetaWeapon override void Fire(Actor shooter, Actor target) { - shooter.SpawnMissileAngle("PlasmaBall", shooter.angle, tan(shooter.pitch)); + shooter.SpawnMissileAngle("PlasmaBall", shooter.angle, (target.pos.z - shooter.pos.z) * 25 / target.Distance2D(shooter)); } } \ No newline at end of file diff --git a/ZetaCode/WeaponSupport/Doom/ZetaRL.zsc b/ZetaCode/WeaponSupport/Doom/ZetaRL.zsc index 93cd122..cb572a6 100644 --- a/ZetaCode/WeaponSupport/Doom/ZetaRL.zsc +++ b/ZetaCode/WeaponSupport/Doom/ZetaRL.zsc @@ -27,6 +27,6 @@ class ZetaRL : ZetaWeapon override void Fire(Actor shooter, Actor target) { - shooter.SpawnMissileAngle("Rocket", shooter.angle, tan(shooter.pitch)); + shooter.SpawnMissileAngle("Rocket", shooter.angle, (target.pos.z - shooter.pos.z) * 20 / target.Distance2D(shooter)); } } \ No newline at end of file diff --git a/ZetaCode/WeaponSupport/SentientMushes/ZetaFireBallista.zsc b/ZetaCode/WeaponSupport/SentientMushes/ZetaFireBallista.zsc index b6b3608..5343f05 100644 --- a/ZetaCode/WeaponSupport/SentientMushes/ZetaFireBallista.zsc +++ b/ZetaCode/WeaponSupport/SentientMushes/ZetaFireBallista.zsc @@ -32,14 +32,14 @@ class Minigun : ZetaWeapon override void Fire(Actor shooter, Actor target) { - shooter.SpawnMissileAngle("BallistaMissile", shooter.angle, tan(shooter.pitch)); + shooter.SpawnMissileAngle("BallistaMissile", shooter.angle, (target.pos.z - shooter.pos.z) * 15 / target.Distance2D(shooter)); shooter.A_PlaySound("fireballista/shoot"); } override void AltFire(Actor shooter, Actor target) { for ( int _ = 0; _ < 11; _++ ) - shooter.SpawnMissileAngle("DrunkBallistaMissile", shooter.angle + frandom(-3, 3), tan(shooter.pitch)); + shooter.SpawnMissileAngle("DrunkBallistaMissile", shooter.angle + frandom(-3, 3), (target.pos.z - shooter.pos.z) * 15 / target.Distance2D(shooter)); shooter.A_PlaySound("fireballista/shoot"); } diff --git a/ZetaCode/WeaponSupport/SentientMushes/ZetaRocketeer.zsc b/ZetaCode/WeaponSupport/SentientMushes/ZetaRocketeer.zsc index 3a2e8cb..2d9e98e 100644 --- a/ZetaCode/WeaponSupport/SentientMushes/ZetaRocketeer.zsc +++ b/ZetaCode/WeaponSupport/SentientMushes/ZetaRocketeer.zsc @@ -39,7 +39,7 @@ class ZetaRocketeer : ZetaWeapon Class gg = ggs; if ( gg ) - shooter.SpawnMissileAngle(gg, shooter.angle, tan(shooter.pitch)); + shooter.SpawnMissileAngle(gg, shooter.angle, (target.pos.z - shooter.pos.z) * 25 / target.Distance2D(shooter)); } override void AltFire(Actor shooter, Actor target) @@ -52,8 +52,8 @@ class ZetaRocketeer : ZetaWeapon if ( cb && rf ) { - shooter.SpawnMissileAngle(cb, shooter.angle, tan(shooter.pitch)); - shooter.SpawnMissileAngle(rf, shooter.angle, tan(shooter.pitch)); + shooter.SpawnMissileAngle(cb, shooter.angle, (target.pos.z - shooter.pos.z) * 19 / target.Distance2D(shooter)); + shooter.SpawnMissileAngle(rf, shooter.angle, shooter.pitch); } } } \ No newline at end of file diff --git a/ZetaCode/WeaponSupport/SentientMushes/ZetaRockox.zsc b/ZetaCode/WeaponSupport/SentientMushes/ZetaRockox.zsc index 477308b..f802e4a 100644 --- a/ZetaCode/WeaponSupport/SentientMushes/ZetaRockox.zsc +++ b/ZetaCode/WeaponSupport/SentientMushes/ZetaRockox.zsc @@ -32,7 +32,7 @@ class ZetaRockox : ZetaWeapon if ( rr ) { - shooter.SpawnMissileAngle(rr, shooter.angle, tan(shooter.pitch)); + shooter.SpawnMissileAngle(rr, shooter.angle, (target.pos.z - shooter.pos.z) * 20 / target.Distance2D(shooter)); shooter.A_PlaySound("rockox/fire", CHAN_WEAPON); } } diff --git a/ZetaCode/WeaponSupport/Strife/ZetaCrossbow1.zsc b/ZetaCode/WeaponSupport/Strife/ZetaCrossbow1.zsc index b6d1f33..7ca5290 100644 --- a/ZetaCode/WeaponSupport/Strife/ZetaCrossbow1.zsc +++ b/ZetaCode/WeaponSupport/Strife/ZetaCrossbow1.zsc @@ -36,7 +36,7 @@ class ZetaCrossbow1 : ZetaWeapon override void Fire(Actor shooter, Actor target) { - shooter.SpawnMissileAngle("ElectricBolt", ZetaWeapon.RandomAngle(5.625 / pow(2, floor(shooter.accuracy / 2)), shooter.angle), tan(ZetaWeapon.RandomAngle(5.625 / pow(2, floor(shooter.accuracy / 2)), shooter.pitch))); + shooter.SpawnMissileAngle("ElectricBolt", ZetaWeapon.RandomAngle(5.625 / pow(2, floor(shooter.accuracy / 2)), shooter.angle), tan(ZetaWeapon.RandomAngle(5.625 / pow(2, floor(shooter.accuracy / 2)))) + (target.pos.z - shooter.pos.z) * 30 / target.Distance2D(shooter)); shooter.A_PlaySound("weapons/xbowshoot", CHAN_WEAPON); } } diff --git a/ZetaCode/WeaponSupport/Strife/ZetaCrossbow2.zsc b/ZetaCode/WeaponSupport/Strife/ZetaCrossbow2.zsc index 2b272ec..d5638f3 100644 --- a/ZetaCode/WeaponSupport/Strife/ZetaCrossbow2.zsc +++ b/ZetaCode/WeaponSupport/Strife/ZetaCrossbow2.zsc @@ -36,7 +36,7 @@ class ZetaCrossbow2 : ZetaWeapon override void Fire(Actor shooter, Actor target) { - shooter.SpawnMissileAngle("PoisonBolt", ZetaWeapon.RandomAngle(5.625 / pow(2, floor(shooter.accuracy / 2)), shooter.angle), tan(ZetaWeapon.RandomAngle(5.625 / pow(2, floor(shooter.accuracy / 2)), shooter.pitch))); + shooter.SpawnMissileAngle("PoisonBolt", ZetaWeapon.RandomAngle(5.625 / pow(2, floor(shooter.accuracy / 2)), shooter.angle), tan(ZetaWeapon.RandomAngle(5.625 / pow(2, floor(shooter.accuracy / 2)))) + (target.pos.z - shooter.pos.z) * 30 / target.Distance2D(shooter)); shooter.A_PlaySound("weapons/xbowshoot", CHAN_WEAPON); } } diff --git a/ZetaCode/WeaponSupport/Strife/ZetaMiniMissile.zsc b/ZetaCode/WeaponSupport/Strife/ZetaMiniMissile.zsc index 79c71f0..c5ca1bd 100644 --- a/ZetaCode/WeaponSupport/Strife/ZetaMiniMissile.zsc +++ b/ZetaCode/WeaponSupport/Strife/ZetaMiniMissile.zsc @@ -27,6 +27,6 @@ class ZetaMiniMissile : ZetaWeapon override void Fire(Actor shooter, Actor target) { - shooter.SpawnMissileAngle("MiniMissile", shooter.angle + ZetaWeapon.RandomAngle(11 - shooter.accuracy / 10), tan(shooter.pitch + ZetaWeapon.RandomAngle(11 - shooter.accuracy / 10))); + shooter.SpawnMissileAngle("MiniMissile", shooter.angle + ZetaWeapon.RandomAngle(11 - shooter.accuracy / 10), tan(ZetaWeapon.RandomAngle(11 - shooter.accuracy / 10)) + (target.pos.z - shooter.pos.z) * 20 / target.Distance2D(shooter)); } } diff --git a/ZetaCode/WeaponSupport/ZetaBullet.zsc b/ZetaCode/WeaponSupport/ZetaBullet.zsc index cafa8e3..66b9fdf 100644 --- a/ZetaCode/WeaponSupport/ZetaBullet.zsc +++ b/ZetaCode/WeaponSupport/ZetaBullet.zsc @@ -31,6 +31,7 @@ class ZetaBullet : Actor { bullet.currDmg = Floor(damage + 0.5); bullet.angle += FRandom(-spreadX, spreadX); + bullet.pitch = (target.pos.z - shooter.pos.z) / target.Distance2D(shooter); bullet.pitch += FRandom(-spreadY, spreadY); bullet.shooter = shooter; bullet.damageType = damageType;