]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/commitdiff
Merge branch 'master' into terencehill/bot_ai
authorterencehill <piuntn@gmail.com>
Sun, 3 Mar 2019 11:15:00 +0000 (12:15 +0100)
committerterencehill <piuntn@gmail.com>
Sun, 3 Mar 2019 11:15:00 +0000 (12:15 +0100)
qcsrc/server/bot/default/aim.qc
qcsrc/server/bot/default/havocbot/havocbot.qc
qcsrc/server/bot/default/navigation.qc
xonotic-server.cfg

index 633fdf243663ca319131e5b7652dd65f5418b43c..c69442f19b0ee16c4a309d3b9124fd410eb0d8d1 100644 (file)
@@ -206,6 +206,11 @@ void bot_aimdir(entity this, vector v, float maxfiredeviation)
        // invalid aim dir (can happen when bot overlaps target)
        if(!v) return;
 
+       float skill_save = skill;
+       // allow turning in a more natural way when bot is walking
+       if (!this.bot_aimtarg)
+               skill = max(4, skill);
+
        // get the desired angles to aim at
        //dprint(" at:", vtos(v));
        v = normalize(v);
@@ -326,6 +331,8 @@ void bot_aimdir(entity this, vector v, float maxfiredeviation)
        //if (diffang_y >= 180)
        //      diffang_y = diffang_y - 360;
 
+       skill = skill_save;
+
        //dprint("e ", vtos(diffang), " < ", ftos(maxfiredeviation), "\n");
 
        // decide whether to fire this time
@@ -340,8 +347,6 @@ void bot_aimdir(entity this, vector v, float maxfiredeviation)
        }
        //dprint(ftos(maxfiredeviation),"\n");
        //dprint(" diff:", vtos(diffang), "\n");
-
-       //return this.bot_canfire && (time < this.bot_firetimer);
 }
 
 vector bot_shotlead(vector targorigin, vector targvelocity, float shotspeed, float shotdelay)
index 502d3bcfc5147167d160068264706cd1dbf089f3..31a6bf0974cb83bc95edd036dbeef9c8fa028e31 100644 (file)
@@ -207,7 +207,6 @@ void havocbot_keyboard_movement(entity this, vector destorg)
                keyboard = CS(this).movement / autocvar_sv_maxspeed;
 
                float trigger = autocvar_bot_ai_keyboard_threshold;
-               float trigger1 = -trigger;
 
                // categorize forward movement
                // at skill < 1.5 only forward
@@ -220,7 +219,7 @@ void havocbot_keyboard_movement(entity this, vector destorg)
                        if (sk < 2.5)
                                keyboard.y = 0;
                }
-               else if (keyboard.x < trigger1 && sk > 1.5)
+               else if (keyboard.x < -trigger && sk > 1.5)
                {
                        keyboard.x = -1;
                        if (sk < 4.5)
@@ -237,27 +236,31 @@ void havocbot_keyboard_movement(entity this, vector destorg)
 
                if (keyboard.y > trigger)
                        keyboard.y = 1;
-               else if (keyboard.y < trigger1)
+               else if (keyboard.y < -trigger)
                        keyboard.y = -1;
                else
                        keyboard.y = 0;
 
                if (keyboard.z > trigger)
                        keyboard.z = 1;
-               else if (keyboard.z < trigger1)
+               else if (keyboard.z < -trigger)
                        keyboard.z = -1;
                else
                        keyboard.z = 0;
 
+               // make sure bots don't get stuck if havocbot_keyboardtime is very high
+               if (keyboard == '0 0 0')
+                       this.havocbot_keyboardtime = min(this.havocbot_keyboardtime, time + 0.2);
+
                this.havocbot_keyboard = keyboard * autocvar_sv_maxspeed;
                if (this.havocbot_ducktime > time)
                        PHYS_INPUT_BUTTON_CROUCH(this) = true;
-       }
 
-       keyboard = this.havocbot_keyboard;
-       float blend = bound(0, vlen(destorg - this.origin) / autocvar_bot_ai_keyboard_distance, 1); // When getting close move with 360 degree
-       //dprint("movement ", vtos(CS(this).movement), " keyboard ", vtos(keyboard), " blend ", ftos(blend), "\n");
-       CS(this).movement = CS(this).movement + (keyboard - CS(this).movement) * blend;
+               keyboard = this.havocbot_keyboard;
+               float blend = bound(0, vlen(destorg - this.origin) / autocvar_bot_ai_keyboard_distance, 1); // When getting close move with 360 degree
+               //dprint("movement ", vtos(CS(this).movement), " keyboard ", vtos(keyboard), " blend ", ftos(blend), "\n");
+               CS(this).movement = CS(this).movement + (keyboard - CS(this).movement) * blend;
+       }
 }
 
 void havocbot_bunnyhop(entity this, vector dir)
@@ -1099,7 +1102,7 @@ void havocbot_movetogoal(entity this)
                                this.bot_stop_moving_timeout = time + 0.4 + random() * 0.2;
                        }
 
-                       offset = (vdist(this.velocity, >, 32) ? this.velocity * 0.2 : v_forward * 32);
+                       offset = (vdist(this.velocity, >, 32) ? this.velocity * 0.2 : flatdir * 32);
                        vector dst_ahead = this.origin + this.view_ofs + offset;
                        vector dst_down = dst_ahead - '0 0 3000';
                        traceline(this.origin + this.view_ofs, dst_ahead, true, NULL);
@@ -1112,7 +1115,7 @@ void havocbot_movetogoal(entity this)
                                // Look downwards
                                traceline(dst_ahead , dst_down, true, NULL);
                                //te_lightning2(NULL, this.origin + this.view_ofs, dst_ahead); // Draw "ahead" look
-                               //te_lightning2(NULL, dst_ahead, dst_down); // Draw "downwards" look
+                               //te_lightning2(NULL, dst_ahead, trace_endpos); // Draw "downwards" look
                                if(trace_endpos.z < this.origin.z + this.mins.z)
                                {
                                        s = pointcontents(trace_endpos + '0 0 1');
index 9dc1e47aa37e326a626501b9e90d24fb51c63e49..5553a6b87f972b7018b37b6f28fa87a587a76fb2 100644 (file)
@@ -1819,7 +1819,7 @@ void navigation_goalrating_end(entity this)
        this.goalstack31 = NULL;
 
        navigation_routetogoal(this, navigation_bestgoal, this.origin);
-       LOG_DEBUG("best goal ", this.goalcurrent.classname);
+       LOG_DEBUG("best goal ", navigation_bestgoal.classname);
 
        if (wp && this.goalcurrent == wp)
                navigation_poproute(this);
index bb0d59371d04a66434bbb4df2a3f6f2a15b6cb73..a5874eb24a0219d3f51d7e91e303a59649cff3c5 100644 (file)
@@ -153,15 +153,15 @@ set bot_ai_navigation_jetpack 0 "Enable bots to navigate maps using the jetpack"
 set bot_ai_navigation_jetpack_mindistance 3500 "Bots will try fly to objects located farther than this distance"
 // Better don't touch these, there are hard to tweak!
 set bot_ai_aimskill_order_mix_1st 0.01 "Amount of the 1st filter output to apply to the aiming angle"
-set bot_ai_aimskill_order_mix_2nd 0.1 "Amount of the 2nd filter output to apply to the aiming angle"
+set bot_ai_aimskill_order_mix_2nd 0.075 "Amount of the 2nd filter output to apply to the aiming angle"
 set bot_ai_aimskill_order_mix_3th 0.01 "Amount of the 3th filter output to apply to the aiming angle"
-set bot_ai_aimskill_order_mix_4th 0.05 "Amount of the 4th filter output to apply to the aiming angle"
+set bot_ai_aimskill_order_mix_4th 0.0375 "Amount of the 4th filter output to apply to the aiming angle"
 set bot_ai_aimskill_order_mix_5th 0.01 "Amount of the 5th filter output to apply to the aiming angle"
-set bot_ai_aimskill_order_filter_1st 0.4 "Position filter"
-set bot_ai_aimskill_order_filter_2nd 0.4 "Movement filter"
-set bot_ai_aimskill_order_filter_3th 0.2 "Acceleration filter"
-set bot_ai_aimskill_order_filter_4th 0.4 "Position prediction filter. Used rarely"
-set bot_ai_aimskill_order_filter_5th 0.5 "Movement prediction filter. Used rarely"
+set bot_ai_aimskill_order_filter_1st 0.2 "Position filter"
+set bot_ai_aimskill_order_filter_2nd 0.2 "Movement filter"
+set bot_ai_aimskill_order_filter_3th 0.1 "Acceleration filter"
+set bot_ai_aimskill_order_filter_4th 0.2 "Position prediction filter. Used rarely"
+set bot_ai_aimskill_order_filter_5th 0.25 "Movement prediction filter. Used rarely"
 set bot_ai_timeitems 1 "allow skilled bots to run to important items a little time before respawning"
 set bot_ai_timeitems_minrespawndelay 25 "bots run to items with this minimum respawn delay before respawning"