]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/commitdiff
Merge branch 'master' into divVerent/waypointeditor-auto
authormand1nga <mand1nga@xonotic.org>
Tue, 30 Aug 2011 02:47:09 +0000 (23:47 -0300)
committermand1nga <mand1nga@xonotic.org>
Tue, 30 Aug 2011 02:47:09 +0000 (23:47 -0300)
13 files changed:
balanceXonotic.cfg
defaultXonotic.cfg
menu.dat.es.po
qcsrc/client/View.qc
qcsrc/client/hud.qc
qcsrc/server/bot/havocbot/havocbot.qc
qcsrc/server/bot/havocbot/roles.qc
qcsrc/server/bot/navigation.qc
qcsrc/server/bot/waypoints.qc
qcsrc/server/bot/waypoints.qh
sound/weapons/campingrifle_fire2.ogg [new file with mode: 0644]
sound/weapons/campingrifle_fire2.wav [deleted file]
xonotic-credits.txt

index 864ead2ccedc87746f05987589d0e8cc82c76fa3..0c46451f4a2a1b1929d8a03104f11a4a228e2047 100644 (file)
@@ -654,8 +654,8 @@ set g_balance_hlac_reload_time 2
 set g_balance_rifle_bursttime 0
 set g_balance_rifle_primary_tracer 1
 set g_balance_rifle_primary_shots 1
-set g_balance_rifle_primary_damage 30
-set g_balance_rifle_primary_headshotaddeddamage 30
+set g_balance_rifle_primary_damage 40
+set g_balance_rifle_primary_headshotaddeddamage 40
 set g_balance_rifle_primary_spread 0
 set g_balance_rifle_primary_force 100
 set g_balance_rifle_primary_speed 40000
@@ -671,8 +671,8 @@ set g_balance_rifle_secondary_reload 0
 set g_balance_rifle_secondary_tracer 0
 set g_balance_rifle_secondary_shots 4
 set g_balance_rifle_secondary_damage 10
-set g_balance_rifle_secondary_headshotaddeddamage 10
-set g_balance_rifle_secondary_spread 0.02
+set g_balance_rifle_secondary_headshotaddeddamage 20
+set g_balance_rifle_secondary_spread 0.04
 set g_balance_rifle_secondary_force 50
 set g_balance_rifle_secondary_speed 20000
 set g_balance_rifle_secondary_lifetime 5
index 4b0bddb0f04bab118c19d293585c5a8a7da26bfe..dd30d1b3c7b768a70224930a0cd087547ae8f819 100644 (file)
@@ -432,7 +432,7 @@ set bot_wander_enable 1 "Have bots wander around if they are unable to reach any
 // general bot AI cvars
 set bot_ai_thinkinterval 0.05
 set bot_ai_strategyinterval 5 "How often a new objective is chosen"
-set bot_ai_enemydetectioninterval 3 "How often bots pick a new target"
+set bot_ai_enemydetectioninterval 2 "How often bots pick a new target"
 set bot_ai_enemydetectionradius 10000 "How far bots can see enemies"
 set bot_ai_dodgeupdateinterval 0.2 "How often scan for items to dodge. Currently not in use."
 set bot_ai_chooseweaponinterval 0.5 "How often the best weapon according to the situation will be chosen"
@@ -457,8 +457,8 @@ set bot_ai_weapon_combo_threshold 0.4       "Try to make a combo N seconds after the l
 set bot_ai_friends_aware_pickup_radius "500"   "Bots will not pickup items if a team mate is this distance near the item"
 set bot_ai_ignoregoal_timeout 3        "Ignore goals making bots to get stuck in front of a wall for N seconds"
 set bot_ai_bunnyhop_skilloffset 7      "Bots with skill equal or greater than this value will perform the  \"bunnyhop\" technique"
-set bot_ai_bunnyhop_startdistance 100 "Run to goals located further than this distance"
-set bot_ai_bunnyhop_stopdistance 125 "Stop jumping after reaching this distance to the goal"
+set bot_ai_bunnyhop_startdistance 200 "Run to goals located further than this distance"
+set bot_ai_bunnyhop_stopdistance 200 "Stop jumping after reaching this distance to the goal"
 set bot_ai_bunnyhop_firstjumpdelay 0.2 "Start running to the goal only if it was seen for more than N seconds"
 set bot_god 0 "god mode for bots"
 set bot_ai_navigation_jetpack 0 "Enable bots to navigate maps using the jetpack"
@@ -1187,8 +1187,6 @@ set g_campaign 0
 set g_campaign_forceteam 0 "Forces the player to a given team in campaign mode, 1 = red, 2 = blue, 3 = yellow, 4 = pink"
 seta g_campaign_name "xonoticbeta"
 set g_campaign_skill 0
-set g_campaignxonotic20_index 0
-set g_campaignxonotic25_index 1
 
 alias singleplayer_start "g_campaign_index 0; set scmenu_campaign_goto 0"
 alias singleplayer_continue "set scmenu_campaign_goto -1"
index c8c8217a0195de32b06e82e3fa1d8ec6059fd4e3..885607d79b1e034da5937a0dae8e67da050f8d40 100644 (file)
@@ -44,7 +44,7 @@ msgstr ""
 
 #: qcsrc/menu/item/gecko.c:49
 msgid "Browser not initialized!"
-msgstr "Navegador no inicializado!"
+msgstr "¡Navegador no inicializado!"
 
 #: qcsrc/menu/item/label.c:63
 #, c-format
@@ -841,7 +841,7 @@ msgstr "Seleccionar ninguno"
 
 #: qcsrc/menu/xonotic/dialog_multiplayer_create.c:119
 msgid "Start Multiplayer!"
-msgstr "Comenzar Multijugador!"
+msgstr "¡Comenzar Multijugador!"
 
 #: qcsrc/menu/xonotic/dialog_multiplayer_create.c:154
 msgid "Capture limit:"
@@ -873,11 +873,11 @@ msgstr "Configuración del juego:"
 
 #: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:28
 msgid "Allow spectating"
-msgstr "Permitir espectador"
+msgstr "Permitir espectadores"
 
 #: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:31
 msgid "Spawn shield:"
-msgstr "Proteccion del colocado:"
+msgstr "Tiempo de protección al resucitar:"
 
 #: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:36
 msgid "Game speed:"
@@ -1023,7 +1023,7 @@ msgstr "NIX"
 #: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:74
 #: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:205
 msgid "Rocket Flying"
-msgstr "Vuelo de cohete"
+msgstr "Volar con Cohetes"
 
 #: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:78
 #: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:264
@@ -1047,7 +1047,7 @@ msgstr "Gancho"
 #: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:86
 #: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:173
 msgid "Midair"
-msgstr "aire"
+msgstr "No saltes"
 
 #: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:88
 #: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:176
@@ -1167,7 +1167,7 @@ msgstr "Información..."
 #: qcsrc/menu/xonotic/dialog_multiplayer_join.c:72
 #: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:317
 msgid "Join!"
-msgstr "Ingresar!"
+msgstr "¡Ingresar!"
 
 #: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:5
 msgid "Server Information"
@@ -1287,7 +1287,7 @@ msgstr "Campo de visión:"
 
 #: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:92
 msgid "View bobbing:"
-msgstr "Ver flotando:"
+msgstr "Vista flotante:"
 
 #: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:96
 msgid "Zoom factor:"
@@ -1312,11 +1312,11 @@ msgstr "Por arma"
 
 #: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:130
 msgid "Crosshair size:"
-msgstr "Tamaño da mira:"
+msgstr "Tamaño de mira:"
 
 #: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:134
 msgid "Crosshair alpha:"
-msgstr "Transparencia da mira:"
+msgstr "Transparencia de mira:"
 
 #: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:138
 msgid "Crosshair color:"
@@ -2266,11 +2266,11 @@ msgstr "Jugador"
 
 #: qcsrc/menu/xonotic/dialog_singleplayer.c:59
 msgid "Instant action! (random map with bots)"
-msgstr "Accion instantanea! (Mapa aleatorio con bots)"
+msgstr "¡Accion instantanea! (Mapa aleatorio con bots)"
 
 #: qcsrc/menu/xonotic/dialog_singleplayer.c:80
 msgid "Start Singleplayer!"
-msgstr "Comenzar!"
+msgstr "¡Comenzar!"
 
 #: qcsrc/menu/xonotic/dialog_singleplayer_winner.c:4
 msgid "Winner"
@@ -2306,7 +2306,7 @@ msgstr "espectador"
 
 #: qcsrc/menu/xonotic/mainwindow.c:35 qcsrc/menu/xonotic/mainwindow.c:38
 msgid "Do not press this button again!"
-msgstr "No vuelva a presionar este boton!"
+msgstr "¡No vuelva a presionar este boton!"
 
 #: qcsrc/menu/xonotic/maplist.c:278
 msgid ""
@@ -2433,7 +2433,7 @@ msgstr "^1%s TEST BUILD"
 #: qcsrc/menu/xonotic/util.qc:432
 #, c-format
 msgid "Update to %s now!"
-msgstr "Actualizar para %s ahora!"
+msgstr "¡Actualizar para %s ahora!"
 
 #: qcsrc/menu/xonotic/util.qc:501
 msgid ""
index cb077390c3bead6dc6c3b35ce000594d07bd5334..efe7be12f3d91cda379ea7750c6515fea707ad76 100644 (file)
@@ -417,22 +417,14 @@ void CSQC_UpdateView(float w, float h)
 
        ticrate = getstatf(STAT_MOVEVARS_TICRATE) * getstatf(STAT_MOVEVARS_TIMESCALE);
 
-       if(autocvar_cl_lockview || (autocvar__hud_configure && spectatee_status <= 0) || intermission > 1)
-       {
-               R_SetView(VF_ORIGIN, freeze_org);
-               R_SetView(VF_ANGLES, freeze_ang);
-       }
-       else
-       {
-               freeze_org = R_SetView3fv(VF_ORIGIN);
-               freeze_ang = R_SetView3fv(VF_ANGLES);
-       }
-
        // event chase camera
        if(autocvar_chase_active <= 0) // greater than 0 means it's enabled manually, and this code is skipped
        {
                if(spectatee_status >= 0 && (autocvar_cl_eventchase_death && getstati(STAT_HEALTH) <= 0 && !intermission) || intermission)
                {
+                       // make special vector since we can't use view_origin (It is one frame old as of this code, it gets set later with the results this code makes.)
+                       vector current_view_origin = R_SetView3fv(VF_ORIGIN);
+                       
                        // We must enable chase_active to get a third person view (weapon viewmodel hidden and own player model showing).
                        // Ideally, there should be another way to enable third person cameras, such as through R_SetView()
                        if(!autocvar_chase_active)
@@ -447,13 +439,12 @@ void CSQC_UpdateView(float w, float h)
                        vector eventchase_target_origin;
                        makevectors(view_angles);
                        // pass 1, used to check where the camera would go and obtain the trace_fraction
-                       eventchase_target_origin = freeze_org - v_forward * eventchase_current_distance;
-
-                       WarpZone_TraceLine(freeze_org, eventchase_target_origin, MOVE_WORLDONLY, self);
+                       eventchase_target_origin = current_view_origin - v_forward * eventchase_current_distance;
+                       WarpZone_TraceLine(current_view_origin, eventchase_target_origin, MOVE_WORLDONLY, self);
                        // pass 2, also multiplying view_forward with trace_fraction, to prevent the camera from going through walls
                        // The 0.1 subtraction is to not limit the camera precisely at the wall surface, as that allows the view to poke through
-                       eventchase_target_origin = freeze_org - v_forward * eventchase_current_distance * (trace_fraction - 0.1);
-                       WarpZone_TraceLine(freeze_org, eventchase_target_origin, MOVE_WORLDONLY, self);
+                       eventchase_target_origin = current_view_origin - v_forward * eventchase_current_distance * (trace_fraction - 0.1);
+                       WarpZone_TraceLine(current_view_origin, eventchase_target_origin, MOVE_WORLDONLY, self);
 
                        R_SetView(VF_ORIGIN, trace_endpos);
                        R_SetView(VF_ANGLES, WarpZone_TransformVAngles(WarpZone_trace_transform, view_angles));
@@ -464,6 +455,18 @@ void CSQC_UpdateView(float w, float h)
                        eventchase_current_distance = 0; // start from 0 next time
                }
        }
+       
+       // do lockview after event chase camera so that it still applies whenever necessary.
+       if(autocvar_cl_lockview || (autocvar__hud_configure && spectatee_status <= 0) || intermission > 1)
+       {
+               R_SetView(VF_ORIGIN, freeze_org);
+               R_SetView(VF_ANGLES, freeze_ang);
+       }
+       else
+       {
+               freeze_org = R_SetView3fv(VF_ORIGIN);
+               freeze_ang = R_SetView3fv(VF_ANGLES);
+       }
 
        WarpZone_FixView();
        //WarpZone_FixPMove();
@@ -803,7 +806,6 @@ void CSQC_UpdateView(float w, float h)
        }
        
        if(autocvar_hud_damage && !autocvar_chase_active)
-
        {
                splash_size_x = max(vid_conwidth, vid_conheight);
                splash_size_y = max(vid_conwidth, vid_conheight);
@@ -885,17 +887,13 @@ void CSQC_UpdateView(float w, float h)
                }
        }
 
-       if(autocvar_hud_postprocessing)
+       if(autocvar_hud_postprocessing) // TODO: Remove this code and re-do the postprocess handling in the engine, where it properly belongs.
        {
-               // all of this should be done in the engine eventually
-
                // enable or disable rendering types if they are used or not
-               if(cvar("r_glsl_postprocess_uservec1_enable") != (cvar("hud_postprocessing_maxbluralpha") != 0))
-                       cvar_set("r_glsl_postprocess_uservec1_enable", ftos(cvar("hud_postprocessing_maxbluralpha") != 0));
-               if(cvar("r_glsl_postprocess_uservec2_enable") != (cvar("hud_powerup") != 0))
-                       cvar_set("r_glsl_postprocess_uservec2_enable", ftos(cvar("hud_powerup") != 0));
-
-               // lets apply the postprocess effects from the previous two functions if needed
+               if(cvar("r_glsl_postprocess_uservec1_enable") != (autocvar_hud_postprocessing_maxbluralpha != 0)) { cvar_set("r_glsl_postprocess_uservec1_enable", ftos(autocvar_hud_postprocessing_maxbluralpha != 0)); }
+               if(cvar("r_glsl_postprocess_uservec2_enable") != (autocvar_hud_powerup != 0)) { cvar_set("r_glsl_postprocess_uservec2_enable", ftos(autocvar_hud_powerup != 0)); }
+               
+               // blur postprocess handling done first (used by hud_damage and hud_contents)
                if((damage_blurpostprocess_x || content_blurpostprocess_x) && autocvar_chase_active >= 0) // not while the event chase camera is active
                {
                        float blurradius = bound(0, damage_blurpostprocess_y + content_blurpostprocess_y, autocvar_hud_postprocessing_maxblurradius);
@@ -914,19 +912,18 @@ void CSQC_UpdateView(float w, float h)
                        old_bluralpha = 0;
                }
 
-               float sharpen_intensity;
-               if (getstatf(STAT_STRENGTH_FINISHED) - time > 0)
-                       sharpen_intensity += (getstatf(STAT_STRENGTH_FINISHED) - time);
-               if (getstatf(STAT_INVINCIBLE_FINISHED) - time > 0)
-                       sharpen_intensity += (getstatf(STAT_INVINCIBLE_FINISHED) - time);
-
+               // edge detection postprocess handling done second (used by hud_powerup) 
+               float sharpen_intensity, strength_finished = getstatf(STAT_STRENGTH_FINISHED), invincible_finished = getstatf(STAT_INVINCIBLE_FINISHED);
+               if (strength_finished - time > 0) { sharpen_intensity += (strength_finished - time); }
+               if (invincible_finished - time > 0) { sharpen_intensity += (invincible_finished - time); }
+               
+               sharpen_intensity = bound(0, ((getstati(STAT_HEALTH) > 0) ? sharpen_intensity : 0), 5); // Check to see if player is alive (if not, set 0) - also bound to fade out starting at 5 seconds.
+               
                if(autocvar_hud_powerup && sharpen_intensity > 0 && autocvar_chase_active >= 0) // not while the event chase camera is active
                {
-                       sharpen_intensity = bound(0, sharpen_intensity, 5); // powerup warning time is 5 seconds, so fade the effect from there
-
                        if(sharpen_intensity != old_sharpen_intensity) // reduce cvar_set spam as much as possible
                        {
-                               cvar_set("r_glsl_postprocess_uservec2", strcat("0 ", ftos(-sharpen_intensity * cvar("hud_powerup")), " 0 0"));
+                               cvar_set("r_glsl_postprocess_uservec2", strcat(ftos((sharpen_intensity / 5) * autocvar_hud_powerup), " ", ftos(-sharpen_intensity * autocvar_hud_powerup), " 0 0"));
                                old_sharpen_intensity = sharpen_intensity;
                        }
                }
index fc6164e6a0eec108a6e99927ce5556dea05dd66a..a1aae684f755e0aaa82f0ff5601d3f5fecbe1f11 100644 (file)
@@ -4580,11 +4580,12 @@ void HUD_CenterPrint (void)
                                                pos_y -= fontsize_y;
                                        else
                                                pos_y -= fontsize_y * CENTERPRINT_SPACING/2;
-                                       if (pos_y < panel_pos_y) // check if the next line can be shown
-                                       {
-                                               drawfontscale = '1 1 0';
-                                               return;
-                                       }
+                                       // NOTE: uncommented so as to not reject messages whenever they are "too large" -- This just continues drawing it anyway.
+                                       //if (pos_y < panel_pos_y) // check if the next line can be shown
+                                       //{
+                                       //      drawfontscale = '1 1 0';
+                                       //      return;
+                                       //}
                                }
                        }
                        current_msg_pos_y = pos_y; // save starting pos (first line) of the current message
@@ -4606,11 +4607,12 @@ void HUD_CenterPrint (void)
                                }
                                else
                                        pos_y += fontsize_y * CENTERPRINT_SPACING/2;
-                               if (!autocvar_hud_panel_centerprint_flip && pos_y > panel_pos_y + panel_size_y - fontsize_y) // check if the next line can be shown
-                               {
-                                       drawfontscale = '1 1 0';
-                                       return;
-                               }
+                               // NOTE: uncommented so as to not reject messages whenever they are "too large" -- This just continues drawing it anyway.
+                               //if (!autocvar_hud_panel_centerprint_flip && pos_y > panel_pos_y + panel_size_y - fontsize_y) // check if the next line can be shown
+                               //{
+                               //      drawfontscale = '1 1 0';
+                               //      return;
+                               //}
                        }
                }
                msg_size = pos_y - msg_size;
index 113d318506b456d478aa3b7ab62701ba0347cb05..bbdb16cd2b71b89fcc607d10c95a791b222e32d9 100644 (file)
@@ -260,15 +260,12 @@ void havocbot_bunnyhop(vector dir)
        if(autocvar_g_midair)
                return;
 
-       // Don't jump when using some weapons
-       /*
+       // Don't jump when attacking
        if(self.aistatus & AI_STATUS_ATTACKING)
-       if(self.weapon == WEP_RIFLE)
                return;
 
        if(self.goalcurrent.classname == "player")
                return;
-       */
 
        maxspeed = autocvar_sv_maxspeed;
 
@@ -766,7 +763,7 @@ void havocbot_movetogoal()
                        // (only when the bot is on the ground or jumping intentionally)
                        self.aistatus &~= AI_STATUS_DANGER_AHEAD;
 
-                       if(trace_fraction == 1 && self.jumppadcount == 0)
+                       if(trace_fraction == 1 && self.jumppadcount == 0 && !self.goalcurrent.wphardwired )
                        if(self.flags & FL_ONGROUND || self.aistatus & AI_STATUS_RUNNING || self.BUTTON_JUMP == TRUE)
                        {
                                // Look downwards
@@ -789,15 +786,9 @@ void havocbot_movetogoal()
                                                if(tracebox_hits_trigger_hurt(dst_ahead, self.mins, self.maxs, trace_endpos))
                                                {
                                                        // Remove dangerous dynamic goals from stack
-                                                       if (self.goalcurrent.classname == "player" || self.goalcurrent.classname == "droppedweapon")
-                                                       {
-                                                               navigation_poproute();
-                                                               if(self.goalcurrent)
-                                                                       gco = (self.goalcurrent.absmin + self.goalcurrent.absmax) * 0.5;
-                                                       }
-                                                       // try to stop
-                                                       flatdir = '0 0 0';
-                                                       evadeobstacle = normalize(self.velocity) * -1;
+                                                       dprint("bot ", self.netname, " avoided the goal ", self.goalcurrent.classname, " ", etos(self.goalcurrent), " because it led to a dangerous path; goal stack cleared\n");
+                                                       navigation_clearroute();
+                                                       return;
                                                }
                                        }
                                }
@@ -891,7 +882,7 @@ void havocbot_chooseenemy()
                        if (self.health > 30)
                        {
                                // remain tracking him for a shot while (case he went after a small corner or pilar
-                               self.havocbot_chooseenemy_finished = time + autocvar_bot_ai_enemydetectioninterval;
+                               self.havocbot_chooseenemy_finished = time + 0.5;
                                return;
                        }
                        // enemy isn't visible, or is far away, or we're injured severely
index 4cf685ddb42f970afa43a58c88206333a99fcb76..93a683a9341cba58301801faabc56598b05187f2 100644 (file)
@@ -199,6 +199,10 @@ void havocbot_goalrating_enemyplayers(float ratingscale, vector org, float sradi
                                        continue;
                        }
 
+                       // TODO: rate waypoints near the targetted player at that moment, instead of the player itself
+                       //               adding a player as a goal seems to be quite dangerous, especially on space maps
+                       //               remove hack in navigation_poptouchedgoals() after performing this change
+
                        t = (self.health + self.armorvalue ) / (head.health + head.armorvalue );
                        navigation_routerating(head, t * ratingscale, 2000);
                }
index b0a7a41cf3ad01428f219829ce340ef793cc3b09..e20afd1e284805f5390942ea77f710352a88a69a 100644 (file)
@@ -134,35 +134,41 @@ float tracewalk(entity e, vector start, vector m1, vector m2, vector end, float
                        if (trace_fraction < 1)
                        {
                                // check if we can walk over this obstacle, possibly by jumpstepping
-                               tracebox(org + jumpstepheightvec, m1, m2, move + jumpstepheightvec, movemode, e);
+                               tracebox(org + stepheightvec, m1, m2, move + stepheightvec, movemode, e);
                                if (trace_fraction < 1 || trace_startsolid)
                                {
-                                       if(autocvar_bot_debug_tracewalk)
-                                               debugnodestatus(trace_endpos, DEBUG_NODE_WARNING);
-
-                                       // check for doors
-                                       traceline( org, move, movemode, e);
-                                       if ( trace_ent.classname == "door_rotating" || trace_ent.classname == "door")
+                                       tracebox(org + jumpstepheightvec, m1, m2, move + jumpstepheightvec, movemode, e);
+                                       if (trace_fraction < 1 || trace_startsolid)
                                        {
-                                               local vector nextmove;
-                                               move = trace_endpos;
-                                               while(trace_ent.classname == "door_rotating" || trace_ent.classname == "door")
+                                               if(autocvar_bot_debug_tracewalk)
+                                                       debugnodestatus(trace_endpos, DEBUG_NODE_WARNING);
+
+                                               // check for doors
+                                               traceline( org, move, movemode, e);
+                                               if ( trace_ent.classname == "door_rotating" || trace_ent.classname == "door")
                                                {
-                                                       nextmove = move + (dir * stepdist);
-                                                       traceline( move, nextmove, movemode, e);
-                                                       move = nextmove;
+                                                       local vector nextmove;
+                                                       move = trace_endpos;
+                                                       while(trace_ent.classname == "door_rotating" || trace_ent.classname == "door")
+                                                       {
+                                                               nextmove = move + (dir * stepdist);
+                                                               traceline( move, nextmove, movemode, e);
+                                                               move = nextmove;
+                                                       }
                                                }
-                                       }
-                                       else
-                                       {
-                                               if(autocvar_bot_debug_tracewalk)
-                                                       debugnodestatus(trace_endpos, DEBUG_NODE_FAIL);
+                                               else
+                                               {
+                                                       if(autocvar_bot_debug_tracewalk)
+                                                               debugnodestatus(trace_endpos, DEBUG_NODE_FAIL);
 
-                                               //print("tracewalk: ", vtos(start), " hit something when trying to reach ", vtos(end), "\n");
-                                               //te_explosion(trace_endpos);
-                                               //print(ftos(e.dphitcontentsmask), "\n");
-                                               return FALSE; // failed
+                                                       //print("tracewalk: ", vtos(start), " hit something when trying to reach ", vtos(end), "\n");
+                                                       //te_explosion(trace_endpos);
+                                                       //print(ftos(e.dphitcontentsmask), "\n");
+                                                       return FALSE; // failed
+                                               }
                                        }
+                                       else
+                                               move = trace_endpos;
                                }
                                else
                                        move = trace_endpos;
@@ -903,7 +909,7 @@ void navigation_poptouchedgoals()
        if(checkpvs(self.origin + self.view_ofs, self.goalstack01))
        if(tracewalk(self, self.origin, self.mins, self.maxs, (self.goalstack01.absmin + self.goalstack01.absmax) * 0.5, bot_navigation_movemode))
        {
-       ///     dprint("path optimized, removed a goal from the queue\n");
+       ///     dprint("path optimized for ", self.netname, ", removed a goal from the queue\n");
                navigation_poproute();
                // TODO this may also be a nice idea to do "early" (e.g. by
                // manipulating the vlen() comparisons) to shorten paths in
@@ -913,9 +919,18 @@ void navigation_poptouchedgoals()
                // personality property
        }
 
+       // HACK: remove players/bots as goals, they can lead a bot to unexpected places (cliffs, lava, etc)
+       // TODO: rate waypoints near the targetted player at that moment, instead of the player itself
+       if(self.goalcurrent.classname=="player")
+               navigation_poproute();
+
+       // aid for detecting jump pads better (distance based check fails sometimes)
+       if(self.goalcurrent.wpflags & WAYPOINTFLAG_TELEPORT && self.jumppadcount > 0 )
+               navigation_poproute();
 
        // Loose goal touching check when running
        if(self.aistatus & AI_STATUS_RUNNING)
+       if(self.speed >= autocvar_sv_maxspeed) // if -really- running
        if(self.goalcurrent.classname=="waypoint")
        {
                if(vlen(self.origin - self.goalcurrent.origin)<150)
index 2214fed4d85afe2230395635c9c7814e8e3aa5fe..33ff6b39b2e7a8290024b4d2a76a57d74c96a2b1 100644 (file)
@@ -411,10 +411,10 @@ float waypoint_load_links()
 
                        if(!found)
                        {
-                               // can't find that waypoint
-                               fclose(file);
-                               return FALSE;
+                               dprint("waypoint_load_links: couldn't find 'from' waypoint at ", vtos(wp_from.origin),"\n");
+                               continue;
                        }
+
                }
 
                // Search "to" waypoint
@@ -433,9 +433,8 @@ float waypoint_load_links()
 
                if(!found)
                {
-                       // can't find that waypoint
-                       fclose(file);
-                       return FALSE;
+                       dprint("waypoint_load_links: couldn't find 'to' waypoint at ", vtos(wp_to.origin),"\n");
+                       continue;
                }
 
                ++c;
@@ -539,6 +538,8 @@ void waypoint_load_links_hardwired()
 
                ++c;
                waypoint_addlink(wp_from, wp_to);
+               wp_from.wphardwired = TRUE;
+               wp_to.wphardwired = TRUE;
        }
 
        fclose(file);
index 17e1f4e98437e49d13d300ee0374108e10c9fe3a..fb7beea0fcaf74cfa73e4aa9deeded549cad3270 100644 (file)
@@ -24,7 +24,7 @@ float botframe_cachedwaypointlinks;
 .float wp16mincost, wp17mincost, wp18mincost, wp19mincost, wp20mincost, wp21mincost, wp22mincost, wp23mincost;
 .float wp24mincost, wp25mincost, wp26mincost, wp27mincost, wp28mincost, wp29mincost, wp30mincost, wp31mincost;
 
-.float wpfire, wpcost, wpconsidered, wpisbox, wpflags, wplinked;
+.float wpfire, wpcost, wpconsidered, wpisbox, wpflags, wplinked, wphardwired;
 
 .vector wpnearestpoint;
 
diff --git a/sound/weapons/campingrifle_fire2.ogg b/sound/weapons/campingrifle_fire2.ogg
new file mode 100644 (file)
index 0000000..721b37b
Binary files /dev/null and b/sound/weapons/campingrifle_fire2.ogg differ
diff --git a/sound/weapons/campingrifle_fire2.wav b/sound/weapons/campingrifle_fire2.wav
deleted file mode 100644 (file)
index 66bda4f..0000000
Binary files a/sound/weapons/campingrifle_fire2.wav and /dev/null differ
index 669c1ab9cb5b62cbd4718301678ee6a3433b7f51..5c48a627fcc8cf9236befc389507fcb2f5ac9873 100644 (file)
@@ -4,6 +4,7 @@ Rudolf "divVerent" Polzer
 Tyler "-z-" Mulligan
 Merlijn Hofstra
 morphed
+Samual "Ares" Lenks
 mand1nga
 Jakob "tZork" Markström Gröhn
 
@@ -109,7 +110,6 @@ chooksta
 cortez
 Cuinn "Cuinnton" Herrick
 Florian Paul "lda17h" Schmidt
-Florian Paul Schmidt
 kojn
 Kristian "morfar" Johansson
 kuniuthefrogg
@@ -123,7 +123,6 @@ Paul Scott
 PlasmaSheep
 Przemysław "atheros" Grzywacz
 Ruszkai "C.Brutail" Ákos
-Samual Lenks
 Sc0rp
 Severin "sev" Meyer
 SoulKeeper_p