1 #ifndef H_LANG
2 #define H_LANG
3 
4 // Thanks: SuiKaze Raider
5 
6 enum StringID {
7       STR_EMPTY
8 // common
9     , STR_LOADING
10     , STR_HELP_PRESS
11     , STR_HELP_TEXT
12     , STR_LEVEL_STATS
13     , STR_HINT_SAVING
14     , STR_HINT_SAVING_DONE
15     , STR_HINT_SAVING_ERROR
16     , STR_YES
17     , STR_NO
18     , STR_OFF
19     , STR_ON
20     , STR_NO_STEREO
21     , STR_SBS
22     , STR_ANAGLYPH
23     , STR_SPLIT
24     , STR_VR
25     , STR_QUALITY_LOW
26     , STR_QUALITY_MEDIUM
27     , STR_QUALITY_HIGH
28     , STR_LANG_EN
29     , STR_LANG_FR
30     , STR_LANG_DE
31     , STR_LANG_ES
32     , STR_LANG_IT
33     , STR_LANG_PL
34     , STR_LANG_PT
35     , STR_LANG_RU
36     , STR_LANG_JA
37     , STR_LANG_GR
38     , STR_LANG_FI
39     , STR_LANG_CZ
40     , STR_LANG_CN
41     , STR_LANG_HU
42     , STR_LANG_SV
43     , STR_APPLY
44     , STR_GAMEPAD_1
45     , STR_GAMEPAD_2
46     , STR_GAMEPAD_3
47     , STR_GAMEPAD_4
48     , STR_NOT_READY
49     , STR_PLAYER_1
50     , STR_PLAYER_2
51     , STR_PRESS_ANY_KEY
52     , STR_HELP_SELECT
53     , STR_HELP_BACK
54 // inventory pages
55     , STR_OPTION
56     , STR_INVENTORY
57     , STR_ITEMS
58 // save game page
59     , STR_SAVEGAME
60     , STR_CURRENT_POSITION
61 // inventory option
62     , STR_GAME
63     , STR_MAP
64     , STR_COMPASS
65     , STR_STOPWATCH
66     , STR_HOME
67     , STR_DETAIL
68     , STR_SOUND
69     , STR_CONTROLS
70     , STR_GAMMA
71 // passport menu
72     , STR_LOAD_GAME
73     , STR_START_GAME
74     , STR_RESTART_LEVEL
75     , STR_EXIT_TO_TITLE
76     , STR_EXIT_GAME
77     , STR_SELECT_LEVEL
78 // detail options
79     , STR_SELECT_DETAIL
80     , STR_OPT_DETAIL_FILTER
81     , STR_OPT_DETAIL_LIGHTING
82     , STR_OPT_DETAIL_SHADOWS
83     , STR_OPT_DETAIL_WATER
84     , STR_OPT_DETAIL_VSYNC
85     , STR_OPT_DETAIL_STEREO
86     , STR_OPT_SIMPLE_ITEMS
87     , STR_OPT_RESOLUTION
88     , STR_SCALE_100
89     , STR_SCALE_75
90     , STR_SCALE_50
91     , STR_SCALE_25
92 // sound options
93     , STR_SET_VOLUMES
94     , STR_REVERBERATION
95     , STR_OPT_SUBTITLES
96     , STR_OPT_LANGUAGE
97 // controls options
98     , STR_SET_CONTROLS
99     , STR_OPT_CONTROLS_KEYBOARD
100     , STR_OPT_CONTROLS_GAMEPAD
101     , STR_OPT_CONTROLS_VIBRATION
102     , STR_OPT_CONTROLS_RETARGET
103     , STR_OPT_CONTROLS_MULTIAIM
104     // controls
105     , STR_CTRL_FIRST
106     , STR_CTRL_LAST = STR_CTRL_FIRST + cMAX - 1
107     // keys
108     , STR_KEY_FIRST
109     , STR_KEY_LAST  = STR_KEY_FIRST + ikBack
110     // gamepad
111     , STR_JOY_FIRST
112     , STR_JOY_LAST  = STR_JOY_FIRST + jkMAX - 1
113 // inventory items
114     , STR_UNKNOWN
115     , STR_EXPLOSIVE
116     , STR_PISTOLS
117     , STR_SHOTGUN
118     , STR_MAGNUMS
119     , STR_UZIS
120     , STR_AMMO_PISTOLS
121     , STR_AMMO_SHOTGUN
122     , STR_AMMO_MAGNUMS
123     , STR_AMMO_UZIS
124     , STR_MEDI_SMALL
125     , STR_MEDI_BIG
126     , STR_LEAD_BAR
127     , STR_SCION
128 // keys
129     , STR_KEY
130     , STR_KEY_SILVER
131     , STR_KEY_RUSTY
132     , STR_KEY_GOLD
133     , STR_KEY_SAPPHIRE
134     , STR_KEY_NEPTUNE
135     , STR_KEY_ATLAS
136     , STR_KEY_DAMOCLES
137     , STR_KEY_THOR
138     , STR_KEY_ORNATE
139 // puzzles
140     , STR_PUZZLE
141     , STR_PUZZLE_GOLD_IDOL
142     , STR_PUZZLE_GOLD_BAR
143     , STR_PUZZLE_COG
144     , STR_PUZZLE_FUSE
145     , STR_PUZZLE_ANKH
146     , STR_PUZZLE_HORUS
147     , STR_PUZZLE_ANUBIS
148     , STR_PUZZLE_SCARAB
149     , STR_PUZZLE_PYRAMID
150 // TR1 subtitles
151     , STR_TR1_SUB_CAFE
152     , STR_TR1_SUB_LIFT
153     , STR_TR1_SUB_CANYON
154     , STR_TR1_SUB_PRISON
155     , STR_TR1_SUB_22 // CUT4
156     , STR_TR1_SUB_23 // CUT1
157     , STR_TR1_SUB_24
158     , STR_TR1_SUB_25 // CUT3
159     , STR_TR1_SUB_26
160     , STR_TR1_SUB_27
161     , STR_TR1_SUB_28
162     , STR_TR1_SUB_29
163     , STR_TR1_SUB_30
164     , STR_TR1_SUB_31
165     , STR_TR1_SUB_32
166     , STR_TR1_SUB_33
167     , STR_TR1_SUB_34
168     , STR_TR1_SUB_35
169     , STR_TR1_SUB_36
170     , STR_TR1_SUB_37
171     , STR_TR1_SUB_38
172     , STR_TR1_SUB_39
173     , STR_TR1_SUB_40
174     , STR_TR1_SUB_41
175     , STR_TR1_SUB_42
176     , STR_TR1_SUB_43
177     , STR_TR1_SUB_44
178     , STR_TR1_SUB_45
179     , STR_TR1_SUB_46
180     , STR_TR1_SUB_47
181     , STR_TR1_SUB_48
182     , STR_TR1_SUB_49
183     , STR_TR1_SUB_50
184     , STR_TR1_SUB_51
185     , STR_TR1_SUB_52
186     , STR_TR1_SUB_53
187     , STR_TR1_SUB_54
188     , STR_TR1_SUB_55
189     , STR_TR1_SUB_56
190 // TR1 levels
191     , STR_TR1_GYM
192     , STR_TR1_LEVEL1
193     , STR_TR1_LEVEL2
194     , STR_TR1_LEVEL3A
195     , STR_TR1_LEVEL3B
196     , STR_TR1_LEVEL4
197     , STR_TR1_LEVEL5
198     , STR_TR1_LEVEL6
199     , STR_TR1_LEVEL7A
200     , STR_TR1_LEVEL7B
201     , STR_TR1_LEVEL8A
202     , STR_TR1_LEVEL8B
203     , STR_TR1_LEVEL8C
204     , STR_TR1_LEVEL10A
205     , STR_TR1_LEVEL10B
206     , STR_TR1_LEVEL10C
207     , STR_TR1_EGYPT
208     , STR_TR1_CAT
209     , STR_TR1_END
210     , STR_TR1_END2
211 // TR2 levels
212     , STR_TR2_ASSAULT
213     , STR_TR2_WALL
214     , STR_TR2_BOAT
215     , STR_TR2_VENICE
216     , STR_TR2_OPERA
217     , STR_TR2_RIG
218     , STR_TR2_PLATFORM
219     , STR_TR2_UNWATER
220     , STR_TR2_KEEL
221     , STR_TR2_LIVING
222     , STR_TR2_DECK
223     , STR_TR2_SKIDOO
224     , STR_TR2_MONASTRY
225     , STR_TR2_CATACOMB
226     , STR_TR2_ICECAVE
227     , STR_TR2_EMPRTOMB
228     , STR_TR2_FLOATING
229     , STR_TR2_XIAN
230     , STR_TR2_HOUSE
231 // TR3 levels
232     , STR_TR3_HOUSE
233     , STR_TR3_JUNGLE
234     , STR_TR3_TEMPLE
235     , STR_TR3_QUADCHAS
236     , STR_TR3_TONYBOSS
237     , STR_TR3_SHORE
238     , STR_TR3_CRASH
239     , STR_TR3_RAPIDS
240     , STR_TR3_TRIBOSS
241     , STR_TR3_ROOFS
242     , STR_TR3_SEWER
243     , STR_TR3_TOWER
244     , STR_TR3_OFFICE
245     , STR_TR3_NEVADA
246     , STR_TR3_COMPOUND
247     , STR_TR3_AREA51
248     , STR_TR3_ANTARC
249     , STR_TR3_MINES
250     , STR_TR3_CITY
251     , STR_TR3_CHAMBER
252     , STR_TR3_STPAUL
253 
254     , STR_MAX
255 };
256 
257 #ifdef _XBOX // TODO: illegal escape sequence
258     #define STR_RUSSIAN "Russian"
259 #else
260     #define STR_RUSSIAN "������{�"
261 #endif
262 
263 #define STR_LANGUAGES \
264       "English"       \
265     , "Fran|cais"     \
266     , "Deutsch"       \
267     , "Espa+nol"      \
268     , "Italiano"      \
269     , "Polski"        \
270     , "Portugu(es"    \
271     , STR_RUSSIAN     \
272     , "\x11\x02\x70\x01\x97\x01\xD6\xFF\xFF" \
273     , "\x11\x01\x22\x01\x0F\x01\x0F\x01\x0E\x01\x06\x01\x04\x01\x0C\x01\x0B\xFF\xFF" \
274     , "Suomi"         \
275     , "{Cesky"        \
276     , "\x11\x02\x8A\x02\x6C\x01\x54\x03\x02\xFF\xFF" \
277     , "Magyar" \
278     , "Svenska"
279 
280 #define LANG_PREFIXES "_EN", "_FR", "_DE", "_ES", "_IT", "_PL", "_PT", "_RU", "_JA", "_GR", "_FI", "_CZ", "_CN", "_HU", "_SV"
281 
282 #define STR_KEYS \
283       "NONE", "LEFT", "RIGHT", "UP", "DOWN", "SPACE", "TAB", "ENTER", "ESCAPE", "SHIFT", "CTRL", "ALT" \
284     , "0", "1", "2", "3", "4", "5", "6", "7", "8", "9" \
285     , "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M" \
286     , "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z" \
287     , "PAD0", "PAD1", "PAD2", "PAD3", "PAD4", "PAD5", "PAD6", "PAD7", "PAD8", "PAD9", "PAD+", "PAD-", "PADx", "PAD/", "PAD." \
288     , "F1", "F2", "F3", "F4", "F5", "F6", "F7", "F8", "F9", "F10", "F11", "F12" \
289     , "-", "+", "<", ">", "/", "\\", ",", ".", "$", ":", "'", "PGUP", "PGDN", "HOME", "END", "DEL", "INS", "BKSP" \
290     , "NONE", "A", "B", "X", "Y", "L BUMPER", "R BUMPER", "SELECT", "START", "L STICK", "R STICK", "L TRIGGER", "R TRIGGER", "D-LEFT", "D-RIGHT", "D-UP", "D-DOWN"
291 
292 #define STR_SCALE "25", "50", "75", "100"
293 
294 const char *helpText =
295     "Start - add second player or restore Lara@"
296     "H - Show or hide this help@"
297     "ALT and ENTER - Fullscreen@"
298     "5 - Save Game@"
299     "9 - Load Game@"
300     "C - Look@"
301     "R - Slow motion@"
302     "T - Fast motion@"
303     "Roll - Up & Down@"
304     "Step Left - Walk & Left@"
305     "Step Right - Walk & Right@"
306     "Out of water - Up & Action@"
307     "Handstand - Up & Walk@"
308     "Swan dive - Up & Walk & Jump@"
309     "First Person View - Look & Action@"
310     "DOZY on - Look & Duck & Action & Jump@"
311     "DOZY off - Walk@"
312     "Free Camera - hold L & R stick";
313 
314 #include "lang/en.h"
315 #include "lang/fr.h"
316 #include "lang/de.h"
317 #include "lang/es.h"
318 #include "lang/it.h"
319 #include "lang/pl.h"
320 #include "lang/pt.h"
321 #include "lang/ru.h"
322 #include "lang/ja.h"
323 #include "lang/gr.h"
324 #include "lang/fi.h"
325 #include "lang/cz.h"
326 #include "lang/cn.h"
327 #include "lang/hu.h"
328 #include "lang/sv.h"
329 
330 char **STR = NULL;
331 
ensureLanguage(int lang)332 void ensureLanguage(int lang) {
333     ASSERT(COUNT(STR_EN) == STR_MAX);
334     ASSERT(COUNT(STR_FR) == STR_MAX);
335     ASSERT(COUNT(STR_DE) == STR_MAX);
336     ASSERT(COUNT(STR_ES) == STR_MAX);
337     ASSERT(COUNT(STR_IT) == STR_MAX);
338     ASSERT(COUNT(STR_PL) == STR_MAX);
339     ASSERT(COUNT(STR_PT) == STR_MAX);
340     ASSERT(COUNT(STR_RU) == STR_MAX);
341     ASSERT(COUNT(STR_JA) == STR_MAX);
342     ASSERT(COUNT(STR_GR) == STR_MAX);
343     ASSERT(COUNT(STR_FI) == STR_MAX);
344     ASSERT(COUNT(STR_CZ) == STR_MAX);
345     ASSERT(COUNT(STR_CN) == STR_MAX);
346     ASSERT(COUNT(STR_HU) == STR_MAX);
347     ASSERT(COUNT(STR_SV) == STR_MAX);
348 
349     lang += STR_LANG_EN;
350 
351     switch (lang) {
352         case STR_LANG_FR : STR = (char**)STR_FR; break;
353         case STR_LANG_DE : STR = (char**)STR_DE; break;
354         case STR_LANG_ES : STR = (char**)STR_ES; break;
355         case STR_LANG_IT : STR = (char**)STR_IT; break;
356         case STR_LANG_PL : STR = (char**)STR_PL; break;
357         case STR_LANG_PT : STR = (char**)STR_PT; break;
358         case STR_LANG_RU : STR = (char**)STR_RU; break;
359         case STR_LANG_JA : STR = (char**)STR_JA; break;
360         case STR_LANG_GR : STR = (char**)STR_GR; break;
361         case STR_LANG_FI : STR = (char**)STR_FI; break;
362         case STR_LANG_CZ : STR = (char**)STR_CZ; break;
363         case STR_LANG_CN : STR = (char**)STR_CN; break;
364         case STR_LANG_HU : STR = (char**)STR_HU; break;
365         case STR_LANG_SV : STR = (char**)STR_SV; break;
366         default          : STR = (char**)STR_EN; break;
367     }
368 }
369 
370 #endif
371