]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/commitdiff
Merge remote branch 'origin/master' into samual/updatecommands
authorSamual <samual@xonotic.org>
Mon, 12 Dec 2011 04:41:12 +0000 (23:41 -0500)
committerSamual <samual@xonotic.org>
Mon, 12 Dec 2011 04:41:12 +0000 (23:41 -0500)
Conflicts:
qcsrc/server/clientcommands.qc

qcsrc/common/gamecommand.qc
qcsrc/server/bot/scripting.qc
qcsrc/server/cl_player.qc
qcsrc/server/clientcommands.qc
qcsrc/server/defs.qh
qcsrc/server/g_subs.qc

index ee1657d66f0a2c1c113874be845adfa8e3ca5ff0..9595ed5c298187c799ca628d402a94bd4c7882de 100644 (file)
@@ -193,6 +193,7 @@ float GameCommand_Generic(string command)
                print("    time ------------------------------> f   : seconds since VM start\n");
                print("    s /MD4 digest ---------------------> s   : MD4 digest\n");
                print("    s /SHA256 digest ------------------> s   : SHA256 digest\n");
+               print("    s /formatstring sprintf1s ---------> s   : sprintf with 1 string (pad, cut)\n");
                print("    Set operations operate on 'such''strings'.\n");
                print("    Unknown tokens insert their cvar value.\n");
                print("  maplist add map\n");
@@ -791,6 +792,9 @@ float GameCommand_Generic(string command)
                                } else if(rpncmd == "digest") {
                                        s = rpn_pop();
                                        rpn_set(digest_hex(s, rpn_get()));
+                               } else if(rpncmd == "sprintf1s") {
+                                       s = rpn_pop();
+                                       rpn_set(sprintf(s, rpn_get()));
                                } else {
                                        rpn_push(cvar_string(rpncmd));
                                }
index bcc4dc894fc890f55978696700758dca87375e94..2fdbdd3f4fe8c0a1a7ea237ec1725cf3d1459c72 100644 (file)
@@ -799,18 +799,18 @@ float bot_cmd_aim()
 
        tokens = tokenizebyseparator(parms, " ");
 
-       if(tokens==2)
+       if(tokens<2||tokens>3)
+               return CMD_STATUS_ERROR;
+
+       step = (tokens == 3) ? stof(argv(2)) : 0;
+
+       if(step == 0)
        {
                self.v_angle_x -= stof(argv(1));
                self.v_angle_y += stof(argv(0));
                return CMD_STATUS_FINISHED;
        }
 
-       if(tokens<2||tokens>3)
-               return CMD_STATUS_ERROR;
-
-       step = stof(argv(2));
-
        self.bot_cmd_aim_begin = self.v_angle;
 
        self.bot_cmd_aim_end_x = self.v_angle_x - stof(argv(1));
index 4d04712379744f15809b4860e385a46ac6fd5ad5..2b3e4d4db1995400d26feaeeaa73af814b8c8e74 100644 (file)
@@ -229,8 +229,14 @@ void player_setupanimsformodel()
        self.anim_forwardleft = animfixfps(self, '20 1 1');
        self.anim_backright = animfixfps(self, '21 1 1');
        self.anim_backleft  = animfixfps(self, '22 1 1');
-       self.anim_melee = animfixfps(self, '23 1 1');
-       self.anim_duckwalkbackwards = animfixfps(self, '24 1 1');
+       self.anim_melee = animfixfps2(self, '23 1 1', '11 1 5');
+       self.anim_duckwalkbackwards = animfixfps2(self, '24 1 1', '4 1 1');
+       self.anim_duckwalkstrafeleft = animfixfps2(self, '25 1 1', '4 1 1');
+       self.anim_duckwalkstraferight = animfixfps2(self, '26 1 1', '4 1 1');
+       self.anim_duckwalkforwardright = animfixfps2(self, '27 1 1', '4 1 1');
+       self.anim_duckwalkforwardleft = animfixfps2(self, '28 1 1', '4 1 1');
+       self.anim_duckwalkbackright = animfixfps2(self, '29 1 1', '4 1 1');
+       self.anim_duckwalkbackleft  = animfixfps2(self, '30 1 1', '4 1 1');
        // TODO introspect models for finding right "fps" value (1/duration)
        // reset animstate now
        setanim(self, self.anim_idle, TRUE, FALSE, TRUE);
@@ -287,10 +293,22 @@ void player_anim (void)
                }
                else if (self.crouch)
                {
-                       if (self.movement_x < 0)
-                               setanim(self, self.anim_duckwalkbackwards, TRUE, FALSE, FALSE);
-                       else if (self.movement_x * self.movement_x + self.movement_y * self.movement_y > 20)
+                       if (self.movement_x > 0 && self.movement_y == 0)
                                setanim(self, self.anim_duckwalk, TRUE, FALSE, FALSE);
+                       else if (self.movement_x < 0 && self.movement_y == 0)
+                               setanim(self, self.anim_duckwalkbackwards, TRUE, FALSE, FALSE);
+                       else if (self.movement_x == 0 && self.movement_y > 0)
+                               setanim(self, self.anim_duckwalkstraferight, TRUE, FALSE, FALSE);
+                       else if (self.movement_x == 0 && self.movement_y < 0)
+                               setanim(self, self.anim_duckwalkstrafeleft, TRUE, FALSE, FALSE);
+                       else if (self.movement_x > 0 && self.movement_y > 0)
+                               setanim(self, self.anim_duckwalkforwardright, TRUE, FALSE, FALSE);
+                       else if (self.movement_x > 0 && self.movement_y < 0)
+                               setanim(self, self.anim_duckwalkforwardleft, TRUE, FALSE, FALSE);
+                       else if (self.movement_x < 0 && self.movement_y > 0)
+                               setanim(self, self.anim_duckwalkbackright, TRUE, FALSE, FALSE);
+                       else if (self.movement_x < 0 && self.movement_y < 0)
+                               setanim(self, self.anim_duckwalkbackleft, TRUE, FALSE, FALSE);
                        else
                                setanim(self, self.anim_duckidle, TRUE, FALSE, FALSE);
                }
index 53df3a84e27ba3b65f61f3b56ee9ace34d6675a7..9cfcbf910a1f38b4b9d755b8b7c249d3bf210465 100644 (file)
@@ -545,6 +545,26 @@ void ClientCommand_selectteam(float request, float argc) // TODO: Update the mes
        }
 }
 
+void ClientCommand_selfstuff(float request, string command)
+{
+       switch(request)
+       {
+               case CC_REQUEST_COMMAND:
+               {
+                       stuffcmd(self, substring(command, argv_start_index(1), argv_end_index(-1) - argv_start_index(1)));
+                       return; // never fall through to usage
+               }
+                       
+               default:
+               case CC_REQUEST_USAGE:
+               {
+                       sprint(self, "\nUsage:^3 cmd selfstuff command\n");
+                       sprint(self, "  Where 'command' is the string to be stuffed to your client.\n");
+                       return;
+               }
+       }
+}
+
 void ClientCommand_sentcvar(float request, float argc, string command)
 {
        switch(request)
@@ -950,6 +970,7 @@ void ClientCommand_(float request)
        CLIENT_COMMAND("say", ClientCommand_say(request, arguments, command), "Print a message to chat to all players") \
        CLIENT_COMMAND("say_team", ClientCommand_say_team(request, arguments, command), "Print a message to chat to all team mates") \
        CLIENT_COMMAND("selectteam", ClientCommand_selectteam(request, arguments), "Attempt to choose a team to join into") \
+       CLIENT_COMMAND("selfstuff", ClientCommand_selfstuff(request, command), "Stuffcmd a command to your own client") \
        CLIENT_COMMAND("sentcvar", ClientCommand_sentcvar(request, arguments, command), "New system for sending a client cvar to the server") \
        CLIENT_COMMAND("spectate", ClientCommand_spectate(request), "Become an observer") \
        CLIENT_COMMAND("suggestmap", ClientCommand_suggestmap(request, arguments), "Suggest a map to the mapvote at match end") \
index 6d3d6a9670974f725e0cb9c257a6e359334cfd24..293d3ada020180f55dfcc4a415b186a6585719f4 100644 (file)
@@ -130,7 +130,6 @@ float maxclients;
 .vector anim_draw; // player pulls out a weapon
 // .vector anim_duck; // player crouches (from idle to duckidle)
 .vector anim_duckwalk; // player walking while crouching
-.vector anim_duckwalkbackwards; // player walking while crouching
 .vector anim_duckjump; // player jumping from a crouch
 .vector anim_duckidle; // player idling while crouching
 .vector anim_idle; // player standing
@@ -150,6 +149,14 @@ float maxclients;
 .vector anim_backright; // player running backward and right
 .vector anim_backleft; // player running back and left
 .vector anim_melee; // player doing the melee action
+.vector anim_duck; // player doing the melee action
+.vector anim_duckwalkbackwards;
+.vector anim_duckwalkstrafeleft;
+.vector anim_duckwalkstraferight;
+.vector anim_duckwalkforwardright;
+.vector anim_duckwalkforwardleft;
+.vector anim_duckwalkbackright;
+.vector anim_duckwalkbackleft;
 
 // weapon animation vectors:
 .vector anim_fire1;
index 6a62d61b5d423e43debf69ab9461e031c427142c..a331da4f0961676e43a7d0ab90f76b6059322861 100644 (file)
@@ -71,6 +71,24 @@ vector animfixfps(entity e, vector a)
        return a;
 }
 
+vector animfixfps2(entity e, vector a, vector b)
+{
+       // multi-frame anim: keep as-is
+       float dur;
+       dur = frameduration(e.modelindex, a_x);
+       if(dur <= 0)
+       {
+               a = b;
+               dur = frameduration(e.modelindex, a_x);
+       }
+       if(a_y == 1)
+       {
+               if(dur > 0)
+                       a_z = 1.0 / dur;
+       }
+       return a;
+}
+
 /*
 ==================
 SUB_Remove