hedgewars/uLocale.pas
author unc0rr
Thu, 10 Sep 2009 15:35:34 +0000
changeset 2378 66fcb4d62a53
parent 2376 ece7b87f1334
child 2397 2ca4ca6b4bab
permissions -rw-r--r--
Fix water rendering issues
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
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
    19
unit uLocale;
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
    20
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
    21
type TAmmoStrId = (sidNothing, sidGrenade, sidClusterBomb, sidBazooka, sidUFO, sidShotgun,
1263
24677a82531d Add Hellish bomb weapon
unc0rr
parents: 1261
diff changeset
    22
			sidPickHammer, sidSkip, sidRope, sidMine, sidDEagle,
24677a82531d Add Hellish bomb weapon
unc0rr
parents: 1261
diff changeset
    23
			sidDynamite, sidBaseballBat, sidFirePunch, sidSeconds,
24677a82531d Add Hellish bomb weapon
unc0rr
parents: 1261
diff changeset
    24
			sidParachute, sidAirAttack, sidMineStrike, sidBlowTorch,
24677a82531d Add Hellish bomb weapon
unc0rr
parents: 1261
diff changeset
    25
			sidGirder, sidTeleport, sidSwitch, sidMortar, sidWhip,
24677a82531d Add Hellish bomb weapon
unc0rr
parents: 1261
diff changeset
    26
			sidKamikaze, sidCake, sidSeduction, sidWatermelon,
2376
ece7b87f1334 Strip trailing spaces
nemo
parents: 2357
diff changeset
    27
			sidHellishBomb, sidDrill, sidBallgun, sidNapalm, sidRCPlane,
ece7b87f1334 Strip trailing spaces
nemo
parents: 2357
diff changeset
    28
            sidLowGravity, sidExtraDamage, sidInvulnerable, sidExtraTime,
2177
c045698e044f Initial attempt at jetpack. Pluses, more like lunar lander (takes fall damage). Minuses, can't seem to cancel it or use alt weapon
nemo
parents: 2144
diff changeset
    29
            sidLaserSight, sidVampiric, sidSniperRifle, sidJetpack);
285
cdab49768c83 Mine Strike weapon
unc0rr
parents: 281
diff changeset
    30
1263
24677a82531d Add Hellish bomb weapon
unc0rr
parents: 1261
diff changeset
    31
	TMsgStrId = (sidStartFight, sidDraw, sidWinner, sidVolume, sidPaused,
2185
cf8f98e75bf9 Localise words "Fuel" and "Remaining" - add shot counter to deagle.
nemo
parents: 2177
diff changeset
    32
			sidConfirm, sidSuddenDeath, sidRemaining, sidFuel);
2376
ece7b87f1334 Strip trailing spaces
nemo
parents: 2357
diff changeset
    33
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
    34
	TEventId = (eidDied, eidDrowned, eidRoundStart, eidRoundWin, eidRoundDraw,
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
    35
			eidNewHealthPack, eidNewAmmoPack, eidNewUtilityPack, eidTurnSkipped, eidHurtSelf);
285
cdab49768c83 Mine Strike weapon
unc0rr
parents: 281
diff changeset
    36
2142
48ed98cfd119 Make code suck less
unc0rr
parents: 2140
diff changeset
    37
const MAX_EVENT_STRINGS = 100;
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
    38
var trammo: array[TAmmoStrId] of string;
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
    39
    trmsg: array[TMsgStrId] of string;
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
    40
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
    41
procedure LoadLocale(FileName: string);
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
    42
function Format(fmt: shortstring; var arg: shortstring): shortstring;
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
    43
2140
75e5c4fcae2a Death messages thanks to Smaxx
nemo
parents: 2039
diff changeset
    44
function GetEventString(e: TEventId): string;
75e5c4fcae2a Death messages thanks to Smaxx
nemo
parents: 2039
diff changeset
    45
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
    46
implementation
2142
48ed98cfd119 Make code suck less
unc0rr
parents: 2140
diff changeset
    47
uses uMisc, uRandom;
48ed98cfd119 Make code suck less
unc0rr
parents: 2140
diff changeset
    48
48ed98cfd119 Make code suck less
unc0rr
parents: 2140
diff changeset
    49
var	trevt: array[TEventId] of array [0..Pred(MAX_EVENT_STRINGS)] of string;
48ed98cfd119 Make code suck less
unc0rr
parents: 2140
diff changeset
    50
	trevt_n: array[TEventId] of integer;
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
    51
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
    52
procedure LoadLocale(FileName: string);
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
    53
var s: shortstring;
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
    54
    f: textfile;
371
731ad6d27bd1 integer -> LongInt
unc0rr
parents: 351
diff changeset
    55
    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
    56
	first: array[TEventId] of boolean;
2144
c76a2f7bd452 - Fix some ugly code
unc0rr
parents: 2143
diff changeset
    57
	e: TEventId;
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
    58
begin
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
    59
trammo[sidNothing]:= ' ';
2144
c76a2f7bd452 - Fix some ugly code
unc0rr
parents: 2143
diff changeset
    60
for e:= Low(TEventId) to High(TEventId) do first[e]:= true;
2140
75e5c4fcae2a Death messages thanks to Smaxx
nemo
parents: 2039
diff changeset
    61
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
    62
{$I-}
351
29bc9c36ad5f Fixed-point arithmetics in engine.
unc0rr
parents: 302
diff changeset
    63
Assign(f, FileName);
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
    64
reset(f);
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
    65
TryDo(IOResult = 0, 'Cannot load locale "' + FileName + '"', true);
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
    66
while not eof(f) do
1263
24677a82531d Add Hellish bomb weapon
unc0rr
parents: 1261
diff changeset
    67
	begin
24677a82531d Add Hellish bomb weapon
unc0rr
parents: 1261
diff changeset
    68
	readln(f, s);
24677a82531d Add Hellish bomb weapon
unc0rr
parents: 1261
diff changeset
    69
	if Length(s) = 0 then continue;
2039
3001445b4500 Try to prevent locale problems:
unc0rr
parents: 2023
diff changeset
    70
	if not (s[1] in ['0'..'9']) then continue;
1263
24677a82531d Add Hellish bomb weapon
unc0rr
parents: 1261
diff changeset
    71
	TryDo(Length(s) > 6, 'Load locale: empty string', true);
24677a82531d Add Hellish bomb weapon
unc0rr
parents: 1261
diff changeset
    72
	val(s[1]+s[2], a, c);
24677a82531d Add Hellish bomb weapon
unc0rr
parents: 1261
diff changeset
    73
	TryDo(c = 0, 'Load locale: numbers should be two-digit: ' + s, true);
24677a82531d Add Hellish bomb weapon
unc0rr
parents: 1261
diff changeset
    74
	TryDo(s[3] = ':', 'Load locale: ":" expected', true);
24677a82531d Add Hellish bomb weapon
unc0rr
parents: 1261
diff changeset
    75
	val(s[4]+s[5], b, c);
24677a82531d Add Hellish bomb weapon
unc0rr
parents: 1261
diff changeset
    76
	TryDo(c = 0, 'Load locale: numbers should be two-digit' + s, true);
24677a82531d Add Hellish bomb weapon
unc0rr
parents: 1261
diff changeset
    77
	TryDo(s[6] = '=', 'Load locale: "=" expected', true);
24677a82531d Add Hellish bomb weapon
unc0rr
parents: 1261
diff changeset
    78
	Delete(s, 1, 6);
24677a82531d Add Hellish bomb weapon
unc0rr
parents: 1261
diff changeset
    79
	case a of
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
    80
		0: if (b >=0) and (b <= ord(High(TAmmoStrId))) then trammo[TAmmoStrId(b+1)]:= s;
1263
24677a82531d Add Hellish bomb weapon
unc0rr
parents: 1261
diff changeset
    81
		1: if (b >=0) and (b <= ord(High(TMsgStrId))) then trmsg[TMsgStrId(b)]:= s;
2140
75e5c4fcae2a Death messages thanks to Smaxx
nemo
parents: 2039
diff changeset
    82
		2: if (b >=0) and (b <= ord(High(TEventId))) then begin
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
    83
			TryDo(trevt_n[TEventId(b)] < MAX_EVENT_STRINGS, 'Too many event strings in ' + inttostr(a) + ':' + inttostr(b), false);
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
    84
			if first[TEventId(b)] then
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
    85
				begin
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
    86
				trevt_n[TEventId(b)]:= 0;
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
    87
				first[TEventId(b)]:= false;
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
    88
				end;
2142
48ed98cfd119 Make code suck less
unc0rr
parents: 2140
diff changeset
    89
			trevt[TEventId(b)][trevt_n[TEventId(b)]]:= s;
2140
75e5c4fcae2a Death messages thanks to Smaxx
nemo
parents: 2039
diff changeset
    90
			inc(trevt_n[TEventId(b)]);
75e5c4fcae2a Death messages thanks to Smaxx
nemo
parents: 2039
diff changeset
    91
			end;
1263
24677a82531d Add Hellish bomb weapon
unc0rr
parents: 1261
diff changeset
    92
		end;
24677a82531d Add Hellish bomb weapon
unc0rr
parents: 1261
diff changeset
    93
	end;
351
29bc9c36ad5f Fixed-point arithmetics in engine.
unc0rr
parents: 302
diff changeset
    94
Close(f)
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
    95
{$I+}
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
    96
end;
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
    97
2140
75e5c4fcae2a Death messages thanks to Smaxx
nemo
parents: 2039
diff changeset
    98
function GetEventString(e: TEventId): string;
75e5c4fcae2a Death messages thanks to Smaxx
nemo
parents: 2039
diff changeset
    99
begin
75e5c4fcae2a Death messages thanks to Smaxx
nemo
parents: 2039
diff changeset
   100
	if trevt_n[e] = 0 then // no messages for this event type?
75e5c4fcae2a Death messages thanks to Smaxx
nemo
parents: 2039
diff changeset
   101
		GetEventString:= '*missing translation*'
75e5c4fcae2a Death messages thanks to Smaxx
nemo
parents: 2039
diff changeset
   102
	else
2142
48ed98cfd119 Make code suck less
unc0rr
parents: 2140
diff changeset
   103
		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
   104
end;
75e5c4fcae2a Death messages thanks to Smaxx
nemo
parents: 2039
diff changeset
   105
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   106
function Format(fmt: shortstring; var arg: shortstring): shortstring;
371
731ad6d27bd1 integer -> LongInt
unc0rr
parents: 351
diff changeset
   107
var i: LongInt;
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   108
begin
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   109
i:= Pos('%1', fmt);
351
29bc9c36ad5f Fixed-point arithmetics in engine.
unc0rr
parents: 302
diff changeset
   110
if i = 0 then Format:= fmt
29bc9c36ad5f Fixed-point arithmetics in engine.
unc0rr
parents: 302
diff changeset
   111
         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
   112
end;
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   113
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   114
end.