22 #ifndef XEEN_RESOURCES_H 23 #define XEEN_RESOURCES_H 25 #include "common/scummsys.h" 26 #include "common/str-array.h" 27 #include "gui/debugger.h" 28 #include "xeen/files.h" 29 #include "xeen/party.h" 30 #include "xeen/spells.h" 34 #define Res (*g_resources) 35 #define STRING_BUFFER_SIZE 32768 45 class ResFile :
public File {
50 ResFile(
const char* type,
char *buffer,
int num) :
File(type +
Common::String::format(
"%i", num)), _buffer(buffer), _buffStart(buffer) {}
52 void syncString(
const char *&str) {
54 strcpy(_buffer, readString().c_str());
55 _buffer += strlen(_buffer) + 1;
56 assert((_buffer - _buffStart) < STRING_BUFFER_SIZE);
58 void syncStrings(
const char **str,
int count) {
59 uint tag = readUint32LE();
60 assert(tag ==
MKTAG(count, 0, 0, 0));
61 for (
int idx = 0; idx < count; ++idx)
64 void syncStrings2D(
const char **str,
int count1,
int count2) {
65 uint tag = readUint32LE();
66 assert(tag ==
MKTAG(count1, count2, 0, 0));
67 for (
int idx = 0; idx < count1 * count2; ++idx)
70 void syncNumber(
int &val) {
73 void syncNumbers(
int *vals,
int count) {
74 uint tag = readUint32LE();
75 assert(tag ==
MKTAG(count, 0, 0, 0));
76 for (
int idx = 0; idx < count; ++idx)
77 vals[idx] = readSint32LE();
79 void syncNumbers2D(
int *vals,
int count1,
int count2) {
80 uint tag = readUint32LE();
81 assert(tag ==
MKTAG(count1, count2, 0, 0));
82 for (
int idx = 0; idx < count1 * count2; ++idx)
83 vals[idx] = readSint32LE();
85 void syncNumbers3D(
int *vals,
int count1,
int count2,
int count3) {
86 uint tag = readUint32LE();
87 assert(tag ==
MKTAG(count1, count2, count3, 0));
88 for (
int idx = 0; idx < count1 * count2 * count3; ++idx)
89 vals[idx] = readSint32LE();
91 void syncNumbers4D(
int *vals,
int count1,
int count2,
int count3,
int count4) {
92 uint tag = readUint32LE();
93 assert(tag ==
MKTAG(count1, count2, count3, count4));
94 for (
int idx = 0; idx < count1 * count2 * count3 * count4; ++idx)
95 vals[idx] = readSint32LE();
97 void syncBytes2D(byte *vals,
int count1,
int count2) {
98 uint tag = readUint32LE();
99 assert(tag ==
MKTAG(count1, count2, 0, 0));
100 read(vals, count1 * count2);
104 char _buffer[STRING_BUFFER_SIZE];
115 const char **ITEM_NAMES[4];
118 const char *CLOUDS_CREDITS;
119 const char *DARK_SIDE_CREDITS;
120 const char *SWORDS_CREDITS1;
121 const char *SWORDS_CREDITS2;
122 const char *OPTIONS_MENU;
123 const char *GAME_NAMES[3];
124 const char *THE_PARTY_NEEDS_REST;
125 const char *WHO_WILL;
126 const char *HOW_MUCH;
127 const char *WHATS_THE_PASSWORD;
128 const char *PASSWORD_INCORRECT;
129 const char *IN_NO_CONDITION;
130 const char *NOTHING_HERE;
131 const char *TERRAIN_TYPES[6];
132 const char *OUTDOORS_WALL_TYPES[16];
133 const char *SURFACE_NAMES[16];
134 const char *WHO_ACTIONS[32];
135 const char *WHO_WILL_ACTIONS[4];
136 byte SYMBOLS[20][64];
137 byte TEXT_COLORS[40][4];
138 byte TEXT_COLORS_STARTUP[40][4];
139 const char *DIRECTION_TEXT_UPPER[4];
140 const char *DIRECTION_TEXT[4];
141 const char *RACE_NAMES[5];
142 int RACE_HP_BONUSES[5];
143 int RACE_SP_BONUSES[5][2];
144 const char *CLASS_NAMES[11];
145 int CLASS_EXP_LEVELS[10];
146 const char *ALIGNMENT_NAMES[3];
147 const char *SEX_NAMES[2];
148 const char *SKILL_NAMES[18];
149 const char *CONDITION_NAMES_M[17];
150 const char *CONDITION_NAMES_F[17];
151 int CONDITION_COLORS[17];
154 const char *POWER_SHIELD;
155 const char *HOLY_BONUS;
157 const char *IN_PARTY;
158 const char *PARTY_DETAILS;
159 const char *PARTY_DIALOG_TEXT;
160 int FACE_CONDITION_FRAMES[17];
163 const char *NO_ONE_TO_ADVENTURE_WITH;
164 byte DARKNESS_XLAT[3][256];
165 const char *YOUR_ROSTER_IS_FULL;
166 const char *PLEASE_WAIT;
168 int SCREEN_POSITIONING_X[4][48];
169 int SCREEN_POSITIONING_Y[4][48];
170 int MONSTER_GRID_BITMASK[12];
171 int INDOOR_OBJECT_X[2][12];
172 int MAP_OBJECT_Y[2][12];
173 int INDOOR_MONSTERS_Y[4];
174 int OUTDOOR_OBJECT_X[2][12];
175 int OUTDOOR_MONSTER_INDEXES[26];
176 int OUTDOOR_MONSTERS_Y[26];
177 int DIRECTION_ANIM_POSITIONS[4][4];
178 byte WALL_SHIFTS[4][48];
179 int DRAW_NUMBERS[25];
180 int DRAW_FRAMES[25][2];
181 int COMBAT_FLOAT_X[8];
182 int COMBAT_FLOAT_Y[8];
183 int MONSTER_EFFECT_FLAGS[15][8];
184 int SPELLS_ALLOWED[3][40];
185 int BASE_HP_BY_CLASS[10];
187 int AGE_RANGES_ADJUST[2][10];
189 int STAT_BONUSES[24];
190 int ELEMENTAL_CATEGORIES[6];
191 int ATTRIBUTE_CATEGORIES[10];
192 int ATTRIBUTE_BONUSES[72];
193 int ELEMENTAL_RESISTENCES[37];
194 int ELEMENTAL_DAMAGE[37];
195 int WEAPON_DAMAGE_BASE[35];
196 int WEAPON_DAMAGE_MULTIPLIER[35];
197 int METAL_DAMAGE[22];
198 int METAL_DAMAGE_PERCENT[22];
200 int ARMOR_STRENGTHS[14];
201 int MAKE_ITEM_ARR1[6];
202 int MAKE_ITEM_ARR2[6][7][2];
203 int MAKE_ITEM_ARR3[10][7][2];
204 int MAKE_ITEM_ARR4[2][7][2];
205 int MAKE_ITEM_ARR5[8][2];
206 int OUTDOOR_DRAWSTRUCT_INDEXES[44];
207 int TOWN_MAXES[2][11];
208 const char *TOWN_ACTION_MUSIC[2][7];
209 const char *TOWN_ACTION_SHAPES[7];
210 int TOWN_ACTION_FILES[2][7];
211 const char *BANK_TEXT;
212 const char *BLACKSMITH_TEXT;
213 const char *GUILD_NOT_MEMBER_TEXT;
214 const char *GUILD_TEXT;
215 const char *TAVERN_TEXT;
216 const char *GOOD_STUFF;
217 const char *HAVE_A_DRINK;
218 const char *YOURE_DRUNK;
219 int TAVERN_EXIT_LIST[2][6][5][2];
220 const char *FOOD_AND_DRINK;
221 const char *TEMPLE_TEXT;
222 const char *EXPERIENCE_FOR_LEVEL;
223 const char *TRAINING_LEARNED_ALL;
224 const char *ELIGIBLE_FOR_LEVEL;
225 const char *TRAINING_TEXT;
226 const char *GOLD_GEMS;
227 const char *GOLD_GEMS_2;
228 const char *DEPOSIT_WITHDRAWL[2];
229 const char *NOT_ENOUGH_X_IN_THE_Y;
230 const char *NO_X_IN_THE_Y;
231 const char *STAT_NAMES[16];
232 const char *CONSUMABLE_NAMES[4];
233 const char *CONSUMABLE_GOLD_FORMS[1];
234 const char *CONSUMABLE_GEM_FORMS[1];
235 const char *WHERE_NAMES[2];
237 const char *FOOD_PACKS_FULL;
238 const char *BUY_SPELLS;
239 const char *GUILD_OPTIONS;
240 int MISC_SPELL_INDEX[74];
242 int CLOUDS_GUILD_SPELLS[5][20];
243 int DARK_SPELL_OFFSETS[3][39];
244 int DARK_SPELL_RANGES[12][2];
245 int SWORDS_SPELL_RANGES[12][2];
246 int SPELL_GEM_COST[77];
247 const char *NOT_A_SPELL_CASTER;
248 const char *SPELLS_LEARNED_ALL;
249 const char *SPELLS_FOR;
250 const char *SPELL_LINES_0_TO_9;
251 const char *SPELLS_DIALOG_SPELLS;
252 const char *SPELL_PTS;
254 const char *SPELL_INFO;
255 const char *SPELL_PURCHASE;
256 const char *MAP_TEXT;
257 const char *LIGHT_COUNT_TEXT;
258 const char *FIRE_RESISTENCE_TEXT;
259 const char *ELECRICITY_RESISTENCE_TEXT;
260 const char *COLD_RESISTENCE_TEXT;
261 const char *POISON_RESISTENCE_TEXT;
262 const char *CLAIRVOYANCE_TEXT;
263 const char *LEVITATE_TEXT;
264 const char *WALK_ON_WATER_TEXT;
265 const char *GAME_INFORMATION;
266 const char *WORLD_GAME_TEXT;
267 const char *DARKSIDE_GAME_TEXT;
268 const char *CLOUDS_GAME_TEXT;
269 const char *SWORDS_GAME_TEXT;
270 const char *WEEK_DAY_STRINGS[10];
271 const char *CHARACTER_DETAILS;
273 const char *PARTY_GOLD;
275 const char *CHARACTER_TEMPLATE;
276 const char *EXCHANGING_IN_COMBAT;
277 const char *CURRENT_MAXIMUM_RATING_TEXT;
278 const char *CURRENT_MAXIMUM_TEXT;
279 const char *RATING_TEXT[24];
281 const char *AGE_TEXT;
282 const char *LEVEL_TEXT;
283 const char *RESISTENCES_TEXT;
285 const char *EXPERIENCE_TEXT;
286 const char *ELIGIBLE;
287 const char *IN_PARTY_IN_BANK;
288 const char *FOOD_ON_HAND[3];
289 const char *FOOD_TEXT;
290 const char *EXCHANGE_WITH_WHOM;
291 const char *QUICK_REF_LINE;
292 const char *QUICK_REFERENCE;
293 int BLACKSMITH_MAP_IDS[2][4];
294 const char *ITEMS_DIALOG_TEXT1;
295 const char *ITEMS_DIALOG_TEXT2;
296 const char *ITEMS_DIALOG_LINE1;
297 const char *ITEMS_DIALOG_LINE2;
299 const char *BTN_SELL;
300 const char *BTN_IDENTIFY;
303 const char *BTN_EQUIP;
304 const char *BTN_REMOVE;
305 const char *BTN_DISCARD;
306 const char *BTN_QUEST;
307 const char *BTN_ENCHANT;
308 const char *BTN_RECHARGE;
309 const char *BTN_GOLD;
310 const char *ITEM_BROKEN;
311 const char *ITEM_CURSED;
313 const char *BONUS_NAMES[7];
314 const char *WEAPON_NAMES[41];
315 const char *ARMOR_NAMES[14];
316 const char *ACCESSORY_NAMES[11];
317 const char *MISC_NAMES[22];
318 const char *SPECIAL_NAMES[74];
319 const char *ELEMENTAL_NAMES[6];
320 const char *ATTRIBUTE_NAMES[10];
321 const char *EFFECTIVENESS_NAMES[7];
322 const char *QUEST_ITEM_NAMES[85];
323 const char *QUEST_ITEM_NAMES_SWORDS[51];
324 int WEAPON_BASE_COSTS[35];
325 int ARMOR_BASE_COSTS[14];
326 int ACCESSORY_BASE_COSTS[11];
327 int MISC_MATERIAL_COSTS[22];
328 int MISC_BASE_COSTS[76];
329 int METAL_BASE_MULTIPLIERS[22];
330 int ITEM_SKILL_DIVISORS[4];
331 int RESTRICTION_OFFSETS[4];
332 int ITEM_RESTRICTIONS[86];
333 const char *NOT_PROFICIENT;
334 const char *NO_ITEMS_AVAILABLE;
335 const char *CATEGORY_NAMES[4];
336 const char *X_FOR_THE_Y;
338 const char *X_FOR_Y_GOLD;
339 const char *FMT_CHARGES;
340 const char *AVAILABLE_GOLD_COST;
343 const char *ITEM_ACTIONS[7];
344 const char *WHICH_ITEM;
345 const char *WHATS_YOUR_HURRY;
346 const char *USE_ITEM_IN_COMBAT;
347 const char *NO_SPECIAL_ABILITIES;
348 const char *CANT_CAST_WHILE_ENGAGED;
349 const char *EQUIPPED_ALL_YOU_CAN;
350 const char *REMOVE_X_TO_EQUIP_Y;
353 const char *CANNOT_REMOVE_CURSED_ITEM;
354 const char *CANNOT_DISCARD_CURSED_ITEM;
355 const char *PERMANENTLY_DISCARD;
356 const char *BACKPACK_IS_FULL;
357 const char *CATEGORY_BACKPACK_IS_FULL[4];
358 const char *BUY_X_FOR_Y_GOLD;
359 const char *SELL_X_FOR_Y_GOLD;
360 const char *GOLDS[2];
361 const char *NO_NEED_OF_THIS;
362 const char *NOT_RECHARGABLE;
363 const char *SPELL_FAILED;
364 const char *NOT_ENCHANTABLE;
365 const char *ITEM_NOT_BROKEN;
366 const char *FIX_IDENTIFY[2];
367 const char *FIX_IDENTIFY_GOLD;
368 const char *IDENTIFY_ITEM_MSG;
369 const char *ITEM_DETAILS;
371 const char *FIELD_NONE;
372 const char *DAMAGE_X_TO_Y;
373 const char *ELEMENTAL_XY_DAMAGE;
374 const char *ATTR_XY_BONUS;
375 const char *EFFECTIVE_AGAINST;
376 const char *QUESTS_DIALOG_TEXT;
377 const char *CLOUDS_OF_XEEN_LINE;
378 const char *DARKSIDE_OF_XEEN_LINE;
379 const char *SWORDS_OF_XEEN_LINE;
380 const char *NO_QUEST_ITEMS;
381 const char *NO_CURRENT_QUESTS;
382 const char *NO_AUTO_NOTES;
383 const char *QUEST_ITEMS_DATA;
384 const char *CURRENT_QUESTS_DATA;
385 const char *AUTO_NOTES_DATA;
386 const char *REST_COMPLETE;
387 const char *PARTY_IS_STARVING;
388 const char *HIT_SPELL_POINTS_RESTORED;
389 const char *TOO_DANGEROUS_TO_REST;
390 const char *SOME_CHARS_MAY_DIE;
391 const char *DISMISS_WHOM;
392 const char *CANT_DISMISS_LAST_CHAR;
393 const char *DELETE_CHAR_WITH_ELDER_WEAPON;
394 const char *REMOVE_DELETE[2];
395 const char *REMOVE_OR_DELETE_WHICH;
396 const char *YOUR_PARTY_IS_FULL;
397 const char *HAS_SLAYER_SWORD;
398 const char *SURE_TO_DELETE_CHAR;
399 const char *CREATE_CHAR_DETAILS;
400 const char *NEW_CHAR_STATS;
401 const char *NAME_FOR_NEW_CHARACTER;
402 const char *SELECT_CLASS_BEFORE_SAVING;
403 const char *EXCHANGE_ATTR_WITH;
404 int NEW_CHAR_SKILLS[10];
405 int NEW_CHAR_SKILLS_OFFSET[10];
406 int NEW_CHAR_SKILLS_LEN[10];
407 int NEW_CHAR_RACE_SKILLS[10];
408 int RACE_MAGIC_RESISTENCES[5];
409 int RACE_FIRE_RESISTENCES[5];
410 int RACE_ELECTRIC_RESISTENCES[5];
411 int RACE_COLD_RESISTENCES[5];
412 int RACE_ENERGY_RESISTENCES[5];
413 int RACE_POISON_RESISTENCES[5];
414 int NEW_CHARACTER_SPELLS[10][4];
415 const char *COMBAT_DETAILS;
416 const char *NOT_ENOUGH_TO_CAST;
417 const char *SPELL_CAST_COMPONENTS[2];
418 const char *CAST_SPELL_DETAILS;
419 const char *PARTY_FOUND;
420 const char *BACKPACKS_FULL_PRESS_KEY;
421 const char *HIT_A_KEY;
422 const char *GIVE_TREASURE_FORMATTING;
423 const char *FOUND[2];
424 const char *X_FOUND_Y;
426 const char *WHICH_ELEMENT1;
427 const char *WHICH_ELEMENT2;
428 const char *DETECT_MONSTERS;
429 const char *LLOYDS_BEACON;
430 const char *HOW_MANY_SQUARES;
431 const char *TOWN_PORTAL;
432 const char *TOWN_PORTAL_SWORDS;
433 int TOWN_MAP_NUMBERS[3][5];
434 const char *MONSTER_DETAILS;
435 const char *MONSTER_SPECIAL_ATTACKS[23];
436 const char *IDENTIFY_MONSTERS;
437 const char *EVENT_SAMPLES[6];
438 const char *MOONS_NOT_ALIGNED;
439 const char *AWARDS_FOR;
440 const char *AWARDS_TEXT;
441 const char *NO_AWARDS;
442 const char *WARZONE_BATTLE_MASTER;
443 const char *WARZONE_MAXED;
444 const char *WARZONE_LEVEL;
445 const char *WARZONE_HOW_MANY;
446 const char *PICKS_THE_LOCK;
447 const char *PICK_FORM[2];
448 const char *UNABLE_TO_PICK_LOCK;
449 const char *UNABLE_TO_PICK_FORM[2];
450 const char *CONTROL_PANEL_TEXT;
451 const char *CONTROL_PANEL_BUTTONS;
454 const char *CONFIRM_QUIT;
455 const char *MR_WIZARD;
456 const char *NO_LOADING_IN_COMBAT;
457 const char *NO_SAVING_IN_COMBAT;
458 const char *QUICK_FIGHT_TEXT;
459 const char *QUICK_FIGHT_OPTIONS[4];
460 const char *WORLD_END_TEXT[9];
461 const char *WORLD_CONGRATULATIONS;
462 const char *WORLD_CONGRATULATIONS2;
463 const char *CLOUDS_CONGRATULATIONS1;
464 const char *CLOUDS_CONGRATULATIONS2;
465 const char *GOOBER[3];
466 const char *MUSIC_FILES1[5];
467 const char *MUSIC_FILES2[6][7];
468 const char *DIFFICULTY_TEXT;
469 const char *SAVE_OFF_LIMITS;
470 const char *CLOUDS_INTRO1;
471 const char *DARKSIDE_ENDING1;
472 const char *DARKSIDE_ENDING2;
473 const char *PHAROAH_ENDING_TEXT1;
474 const char *PHAROAH_ENDING_TEXT2;
475 const char *CLOUDS_MAE_NAMES[131];
476 const char *CLOUDS_MIRROR_LOCATIONS[58];
477 const char *CLOUDS_MAP_NAMES[86];
478 const char *CLOUDS_MONSTERS[91];
479 const char *CLOUDS_SPELLS[77];
497 } DialogsControlPanel;
544 int KEY_CURRENT_QUESTS;
583 int KEY_START_NEW_GAME;
585 int KEY_SHOW_CREDITS;
586 int KEY_VIEW_ENDGAME;
static String format(MSVC_PRINTF const char *fmt,...) GCC_PRINTF(1
#define MKTAG(a0, a1, a2, a3)
Definition: endian.h:188
Definition: resources.h:39
Resources * init(XeenEngine *vm)
Definition: character.h:33