diff -r 31570b766315 -r ed5a6478e710 hedgewars/uInputHandler.pas --- a/hedgewars/uInputHandler.pas Tue Nov 10 18:16:35 2015 +0100 +++ b/hedgewars/uInputHandler.pas Tue Nov 10 20:43:13 2015 +0100 @@ -1,6 +1,6 @@ (* * Hedgewars, a free turn based strategy game - * Copyright (c) 2004-2013 Andrey Korotaev + * Copyright (c) 2004-2015 Andrey Korotaev * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -13,7 +13,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) {$INCLUDE "options.inc"} @@ -50,7 +50,7 @@ procedure ControllerButtonEvent(joy, button: Byte; pressed: Boolean); implementation -uses uConsole, uCommands, uMisc, uVariables, uConsts, uUtils, uDebug, uPhysFSLayer; +uses uConsole, uCommands, uVariables, uConsts, uUtils, uDebug, uPhysFSLayer; const LSHIFT = $0200; @@ -58,7 +58,7 @@ LALT = $0800; RALT = $1000; LCTRL = $2000; - RCTRL = $4000; + RCTRL = $4000; var tkbd: array[0..cKbdMaxIndex] of boolean; KeyNames: array [0..cKeyMaxIndex] of string[15]; @@ -92,16 +92,16 @@ (* procedure MaskModifier(var code: LongInt; Modifier: LongWord); begin - if(Modifier and KMOD_LSHIFT) <> 0 then code:= code or LSHIFT; - if(Modifier and KMOD_RSHIFT) <> 0 then code:= code or LSHIFT; - if(Modifier and KMOD_LALT) <> 0 then code:= code or LALT; - if(Modifier and KMOD_RALT) <> 0 then code:= code or LALT; - if(Modifier and KMOD_LCTRL) <> 0 then code:= code or LCTRL; - if(Modifier and KMOD_RCTRL) <> 0 then code:= code or LCTRL; + if(Modifier and KMOD_LSHIFT) <> 0 then code:= code or LSHIFT; + if(Modifier and KMOD_RSHIFT) <> 0 then code:= code or LSHIFT; + if(Modifier and KMOD_LALT) <> 0 then code:= code or LALT; + if(Modifier and KMOD_RALT) <> 0 then code:= code or LALT; + if(Modifier and KMOD_LCTRL) <> 0 then code:= code or LCTRL; + if(Modifier and KMOD_RCTRL) <> 0 then code:= code or LCTRL; end; *) procedure MaskModifier(Modifier: shortstring; var code: LongInt); -var mod_ : shortstring; +var mod_ : shortstring = ''; ModifierCount, i: LongInt; begin if Modifier = '' then exit; @@ -113,7 +113,7 @@ SplitByChar(Modifier, mod_, ':');//remove the first mod: part Modifier:= mod_; for i:= 0 to ModifierCount do - begin + begin mod_:= ''; SplitByChar(Modifier, mod_, ':'); if (Modifier = 'lshift') then code:= code or LSHIFT; @@ -178,11 +178,13 @@ if KeyDown then begin + Trusted:= Trusted and (not isPaused); //releasing keys during pause should be allowed on the other hand + if CurrentBinds[code] = 'switch' then LocalMessage:= LocalMessage or gmSwitch else if CurrentBinds[code] = '+precise' then LocalMessage:= LocalMessage or gmPrecise; - + ParseCommand(CurrentBinds[code], Trusted); if (CurrentTeam <> nil) and (not CurrentTeam^.ExtDriven) and (ReadyTimeLeft > 1) then ParseCommand('gencmd R', true) @@ -190,7 +192,7 @@ else if (CurrentBinds[code][1] = '+') then begin if CurrentBinds[code] = '+precise' then - LocalMessage:= LocalMessage and not(gmPrecise); + LocalMessage:= LocalMessage and (not gmPrecise); s:= CurrentBinds[code]; s[1]:= '-'; ParseCommand(s, Trusted); @@ -200,7 +202,7 @@ else begin if CurrentBinds[code] = 'switch' then - LocalMessage:= LocalMessage and not(gmSwitch) + LocalMessage:= LocalMessage and (not gmSwitch) end end end; @@ -427,10 +429,10 @@ if ControllerNumAxes[j] > 20 then ControllerNumAxes[j]:= 20; //if ControllerNumBalls[j] > 20 then ControllerNumBalls[j]:= 20; - + if ControllerNumHats[j] > 20 then ControllerNumHats[j]:= 20; - + if ControllerNumButtons[j] > 20 then ControllerNumButtons[j]:= 20; @@ -492,6 +494,8 @@ p, l: shortstring; b: byte; begin + if cOnlyStats then exit; + AddFileLog('[BINDS] Loading binds from: ' + s); l:= ''; @@ -509,16 +513,17 @@ i:= 1; while (i <= length(l)) and (l[i] <> '=') do begin - if l[i] <> '%' then - begin - p:= p + l[i]; - inc(i) - end else + if l[i] = '%' then begin l[i]:= '$'; val(copy(l, i, 3), b); p:= p + char(b); inc(i, 3) + end + else + begin + p:= p + l[i]; + inc(i) end; end; @@ -527,6 +532,11 @@ l:= copy(l, i + 1, length(l) - i); if l <> 'default' then begin + if (length(l) = 2) and (l[1] = '\') then + l:= l[1] + '' + else if (l[1] = '"') and (l[length(l)] = '"') then + l:= copy(l, 2, length(l) - 2); + p:= cmd + ' ' + l + ' ' + p; ParseCommand(p, true) end @@ -534,7 +544,7 @@ end; pfsClose(f) - end + end else AddFileLog('[BINDS] file not found'); end; @@ -564,7 +574,7 @@ if b = 0 then OutError(errmsgUnknownVariable + ' "' + id + '"', false) else - begin + begin // add bind: first check if this cmd is already bound, and remove old bind i:= cKbdMaxIndex; repeat