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