hedgewars/uLocale.pas
author nemo
Thu, 28 Jan 2010 20:36:24 +0000
changeset 2722 d891285e500f
parent 2721 87067dcc208b
child 2747 7889a3a9724f
permissions -rw-r--r--
IOResult is a special variable
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
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
    23
type TAmmoStrId = (sidNothing, sidGrenade, sidClusterBomb, sidBazooka, sidUFO, sidShotgun,
1263
24677a82531d Add Hellish bomb weapon
unc0rr
parents: 1261
diff changeset
    24
			sidPickHammer, sidSkip, sidRope, sidMine, sidDEagle,
24677a82531d Add Hellish bomb weapon
unc0rr
parents: 1261
diff changeset
    25
			sidDynamite, sidBaseballBat, sidFirePunch, sidSeconds,
24677a82531d Add Hellish bomb weapon
unc0rr
parents: 1261
diff changeset
    26
			sidParachute, sidAirAttack, sidMineStrike, sidBlowTorch,
24677a82531d Add Hellish bomb weapon
unc0rr
parents: 1261
diff changeset
    27
			sidGirder, sidTeleport, sidSwitch, sidMortar, sidWhip,
24677a82531d Add Hellish bomb weapon
unc0rr
parents: 1261
diff changeset
    28
			sidKamikaze, sidCake, sidSeduction, sidWatermelon,
2376
ece7b87f1334 Strip trailing spaces
nemo
parents: 2357
diff changeset
    29
			sidHellishBomb, sidDrill, sidBallgun, sidNapalm, sidRCPlane,
ece7b87f1334 Strip trailing spaces
nemo
parents: 2357
diff changeset
    30
            sidLowGravity, sidExtraDamage, sidInvulnerable, sidExtraTime,
2457
ecf0c7e7995b Initial molotov cocktail. Still needs graphics, tweaking of fire behaviour. Also changed probabilities for default weapon sets
nemo
parents: 2428
diff changeset
    31
            sidLaserSight, sidVampiric, sidSniperRifle, sidJetpack, sidMolotov);
285
cdab49768c83 Mine Strike weapon
unc0rr
parents: 281
diff changeset
    32
1263
24677a82531d Add Hellish bomb weapon
unc0rr
parents: 1261
diff changeset
    33
	TMsgStrId = (sidStartFight, sidDraw, sidWinner, sidVolume, sidPaused,
2397
2ca4ca6b4bab - Patch for "Syncronizing" message by Smaxx + some tweaks by me
unc0rr
parents: 2376
diff changeset
    34
			sidConfirm, sidSuddenDeath, sidRemaining, sidFuel, sidSync);
2376
ece7b87f1334 Strip trailing spaces
nemo
parents: 2357
diff changeset
    35
2143
ad05f6b2d1c0 New baseball bat sound, steam when fire lands on water (needs new hiss sound), bubbles when hedgehog drowns, more messages on
nemo
parents: 2142
diff changeset
    36
	TEventId = (eidDied, eidDrowned, eidRoundStart, eidRoundWin, eidRoundDraw,
2428
6800f8aa0184 Huge Smaxx patch with some fixes by me:
unc0rr
parents: 2397
diff changeset
    37
			eidNewHealthPack, eidNewAmmoPack, eidNewUtilityPack, eidTurnSkipped, eidHurtSelf,
6800f8aa0184 Huge Smaxx patch with some fixes by me:
unc0rr
parents: 2397
diff changeset
    38
			eidHomerun);
285
cdab49768c83 Mine Strike weapon
unc0rr
parents: 281
diff changeset
    39
2142
48ed98cfd119 Make code suck less
unc0rr
parents: 2140
diff changeset
    40
const MAX_EVENT_STRINGS = 100;
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
    41
var trammo: array[TAmmoStrId] of string;
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
    42
    trmsg: array[TMsgStrId] of string;
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
    43
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
    44
procedure LoadLocale(FileName: string);
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
    45
function Format(fmt: shortstring; var arg: shortstring): shortstring;
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
    46
2140
75e5c4fcae2a Death messages thanks to Smaxx
nemo
parents: 2039
diff changeset
    47
function GetEventString(e: TEventId): string;
75e5c4fcae2a Death messages thanks to Smaxx
nemo
parents: 2039
diff changeset
    48
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
    49
implementation
2693
3207e0eacd43 GameSetup is now a class, use of NSThread instead of pthreads, game doesn't quit after first execution (but crashes aftewards - the irony)
koda
parents: 2630
diff changeset
    50
uses uMisc, uRandom, uConsole;
2142
48ed98cfd119 Make code suck less
unc0rr
parents: 2140
diff changeset
    51
48ed98cfd119 Make code suck less
unc0rr
parents: 2140
diff changeset
    52
var	trevt: array[TEventId] of array [0..Pred(MAX_EVENT_STRINGS)] of string;
48ed98cfd119 Make code suck less
unc0rr
parents: 2140
diff changeset
    53
	trevt_n: array[TEventId] of integer;
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
    54
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
    55
procedure LoadLocale(FileName: string);
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
    56
var s: shortstring;
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
    57
    f: textfile;
371
731ad6d27bd1 integer -> LongInt
unc0rr
parents: 351
diff changeset
    58
    a, b, c: LongInt;
2143
ad05f6b2d1c0 New baseball bat sound, steam when fire lands on water (needs new hiss sound), bubbles when hedgehog drowns, more messages on
nemo
parents: 2142
diff changeset
    59
	first: array[TEventId] of boolean;
2144
c76a2f7bd452 - Fix some ugly code
unc0rr
parents: 2143
diff changeset
    60
	e: TEventId;
2722
d891285e500f IOResult is a special variable
nemo
parents: 2721
diff changeset
    61
    loaded: boolean;
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
    62
begin
2722
d891285e500f IOResult is a special variable
nemo
parents: 2721
diff changeset
    63
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
    64
trammo[sidNothing]:= ' ';
2144
c76a2f7bd452 - Fix some ugly code
unc0rr
parents: 2143
diff changeset
    65
for e:= Low(TEventId) to High(TEventId) do first[e]:= true;
2140
75e5c4fcae2a Death messages thanks to Smaxx
nemo
parents: 2039
diff changeset
    66
2716
b9ca1bfca24f complete the replacement of init/free wrappers for every unit
koda
parents: 2693
diff changeset
    67
{$I-} // iochecks off
b9ca1bfca24f complete the replacement of init/free wrappers for every unit
koda
parents: 2693
diff changeset
    68
filemode:= 0; // readonly
351
29bc9c36ad5f Fixed-point arithmetics in engine.
unc0rr
parents: 302
diff changeset
    69
Assign(f, FileName);
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
    70
reset(f);
2722
d891285e500f IOResult is a special variable
nemo
parents: 2721
diff changeset
    71
if IOResult = 0 then loaded:= true;
d891285e500f IOResult is a special variable
nemo
parents: 2721
diff changeset
    72
TryDo(loaded, 'Cannot load locale "' + FileName + '"', false);
d891285e500f IOResult is a special variable
nemo
parents: 2721
diff changeset
    73
if loaded then
d891285e500f IOResult is a special variable
nemo
parents: 2721
diff changeset
    74
   begin
d891285e500f IOResult is a special variable
nemo
parents: 2721
diff changeset
    75
   while not eof(f) do
d891285e500f IOResult is a special variable
nemo
parents: 2721
diff changeset
    76
       begin
d891285e500f IOResult is a special variable
nemo
parents: 2721
diff changeset
    77
       readln(f, s);
d891285e500f IOResult is a special variable
nemo
parents: 2721
diff changeset
    78
       if Length(s) = 0 then continue;
d891285e500f IOResult is a special variable
nemo
parents: 2721
diff changeset
    79
       if not (s[1] in ['0'..'9']) then continue;
d891285e500f IOResult is a special variable
nemo
parents: 2721
diff changeset
    80
       TryDo(Length(s) > 6, 'Load locale: empty string', true);
d891285e500f IOResult is a special variable
nemo
parents: 2721
diff changeset
    81
       val(s[1]+s[2], a, c);
d891285e500f IOResult is a special variable
nemo
parents: 2721
diff changeset
    82
       TryDo(c = 0, 'Load locale: numbers should be two-digit: ' + s, true);
d891285e500f IOResult is a special variable
nemo
parents: 2721
diff changeset
    83
       TryDo(s[3] = ':', 'Load locale: ":" expected', true);
d891285e500f IOResult is a special variable
nemo
parents: 2721
diff changeset
    84
       val(s[4]+s[5], b, c);
d891285e500f IOResult is a special variable
nemo
parents: 2721
diff changeset
    85
       TryDo(c = 0, 'Load locale: numbers should be two-digit' + s, true);
d891285e500f IOResult is a special variable
nemo
parents: 2721
diff changeset
    86
       TryDo(s[6] = '=', 'Load locale: "=" expected', true);
d891285e500f IOResult is a special variable
nemo
parents: 2721
diff changeset
    87
       Delete(s, 1, 6);
d891285e500f IOResult is a special variable
nemo
parents: 2721
diff changeset
    88
       case a of
d891285e500f IOResult is a special variable
nemo
parents: 2721
diff changeset
    89
           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
    90
           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
    91
           2: if (b >=0) and (b <= ord(High(TEventId))) then begin
d891285e500f IOResult is a special variable
nemo
parents: 2721
diff changeset
    92
               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
    93
               if first[TEventId(b)] then
d891285e500f IOResult is a special variable
nemo
parents: 2721
diff changeset
    94
                   begin
d891285e500f IOResult is a special variable
nemo
parents: 2721
diff changeset
    95
                   trevt_n[TEventId(b)]:= 0;
d891285e500f IOResult is a special variable
nemo
parents: 2721
diff changeset
    96
                   first[TEventId(b)]:= false;
d891285e500f IOResult is a special variable
nemo
parents: 2721
diff changeset
    97
                   end;
d891285e500f IOResult is a special variable
nemo
parents: 2721
diff changeset
    98
               trevt[TEventId(b)][trevt_n[TEventId(b)]]:= s;
d891285e500f IOResult is a special variable
nemo
parents: 2721
diff changeset
    99
               inc(trevt_n[TEventId(b)]);
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;
d891285e500f IOResult is a special variable
nemo
parents: 2721
diff changeset
   102
       end;
d891285e500f IOResult is a special variable
nemo
parents: 2721
diff changeset
   103
   Close(f)
d891285e500f IOResult is a special variable
nemo
parents: 2721
diff changeset
   104
   end;
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   105
{$I+}
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   106
end;
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   107
2140
75e5c4fcae2a Death messages thanks to Smaxx
nemo
parents: 2039
diff changeset
   108
function GetEventString(e: TEventId): string;
75e5c4fcae2a Death messages thanks to Smaxx
nemo
parents: 2039
diff changeset
   109
begin
75e5c4fcae2a Death messages thanks to Smaxx
nemo
parents: 2039
diff changeset
   110
	if trevt_n[e] = 0 then // no messages for this event type?
75e5c4fcae2a Death messages thanks to Smaxx
nemo
parents: 2039
diff changeset
   111
		GetEventString:= '*missing translation*'
75e5c4fcae2a Death messages thanks to Smaxx
nemo
parents: 2039
diff changeset
   112
	else
2142
48ed98cfd119 Make code suck less
unc0rr
parents: 2140
diff changeset
   113
		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
   114
end;
75e5c4fcae2a Death messages thanks to Smaxx
nemo
parents: 2039
diff changeset
   115
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   116
function Format(fmt: shortstring; var arg: shortstring): shortstring;
371
731ad6d27bd1 integer -> LongInt
unc0rr
parents: 351
diff changeset
   117
var i: LongInt;
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   118
begin
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   119
i:= Pos('%1', fmt);
351
29bc9c36ad5f Fixed-point arithmetics in engine.
unc0rr
parents: 302
diff changeset
   120
if i = 0 then Format:= fmt
29bc9c36ad5f Fixed-point arithmetics in engine.
unc0rr
parents: 302
diff changeset
   121
         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
   122
end;
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   123
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   124
end.