hedgewars/uLocale.pas
author unc0rr
Wed, 25 Jul 2012 16:24:30 +0400
changeset 7433 c7fff3e61d49
parent 7069 bcf9d8e64e92
child 8026 4a4f21070479
child 8028 dc30104660d3
permissions -rw-r--r--
- Implement AI land marks which only used to tracks visited areas on the map for now. Significantly reduces wasting of cpu time by AI checking same place several times (10x or even more in rare cases) - More branching in walk algorythm which allows for better coverage of reachable places. Sometimes makes AI perform ridiculous jumping just to make a tiny step. - Small fixes/adjustments
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
     1
(*
1066
1f1b3686a2b0 Update copyright headers a bit
unc0rr
parents: 1063
diff changeset
     2
 * Hedgewars, a free turn based strategy game
6700
e04da46ee43c the most important commit of the year
koda
parents: 6674
diff changeset
     3
 * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
     4
 *
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
     5
 * This program is free software; you can redistribute it and/or modify
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
     6
 * it under the terms of the GNU General Public License as published by
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
     7
 * the Free Software Foundation; version 2 of the License
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
     8
 *
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
     9
 * This program is distributed in the hope that it will be useful,
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
    10
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
    11
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
    12
 * GNU General Public License for more details.
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
    13
 *
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
    14
 * You should have received a copy of the GNU General Public License
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
    15
 * along with this program; if not, write to the Free Software
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
    16
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
    17
 *)
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
    18
2630
079ef82eac75 revamped file access and debug display
koda
parents: 2457
diff changeset
    19
{$INCLUDE "options.inc"}
079ef82eac75 revamped file access and debug display
koda
parents: 2457
diff changeset
    20
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
    21
unit uLocale;
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
    22
interface
4361
64ea345ab655 Move variables from uConsts to uVariables
unc0rr
parents: 4246
diff changeset
    23
uses uTypes;
2863
9eb53b1f1842 Engine:
smxx
parents: 2747
diff changeset
    24
2142
48ed98cfd119 Make code suck less
unc0rr
parents: 2140
diff changeset
    25
const MAX_EVENT_STRINGS = 100;
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
    26
2905
f3c79f7193a9 Engine:
smxx
parents: 2904
diff changeset
    27
procedure LoadLocale(FileName: shortstring);
3926
668b71f31e51 use dynamic data from engine instead of using hardcoded values
koda
parents: 3774
diff changeset
    28
function  Format(fmt: shortstring; var arg: shortstring): shortstring;
7069
bcf9d8e64e92 pas2c stuff again
unc0rr
parents: 7049
diff changeset
    29
function  FormatA(fmt: ansistring; var arg: ansistring): ansistring;
3926
668b71f31e51 use dynamic data from engine instead of using hardcoded values
koda
parents: 3774
diff changeset
    30
function  GetEventString(e: TEventId): ansistring;
2140
75e5c4fcae2a Death messages thanks to Smaxx
nemo
parents: 2039
diff changeset
    31
7048
0a4c88935902 the ios port runs again, although with a few things to sort out
koda
parents: 6700
diff changeset
    32
{$IFDEF HWLIBRARY}
0a4c88935902 the ios port runs again, although with a few things to sort out
koda
parents: 6700
diff changeset
    33
procedure LoadLocaleWrapper(str: pchar); cdecl; export;
0a4c88935902 the ios port runs again, although with a few things to sort out
koda
parents: 6700
diff changeset
    34
{$ENDIF}
0a4c88935902 the ios port runs again, although with a few things to sort out
koda
parents: 6700
diff changeset
    35
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
    36
implementation
7049
35d762458d66 minor changes for warnings and a variables scope
koda
parents: 7048
diff changeset
    37
uses uRandom, uUtils, uVariables, uDebug;
2142
48ed98cfd119 Make code suck less
unc0rr
parents: 2140
diff changeset
    38
2948
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2908
diff changeset
    39
var trevt: array[TEventId] of array [0..Pred(MAX_EVENT_STRINGS)] of ansistring;
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2908
diff changeset
    40
    trevt_n: array[TEventId] of integer;
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
    41
2905
f3c79f7193a9 Engine:
smxx
parents: 2904
diff changeset
    42
procedure LoadLocale(FileName: shortstring);
2999
30c4d62cd0c3 Engine:
smxx
parents: 2948
diff changeset
    43
var s: ansistring;
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
    44
    f: textfile;
371
731ad6d27bd1 integer -> LongInt
unc0rr
parents: 351
diff changeset
    45
    a, b, c: LongInt;
2948
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2908
diff changeset
    46
    first: array[TEventId] of boolean;
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2908
diff changeset
    47
    e: TEventId;
2722
d891285e500f IOResult is a special variable
nemo
parents: 2721
diff changeset
    48
    loaded: boolean;
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
    49
begin
2722
d891285e500f IOResult is a special variable
nemo
parents: 2721
diff changeset
    50
loaded:= false;
6580
6155187bf599 A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents: 6528
diff changeset
    51
for e:= Low(TEventId) to High(TEventId) do
6155187bf599 A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents: 6528
diff changeset
    52
    first[e]:= true;
2140
75e5c4fcae2a Death messages thanks to Smaxx
nemo
parents: 2039
diff changeset
    53
2716
b9ca1bfca24f complete the replacement of init/free wrappers for every unit
koda
parents: 2693
diff changeset
    54
{$I-} // iochecks off
2747
7889a3a9724f Server:
smxx
parents: 2722
diff changeset
    55
Assign(f, FileName);
2716
b9ca1bfca24f complete the replacement of init/free wrappers for every unit
koda
parents: 2693
diff changeset
    56
filemode:= 0; // readonly
2747
7889a3a9724f Server:
smxx
parents: 2722
diff changeset
    57
Reset(f);
6580
6155187bf599 A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents: 6528
diff changeset
    58
if IOResult = 0 then
6155187bf599 A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents: 6528
diff changeset
    59
    loaded:= true;
2722
d891285e500f IOResult is a special variable
nemo
parents: 2721
diff changeset
    60
TryDo(loaded, 'Cannot load locale "' + FileName + '"', false);
d891285e500f IOResult is a special variable
nemo
parents: 2721
diff changeset
    61
if loaded then
6580
6155187bf599 A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents: 6528
diff changeset
    62
    begin
6155187bf599 A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents: 6528
diff changeset
    63
    while not eof(f) do
6155187bf599 A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents: 6528
diff changeset
    64
        begin
6155187bf599 A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents: 6528
diff changeset
    65
        readln(f, s);
6155187bf599 A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents: 6528
diff changeset
    66
        if Length(s) = 0 then
6155187bf599 A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents: 6528
diff changeset
    67
            continue;
6155187bf599 A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents: 6528
diff changeset
    68
        if (s[1] < '0') or (s[1] > '9') then
6155187bf599 A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents: 6528
diff changeset
    69
            continue;
6155187bf599 A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents: 6528
diff changeset
    70
        TryDo(Length(s) > 6, 'Load locale: empty string', true);
6155187bf599 A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents: 6528
diff changeset
    71
        val(s[1]+s[2], a, c);
6155187bf599 A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents: 6528
diff changeset
    72
        TryDo(c = 0, 'Load locale: numbers should be two-digit: ' + s, true);
6155187bf599 A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents: 6528
diff changeset
    73
        TryDo(s[3] = ':', 'Load locale: ":" expected', true);
6155187bf599 A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents: 6528
diff changeset
    74
        val(s[4]+s[5], b, c);
6155187bf599 A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents: 6528
diff changeset
    75
        TryDo(c = 0, 'Load locale: numbers should be two-digit' + s, true);
6155187bf599 A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents: 6528
diff changeset
    76
        TryDo(s[6] = '=', 'Load locale: "=" expected', true);
6155187bf599 A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents: 6528
diff changeset
    77
        Delete(s, 1, 6);
6155187bf599 A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents: 6528
diff changeset
    78
        case a of
6155187bf599 A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents: 6528
diff changeset
    79
            0: if (b >=0) and (b <= ord(High(TAmmoStrId))) then
6155187bf599 A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents: 6528
diff changeset
    80
                trammo[TAmmoStrId(b)]:= s;
6155187bf599 A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents: 6528
diff changeset
    81
            1: if (b >=0) and (b <= ord(High(TMsgStrId))) then
6155187bf599 A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents: 6528
diff changeset
    82
                trmsg[TMsgStrId(b)]:= s;
6155187bf599 A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents: 6528
diff changeset
    83
            2: if (b >=0) and (b <= ord(High(TEventId))) then
6155187bf599 A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents: 6528
diff changeset
    84
                begin
6155187bf599 A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents: 6528
diff changeset
    85
                TryDo(trevt_n[TEventId(b)] < MAX_EVENT_STRINGS, 'Too many event strings in ' + IntToStr(a) + ':' + IntToStr(b), false);
6155187bf599 A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents: 6528
diff changeset
    86
                if first[TEventId(b)] then
6155187bf599 A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents: 6528
diff changeset
    87
                    begin
6155187bf599 A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents: 6528
diff changeset
    88
                    trevt_n[TEventId(b)]:= 0;
6155187bf599 A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents: 6528
diff changeset
    89
                    first[TEventId(b)]:= false;
6155187bf599 A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents: 6528
diff changeset
    90
                    end;
6155187bf599 A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents: 6528
diff changeset
    91
                trevt[TEventId(b)][trevt_n[TEventId(b)]]:= s;
6155187bf599 A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents: 6528
diff changeset
    92
                inc(trevt_n[TEventId(b)]);
6155187bf599 A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents: 6528
diff changeset
    93
                end;
6155187bf599 A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents: 6528
diff changeset
    94
            3: if (b >=0) and (b <= ord(High(TAmmoStrId))) then
6155187bf599 A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents: 6528
diff changeset
    95
                trammoc[TAmmoStrId(b)]:= s;
6155187bf599 A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents: 6528
diff changeset
    96
            4: if (b >=0) and (b <= ord(High(TAmmoStrId))) then
6155187bf599 A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents: 6528
diff changeset
    97
                trammod[TAmmoStrId(b)]:= s;
6155187bf599 A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents: 6528
diff changeset
    98
            5: if (b >=0) and (b <= ord(High(TGoalStrId))) then
6155187bf599 A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents: 6528
diff changeset
    99
                trgoal[TGoalStrId(b)]:= s;
2722
d891285e500f IOResult is a special variable
nemo
parents: 2721
diff changeset
   100
           end;
d891285e500f IOResult is a special variable
nemo
parents: 2721
diff changeset
   101
       end;
6528
fb2918089225 added 'loaded locale' message, other minor things
koda
parents: 6453
diff changeset
   102
   Close(f);
2722
d891285e500f IOResult is a special variable
nemo
parents: 2721
diff changeset
   103
   end;
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   104
{$I+}
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   105
end;
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   106
2905
f3c79f7193a9 Engine:
smxx
parents: 2904
diff changeset
   107
function GetEventString(e: TEventId): ansistring;
2140
75e5c4fcae2a Death messages thanks to Smaxx
nemo
parents: 2039
diff changeset
   108
begin
2948
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2908
diff changeset
   109
    if trevt_n[e] = 0 then // no messages for this event type?
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2908
diff changeset
   110
        GetEventString:= '*missing translation*'
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2908
diff changeset
   111
    else
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2908
diff changeset
   112
        GetEventString:= trevt[e][GetRandom(trevt_n[e])]; // Pick a random message and return it
2140
75e5c4fcae2a Death messages thanks to Smaxx
nemo
parents: 2039
diff changeset
   113
end;
75e5c4fcae2a Death messages thanks to Smaxx
nemo
parents: 2039
diff changeset
   114
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   115
function Format(fmt: shortstring; var arg: shortstring): shortstring;
371
731ad6d27bd1 integer -> LongInt
unc0rr
parents: 351
diff changeset
   116
var i: LongInt;
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   117
begin
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   118
i:= Pos('%1', fmt);
6580
6155187bf599 A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents: 6528
diff changeset
   119
if i = 0 then
6155187bf599 A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents: 6528
diff changeset
   120
    Format:= fmt
6155187bf599 A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents: 6528
diff changeset
   121
else
6155187bf599 A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents: 6528
diff changeset
   122
    Format:= copy(fmt, 1, i - 1) + arg + Format(copy(fmt, i + 2, Length(fmt) - i - 1), arg)
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   123
end;
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   124
7069
bcf9d8e64e92 pas2c stuff again
unc0rr
parents: 7049
diff changeset
   125
function FormatA(fmt: ansistring; var arg: ansistring): ansistring;
2905
f3c79f7193a9 Engine:
smxx
parents: 2904
diff changeset
   126
var i: LongInt;
f3c79f7193a9 Engine:
smxx
parents: 2904
diff changeset
   127
begin
f3c79f7193a9 Engine:
smxx
parents: 2904
diff changeset
   128
i:= Pos('%1', fmt);
6580
6155187bf599 A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents: 6528
diff changeset
   129
if i = 0 then
7069
bcf9d8e64e92 pas2c stuff again
unc0rr
parents: 7049
diff changeset
   130
    FormatA:= fmt
6580
6155187bf599 A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents: 6528
diff changeset
   131
else
7069
bcf9d8e64e92 pas2c stuff again
unc0rr
parents: 7049
diff changeset
   132
    FormatA:= copy(fmt, 1, i - 1) + arg + FormatA(copy(fmt, i + 2, Length(fmt) - i - 1), arg)
2905
f3c79f7193a9 Engine:
smxx
parents: 2904
diff changeset
   133
end;
f3c79f7193a9 Engine:
smxx
parents: 2904
diff changeset
   134
7048
0a4c88935902 the ios port runs again, although with a few things to sort out
koda
parents: 6700
diff changeset
   135
{$IFDEF HWLIBRARY}
3926
668b71f31e51 use dynamic data from engine instead of using hardcoded values
koda
parents: 3774
diff changeset
   136
procedure LoadLocaleWrapper(str: pchar); cdecl; export;
668b71f31e51 use dynamic data from engine instead of using hardcoded values
koda
parents: 3774
diff changeset
   137
begin
668b71f31e51 use dynamic data from engine instead of using hardcoded values
koda
parents: 3774
diff changeset
   138
    LoadLocale(Strpas(str));
668b71f31e51 use dynamic data from engine instead of using hardcoded values
koda
parents: 3774
diff changeset
   139
end;
7048
0a4c88935902 the ios port runs again, although with a few things to sort out
koda
parents: 6700
diff changeset
   140
{$ENDIF}
3926
668b71f31e51 use dynamic data from engine instead of using hardcoded values
koda
parents: 3774
diff changeset
   141
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   142
end.