World of Might and Magic  0.2.0
Open reimplementation of Might and Magic 6 7 8 game engine
Структура ItemsTable

#include <Items.h>

+ Граф связей класса ItemsTable:

Открытые члены

void Initialize ()
 
void LoadPotions ()
 
void LoadPotionNotes ()
 
void GenerateItem (int treasure_level, unsigned int uTreasureType, ItemGen *pItem)
 
void SetSpecialBonus (ItemGen *pItem)
 
bool IsMaterialSpecial (ItemGen *pItem)
 
bool IsMaterialNonCommon (ItemGen *pItem)
 
void Release ()
 

Открытые атрибуты

int uAllItemsCount
 
NZIArray< ItemDesc, 800 > pItems
 
ItemEnchantment pEnchantments [24]
 
ItemSpecialEnchantment pSpecialEnchantments [72]
 
char field_9FC4 [5000]
 
char field_B348 [5000]
 
char field_C6D0 [5000]
 
char field_DA58 [5000]
 
char field_EDE0 [384]
 
unsigned __int16 potion_data [50][50]
 
unsigned __int16 potion_note [50][50]
 
char * pItemsTXT_Raw
 
char * pRndItemsTXT_Raw
 
char * pStdItemsTXT_Raw
 
char * pSpcItemsTXT_Raw
 
unsigned int uChanceByTreasureLvlSumm [6]
 
unsigned int uBonusChanceStandart [6]
 
unsigned int uBonusChanceSpecial [6]
 
unsigned int uBonusChanceWpSpecial [6]
 
unsigned int pEnchantmentsSumm [9]
 
BonusRange bonus_ranges [6]
 
unsigned int pSpecialEnchantmentsSumm [24]
 
unsigned int pSpecialEnchantments_count
 
char field_1179C
 
char field_1179D
 
char field_1179E
 
char field_1179F
 

Подробное описание

См. определение в файле Items.h строка 448

Методы

◆ Initialize()

void ItemsTable::Initialize ( )

См. определение в файле Items.cpp строка 181

181  {
182  std::map<std::string, ITEM_EQUIP_TYPE, ci_less> equipStatMap;
183  equipStatMap["weapon"] = EQUIP_SINGLE_HANDED;
184  equipStatMap["weapon2"] = EQUIP_TWO_HANDED;
185  equipStatMap["weapon1or2"] = EQUIP_SINGLE_HANDED;
186  equipStatMap["missile"] = EQUIP_BOW;
187  equipStatMap["bow"] = EQUIP_BOW;
188  equipStatMap["armor"] = EQUIP_ARMOUR;
189  equipStatMap["shield"] = EQUIP_SHIELD;
190  equipStatMap["helm"] = EQUIP_HELMET;
191  equipStatMap["belt"] = EQUIP_BELT;
192  equipStatMap["cloak"] = EQUIP_CLOAK;
193  equipStatMap["gauntlets"] = EQUIP_GAUNTLETS;
194  equipStatMap["boots"] = EQUIP_BOOTS;
195  equipStatMap["ring"] = EQUIP_RING;
196  equipStatMap["amulet"] = EQUIP_AMULET;
197  equipStatMap["weaponw"] = EQUIP_WAND;
198  equipStatMap["herb"] = EQUIP_REAGENT;
199  equipStatMap["reagent"] = EQUIP_REAGENT;
200  equipStatMap["bottle"] = EQUIP_POTION;
201  equipStatMap["sscroll"] = EQUIP_SPELL_SCROLL;
202  equipStatMap["book"] = EQUIP_BOOK;
203  equipStatMap["mscroll"] = EQUIP_MESSAGE_SCROLL;
204  equipStatMap["gold"] = EQUIP_GOLD;
205  equipStatMap["gem"] = EQUIP_GEM;
206 
207  std::map<std::string, PLAYER_SKILL_TYPE, ci_less> equipSkillMap;
208  equipSkillMap["staff"] = PLAYER_SKILL_STAFF;
209  equipSkillMap["sword"] = PLAYER_SKILL_SWORD;
210  equipSkillMap["dagger"] = PLAYER_SKILL_DAGGER;
211  equipSkillMap["axe"] = PLAYER_SKILL_AXE;
212  equipSkillMap["spear"] = PLAYER_SKILL_SPEAR;
213  equipSkillMap["bow"] = PLAYER_SKILL_BOW;
214  equipSkillMap["mace"] = PLAYER_SKILL_MACE;
215  equipSkillMap["blaster"] = PLAYER_SKILL_BLASTER;
216  equipSkillMap["shield"] = PLAYER_SKILL_SHIELD;
217  equipSkillMap["leather"] = PLAYER_SKILL_LEATHER;
218  equipSkillMap["chain"] = PLAYER_SKILL_CHAIN;
219  equipSkillMap["plate"] = PLAYER_SKILL_PLATE;
220  equipSkillMap["club"] = PLAYER_SKILL_CLUB;
221 
222  std::map<std::string, ITEM_MATERIAL, ci_less> materialMap;
223  materialMap["artifact"] = MATERIAL_ARTEFACT;
224  materialMap["relic"] = MATERIAL_RELIC;
225  materialMap["special"] = MATERIAL_SPECIAL;
226 
227  char* test_string;
228  int item_counter;
229 
230  pMapStats = new MapStats;
232 
236 
237  pSpellStats = new SpellStats;
239 
240  LoadPotions();
241  LoadPotionNotes();
242 
245 
248 
249  pStdItemsTXT_Raw = (char*)pEvents_LOD->LoadCompressedTexture("stditems.txt");
250  strtok(pStdItemsTXT_Raw, "\r");
251  strtok(NULL, "\r");
252  strtok(NULL, "\r");
253  strtok(NULL, "\r");
254  // Standard Bonuses by Group
255  for (int i = 0; i < 24; ++i) {
256  test_string = strtok(NULL, "\r") + 1;
257  auto tokens = Tokenize(test_string, '\t');
258  pEnchantments[i].pBonusStat = RemoveQuotes(tokens[0]);
259  pEnchantments[i].pOfName = RemoveQuotes(tokens[1]);
260  for (int j = 0; j < 9; j++) {
261  pEnchantments[i].to_item[j] = atoi(tokens[j + 2]);
262  }
263  }
264 
265  memset(&pEnchantmentsSumm, 0, 36);
266  for (int i = 0; i < 9; ++i) {
267  for (int j = 0; j < 24; ++j)
268  pEnchantmentsSumm[i] += pEnchantments[j].to_item[i];
269  }
270 
271  // Bonus range for Standard by Level
272  strtok(NULL, "\r");
273  strtok(NULL, "\r");
274  strtok(NULL, "\r");
275  strtok(NULL, "\r");
276  strtok(NULL, "\r");
277  for (int i = 0; i < 6; ++i) { // counted from 1
278  test_string = strtok(NULL, "\r") + 1;
279  auto tokens = Tokenize(test_string, '\t');
280  Assert(tokens.size() == 4, "Invalid number of tokens");
281  bonus_ranges[i].minR = atoi(tokens[2]);
282  bonus_ranges[i].maxR = atoi(tokens[3]);
283  }
284 
285  pSpcItemsTXT_Raw = (char*)pEvents_LOD->LoadCompressedTexture("spcitems.txt");
286  strtok(pSpcItemsTXT_Raw, "\r");
287  strtok(NULL, "\r");
288  strtok(NULL, "\r");
289  strtok(NULL, "\r");
290  for (int i = 0; i < 72; ++i) {
291  test_string = strtok(NULL, "\r") + 1;
292  auto tokens = Tokenize(test_string, '\t');
293  Assert(tokens.size() >= 17, "Invalid number of tokens");
296  for (int j = 0; j < 12; j++) {
297  pSpecialEnchantments[i].to_item_apply[j] = atoi(tokens[j + 2]);
298  }
299  int res;
300  res = atoi(tokens[14]);
301  int mask = 0;
302  if (!res) {
303  ++tokens[14];
304  while (*tokens[14] == ' ') // fix X 2 case
305  ++tokens[14];
306  res = atoi(tokens[14]);
307  mask = 4; // bit encode for when we need to multuply value
308  }
310  pSpecialEnchantments[i].iTreasureLevel = (tolower(tokens[15][0]) - 97) | mask;
311  }
312 
314  memset(&pSpecialEnchantmentsSumm, 0, 96);
315  for (int i = 0; i < 12; ++i) {
316  for (unsigned int j = 0; j <= pSpecialEnchantments_count; ++j)
318  pSpecialEnchantments[j].to_item_apply[i];
319  }
320 
322 
323  pItemsTXT_Raw = (char*)pEvents_LOD->LoadCompressedTexture("items.txt");
324  strtok(pItemsTXT_Raw, "\r");
325  strtok(NULL, "\r");
326  uAllItemsCount = 0;
327  item_counter = 0;
328  while (item_counter < 800) {
329  test_string = strtok(NULL, "\r") + 1;
330 
331  extern std::vector<char*> Tokenize(char* input, const char separator);
332  auto tokens = Tokenize(test_string, '\t');
333 
334  item_counter = atoi(tokens[0]);
335  uAllItemsCount = item_counter;
336  pItems[item_counter].pIconName = RemoveQuotes(tokens[1]);
337  pItems[item_counter].pName = RemoveQuotes(tokens[2]);
338  pItems[item_counter].uValue = atoi(tokens[3]);
339  auto findResult = equipStatMap.find(tokens[4]);
340  pItems[item_counter].uEquipType =
341  findResult == equipStatMap.end() ? EQUIP_NONE : findResult->second;
342  auto findResult2 = equipSkillMap.find(tokens[5]);
343  pItems[item_counter].uSkillType = findResult2 == equipSkillMap.end()
345  : findResult2->second;
346  auto tokens2 = Tokenize(tokens[6], 'd');
347  if (tokens2.size() == 2) {
348  pItems[item_counter].uDamageDice = atoi(tokens2[0]);
349  pItems[item_counter].uDamageRoll = atoi(tokens2[1]);
350  } else if (tolower(tokens2[0][0]) != 's') {
351  pItems[item_counter].uDamageDice = atoi(tokens2[0]);
352  pItems[item_counter].uDamageRoll = 1;
353  } else {
354  pItems[item_counter].uDamageDice = 0;
355  pItems[item_counter].uDamageRoll = 0;
356  }
357  pItems[item_counter].uDamageMod = atoi(tokens[7]);
358  auto findResult3 = materialMap.find(tokens[8]);
359  pItems[item_counter].uMaterial = findResult3 == materialMap.end()
361  : findResult3->second;
362  pItems[item_counter].uItemID_Rep_St = atoi(tokens[9]);
363  pItems[item_counter].pUnidentifiedName = RemoveQuotes(tokens[10]);
364  pItems[item_counter].uSpriteID = atoi(tokens[11]);
365 
366  pItems[item_counter]._additional_value = 0;
367  pItems[item_counter]._bonus_type = 0;
368  if (pItems[item_counter].uMaterial == MATERIAL_SPECIAL) {
369  for (int ii = 0; ii < 24; ++ii) {
370  if (!_stricmp(tokens[12], pEnchantments[ii].pOfName)) {
371  pItems[item_counter]._bonus_type = ii + 1;
372  break;
373  }
374  }
375  if (!pItems[item_counter]._bonus_type) {
376  for (int ii = 0; ii < 72; ++ii) {
377  if (!_stricmp(tokens[12],
378  pSpecialEnchantments[ii].pNameAdd)) {
379  pItems[item_counter]._additional_value = ii + 1;
380  }
381  }
382  }
383  }
384 
385  if ((pItems[item_counter].uMaterial == MATERIAL_SPECIAL) &&
386  (pItems[item_counter]._bonus_type)) {
387  char b_s = atoi(tokens[13]);
388  if (b_s)
389  pItems[item_counter]._bonus_strength = b_s;
390  else
391  pItems[item_counter]._bonus_strength = 1;
392  } else {
393  pItems[item_counter]._bonus_strength = 0;
394  }
395  pItems[item_counter].uEquipX = atoi(tokens[14]);
396  pItems[item_counter].uEquipY = atoi(tokens[15]);
397  pItems[item_counter].pDescription = RemoveQuotes(tokens[16]);
398  item_counter++;
399  }
400 
401  uAllItemsCount = item_counter;
402  pRndItemsTXT_Raw = (char*)pEvents_LOD->LoadCompressedTexture("rnditems.txt");
403  strtok(pRndItemsTXT_Raw, "\r");
404  strtok(NULL, "\r");
405  strtok(NULL, "\r");
406  strtok(NULL, "\r");
407  for (item_counter = 0; item_counter < 619; item_counter++) {
408  test_string = strtok(NULL, "\r") + 1;
409  auto tokens = Tokenize(test_string, '\t');
410  Assert(tokens.size() > 7, "Invalid number of tokens");
411  item_counter = atoi(tokens[0]);
412  pItems[item_counter].uChanceByTreasureLvl1 = atoi(tokens[2]);
413  pItems[item_counter].uChanceByTreasureLvl2 = atoi(tokens[3]);
414  pItems[item_counter].uChanceByTreasureLvl3 = atoi(tokens[4]);
415  pItems[item_counter].uChanceByTreasureLvl4 = atoi(tokens[5]);
416  pItems[item_counter].uChanceByTreasureLvl5 = atoi(tokens[6]);
417  pItems[item_counter].uChanceByTreasureLvl6 = atoi(tokens[7]);
418  }
419 
420  // ChanceByTreasureLvl Summ - to calculate chance
421  memset(&uChanceByTreasureLvlSumm, 0, 24);
422  for (int i = 0; i < 6; ++i) {
423  for (int j = 1; j < item_counter; ++j)
424  uChanceByTreasureLvlSumm[i] += pItems[j].uChanceByTreasureLvl[i];
425  }
426 
427  strtok(NULL, "\r");
428  strtok(NULL, "\r");
429  strtok(NULL, "\r");
430  strtok(NULL, "\r");
431  strtok(NULL, "\r");
432  for (int i = 0; i < 3; ++i) {
433  test_string = strtok(NULL, "\r") + 1;
434  auto tokens = Tokenize(test_string, '\t');
435  Assert(tokens.size() > 7, "Invalid number of tokens");
436  switch (i) {
437  case 0:
438  uBonusChanceStandart[0] = atoi(tokens[2]);
439  uBonusChanceStandart[1] = atoi(tokens[3]);
440  uBonusChanceStandart[2] = atoi(tokens[4]);
441  uBonusChanceStandart[3] = atoi(tokens[5]);
442  uBonusChanceStandart[4] = atoi(tokens[6]);
443  uBonusChanceStandart[5] = atoi(tokens[7]);
444  break;
445  case 1:
446  uBonusChanceSpecial[0] = atoi(tokens[2]);
447  uBonusChanceSpecial[1] = atoi(tokens[3]);
448  uBonusChanceSpecial[2] = atoi(tokens[4]);
449  uBonusChanceSpecial[3] = atoi(tokens[5]);
450  uBonusChanceSpecial[4] = atoi(tokens[6]);
451  uBonusChanceSpecial[5] = atoi(tokens[7]);
452  break;
453  case 2:
454  uBonusChanceWpSpecial[0] = atoi(tokens[2]);
455  uBonusChanceWpSpecial[1] = atoi(tokens[3]);
456  uBonusChanceWpSpecial[2] = atoi(tokens[4]);
457  uBonusChanceWpSpecial[3] = atoi(tokens[5]);
458  uBonusChanceWpSpecial[4] = atoi(tokens[6]);
459  uBonusChanceWpSpecial[5] = atoi(tokens[7]);
460  break;
461  }
462  }
463  free(pRndItemsTXT_Raw);
464  pRndItemsTXT_Raw = nullptr;
465 
469 }

Перекрестные ссылки bonus_ranges, EQUIP_AMULET, EQUIP_ARMOUR, EQUIP_BELT, EQUIP_BOOK, EQUIP_BOOTS, EQUIP_BOW, EQUIP_CLOAK, EQUIP_GAUNTLETS, EQUIP_GEM, EQUIP_GOLD, EQUIP_HELMET, EQUIP_MESSAGE_SCROLL, EQUIP_NONE, EQUIP_POTION, EQUIP_REAGENT, EQUIP_RING, EQUIP_SHIELD, EQUIP_SINGLE_HANDED, EQUIP_SPELL_SCROLL, EQUIP_TWO_HANDED, EQUIP_WAND, FactionTable::Initialize(), StorylineText::Initialize(), MapStats::Initialize(), MonsterStats::Initialize(), SpellStats::Initialize(), InitializeBuildingResidents(), MonsterStats::InitializePlacements(), ItemSpecialEnchantment::iTreasureLevel, ItemSpecialEnchantment::iValue, LOD::File::LoadCompressedTexture(), LoadPotionNotes(), LoadPotions(), MATERIAL_ARTEFACT, MATERIAL_COMMON, MATERIAL_RELIC, MATERIAL_SPECIAL, BonusRange::maxR, BonusRange::minR, ItemEnchantment::pBonusStat, ItemSpecialEnchantment::pBonusStatement, pEnchantments, pEnchantmentsSumm, pEvents_LOD, pFactionTable, pItems, pItemsTXT_Raw, PLAYER_SKILL_AXE, PLAYER_SKILL_BLASTER, PLAYER_SKILL_BOW, PLAYER_SKILL_CHAIN, PLAYER_SKILL_CLUB, PLAYER_SKILL_DAGGER, PLAYER_SKILL_LEATHER, PLAYER_SKILL_MACE, PLAYER_SKILL_MISC, PLAYER_SKILL_PLATE, PLAYER_SKILL_SHIELD, PLAYER_SKILL_SPEAR, PLAYER_SKILL_STAFF, PLAYER_SKILL_SWORD, pMapStats, pMonsterStats, ItemSpecialEnchantment::pNameAdd, ItemEnchantment::pOfName, ItemGen::PopulateArtifactBonusMap(), ItemGen::PopulateRegularBonusMap(), ItemGen::PopulateSpecialBonusMap(), pRndItemsTXT_Raw, pSpcItemsTXT_Raw, pSpecialEnchantments, pSpecialEnchantments_count, pSpecialEnchantmentsSumm, pSpellStats, pStdItemsTXT_Raw, pStorylineText, RemoveQuotes(), ItemEnchantment::to_item, ItemSpecialEnchantment::to_item_apply, Tokenize(), uAllItemsCount, uBonusChanceSpecial, uBonusChanceStandart, uBonusChanceWpSpecial и uChanceByTreasureLvlSumm.

Используется в Engine::SecondaryInitialization().

+ Граф вызовов:
+ Граф вызова функции:

◆ LoadPotions()

void ItemsTable::LoadPotions ( )

См. определение в файле Items.cpp строка 494

494  {
495  // char Text[90];
496  char* test_string;
497  unsigned int uRow;
498  unsigned int uColumn;
499  unsigned __int8 potion_value;
500 
501  free(pPotionNotesTXT_Raw);
502  auto tokens = Tokenize("", '\t');
503  char* pPotionsTXT_Raw = (char*)pEvents_LOD->LoadCompressedTexture("potion.txt");
504  test_string = strtok(pPotionsTXT_Raw, "\r") + 1;
505  while (test_string) {
506  tokens = Tokenize(test_string, '\t');
507  if (!strcmp(tokens[0], "222")) break;
508  test_string = strtok(NULL, "\r") + 1;
509  }
510  if (!test_string) {
511  logger->Warning(L"Error Pre-Parsing Potion Table");
512  return;
513  }
514 
515  for (uRow = 0; uRow < 50; ++uRow) {
516  if (tokens.size() < 50) {
517  logger->Warning(L"Error Parsing Potion Table at Row: %d Column: %d",
518  uRow, tokens.size());
519  return;
520  }
521  for (uColumn = 0; uColumn < 50; ++uColumn) {
522  char* currValue = tokens[uColumn + 7];
523  potion_value = atoi(currValue);
524  if (!potion_value && tolower(currValue[0]) == 'e') {
525  potion_value = atoi(currValue + 1);
526  }
527  this->potion_data[uRow][uColumn] = potion_value;
528  }
529 
530  test_string = strtok(NULL, "\r") + 1;
531  if (!test_string) {
532  logger->Warning(L"Error Parsing Potion Table at Row: %d Column: %d",
533  uRow, 0);
534  return;
535  }
536  tokens = Tokenize(test_string, '\t');
537  }
538 }

Перекрестные ссылки LOD::File::LoadCompressedTexture(), logger, pEvents_LOD, potion_data, pPotionNotesTXT_Raw, pPotionsTXT_Raw, Tokenize() и Log::Warning().

Используется в Initialize().

+ Граф вызовов:
+ Граф вызова функции:

◆ LoadPotionNotes()

void ItemsTable::LoadPotionNotes ( )

См. определение в файле Items.cpp строка 541

541  {
542  // char Text[90];
543  char* test_string;
544  unsigned int uRow;
545  unsigned int uColumn;
546  unsigned __int8 potion_note;
547 
548  free(pPotionNotesTXT_Raw);
549  auto tokens = Tokenize("", '\t');
550  char* pPotionNotesTXT_Raw = (char*)pEvents_LOD->LoadCompressedTexture("potnotes.txt");
551  test_string = strtok(pPotionNotesTXT_Raw, "\r") + 1;
552  while (test_string) {
553  tokens = Tokenize(test_string, '\t');
554  if (!strcmp(tokens[0], "222")) break;
555  test_string = strtok(NULL, "\r") + 1;
556  }
557  if (!test_string) {
558  logger->Warning(L"Error Pre-Parsing Potion Table");
559  return;
560  }
561 
562  for (uRow = 0; uRow < 50; ++uRow) {
563  if (tokens.size() < 50) {
564  logger->Warning(L"Error Parsing Potion Table at Row: %d Column: %d",
565  uRow, tokens.size());
566  return;
567  }
568  for (uColumn = 0; uColumn < 50; ++uColumn) {
569  char* currValue = tokens[uColumn + 7];
570  potion_note = atoi(currValue);
571  if (!potion_note && tolower(currValue[0]) == 'e') {
572  potion_note = atoi(currValue + 1);
573  }
574  this->potion_note[uRow][uColumn] = potion_note;
575  }
576 
577  test_string = strtok(NULL, "\r") + 1;
578  if (!test_string) {
579  logger->Warning(L"Error Parsing Potion Table at Row: %d Column: %d",
580  uRow, 0);
581  return;
582  }
583  tokens = Tokenize(test_string, '\t');
584  }
585 }

Перекрестные ссылки LOD::File::LoadCompressedTexture(), logger, pEvents_LOD, potion_note, pPotionNotesTXT_Raw, Tokenize() и Log::Warning().

Используется в Initialize().

+ Граф вызовов:
+ Граф вызова функции:

◆ GenerateItem()

void ItemsTable::GenerateItem ( int  treasure_level,
unsigned int  uTreasureType,
ItemGen pItem 
)

См. определение в файле Items.cpp строка 680

681  {
682  int treasureLevelMinus1; // ebx@3
683  int current_chance; // ebx@43
684  int tmp_chance; // ecx@47
685  int v17; // ebx@57
686  int v18; // edx@62
687  unsigned int special_chance; // edx@86
688  unsigned int v26; // edx@89
689  unsigned int v27; // eax@89
690  int v32; // ecx@91
691  int v33; // eax@91
692  // unsigned int v34; // eax@97
693  int v45; // eax@120
694  int v46; // edx@120
695  int j; // eax@121
696  int val_list[800]; // [sp+Ch] [bp-C88h]@33
697  int total_chance; // [sp+C8Ch] [bp-8h]@33
698  signed int v56; // [sp+CA0h] [bp+Ch]@55
699  int v57; // [sp+CA0h] [bp+Ch]@62
700 
701  if (!out_item) out_item = (ItemGen*)malloc(sizeof(ItemGen));
702  memset(out_item, 0, sizeof(*out_item));
703 
704  treasureLevelMinus1 = treasure_level - 1;
705  if (uTreasureType) { // generate known treasure type
706  ITEM_EQUIP_TYPE requested_equip;
707  PLAYER_SKILL_TYPE requested_skill = PLAYER_SKILL_INVALID;
708  switch (uTreasureType) {
709  case 20:
710  requested_equip = EQUIP_SINGLE_HANDED;
711  break;
712  case 21:
713  requested_equip = EQUIP_ARMOUR;
714  break;
715  case 22:
716  requested_skill = PLAYER_SKILL_MISC;
717  break;
718  case 23:
719  requested_skill = PLAYER_SKILL_SWORD;
720  break;
721  case 24:
722  requested_skill = PLAYER_SKILL_DAGGER;
723  break;
724  case 25:
725  requested_skill = PLAYER_SKILL_AXE;
726  break;
727  case 26:
728  requested_skill = PLAYER_SKILL_SPEAR;
729  break;
730  case 27:
731  requested_skill = PLAYER_SKILL_BOW;
732  break;
733  case 28:
734  requested_skill = PLAYER_SKILL_MACE;
735  break;
736  case 29:
737  requested_skill = PLAYER_SKILL_CLUB;
738  break;
739  case 30:
740  requested_skill = PLAYER_SKILL_STAFF;
741  break;
742  case 31:
743  requested_skill = PLAYER_SKILL_LEATHER;
744  break;
745  case 32:
746  requested_skill = PLAYER_SKILL_CHAIN;
747  break;
748  case 33:
749  requested_skill = PLAYER_SKILL_PLATE;
750  break;
751  case 34:
752  requested_equip = EQUIP_SHIELD;
753  break;
754  case 35:
755  requested_equip = EQUIP_HELMET;
756  break;
757  case 36:
758  requested_equip = EQUIP_BELT;
759  break;
760  case 37:
761  requested_equip = EQUIP_CLOAK;
762  break;
763  case 38:
764  requested_equip = EQUIP_GAUNTLETS;
765  break;
766  case 39:
767  requested_equip = EQUIP_BOOTS;
768  break;
769  case 40:
770  requested_equip = EQUIP_RING;
771  break;
772  case 41:
773  requested_equip = EQUIP_AMULET;
774  break;
775  case 42:
776  requested_equip = EQUIP_WAND;
777  break;
778  case 43:
779  requested_equip = EQUIP_SPELL_SCROLL;
780  break;
781  case 44:
782  requested_equip = EQUIP_POTION;
783  break;
784  case 45:
785  requested_equip = EQUIP_REAGENT;
786  break;
787  case 46:
788  requested_equip = EQUIP_GEM;
789  break;
790  default:
791  __debugbreak(); // check this condition
792  requested_equip = (ITEM_EQUIP_TYPE)(uTreasureType - 1);
793  break;
794  }
795  memset(val_list, 0, sizeof(val_list));
796  total_chance = 0;
797  j = 0;
798  // a2a = 1;
799  if (requested_skill ==
800  PLAYER_SKILL_INVALID) { // no skill for this item needed
801  for (uint i = 1; i < 500; ++i) {
802  if (pItems[i].uEquipType == requested_equip) {
803  val_list[j] = i;
804  ++j;
805  total_chance +=
806  pItems[i].uChanceByTreasureLvl[treasure_level - 1];
807  }
808  }
809  } else { // have needed skill
810  for (uint i = 1; i < 500; ++i) {
811  if (pItems[i].uSkillType == requested_skill) {
812  val_list[j] = i;
813  ++j;
814  total_chance +=
815  pItems[i].uChanceByTreasureLvl[treasure_level - 1];
816  }
817  }
818  }
819 
820  current_chance = 0;
821  if (total_chance) {
822  current_chance = rand() % total_chance + 1;
823  tmp_chance = 0;
824  j = 0;
825  while (tmp_chance < current_chance) {
826  out_item->uItemID = val_list[j];
827  tmp_chance += pItems[val_list[j]]
828  .uChanceByTreasureLvl[treasure_level - 1];
829  ++j;
830  }
831  } else {
832  out_item->uItemID = ITEM_LONGSWORD_1;
833  }
834  } else {
835  // artifact
836  if (treasureLevelMinus1 == 5) {
837  v56 = 0;
838  for (int i = 0; i < 29; ++i) v56 += pParty->pIsArtifactFound[i];
839  v17 = rand() % 29;
840  if ((rand() % 100 < 5) && !pParty->pIsArtifactFound[v17] &&
841  v56 < 13) {
842  pParty->pIsArtifactFound[v17] = 1;
843  out_item->uAttributes = 0;
844  out_item->uItemID = v17 + ITEM_ARTIFACT_PUCK;
845  SetSpecialBonus(out_item);
846  return;
847  }
848  }
849 
850  v57 = 0;
851  v18 = rand() % this->uChanceByTreasureLvlSumm[treasure_level - 1] + 1;
852  while (v57 < v18) {
853  ++out_item->uItemID;
854  v57 += pItems[out_item->uItemID]
855  .uChanceByTreasureLvl[treasureLevelMinus1];
856  }
857  }
858  if (out_item->GetItemEquipType() == EQUIP_POTION &&
859  out_item->uItemID !=
860  ITEM_POTION_BOTTLE) { // if it potion set potion spec
861  out_item->uEnchantmentType = 0;
862  for (int i = 0; i < 2; ++i)
863  out_item->uEnchantmentType += rand() % 4 + 1;
864  out_item->uEnchantmentType =
865  out_item->uEnchantmentType * treasure_level;
866  }
867 
868  if (out_item->uItemID == ITEM_SPELLBOOK_LIGHT_DIVINE_INTERVENTION &&
869  !(unsigned __int16)_449B57_test_bit(pParty->_quest_bits, 239))
870  out_item->uItemID = ITEM_SPELLBOOK_LIGHT_SUN_BURST;
871  if (pItemsTable->pItems[out_item->uItemID].uItemID_Rep_St)
872  out_item->uAttributes = 0;
873  else
874  out_item->uAttributes = 1;
875 
876  if (out_item->GetItemEquipType() != EQUIP_POTION) {
877  out_item->special_enchantment = ITEM_ENCHANTMENT_NULL;
878  out_item->uEnchantmentType = 0;
879  }
880  // try get special enhansment
881  switch (out_item->GetItemEquipType()) {
882  case EQUIP_SINGLE_HANDED:
883  case EQUIP_TWO_HANDED:
884  case EQUIP_BOW:
885  if (!uBonusChanceWpSpecial[treasureLevelMinus1]) return;
886  if ((uint)(rand() % 100) >=
887  uBonusChanceWpSpecial[treasureLevelMinus1])
888  return;
889  break;
890  case EQUIP_ARMOUR:
891  case EQUIP_SHIELD:
892  case EQUIP_HELMET:
893  case EQUIP_BELT:
894  case EQUIP_CLOAK:
895  case EQUIP_GAUNTLETS:
896  case EQUIP_BOOTS:
897  case EQUIP_RING:
898 
899  if (!uBonusChanceStandart[treasureLevelMinus1]) return;
900  special_chance = rand() % 100;
901  if (special_chance < uBonusChanceStandart[treasureLevelMinus1]) {
902  v26 = rand() %
903  pEnchantmentsSumm[out_item->GetItemEquipType() - 3] +
904  1;
905  v27 = 0;
906  while (v27 < v26) {
907  ++out_item->uEnchantmentType;
908  v27 += pEnchantments[out_item->uEnchantmentType]
909  .to_item[out_item->GetItemEquipType() - 3];
910  }
911 
912  v33 = rand() % (bonus_ranges[treasureLevelMinus1].maxR -
913  bonus_ranges[treasureLevelMinus1].minR + 1);
914  out_item->m_enchantmentStrength =
915  v33 + bonus_ranges[treasureLevelMinus1].minR;
916  v32 = out_item->uEnchantmentType - 1;
917  if (v32 == 21 || v32 == 22 ||
918  v32 == 23) // Armsmaster skill, Dodge skill, Unarmed skill
919  out_item->m_enchantmentStrength =
920  out_item->m_enchantmentStrength / 2;
921  if (out_item->m_enchantmentStrength <= 0)
922  out_item->m_enchantmentStrength = 1;
923  return;
924 
925  } else if (special_chance >=
926  uBonusChanceStandart[treasureLevelMinus1] +
927  uBonusChanceSpecial[treasureLevelMinus1]) {
928  return;
929  }
930  break;
931  case EQUIP_WAND:
932  out_item->uNumCharges = rand() % 6 + out_item->GetDamageMod() + 1;
933  out_item->uMaxCharges = out_item->uNumCharges;
934  return;
935  default:
936  return;
937  }
938 
939  j = 0;
940  int spc_sum = 0;
941  int spc;
942  memset(&val_list, 0, 3200);
943  for (unsigned int i = 0; i < pSpecialEnchantments_count; ++i) {
944  int tr_lv = (pSpecialEnchantments[i].iTreasureLevel) & 3;
945 
946  // tr_lv 0 = treasure level 3/4
947  // tr_lv 1 = treasure level 3/4/5
948  // tr_lv 2 = treasure level 4/5
949  // tr_lv 3 = treasure level 5/6
950 
951  if ((treasure_level - 1 == 2) && (tr_lv == 1 || tr_lv == 0) ||
952  (treasure_level - 1 == 3) &&
953  (tr_lv == 2 || tr_lv == 1 || tr_lv == 0) ||
954  (treasure_level - 1 == 4) &&
955  (tr_lv == 3 || tr_lv == 2 || tr_lv == 1) ||
956  (treasure_level - 1 == 5) && (tr_lv == 3)) {
957  spc = pSpecialEnchantments[i]
958  .to_item_apply[out_item->GetItemEquipType()];
959  spc_sum += spc;
960  if (spc) {
961  val_list[j++] = i;
962  }
963  }
964  }
965 
966  v46 = rand() % spc_sum + 1; //случайные значения от 1 до spc_sum
967  j = 0;
968  v45 = 0;
969  while (v45 < v46) {
970  ++j;
971  out_item->special_enchantment = (ITEM_ENCHANTMENT)val_list[j];
972  v45 += pSpecialEnchantments[val_list[j]]
973  .to_item_apply[out_item->GetItemEquipType()];
974  }
975 }

Перекрестные ссылки _449B57_test_bit(), __debugbreak(), Party::_quest_bits, bonus_ranges, EQUIP_AMULET, EQUIP_ARMOUR, EQUIP_BELT, EQUIP_BOOTS, EQUIP_BOW, EQUIP_CLOAK, EQUIP_GAUNTLETS, EQUIP_GEM, EQUIP_HELMET, EQUIP_POTION, EQUIP_REAGENT, EQUIP_RING, EQUIP_SHIELD, EQUIP_SINGLE_HANDED, EQUIP_SPELL_SCROLL, EQUIP_TWO_HANDED, EQUIP_WAND, ItemGen::GetDamageMod(), ItemGen::GetItemEquipType(), ITEM_ARTIFACT_PUCK, ITEM_ENCHANTMENT_NULL, ITEM_LONGSWORD_1, ITEM_POTION_BOTTLE, ITEM_SPELLBOOK_LIGHT_DIVINE_INTERVENTION, ITEM_SPELLBOOK_LIGHT_SUN_BURST, ItemSpecialEnchantment::iTreasureLevel, ItemGen::m_enchantmentStrength, BonusRange::maxR, BonusRange::minR, pEnchantments, pEnchantmentsSumm, Party::pIsArtifactFound, pItems, pItemsTable, PLAYER_SKILL_AXE, PLAYER_SKILL_BOW, PLAYER_SKILL_CHAIN, PLAYER_SKILL_CLUB, PLAYER_SKILL_DAGGER, PLAYER_SKILL_INVALID, PLAYER_SKILL_LEATHER, PLAYER_SKILL_MACE, PLAYER_SKILL_MISC, PLAYER_SKILL_PLATE, PLAYER_SKILL_SPEAR, PLAYER_SKILL_STAFF, PLAYER_SKILL_SWORD, pParty, pSpecialEnchantments, pSpecialEnchantments_count, SetSpecialBonus(), ItemGen::special_enchantment, ItemEnchantment::to_item, ItemSpecialEnchantment::to_item_apply, ItemGen::uAttributes, uBonusChanceSpecial, uBonusChanceStandart, uBonusChanceWpSpecial, uChanceByTreasureLvlSumm, ItemGen::uEnchantmentType, ItemGen::uItemID, ItemGen::uMaxCharges и ItemGen::uNumCharges.

Используется в Party::CreateDefaultParty(), EventProcessor(), GenerateItemsInChest(), GenerateSpecialShopItems(), GenerateStandartShopItems(), Actor::LootActor(), PartyCreationUI_LoopInternal(), Actor::SetRandomGoldIfTheresNoItem() и sub_450521_ProllyDropItemAt().

+ Граф вызовов:
+ Граф вызова функции:

◆ SetSpecialBonus()

void ItemsTable::SetSpecialBonus ( ItemGen pItem)

См. определение в файле Items.cpp строка 472

472  {
473  if (pItems[pItem->uItemID].uMaterial == MATERIAL_SPECIAL) {
474  pItem->uEnchantmentType = pItems[pItem->uItemID]._bonus_type;
475  pItem->special_enchantment =
476  (ITEM_ENCHANTMENT)pItems[pItem->uItemID]._additional_value;
477  pItem->m_enchantmentStrength = pItems[pItem->uItemID]._bonus_strength;
478  }
479 }

Перекрестные ссылки ItemGen::m_enchantmentStrength, MATERIAL_SPECIAL, pItems, ItemGen::special_enchantment, ItemGen::uEnchantmentType и ItemGen::uItemID.

Используется в Player::AddItem2(), OutdoorLocation::ArrangeSpriteObjects(), ItemGen::GenerateArtifact(), GenerateItem(), Actor::LootActor(), Chest::PlaceItemAt() и PrepareToLoadBLV().

+ Граф вызова функции:

◆ IsMaterialSpecial()

bool ItemsTable::IsMaterialSpecial ( ItemGen pItem)

См. определение в файле Items.cpp строка 482

482  {
483  return this->pItems[pItem->uItemID].uMaterial == MATERIAL_SPECIAL;
484 }

Перекрестные ссылки MATERIAL_SPECIAL, pItems и ItemGen::uItemID.

Используется в Player::GetItemsBonus().

+ Граф вызова функции:

◆ IsMaterialNonCommon()

bool ItemsTable::IsMaterialNonCommon ( ItemGen pItem)

См. определение в файле Items.cpp строка 487

487  {
488  return pItems[pItem->uItemID].uMaterial == MATERIAL_SPECIAL ||
489  pItems[pItem->uItemID].uMaterial == MATERIAL_RELIC ||
490  pItems[pItem->uItemID].uMaterial == MATERIAL_ARTEFACT;
491 }

Перекрестные ссылки MATERIAL_ARTEFACT, MATERIAL_RELIC, MATERIAL_SPECIAL, pItems и ItemGen::uItemID.

Используется в CastSpellInfoHelpers::_427E01_cast_spell(), ItemGen::GetIdentifiedName(), Player::GetItemsBonus() и ItemGen::GetValue().

+ Граф вызова функции:

◆ Release()

void ItemsTable::Release ( )

См. определение в файле Items.cpp строка 157

157  {
158  free(pMonstersTXT_Raw);
160  free(pSpcItemsTXT_Raw);
161  free(pStdItemsTXT_Raw);
162  free(pRndItemsTXT_Raw);
163  free(pItemsTXT_Raw);
164  free(pHostileTXT_Raw);
165  free(pHistoryTXT_Raw);
166  free(pPotionsTXT_Raw);
167  free(pPotionNotesTXT_Raw);
168  pMonstersTXT_Raw = nullptr;
169  pMonsterPlacementTXT_Raw = nullptr;
170  pSpcItemsTXT_Raw = nullptr;
171  pStdItemsTXT_Raw = nullptr;
172  pRndItemsTXT_Raw = nullptr;
173  pItemsTXT_Raw = nullptr;
174  pHostileTXT_Raw = nullptr;
175  pHistoryTXT_Raw = nullptr;
176  pPotionsTXT_Raw = nullptr;
177  pPotionNotesTXT_Raw = nullptr;
178 }

Перекрестные ссылки pHistoryTXT_Raw, pHostileTXT_Raw, pItemsTXT_Raw, pMonsterPlacementTXT_Raw, pMonstersTXT_Raw, pPotionNotesTXT_Raw, pPotionsTXT_Raw, pRndItemsTXT_Raw, pSpcItemsTXT_Raw и pStdItemsTXT_Raw.

Используется в Engine::Deinitialize().

+ Граф вызова функции:

Данные класса

◆ uAllItemsCount

int ItemsTable::uAllItemsCount

См. определение в файле Items.h строка 459

Используется в Initialize() и SpriteObject::sub_42F7EB_DropItemAt().

◆ pItems

NZIArray<ItemDesc, 800> ItemsTable::pItems

См. определение в файле Items.h строка 460

Используется в CastSpellInfoHelpers::_427E01_cast_spell(), Party::AddItemToParty(), OutdoorLocation::ArrangeSpriteObjects(), Player::CalculateMeleeDamageTo(), Player::CalculateMeleeDmgToEnemyWithWeapon(), Player::CalculateRangedDamageTo(), Player::CanFitItem(), Player::CanIdentify(), Chest::CanPlaceItemAt(), Player::CanRepair(), CharacterUI_DrawPaperdoll(), CreateScrollWindow(), Actor::Die(), Engine::DropHeldItem(), Application::Game::EventLoop(), GameUI_DrawItemInfo(), GenerateItem(), ItemGen::GetDamageDice(), ItemGen::GetDamageMod(), ItemGen::GetDamageRoll(), ItemGen::GetDisplayName(), ItemGen::GetIconName(), ItemGen::GetIdentifiedName(), ItemGen::GetItemEquipType(), GetItemTextureFilename(), ItemGen::GetPlayerSkillType(), ItemGen::GetValue(), Chest::GrabItem(), Initialize(), Inventory_ItemPopupAndAlchemy(), IsMaterialNonCommon(), IsMaterialSpecial(), ItemInteraction(), IndoorLocation::Load(), Actor::LootActor(), Player::OnInventoryLeftClick(), WinApiWindow::OnOSMenu(), Chest::PlaceItemAt(), PrepareToLoadBLV(), Player::PutItemArInventoryIndex(), Player::ReceiveSpecialAttackEffect(), Player::SelectPhrasesTransaction(), Mouse::SetCursorBitmapFromItemID(), SetSpecialBonus(), SimpleHouseDialog(), MapInfo::SpawnRandomTreasure(), SpellBookGenerator(), Player::StealFromActor(), Party::sub_421B2C_PlaceInInventory_or_DropPickedItem(), SpriteObject::sub_42F7EB_DropItemAt(), sub_450521_ProllyDropItemAt() и Player::WearItem().

◆ pEnchantments

ItemEnchantment ItemsTable::pEnchantments[24]

См. определение в файле Items.h строка 461

Используется в CastSpellInfoHelpers::_427E01_cast_spell(), GameUI_DrawItemInfo(), GenerateItem(), ItemGen::GetIdentifiedName() и Initialize().

◆ pSpecialEnchantments

ItemSpecialEnchantment ItemsTable::pSpecialEnchantments[72]

См. определение в файле Items.h строка 462

Используется в CastSpellInfoHelpers::_427E01_cast_spell(), GameUI_DrawItemInfo(), GenerateItem(), ItemGen::GetIdentifiedName(), ItemGen::GetValue() и Initialize().

◆ field_9FC4

char ItemsTable::field_9FC4[5000]

См. определение в файле Items.h строка 463

◆ field_B348

char ItemsTable::field_B348[5000]

См. определение в файле Items.h строка 464

◆ field_C6D0

char ItemsTable::field_C6D0[5000]

См. определение в файле Items.h строка 465

◆ field_DA58

char ItemsTable::field_DA58[5000]

См. определение в файле Items.h строка 466

◆ field_EDE0

char ItemsTable::field_EDE0[384]

См. определение в файле Items.h строка 467

◆ potion_data

unsigned __int16 ItemsTable::potion_data[50][50]

См. определение в файле Items.h строка 468

Используется в Inventory_ItemPopupAndAlchemy() и LoadPotions().

◆ potion_note

unsigned __int16 ItemsTable::potion_note[50][50]

См. определение в файле Items.h строка 469

Используется в Inventory_ItemPopupAndAlchemy() и LoadPotionNotes().

◆ pItemsTXT_Raw

char* ItemsTable::pItemsTXT_Raw

См. определение в файле Items.h строка 470

Используется в Initialize() и Release().

◆ pRndItemsTXT_Raw

char* ItemsTable::pRndItemsTXT_Raw

См. определение в файле Items.h строка 471

Используется в Initialize() и Release().

◆ pStdItemsTXT_Raw

char* ItemsTable::pStdItemsTXT_Raw

См. определение в файле Items.h строка 472

Используется в Initialize() и Release().

◆ pSpcItemsTXT_Raw

char* ItemsTable::pSpcItemsTXT_Raw

См. определение в файле Items.h строка 473

Используется в Initialize() и Release().

◆ uChanceByTreasureLvlSumm

unsigned int ItemsTable::uChanceByTreasureLvlSumm[6]

См. определение в файле Items.h строка 474

Используется в GenerateItem() и Initialize().

◆ uBonusChanceStandart

unsigned int ItemsTable::uBonusChanceStandart[6]

См. определение в файле Items.h строка 475

Используется в GenerateItem() и Initialize().

◆ uBonusChanceSpecial

unsigned int ItemsTable::uBonusChanceSpecial[6]

См. определение в файле Items.h строка 476

Используется в GenerateItem() и Initialize().

◆ uBonusChanceWpSpecial

unsigned int ItemsTable::uBonusChanceWpSpecial[6]

См. определение в файле Items.h строка 477

Используется в GenerateItem() и Initialize().

◆ pEnchantmentsSumm

unsigned int ItemsTable::pEnchantmentsSumm[9]

См. определение в файле Items.h строка 478

Используется в GenerateItem() и Initialize().

◆ bonus_ranges

BonusRange ItemsTable::bonus_ranges[6]

См. определение в файле Items.h строка 479

Используется в GenerateItem() и Initialize().

◆ pSpecialEnchantmentsSumm

unsigned int ItemsTable::pSpecialEnchantmentsSumm[24]

См. определение в файле Items.h строка 480

Используется в Initialize().

◆ pSpecialEnchantments_count

unsigned int ItemsTable::pSpecialEnchantments_count

См. определение в файле Items.h строка 481

Используется в CastSpellInfoHelpers::_427E01_cast_spell(), GenerateItem() и Initialize().

◆ field_1179C

char ItemsTable::field_1179C

См. определение в файле Items.h строка 482

◆ field_1179D

char ItemsTable::field_1179D

См. определение в файле Items.h строка 483

◆ field_1179E

char ItemsTable::field_1179E

См. определение в файле Items.h строка 484

◆ field_1179F

char ItemsTable::field_1179F

См. определение в файле Items.h строка 485


Объявления и описания членов структур находятся в файлах:
EQUIP_HELMET
@ EQUIP_HELMET
Definition: Items.h:232
ItemsTable::bonus_ranges
BonusRange bonus_ranges[6]
Definition: Items.h:479
PLAYER_SKILL_BLASTER
@ PLAYER_SKILL_BLASTER
Definition: Player.h:178
PLAYER_SKILL_DAGGER
@ PLAYER_SKILL_DAGGER
Definition: Player.h:173
mask
GLenum GLint GLuint mask
Definition: SDL_opengl_glext.h:660
RemoveQuotes
char * RemoveQuotes(char *str)
Definition: Strings.h:17
Tokenize
std::vector< char * > Tokenize(char *input, const char separator)
Definition: Strings.cpp:30
pMonsterPlacementTXT_Raw
char * pMonsterPlacementTXT_Raw
Definition: mm7_data.cpp:678
PLAYER_SKILL_STAFF
@ PLAYER_SKILL_STAFF
Definition: Player.h:171
Party::pIsArtifactFound
std::array< char, 29 > pIsArtifactFound
Definition: Party.h:298
EQUIP_CLOAK
@ EQUIP_CLOAK
Definition: Items.h:234
EQUIP_BELT
@ EQUIP_BELT
Definition: Items.h:233
ItemsTable::pRndItemsTXT_Raw
char * pRndItemsTXT_Raw
Definition: Items.h:471
ItemsTable::uBonusChanceStandart
unsigned int uBonusChanceStandart[6]
Definition: Items.h:475
pMonsterStats
struct MonsterStats * pMonsterStats
Definition: Monsters.cpp:8
ItemsTable::SetSpecialBonus
void SetSpecialBonus(ItemGen *pItem)
Definition: Items.cpp:472
MATERIAL_ARTEFACT
@ MATERIAL_ARTEFACT
Definition: Items.h:67
_449B57_test_bit
bool _449B57_test_bit(unsigned __int8 *a1, __int16 a2)
Definition: Party.cpp:1185
LOD::File::LoadCompressedTexture
void * LoadCompressedTexture(const String &pContainer, size_t *data_size=nullptr)
Definition: LOD.cpp:921
PLAYER_SKILL_AXE
@ PLAYER_SKILL_AXE
Definition: Player.h:174
EQUIP_BOOK
@ EQUIP_BOOK
Definition: Items.h:243
EQUIP_SHIELD
@ EQUIP_SHIELD
Definition: Items.h:231
EQUIP_REAGENT
@ EQUIP_REAGENT
Definition: Items.h:240
PLAYER_SKILL_CLUB
@ PLAYER_SKILL_CLUB
Definition: Player.h:208
Party::_quest_bits
unsigned __int8 _quest_bits[64]
Definition: Party.h:291
ItemsTable::LoadPotions
void LoadPotions()
Definition: Items.cpp:494
PLAYER_SKILL_BOW
@ PLAYER_SKILL_BOW
Definition: Player.h:176
EQUIP_MESSAGE_SCROLL
@ EQUIP_MESSAGE_SCROLL
Definition: Items.h:245
EQUIP_GOLD
@ EQUIP_GOLD
Definition: Items.h:246
ITEM_EQUIP_TYPE
ITEM_EQUIP_TYPE
Definition: Items.h:226
ITEM_LONGSWORD_1
@ ITEM_LONGSWORD_1
Definition: Items.h:75
ItemsTable::potion_note
unsigned __int16 potion_note[50][50]
Definition: Items.h:469
pFactionTable
struct FactionTable * pFactionTable
Definition: mm7_data.cpp:672
ItemGen::PopulateSpecialBonusMap
static void PopulateSpecialBonusMap()
Definition: Items.cpp:1036
input
GLenum GLenum GLenum input
Definition: SDL_opengl_glext.h:9377
StorylineText
Definition: StorylineTextTable.h:18
pPotionNotesTXT_Raw
char * pPotionNotesTXT_Raw
Definition: mm7_data.cpp:683
ItemGen::uEnchantmentType
int uEnchantmentType
Definition: Items.h:327
pMapStats
struct MapStats * pMapStats
Definition: mm7_data.cpp:20
EQUIP_SPELL_SCROLL
@ EQUIP_SPELL_SCROLL
Definition: Items.h:242
BonusRange::maxR
unsigned int maxR
Definition: Items.h:442
pItemsTable
struct ItemsTable * pItemsTable
Definition: Items.cpp:37
ItemGen::special_enchantment
ITEM_ENCHANTMENT special_enchantment
Definition: Items.h:330
ItemsTable::pStdItemsTXT_Raw
char * pStdItemsTXT_Raw
Definition: Items.h:472
PLAYER_SKILL_MISC
@ PLAYER_SKILL_MISC
Definition: Player.h:209
MonsterStats::InitializePlacements
void InitializePlacements()
Definition: Monsters.cpp:451
pParty
Party * pParty
Definition: Party.cpp:30
ItemEnchantment::pBonusStat
char * pBonusStat
Definition: Items.h:405
EQUIP_GEM
@ EQUIP_GEM
Definition: Items.h:247
EQUIP_ARMOUR
@ EQUIP_ARMOUR
Definition: Items.h:230
EQUIP_SINGLE_HANDED
@ EQUIP_SINGLE_HANDED
Definition: Items.h:227
StorylineText::Initialize
void Initialize()
Definition: StorylineTextTable.cpp:13
SpellStats::Initialize
void Initialize()
Definition: Spells.cpp:385
ITEM_SPELLBOOK_LIGHT_SUN_BURST
@ ITEM_SPELLBOOK_LIGHT_SUN_BURST
Definition: Items.h:151
PLAYER_SKILL_TYPE
PLAYER_SKILL_TYPE
Definition: Player.h:170
MATERIAL_SPECIAL
@ MATERIAL_SPECIAL
Definition: Items.h:69
BonusRange::minR
unsigned int minR
Definition: Items.h:441
MapStats
Definition: MapInfo.h:75
MonsterStats
Definition: Monsters.h:186
ItemGen::uItemID
int uItemID
Definition: Items.h:326
EQUIP_BOW
@ EQUIP_BOW
Definition: Items.h:229
ItemGen::PopulateRegularBonusMap
static void PopulateRegularBonusMap()
Definition: Items.cpp:1198
Log::Warning
void Warning(const wchar_t *pFormat,...)
Definition: Log.cpp:28
PLAYER_SKILL_LEATHER
@ PLAYER_SKILL_LEATHER
Definition: Player.h:180
PLAYER_SKILL_MACE
@ PLAYER_SKILL_MACE
Definition: Player.h:177
MATERIAL_COMMON
@ MATERIAL_COMMON
Definition: Items.h:66
EQUIP_POTION
@ EQUIP_POTION
Definition: Items.h:241
FactionTable
Definition: FactionTable.h:5
EQUIP_NONE
@ EQUIP_NONE
Definition: Items.h:248
pStorylineText
struct StorylineText * pStorylineText
Definition: StorylineTextTable.cpp:8
pHostileTXT_Raw
char * pHostileTXT_Raw
Definition: mm7_data.cpp:681
PLAYER_SKILL_SPEAR
@ PLAYER_SKILL_SPEAR
Definition: Player.h:175
ItemsTable::pSpecialEnchantments_count
unsigned int pSpecialEnchantments_count
Definition: Items.h:481
ITEM_ENCHANTMENT
ITEM_ENCHANTMENT
Definition: Items.h:38
EQUIP_AMULET
@ EQUIP_AMULET
Definition: Items.h:238
PLAYER_SKILL_SHIELD
@ PLAYER_SKILL_SHIELD
Definition: Player.h:179
ItemsTable::uChanceByTreasureLvlSumm
unsigned int uChanceByTreasureLvlSumm[6]
Definition: Items.h:474
pEvents_LOD
LODFile_IconsBitmaps * pEvents_LOD
Definition: LOD.cpp:10
pSpellStats
struct SpellStats * pSpellStats
Definition: Spells.cpp:32
pHistoryTXT_Raw
char * pHistoryTXT_Raw
Definition: StorylineTextTable.cpp:7
ItemSpecialEnchantment::iTreasureLevel
int iTreasureLevel
Definition: Items.h:435
ItemsTable::pSpecialEnchantments
ItemSpecialEnchantment pSpecialEnchantments[72]
Definition: Items.h:462
ItemsTable::pSpcItemsTXT_Raw
char * pSpcItemsTXT_Raw
Definition: Items.h:473
EQUIP_TWO_HANDED
@ EQUIP_TWO_HANDED
Definition: Items.h:228
SpellStats
Definition: Spells.h:189
ItemSpecialEnchantment::pNameAdd
char * pNameAdd
Definition: Items.h:432
PLAYER_SKILL_CHAIN
@ PLAYER_SKILL_CHAIN
Definition: Player.h:181
MapStats::Initialize
void Initialize()
Definition: MapInfo.cpp:47
FactionTable::Initialize
void Initialize()
Definition: FactionTable.cpp:8
ItemsTable::pSpecialEnchantmentsSumm
unsigned int pSpecialEnchantmentsSumm[24]
Definition: Items.h:480
PLAYER_SKILL_SWORD
@ PLAYER_SKILL_SWORD
Definition: Player.h:172
uint
unsigned int uint
Definition: MM7.h:4
__debugbreak
void __cdecl __debugbreak(void)
EQUIP_WAND
@ EQUIP_WAND
Definition: Items.h:239
ITEM_POTION_BOTTLE
@ ITEM_POTION_BOTTLE
Definition: Items.h:120
MonsterStats::Initialize
void Initialize()
Definition: Monsters.cpp:491
PLAYER_SKILL_INVALID
@ PLAYER_SKILL_INVALID
Definition: Player.h:210
ItemsTable::pEnchantments
ItemEnchantment pEnchantments[24]
Definition: Items.h:461
EQUIP_GAUNTLETS
@ EQUIP_GAUNTLETS
Definition: Items.h:235
ItemEnchantment::to_item
unsigned char to_item[12]
Definition: Items.h:419
ItemSpecialEnchantment::pBonusStatement
char * pBonusStatement
Definition: Items.h:431
EQUIP_RING
@ EQUIP_RING
Definition: Items.h:237
ItemEnchantment::pOfName
char * pOfName
Definition: Items.h:406
ItemGen::PopulateArtifactBonusMap
static void PopulateArtifactBonusMap()
Definition: Items.cpp:1272
pMonstersTXT_Raw
char * pMonstersTXT_Raw
Definition: mm7_data.cpp:677
ItemSpecialEnchantment::iValue
int iValue
Definition: Items.h:434
InitializeBuildingResidents
void InitializeBuildingResidents()
Definition: UIHouses.cpp:3715
ItemGen
Definition: Items.h:263
ITEM_ENCHANTMENT_NULL
@ ITEM_ENCHANTMENT_NULL
Definition: Items.h:39
logger
Log * logger
Definition: IocContainer.cpp:47
res
GLuint res
Definition: SDL_opengl_glext.h:7940
ItemGen::m_enchantmentStrength
int m_enchantmentStrength
Definition: Items.h:328
ItemsTable::potion_data
unsigned __int16 potion_data[50][50]
Definition: Items.h:468
ItemsTable::pEnchantmentsSumm
unsigned int pEnchantmentsSumm[9]
Definition: Items.h:478
ItemsTable::uBonusChanceWpSpecial
unsigned int uBonusChanceWpSpecial[6]
Definition: Items.h:477
ITEM_SPELLBOOK_LIGHT_DIVINE_INTERVENTION
@ ITEM_SPELLBOOK_LIGHT_DIVINE_INTERVENTION
Definition: Items.h:152
EQUIP_BOOTS
@ EQUIP_BOOTS
Definition: Items.h:236
ItemsTable::LoadPotionNotes
void LoadPotionNotes()
Definition: Items.cpp:541
ItemsTable::uBonusChanceSpecial
unsigned int uBonusChanceSpecial[6]
Definition: Items.h:476
ItemsTable::pItemsTXT_Raw
char * pItemsTXT_Raw
Definition: Items.h:470
ItemsTable::uAllItemsCount
int uAllItemsCount
Definition: Items.h:459
pPotionsTXT_Raw
char * pPotionsTXT_Raw
Definition: mm7_data.cpp:682
ItemsTable::pItems
NZIArray< ItemDesc, 800 > pItems
Definition: Items.h:460
MATERIAL_RELIC
@ MATERIAL_RELIC
Definition: Items.h:68
PLAYER_SKILL_PLATE
@ PLAYER_SKILL_PLATE
Definition: Player.h:182
ItemSpecialEnchantment::to_item_apply
char to_item_apply[12]
Definition: Items.h:433
ITEM_ARTIFACT_PUCK
@ ITEM_ARTIFACT_PUCK
Definition: Items.h:153