World of Might and Magic  0.2.0
Open reimplementation of Might and Magic 6 7 8 game engine
Файл Spells.cpp

См. исходные тексты.

Определения типов

using EngineIoc = Engine_::IocContainer
 

Функции

void EventCastSpell (int uSpellID, int uSkillLevel, int uSkill, int fromx, int fromy, int fromz, int tox, int toy, int toz)
 
bool sub_427769_isSpellQuickCastableOnShiftClick (unsigned int uSpellID)
 
int _43AFE3_calc_spell_damage (int spellId, int spellLevel, signed int skillMastery, int currentHp)
 

Переменные

SpellFxRendererspell_fx_renderer = EngineIoc::ResolveSpellFxRenderer()
 
std::array< TownPortalData, 6 > TownPortalList
 
struct SpellStatspSpellStats = nullptr
 
std::array< stru324_spell_id_to_sprite_mapping, 103 > spell_sprite_mapping
 
std::array< SpellData, 100 > pSpellDatas
 
std::array< SPELL_TYPE, 25 > wand_spell_ids
 
std::array< std::array< struct SpellBookIconPos, 12 >, 9 > pIconPos
 

Типы

◆ EngineIoc

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

Функции

◆ EventCastSpell()

void EventCastSpell ( int  uSpellID,
int  uSkillLevel,
int  uSkill,
int  fromx,
int  fromy,
int  fromz,
int  tox,
int  toy,
int  toz 
)

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

430  {
431  unsigned int skillMasteryPlusOne = uSkillLevel + 1;
432  Assert(skillMasteryPlusOne > 0 && skillMasteryPlusOne <= 4,
433  "Invalid mastery level");
434 
435  int64_t x_coord_delta = 0;
436  int64_t y_coord_delta = 0;
437  int64_t z_coord_delta = 0;
438  if (tox || toy || toz) {
439  x_coord_delta = tox - fromx;
440  y_coord_delta = toy - fromy;
441  z_coord_delta = toz - fromz;
442  } else {
443  x_coord_delta = pParty->vPosition.x - fromx;
444  y_coord_delta = pParty->vPosition.y - fromy;
445  z_coord_delta = (pParty->vPosition.z + pParty->sEyelevel) - fromz;
446  }
447 
448  int yaw = 0;
449  int pitch = 0;
450  double distance_to_target = sqrt((long double)(
451  x_coord_delta * x_coord_delta + y_coord_delta * y_coord_delta +
452  z_coord_delta * z_coord_delta));
453  if (distance_to_target <= 1.0) {
454  distance_to_target = 1;
455  } else {
456  int64_t ySquared = y_coord_delta * y_coord_delta;
457  int64_t xSquared = x_coord_delta * x_coord_delta;
458  int xy_distance = (int)sqrt((long double)(xSquared + ySquared));
459  yaw = stru_5C6E00->Atan2((int)x_coord_delta, (int)y_coord_delta);
460  pitch = stru_5C6E00->Atan2(xy_distance, (int)z_coord_delta);
461  }
462 
463  SpriteObject spell_sprites;
464 
465  switch (uSpellID) {
467  case SPELL_FIRE_FIREBALL:
472  case SPELL_EARTH_BLADES:
475  case SPELL_AIR_SPARKS:
477  spell_sprites.uType = spell_sprite_mapping[uSpellID].uSpriteType;
478  spell_sprites.containing_item.Reset();
479  spell_sprites.spell_id = uSpellID;
480  spell_sprites.spell_level = uSkill;
481  spell_sprites.spell_skill = skillMasteryPlusOne;
482  spell_sprites.uObjectDescID = pObjectList->ObjectIDByItemID(spell_sprites.uType);
483  spell_sprites.vPosition.x = fromx;
484  spell_sprites.vPosition.y = fromy;
485  spell_sprites.vPosition.z = fromz;
486  spell_sprites.uAttributes = 16;
487  spell_sprites.uSectorID = pIndoor->GetSector(fromx, fromy, fromz);
488  spell_sprites.field_60_distance_related_prolly_lod = distance_to_target;
489  spell_sprites.uSpriteFrameID = 0;
490  spell_sprites.spell_caster_pid = 8000 | OBJECT_Item;
491  spell_sprites.uSoundID = 0;
492  break;
493  }
494 
495  int spell_length = 0;
496  GameTime spell_expire_time;
497  int spell_power;
498  int launch_angle;
499  int launch_speed;
500  int spell_num_objects = 0;
501  int spell_spray_arc;
502  int spell_spray_angles;
503  int spriteid;
504 
505  switch (uSpellID) {
507  case SPELL_FIRE_FIREBALL:
512  case SPELL_EARTH_BLADES:
514  // v20 = yaw;
515  spell_sprites.spell_target_pid = 0;
516  spell_sprites.uFacing = yaw;
517  spell_sprites.uSoundID = 0;
518  launch_speed =
520  ->pObjects[(signed __int16)spell_sprites.uObjectDescID]
521  .uSpeed;
522  spriteid = spell_sprites.Create(yaw, pitch, launch_speed, 0);
523  // pAudioPlayer->PlaySound((SoundID)word_4EE088_sound_ids[uSpellID],
524  // 0, 0, fromx, fromy, 0, 0, 0);
525  pAudioPlayer->PlaySpellSound(uSpellID, PID(OBJECT_Item, spriteid));
526  return;
528  spell_num_objects = (skillMasteryPlusOne * 2) - 1;
529  spell_sprites.spell_target_pid = 0;
530  spell_sprites.uFacing = yaw;
531  if (spell_num_objects == 1) {
532  launch_speed =
534  ->pObjects[(signed __int16)spell_sprites.uObjectDescID]
535  .uSpeed;
536  spriteid = spell_sprites.Create(yaw, pitch, launch_speed, 0);
537  } else {
538  spell_spray_arc =
539  (signed int)(60 * stru_5C6E00->uIntegerDoublePi) / 360;
540  spell_spray_angles = spell_spray_arc / (spell_num_objects - 1);
541  for (int i = spell_spray_arc / -2; i <= spell_spray_arc / 2;
542  i += spell_spray_angles) {
543  spell_sprites.uFacing = i + yaw;
544  spriteid = spell_sprites.Create(
545  i + yaw, pitch,
546  pObjectList->pObjects[spell_sprites.uObjectDescID]
547  .uSpeed,
548  0);
549  }
550  }
551  // pAudioPlayer->PlaySound((SoundID)word_4EE088_sound_ids[uSpellID],
552  // 0, 0, fromx, fromy, 0, 0, 0);
553  pAudioPlayer->PlaySpellSound(uSpellID, PID(OBJECT_Item, spriteid));
554  return;
555  case SPELL_AIR_SPARKS:
556  spell_num_objects = (skillMasteryPlusOne * 2) + 1;
557  spell_spray_arc =
558  (signed int)(60 * stru_5C6E00->uIntegerDoublePi) / 360;
559  spell_spray_angles = spell_spray_arc / (spell_num_objects - 1);
560  spell_sprites.spell_target_pid = 4;
561  for (int i = spell_spray_arc / -2; i <= spell_spray_arc / 2;
562  i += spell_spray_angles) {
563  spell_sprites.uFacing = i + yaw;
564  spriteid = spell_sprites.Create(
565  i + yaw, pitch,
566  pObjectList->pObjects[spell_sprites.uObjectDescID].uSpeed,
567  0);
568  }
569  // pAudioPlayer->PlaySound((SoundID)word_4EE088_sound_ids[uSpellID],
570  // 0, 0, fromx, fromy, 0, 0, 0);
571  pAudioPlayer->PlaySpellSound(uSpellID, PID(OBJECT_Item, spriteid));
572  return;
575  spell_sprites.spell_target_pid = 4;
576  launch_speed =
577  pObjectList->pObjects[spell_sprites.uObjectDescID].uSpeed;
578  launch_angle = stru_5C6E00->uIntegerHalfPi / 2;
579  spriteid = spell_sprites.Create(yaw, launch_angle, launch_speed, 0);
580  // pAudioPlayer->PlaySound((SoundID)word_4EE088_sound_ids[uSpellID],
581  // 0, 0, fromx, fromy, 0, 0, 0);
582  pAudioPlayer->PlaySpellSound(uSpellID, PID(OBJECT_Item, spriteid));
583  return;
584 
585  case SPELL_FIRE_HASTE:
586  if (skillMasteryPlusOne > 0) {
587  if (skillMasteryPlusOne <= 2)
588  spell_length = 60 * (uSkill + 60);
589  else if (skillMasteryPlusOne == 3)
590  spell_length = 180 * (uSkill + 20);
591  else if (skillMasteryPlusOne == 4)
592  spell_length = 240 * (uSkill + 15);
593  }
594  for (uint i = 0; i < 4; ++i)
595  if (pParty->pPlayers[i].IsWeak()) return;
598  skillMasteryPlusOne, 0, 0, 0);
599  spell_fx_renderer->SetPlayerBuffAnim(uSpellID, 0);
600  spell_fx_renderer->SetPlayerBuffAnim(uSpellID, 1);
601  spell_fx_renderer->SetPlayerBuffAnim(uSpellID, 2);
602  spell_fx_renderer->SetPlayerBuffAnim(uSpellID, 3);
603  // pAudioPlayer->PlaySound((SoundID)word_4EE088_sound_ids[uSpellID],
604  // 0, 0, fromx, fromy, 0, 0, 0); // звук алтаря
605  pAudioPlayer->PlaySpellSound(uSpellID, 0);
606  return;
607  case SPELL_AIR_SHIELD:
610  switch (skillMasteryPlusOne) {
611  case 1:
612  case 2:
613  spell_length = 300 * (uSkill + 12);
614  break;
615  case 3:
616  spell_length = 900 * (uSkill + 4);
617  break;
618  case 4:
619  spell_length = 3600 * (uSkill + 1);
620  break;
621  }
622  switch (uSpellID) {
623  case SPELL_AIR_SHIELD:
624  spell_num_objects = 0;
625  uSkill = 14;
626  break;
628  spell_num_objects = uSkill + 5;
629  uSkill = 15;
630  break;
632  spell_num_objects = uSkill + 5;
633  uSkill = 9;
634  break;
635  }
636  spell_fx_renderer->SetPlayerBuffAnim(uSpellID, 0);
637  spell_fx_renderer->SetPlayerBuffAnim(uSpellID, 1);
638  spell_fx_renderer->SetPlayerBuffAnim(uSpellID, 2);
639  spell_fx_renderer->SetPlayerBuffAnim(uSpellID, 3);
640  spell_expire_time =
642  pParty->pPartyBuffs[uSkill].Apply(spell_expire_time,
643  skillMasteryPlusOne,
644  spell_num_objects, 0, 0);
645  // pAudioPlayer->PlaySound((SoundID)word_4EE088_sound_ids[uSpellID],
646  // 0, 0, fromx, fromy, 0, 0, 0);
647  pAudioPlayer->PlaySpellSound(uSpellID, 0);
648  return;
650  if (skillMasteryPlusOne == 4)
651  spell_length = 600 * uSkill;
652  else
653  spell_length = 60 * uSkill;
654  spell_fx_renderer->SetPlayerBuffAnim(uSpellID, 0);
655  spell_fx_renderer->SetPlayerBuffAnim(uSpellID, 1);
656  spell_fx_renderer->SetPlayerBuffAnim(uSpellID, 2);
657  spell_fx_renderer->SetPlayerBuffAnim(uSpellID, 3);
658 
659  spell_expire_time =
662  spell_expire_time, skillMasteryPlusOne, uSkill, 0, 0);
663  // pAudioPlayer->PlaySound((SoundID)word_4EE088_sound_ids[uSpellID],
664  // 0, 0, fromx, fromy, 0, 0, 0);
665  pAudioPlayer->PlaySpellSound(uSpellID, 0);
666  return;
673  spell_length = 3600 * uSkill;
674  spell_num_objects = uSkill * skillMasteryPlusOne;
675 
676  switch (uSpellID) {
678  uSkill = PARTY_BUFF_RESIST_FIRE;
679  break;
681  uSkill = PARTY_BUFF_RESIST_AIR;
682  break;
684  uSkill = PARTY_BUFF_RESIST_WATER;
685  break;
687  uSkill = PARTY_BUFF_RESIST_EARTH;
688  break;
690  uSkill = PARTY_BUFF_RESIST_MIND;
691  break;
693  uSkill = PARTY_BUFF_RESIST_BODY;
694  break;
695  }
696  spell_fx_renderer->SetPlayerBuffAnim(uSpellID, 0);
697  spell_fx_renderer->SetPlayerBuffAnim(uSpellID, 1);
698  spell_fx_renderer->SetPlayerBuffAnim(uSpellID, 2);
699  spell_fx_renderer->SetPlayerBuffAnim(uSpellID, 3);
700  pParty->pPartyBuffs[uSkill].Apply(
702  skillMasteryPlusOne, spell_num_objects, 0, 0);
703  // pAudioPlayer->PlaySound((SoundID)word_4EE088_sound_ids[uSpellID],
704  // 0, 0, fromx, fromy, 0, 0, 0);
705  pAudioPlayer->PlaySpellSound(uSpellID, 0);
706  return;
708  switch (skillMasteryPlusOne) {
709  case 2:
710  spell_length = 10800 * uSkill;
711  spell_power = 3 * uSkill + 10;
712  break;
713  case 3:
714  spell_length = 18000 * uSkill;
715  spell_power = 5 * uSkill + 10;
716  break;
717  case 4:
718  spell_length = 14400 * uSkill;
719  spell_power = 4 * uSkill + 10;
720  break;
721  }
722  spell_fx_renderer->SetPlayerBuffAnim(uSpellID, 0);
723  spell_fx_renderer->SetPlayerBuffAnim(uSpellID, 1);
724  spell_fx_renderer->SetPlayerBuffAnim(uSpellID, 2);
725  spell_fx_renderer->SetPlayerBuffAnim(uSpellID, 3);
726 
727  spell_expire_time =
730  spell_expire_time, skillMasteryPlusOne, spell_power, 0, 0);
731  // pAudioPlayer->PlaySound((SoundID)word_4EE088_sound_ids[uSpellID],
732  // 0, 0, fromx, fromy, 0, 0, 0);
733  pAudioPlayer->PlaySpellSound(uSpellID, 0);
734  return;
735  default:
736  return;
737  }
738 }

Перекрестные ссылки stru193_math::Atan2(), SpriteObject::containing_item, SpriteObject::Create(), SpriteObject::field_60_distance_related_prolly_lod, GameTime::FromSeconds(), Party::GetPlayingTime(), IndoorLocation::GetSector(), LEVEL_Indoor, OBJECT_Item, ObjectList::ObjectIDByItemID(), PARTY_BUFF_DAY_OF_GODS, PARTY_BUFF_HASTE, PARTY_BUFF_IMMOLATION, PARTY_BUFF_RESIST_AIR, PARTY_BUFF_RESIST_BODY, PARTY_BUFF_RESIST_EARTH, PARTY_BUFF_RESIST_FIRE, PARTY_BUFF_RESIST_MIND, PARTY_BUFF_RESIST_WATER, pAudioPlayer, pIndoor, AudioPlayer::PlaySpellSound(), pObjectList, ObjectList::pObjects, pParty, Party::pPartyBuffs, Party::pPlayers, ItemGen::Reset(), SpellFxRenderer::SetPlayerBuffAnim(), Party::sEyelevel, SPELL_AIR_LIGHNING_BOLT, SPELL_AIR_PROTECTION_FROM_AIR, SPELL_AIR_SHIELD, SPELL_AIR_SPARKS, SPELL_BODY_PROTECTION_FROM_BODY, SpriteObject::spell_caster_pid, SPELL_EARTH_BLADES, SPELL_EARTH_DEATH_BLOSSOM, SPELL_EARTH_PROTECTION_FROM_EARTH, SPELL_EARTH_ROCK_BLAST, SPELL_EARTH_STONESKIN, SPELL_FIRE_FIRE_BOLT, SPELL_FIRE_FIREBALL, SPELL_FIRE_HASTE, SPELL_FIRE_IMMOLATION, SPELL_FIRE_PROTECTION_FROM_FIRE, spell_fx_renderer, SpriteObject::spell_id, SpriteObject::spell_level, SPELL_LIGHT_DAY_OF_THE_GODS, SPELL_MIND_PROTECTION_FROM_MIND, SpriteObject::spell_skill, SPELL_SPIRIT_HEROISM, spell_sprite_mapping, SpriteObject::spell_target_pid, SPELL_WATER_ACID_BURST, SPELL_WATER_ICE_BLAST, SPELL_WATER_ICE_BOLT, SPELL_WATER_POISON_SPRAY, SPELL_WATER_PROTECTION_FROM_WATER, stru_5C6E00, SpriteObject::uAttributes, uCurrentlyLoadedLevelType, SpriteObject::uFacing, stru193_math::uIntegerDoublePi, stru193_math::uIntegerHalfPi, SpriteObject::uObjectDescID, SpriteObject::uSectorID, SpriteObject::uSoundID, ObjectDesc::uSpeed, SpriteObject::uSpriteFrameID, SpriteObject::uType, SpriteObject::vPosition и Party::vPosition.

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

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

◆ sub_427769_isSpellQuickCastableOnShiftClick()

bool sub_427769_isSpellQuickCastableOnShiftClick ( unsigned int  uSpellID)

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

741  {
742  return (pSpellDatas[uSpellID].stats & 0xC) != 0;
743 }

Перекрестные ссылки pSpellDatas.

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

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

◆ _43AFE3_calc_spell_damage()

int _43AFE3_calc_spell_damage ( int  spellId,
int  spellLevel,
signed int  skillMastery,
int  currentHp 
)

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

746  {
747  int result; // eax@1
748  unsigned int v5; // [sp-4h] [bp-8h]@9
749 
750  result = 0;
751  if (spellId == SPELL_FIRE_FIRE_SPIKE) {
752  switch (skillMastery) {
753  case 1:
754  case 2:
755  v5 = 6;
756  break;
757  case 3:
758  v5 = 8;
759  break;
760  case 4:
761  v5 = 10;
762  break;
763  default:
764  return 0;
765  }
766  result = GetDiceResult(spellLevel, v5);
767  } else if (spellId == SPELL_EARTH_MASS_DISTORTION) {
768  result = currentHp *
770  2 * spellLevel) /
771  100;
772  } else {
773  result =
774  pSpellDatas[spellId].baseDamage +
775  GetDiceResult(spellLevel, pSpellDatas[spellId].bonusSkillDamage);
776  }
777 
778  return result;
779 }

Перекрестные ссылки GetDiceResult(), pSpellDatas, SPELL_EARTH_MASS_DISTORTION и SPELL_FIRE_FIRE_SPIKE.

Используется в Actor::_43B3E0_CalcDamage(), Actor::DamageMonsterFromParty(), DamagePlayerFromMonster() и ItemDamageFromActor().

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

Переменные

◆ spell_fx_renderer

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

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

◆ TownPortalList

std::array<TownPortalData, 6> TownPortalList
Инициализатор
=
{{{Vec3_int_(-5121, 2107, 1), 1536, 0, 21, 0},
{Vec3_int_(-15148, -10240, 1473), 0, 0, 4, 0},
{Vec3_int_(-10519, 5375, 753), 512, 0, 3, 0},
{Vec3_int_(3114, -11055, 513), 0, 0, 10, 0},
{Vec3_int_(-158, 7624, 1), 512, 0, 7, 0},
{Vec3_int_(-1837, -4247, 65), 65, 0, 8, 0}}}

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

Используется в Application::Game::EventLoop().

◆ pSpellStats

◆ spell_sprite_mapping

std::array<stru324_spell_id_to_sprite_mapping, 103> spell_sprite_mapping

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

Используется в CastSpellInfoHelpers::_427E01_cast_spell(), _493938_regenerate(), Actor::AI_SpellAttack(), EventCastSpell() и Actor::GetObjDescId().

◆ pSpellDatas

◆ wand_spell_ids

◆ pIconPos

std::array<std::array<struct SpellBookIconPos, 12>, 9> pIconPos
Инициализатор
= {{
{{{0, 0}, {17, 13}, {115, 2}, {217, 15}, {299, 6}, {28, 125},
{130, 133}, {294, 114}, {11, 232}, {134, 233}, {237, 171}, {296, 231}}},
{{{0, 0}, {19, 9}, {117, 3}, {206, 13}, {285, 7}, {16, 123},
{113, 101}, {201, 118}, {317, 110}, {11, 230}, {149, 236}, {296, 234}}},
{{{0, 0}, {17, 9}, {140, 0}, {210, 34}, {293, 5}, {15, 98},
{78, 121}, {175, 136}, {301, 115}, {15, 226}, {154, 225}, {272, 220}}},
{{{0, 0}, {7, 9}, {156, 2}, {277, 9}, {11, 117}, {111, 82},
{180, 102}, {303, 108}, {10, 229}, {120, 221}, {201, 217}, {296, 225}}},
{{{0, 0}, {18, 8}, {89, 15}, {192, 14}, {292, 7}, {22, 129},
{125, 146}, {217, 136}, {305, 115}, {22, 226}, {174, 237}, {290, 231}}},
{{{0, 0}, {18, 12}, {148, 9}, {292, 7}, {17, 122}, {121, 99},
{220, 87}, {293, 112}, {13, 236}, {128, 213}, {220, 223}, {315, 223}}},
{{{0, 0}, {23, 14}, {127, 8}, {204, 0}, {306, 8}, {14, 115},
{122, 132}, {200, 116}, {293, 122}, {20, 228}, {154, 228}, {294, 239}}},
{{{0, 0}, {19, 14}, {124, 10}, {283, 12}, {8, 105}, {113, 89},
{190, 82}, {298, 108}, {18, 181}, {101, 204}, {204, 203}, {285, 218}}},
{{{0, 0}, {18, 17}, {110, 16}, {201, 15}, {307, 15}, {18, 148},
{125, 166}, {201, 123}, {275, 120}, {28, 235}, {217, 222}, {324, 216}}}
}}

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

Используется в GUIWindow_Spellbook::OpenSpellbook() и GUIWindow_Spellbook::Update().

spell_fx_renderer
SpellFxRenderer * spell_fx_renderer
Definition: Spells.cpp:22
SpriteObject
Definition: SpriteObject.h:189
spell_sprite_mapping
std::array< stru324_spell_id_to_sprite_mapping, 103 > spell_sprite_mapping
Definition: Spells.cpp:35
SPELL_LIGHT_PARALYZE
@ SPELL_LIGHT_PARALYZE
Definition: Spells.h:100
ObjectDesc::uSpeed
int16_t uSpeed
Definition: ObjectList.h:31
SPELL_EARTH_STONESKIN
@ SPELL_EARTH_STONESKIN
Definition: Spells.h:53
Party::vPosition
Vec3_int_ vPosition
Definition: Party.h:250
PARTY_BUFF_DAY_OF_GODS
@ PARTY_BUFF_DAY_OF_GODS
Definition: Party.h:73
stru193_math::uIntegerDoublePi
static const unsigned int uIntegerDoublePi
Definition: OurMath.h:90
SpriteObject::uFacing
unsigned __int16 uFacing
Definition: SpriteObject.h:220
Party::GetPlayingTime
GameTime & GetPlayingTime()
Definition: Party.h:230
SPELL_LIGHT_LIGHT_BOLT
@ SPELL_LIGHT_LIGHT_BOLT
Definition: Spells.h:97
SpriteObject::field_60_distance_related_prolly_lod
char field_60_distance_related_prolly_lod
Definition: SpriteObject.h:234
OBJECT_Item
@ OBJECT_Item
Definition: Actor.h:66
SPELL_WATER_POISON_SPRAY
@ SPELL_WATER_POISON_SPRAY
Definition: Spells.h:38
PARTY_BUFF_IMMOLATION
@ PARTY_BUFF_IMMOLATION
Definition: Party.h:81
SPELL_EARTH_ROCK_BLAST
@ SPELL_EARTH_ROCK_BLAST
Definition: Spells.h:56
Party::sEyelevel
int sEyelevel
Definition: Party.h:239
SpriteObject::uSectorID
__int16 uSectorID
Definition: SpriteObject.h:223
stru193_math::uIntegerHalfPi
static const unsigned int uIntegerHalfPi
Definition: OurMath.h:89
SPELL_EARTH_DEADLY_SWARM
@ SPELL_EARTH_DEADLY_SWARM
Definition: Spells.h:52
SPELL_FIRE_FIRE_SPIKE
@ SPELL_FIRE_FIRE_SPIKE
Definition: Spells.h:19
SPELL_BODY_HARM
@ SPELL_BODY_HARM
Definition: Spells.h:88
GetDiceResult
int GetDiceResult(unsigned int uNumDice, unsigned int uDiceSides)
Definition: OurMath.cpp:194
ObjectList::ObjectIDByItemID
unsigned int ObjectIDByItemID(unsigned int uItemID)
Definition: ObjectList.cpp:7
SPELL_EARTH_PROTECTION_FROM_EARTH
@ SPELL_EARTH_PROTECTION_FROM_EARTH
Definition: Spells.h:51
int64_t
__int64 int64_t
Definition: alext.h:31
Party::pPlayers
std::array< Player, 4 > pPlayers
Definition: Party.h:310
SPELL_EARTH_DEATH_BLOSSOM
@ SPELL_EARTH_DEATH_BLOSSOM
Definition: Spells.h:58
PARTY_BUFF_RESIST_AIR
@ PARTY_BUFF_RESIST_AIR
Definition: Party.h:71
SpriteObject::uType
SPRITE_OBJECT_TYPE uType
Definition: SpriteObject.h:215
SPELL_MIND_MIND_BLAST
@ SPELL_MIND_MIND_BLAST
Definition: Spells.h:74
SPELL_FIRE_PROTECTION_FROM_FIRE
@ SPELL_FIRE_PROTECTION_FROM_FIRE
Definition: Spells.h:15
SPELL_MIND_PROTECTION_FROM_MIND
@ SPELL_MIND_PROTECTION_FROM_MIND
Definition: Spells.h:75
SPELL_DARK_SHARPMETAL
@ SPELL_DARK_SHARPMETAL
Definition: Spells.h:113
SPELL_WATER_ICE_BOLT
@ SPELL_WATER_ICE_BOLT
Definition: Spells.h:40
ItemGen::Reset
void Reset()
Definition: Items.cpp:133
PARTY_BUFF_RESIST_MIND
@ PARTY_BUFF_RESIST_MIND
Definition: Party.h:83
SpriteObject::uSpriteFrameID
unsigned __int16 uSpriteFrameID
Definition: SpriteObject.h:224
SPELL_AIR_PROTECTION_FROM_AIR
@ SPELL_AIR_PROTECTION_FROM_AIR
Definition: Spells.h:27
pIndoor
IndoorLocation * pIndoor
Definition: Indoor.cpp:49
result
GLuint64EXT * result
Definition: SDL_opengl_glext.h:9435
SpriteObject::uObjectDescID
unsigned __int16 uObjectDescID
Definition: SpriteObject.h:217
SPELL_FIRE_FIRE_BOLT
@ SPELL_FIRE_FIRE_BOLT
Definition: Spells.h:14
Party::pPartyBuffs
std::array< SpellBuff, 20 > pPartyBuffs
Definition: Party.h:309
SpriteObject::vPosition
struct Vec3_int_ vPosition
Definition: SpriteObject.h:218
pParty
Party * pParty
Definition: Party.cpp:30
SPELL_WATER_ICE_BLAST
@ SPELL_WATER_ICE_BLAST
Definition: Spells.h:46
PARTY_BUFF_RESIST_WATER
@ PARTY_BUFF_RESIST_WATER
Definition: Party.h:88
AudioPlayer::PlaySpellSound
void PlaySpellSound(unsigned int spell, unsigned int pid)
Definition: AudioPlayer.cpp:476
SPELL_MIND_CHARM
@ SPELL_MIND_CHARM
Definition: Spells.h:77
SPELL_FIRE_IMMOLATION
@ SPELL_FIRE_IMMOLATION
Definition: Spells.h:20
PARTY_BUFF_HASTE
@ PARTY_BUFF_HASTE
Definition: Party.h:79
pSpellDatas
std::array< SpellData, 100 > pSpellDatas
Definition: Spells.cpp:170
SpriteObject::spell_id
int spell_id
Definition: SpriteObject.h:228
SPELL_EARTH_STUN
@ SPELL_EARTH_STUN
Definition: Spells.h:49
SPELL_AIR_SHIELD
@ SPELL_AIR_SHIELD
Definition: Spells.h:30
LEVEL_Indoor
@ LEVEL_Indoor
Definition: Indoor.h:286
SpriteObject::Create
int Create(int yaw, int pitch, int a4, int a5)
Definition: SpriteObject.cpp:56
SpriteObject::containing_item
struct ItemGen containing_item
Definition: SpriteObject.h:227
SPELL_FIRE_FIREBALL
@ SPELL_FIRE_FIREBALL
Definition: Spells.h:18
SpriteObject::uSoundID
unsigned __int16 uSoundID
Definition: SpriteObject.h:221
SPELL_BODY_PROTECTION_FROM_BODY
@ SPELL_BODY_PROTECTION_FROM_BODY
Definition: Spells.h:87
stru193_math::Atan2
unsigned int Atan2(int x, int y)
Definition: OurMath.cpp:46
PARTY_BUFF_RESIST_EARTH
@ PARTY_BUFF_RESIST_EARTH
Definition: Party.h:75
SPELL_SPIRIT_SPIRIT_LASH
@ SPELL_SPIRIT_SPIRIT_LASH
Definition: Spells.h:68
SPELL_AIR_SPARKS
@ SPELL_AIR_SPARKS
Definition: Spells.h:28
SpriteObject::spell_level
int spell_level
Definition: SpriteObject.h:229
SPELL_EARTH_MASS_DISTORTION
@ SPELL_EARTH_MASS_DISTORTION
Definition: Spells.h:59
SpriteObject::spell_target_pid
int spell_target_pid
Definition: SpriteObject.h:233
SPELL_WATER_ACID_BURST
@ SPELL_WATER_ACID_BURST
Definition: Spells.h:43
uint
unsigned int uint
Definition: MM7.h:4
SPELL_AIR_IMPLOSION
@ SPELL_AIR_IMPLOSION
Definition: Spells.h:33
SPELL_WATER_PROTECTION_FROM_WATER
@ SPELL_WATER_PROTECTION_FROM_WATER
Definition: Spells.h:39
SpriteObject::spell_skill
int spell_skill
Definition: SpriteObject.h:230
SPELL_EARTH_BLADES
@ SPELL_EARTH_BLADES
Definition: Spells.h:54
stru_5C6E00
struct stru193_math * stru_5C6E00
Definition: mm7_data.cpp:19
PARTY_BUFF_RESIST_BODY
@ PARTY_BUFF_RESIST_BODY
Definition: Party.h:72
PARTY_BUFF_RESIST_FIRE
@ PARTY_BUFF_RESIST_FIRE
Definition: Party.h:77
uCurrentlyLoadedLevelType
LEVEL_TYPE uCurrentlyLoadedLevelType
Definition: Indoor.cpp:52
IndoorLocation::GetSector
int GetSector(int sX, int sY, int sZ)
Definition: Indoor.cpp:1279
ObjectList::pObjects
struct ObjectDesc * pObjects
Definition: ObjectList.h:54
SPELL_AIR_LIGHNING_BOLT
@ SPELL_AIR_LIGHNING_BOLT
Definition: Spells.h:31
pAudioPlayer
AudioPlayer * pAudioPlayer
Definition: AudioPlayer.cpp:20
SPELL_BODY_FLYING_FIST
@ SPELL_BODY_FLYING_FIST
Definition: Spells.h:94
SpellFxRenderer::SetPlayerBuffAnim
void SetPlayerBuffAnim(uint16_t uSpellID, uint16_t uPlayerID)
Definition: SpellFxRenderer.cpp:1103
SPELL_DARK_TOXIC_CLOUD
@ SPELL_DARK_TOXIC_CLOUD
Definition: Spells.h:110
SpriteObject::uAttributes
unsigned __int16 uAttributes
Definition: SpriteObject.h:222
SPELL_DARK_SHRINKING_RAY
@ SPELL_DARK_SHRINKING_RAY
Definition: Spells.h:112
SPELL_FIRE_HASTE
@ SPELL_FIRE_HASTE
Definition: Spells.h:17
GameTime
Definition: Time.h:14
SPELL_FIRE_INCINERATE
@ SPELL_FIRE_INCINERATE
Definition: Spells.h:23
pObjectList
struct ObjectList * pObjectList
Definition: ObjectList.cpp:5
SPELL_SPIRIT_HEROISM
@ SPELL_SPIRIT_HEROISM
Definition: Spells.h:67
GameTime::FromSeconds
static GameTime FromSeconds(int seconds)
Definition: Time.h:83
SpriteObject::spell_caster_pid
int spell_caster_pid
Definition: SpriteObject.h:232
SPELL_LIGHT_DAY_OF_THE_GODS
@ SPELL_LIGHT_DAY_OF_THE_GODS
Definition: Spells.h:102