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 #ifndef XEEN_RESOURCES_H
24 #define XEEN_RESOURCES_H
25 
26 #include "common/scummsys.h"
27 #include "common/str-array.h"
28 #include "gui/debugger.h"
29 #include "xeen/files.h"
30 #include "xeen/party.h"
31 #include "xeen/spells.h"
32 
33 namespace Xeen {
34 
35 #define Res (*g_resources)
36 #define STRING_BUFFER_SIZE 32768
37 
38 class XeenEngine;
39 
40 class Resources {
41 	/**
42 	 * Derived file class with sync method aliases so that the same
43 	 * code from create_xeen can be re-used for both reading and
44 	 * writing the resource data
45 	 */
46 	class ResFile : public File {
47 	private:
48 		char *_buffer;
49 		char *_buffStart;
50 	public:
ResFile(const char * type,char * buffer,int num)51 		ResFile(const char* type, char *buffer, int num) : File(type + Common::String::format("%i", num)), _buffer(buffer), _buffStart(buffer) {}
52 
syncString(const char * & str)53 		void syncString(const char *&str) {
54 			str = _buffer;
55 			strcpy(_buffer, readString().c_str());
56 			_buffer += strlen(_buffer) + 1;
57 			assert((_buffer - _buffStart) < STRING_BUFFER_SIZE);
58 		}
syncStrings(const char ** str,int count)59 		void syncStrings(const char **str, int count) {
60 			uint tag = readUint32LE();
61 			assert(tag == MKTAG(count, 0, 0, 0));
62 			for (int idx = 0; idx < count; ++idx)
63 				syncString(str[idx]);
64 		}
syncStrings2D(const char ** str,int count1,int count2)65 		void syncStrings2D(const char **str, int count1, int count2) {
66 			uint tag = readUint32LE();
67 			assert(tag == MKTAG(count1, count2, 0, 0));
68 			for (int idx = 0; idx < count1 * count2; ++idx)
69 				syncString(str[idx]);
70 		}
syncNumber(int & val)71 		void syncNumber(int &val) {
72 			val = readSint32LE();
73 		}
syncNumbers(int * vals,int count)74 		void syncNumbers(int *vals, int count) {
75 			uint tag = readUint32LE();
76 			assert(tag == MKTAG(count, 0, 0, 0));
77 			for (int idx = 0; idx < count; ++idx)
78 				vals[idx] = readSint32LE();
79 		}
syncNumbers2D(int * vals,int count1,int count2)80 		void syncNumbers2D(int *vals, int count1, int count2) {
81 			uint tag = readUint32LE();
82 			assert(tag == MKTAG(count1, count2, 0, 0));
83 			for (int idx = 0; idx < count1 * count2; ++idx)
84 				vals[idx] = readSint32LE();
85 		}
syncNumbers3D(int * vals,int count1,int count2,int count3)86 		void syncNumbers3D(int *vals, int count1, int count2, int count3) {
87 			uint tag = readUint32LE();
88 			assert(tag == MKTAG(count1, count2, count3, 0));
89 			for (int idx = 0; idx < count1 * count2 * count3; ++idx)
90 				vals[idx] = readSint32LE();
91 		}
syncNumbers4D(int * vals,int count1,int count2,int count3,int count4)92 		void syncNumbers4D(int *vals, int count1, int count2, int count3, int count4) {
93 			uint tag = readUint32LE();
94 			assert(tag == MKTAG(count1, count2, count3, count4));
95 			for (int idx = 0; idx < count1 * count2 * count3 * count4; ++idx)
96 				vals[idx] = readSint32LE();
97 		}
syncBytes2D(byte * vals,int count1,int count2)98 		void syncBytes2D(byte *vals, int count1, int count2) {
99 			uint tag = readUint32LE();
100 			assert(tag == MKTAG(count1, count2, 0, 0));
101 			read(vals, count1 * count2);
102 		}
103 	};
104 private:
105 	char _buffer[STRING_BUFFER_SIZE];
106 private:
107 	/**
108 	 * Loads all the constants data stored in the xeen.ccs archive shipped with ScummVM
109 	 */
110 	void loadData();
111 public:
112 	SpriteResource _globalSprites;
113 	SpriteResource _logoSprites;
114 	Common::StringArray _maeNames;			// Magic and equipment names
115 	Common::StringArray _cloudsMapNames;	// Clouds of Xeen map names
116 	const char **ITEM_NAMES[4];
117 
118 	// Data loaded from xeen.ccs
119 	const char *CLOUDS_CREDITS;
120 	const char *DARK_SIDE_CREDITS;
121 	const char *SWORDS_CREDITS1;
122 	const char *SWORDS_CREDITS2;
123 	const char *OPTIONS_MENU;
124 	const char *GAME_NAMES[3];
125 	const char *THE_PARTY_NEEDS_REST;
126 	const char *WHO_WILL;
127 	const char *HOW_MUCH;
128 	const char *WHATS_THE_PASSWORD;
129 	const char *PASSWORD_INCORRECT;
130 	const char *IN_NO_CONDITION;
131 	const char *NOTHING_HERE;
132 	const char *TERRAIN_TYPES[6];
133 	const char *OUTDOORS_WALL_TYPES[16];
134 	const char *SURFACE_NAMES[16];
135 	const char *WHO_ACTIONS[32];
136 	const char *WHO_WILL_ACTIONS[4];
137 	byte SYMBOLS[20][64];
138 	byte TEXT_COLORS[40][4];
139 	byte TEXT_COLORS_STARTUP[40][4];
140 	const char *DIRECTION_TEXT_UPPER[4];
141 	const char *DIRECTION_TEXT[4];
142 	const char *RACE_NAMES[5];
143 	int RACE_HP_BONUSES[5];
144 	int RACE_SP_BONUSES[5][2];
145 	const char *CLASS_NAMES[11];
146 	int CLASS_EXP_LEVELS[10];
147 	const char *ALIGNMENT_NAMES[3];
148 	const char *SEX_NAMES[2];
149 	const char *SKILL_NAMES[18];
150 	const char *CONDITION_NAMES_M[17];
151 	const char *CONDITION_NAMES_F[17];
152 	int CONDITION_COLORS[17];
153 	const char *GOOD;
154 	const char *BLESSED;
155 	const char *POWER_SHIELD;
156 	const char *HOLY_BONUS;
157 	const char *HEROISM;
158 	const char *IN_PARTY;
159 	const char *PARTY_DETAILS;
160 	const char *PARTY_DIALOG_TEXT;
161 	int FACE_CONDITION_FRAMES[17];
162 	int CHAR_FACES_X[6];
163 	int HP_BARS_X[6];
164 	const char *NO_ONE_TO_ADVENTURE_WITH;
165 	byte DARKNESS_XLAT[3][256];
166 	const char *YOUR_ROSTER_IS_FULL;
167 	const char *PLEASE_WAIT;
168 	const char *OOPS;
169 	int SCREEN_POSITIONING_X[4][48];
170 	int SCREEN_POSITIONING_Y[4][48];
171 	int MONSTER_GRID_BITMASK[12];
172 	int INDOOR_OBJECT_X[2][12];
173 	int MAP_OBJECT_Y[2][12];
174 	int INDOOR_MONSTERS_Y[4];
175 	int OUTDOOR_OBJECT_X[2][12];
176 	int OUTDOOR_MONSTER_INDEXES[26];
177 	int OUTDOOR_MONSTERS_Y[26];
178 	int DIRECTION_ANIM_POSITIONS[4][4];
179 	byte WALL_SHIFTS[4][48];
180 	int DRAW_NUMBERS[25];
181 	int DRAW_FRAMES[25][2];
182 	int COMBAT_FLOAT_X[8];
183 	int COMBAT_FLOAT_Y[8];
184 	int MONSTER_EFFECT_FLAGS[15][8];
185 	int SPELLS_ALLOWED[3][40];
186 	int BASE_HP_BY_CLASS[10];
187 	int AGE_RANGES[10];
188 	int AGE_RANGES_ADJUST[2][10];
189 	int STAT_VALUES[24];
190 	int STAT_BONUSES[24];
191 	int ELEMENTAL_CATEGORIES[6];
192 	int ATTRIBUTE_CATEGORIES[10];
193 	int ATTRIBUTE_BONUSES[72];
194 	int ELEMENTAL_RESISTENCES[37];
195 	int ELEMENTAL_DAMAGE[37];
196 	int WEAPON_DAMAGE_BASE[35];
197 	int WEAPON_DAMAGE_MULTIPLIER[35];
198 	int METAL_DAMAGE[22];
199 	int METAL_DAMAGE_PERCENT[22];
200 	int METAL_LAC[22];
201 	int ARMOR_STRENGTHS[14];
202 	int MAKE_ITEM_ARR1[6];
203 	int MAKE_ITEM_ARR2[6][7][2];
204 	int MAKE_ITEM_ARR3[10][7][2];
205 	int MAKE_ITEM_ARR4[2][7][2];
206 	int MAKE_ITEM_ARR5[8][2];
207 	int OUTDOOR_DRAWSTRUCT_INDEXES[44];
208 	int TOWN_MAXES[2][11];
209 	const char *TOWN_ACTION_MUSIC[2][7];
210 	const char *TOWN_ACTION_SHAPES[7];
211 	int TOWN_ACTION_FILES[2][7];
212 	const char *BANK_TEXT;
213 	const char *BLACKSMITH_TEXT;
214 	const char *GUILD_NOT_MEMBER_TEXT;
215 	const char *GUILD_TEXT;
216 	const char *TAVERN_TEXT;
217 	const char *GOOD_STUFF;
218 	const char *HAVE_A_DRINK;
219 	const char *YOURE_DRUNK;
220 	int TAVERN_EXIT_LIST[2][6][5][2];
221 	const char *FOOD_AND_DRINK;
222 	const char *TEMPLE_TEXT;
223 	const char *EXPERIENCE_FOR_LEVEL;
224 	const char *TRAINING_LEARNED_ALL;
225 	const char *ELIGIBLE_FOR_LEVEL;
226 	const char *TRAINING_TEXT;
227 	const char *GOLD_GEMS;
228 	const char *GOLD_GEMS_2;
229 	const char *DEPOSIT_WITHDRAWL[2];
230 	const char *NOT_ENOUGH_X_IN_THE_Y;
231 	const char *NO_X_IN_THE_Y;
232 	const char *STAT_NAMES[16];
233 	const char *CONSUMABLE_NAMES[4];
234 	const char *CONSUMABLE_GOLD_FORMS[1];
235 	const char *CONSUMABLE_GEM_FORMS[1];
236 	const char *WHERE_NAMES[2];
237 	const char *AMOUNT;
238 	const char *FOOD_PACKS_FULL;
239 	const char *BUY_SPELLS;
240 	const char *GUILD_OPTIONS;
241 	int MISC_SPELL_INDEX[74];
242 	int SPELL_COSTS[77];
243 	int CLOUDS_GUILD_SPELLS[5][20];
244 	int DARK_SPELL_OFFSETS[3][39];
245 	int DARK_SPELL_RANGES[12][2];
246 	int SWORDS_SPELL_RANGES[12][2];
247 	int SPELL_GEM_COST[77];
248 	const char *NOT_A_SPELL_CASTER;
249 	const char *SPELLS_LEARNED_ALL;
250 	const char *SPELLS_FOR;
251 	const char *SPELL_LINES_0_TO_9;
252 	const char *SPELLS_DIALOG_SPELLS;
253 	const char *SPELL_PTS;
254 	const char *GOLD;
255 	const char *SPELL_INFO;
256 	const char *SPELL_PURCHASE;
257 	const char *MAP_TEXT;
258 	const char *LIGHT_COUNT_TEXT;
259 	const char *FIRE_RESISTENCE_TEXT;
260 	const char *ELECRICITY_RESISTENCE_TEXT;
261 	const char *COLD_RESISTENCE_TEXT;
262 	const char *POISON_RESISTENCE_TEXT;
263 	const char *CLAIRVOYANCE_TEXT;
264 	const char *LEVITATE_TEXT;
265 	const char *WALK_ON_WATER_TEXT;
266 	const char *GAME_INFORMATION;
267 	const char *WORLD_GAME_TEXT;
268 	const char *DARKSIDE_GAME_TEXT;
269 	const char *CLOUDS_GAME_TEXT;
270 	const char *SWORDS_GAME_TEXT;
271 	const char *WEEK_DAY_STRINGS[10];
272 	const char *CHARACTER_DETAILS;
273 	const char *DAYS[3];
274 	const char *PARTY_GOLD;
275 	const char *PLUS_14;
276 	const char *CHARACTER_TEMPLATE;
277 	const char *EXCHANGING_IN_COMBAT;
278 	const char *CURRENT_MAXIMUM_RATING_TEXT;
279 	const char *CURRENT_MAXIMUM_TEXT;
280 	const char *RATING_TEXT[24];
281 	const char *BORN[2];
282 	const char *AGE_TEXT;
283 	const char *LEVEL_TEXT;
284 	const char *RESISTENCES_TEXT;
285 	const char *NONE;
286 	const char *EXPERIENCE_TEXT;
287 	const char *ELIGIBLE;
288 	const char *IN_PARTY_IN_BANK;
289 	const char *FOOD_ON_HAND[3];
290 	const char *FOOD_TEXT;
291 	const char *EXCHANGE_WITH_WHOM;
292 	const char *QUICK_REF_LINE;
293 	const char *QUICK_REFERENCE;
294 	int BLACKSMITH_MAP_IDS[2][4];
295 	const char *ITEMS_DIALOG_TEXT1;
296 	const char *ITEMS_DIALOG_TEXT2;
297 	const char *ITEMS_DIALOG_LINE1;
298 	const char *ITEMS_DIALOG_LINE2;
299 	const char *BTN_BUY;
300 	const char *BTN_SELL;
301 	const char *BTN_IDENTIFY;
302 	const char *BTN_FIX;
303 	const char *BTN_USE;
304 	const char *BTN_EQUIP;
305 	const char *BTN_REMOVE;
306 	const char *BTN_DISCARD;
307 	const char *BTN_QUEST;
308 	const char *BTN_ENCHANT;
309 	const char *BTN_RECHARGE;
310 	const char *BTN_GOLD;
311 	const char *ITEM_BROKEN;
312 	const char *ITEM_CURSED;
313 	const char *ITEM_OF;
314 	const char *BONUS_NAMES[7];
315 	const char *WEAPON_NAMES[41];
316 	const char *ARMOR_NAMES[14];
317 	const char *ACCESSORY_NAMES[11];
318 	const char *MISC_NAMES[22];
319 	const char *SPECIAL_NAMES[74];
320 	const char *ELEMENTAL_NAMES[6];
321 	const char *ATTRIBUTE_NAMES[10];
322 	const char *EFFECTIVENESS_NAMES[7];
323 	const char *QUEST_ITEM_NAMES[85];
324 	const char *QUEST_ITEM_NAMES_SWORDS[51];
325 	int WEAPON_BASE_COSTS[35];
326 	int ARMOR_BASE_COSTS[14];
327 	int ACCESSORY_BASE_COSTS[11];
328 	int MISC_MATERIAL_COSTS[22];
329 	int MISC_BASE_COSTS[76];
330 	int METAL_BASE_MULTIPLIERS[22];
331 	int ITEM_SKILL_DIVISORS[4];
332 	int RESTRICTION_OFFSETS[4];
333 	int ITEM_RESTRICTIONS[86];
334 	const char *NOT_PROFICIENT;
335 	const char *NO_ITEMS_AVAILABLE;
336 	const char *CATEGORY_NAMES[4];
337 	const char *X_FOR_THE_Y;
338 	const char *X_FOR_Y;
339 	const char *X_FOR_Y_GOLD;
340 	const char *FMT_CHARGES;
341 	const char *AVAILABLE_GOLD_COST;
342 	const char *CHARGES;
343 	const char *COST;
344 	const char *ITEM_ACTIONS[7];
345 	const char *WHICH_ITEM;
346 	const char *WHATS_YOUR_HURRY;
347 	const char *USE_ITEM_IN_COMBAT;
348 	const char *NO_SPECIAL_ABILITIES;
349 	const char *CANT_CAST_WHILE_ENGAGED;
350 	const char *EQUIPPED_ALL_YOU_CAN;
351 	const char *REMOVE_X_TO_EQUIP_Y;
352 	const char *RING;
353 	const char *MEDAL;
354 	const char *CANNOT_REMOVE_CURSED_ITEM;
355 	const char *CANNOT_DISCARD_CURSED_ITEM;
356 	const char *PERMANENTLY_DISCARD;
357 	const char *BACKPACK_IS_FULL;
358 	const char *CATEGORY_BACKPACK_IS_FULL[4];
359 	const char *BUY_X_FOR_Y_GOLD;
360 	const char *SELL_X_FOR_Y_GOLD;
361 	const char *GOLDS[2];
362 	const char *NO_NEED_OF_THIS;
363 	const char *NOT_RECHARGABLE;
364 	const char *SPELL_FAILED;
365 	const char *NOT_ENCHANTABLE;
366 	const char *ITEM_NOT_BROKEN;
367 	const char *FIX_IDENTIFY[2];
368 	const char *FIX_IDENTIFY_GOLD;
369 	const char *IDENTIFY_ITEM_MSG;
370 	const char *ITEM_DETAILS;
371 	const char *ALL;
372 	const char *FIELD_NONE;
373 	const char *DAMAGE_X_TO_Y;
374 	const char *ELEMENTAL_XY_DAMAGE;
375 	const char *ATTR_XY_BONUS;
376 	const char *EFFECTIVE_AGAINST;
377 	const char *QUESTS_DIALOG_TEXT;
378 	const char *CLOUDS_OF_XEEN_LINE;
379 	const char *DARKSIDE_OF_XEEN_LINE;
380 	const char *SWORDS_OF_XEEN_LINE;
381 	const char *NO_QUEST_ITEMS;
382 	const char *NO_CURRENT_QUESTS;
383 	const char *NO_AUTO_NOTES;
384 	const char *QUEST_ITEMS_DATA;
385 	const char *CURRENT_QUESTS_DATA;
386 	const char *AUTO_NOTES_DATA;
387 	const char *REST_COMPLETE;
388 	const char *PARTY_IS_STARVING;
389 	const char *HIT_SPELL_POINTS_RESTORED;
390 	const char *TOO_DANGEROUS_TO_REST;
391 	const char *SOME_CHARS_MAY_DIE;
392 	const char *DISMISS_WHOM;
393 	const char *CANT_DISMISS_LAST_CHAR;
394 	const char *DELETE_CHAR_WITH_ELDER_WEAPON;
395 	const char *REMOVE_DELETE[2];
396 	const char *REMOVE_OR_DELETE_WHICH;
397 	const char *YOUR_PARTY_IS_FULL;
398 	const char *HAS_SLAYER_SWORD;
399 	const char *SURE_TO_DELETE_CHAR;
400 	const char *CREATE_CHAR_DETAILS;
401 	const char *NEW_CHAR_STATS;
402 	const char *NAME_FOR_NEW_CHARACTER;
403 	const char *SELECT_CLASS_BEFORE_SAVING;
404 	const char *EXCHANGE_ATTR_WITH;
405 	int NEW_CHAR_SKILLS[10];
406 	int NEW_CHAR_SKILLS_OFFSET[10];
407 	int NEW_CHAR_SKILLS_LEN[10];
408 	int NEW_CHAR_RACE_SKILLS[10];
409 	int RACE_MAGIC_RESISTENCES[5];
410 	int RACE_FIRE_RESISTENCES[5];
411 	int RACE_ELECTRIC_RESISTENCES[5];
412 	int RACE_COLD_RESISTENCES[5];
413 	int RACE_ENERGY_RESISTENCES[5];
414 	int RACE_POISON_RESISTENCES[5];
415 	int NEW_CHARACTER_SPELLS[10][4];
416 	const char *COMBAT_DETAILS;
417 	const char *NOT_ENOUGH_TO_CAST;
418 	const char *SPELL_CAST_COMPONENTS[2];
419 	const char *CAST_SPELL_DETAILS;
420 	const char *PARTY_FOUND;
421 	const char *BACKPACKS_FULL_PRESS_KEY;
422 	const char *HIT_A_KEY;
423 	const char *GIVE_TREASURE_FORMATTING;
424 	const char *FOUND[2];
425 	const char *X_FOUND_Y;
426 	const char *ON_WHO;
427 	const char *WHICH_ELEMENT1;
428 	const char *WHICH_ELEMENT2;
429 	const char *DETECT_MONSTERS;
430 	const char *LLOYDS_BEACON;
431 	const char *HOW_MANY_SQUARES;
432 	const char *TOWN_PORTAL;
433 	const char *TOWN_PORTAL_SWORDS;
434 	int TOWN_MAP_NUMBERS[3][5];
435 	const char *MONSTER_DETAILS;
436 	const char *MONSTER_SPECIAL_ATTACKS[23];
437 	const char *IDENTIFY_MONSTERS;
438 	const char *EVENT_SAMPLES[6];
439 	const char *MOONS_NOT_ALIGNED;
440 	const char *AWARDS_FOR;
441 	const char *AWARDS_TEXT;
442 	const char *NO_AWARDS;
443 	const char *WARZONE_BATTLE_MASTER;
444 	const char *WARZONE_MAXED;
445 	const char *WARZONE_LEVEL;
446 	const char *WARZONE_HOW_MANY;
447 	const char *PICKS_THE_LOCK;
448 	const char *PICK_FORM[2];
449 	const char *UNABLE_TO_PICK_LOCK;
450 	const char *UNABLE_TO_PICK_FORM[2];
451 	const char *CONTROL_PANEL_TEXT;
452 	const char *CONTROL_PANEL_BUTTONS;
453 	const char *ON;
454 	const char *OFF;
455 	const char *CONFIRM_QUIT;
456 	const char *MR_WIZARD;
457 	const char *NO_LOADING_IN_COMBAT;
458 	const char *NO_SAVING_IN_COMBAT;
459 	const char *QUICK_FIGHT_TEXT;
460 	const char *QUICK_FIGHT_OPTIONS[4];
461 	const char *WORLD_END_TEXT[9];
462 	const char *WORLD_CONGRATULATIONS;
463 	const char *WORLD_CONGRATULATIONS2;
464 	const char *CLOUDS_CONGRATULATIONS1;
465 	const char *CLOUDS_CONGRATULATIONS2;
466 	const char *GOOBER[3];
467 	const char *MUSIC_FILES1[5];
468 	const char *MUSIC_FILES2[6][7];
469 	const char *DIFFICULTY_TEXT;
470 	const char *SAVE_OFF_LIMITS;
471 	const char *CLOUDS_INTRO1;
472 	const char *DARKSIDE_ENDING1;
473 	const char *DARKSIDE_ENDING2;
474 	const char *PHAROAH_ENDING_TEXT1;
475 	const char *PHAROAH_ENDING_TEXT2;
476 	const char *CLOUDS_MAE_NAMES[131];
477 	const char *CLOUDS_MIRROR_LOCATIONS[58];
478 	const char *CLOUDS_MAP_NAMES[86];
479 	const char *CLOUDS_MONSTERS[91];
480 	const char *CLOUDS_SPELLS[77];
481 
482 	struct {
483 
484 		struct {
485 			int KEY_ITEM;
486 			int KEY_QUICK;
487 			int KEY_EXCHANGE;
488 			int KEY_ESCAPE;
489 		} DialogsCharInfo;
490 
491 		struct {
492 			int KEY_FXON;
493 			int KEY_MUSICON;
494 			int KEY_LOAD;
495 			int KEY_SAVE;
496 			int KEY_QUIT;
497 			int KEY_MRWIZARD;
498 		} DialogsControlPanel;
499 
500 		struct {
501 			int KEY_ROLL;
502 			int KEY_CREATE;
503 			int KEY_MGT;
504 			int KEY_INT;
505 			int KEY_PER;
506 			int KEY_END;
507 			int KEY_SPD;
508 			int KEY_ACY;
509 			int KEY_LCK;
510 		} DialogsCreateChar;
511 
512 		struct {
513 			int KEY_ADVENTURER;
514 			int KEY_WARRIOR;
515 		} DialogsDifficulty;
516 
517 		struct {
518 			int KEY_WEAPONS;
519 			int KEY_ARMOR;
520 			int KEY_ACCESSORY;
521 			int KEY_MISC;
522 			int KEY_ENCHANT;
523 			int KEY_USE;
524 			int KEY_BUY;
525 			int KEY_SELL;
526 			int KEY_IDENTIFY;
527 			int KEY_FIX;
528 			int KEY_EQUIP;
529 			int KEY_REM;
530 			int KEY_DISC;
531 			int KEY_QUEST;
532 			int KEY_RECHRG;
533 			int KEY_GOLD;
534 		} DialogsItems;
535 
536 		struct {
537 			int KEY_DELETE;
538 			int KEY_REMOVE;
539 			int KEY_CREATE;
540 			int KEY_EXIT;
541 		} DialogsParty;
542 
543 		struct {
544 			int KEY_QUEST_ITEMS;
545 			int KEY_CURRENT_QUESTS;
546 			int KEY_AUTO_NOTES;
547 		} DialogsQuests;
548 
549 		struct {
550 			int KEY_NEXT;
551 		} DialogsQuickFight;
552 
553 		struct {
554 			int KEY_CAST;
555 			int KEY_NEW;
556 			int KEY_FIRE;
557 			int KEY_ELEC;
558 			int KEY_COLD;
559 			int KEY_ACID;
560 			int KEY_SET;
561 			int KEY_RETURN;
562 		} DialogsSpells;
563 
564 		struct {
565 			int KEY_DEP;
566 			int KEY_WITH;
567 			int KEY_GOLD;
568 			int KEY_GEMS;
569 			int KEY_BROWSE;
570 			int KEY_BUY_SPELLS;
571 			int KEY_SPELL_INFO;
572 			int KEY_SIGN_IN;
573 			int KEY_DRINK;
574 			int KEY_FOOD;
575 			int KEY_TIP;
576 			int KEY_RUMORS;
577 			int KEY_HEAL;
578 			int KEY_DONATION;
579 			int KEY_UNCURSE;
580 			int KEY_TRAIN;
581 		} Locations;
582 
583 		struct {
584 			int KEY_START_NEW_GAME;
585 			int KEY_LOAD_GAME;
586 			int KEY_SHOW_CREDITS;
587 			int KEY_VIEW_ENDGAME;
588 		} CloudsOfXeenMenu;
589 	} KeyConstants;
590 
591 
592 public:
593 	/**
594 	 * Constructor
595 	 */
596 	Resources();
597 
598 	/**
599 	 * Initializes an instnace of the resources
600 	 */
601 	Resources *init(XeenEngine *vm);
602 };
603 
604 extern Resources *g_resources;
605 
606 } // End of namespace Xeen
607 
608 #endif	/* XEEN_RESOURCES_H */
609