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