Hopefully done taunts implementation
authorunc0rr
Fri, 27 Jun 2008 17:45:35 +0000
changeset 1035 6f5842bc481b
parent 1034 05f003ad3caa
child 1036 551af2411980
Hopefully done taunts implementation
doc/protocol.txt
hedgewars/CCHandlers.inc
hedgewars/HHHandlers.inc
hedgewars/uChat.pas
hedgewars/uConsole.pas
hedgewars/uIO.pas
--- a/doc/protocol.txt	Fri Jun 27 17:22:15 2008 +0000
+++ b/doc/protocol.txt	Fri Jun 27 17:45:35 2008 +0000
@@ -1,31 +1,32 @@
-IPC:
-                '?'             ping?
-                '!'             pong!
-                'l','L'         срабатывание команд     -left, +left
-                'r','R'                                 -right, +right
-                'u','U'                                 -up, +up
-                'd','D'                                 -down, +down
-                'N'             срабатывание команды /nextturn
-                'S'                                     /switch
-                's' + <текст>   /say
-                '+'             пустой пакет для постоянности лага
-                '1'..'5'        /timer 1..5
-                chr(128+№)     /slot №
-                'w'             /setweap
-                'p'             /put
-                'j'             /ljump
-                'J'             /hjump
-                'E' + <текст>   сообщение об ошибке
-                ','		/skip
-                'K'		вывести сообщение из KB
-                'Q'		выход через команду /quit
-                'q'		выход по причине окончания игры
-                
-        фронтенд клиенту:
-                'e' + <команда> выполнить "/<команда>"
-                'T' + {L,N,D}   тип игры (локальная, сетевая, просмотр демо)
-                'W' + <текст>   сообщение о нефатальной ошибке
-        Клиент фронтенду:
-                'C'             запрос текущего конфига игры
-                'q'             выход по причине окончания демки
-                'i'             статистика
+	'?'             ping?
+	'!'             pong!
+	'l','L'         срабатывание команд     -left, +left
+	'r','R'                                 -right, +right
+	'u','U'                                 -up, +up
+	'd','D'                                 -down, +down
+	'N'             срабатывание команды /nextturn
+	'S'                                  /switch
+	's' + <текст>   /say
+	'+'             пустой пакет для постоянности лага
+	'1'..'5'        /timer 1..5
+	chr(128+№)     /slot №
+	'w'             /setweap
+	'p'             /put
+	'j'             /ljump
+	'J'             /hjump
+	'E' + <текст>   сообщение об ошибке
+	','             /skip
+	'K'             вывести сообщение из KB
+	'Q'             выход через команду /quit
+	'q'             выход по причине окончания игры
+	't' + №        /taunt №
+
+фронтенд клиенту:
+	'e' + <команда> выполнить "/<команда>"
+	'T' + {L,N,D}   тип игры (локальная, сетевая, просмотр демо)
+	'W' + <текст>   сообщение о нефатальной ошибке
+
+Клиент фронтенду:
+	'C'             запрос текущего конфига игры
+	'q'             выход по причине окончания демки
+	'i'             статистика
--- a/hedgewars/CCHandlers.inc	Fri Jun 27 17:22:15 2008 +0000
+++ b/hedgewars/CCHandlers.inc	Fri Jun 27 17:45:35 2008 +0000
@@ -334,6 +334,21 @@
      end
 end;
 
+procedure chTaunt(var s: shortstring);
+begin
+if (s[0] <> #1) or CheckNoTeamOrHH then exit;
+
+if TWave(s[1]) > High(TWave) then exit;
+
+if not CurrentTeam^.ExtDriven then SendIPC('t' + s);
+
+with CurrentHedgehog^.Gear^ do
+     begin
+     Message:= Message or gm_Animate;
+     MsgParam:= byte(s[1])
+     end
+end;
+
 procedure doPut(putX, putY: LongInt; fromAI: boolean);
 begin
 if CheckNoTeamOrHH then exit;
--- a/hedgewars/HHHandlers.inc	Fri Jun 27 17:22:15 2008 +0000
+++ b/hedgewars/HHHandlers.inc	Fri Jun 27 17:45:35 2008 +0000
@@ -480,6 +480,15 @@
 else
    Gear^.Message:= 0;
 
+if (TurnTimeLeft = 0) or (Gear^.Damage > 0) then
+   begin
+   TurnTimeLeft:= 0;
+   Gear^.State:= Gear^.State and not (gstHHDriven or gstAnimation);
+   if Gear^.Damage > 0 then
+      Gear^.State:= Gear^.State and not (gstHHJumping or gstHHHJump);
+   exit
+   end;
+
 if (Gear^.State and gstAnimation) <> 0 then
 	begin
 	Gear^.Message:= 0;
@@ -494,16 +503,6 @@
 	exit
 	end;
 
-
-if (TurnTimeLeft = 0) or (Gear^.Damage > 0) then
-   begin
-   TurnTimeLeft:= 0;
-   Gear^.State:= Gear^.State and not gstHHDriven;
-   if Gear^.Damage > 0 then
-      Gear^.State:= Gear^.State and not (gstHHJumping or gstHHHJump);
-   exit
-   end;
-
 if ((Gear^.State and gstMoving) <> 0)
     or (StepTicks = cHHStepTicks)
 	or (CurAmmoGear <> nil) then // we're moving
--- a/hedgewars/uChat.pas	Fri Jun 27 17:22:15 2008 +0000
+++ b/hedgewars/uChat.pas	Fri Jun 27 17:45:35 2008 +0000
@@ -28,7 +28,7 @@
 	showAll: boolean = false;
 
 implementation
-uses uMisc, uStore, uConsts, SDLh, uConsole, uKeys, uGears, uTeams;
+uses uMisc, uStore, uConsts, SDLh, uConsole, uKeys, uTeams;
 
 const MaxStrIndex = 27;
 
@@ -118,15 +118,22 @@
 end;
 
 procedure AcceptChatString(s: shortstring);
+var i: TWave;
+	b: boolean;
 begin
-if (s = '/sad') and not CurrentTeam^.ExtDriven then
-	with CurrentHedgehog^.Gear^ do
-		begin
-		Message:= Message or gm_Animate;
-		MsgParam:= Longword(waveSad)
-		end
-else
-	ParseCommand('/say ' + s, true);
+if s[1] = '/' then
+	begin
+	if CurrentTeam^.ExtDriven then exit;
+	
+	for i:= Low(TWave) to High(TWave) do
+		if (s = Wavez[i].cmd) then
+			begin
+			ParseCommand('/taunt ' + char(i), true);
+			exit
+			end;
+	end
+	else
+		ParseCommand('/say ' + s, true);
 end;
 
 procedure KeyPressChat(Key: Longword);
--- a/hedgewars/uConsole.pas	Fri Jun 27 17:22:15 2008 +0000
+++ b/hedgewars/uConsole.pas	Fri Jun 27 17:45:35 2008 +0000
@@ -260,6 +260,7 @@
 RegisterVariable('switch'  , vtCommand, @chSwitch       , false);
 RegisterVariable('nextturn', vtCommand, @chNextTurn     , false);
 RegisterVariable('timer'   , vtCommand, @chTimer        , false);
+RegisterVariable('taunt'   , vtCommand, @chTaunt        , false);
 RegisterVariable('setweap' , vtCommand, @chSetWeapon    , false);
 RegisterVariable('slot'    , vtCommand, @chSlot         , false);
 RegisterVariable('put'     , vtCommand, @chPut          , false);
--- a/hedgewars/uIO.pas	Fri Jun 27 17:22:15 2008 +0000
+++ b/hedgewars/uIO.pas	Fri Jun 27 17:45:35 2008 +0000
@@ -252,8 +252,11 @@
 			CursorPoint.Y:= SmallInt(SDLNet_Read16(@(headcmd^.Y)) + WorldDy);
 			end;
 		'w': ParseCommand('setweap ' + headcmd^.str[2], true);
+		't': ParseCommand('taunt ' + headcmd^.str[2], true);
 		'1'..'5': ParseCommand('timer ' + headcmd^.cmd, true);
 		#128..char(128 + cMaxSlotIndex): ParseCommand('slot ' + char(byte(headcmd^.cmd) - 79), true)
+		else
+			OutError('Unexpected protocol command: ' + headcmd^.cmd, True)
 		end;
 	RemoveCmd
 	end;