From b0f276c13dad45c3995adaff8adb5b3e768a0e21 Mon Sep 17 00:00:00 2001 From: ineed bots Date: Fri, 21 Apr 2023 18:48:19 -0600 Subject: [PATCH] libcod support --- mods/bots/maps/mp/bots/_bot.gsc | 2 +- mods/bots/maps/mp/bots/_bot_internal.gsc | 10 +- mods/bots/maps/mp/bots/_bot_script.gsc | 2 +- mods/bots/maps/mp/bots/_bot_utility.gsc | 143 ++++++++++++++++++++++- 4 files changed, 145 insertions(+), 12 deletions(-) diff --git a/mods/bots/maps/mp/bots/_bot.gsc b/mods/bots/maps/mp/bots/_bot.gsc index 4892491..ecff7f6 100644 --- a/mods/bots/maps/mp/bots/_bot.gsc +++ b/mods/bots/maps/mp/bots/_bot.gsc @@ -6,7 +6,7 @@ */ init() { - level.bw_VERSION = "2.0.1"; + level.bw_VERSION = "2.1.0"; if ( getCvar( "bots_main" ) == "" ) setCvar( "bots_main", true ); diff --git a/mods/bots/maps/mp/bots/_bot_internal.gsc b/mods/bots/maps/mp/bots/_bot_internal.gsc index 93dad38..20c7530 100644 --- a/mods/bots/maps/mp/bots/_bot_internal.gsc +++ b/mods/bots/maps/mp/bots/_bot_internal.gsc @@ -1449,7 +1449,7 @@ walk_loop() d = VectorNormalize( trace["position"] - myOrg ); n = trace["normal"]; - r = d - vector_scale( vector_scale( VectorDot( d, n ), n ), 2 ); + r = d - vector_scale( vector_scale( n, VectorDot( d, n ) ), 2 ); goal = PhysicsTrace( myOrg, myOrg + vector_scale( ( r[0], r[1], 0 ), stepDist ), false, self ); goal = PhysicsTrace( goal + ( 0, 0, 50 ), goal + ( 0, 0, -40 ), false, self ); @@ -2135,11 +2135,3 @@ bot_lookat( pos, time, vel, doAimPredict ) wait 0.05; } } - -/* - Weapon -*/ -botWeapon( a ) -{ - self switchToWeapon( a ); -} diff --git a/mods/bots/maps/mp/bots/_bot_script.gsc b/mods/bots/maps/mp/bots/_bot_script.gsc index f1af4a0..825c4f1 100644 --- a/mods/bots/maps/mp/bots/_bot_script.gsc +++ b/mods/bots/maps/mp/bots/_bot_script.gsc @@ -181,7 +181,7 @@ set_diff() switch ( rankVar ) { case 0: - self.pers["bots"]["skill"]["base"] = Round( random_normal_distribution( 3.5, 1.75, 1, 7 ) ); + self.pers["bots"]["skill"]["base"] = RoundNum( random_normal_distribution( 3.5, 1.75, 1, 7 ) ); break; case 8: diff --git a/mods/bots/maps/mp/bots/_bot_utility.gsc b/mods/bots/maps/mp/bots/_bot_utility.gsc index 75b3193..2df5deb 100644 --- a/mods/bots/maps/mp/bots/_bot_utility.gsc +++ b/mods/bots/maps/mp/bots/_bot_utility.gsc @@ -1,5 +1,143 @@ #include maps\mp\_utility; +/* + Custom exports with engine mod +*/ +isBot() +{ + return false; // no equal in libcod +} + +/* + Custom exports with engine mod +*/ +botAction( action ) +{ + switch ( action ) + { + case "+fire": + self fireweapon( true ); + break; + + case "-fire": + self fireweapon( false ); + break; + + case "+ads": + self adsaim( true ); + break; + + case "-ads": + self adsaim( false ); + break; + + case "-reload": + self reloadweapon( false ); + break; + + case "+reload": + self reloadweapon( true ); + break; + + case "-melee": + self meleeweapon( false ); + break; + + case "+melee": + self meleeweapon( true ); + break; + + case "+frag": + self thrownade( true ); + break; + + case "-frag": + self thrownade( false ); + break; + + case "-gocrouch": + case "-goprone": + case "-gostand": + self setbotstance( "stand" ); + break; + + case "+gocrouch": + self setbotstance( "crouch" ); + break; + + case "+goprone": + self setbotstance( "prone" ); + break; + + case "+gostand": + self setbotstance( "jump" ); + break; + + case "-smoke": // no equal in libcod + case "-activate": + case "-holdbreath": + break; + } +} + +/* + Custom exports with engine mod +*/ +botMovement( up, right ) +{ + // best i can do for libcod... + if ( up > 63 ) + { + self setwalkdir( "forward" ); + return; + } + + if ( right > 63 ) + { + self setwalkdir( "right" ); + return; + } + + if ( up < -63 ) + { + self setwalkdir( "back" ); + return; + } + + if ( right < -63 ) + { + self setwalkdir( "left" ); + return; + } + + self setwalkdir( "none" ); +} + +/* + Custom exports with engine mod +*/ +botStop() +{ + self adsaim( false ); + self reloadweapon( false ); + self meleeweapon( false ); + self fireweapon( false ); + self thrownade( false ); + self setbotstance( "stand" ); + self setlean( "none" ); + self setwalkdir( "none" ); + self switchtoweaponid( 1 ); +} + +/* + Weapon +*/ +botWeapon( a ) +{ + // libcod needs weapon name to id + self switchToWeapon( a ); +} + /* Returns if player is the host */ @@ -876,7 +1014,7 @@ DistanceSquared2D( to, from ) /* Rounds to the nearest whole number. */ -Round( x ) +RoundNum( x ) { y = int( x ); @@ -1236,6 +1374,9 @@ loadmbotWps( mapname, gametype ) s = fgetarg( f, 0 ); t = strtok( s, " ," ); + if ( !isDefined( t ) || t.size < 6 ) + break; + wp = spawnStruct(); wp.origin = ( float( t[0] ), float( t[1] ), float( t[2] ) );