From c7558faa477d01616690e16cfd4c08c9411c5893 Mon Sep 17 00:00:00 2001 From: JezuzLizard Date: Sun, 30 Apr 2023 01:52:00 -0700 Subject: [PATCH] Handle different bones for dogs and gibbed zombies. Readd difficulty settings. --- maps/bots/_bot_internal.gsc | 14 +++++++-- maps/bots/_bot_script.gsc | 58 +++++++++++++++++++++++++++++++++++++ maps/bots/_bot_utility.gsc | 11 +++++++ scripts/sp/killtest.gsc | 4 ++- 4 files changed, 84 insertions(+), 3 deletions(-) diff --git a/maps/bots/_bot_internal.gsc b/maps/bots/_bot_internal.gsc index f5d890d..d0b4a0b 100644 --- a/maps/bots/_bot_internal.gsc +++ b/maps/bots/_bot_internal.gsc @@ -545,12 +545,18 @@ target_loop() targetAnkleLeft = enemy getTagOrigin( "j_ankle_le" ); targetAnkleRight = enemy getTagOrigin( "j_ankle_ri" ); } - else + else if ( !enemy targetIsGibbed() ) { targetHead = enemy getTagOrigin( "j_head" ); targetAnkleLeft = enemy getTagOrigin( "j_ankle_le" ); targetAnkleRight = enemy getTagOrigin( "j_ankle_ri" ); } + else + { + targetHead = enemy getTagOrigin( "j_spinelower" ); + targetAnkleLeft = enemy getTagOrigin( "j_spinelower" ); + targetAnkleRight = enemy getTagOrigin( "j_spinelower" ); + } traceHead = bulletTrace( myEye, targetHead, false, enemy ); traceAnkleLeft = bulletTrace( myEye, targetAnkleLeft, false, enemy ); @@ -676,12 +682,16 @@ target() selectBoneForTarget( enemy, bones ) { if ( enemy targetIsDog() ) + { + return "j_head"; + } + else if ( !enemy targetIsGibbed() ) { return PickRandom( bones ); } else { - return PickRandom( bones ); + return "j_spineupper"; } } diff --git a/maps/bots/_bot_script.gsc b/maps/bots/_bot_script.gsc index bbaa8f1..d004e6e 100644 --- a/maps/bots/_bot_script.gsc +++ b/maps/bots/_bot_script.gsc @@ -8,6 +8,8 @@ added() { self endon( "disconnect" ); + + self set_diff(); } /* @@ -272,6 +274,62 @@ difficulty() } } +/* + Sets the bot difficulty. +*/ +set_diff() +{ + rankVar = GetDvarInt( "bots_skill" ); + + switch ( rankVar ) + { + case 0: + self.pers["bots"]["skill"]["base"] = Round( random_normal_distribution( 3.5, 1.75, 1, 7 ) ); + break; + + case 8: + break; + + case 9: + self.pers["bots"]["skill"]["base"] = randomIntRange( 1, 7 ); + self.pers["bots"]["skill"]["aim_time"] = 0.05 * randomIntRange( 1, 20 ); + self.pers["bots"]["skill"]["init_react_time"] = 50 * randomInt( 100 ); + self.pers["bots"]["skill"]["reaction_time"] = 50 * randomInt( 100 ); + self.pers["bots"]["skill"]["no_trace_ads_time"] = 50 * randomInt( 100 ); + self.pers["bots"]["skill"]["no_trace_look_time"] = 50 * randomInt( 100 ); + self.pers["bots"]["skill"]["remember_time"] = 50 * randomInt( 100 ); + self.pers["bots"]["skill"]["fov"] = randomFloatRange( -1, 1 ); + + randomNum = randomIntRange( 500, 25000 ); + self.pers["bots"]["skill"]["dist_start"] = randomNum; + self.pers["bots"]["skill"]["dist_max"] = randomNum * 2; + + self.pers["bots"]["skill"]["spawn_time"] = 0.05 * randomInt( 20 ); + self.pers["bots"]["skill"]["help_dist"] = randomIntRange( 500, 25000 ); + self.pers["bots"]["skill"]["semi_time"] = randomFloatRange( 0.05, 1 ); + self.pers["bots"]["skill"]["shoot_after_time"] = randomFloatRange( 0.05, 1 ); + self.pers["bots"]["skill"]["aim_offset_time"] = randomFloatRange( 0.05, 1 ); + self.pers["bots"]["skill"]["aim_offset_amount"] = randomFloatRange( 0.05, 1 ); + self.pers["bots"]["skill"]["bone_update_interval"] = randomFloatRange( 0.05, 1 ); + self.pers["bots"]["skill"]["bones"] = "j_head,j_spineupper,j_ankle_ri,j_ankle_le"; + + self.pers["bots"]["behavior"]["strafe"] = randomInt( 100 ); + self.pers["bots"]["behavior"]["nade"] = randomInt( 100 ); + self.pers["bots"]["behavior"]["sprint"] = randomInt( 100 ); + self.pers["bots"]["behavior"]["camp"] = randomInt( 100 ); + self.pers["bots"]["behavior"]["follow"] = randomInt( 100 ); + self.pers["bots"]["behavior"]["crouch"] = randomInt( 100 ); + self.pers["bots"]["behavior"]["switch"] = randomInt( 100 ); + self.pers["bots"]["behavior"]["class"] = randomInt( 100 ); + self.pers["bots"]["behavior"]["jump"] = randomInt( 100 ); + break; + + default: + self.pers["bots"]["skill"]["base"] = rankVar; + break; + } +} + /* When the bot spawned, after the difficulty wait. Start the logic for the bot. */ diff --git a/maps/bots/_bot_utility.gsc b/maps/bots/_bot_utility.gsc index 152b6d9..935273e 100644 --- a/maps/bots/_bot_utility.gsc +++ b/maps/bots/_bot_utility.gsc @@ -993,7 +993,18 @@ getRandomGoal() return PickRandom( level.waypointsInPlayableArea ).origin; } +/* + Checks if target is dog +*/ targetIsDog() { return isDefined( self.targetname ) && self.targetname == "zombie_dog"; +} + +/* + Checks if target is gibbed +*/ +targetIsGibbed() +{ + return isDefined( self.gibbed ) && self.gibbed; } \ No newline at end of file diff --git a/scripts/sp/killtest.gsc b/scripts/sp/killtest.gsc index d4918af..86780af 100644 --- a/scripts/sp/killtest.gsc +++ b/scripts/sp/killtest.gsc @@ -223,13 +223,14 @@ addBot() return; // guy.killingAll = true; - weapon = "zombie_thompson"; + weapon = "ray_gun"; guy giveWeapon( weapon ); // ptrs41_zombie zombie_doublebarrel guy switchToWeapon( weapon ); // colt_dirty_harry //guy thread walk_to_player(); //guy thread do_move(); + /* while ( isDefined( guy ) ) { if ( isDefined( level.isPlayerDead ) && [[level.isPlayerDead]]( guy ) ) @@ -243,6 +244,7 @@ addBot() wait 0.05; } + */ } onPlayerConnect()