hedgewars/uLocale.pas
author smaxx
Wed, 04 Aug 2010 17:35:45 +0200
changeset 3724 b8678667e7dc
parent 3717 d88719b0f0dc
child 3774 af0e68ca273e
permissions -rw-r--r--
Engine: * Added Lua's table module
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
925
c20156328529 Implement whip weapon
unc0rr
parents: 924
diff changeset
     3
 * Copyright (c) 2006-2008 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
3080
b7fa8ad60e3b Engine:
smxx
parents: 3066
diff changeset
    23
type TAmmoStrId = (sidNothing, sidGrenade, sidClusterBomb, sidBazooka, sidBee, sidShotgun,
2948
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2908
diff changeset
    24
            sidPickHammer, sidSkip, sidRope, sidMine, sidDEagle,
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2908
diff changeset
    25
            sidDynamite, sidBaseballBat, sidFirePunch, sidSeconds,
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2908
diff changeset
    26
            sidParachute, sidAirAttack, sidMineStrike, sidBlowTorch,
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2908
diff changeset
    27
            sidGirder, sidTeleport, sidSwitch, sidMortar, sidWhip,
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2908
diff changeset
    28
            sidKamikaze, sidCake, sidSeduction, sidWatermelon,
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2908
diff changeset
    29
            sidHellishBomb, sidDrill, sidBallgun, sidNapalm, sidRCPlane,
2376
ece7b87f1334 Strip trailing spaces
nemo
parents: 2357
diff changeset
    30
            sidLowGravity, sidExtraDamage, sidInvulnerable, sidExtraTime,
3350
5cd02aafc612 Engine:
smxx
parents: 3342
diff changeset
    31
            sidLaserSight, sidVampiric, sidSniperRifle, sidJetpack,
3710
411f5c2b5292 Engine:
smaxx
parents: 3476
diff changeset
    32
            sidMolotov, sidBirdy, sidPortalGun, sidPiano, sidGasBomb, sidSineGun, sidFlamethrower,
3717
d88719b0f0dc Engine:
smaxx
parents: 3710
diff changeset
    33
            sidSMine, sidHammer);
285
cdab49768c83 Mine Strike weapon
unc0rr
parents: 281
diff changeset
    34
2948
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2908
diff changeset
    35
    TMsgStrId = (sidStartFight, sidDraw, sidWinner, sidVolume, sidPaused,
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2908
diff changeset
    36
            sidConfirm, sidSuddenDeath, sidRemaining, sidFuel, sidSync,
3331
8e05feb871c3 Engine:
smxx
parents: 3310
diff changeset
    37
            sidNoEndTurn, sidNotYetAvailable, sidRoundSD, sidRoundsSD);
2376
ece7b87f1334 Strip trailing spaces
nemo
parents: 2357
diff changeset
    38
2948
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2908
diff changeset
    39
    TEventId = (eidDied, eidDrowned, eidRoundStart, eidRoundWin, eidRoundDraw,
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2908
diff changeset
    40
            eidNewHealthPack, eidNewAmmoPack, eidNewUtilityPack, eidTurnSkipped, eidHurtSelf,
3310
e6e9b811d32f Engine:
smxx
parents: 3080
diff changeset
    41
            eidHomerun, eidGone);
285
cdab49768c83 Mine Strike weapon
unc0rr
parents: 281
diff changeset
    42
2948
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2908
diff changeset
    43
    TGoalStrId = (gidCaption, gidSubCaption, gidForts, gidLowGravity, gidInvulnerable,
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2908
diff changeset
    44
            gidVampiric, gidKarma, gidKing, gidPlaceHog, gidArtillery,
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2908
diff changeset
    45
            gidSolidLand, gidSharedAmmo, gidMineTimer, gidNoMineTimer, gidRandomMineTimer,
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2908
diff changeset
    46
            gidDamageModifier);
2863
9eb53b1f1842 Engine:
smxx
parents: 2747
diff changeset
    47
2142
48ed98cfd119 Make code suck less
unc0rr
parents: 2140
diff changeset
    48
const MAX_EVENT_STRINGS = 100;
2905
f3c79f7193a9 Engine:
smxx
parents: 2904
diff changeset
    49
var trammo: array[TAmmoStrId] of ansistring;
f3c79f7193a9 Engine:
smxx
parents: 2904
diff changeset
    50
    trammoc: array[TAmmoStrId] of ansistring;
f3c79f7193a9 Engine:
smxx
parents: 2904
diff changeset
    51
    trammod: array[TAmmoStrId] of ansistring;
f3c79f7193a9 Engine:
smxx
parents: 2904
diff changeset
    52
    trmsg: array[TMsgStrId] of ansistring;
f3c79f7193a9 Engine:
smxx
parents: 2904
diff changeset
    53
    trgoal: array[TGoalStrId] of ansistring;
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
    54
2905
f3c79f7193a9 Engine:
smxx
parents: 2904
diff changeset
    55
procedure LoadLocale(FileName: shortstring);
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
    56
function Format(fmt: shortstring; var arg: shortstring): shortstring;
2905
f3c79f7193a9 Engine:
smxx
parents: 2904
diff changeset
    57
function Format(fmt: ansistring; var arg: ansistring): ansistring;
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
    58
2905
f3c79f7193a9 Engine:
smxx
parents: 2904
diff changeset
    59
function GetEventString(e: TEventId): ansistring;
2140
75e5c4fcae2a Death messages thanks to Smaxx
nemo
parents: 2039
diff changeset
    60
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
    61
implementation
3407
dcc129c4352e Engine:
smxx
parents: 3384
diff changeset
    62
uses uMisc, uRandom;
2142
48ed98cfd119 Make code suck less
unc0rr
parents: 2140
diff changeset
    63
2948
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2908
diff changeset
    64
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
    65
    trevt_n: array[TEventId] of integer;
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
    66
2905
f3c79f7193a9 Engine:
smxx
parents: 2904
diff changeset
    67
procedure LoadLocale(FileName: shortstring);
2999
30c4d62cd0c3 Engine:
smxx
parents: 2948
diff changeset
    68
var s: ansistring;
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
    69
    f: textfile;
371
731ad6d27bd1 integer -> LongInt
unc0rr
parents: 351
diff changeset
    70
    a, b, c: LongInt;
2948
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2908
diff changeset
    71
    first: array[TEventId] of boolean;
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2908
diff changeset
    72
    e: TEventId;
2722
d891285e500f IOResult is a special variable
nemo
parents: 2721
diff changeset
    73
    loaded: boolean;
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
    74
begin
2722
d891285e500f IOResult is a special variable
nemo
parents: 2721
diff changeset
    75
loaded:= false;
2357
babe1a55e284 Add an empty weapon to avoid selection of weapons which aren't yet ready. Might all be useful to switch to amNothing in certain situations, like after using up all ropes, instead of bazooka.
nemo
parents: 2185
diff changeset
    76
trammo[sidNothing]:= ' ';
2144
c76a2f7bd452 - Fix some ugly code
unc0rr
parents: 2143
diff changeset
    77
for e:= Low(TEventId) to High(TEventId) do first[e]:= true;
2140
75e5c4fcae2a Death messages thanks to Smaxx
nemo
parents: 2039
diff changeset
    78
2716
b9ca1bfca24f complete the replacement of init/free wrappers for every unit
koda
parents: 2693
diff changeset
    79
{$I-} // iochecks off
2747
7889a3a9724f Server:
smxx
parents: 2722
diff changeset
    80
Assign(f, FileName);
2716
b9ca1bfca24f complete the replacement of init/free wrappers for every unit
koda
parents: 2693
diff changeset
    81
filemode:= 0; // readonly
2747
7889a3a9724f Server:
smxx
parents: 2722
diff changeset
    82
Reset(f);
2722
d891285e500f IOResult is a special variable
nemo
parents: 2721
diff changeset
    83
if IOResult = 0 then loaded:= true;
d891285e500f IOResult is a special variable
nemo
parents: 2721
diff changeset
    84
TryDo(loaded, 'Cannot load locale "' + FileName + '"', false);
d891285e500f IOResult is a special variable
nemo
parents: 2721
diff changeset
    85
if loaded then
d891285e500f IOResult is a special variable
nemo
parents: 2721
diff changeset
    86
   begin
d891285e500f IOResult is a special variable
nemo
parents: 2721
diff changeset
    87
   while not eof(f) do
d891285e500f IOResult is a special variable
nemo
parents: 2721
diff changeset
    88
       begin
d891285e500f IOResult is a special variable
nemo
parents: 2721
diff changeset
    89
       readln(f, s);
d891285e500f IOResult is a special variable
nemo
parents: 2721
diff changeset
    90
       if Length(s) = 0 then continue;
d891285e500f IOResult is a special variable
nemo
parents: 2721
diff changeset
    91
       if not (s[1] in ['0'..'9']) then continue;
d891285e500f IOResult is a special variable
nemo
parents: 2721
diff changeset
    92
       TryDo(Length(s) > 6, 'Load locale: empty string', true);
d891285e500f IOResult is a special variable
nemo
parents: 2721
diff changeset
    93
       val(s[1]+s[2], a, c);
d891285e500f IOResult is a special variable
nemo
parents: 2721
diff changeset
    94
       TryDo(c = 0, 'Load locale: numbers should be two-digit: ' + s, true);
d891285e500f IOResult is a special variable
nemo
parents: 2721
diff changeset
    95
       TryDo(s[3] = ':', 'Load locale: ":" expected', true);
d891285e500f IOResult is a special variable
nemo
parents: 2721
diff changeset
    96
       val(s[4]+s[5], b, c);
d891285e500f IOResult is a special variable
nemo
parents: 2721
diff changeset
    97
       TryDo(c = 0, 'Load locale: numbers should be two-digit' + s, true);
d891285e500f IOResult is a special variable
nemo
parents: 2721
diff changeset
    98
       TryDo(s[6] = '=', 'Load locale: "=" expected', true);
d891285e500f IOResult is a special variable
nemo
parents: 2721
diff changeset
    99
       Delete(s, 1, 6);
d891285e500f IOResult is a special variable
nemo
parents: 2721
diff changeset
   100
       case a of
d891285e500f IOResult is a special variable
nemo
parents: 2721
diff changeset
   101
           0: if (b >=0) and (b <= ord(High(TAmmoStrId))) then trammo[TAmmoStrId(b+1)]:= s;
d891285e500f IOResult is a special variable
nemo
parents: 2721
diff changeset
   102
           1: if (b >=0) and (b <= ord(High(TMsgStrId))) then trmsg[TMsgStrId(b)]:= s;
d891285e500f IOResult is a special variable
nemo
parents: 2721
diff changeset
   103
           2: if (b >=0) and (b <= ord(High(TEventId))) then begin
d891285e500f IOResult is a special variable
nemo
parents: 2721
diff changeset
   104
               TryDo(trevt_n[TEventId(b)] < MAX_EVENT_STRINGS, 'Too many event strings in ' + inttostr(a) + ':' + inttostr(b), false);
d891285e500f IOResult is a special variable
nemo
parents: 2721
diff changeset
   105
               if first[TEventId(b)] then
d891285e500f IOResult is a special variable
nemo
parents: 2721
diff changeset
   106
                   begin
d891285e500f IOResult is a special variable
nemo
parents: 2721
diff changeset
   107
                   trevt_n[TEventId(b)]:= 0;
d891285e500f IOResult is a special variable
nemo
parents: 2721
diff changeset
   108
                   first[TEventId(b)]:= false;
d891285e500f IOResult is a special variable
nemo
parents: 2721
diff changeset
   109
                   end;
d891285e500f IOResult is a special variable
nemo
parents: 2721
diff changeset
   110
               trevt[TEventId(b)][trevt_n[TEventId(b)]]:= s;
d891285e500f IOResult is a special variable
nemo
parents: 2721
diff changeset
   111
               inc(trevt_n[TEventId(b)]);
d891285e500f IOResult is a special variable
nemo
parents: 2721
diff changeset
   112
               end;
2747
7889a3a9724f Server:
smxx
parents: 2722
diff changeset
   113
           3: if (b >=0) and (b <= ord(High(TAmmoStrId))) then trammoc[TAmmoStrId(b+1)]:= s;
7889a3a9724f Server:
smxx
parents: 2722
diff changeset
   114
           4: if (b >=0) and (b <= ord(High(TAmmoStrId))) then trammod[TAmmoStrId(b+1)]:= s;
2863
9eb53b1f1842 Engine:
smxx
parents: 2747
diff changeset
   115
           5: if (b >=0) and (b <= ord(High(TGoalStrId))) then trgoal[TGoalStrId(b)]:= s;
2722
d891285e500f IOResult is a special variable
nemo
parents: 2721
diff changeset
   116
           end;
d891285e500f IOResult is a special variable
nemo
parents: 2721
diff changeset
   117
       end;
d891285e500f IOResult is a special variable
nemo
parents: 2721
diff changeset
   118
   Close(f)
d891285e500f IOResult is a special variable
nemo
parents: 2721
diff changeset
   119
   end;
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   120
{$I+}
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   121
end;
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   122
2905
f3c79f7193a9 Engine:
smxx
parents: 2904
diff changeset
   123
function GetEventString(e: TEventId): ansistring;
2140
75e5c4fcae2a Death messages thanks to Smaxx
nemo
parents: 2039
diff changeset
   124
begin
2948
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2908
diff changeset
   125
    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
   126
        GetEventString:= '*missing translation*'
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2908
diff changeset
   127
    else
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2908
diff changeset
   128
        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
   129
end;
75e5c4fcae2a Death messages thanks to Smaxx
nemo
parents: 2039
diff changeset
   130
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   131
function Format(fmt: shortstring; var arg: shortstring): shortstring;
371
731ad6d27bd1 integer -> LongInt
unc0rr
parents: 351
diff changeset
   132
var i: LongInt;
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   133
begin
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   134
i:= Pos('%1', fmt);
351
29bc9c36ad5f Fixed-point arithmetics in engine.
unc0rr
parents: 302
diff changeset
   135
if i = 0 then Format:= fmt
29bc9c36ad5f Fixed-point arithmetics in engine.
unc0rr
parents: 302
diff changeset
   136
         else 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
   137
end;
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   138
2905
f3c79f7193a9 Engine:
smxx
parents: 2904
diff changeset
   139
function Format(fmt: ansistring; var arg: ansistring): ansistring;
f3c79f7193a9 Engine:
smxx
parents: 2904
diff changeset
   140
var i: LongInt;
f3c79f7193a9 Engine:
smxx
parents: 2904
diff changeset
   141
begin
f3c79f7193a9 Engine:
smxx
parents: 2904
diff changeset
   142
i:= Pos('%1', fmt);
f3c79f7193a9 Engine:
smxx
parents: 2904
diff changeset
   143
if i = 0 then Format:= fmt
f3c79f7193a9 Engine:
smxx
parents: 2904
diff changeset
   144
         else Format:= copy(fmt, 1, i - 1) + arg + Format(copy(fmt, i + 2, Length(fmt) - i - 1), arg)
f3c79f7193a9 Engine:
smxx
parents: 2904
diff changeset
   145
end;
f3c79f7193a9 Engine:
smxx
parents: 2904
diff changeset
   146
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   147
end.