hedgewars/uLocale.pas
author nemo
Tue, 20 Oct 2009 21:20:47 +0000
changeset 2568 e654cbfb23ba
parent 2457 ecf0c7e7995b
child 2630 079ef82eac75
permissions -rw-r--r--
Bunch of neat stuff by Smaxx. ATI check, translucent name tags to reduce terrain fail, disabling health crates on invulnerable hogs. Also tweaks to prior stuff.
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,
2457
ecf0c7e7995b Initial molotov cocktail. Still needs graphics, tweaking of fire behaviour. Also changed probabilities for default weapon sets
nemo
parents: 2428
diff changeset
    29
            sidLaserSight, sidVampiric, sidSniperRifle, sidJetpack, sidMolotov);
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,
2397
2ca4ca6b4bab - Patch for "Syncronizing" message by Smaxx + some tweaks by me
unc0rr
parents: 2376
diff changeset
    32
			sidConfirm, sidSuddenDeath, sidRemaining, sidFuel, sidSync);
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,
2428
6800f8aa0184 Huge Smaxx patch with some fixes by me:
unc0rr
parents: 2397
diff changeset
    35
			eidNewHealthPack, eidNewAmmoPack, eidNewUtilityPack, eidTurnSkipped, eidHurtSelf,
6800f8aa0184 Huge Smaxx patch with some fixes by me:
unc0rr
parents: 2397
diff changeset
    36
			eidHomerun);
285
cdab49768c83 Mine Strike weapon
unc0rr
parents: 281
diff changeset
    37
2142
48ed98cfd119 Make code suck less
unc0rr
parents: 2140
diff changeset
    38
const MAX_EVENT_STRINGS = 100;
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
    39
var trammo: array[TAmmoStrId] of string;
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
    40
    trmsg: array[TMsgStrId] of string;
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
    41
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
    42
procedure LoadLocale(FileName: string);
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
    43
function Format(fmt: shortstring; var arg: shortstring): shortstring;
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
    44
2140
75e5c4fcae2a Death messages thanks to Smaxx
nemo
parents: 2039
diff changeset
    45
function GetEventString(e: TEventId): string;
75e5c4fcae2a Death messages thanks to Smaxx
nemo
parents: 2039
diff changeset
    46
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
    47
implementation
2142
48ed98cfd119 Make code suck less
unc0rr
parents: 2140
diff changeset
    48
uses uMisc, uRandom;
48ed98cfd119 Make code suck less
unc0rr
parents: 2140
diff changeset
    49
48ed98cfd119 Make code suck less
unc0rr
parents: 2140
diff changeset
    50
var	trevt: array[TEventId] of array [0..Pred(MAX_EVENT_STRINGS)] of string;
48ed98cfd119 Make code suck less
unc0rr
parents: 2140
diff changeset
    51
	trevt_n: array[TEventId] of integer;
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
    52
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
    53
procedure LoadLocale(FileName: string);
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
    54
var s: shortstring;
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
    55
    f: textfile;
371
731ad6d27bd1 integer -> LongInt
unc0rr
parents: 351
diff changeset
    56
    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
    57
	first: array[TEventId] of boolean;
2144
c76a2f7bd452 - Fix some ugly code
unc0rr
parents: 2143
diff changeset
    58
	e: TEventId;
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
    59
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
    60
trammo[sidNothing]:= ' ';
2144
c76a2f7bd452 - Fix some ugly code
unc0rr
parents: 2143
diff changeset
    61
for e:= Low(TEventId) to High(TEventId) do first[e]:= true;
2140
75e5c4fcae2a Death messages thanks to Smaxx
nemo
parents: 2039
diff changeset
    62
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
    63
{$I-}
351
29bc9c36ad5f Fixed-point arithmetics in engine.
unc0rr
parents: 302
diff changeset
    64
Assign(f, FileName);
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
    65
reset(f);
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
    66
TryDo(IOResult = 0, 'Cannot load locale "' + FileName + '"', true);
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
    67
while not eof(f) do
1263
24677a82531d Add Hellish bomb weapon
unc0rr
parents: 1261
diff changeset
    68
	begin
24677a82531d Add Hellish bomb weapon
unc0rr
parents: 1261
diff changeset
    69
	readln(f, s);
24677a82531d Add Hellish bomb weapon
unc0rr
parents: 1261
diff changeset
    70
	if Length(s) = 0 then continue;
2039
3001445b4500 Try to prevent locale problems:
unc0rr
parents: 2023
diff changeset
    71
	if not (s[1] in ['0'..'9']) then continue;
1263
24677a82531d Add Hellish bomb weapon
unc0rr
parents: 1261
diff changeset
    72
	TryDo(Length(s) > 6, 'Load locale: empty string', true);
24677a82531d Add Hellish bomb weapon
unc0rr
parents: 1261
diff changeset
    73
	val(s[1]+s[2], a, c);
24677a82531d Add Hellish bomb weapon
unc0rr
parents: 1261
diff changeset
    74
	TryDo(c = 0, 'Load locale: numbers should be two-digit: ' + s, true);
24677a82531d Add Hellish bomb weapon
unc0rr
parents: 1261
diff changeset
    75
	TryDo(s[3] = ':', 'Load locale: ":" expected', true);
24677a82531d Add Hellish bomb weapon
unc0rr
parents: 1261
diff changeset
    76
	val(s[4]+s[5], b, c);
24677a82531d Add Hellish bomb weapon
unc0rr
parents: 1261
diff changeset
    77
	TryDo(c = 0, 'Load locale: numbers should be two-digit' + s, true);
24677a82531d Add Hellish bomb weapon
unc0rr
parents: 1261
diff changeset
    78
	TryDo(s[6] = '=', 'Load locale: "=" expected', true);
24677a82531d Add Hellish bomb weapon
unc0rr
parents: 1261
diff changeset
    79
	Delete(s, 1, 6);
24677a82531d Add Hellish bomb weapon
unc0rr
parents: 1261
diff changeset
    80
	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
    81
		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
    82
		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
    83
		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
    84
			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
    85
			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
    86
				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
    87
				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
    88
				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
    89
				end;
2142
48ed98cfd119 Make code suck less
unc0rr
parents: 2140
diff changeset
    90
			trevt[TEventId(b)][trevt_n[TEventId(b)]]:= s;
2140
75e5c4fcae2a Death messages thanks to Smaxx
nemo
parents: 2039
diff changeset
    91
			inc(trevt_n[TEventId(b)]);
75e5c4fcae2a Death messages thanks to Smaxx
nemo
parents: 2039
diff changeset
    92
			end;
1263
24677a82531d Add Hellish bomb weapon
unc0rr
parents: 1261
diff changeset
    93
		end;
24677a82531d Add Hellish bomb weapon
unc0rr
parents: 1261
diff changeset
    94
	end;
351
29bc9c36ad5f Fixed-point arithmetics in engine.
unc0rr
parents: 302
diff changeset
    95
Close(f)
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
    96
{$I+}
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
    97
end;
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
    98
2140
75e5c4fcae2a Death messages thanks to Smaxx
nemo
parents: 2039
diff changeset
    99
function GetEventString(e: TEventId): string;
75e5c4fcae2a Death messages thanks to Smaxx
nemo
parents: 2039
diff changeset
   100
begin
75e5c4fcae2a Death messages thanks to Smaxx
nemo
parents: 2039
diff changeset
   101
	if trevt_n[e] = 0 then // no messages for this event type?
75e5c4fcae2a Death messages thanks to Smaxx
nemo
parents: 2039
diff changeset
   102
		GetEventString:= '*missing translation*'
75e5c4fcae2a Death messages thanks to Smaxx
nemo
parents: 2039
diff changeset
   103
	else
2142
48ed98cfd119 Make code suck less
unc0rr
parents: 2140
diff changeset
   104
		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
   105
end;
75e5c4fcae2a Death messages thanks to Smaxx
nemo
parents: 2039
diff changeset
   106
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   107
function Format(fmt: shortstring; var arg: shortstring): shortstring;
371
731ad6d27bd1 integer -> LongInt
unc0rr
parents: 351
diff changeset
   108
var i: LongInt;
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   109
begin
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   110
i:= Pos('%1', fmt);
351
29bc9c36ad5f Fixed-point arithmetics in engine.
unc0rr
parents: 302
diff changeset
   111
if i = 0 then Format:= fmt
29bc9c36ad5f Fixed-point arithmetics in engine.
unc0rr
parents: 302
diff changeset
   112
         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
   113
end;
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   114
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   115
end.