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 
32 namespace MM {
33 namespace Xeen {
34 
35 #define Res (*g_resources)
36 #define STRING_BUFFER_SIZE 32768
37 
38 class XeenEngine;
39 
40 class 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  };
115 private:
116  char _buffer[STRING_BUFFER_SIZE];
117 private:
122  void loadData();
123 public:
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 
604 public:
608  Resources();
609 
613  Resources *init(XeenEngine *vm);
614 };
615 
616 extern Resources *g_resources;
617 
618 } // End of namespace Xeen
619 } // End of namespace MM
620 
621 #endif
static String format(MSVC_PRINTF const char *fmt,...) GCC_PRINTF(1
size_t strlcpy(char *dst, const char *src, size_t size)
Definition: sprites.h:52
Resources * init(XeenEngine *vm)
Definition: path.h:52
Definition: xeen.h:107
Definition: detection.h:27
#define MKTAG(a0, a1, a2, a3)
Definition: endian.h:188
Definition: file.h:36
Definition: resources.h:40