--- 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;