1 /* ScummVM - Graphic Adventure Engine
2  *
3  * ScummVM is the legal property of its developers, whose names
4  * are too numerous to list here. Please refer to the COPYRIGHT
5  * file distributed with this source distribution.
6  *
7  * This program is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU General Public License
9  * as published by the Free Software Foundation; either version 2
10  * of the License, or (at your option) any later version.
11  *
12  * This program is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15  * GNU General Public License for more details.
16  *
17  * You should have received a copy of the GNU General Public License
18  * along with this program; if not, write to the Free Software
19  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
20  *
21  */
22 
23 #include "common/scummsys.h"
24 #include "xeen/resources.h"
25 #include "xeen/files.h"
26 #include "xeen/xeen.h"
27 
28 namespace Xeen {
29 
30 Resources *g_resources;
31 
Resources()32 Resources::Resources() {
33 	g_resources = this;
34 	g_vm->_files->setGameCc(1);
35 
36 	_globalSprites.load("global.icn");
37 	if (g_vm->getGameID() == GType_Swords)
38 		_logoSprites.load("logo.int");
39 
40 	File f((g_vm->getGameID() == GType_Clouds) ? "mae.cld" : "mae.xen");
41 	while (f.pos() < f.size())
42 		_maeNames.push_back(f.readString());
43 	f.close();
44 
45 	if (g_vm->getGameID() == GType_Clouds) {
46 		f.open("mapnames.cld");
47 		while (f.pos() < f.size())
48 			_cloudsMapNames.push_back(f.readString());
49 		f.close();
50 	}
51 
52 	// Set up items array to map to the names of items in each category
53 	ITEM_NAMES[CATEGORY_WEAPON] = &WEAPON_NAMES[0];
54 	ITEM_NAMES[CATEGORY_ARMOR] = &ARMOR_NAMES[0];
55 	ITEM_NAMES[CATEGORY_ACCESSORY] = &ACCESSORY_NAMES[0];
56 	ITEM_NAMES[CATEGORY_MISC] = &MISC_NAMES[0];
57 
58 	// Load the data from the resource
59 	loadData();
60 }
61 
loadData()62 void Resources::loadData() {
63 	int langId = 7; // English
64 	if (g_vm->getLanguage() == Common::RU_RUS)
65 		langId = 26;
66 
67 	ResFile file("CONSTANTS_", _buffer, langId);
68 	file.syncString(CLOUDS_CREDITS);
69 	file.syncString(DARK_SIDE_CREDITS);
70 	file.syncString(SWORDS_CREDITS1);
71 	file.syncString(SWORDS_CREDITS2);
72 	file.syncString(OPTIONS_MENU);
73 	file.syncStrings(GAME_NAMES, 3);
74 	file.syncString(THE_PARTY_NEEDS_REST);
75 	file.syncString(WHO_WILL);
76 	file.syncString(HOW_MUCH);
77 	file.syncString(WHATS_THE_PASSWORD);
78 	file.syncString(PASSWORD_INCORRECT);
79 	file.syncString(IN_NO_CONDITION);
80 	file.syncString(NOTHING_HERE);
81 	file.syncStrings(TERRAIN_TYPES, 6);
82 	file.syncStrings(OUTDOORS_WALL_TYPES, 16);
83 	file.syncStrings(SURFACE_NAMES, 16);
84 	file.syncStrings(WHO_ACTIONS, 32);
85 	file.syncStrings(WHO_WILL_ACTIONS, 4);
86 	file.syncBytes2D((byte *)SYMBOLS, 20, 64);
87 	file.syncBytes2D((byte *)TEXT_COLORS, 40, 4);
88 	file.syncBytes2D((byte *)TEXT_COLORS_STARTUP, 40, 4);
89 	file.syncStrings(DIRECTION_TEXT_UPPER, 4);
90 	file.syncStrings(DIRECTION_TEXT, 4);
91 	file.syncStrings(RACE_NAMES, 5);
92 	file.syncNumbers(RACE_HP_BONUSES, 5);
93 	file.syncNumbers2D((int *)RACE_SP_BONUSES, 5, 2);
94 	file.syncStrings(CLASS_NAMES, 11);
95 	file.syncNumbers(CLASS_EXP_LEVELS, 10);
96 	file.syncStrings(ALIGNMENT_NAMES, 3);
97 	file.syncStrings(SEX_NAMES, 2);
98 	file.syncStrings(SKILL_NAMES, 18);
99 	file.syncStrings(CONDITION_NAMES_M, 17);
100 	file.syncStrings(CONDITION_NAMES_F, 17);
101 	file.syncNumbers(CONDITION_COLORS, 17);
102 	file.syncString(GOOD);
103 	file.syncString(BLESSED);
104 	file.syncString(POWER_SHIELD);
105 	file.syncString(HOLY_BONUS);
106 	file.syncString(HEROISM);
107 	file.syncString(IN_PARTY);
108 	file.syncString(PARTY_DETAILS);
109 	file.syncString(PARTY_DIALOG_TEXT);
110 	file.syncNumbers(FACE_CONDITION_FRAMES, 17);
111 	file.syncNumbers(CHAR_FACES_X, 6);
112 	file.syncNumbers(HP_BARS_X, 6);
113 	file.syncString(NO_ONE_TO_ADVENTURE_WITH);
114 	file.syncBytes2D((byte *)DARKNESS_XLAT, 3, 256);
115 	file.syncString(YOUR_ROSTER_IS_FULL);
116 	file.syncString(PLEASE_WAIT);
117 	file.syncString(OOPS);
118 	file.syncNumbers2D((int *)SCREEN_POSITIONING_X, 4, 48);
119 	file.syncNumbers2D((int *)SCREEN_POSITIONING_Y, 4, 48);
120 	file.syncNumbers(MONSTER_GRID_BITMASK, 12);
121 	file.syncNumbers2D((int *)INDOOR_OBJECT_X, 2, 12);
122 	file.syncNumbers2D((int *)MAP_OBJECT_Y, 2, 12);
123 	file.syncNumbers(INDOOR_MONSTERS_Y, 4);
124 	file.syncNumbers2D((int *)OUTDOOR_OBJECT_X, 2, 12);
125 	file.syncNumbers(OUTDOOR_MONSTER_INDEXES, 26);
126 	file.syncNumbers(OUTDOOR_MONSTERS_Y, 26);
127 	file.syncNumbers2D((int *)DIRECTION_ANIM_POSITIONS, 4, 4);
128 	file.syncBytes2D((byte *)WALL_SHIFTS, 4, 48);
129 	file.syncNumbers(DRAW_NUMBERS, 25);
130 	file.syncNumbers2D((int *)DRAW_FRAMES, 25, 2);
131 	file.syncNumbers(COMBAT_FLOAT_X, 8);
132 	file.syncNumbers(COMBAT_FLOAT_Y, 8);
133 	file.syncNumbers2D((int *)MONSTER_EFFECT_FLAGS, 15, 8);
134 	file.syncNumbers2D((int *)SPELLS_ALLOWED, 3, 40);
135 	file.syncNumbers(BASE_HP_BY_CLASS, 10);
136 	file.syncNumbers(AGE_RANGES, 10);
137 	file.syncNumbers2D((int *)AGE_RANGES_ADJUST, 2, 10);
138 	file.syncNumbers(STAT_VALUES, 24);
139 	file.syncNumbers(STAT_BONUSES, 24);
140 	file.syncNumbers(ELEMENTAL_CATEGORIES, 6);
141 	file.syncNumbers(ATTRIBUTE_CATEGORIES, 10);
142 	file.syncNumbers(ATTRIBUTE_BONUSES, 72);
143 	file.syncNumbers(ELEMENTAL_RESISTENCES, 37);
144 	file.syncNumbers(ELEMENTAL_DAMAGE, 37);
145 	file.syncNumbers(WEAPON_DAMAGE_BASE, 35);
146 	file.syncNumbers(WEAPON_DAMAGE_MULTIPLIER, 35);
147 	file.syncNumbers(METAL_DAMAGE, 22);
148 	file.syncNumbers(METAL_DAMAGE_PERCENT, 22);
149 	file.syncNumbers(METAL_LAC, 22);
150 	file.syncNumbers(ARMOR_STRENGTHS, 14);
151 	file.syncNumbers(MAKE_ITEM_ARR1, 6);
152 	file.syncNumbers3D((int *)MAKE_ITEM_ARR2, 6, 7, 2);
153 	file.syncNumbers3D((int *)MAKE_ITEM_ARR3, 10, 7, 2);
154 	file.syncNumbers3D((int *)MAKE_ITEM_ARR4, 2, 7, 2);
155 	file.syncNumbers2D((int *)MAKE_ITEM_ARR5, 8, 2);
156 	file.syncNumbers(OUTDOOR_DRAWSTRUCT_INDEXES, 44);
157 	file.syncNumbers2D((int *)TOWN_MAXES, 2, 11);
158 	file.syncStrings2D(&TOWN_ACTION_MUSIC[0][0], 2, 7);
159 	file.syncStrings(TOWN_ACTION_SHAPES, 7);
160 	file.syncNumbers2D((int *)TOWN_ACTION_FILES, 2, 7);
161 	file.syncString(BANK_TEXT);
162 	file.syncString(BLACKSMITH_TEXT);
163 	file.syncString(GUILD_NOT_MEMBER_TEXT);
164 	file.syncString(GUILD_TEXT);
165 	file.syncString(TAVERN_TEXT);
166 	file.syncString(GOOD_STUFF);
167 	file.syncString(HAVE_A_DRINK);
168 	file.syncString(YOURE_DRUNK);
169 	file.syncNumbers4D((int *)TAVERN_EXIT_LIST, 2, 6, 5, 2);
170 	file.syncString(FOOD_AND_DRINK);
171 	file.syncString(TEMPLE_TEXT);
172 	file.syncString(EXPERIENCE_FOR_LEVEL);
173 	file.syncString(TRAINING_LEARNED_ALL);
174 	file.syncString(ELIGIBLE_FOR_LEVEL);
175 	file.syncString(TRAINING_TEXT);
176 	file.syncString(GOLD_GEMS);
177 	file.syncString(GOLD_GEMS_2);
178 	file.syncStrings(DEPOSIT_WITHDRAWL, 2);
179 	file.syncString(NOT_ENOUGH_X_IN_THE_Y);
180 	file.syncString(NO_X_IN_THE_Y);
181 	file.syncStrings(STAT_NAMES, 16);
182 	file.syncStrings(CONSUMABLE_NAMES, 4);
183 	file.syncStrings(CONSUMABLE_GOLD_FORMS, 1);
184 	file.syncStrings(CONSUMABLE_GEM_FORMS, 1);
185 	file.syncStrings(WHERE_NAMES, 2);
186 	file.syncString(AMOUNT);
187 	file.syncString(FOOD_PACKS_FULL);
188 	file.syncString(BUY_SPELLS);
189 	file.syncString(GUILD_OPTIONS);
190 	file.syncNumbers((int *)MISC_SPELL_INDEX, 74);
191 	file.syncNumbers((int *)SPELL_COSTS, 77);
192 	file.syncNumbers2D((int *)CLOUDS_GUILD_SPELLS, 5, 20);
193 	file.syncNumbers2D((int *)DARK_SPELL_OFFSETS, 3, 39);
194 	file.syncNumbers2D((int *)DARK_SPELL_RANGES, 12, 2);
195 	file.syncNumbers2D((int *)SWORDS_SPELL_RANGES, 12, 2);
196 	file.syncNumbers((int *)SPELL_GEM_COST, 77);
197 	file.syncString(NOT_A_SPELL_CASTER);
198 	file.syncString(SPELLS_LEARNED_ALL);
199 	file.syncString(SPELLS_FOR);
200 	file.syncString(SPELL_LINES_0_TO_9);
201 	file.syncString(SPELLS_DIALOG_SPELLS);
202 	file.syncString(SPELL_PTS);
203 	file.syncString(GOLD);
204 	file.syncString(SPELL_INFO);
205 	file.syncString(SPELL_PURCHASE);
206 	file.syncString(MAP_TEXT);
207 	file.syncString(LIGHT_COUNT_TEXT);
208 	file.syncString(FIRE_RESISTENCE_TEXT);
209 	file.syncString(ELECRICITY_RESISTENCE_TEXT);
210 	file.syncString(COLD_RESISTENCE_TEXT);
211 	file.syncString(POISON_RESISTENCE_TEXT);
212 	file.syncString(CLAIRVOYANCE_TEXT);
213 	file.syncString(LEVITATE_TEXT);
214 	file.syncString(WALK_ON_WATER_TEXT);
215 	file.syncString(GAME_INFORMATION);
216 	file.syncString(WORLD_GAME_TEXT);
217 	file.syncString(DARKSIDE_GAME_TEXT);
218 	file.syncString(CLOUDS_GAME_TEXT);
219 	file.syncString(SWORDS_GAME_TEXT);
220 	file.syncStrings(WEEK_DAY_STRINGS, 10);
221 	file.syncString(CHARACTER_DETAILS);
222 	file.syncStrings(DAYS, 3);
223 	file.syncString(PARTY_GOLD);
224 	file.syncString(PLUS_14);
225 	file.syncString(CHARACTER_TEMPLATE);
226 	file.syncString(EXCHANGING_IN_COMBAT);
227 	file.syncString(CURRENT_MAXIMUM_RATING_TEXT);
228 	file.syncString(CURRENT_MAXIMUM_TEXT);
229 	file.syncStrings(RATING_TEXT, 24);
230 	file.syncStrings(BORN, 2);
231 	file.syncString(AGE_TEXT);
232 	file.syncString(LEVEL_TEXT);
233 	file.syncString(RESISTENCES_TEXT);
234 	file.syncString(NONE);
235 	file.syncString(EXPERIENCE_TEXT);
236 	file.syncString(ELIGIBLE);
237 	file.syncString(IN_PARTY_IN_BANK);
238 	file.syncStrings(FOOD_ON_HAND, 3);
239 	file.syncString(FOOD_TEXT);
240 	file.syncString(EXCHANGE_WITH_WHOM);
241 	file.syncString(QUICK_REF_LINE);
242 	file.syncString(QUICK_REFERENCE);
243 	file.syncNumbers2D((int *)BLACKSMITH_MAP_IDS, 2, 4);
244 	file.syncString(ITEMS_DIALOG_TEXT1);
245 	file.syncString(ITEMS_DIALOG_TEXT2);
246 	file.syncString(ITEMS_DIALOG_LINE1);
247 	file.syncString(ITEMS_DIALOG_LINE2);
248 	file.syncString(BTN_BUY);
249 	file.syncString(BTN_SELL);
250 	file.syncString(BTN_IDENTIFY);
251 	file.syncString(BTN_FIX);
252 	file.syncString(BTN_USE);
253 	file.syncString(BTN_EQUIP);
254 	file.syncString(BTN_REMOVE);
255 	file.syncString(BTN_DISCARD);
256 	file.syncString(BTN_QUEST);
257 	file.syncString(BTN_ENCHANT);
258 	file.syncString(BTN_RECHARGE);
259 	file.syncString(BTN_GOLD);
260 	file.syncString(ITEM_BROKEN);
261 	file.syncString(ITEM_CURSED);
262 	file.syncString(ITEM_OF);
263 	file.syncStrings(BONUS_NAMES, 7);
264 	file.syncStrings(WEAPON_NAMES, 41);
265 	file.syncStrings(ARMOR_NAMES, 14);
266 	file.syncStrings(ACCESSORY_NAMES, 11);
267 	file.syncStrings(MISC_NAMES, 22);
268 	file.syncStrings(SPECIAL_NAMES, 74);
269 	file.syncStrings(ELEMENTAL_NAMES, 6);
270 	file.syncStrings(ATTRIBUTE_NAMES, 10);
271 	file.syncStrings(EFFECTIVENESS_NAMES, 7);
272 	file.syncStrings(QUEST_ITEM_NAMES, 85);
273 	file.syncStrings(QUEST_ITEM_NAMES_SWORDS, 51);
274 	file.syncNumbers((int *)WEAPON_BASE_COSTS, 35);
275 	file.syncNumbers((int *)ARMOR_BASE_COSTS, 14);
276 	file.syncNumbers((int *)ACCESSORY_BASE_COSTS, 11);
277 	file.syncNumbers((int *)MISC_MATERIAL_COSTS, 22);
278 	file.syncNumbers((int *)MISC_BASE_COSTS, 76);
279 	file.syncNumbers((int *)METAL_BASE_MULTIPLIERS, 22);
280 	file.syncNumbers((int *)ITEM_SKILL_DIVISORS, 4);
281 	file.syncNumbers((int *)RESTRICTION_OFFSETS, 4);
282 	file.syncNumbers((int *)ITEM_RESTRICTIONS, 86);
283 	file.syncString(NOT_PROFICIENT);
284 	file.syncString(NO_ITEMS_AVAILABLE);
285 	file.syncStrings(CATEGORY_NAMES, 4);
286 	file.syncString(X_FOR_THE_Y);
287 	file.syncString(X_FOR_Y);
288 	file.syncString(X_FOR_Y_GOLD);
289 	file.syncString(FMT_CHARGES);
290 	file.syncString(AVAILABLE_GOLD_COST);
291 	file.syncString(CHARGES);
292 	file.syncString(COST);
293 	file.syncStrings(ITEM_ACTIONS, 7);
294 	file.syncString(WHICH_ITEM);
295 	file.syncString(WHATS_YOUR_HURRY);
296 	file.syncString(USE_ITEM_IN_COMBAT);
297 	file.syncString(NO_SPECIAL_ABILITIES);
298 	file.syncString(CANT_CAST_WHILE_ENGAGED);
299 	file.syncString(EQUIPPED_ALL_YOU_CAN);
300 	file.syncString(REMOVE_X_TO_EQUIP_Y);
301 	file.syncString(RING);
302 	file.syncString(MEDAL);
303 	file.syncString(CANNOT_REMOVE_CURSED_ITEM);
304 	file.syncString(CANNOT_DISCARD_CURSED_ITEM);
305 	file.syncString(PERMANENTLY_DISCARD);
306 	file.syncString(BACKPACK_IS_FULL);
307 	file.syncStrings(CATEGORY_BACKPACK_IS_FULL, 4);
308 	file.syncString(BUY_X_FOR_Y_GOLD);
309 	file.syncString(SELL_X_FOR_Y_GOLD);
310 	file.syncStrings(GOLDS, 2);
311 	file.syncString(NO_NEED_OF_THIS);
312 	file.syncString(NOT_RECHARGABLE);
313 	file.syncString(SPELL_FAILED);
314 	file.syncString(NOT_ENCHANTABLE);
315 	file.syncString(ITEM_NOT_BROKEN);
316 	file.syncStrings(FIX_IDENTIFY, 2);
317 	file.syncString(FIX_IDENTIFY_GOLD);
318 	file.syncString(IDENTIFY_ITEM_MSG);
319 	file.syncString(ITEM_DETAILS);
320 	file.syncString(ALL);
321 	file.syncString(FIELD_NONE);
322 	file.syncString(DAMAGE_X_TO_Y);
323 	file.syncString(ELEMENTAL_XY_DAMAGE);
324 	file.syncString(ATTR_XY_BONUS);
325 	file.syncString(EFFECTIVE_AGAINST);
326 	file.syncString(QUESTS_DIALOG_TEXT);
327 	file.syncString(CLOUDS_OF_XEEN_LINE);
328 	file.syncString(DARKSIDE_OF_XEEN_LINE);
329 	file.syncString(SWORDS_OF_XEEN_LINE);
330 	file.syncString(NO_QUEST_ITEMS);
331 	file.syncString(NO_CURRENT_QUESTS);
332 	file.syncString(NO_AUTO_NOTES);
333 	file.syncString(QUEST_ITEMS_DATA);
334 	file.syncString(CURRENT_QUESTS_DATA);
335 	file.syncString(AUTO_NOTES_DATA);
336 	file.syncString(REST_COMPLETE);
337 	file.syncString(PARTY_IS_STARVING);
338 	file.syncString(HIT_SPELL_POINTS_RESTORED);
339 	file.syncString(TOO_DANGEROUS_TO_REST);
340 	file.syncString(SOME_CHARS_MAY_DIE);
341 	file.syncString(DISMISS_WHOM);
342 	file.syncString(CANT_DISMISS_LAST_CHAR);
343 	file.syncString(DELETE_CHAR_WITH_ELDER_WEAPON);
344 	file.syncStrings(REMOVE_DELETE, 2);
345 	file.syncString(REMOVE_OR_DELETE_WHICH);
346 	file.syncString(YOUR_PARTY_IS_FULL);
347 	file.syncString(HAS_SLAYER_SWORD);
348 	file.syncString(SURE_TO_DELETE_CHAR);
349 	file.syncString(CREATE_CHAR_DETAILS);
350 	file.syncString(NEW_CHAR_STATS);
351 	file.syncString(NAME_FOR_NEW_CHARACTER);
352 	file.syncString(SELECT_CLASS_BEFORE_SAVING);
353 	file.syncString(EXCHANGE_ATTR_WITH);
354 	file.syncNumbers((int *)NEW_CHAR_SKILLS, 10);
355 	file.syncNumbers((int *)NEW_CHAR_SKILLS_OFFSET, 10);
356 	file.syncNumbers((int *)NEW_CHAR_SKILLS_LEN, 10);
357 	file.syncNumbers((int *)NEW_CHAR_RACE_SKILLS, 10);
358 	file.syncNumbers((int *)RACE_MAGIC_RESISTENCES, 5);
359 	file.syncNumbers((int *)RACE_FIRE_RESISTENCES, 5);
360 	file.syncNumbers((int *)RACE_ELECTRIC_RESISTENCES, 5);
361 	file.syncNumbers((int *)RACE_COLD_RESISTENCES, 5);
362 	file.syncNumbers((int *)RACE_ENERGY_RESISTENCES, 5);
363 	file.syncNumbers((int *)RACE_POISON_RESISTENCES, 5);
364 	file.syncNumbers2D((int *)NEW_CHARACTER_SPELLS, 10, 4);
365 	file.syncString(COMBAT_DETAILS);
366 	file.syncString(NOT_ENOUGH_TO_CAST);
367 	file.syncStrings(SPELL_CAST_COMPONENTS, 2);
368 	file.syncString(CAST_SPELL_DETAILS);
369 	file.syncString(PARTY_FOUND);
370 	file.syncString(BACKPACKS_FULL_PRESS_KEY);
371 	file.syncString(HIT_A_KEY);
372 	file.syncString(GIVE_TREASURE_FORMATTING);
373 	file.syncStrings(FOUND, 2);
374 	file.syncString(X_FOUND_Y);
375 	file.syncString(ON_WHO);
376 	file.syncString(WHICH_ELEMENT1);
377 	file.syncString(WHICH_ELEMENT2);
378 	file.syncString(DETECT_MONSTERS);
379 	file.syncString(LLOYDS_BEACON);
380 	file.syncString(HOW_MANY_SQUARES);
381 	file.syncString(TOWN_PORTAL);
382 	file.syncString(TOWN_PORTAL_SWORDS);
383 	file.syncNumbers2D((int *)TOWN_MAP_NUMBERS, 3, 5);
384 	file.syncString(MONSTER_DETAILS);
385 	file.syncStrings(MONSTER_SPECIAL_ATTACKS, 23);
386 	file.syncString(IDENTIFY_MONSTERS);
387 	file.syncStrings(EVENT_SAMPLES, 6);
388 	file.syncString(MOONS_NOT_ALIGNED);
389 	file.syncString(AWARDS_FOR);
390 	file.syncString(AWARDS_TEXT);
391 	file.syncString(NO_AWARDS);
392 	file.syncString(WARZONE_BATTLE_MASTER);
393 	file.syncString(WARZONE_MAXED);
394 	file.syncString(WARZONE_LEVEL);
395 	file.syncString(WARZONE_HOW_MANY);
396 	file.syncString(PICKS_THE_LOCK);
397 	file.syncStrings(PICK_FORM, 2);
398 	file.syncString(UNABLE_TO_PICK_LOCK);
399 	file.syncStrings(UNABLE_TO_PICK_FORM, 2);
400 	file.syncString(CONTROL_PANEL_TEXT);
401 	file.syncString(CONTROL_PANEL_BUTTONS);
402 	file.syncString(ON);
403 	file.syncString(OFF);
404 	file.syncString(CONFIRM_QUIT);
405 	file.syncString(MR_WIZARD);
406 	file.syncString(NO_LOADING_IN_COMBAT);
407 	file.syncString(NO_SAVING_IN_COMBAT);
408 	file.syncString(QUICK_FIGHT_TEXT);
409 	file.syncStrings(QUICK_FIGHT_OPTIONS, 4);
410 	file.syncStrings(WORLD_END_TEXT, 9);
411 	file.syncString(WORLD_CONGRATULATIONS);
412 	file.syncString(WORLD_CONGRATULATIONS2);
413 	file.syncString(CLOUDS_CONGRATULATIONS1);
414 	file.syncString(CLOUDS_CONGRATULATIONS2);
415 	file.syncStrings(GOOBER, 3);
416 	file.syncStrings(MUSIC_FILES1, 5);
417 	file.syncStrings2D(&MUSIC_FILES2[0][0], 6, 7);
418 	file.syncString(DIFFICULTY_TEXT);
419 	file.syncString(SAVE_OFF_LIMITS);
420 	file.syncString(CLOUDS_INTRO1);
421 	file.syncString(DARKSIDE_ENDING1);
422 	file.syncString(DARKSIDE_ENDING2);
423 	file.syncString(PHAROAH_ENDING_TEXT1);
424 	file.syncString(PHAROAH_ENDING_TEXT2);
425 	file.syncStrings(CLOUDS_MAE_NAMES, 131);
426 	file.syncStrings(CLOUDS_MIRROR_LOCATIONS, 59);
427 	file.syncStrings(CLOUDS_MAP_NAMES, 86);
428 	file.syncStrings(CLOUDS_MONSTERS, 91);
429 	file.syncStrings(CLOUDS_SPELLS, 77);
430 
431 	ResFile keys("CONSTKEYS_", _buffer, langId);
432 	keys.syncNumber(KeyConstants.DialogsCharInfo.KEY_ITEM);
433 	keys.syncNumber(KeyConstants.DialogsCharInfo.KEY_QUICK);
434 	keys.syncNumber(KeyConstants.DialogsCharInfo.KEY_EXCHANGE);
435 
436 	keys.syncNumber(KeyConstants.DialogsControlPanel.KEY_FXON);
437 	keys.syncNumber(KeyConstants.DialogsControlPanel.KEY_MUSICON);
438 	keys.syncNumber(KeyConstants.DialogsControlPanel.KEY_LOAD);
439 	keys.syncNumber(KeyConstants.DialogsControlPanel.KEY_SAVE);
440 	keys.syncNumber(KeyConstants.DialogsControlPanel.KEY_QUIT);
441 	keys.syncNumber(KeyConstants.DialogsControlPanel.KEY_MRWIZARD);
442 
443 	keys.syncNumber(KeyConstants.DialogsCreateChar.KEY_ROLL);
444 	keys.syncNumber(KeyConstants.DialogsCreateChar.KEY_CREATE);
445 	keys.syncNumber(KeyConstants.DialogsCreateChar.KEY_MGT);
446 	keys.syncNumber(KeyConstants.DialogsCreateChar.KEY_INT);
447 	keys.syncNumber(KeyConstants.DialogsCreateChar.KEY_PER);
448 	keys.syncNumber(KeyConstants.DialogsCreateChar.KEY_END);
449 	keys.syncNumber(KeyConstants.DialogsCreateChar.KEY_SPD);
450 	keys.syncNumber(KeyConstants.DialogsCreateChar.KEY_ACY);
451 	keys.syncNumber(KeyConstants.DialogsCreateChar.KEY_LCK);
452 
453 
454 	keys.syncNumber(KeyConstants.DialogsDifficulty.KEY_ADVENTURER);
455 	keys.syncNumber(KeyConstants.DialogsDifficulty.KEY_WARRIOR);
456 
457 	keys.syncNumber(KeyConstants.DialogsItems.KEY_WEAPONS);
458 	keys.syncNumber(KeyConstants.DialogsItems.KEY_ARMOR);
459 	keys.syncNumber(KeyConstants.DialogsItems.KEY_ACCESSORY);
460 	keys.syncNumber(KeyConstants.DialogsItems.KEY_MISC);
461 	keys.syncNumber(KeyConstants.DialogsItems.KEY_ENCHANT);
462 	keys.syncNumber(KeyConstants.DialogsItems.KEY_USE);
463 	keys.syncNumber(KeyConstants.DialogsItems.KEY_BUY);
464 	keys.syncNumber(KeyConstants.DialogsItems.KEY_SELL);
465 	keys.syncNumber(KeyConstants.DialogsItems.KEY_IDENTIFY);
466 	keys.syncNumber(KeyConstants.DialogsItems.KEY_FIX);
467 	keys.syncNumber(KeyConstants.DialogsItems.KEY_EQUIP);
468 	keys.syncNumber(KeyConstants.DialogsItems.KEY_REM);
469 	keys.syncNumber(KeyConstants.DialogsItems.KEY_DISC);
470 	keys.syncNumber(KeyConstants.DialogsItems.KEY_QUEST);
471 	keys.syncNumber(KeyConstants.DialogsItems.KEY_RECHRG);
472 	keys.syncNumber(KeyConstants.DialogsItems.KEY_GOLD);
473 
474 	keys.syncNumber(KeyConstants.DialogsParty.KEY_DELETE);
475 	keys.syncNumber(KeyConstants.DialogsParty.KEY_REMOVE);
476 	keys.syncNumber(KeyConstants.DialogsParty.KEY_CREATE);
477 	keys.syncNumber(KeyConstants.DialogsParty.KEY_EXIT);
478 
479 	keys.syncNumber(KeyConstants.DialogsQuests.KEY_QUEST_ITEMS);
480 	keys.syncNumber(KeyConstants.DialogsQuests.KEY_CURRENT_QUESTS);
481 	keys.syncNumber(KeyConstants.DialogsQuests.KEY_AUTO_NOTES);
482 
483 	keys.syncNumber(KeyConstants.DialogsQuickFight.KEY_NEXT);
484 
485 	keys.syncNumber(KeyConstants.DialogsSpells.KEY_CAST);
486 	keys.syncNumber(KeyConstants.DialogsSpells.KEY_NEW);
487 	keys.syncNumber(KeyConstants.DialogsSpells.KEY_FIRE);
488 	keys.syncNumber(KeyConstants.DialogsSpells.KEY_ELEC);
489 	keys.syncNumber(KeyConstants.DialogsSpells.KEY_COLD);
490 	keys.syncNumber(KeyConstants.DialogsSpells.KEY_ACID);
491 	keys.syncNumber(KeyConstants.DialogsSpells.KEY_SET);
492 	keys.syncNumber(KeyConstants.DialogsSpells.KEY_RETURN);
493 
494 	keys.syncNumber(KeyConstants.Locations.KEY_DEP);
495 	keys.syncNumber(KeyConstants.Locations.KEY_WITH);
496 	keys.syncNumber(KeyConstants.Locations.KEY_GOLD);
497 	keys.syncNumber(KeyConstants.Locations.KEY_GEMS);
498 	keys.syncNumber(KeyConstants.Locations.KEY_BROWSE);
499 	keys.syncNumber(KeyConstants.Locations.KEY_BUY_SPELLS);
500 	keys.syncNumber(KeyConstants.Locations.KEY_SPELL_INFO);
501 	keys.syncNumber(KeyConstants.Locations.KEY_SIGN_IN);
502 	keys.syncNumber(KeyConstants.Locations.KEY_DRINK);
503 	keys.syncNumber(KeyConstants.Locations.KEY_FOOD);
504 	keys.syncNumber(KeyConstants.Locations.KEY_TIP);
505 	keys.syncNumber(KeyConstants.Locations.KEY_RUMORS);
506 	keys.syncNumber(KeyConstants.Locations.KEY_HEAL);
507 	keys.syncNumber(KeyConstants.Locations.KEY_DONATION);
508 	keys.syncNumber(KeyConstants.Locations.KEY_UNCURSE);
509 	keys.syncNumber(KeyConstants.Locations.KEY_TRAIN);
510 
511 	keys.syncNumber(KeyConstants.CloudsOfXeenMenu.KEY_START_NEW_GAME);
512 	keys.syncNumber(KeyConstants.CloudsOfXeenMenu.KEY_LOAD_GAME);
513 	keys.syncNumber(KeyConstants.CloudsOfXeenMenu.KEY_SHOW_CREDITS);
514 	keys.syncNumber(KeyConstants.CloudsOfXeenMenu.KEY_VIEW_ENDGAME);
515 }
516 
517 } // End of namespace Xeen
518