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

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

Функции

unsigned int LoadEventsToBuffer (const char *pContainerName, char *pBuffer, unsigned int uBufferSize)
 
void Initialize_GlobalEVT ()
 
void LoadLevel_InitializeLevelEvt ()
 
void EventProcessor (int uEventID, int targetObj, int canShowMessages, int entry_line)
 
char * GetEventHintString (unsigned int uEventID)
 
void init_event_triggers ()
 
void check_event_triggers ()
 
bool sub_4465DF_check_season (int a1)
 
void sub_448CF4_spawn_monsters (__int16 typeindex, __int16 level, int count, int x, int y, int z, int group, unsigned int uUniqueName)
 

Переменные

std::array< EventIndex, 4400 > pSomeOtherEVT_Events
 
signed int uSomeOtherEVT_NumEvents
 
char * pSomeOtherEVT
 
std::array< EventIndex, 4400 > pSomeEVT_Events
 
signed int uSomeEVT_NumEvents
 
char * pSomeEVT
 
unsigned int uGlobalEVT_NumEvents
 
unsigned int uGlobalEVT_Size
 
std::array< char, 46080 > pGlobalEVT
 
std::array< EventIndex, 4400 > pGlobalEVT_Index
 
std::array< unsigned int, 500 > pLevelStrOffsets
 
unsigned int uLevelStrNumStrings
 
unsigned int uLevelStrFileSize
 
signed int uLevelEVT_NumEvents
 
unsigned int uLevelEVT_Size
 
std::array< char, 9216 > pLevelStr
 
std::array< char, 9216 > pLevelEVT
 
std::array< EventIndex, 4400 > pLevelEVT_Index
 
_2devent p2DEvents [525]
 

Функции

◆ LoadEventsToBuffer()

unsigned int LoadEventsToBuffer ( const char *  pContainerName,
char *  pBuffer,
unsigned int  uBufferSize 
)

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

60  {
61  size_t size = 0;
62  void *ptr = pEvents_LOD->LoadCompressedTexture(pContainerName, &size);
63  if ((ptr == nullptr) || (size > uBufferSize)) {
64  Error("File %s Size %lu - Buffer size %lu", pContainerName, size, uBufferSize);
65  }
66 
67  memcpy(pBuffer, ptr, size);
68  free(ptr);
69  return size;
70 }

Перекрестные ссылки LOD::File::LoadCompressedTexture() и pEvents_LOD.

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

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

◆ Initialize_GlobalEVT()

void Initialize_GlobalEVT ( )

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

73  {
74  struct raw_event_header {
75  unsigned char evt_size;
76  unsigned char evt_id_l;
77  unsigned char evt_id_h;
78  unsigned char evt_sequence_num;
79  };
80  uint events_count;
81  unsigned int offset_in;
82  raw_event_header *current_hdr;
85  LoadEventsToBuffer("global.evt", pGlobalEVT.data(), 46080);
86  if (!uGlobalEVT_Size) return;
87  memset(pGlobalEVT_Index.data(), 0x80, sizeof(pGlobalEVT_Index)); // 52800
88  events_count = uGlobalEVT_NumEvents;
89  current_hdr = (raw_event_header *)pGlobalEVT.data();
90  offset_in = 0;
91  for (events_count = 0, offset_in = 0; offset_in < uGlobalEVT_Size;
92  ++events_count) {
93  pGlobalEVT_Index[events_count].uEventID =
94  current_hdr->evt_id_l + (current_hdr->evt_id_h << 8);
95  pGlobalEVT_Index[events_count].event_sequence_num =
96  current_hdr->evt_sequence_num;
97  pGlobalEVT_Index[events_count].uEventOffsetInEVT = offset_in;
98  offset_in += current_hdr->evt_size + 1;
99 
100  current_hdr = (raw_event_header *)&pGlobalEVT[offset_in];
101  }
102  uGlobalEVT_NumEvents = events_count;
103 
104  assert(uGlobalEVT_NumEvents < 4400);
105 }

Перекрестные ссылки LoadEventsToBuffer(), pGlobalEVT, pGlobalEVT_Index, uGlobalEVT_NumEvents и uGlobalEVT_Size.

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

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

◆ LoadLevel_InitializeLevelEvt()

void LoadLevel_InitializeLevelEvt ( )

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

108  {
109  struct raw_event_header {
110  unsigned char evt_size;
111  unsigned char evt_id_l;
112  unsigned char evt_id_h;
113  unsigned char evt_sequence_num;
114  };
115  uint events_count;
116  unsigned int offset_in;
117  raw_event_header *current_hdr;
118 
119  if (!uLevelEVT_Size) return;
120 
121  memset(MapsLongTimersList, 0, 3200);
122  memset(pLevelEVT_Index.data(), 80, sizeof(EventIndex) * 4400);
123 
126 
127  current_hdr = (raw_event_header *)pLevelEVT.data();
128  offset_in = 0;
129  for (events_count = 0, offset_in = 0; offset_in < uLevelEVT_Size;
130  ++events_count) {
131  pLevelEVT_Index[events_count].uEventID =
132  current_hdr->evt_id_l + (current_hdr->evt_id_h << 8);
133  pLevelEVT_Index[events_count].event_sequence_num =
134  current_hdr->evt_sequence_num;
135  pLevelEVT_Index[events_count].uEventOffsetInEVT = offset_in;
136  offset_in += current_hdr->evt_size + 1;
137 
138  current_hdr = (raw_event_header *)&pLevelEVT[offset_in];
139  }
140  uLevelEVT_NumEvents = events_count;
141 
142  /*
143  EmeraldIsle::Variables:
144  [0] ???
145  [1] ???
146  [2] Luck Fountain uses left
147  [3] Gold Fountain used this week
148  [4] Gold Fountain total uses
149 
150 
151  Emerald Isle #110 // Fire Resistance fountain
152  0 LocationName
153  0 if (Player.FireResistance < 50)
154  {
155  1 Set(Player.FireResistance, 50)
156  2 SetFooterString(22) // +50 Fire Resistance (temporarily)
157  3 Add(Party.Autonotes, 2)
158  4 goto return
159  }
160  5 SetFooterString(11) // Refreshing!
161  6 return
162 
163 
164 
165  Emerald Isle #111 // ???
166  Initialize
167  Set(Map.Variables[0], 30)
168  Set(Map.Variables[1], 30)
169 
170 
171  Emerald Isle #114 // month timer - manage luck fountain
172  0 LocationName
173  0 if (Player.BaseLuck >= 15)
174  {
175  2 SetFooterString(11) // Refreshing!
176  3 return
177  }
178  else
179  {
180  1 if (Map.Variables[2] >= 1)
181  {
182  4 Sub(Map.Variables[2], 1)
183  5 Add(Player.BaseLuck, 2)
184  6 SetFooterString(25) // +2 Luck (Permament)
185  7 return
186  }
187  else
188  {
189  2 SetFooterString(11) // Refreshing!
190  3 return
191  }
192  }
193 
194  8 Initialize
195  9 Set Map.Variables[2], 8
196 
197 
198 
199  Emerald Isle #115 // week timer - gold fountain in the center of town
200  0 LocationName
201  0 if (Map.Variables[4] < 3)
202  {
203  1 if (Map.Variables[3] == 0)
204  {
205  2 if (Party.Gold < 201)
206  {
207  3 if (Player.BaseLuck >= 15)
208  {
209  5 Add(Map.Variables[3], 1)
210  6 Add(Party.Gold, 1000)
211  7 Add(Map.Variables[4], 1)
212  8 goto return
213  }
214  else
215  {
216  4 goto 9
217  }
218  }
219  }
220  }
221  9 SetFooterString(11) // Refreshing!
222  10 return
223 
224  11 Initialize
225  12 Set(Map.Variables[3], 0)
226 
227 
228 
229 
230 
231  Emerald Isle #220 // day timer - monster spawner
232  0 LocationName
233  0 Initialize
234  1 if (NumAliveActors(group=20) != 0)
235  2 return
236  3 SpawnMonsters(1, level=1, count=10, x=-336, y=14512, z=0, group=20)
237  4 SpawnMonsters(1, level=2, count=5, x=16, y=16352, z=90, group=20)
238  5 SpawnMonsters(1, level=1, count=10, x=480, y=18288, z=6, group=20)
239 
240 
241 
242  Emerald Isle #200 // margareth dock tip
243  0 if (!QBits.QuestDone[17])
244  {
245  1 InitiateNPCDialogue(npc=19)
246  }
247  2 return
248 
249 
250  Emerald Isle #201 // margareth armoury tip
251  0 if (!QBits.QuestDone[17])
252  {
253  1 InitiateNPCDialogue(npc=20)
254  }
255  2 return
256  */
257 }

Перекрестные ссылки MapsLongTimers_count, MapsLongTimersList, pLevelEVT, pLevelEVT_Index, uLevelEVT_NumEvents и uLevelEVT_Size.

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

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

◆ EventProcessor()

void EventProcessor ( int  uEventID,
int  targetObj,
int  canShowMessages,
int  entry_line 
)

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

261  {
262  signed int v4; // esi@7
263  int v11; // eax@14
264  // char *v12; // eax@15
265  // const char *v16; // esi@21
266  // bool v17; // edx@21
267  // int v18; // ecx@22
268  int v19; // ebp@36
269  signed int v20; // ecx@40
270  int v21; // eax@40
271  int v22; // edx@40
272  int v23; // eax@40
273  unsigned __int16 v24; // ax@45
274  LevelDecoration *v26; // eax@55
275  int v27; // eax@57
276  int pEventID; // eax@58
277  int pNPC_ID; // ecx@58
278  int pIndex; // esi@58
279  NPCData *pNPC; // ecx@58
280  int v38; // eax@78
281  int v39; // ecx@78
282  int v42; // eax@84
283  int v43; // ecx@84
284  // GUIButton *v48; // ecx@93
285  // GUIButton *v49; // esi@94
286  signed int pValue; // ebp@124
287  Player *pPlayer; // esi@125
288  int v83; // eax@212
289  int v84; // ebp@220
290  int v90; // eax@243
291  const char *v91; // ecx@247
292  int v94; // ecx@262
293  int v95; // ebp@262
294  int v96; // edx@262
295  int v97; // eax@262
296  unsigned int v98; // edx@265
297  const char *v99; // esi@267
298  int v100; // edx@267
299  unsigned int v102; // esi@281
300  int v104; // eax@288
301  int v106; // [sp-20h] [bp-4C8h]@278
302  signed int v109; // [sp-14h] [bp-4BCh]@278
303  signed int v110; // [sp-10h] [bp-4B8h]@278
304  int curr_seq_num; // [sp+10h] [bp-498h]@4
305  int v126; // [sp+1Ch] [bp-48Ch]@262
306  int player_choose; // [sp+20h] [bp-488h]@4
307  // int v128; // [sp+24h] [bp-484h]@21
308  int v129; // [sp+24h] [bp-484h]@262
309  signed int v130; // [sp+28h] [bp-480h]@0
310  int v132; // [sp+30h] [bp-478h]@262
311  signed int v133; // [sp+34h] [bp-474h]@1
312  int v134; // [sp+38h] [bp-470h]@262
313  int v135; // [sp+3Ch] [bp-46Ch]@262
314  int v136; // [sp+40h] [bp-468h]@40
315  int v137; // [sp+44h] [bp-464h]@40
316  int v138; // [sp+48h] [bp-460h]@40
317  int v139; // [sp+4Ch] [bp-45Ch]@40
318  ItemGen item; // [sp+50h] [bp-458h]@15
319  // char Source[120]; // [sp+74h] [bp-434h]@15
320  // char Str[120]; // [sp+ECh] [bp-3BCh]@21
321  Actor Dst; // [sp+164h] [bp-344h]@53
322 
323  v133 = 0;
324  EvtTargetObj = targetObj;
326  if (uEventID == 114) { // for test script
327  // if (!lua->DoFile("out01.lua"))
328  // logger->Warning(L"Error opening out01.lua\n");
329  // logger->Warning(L"being tested that well\n");
330  return;
331  }
332  if (!uEventID) {
335  localization->GetString(521)); // Nothing here
336  return;
337  }
338  player_choose = (uActiveCharacter == 0)
339  ? 6
340  : 4; // 4 - active or 6 - random player if active =0
341  curr_seq_num = entry_line;
342 
343  if (activeLevelDecoration) {
345  pSomeEVT = pGlobalEVT.data();
346  memcpy(pSomeEVT_Events.data(), pGlobalEVT_Index.data(),
347  sizeof(EventIndex) * 4400); // 4400 evts
348  } else {
350  pSomeEVT = pLevelEVT.data();
351  memcpy(pSomeEVT_Events.data(), pLevelEVT_Index.data(),
352  sizeof(EventIndex) * 4400);
353  }
354 
355  for (v4 = 0; v4 < uSomeEVT_NumEvents; ++v4) {
357  if (v133 == 1) OnMapLeave();
358  return;
359  }
360  if (pSomeEVT_Events[v4].uEventID == uEventID &&
361  pSomeEVT_Events[v4].event_sequence_num == curr_seq_num) {
362  _evt_raw *_evt =
363  (_evt_raw *)(pSomeEVT + pSomeEVT_Events[v4].uEventOffsetInEVT);
364 
365  switch (_evt->_e_type) {
366  case EVENT_CheckSeason:
367  if (!sub_4465DF_check_season(_evt->v5)) {
368  ++curr_seq_num;
369  // v4 = v124;
370  break;
371  }
372  v4 = -1;
373  curr_seq_num = _evt->v6 - 1;
374  ++curr_seq_num;
375  break;
376 
377  case EVENT_CheckSkill: {
378  v19 = _evt->v7 +
379  ((_evt->v8 +
380  ((_evt->v9 + ((unsigned int)_evt->v10 << 8)) << 8))
381  << 8);
382  if (player_choose < 0) goto LABEL_47;
383  if (player_choose <= 3) {
384  v24 =
385  pParty->pPlayers[0]
386  .pActiveSkills[3486 * player_choose + _evt->v5];
387  } else {
388  if (player_choose == 4) {
390  ->pActiveSkills[_evt->v5];
391  } else {
392  if (player_choose == 5) {
393  v20 = 0;
394  v21 = 3486 * v130 + _evt->v5;
395  v136 = 1;
396  HEXRAYS_LOWORD(v21) =
397  pParty->pPlayers[0].pActiveSkills[v21];
398  v137 = v21 & 0x40;
399  v138 = v21 & 0x80;
400  v22 = v21 & 0x100;
401  v23 = v21 & 0x3F;
402  v139 = v22;
403  while (v23 < v19 || !*(&v136 + _evt->v6)) {
404  ++v20;
405  if (v20 >= 4) {
406  ++curr_seq_num;
407  break;
408  }
409  }
410  curr_seq_num = _evt->v11 - 1;
411  ++curr_seq_num;
412  break;
413  }
414 LABEL_47:
415  // v10 = (ByteArray *)&v5[v9];
416  v24 = pParty->pPlayers[0]
417  .pActiveSkills[_evt->v5 +
418  3486 * rand() % 4];
419  }
420  }
421  v136 = 1;
422  v137 = v24 & 0x40;
423  v138 = v24 & 0x80;
424  v139 = v24 & 0x100;
425  if ((v24 & 0x3F) >= v19 && *(&v136 + _evt->v6)) {
426  curr_seq_num = _evt->v11 - 1;
427  ++curr_seq_num;
428  break;
429  }
430  ++curr_seq_num;
431  } break;
432 
433  case EVENT_SpeakNPC:
434  if (canShowMessages) {
435  // Actor::Actor(&Dst);
436  memset(&Dst, 0, 0x344u);
438  _evt->v5 +
439  ((_evt->v6 +
440  ((_evt->v7 + ((unsigned int)_evt->v8 << 8)) << 8))
441  << 8);
443  GameUI_InitializeDialogue(&Dst, false);
444  } else {
446  _evt->v5 +
447  ((_evt->v6 +
448  ((_evt->v7 + ((unsigned int)_evt->v8 << 8)) << 8))
449  << 8);
450  }
451  ++curr_seq_num;
452  break;
453  case EVENT_ChangeEvent:
454  if (EVT_DWORD(_evt->v5)) {
457  _evt->v5 - 124;
458  } else {
463  }
464  ++curr_seq_num;
465 
466  break;
468  v27 = EVT_DWORD(_evt->v5);
469  pNPCStats->pNewNPCData[v27].uFlags &= 0xFFFFFFFCu;
470  pNPCStats->pNewNPCData[v27].greet = EVT_DWORD(_evt->v9);
471  ++curr_seq_num;
472  break;
473  case EVENT_SetNPCTopic: {
474  // v29 = _evt->v5 + ((_evt->v6 + ((_evt->v7 +
475  // ((uint)_evt->v8 << 8)) << 8)) << 8);
476  pEventID = _evt->v10 +
477  ((_evt->v11 +
478  ((_evt->v12 + ((uint)_evt->v13 << 8)) << 8))
479  << 8);
480  pNPC_ID =
481  _evt->v5 +
482  ((_evt->v6 + ((_evt->v7 + ((uint)_evt->v8 << 8)) << 8))
483  << 8);
484  pIndex = _evt->v9;
485  pNPC = &pNPCStats->pNewNPCData[pNPC_ID];
486  if (pIndex == 0) pNPC->evt_A = pEventID;
487  if (pIndex == 1) pNPC->evt_B = pEventID;
488  if (pIndex == 2) pNPC->evt_C = pEventID;
489  if (pIndex == 3) pNPC->evt_D = pEventID;
490  if (pIndex == 4) pNPC->evt_E = pEventID;
491  if (pIndex == 5) pNPC->evt_F = pEventID;
492  if (pNPC_ID == 8) {
493  if (pEventID == 78) {
496  pParty->uFlags &= ~2;
498  pAudioPlayer->StopChannels(-1, -1);
500  0, 0, window->GetWidth(),
501  window->GetHeight(), 170, "");
503  61, 424, 31, 0, 2, 94,
504  UIMSG_SelectCharacter, 1, '1', "");
506  177, 424, 31, 0, 2, 94,
507  UIMSG_SelectCharacter, 2, '2', "");
509  292, 424, 31, 0, 2, 94,
510  UIMSG_SelectCharacter, 3, '3', "");
512  407, 424, 31, 0, 2, 94,
513  UIMSG_SelectCharacter, 4, '4', "");
515  0, 0, 0, 0, 1, 0, UIMSG_CycleCharacters, 0,
516  '\t', "");
517  current_npc_text = pNPCTopics[90].pText;
518  }
519  }
520  }
521  ++curr_seq_num;
522  } break;
523  case EVENT_NPCSetItem:
524  sub_448518_npc_set_item(EVT_DWORD(_evt->v5),
525  EVT_DWORD(_evt->v9), _evt->v13);
526  ++curr_seq_num;
527  break;
528  case EVENT_SetActorItem:
529  Actor::GiveItem(EVT_DWORD(_evt->v5), EVT_DWORD(_evt->v9),
530  _evt->v13);
531  ++curr_seq_num;
532  break;
535  [_evt->v5 +
536  ((_evt->v6 + ((_evt->v7 + ((uint)_evt->v8 << 8)) << 8))
537  << 8)] = _evt->v9 + ((uint)_evt->v10 << 8);
538  ++curr_seq_num;
539  break;
540  case EVENT_SetActorGroup:
541  __debugbreak();
542  *(&pActors[0].uGroup + 0x11000000 * _evt->v8 +
543  209 * (_evt->v5 +
544  ((_evt->v6 + ((uint)_evt->v7 << 8)) << 8))) =
545  _evt->v9 +
546  ((_evt->v10 +
547  ((_evt->v11 + ((uint)_evt->v12 << 8)) << 8))
548  << 8);
549  ++curr_seq_num;
550  break;
551  case EVENT_ChangeGroup:
552  v38 =
553  _evt->v5 +
554  ((_evt->v6 + ((_evt->v7 + ((uint)_evt->v8 << 8)) << 8))
555  << 8);
556  v39 = _evt->v9 +
557  ((_evt->v10 +
558  ((_evt->v11 + ((uint)_evt->v12 << 8)) << 8))
559  << 8);
560  __debugbreak();
561  for (uint actor_id = 0; actor_id < uNumActors; actor_id++) {
562  if (pActors[actor_id].uGroup == v38)
563  pActors[actor_id].uGroup = v39;
564  }
565  ++curr_seq_num;
566  break;
568  v42 =
569  _evt->v5 +
570  ((_evt->v6 + ((_evt->v7 + ((uint)_evt->v8 << 8)) << 8))
571  << 8);
572  v43 = _evt->v9 +
573  ((_evt->v10 +
574  ((_evt->v11 + ((uint)_evt->v12 << 8)) << 8))
575  << 8);
576  __debugbreak();
577  for (uint actor_id = 0; actor_id < uNumActors; actor_id++) {
578  if (pActors[actor_id].uGroup == v42)
579  pActors[actor_id].uAlly = v43;
580  }
581  ++curr_seq_num;
582  break;
583  case EVENT_MoveNPC: {
584  pNPCStats->pNewNPCData[EVT_DWORD(_evt->v5)].Location2D =
585  EVT_DWORD(_evt->v9);
586  if (window_SpeakInHouse) {
587  if (window_SpeakInHouse->par1C == 165) {
589  pMediaPlayer->Unload();
591  pParty->uFlags &= ~2;
594  pAudioPlayer->PlaySound(SOUND_Invalid, 0, 0, -1, 0, 0);
596  0, 0, window->GetWidth(),
597  window->GetHeight(), 165, 0);
599  }
600  // else {
601  // if ( window_SpeakInHouse->par1C == 553
602  // ) {
603  // pMediaPlayer->bLoopPlaying = 0;
604  // }
605  // }
606  }
607  }
608  ++curr_seq_num;
609  break;
610  }
611  case EVENT_Jmp:
612  curr_seq_num = _evt->v5 - 1;
613  ++curr_seq_num;
614  v4 = -1;
615 
616  break;
617  case EVENT_ShowFace:
618  if (_evt->v5 <= 3u) { // someone
619  pParty->pPlayers[_evt->v5].PlayEmotion(
620  (CHARACTER_EXPRESSION_ID)_evt->v6, 0);
621  } else if (_evt->v5 == 4) { // active
622  pParty->pPlayers[uActiveCharacter].PlayEmotion(
623  (CHARACTER_EXPRESSION_ID)_evt->v6, 0);
624  } else if (_evt->v5 == 5) { // all players
625  for (int i = 0; i < 4; ++i)
626  pParty->pPlayers[i].PlayEmotion(
627  (CHARACTER_EXPRESSION_ID)_evt->v6, 0);
628  } else { // random player
629  pParty->pPlayers[rand() % 4].PlayEmotion(
630  (CHARACTER_EXPRESSION_ID)_evt->v6, 0);
631  }
632  ++curr_seq_num;
633  break;
635  if (_evt->v5 <= 3) { // someone
636  pParty->pPlayers[_evt->v5].PlaySound(
637  (PlayerSpeech)_evt->v6, 0);
638  } else if (_evt->v5 == 4) { // active
639  pParty->pPlayers[uActiveCharacter].PlaySound(
640  (PlayerSpeech)_evt->v6, 0);
641  } else if (_evt->v5 == 5) { // all
642  for (int i = 0; i < 4; ++i)
643  pParty->pPlayers[i].PlaySound(
644  (PlayerSpeech)_evt->v6, 0);
645  } else { // random
646  pParty->pPlayers[rand() % 4].PlaySound(
647  (PlayerSpeech)_evt->v6, 0);
648  }
649  ++curr_seq_num;
650  break;
652  player_choose = _evt->v5;
653  ++curr_seq_num;
654  break;
655  case EVENT_SummonItem:
658  _evt->v5 +
659  ((_evt->v6 +
660  ((_evt->v7 + ((uint)_evt->v8 << 8)) << 8))
661  << 8)),
662  _evt->v9 +
663  ((_evt->v10 +
664  ((_evt->v11 + ((uint)_evt->v12 << 8)) << 8))
665  << 8),
666  _evt->v13 +
667  ((_evt->v14 +
668  ((_evt->v15 + ((uint)_evt->v16 << 8)) << 8))
669  << 8),
670  _evt->v17 +
671  ((_evt->v18 +
672  ((_evt->v19 + ((uint)_evt->v20 << 8)) << 8))
673  << 8),
674  _evt->v21 +
675  ((_evt->v22 +
676  ((_evt->v23 + ((uint)_evt->v24 << 8)) << 8))
677  << 8),
678  _evt->v25, _evt->v26, 0, 0);
679  ++curr_seq_num;
680  break;
681  case EVENT_Compare:
682  pValue = EVT_DWORD(_evt->v7);
683  if (player_choose <= 3) {
684  if (pPlayers[player_choose]->CompareVariable(
685  (enum VariableType)EVT_WORD(_evt->v5),
686  pValue)) {
687  // v124 = -1;
688  curr_seq_num = _evt->v11 - 1;
689  }
690  } else if (player_choose == 4) { // active
691  if (uActiveCharacter) {
692  if (pPlayers[uActiveCharacter]->CompareVariable(
693  (enum VariableType)EVT_WORD(_evt->v5),
694  pValue)) {
695  // v124 = -1;
696  curr_seq_num = _evt->v11 - 1;
697  }
698  }
699  } else if (player_choose == 5) { // all
700  v130 = 0;
701  for (int i = 1; i < 5; ++i) {
702  if (pPlayers[i]->CompareVariable(
703  (enum VariableType)EVT_WORD(_evt->v5),
704  pValue)) {
705  // v124 = -1;
706  curr_seq_num = _evt->v11 - 1;
707  break;
708  }
709  ++v130;
710  }
711  } else if (player_choose == 6) { // random
712  if (pPlayers[rand() % 4 + 1]->CompareVariable(
713  (enum VariableType)EVT_WORD(_evt->v5),
714  pValue)) {
715  // v124 = -1;
716  curr_seq_num = _evt->v11 - 1;
717  }
718  }
719  ++curr_seq_num;
720  v4 = -1;
721  break;
722  case EVENT_IsActorAlive:
723  if (IsActorAlive(EVT_BYTE(_evt->v5), EVT_DWORD(_evt->v6),
724  EVT_BYTE(_evt->v10))) {
725  // v124 = -1;
726  curr_seq_num = _evt->v11 - 1;
727  }
728  ++curr_seq_num;
729  v4 = -1;
730  break;
731  case EVENT_Substract:
732  pValue = EVT_DWORD(_evt->v7);
733  if (player_choose <= 3) {
734  pParty->pPlayers[player_choose].SubtractVariable(
735  (enum VariableType)EVT_WORD(_evt->v5), pValue);
736  } else if (player_choose == 4) { // active
737  if (uActiveCharacter)
738  pPlayers[uActiveCharacter]->SubtractVariable(
739  (enum VariableType)EVT_WORD(_evt->v5), pValue);
740  } else if (player_choose == 5) { // all
741  if (EVT_WORD(_evt->v5) == VAR_PlayerItemInHands) {
742  for (int i = 1; i < 5; ++i) {
743  if (pPlayers[i]->HasItem(pValue, 1)) {
744  pPlayers[i]->SubtractVariable(
745  (enum VariableType)EVT_WORD(_evt->v5), pValue);
746  break; // only take one item
747  }
748  }
749  } else {
750  for (int i = 1; i < 5; ++i)
751  pPlayers[i]->SubtractVariable(
752  (enum VariableType)EVT_WORD(_evt->v5), pValue);
753  }
754  } else if (player_choose == 6) { // random
755  pParty->pPlayers[rand() % 4].SubtractVariable(
756  (enum VariableType)EVT_WORD(_evt->v5), pValue);
757  }
758  ++curr_seq_num;
759  break;
760  case EVENT_Set:
761  pValue = EVT_DWORD(_evt->v7);
762  if (player_choose <= 3) {
763  pParty->pPlayers[player_choose].SetVariable(
764  (enum VariableType)EVT_WORD(_evt->v5), pValue);
765  } else if (player_choose == 4) { // active
766  if (uActiveCharacter)
767  pPlayers[uActiveCharacter]->SetVariable(
768  (enum VariableType)EVT_WORD(_evt->v5), pValue);
769  } else if (player_choose == 5) { // all
770  // recheck v130
771  for (int i = 1; i < 5; ++i)
772  pPlayers[i]->SetVariable(
773  (enum VariableType)EVT_WORD(_evt->v5), pValue);
774  } else if (player_choose == 6) { // random
775  pParty->pPlayers[rand() % 4].SetVariable(
776  (enum VariableType)EVT_WORD(_evt->v5), pValue);
777  }
778  ++curr_seq_num;
779  break;
780  case EVENT_Add:
781  pValue = EVT_DWORD(_evt->v7);
782  if (player_choose <= 3) {
783  pPlayer = &pParty->pPlayers[player_choose];
784  pPlayer->AddVariable(
785  (enum VariableType)EVT_WORD(_evt->v5), pValue);
786  } else if (player_choose == 4) { // active
787  if (uActiveCharacter)
788  pPlayers[uActiveCharacter]->AddVariable(
789  (enum VariableType)EVT_WORD(_evt->v5), pValue);
790  } else if (player_choose == 5) { // all
791  for (int i = 1; i < 5; ++i) {
792  pPlayers[i]->AddVariable(
793  (enum VariableType)EVT_WORD(_evt->v5), pValue);
794  }
795  } else if (player_choose == 6) { // random
796  pParty->pPlayers[rand() % 4].AddVariable(
797  (enum VariableType)EVT_WORD(_evt->v5), pValue);
798  }
799  v83 = EVT_WORD(_evt->v5);
800  if (v83 == 21 || // gold well on emerald isle
801  v83 == 22 || v83 == 23 || v83 == 24) {
802  // __debugbreak(); // bonfire
803  viewparams->bRedrawGameUI = true;
804  }
805  ++curr_seq_num;
806  break;
807  case EVENT_InputString:
808  if (!entry_line) {
810  &pLevelStr[pLevelStrOffsets[EVT_DWORD(_evt->v5)]];
811  sub_4451A8_press_any_key(uEventID, curr_seq_num, 26);
812  if (v133 == 1) OnMapLeave();
813  return;
814  }
815  v84 = _evt->v13 +
816  ((_evt->v14 +
817  ((_evt->v15 + ((uint)_evt->v16 << 8)) << 8))
818  << 8);
819  if (!_stricmp(
821  &pLevelStr
822  [pLevelStrOffsets[_evt->v9 +
823  ((_evt->v10 +
824  ((_evt->v11 +
825  ((uint)_evt->v12 << 8))
826  << 8))
827  << 8)]]) ||
828  !_stricmp(game_ui_status_bar_event_string.data(),
829  &pLevelStr[pLevelStrOffsets[v84]])) {
830  v11 = _evt->v17;
831  curr_seq_num = v11 - 1;
832  }
833  ++curr_seq_num;
834  v4 = -1;
835  break;
836  case EVENT_RandomGoTo:
837  // v124 = -1;
838  v11 = (unsigned __int8)*(
839  &_evt->v5 +
840  rand() % ((_evt->v5 != 0) + (_evt->v6 != 0) +
841  (_evt->v7 != 0) + (_evt->v8 != 0) +
842  (_evt->v9 != 0) + (_evt->v10 != 0)));
843  curr_seq_num = v11 - 1;
844  ++curr_seq_num;
845  v4 = -1;
846  break;
847  case EVENT_ReceiveDamage:
848  if ((unsigned __int8)_evt->v5 <= 3) {
849  pParty->pPlayers[(unsigned __int8)_evt->v5]
850  .ReceiveDamage(EVT_DWORD(_evt->v7),
851  (DAMAGE_TYPE)_evt->v6);
852  ++curr_seq_num;
853  break;
854  }
855  if (_evt->v5 == 4) {
856  if (!uActiveCharacter) {
857  ++curr_seq_num;
858  break;
859  }
860  pPlayers[uActiveCharacter]->ReceiveDamage(
861  EVT_DWORD(_evt->v7), (DAMAGE_TYPE)_evt->v6);
862  ++curr_seq_num;
863  break;
864  }
865  if (_evt->v5 != 5) {
866  pParty->pPlayers[rand() % 4].ReceiveDamage(
867  EVT_DWORD(_evt->v7), (DAMAGE_TYPE)_evt->v6);
868  ++curr_seq_num;
869  break;
870  }
871  for (uint pl_id = 0; pl_id < 4; pl_id++)
872  pParty->pPlayers[pl_id].ReceiveDamage(
873  EVT_DWORD(_evt->v7), (DAMAGE_TYPE)_evt->v6);
874  ++curr_seq_num;
875  break;
877  pIndoor->ToggleLight(EVT_DWORD(_evt->v5), _evt->v9);
878  ++curr_seq_num;
879  break;
880  case EVENT_SetFacesBit:
881  sub_44892E_set_faces_bit(EVT_DWORD(_evt->v5),
882  EVT_DWORD(_evt->v9), _evt->v13);
883  ++curr_seq_num;
884  break;
886  Chest::ToggleFlag(EVT_DWORD(_evt->v5), EVT_DWORD(_evt->v9),
887  _evt->v13);
888  ++curr_seq_num;
889  break;
891  Actor::ToggleFlag(EVT_DWORD(_evt->v5), EVT_DWORD(_evt->v9),
892  _evt->v13);
893  ++curr_seq_num;
894  break;
896  ToggleActorGroupFlag(EVT_DWORD(_evt->v5),
897  EVT_DWORD(_evt->v9), _evt->v13);
898  ++curr_seq_num;
899  break;
900  case EVENT_SetSnow:
901  if (!_evt->v5) pWeather->bRenderSnow = _evt->v6 != 0;
902  ++curr_seq_num;
903  break;
904  case EVENT_StatusText:
905  v90 = EVT_DWORD(_evt->v5);
906  if (activeLevelDecoration) {
909  pNPCTopics[v90 - 1]
910  .pText; // (&dword_721664)[8 * v90];
911  if (canShowMessages == 1) {
912  v91 = pNPCTopics[v90 - 1]
913  .pText; // (&dword_721664)[8 * v90];
914  // LABEL_248:
915  GameUI_StatusBar_OnEvent(v91, 2);
916  }
917  } else {
918  if (canShowMessages == 1) {
919  v91 = &pLevelStr[pLevelStrOffsets[v90]];
920  GameUI_StatusBar_OnEvent(v91, 2);
921  }
922  }
923  ++curr_seq_num;
924  break;
925  case EVENT_ShowMessage:
926  if (activeLevelDecoration) {
928  pNPCTopics[EVT_DWORD(_evt->v5) - 1]
929  .pText; // (&dword_721664)[8 * v92];
930  branchless_dialogue_str.clear();
931  } else {
933  }
934  ++curr_seq_num;
935  break;
936  case EVENT_CastSpell:
937  EventCastSpell(_evt->v5, _evt->v6, _evt->v7,
938  EVT_DWORD(_evt->v8), EVT_DWORD(_evt->v12),
939  EVT_DWORD(_evt->v16), EVT_DWORD(_evt->v20),
940  EVT_DWORD(_evt->v24), EVT_DWORD(_evt->v28));
941  ++curr_seq_num;
942  break;
943  case EVENT_SetTexture:
944  sub_44861E_set_texture(EVT_DWORD(_evt->v5),
945  (char *)&_evt->v9);
946  ++curr_seq_num;
947  break;
948  case EVENT_SetSprite:
949  SetDecorationSprite(EVT_DWORD(_evt->v5), _evt->v9,
950  (char *)&_evt->v10);
951  ++curr_seq_num;
952  break;
955  _evt->v5, _evt->v6, _evt->v7, EVT_DWORD(_evt->v8),
956  EVT_DWORD(_evt->v12), EVT_DWORD(_evt->v16),
957  EVT_DWORD(_evt->v20), EVT_DWORD(_evt->v24));
958  ++curr_seq_num;
959  break;
960  case EVENT_MouseOver:
961  case EVENT_LocationName:
962  --curr_seq_num; // eh?
963  ++curr_seq_num;
964  break;
966  Door_switch_animation(_evt->v5, _evt->v6);
967  ++curr_seq_num;
968  break;
969  case EVENT_OpenChest:
970  if (!Chest::Open(_evt->v5)) {
971  if (v133 == 1) OnMapLeave();
972  return;
973  }
974  ++curr_seq_num;
975  break;
976  case EVENT_MoveToMap:
977  v94 =
978  _evt->v5 +
979  ((_evt->v6 + ((_evt->v7 + ((uint)_evt->v8 << 8)) << 8))
980  << 8);
981  v135 =
982  _evt->v5 +
983  ((_evt->v6 + ((_evt->v7 + ((uint)_evt->v8 << 8)) << 8))
984  << 8);
985  v132 = _evt->v9 +
986  ((_evt->v10 +
987  ((_evt->v11 + ((uint)_evt->v12 << 8)) << 8))
988  << 8);
989  v126 = _evt->v13 +
990  ((_evt->v14 +
991  ((_evt->v15 + ((uint)_evt->v16 << 8)) << 8))
992  << 8);
993  v129 = _evt->v17 +
994  ((_evt->v18 +
995  ((_evt->v19 + ((uint)_evt->v20 << 8)) << 8))
996  << 8);
997  v95 = _evt->v21 +
998  ((_evt->v22 +
999  ((_evt->v23 + ((uint)_evt->v24 << 8)) << 8))
1000  << 8);
1001  v96 = _evt->v25;
1002  v97 = v96 + ((_evt->v26 +
1003  ((_evt->v27 + ((uint)_evt->v28 << 8)) << 8))
1004  << 8);
1005  v134 = v96 + ((_evt->v26 +
1006  ((_evt->v27 + ((uint)_evt->v28 << 8)) << 8))
1007  << 8);
1008  if (_evt->v29 || _evt->v30) {
1010  _evt->v29, _evt->v30, v135, v132, v126, v129, v95,
1011  v134, (char *)&_evt->v31);
1012  dword_5C3418 = uEventID;
1013  dword_5C341C = curr_seq_num + 1;
1014  if (v133 == 1) OnMapLeave();
1015  return;
1016  }
1018  _evt->v9 +
1019  ((_evt->v10 +
1020  ((_evt->v11 + ((uint)_evt->v12 << 8)) << 8))
1021  << 8);
1022  Party_Teleport_X_Pos = v94;
1023  Party_Teleport_Z_Pos = v126;
1024  if (v129 == -1) {
1025  v98 = Party_Teleport_Cam_Yaw;
1026  } else {
1027  v98 = v129 & stru_5C6E00->uDoublePiMask;
1029  v129 & stru_5C6E00->uDoublePiMask;
1030  }
1031  v99 = (char *)&_evt->v31;
1033  Party_Teleport_Z_Speed = v97;
1034  v100 = v94 | v132 | v126 | v95 | v97 | v98;
1036  if (*v99 == 48) {
1037  if (v100) {
1038  pParty->vPosition.x = v135;
1039  pParty->vPosition.y = v132;
1040  pParty->vPosition.z = v126;
1041  pParty->uFallStartY = v126;
1042  if (Party_Teleport_Cam_Yaw != -1)
1043  pParty->sRotationY =
1046  pParty->sRotationX = v95;
1047  pParty->uFallSpeed = v134;
1054  v106 = 232;
1055  pAudioPlayer->PlaySound((SoundID)v106, 0, 0, -1, 0, 0);
1056  }
1057  } else {
1060  v133 = 1;
1063  pAudioPlayer->StopChannels(-1, -1);
1065  while (HouseDialogPressCloseBtn());
1066  pMediaPlayer->Unload();
1068  window_SpeakInHouse = 0;
1072  pDialogueNPCCount = 0;
1073  if (pDialogueWindow) {
1075  pDialogueWindow = 0;
1076  }
1079  }
1080  OnMapLeave();
1081  return;
1082  }
1083  }
1084  ++curr_seq_num;
1085  break;
1086  case EVENT_PlaySound:
1087  v110 = _evt->v13 +
1088  ((_evt->v14 +
1089  ((_evt->v15 + ((uint)_evt->v16 << 8)) << 8))
1090  << 8);
1091  v109 = _evt->v9 +
1092  ((_evt->v10 +
1093  ((_evt->v11 + ((uint)_evt->v12 << 8)) << 8))
1094  << 8);
1095  v106 =
1096  _evt->v5 +
1097  ((_evt->v6 + ((_evt->v7 + ((uint)_evt->v8 << 8)) << 8))
1098  << 8);
1099  pAudioPlayer->PlaySound((SoundID)v106, 0, 0, v109, v110, 0);
1100  ++curr_seq_num;
1101  break;
1102  case EVENT_GiveItem:
1103  item.Reset();
1104  v102 =
1105  _evt->v7 +
1106  ((_evt->v8 + ((_evt->v9 + ((uint)_evt->v10 << 8)) << 8))
1107  << 8);
1108  pItemsTable->GenerateItem(_evt->v5, _evt->v6, &item);
1109  if (v102) item.uItemID = v102;
1110  pParty->SetHoldingItem(&item);
1111  ++curr_seq_num;
1112  break;
1113  case EVENT_SpeakInHouse:
1114  if (EnterHouse((enum HOUSE_ID)EVT_DWORD(_evt->v5))) {
1115  pAudioPlayer->PlaySound(SOUND_Invalid, 0, 0, -1, 0, 0);
1116  pAudioPlayer->PlaySound(SOUND_enter, 814, 0, -1, 0, 0);
1117  v104 = 187;
1118  if (uCurrentHouse_Animation != 167)
1119  v104 = EVT_DWORD(_evt->v5);
1121  new GUIWindow_House(0, 0, window->GetWidth(),
1122  window->GetHeight(), v104);
1123  window_SpeakInHouse->CreateButton(61, 424, 31, 0, 2, 94,
1125  1, '1', "");
1127  177, 424, 31, 0, 2, 94, UIMSG_SelectCharacter, 2,
1128  '2', "");
1130  292, 424, 31, 0, 2, 94, UIMSG_SelectCharacter, 3,
1131  '3', "");
1133  407, 424, 31, 0, 2, 94, UIMSG_SelectCharacter, 4,
1134  '4', "");
1135  window_SpeakInHouse->CreateButton(0, 0, 0, 0, 1, 0,
1137  0, '\t', "");
1138  }
1139  ++curr_seq_num;
1140  break;
1141  case EVENT_PressAnyKey:
1142  sub_4451A8_press_any_key(uEventID, curr_seq_num + 1, 33);
1143  if (v133 == 1) OnMapLeave();
1144  return;
1145  case EVENT_Exit:
1146  if (v133 == 1) OnMapLeave();
1147  return;
1148  default:
1149  ++curr_seq_num;
1150  break;
1151  }
1152  }
1153  }
1154  if (v133 == 1) OnMapLeave();
1155  return;
1156 }

Перекрестные ссылки __debugbreak(), stru123::_decor_events, _evt_raw::_e_type, LevelDecoration::_idx_in_stru123, activeLevelDecoration, Player::AddVariable(), bDialogueUI_InitializeActor_NPC_ID, branchless_dialogue_str, ViewingParams::bRedrawGameUI, Weather::bRenderSnow, GUIWindow::CreateButton(), current_npc_text, current_screen_type, GUIWindow::DeleteButtons(), dialog_menu_id, Door_switch_animation(), dword_5B65C4_cancelEventProcessing, dword_5B65D0_dialogue_actor_npc_id, dword_5C3418, dword_5C341C, EnterHouse(), EVENT_Add, EVENT_CastSpell, EVENT_ChangeDoorState, EVENT_ChangeEvent, EVENT_ChangeGroup, EVENT_ChangeGroupAlly, EVENT_CharacterAnimation, EVENT_CheckSeason, EVENT_CheckSkill, EVENT_Compare, EVENT_Exit, EVENT_ForPartyMember, EVENT_GiveItem, EVENT_InputString, EVENT_IsActorAlive, EVENT_Jmp, EVENT_LocationName, EVENT_MouseOver, EVENT_MoveNPC, EVENT_MoveToMap, EVENT_NPCSetItem, EVENT_OpenChest, EVENT_PlaySound, EVENT_PressAnyKey, EVENT_RandomGoTo, EVENT_ReceiveDamage, EVENT_Set, EVENT_SetActorGroup, EVENT_SetActorItem, EVENT_SetFacesBit, EVENT_SetNPCGreeting, EVENT_SetNPCGroupNews, EVENT_SetNPCTopic, EVENT_SetSnow, EVENT_SetSprite, EVENT_SetTexture, EVENT_ShowFace, EVENT_ShowMessage, EVENT_SpeakInHouse, EVENT_SpeakNPC, EVENT_StatusText, EVENT_Substract, EVENT_SummonItem, EVENT_SummonMonsters, EVENT_ToggleActorFlag, EVENT_ToggleActorGroupFlag, EVENT_ToggleChestFlag, EVENT_ToggleIndoorLight, EventCastSpell(), NPCData::evt_A, NPCData::evt_B, NPCData::evt_C, NPCData::evt_D, NPCData::evt_E, NPCData::evt_F, EvtTargetObj, GUIMessageQueue::Flush(), GAME_STATE_CHANGE_LOCATION, game_ui_status_bar_event_string, game_ui_status_bar_event_string_time_left, GameUI_InitializeDialogue(), GameUI_StatusBar_OnEvent(), ItemsTable::GenerateItem(), Localization::GetString(), Actor::GiveItem(), NPCData::greet, HOUSE_BODY_GUILD_ERATHIA, HOUSE_DARK_GUILD_PIT, HOUSE_DIALOGUE_NULL, HouseDialogPressCloseBtn(), GUIProgressBar::Initialize(), IsActorAlive(), LEVEL_DECORATION_INVISIBLE, localization, NPCData::Location2D, MapStartPoint_Party, OnMapLeave(), Chest::Open(), pActors, GUIWindow::par1C, Party_Teleport_Cam_Pitch, Party_Teleport_Cam_Yaw, Party_Teleport_X_Pos, Party_Teleport_Y_Pos, Party_Teleport_Z_Pos, Party_Teleport_Z_Speed, pAudioPlayer, pDialogueNPCCount, pDialogueWindow, pGameLoadingUI_ProgressBar, pGlobalEVT, pGlobalEVT_Index, NPCStats::pGroups_copy, pIcons_LOD, pIndoor, pItemsTable, AudioPlayer::PlaySound(), pLevelEVT, pLevelEVT_Index, pLevelStr, pLevelStrOffsets, pMediaPlayer, pMessageQueue_50CBD0, NPCStats::pNewNPCData, pNPCStats, pNPCTopics, pParty, pPlayers, Party::pPlayers, pSomeEVT, pSomeEVT_Events, pWeather, GUIWindow::Release(), ItemGen::Reset(), SCREEN_GAME, SCREEN_HOUSE, SetDecorationSprite(), Party::SetHoldingItem(), Actor::sNPC_ID, SOUND_enter, SOUND_Invalid, Party::sRotationX, Party::sRotationY, Start_Party_Teleport_Flag, AudioPlayer::StopChannels(), stru_5C6E00, stru_5E4C90_MapPersistVars, SpriteObject::sub_42F7EB_DropItemAt(), sub_4451A8_press_any_key(), sub_4465DF_check_season(), sub_448518_npc_set_item(), sub_44861E_set_texture(), sub_44892E_set_faces_bit(), sub_448CF4_spawn_monsters(), LODFile_IconsBitmaps::SyncLoadedFilesCount(), ToggleActorGroupFlag(), Chest::ToggleFlag(), Actor::ToggleFlag(), IndoorLocation::ToggleLight(), Transition_StopSound_Autosave(), uActiveCharacter, uCurrentHouse_Animation, stru193_math::uDoublePiMask, Party::uFallSpeed, Party::uFallStartY, LevelDecoration::uFlags, NPCData::uFlags, Party::uFlags, uGameState, uGlobalEVT_NumEvents, UIMSG_CycleCharacters, UIMSG_SelectCharacter, ItemGen::uItemID, uLevelEVT_NumEvents, MPlayer::Unload(), uNumActors, uSomeEVT_NumEvents, _evt_raw::v10, _evt_raw::v11, _evt_raw::v12, _evt_raw::v13, _evt_raw::v14, _evt_raw::v15, _evt_raw::v16, _evt_raw::v17, _evt_raw::v18, _evt_raw::v19, _evt_raw::v20, _evt_raw::v21, _evt_raw::v22, _evt_raw::v23, _evt_raw::v24, _evt_raw::v25, _evt_raw::v26, _evt_raw::v27, _evt_raw::v28, _evt_raw::v29, _evt_raw::v30, _evt_raw::v31, _evt_raw::v5, _evt_raw::v6, _evt_raw::v7, _evt_raw::v8, _evt_raw::v9, VAR_PlayerItemInHands, viewparams, Party::vPosition и window_SpeakInHouse.

Используется в CastSpellInfoHelpers::_427E01_cast_spell(), BLV_ProcessPartyActions(), check_event_triggers(), ClickNPCTopic(), DecorationInteraction(), DoInteractionWithTopmostZObject(), Application::Game::EventLoop(), ODM_ProcessPartyActions(), Engine::OnGameViewportClick(), OnMapLeave(), OnMapLoad(), OnSelectNPCDialogueOption(), OnTimer(), sub_4452BB(), UpdateActors_BLV(), SpriteObject::UpdateObject_fn0_BLV() и SpriteObject::UpdateObject_fn0_ODM().

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

◆ GetEventHintString()

char* GetEventHintString ( unsigned int  uEventID)

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

1159  {
1160  signed int event_index; // edx@1
1161  int event_pos; // esi@4
1162  char *result; // eax@6
1163  unsigned int str_index; // eax@9
1164  int i; // esi@11
1165  _evt_raw *test_evt;
1166  _evt_raw *last_evt;
1167 
1168  event_index = 0;
1169  if (uLevelEVT_NumEvents <= 0) return NULL;
1170 
1171  // v2 = (char *)&pLevelEVT_Index[0].uEventOffsetInEVT;
1172  while (1) {
1173  if (pLevelEVT_Index[event_index].uEventID == uEventID) {
1174  test_evt = (_evt_raw *)&pLevelEVT[pLevelEVT_Index[event_index]
1175  .uEventOffsetInEVT];
1176  last_evt = test_evt;
1177  event_pos = pLevelEVT_Index[event_index + 1].uEventOffsetInEVT;
1178  if (test_evt->_e_type == EVENT_MouseOver) break;
1179  }
1180  ++event_index;
1181  if (event_index >= uLevelEVT_NumEvents) return NULL;
1182  }
1183  test_evt = (_evt_raw *)&pLevelEVT[event_pos];
1184  if (test_evt->_e_type == EVENT_SpeakInHouse) {
1185  str_index = EVT_DWORD(test_evt->v5);
1186  result = (char *)p2DEvents[str_index - 1].pName;
1187  } else {
1188  for (i = event_index + 1; pLevelEVT_Index[i].uEventID == uEventID;
1189  ++i) {
1190  event_pos = pLevelEVT_Index[i].uEventOffsetInEVT;
1191  test_evt = (_evt_raw *)&pLevelEVT[event_pos];
1192  if (test_evt->_e_type == EVENT_SpeakInHouse) {
1193  str_index = EVT_DWORD(test_evt->v5);
1194  if (str_index < 525) // 600
1195  return (char *)p2DEvents[str_index - 1].pName;
1196  }
1197  }
1198  result = &pLevelStr[pLevelStrOffsets[EVT_BYTE(last_evt->v5)]];
1199  }
1200 
1201  return result;
1202 }

Перекрестные ссылки _evt_raw::_e_type, EVENT_MouseOver, EVENT_SpeakInHouse, p2DEvents, pLevelEVT, pLevelEVT_Index, pLevelStr, pLevelStrOffsets, _2devent::pName, uLevelEVT_NumEvents и _evt_raw::v5.

Используется в GameUI_GetMinimapHintText(), GameUI_WritePointedObjectStatusString() и GetMapBookHintText().

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

◆ init_event_triggers()

void init_event_triggers ( )

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

1205  {
1206  uint id = pDecorationList->GetDecorIdByName("Event Trigger");
1207 
1208  num_event_triggers = 0;
1209  for (uint i = 0; i < uNumLevelDecorations; ++i)
1210  if (pLevelDecorations[i].uDecorationDescID == id)
1212 }

Перекрестные ссылки event_triggers, DecorationList::GetDecorIdByName(), num_event_triggers, pDecorationList, pLevelDecorations и uNumLevelDecorations.

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

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

◆ check_event_triggers()

void check_event_triggers ( )

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

1215  {
1216  for (size_t i = 0; i < num_event_triggers; i++) {
1217  if (pLevelDecorations[event_triggers[i]].uFlags &
1219  pLevelDecorations[event_triggers[i]].vPosition.GetDistanceTo(
1220  pParty->vPosition) <
1221  pLevelDecorations[event_triggers[i]].uTriggerRange) {
1223  PID(OBJECT_Decoration, i), 1);
1224  } else if (pLevelDecorations[event_triggers[i]].uFlags &
1226  for (size_t j = 0; j < uNumActors; j++) {
1228  .vPosition.GetDistanceTo(pActors[j].vPosition) <
1229  pLevelDecorations[event_triggers[i]].uTriggerRange)
1231  pLevelDecorations[event_triggers[i]].uEventID, 0, 1);
1232  }
1233  } else if (pLevelDecorations[event_triggers[i]].uFlags &
1235  for (size_t j = 0; j < uNumSpriteObjects; j++) {
1237  .vPosition.GetDistanceTo(pSpriteObjects[j].vPosition) <
1238  pLevelDecorations[event_triggers[i]].uTriggerRange)
1240  pLevelDecorations[event_triggers[i]].uEventID, 0, 1);
1241  }
1242  }
1243  }
1244 }

Перекрестные ссылки event_triggers, EventProcessor(), LEVEL_DECORATION_TRIGGERED_BY_MONSTER, LEVEL_DECORATION_TRIGGERED_BY_OBJECT, LEVEL_DECORATION_TRIGGERED_BY_TOUCH, num_event_triggers, OBJECT_Decoration, pActors, pLevelDecorations, pParty, pSpriteObjects, uNumActors, uNumSpriteObjects и Party::vPosition.

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

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

◆ sub_4465DF_check_season()

bool sub_4465DF_check_season ( int  a1)

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

1247  {
1248  auto monthPlusOne = pParty->uCurrentMonth + 1;
1249  auto daysPlusOne = pParty->uCurrentDayOfMonth + 1;
1250 
1251  switch (a1) {
1252  case 3: // winter 12.21 -> 3.20
1253  return (monthPlusOne == 12 && daysPlusOne >= 21 ||
1254  monthPlusOne == 1 || monthPlusOne == 2 ||
1255  monthPlusOne == 3 && daysPlusOne <= 20);
1256 
1257  case 2: // autumn/fall 9.21 -> 12.20
1258  return (monthPlusOne == 9 && daysPlusOne >= 21 ||
1259  monthPlusOne == 10 || monthPlusOne == 11 ||
1260  monthPlusOne == 12 && daysPlusOne <= 20);
1261 
1262  case 1: // summer 6.21 -> 9.20
1263  return (monthPlusOne == 6 && daysPlusOne >= 21 ||
1264  monthPlusOne == 7 || monthPlusOne == 8 ||
1265  monthPlusOne == 9 && daysPlusOne <= 20);
1266 
1267  case 0: // spring 3.21 -> 6.20
1268  return (monthPlusOne == 3 && daysPlusOne >= 21 ||
1269  monthPlusOne == 4 || monthPlusOne == 5 ||
1270  monthPlusOne == 6 && daysPlusOne <= 20);
1271 
1272  default:
1273  Error("Unknown season");
1274  }
1275 
1276  return false;
1277 }

Перекрестные ссылки pParty, Party::uCurrentDayOfMonth и Party::uCurrentMonth.

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

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

◆ sub_448CF4_spawn_monsters()

void sub_448CF4_spawn_monsters ( __int16  typeindex,
__int16  level,
int  count,
int  x,
int  y,
int  z,
int  group,
unsigned int  uUniqueName 
)

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

1282  {
1283  unsigned int map_id; // eax@1
1284  size_t old_num_actors; // ebx@2
1285  AIDirection v15; // [sp+28h] [bp-34h]@2
1286  SpawnPointMM7 pSpawnPoint; // [sp+44h] [bp-18h]@1
1287 
1288  pSpawnPoint.vPosition.x = x;
1289  pSpawnPoint.vPosition.y = y;
1290  pSpawnPoint.vPosition.z = z;
1291  pSpawnPoint.uGroup = group;
1292  pSpawnPoint.uRadius = 32;
1293  pSpawnPoint.uKind = 3;
1294  pSpawnPoint.uIndex = typeindex + 2 * level + level;
1296  if (map_id) {
1297  old_num_actors = uNumActors;
1298  SpawnEncounter(&pMapStats->pInfos[map_id], &pSpawnPoint, 0, count, 0);
1299  Actor::GetDirectionInfo(PID(OBJECT_Actor, old_num_actors), 4, &v15, 1);
1300  for (uint i = (unsigned int)old_num_actors;
1301  i < (unsigned int)uNumActors; ++i) {
1302  pActors[i].PrepareSprites(0);
1303  pActors[i].uYawAngle = v15.uYawAngle;
1304  pActors[i].dword_000334_unique_name = uUniqueName;
1305  }
1306  }
1307 }

Перекрестные ссылки Actor::GetDirectionInfo(), MapStats::GetMapInfo(), OBJECT_Actor, pActors, pCurrentMapName, MapStats::pInfos, pMapStats, SpawnEncounter(), SpawnPointMM7::uGroup, SpawnPointMM7::uIndex, SpawnPointMM7::uKind, uNumActors, SpawnPointMM7::uRadius, AIDirection::uYawAngle и SpawnPointMM7::vPosition.

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

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

Переменные

◆ pSomeOtherEVT_Events

std::array<EventIndex, 4400> pSomeOtherEVT_Events

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

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

◆ uSomeOtherEVT_NumEvents

signed int uSomeOtherEVT_NumEvents

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

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

◆ pSomeOtherEVT

char* pSomeOtherEVT

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

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

◆ pSomeEVT_Events

std::array<EventIndex, 4400> pSomeEVT_Events

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

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

◆ uSomeEVT_NumEvents

signed int uSomeEVT_NumEvents

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

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

◆ pSomeEVT

char* pSomeEVT

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

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

◆ uGlobalEVT_NumEvents

unsigned int uGlobalEVT_NumEvents

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

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

◆ uGlobalEVT_Size

unsigned int uGlobalEVT_Size

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

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

◆ pGlobalEVT

std::array<char, 46080> pGlobalEVT

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

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

◆ pGlobalEVT_Index

std::array<EventIndex, 4400> pGlobalEVT_Index

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

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

◆ pLevelStrOffsets

std::array<unsigned int, 500> pLevelStrOffsets

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

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

◆ uLevelStrNumStrings

unsigned int uLevelStrNumStrings

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

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

◆ uLevelStrFileSize

unsigned int uLevelStrFileSize

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

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

◆ uLevelEVT_NumEvents

signed int uLevelEVT_NumEvents

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

Используется в EventProcessor(), GetEventHintString(), ODMFace::HasEventHint(), BLVFaceExtra::HasEventint(), LoadLevel_InitializeLevelEvt(), OnMapLeave() и OnMapLoad().

◆ uLevelEVT_Size

unsigned int uLevelEVT_Size

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

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

◆ pLevelStr

std::array<char, 9216> pLevelStr

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

Используется в EventProcessor(), GetEventHintString(), Level_LoadEvtAndStr() и LoadLevel_InitializeLevelStr().

◆ pLevelEVT

std::array<char, 9216> pLevelEVT

◆ pLevelEVT_Index

std::array<EventIndex, 4400> pLevelEVT_Index

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

Используется в EventProcessor(), GetEventHintString(), ODMFace::HasEventHint(), BLVFaceExtra::HasEventint(), LoadLevel_InitializeLevelEvt(), OnMapLeave() и OnMapLoad().

◆ p2DEvents

SetDecorationSprite
void SetDecorationSprite(uint16_t uCog, bool bHide, const char *pFileName)
Definition: Engine.cpp:1590
Player
Definition: Player.h:401
EVENT_ShowMessage
@ EVENT_ShowMessage
Definition: Events.h:86
uNumActors
size_t uNumActors
Definition: Actor.cpp:39
Party::vPosition
Vec3_int_ vPosition
Definition: Party.h:250
_evt_raw::v14
unsigned char v14
Definition: Events.h:36
SpawnPointMM7::uKind
uint16_t uKind
Definition: Indoor.h:316
EVENT_ChangeGroup
@ EVENT_ChangeGroup
Definition: Events.h:110
Localization::GetString
const char * GetString(unsigned int index) const
Definition: Localization.cpp:13
pLevelDecorations
std::array< LevelDecoration, 3000 > pLevelDecorations
Definition: Decoration.cpp:8
EVENT_MoveToMap
@ EVENT_MoveToMap
Definition: Events.h:66
Party::uFallSpeed
int uFallSpeed
Definition: Party.h:259
_evt_raw::v23
unsigned char v23
Definition: Events.h:45
_evt_raw::v22
unsigned char v22
Definition: Events.h:44
Party::uCurrentMonth
unsigned int uCurrentMonth
Definition: Party.h:272
MapStats::pInfos
MapInfo pInfos[77]
Definition: MapInfo.h:79
UIMSG_CycleCharacters
@ UIMSG_CycleCharacters
Definition: GUIWindow.h:143
Actor::ToggleFlag
static void ToggleFlag(signed int uActorID, unsigned int uFlag, int bToggle)
Definition: Actor.cpp:112
EVENT_Exit
@ EVENT_Exit
Definition: Events.h:61
stru193_math::uDoublePiMask
static const unsigned int uDoublePiMask
Definition: OurMath.h:91
EVENT_Jmp
@ EVENT_Jmp
Definition: Events.h:92
LEVEL_DECORATION_TRIGGERED_BY_MONSTER
@ LEVEL_DECORATION_TRIGGERED_BY_MONSTER
Definition: Decoration.h:10
sub_44861E_set_texture
void sub_44861E_set_texture(unsigned int uFaceCog, const char *pFilename)
Definition: Engine.cpp:1538
pSpriteObjects
std::array< SpriteObject, MAX_SPRITE_OBJECTS > pSpriteObjects
Definition: SpriteObject.cpp:34
ToggleActorGroupFlag
void ToggleActorGroupFlag(unsigned int uGroupID, unsigned int uFlag, unsigned int bToggle)
Definition: Actor.cpp:4426
Start_Party_Teleport_Flag
int Start_Party_Teleport_Flag
Definition: mm7_data.cpp:628
EVENT_CheckSkill
@ EVENT_CheckSkill
Definition: Events.h:99
NPCData::uFlags
unsigned int uFlags
Definition: NPC.h:84
Party_Teleport_Y_Pos
int Party_Teleport_Y_Pos
Definition: mm7_data.cpp:623
_evt_raw::v16
unsigned char v16
Definition: Events.h:38
uGameState
unsigned int uGameState
Definition: mm7_data.cpp:695
_evt_raw::v7
unsigned char v7
Definition: Events.h:29
_evt_raw::v17
unsigned char v17
Definition: Events.h:39
Weather::bRenderSnow
bool bRenderSnow
Definition: Weather.h:18
Party::sRotationX
int sRotationX
Definition: Party.h:252
sub_4451A8_press_any_key
void sub_4451A8_press_any_key(int a1, int a2, int a4)
Definition: UIDialogue.cpp:615
EVENT_SetActorGroup
@ EVENT_SetActorGroup
Definition: Events.h:104
z
GLdouble GLdouble z
Definition: SDL_opengl_glext.h:407
GUIWindow::CreateButton
GUIButton * CreateButton(int x, int y, int width, int height, int a6, int a7, UIMessageType msg, unsigned int msg_param, uint8_t hotkey, const String &label, const std::vector< Image * > &textures=std::vector< Image * >())
Definition: GUIWindow.cpp:717
sub_448518_npc_set_item
void sub_448518_npc_set_item(int npc, unsigned int item, int a3)
Definition: Actor.cpp:127
dialog_menu_id
HOUSE_DIALOGUE_MENU dialog_menu_id
Definition: UIHouses.cpp:50
LOD::File::LoadCompressedTexture
void * LoadCompressedTexture(const String &pContainer, size_t *data_size=nullptr)
Definition: LOD.cpp:921
GUIMessageQueue::Flush
void Flush()
Definition: GUIWindow.cpp:159
MapStats::GetMapInfo
MAP_TYPE GetMapInfo(const String &Str2)
Definition: MapInfo.cpp:225
level
GLint level
Definition: SDL_opengl.h:1572
Actor
Definition: Actor.h:151
pNPCTopics
std::array< NPCTopic, 789 > pNPCTopics
Definition: mm7_data.cpp:740
AudioPlayer::PlaySound
void PlaySound(SoundID eSoundID, int pid, unsigned int uNumRepeats, int x, int y, int a7)
Definition: AudioPlayer.cpp:195
GUIWindow_Transition
Definition: UITransition.h:14
_evt_raw::v30
unsigned char v30
Definition: Events.h:52
EVENT_SetSnow
@ EVENT_SetSnow
Definition: Events.h:70
pSomeEVT_Events
std::array< EventIndex, 4400 > pSomeEVT_Events
Definition: Events.cpp:39
count
GLuint GLuint GLsizei count
Definition: SDL_opengl.h:1571
_evt_raw::v18
unsigned char v18
Definition: Events.h:40
NPCStats::pGroups_copy
uint16_t pGroups_copy[51]
Definition: NPC.h:177
NPCData::evt_B
unsigned int evt_B
Definition: NPC.h:94
EvtTargetObj
int EvtTargetObj
Definition: mm7_data.cpp:620
pSomeEVT
char * pSomeEVT
Definition: Events.cpp:41
LODFile_IconsBitmaps::SyncLoadedFilesCount
void SyncLoadedFilesCount()
Definition: LOD.cpp:375
EVENT_ChangeEvent
@ EVENT_ChangeEvent
Definition: Events.h:98
localization
Localization * localization
Definition: Localization.cpp:11
_evt_raw::v20
unsigned char v20
Definition: Events.h:42
pMediaPlayer
MPlayer * pMediaPlayer
Definition: MediaPlayer.cpp:43
_evt_raw::v31
unsigned char v31
Definition: Events.h:53
_evt_raw::_e_type
unsigned char _e_type
Definition: Events.h:26
UIMSG_SelectCharacter
@ UIMSG_SelectCharacter
Definition: GUIWindow.h:93
Party::pPlayers
std::array< Player, 4 > pPlayers
Definition: Party.h:310
GUIProgressBar::Type
Type
Definition: GUIProgressBar.h:9
GUIWindow::Release
virtual void Release()
Definition: GUIWindow.cpp:292
bDialogueUI_InitializeActor_NPC_ID
int bDialogueUI_InitializeActor_NPC_ID
Definition: mm7_data.cpp:642
dword_5C3418
int dword_5C3418
Definition: mm7_data.cpp:634
SpawnPointMM7
Definition: Indoor.h:304
EVENT_ToggleActorGroupFlag
@ EVENT_ToggleActorGroupFlag
Definition: Events.h:113
EVENT_ReceiveDamage
@ EVENT_ReceiveDamage
Definition: Events.h:69
OBJECT_Decoration
@ OBJECT_Decoration
Definition: Actor.h:69
NPCData::evt_E
unsigned int evt_E
Definition: NPC.h:97
ItemGen::Reset
void Reset()
Definition: Items.cpp:133
_evt_raw::v9
unsigned char v9
Definition: Events.h:31
NPCData::evt_C
unsigned int evt_C
Definition: NPC.h:95
pPlayers
NZIArray< struct Player *, 5 > pPlayers
Definition: Player.cpp:46
DecorationList::GetDecorIdByName
uint16_t GetDecorIdByName(const char *pName)
Definition: DecorationList.cpp:60
pGlobalEVT
std::array< char, 46080 > pGlobalEVT
Definition: Events.cpp:45
pIndoor
IndoorLocation * pIndoor
Definition: Indoor.cpp:49
sub_4465DF_check_season
bool sub_4465DF_check_season(int a1)
Definition: Events.cpp:1247
current_screen_type
enum CURRENT_SCREEN current_screen_type
Definition: GUIWindow.cpp:83
Chest::ToggleFlag
static void ToggleFlag(int uChestID, uint16_t uFlag, unsigned int bToggle)
Definition: Chest.cpp:432
dword_5B65C4_cancelEventProcessing
int dword_5B65C4_cancelEventProcessing
Definition: mm7_data.cpp:629
p2DEvents
_2devent p2DEvents[525]
Definition: Events.cpp:57
result
GLuint64EXT * result
Definition: SDL_opengl_glext.h:9435
_2devent::pName
char * pName
Definition: Events2D.h:43
EventIndex
Definition: Events.h:6
pMapStats
struct MapStats * pMapStats
Definition: mm7_data.cpp:20
AIDirection
Definition: Actor.h:126
OBJECT_Actor
@ OBJECT_Actor
Definition: Actor.h:67
EVENT_CharacterAnimation
@ EVENT_CharacterAnimation
Definition: Events.h:115
EVENT_SetNPCTopic
@ EVENT_SetNPCTopic
Definition: Events.h:95
Party::uFallStartY
int uFallStartY
Definition: Party.h:265
EVENT_SetNPCGreeting
@ EVENT_SetNPCGreeting
Definition: Events.h:106
_evt_raw::v8
unsigned char v8
Definition: Events.h:30
pItemsTable
struct ItemsTable * pItemsTable
Definition: Items.cpp:37
EVENT_Set
@ EVENT_Set
Definition: Events.h:77
NPCData::evt_A
unsigned int evt_A
Definition: NPC.h:93
EVENT_MouseOver
@ EVENT_MouseOver
Definition: Events.h:64
pWeather
Weather * pWeather
Definition: Weather.cpp:8
_evt_raw::v6
unsigned char v6
Definition: Events.h:28
y
EGLSurface EGLint EGLint y
Definition: SDL_egl.h:1596
NPCData::evt_D
unsigned int evt_D
Definition: NPC.h:96
Door_switch_animation
void Door_switch_animation(unsigned int uDoorID, int a2)
Definition: Indoor.cpp:5183
AIDirection::uYawAngle
unsigned int uYawAngle
Definition: Actor.h:130
uGlobalEVT_NumEvents
unsigned int uGlobalEVT_NumEvents
Definition: Events.cpp:43
window_SpeakInHouse
GUIWindow * window_SpeakInHouse
Definition: GUIWindow.cpp:51
EVENT_ShowFace
@ EVENT_ShowFace
Definition: Events.h:68
GUIProgressBar::Initialize
bool Initialize(Type type)
Definition: GUIProgressBar.cpp:22
DAMAGE_TYPE
DAMAGE_TYPE
Definition: Items.h:10
EVENT_Add
@ EVENT_Add
Definition: Events.h:75
activeLevelDecoration
LevelDecoration * activeLevelDecoration
Definition: Decoration.cpp:10
HOUSE_ID
HOUSE_ID
Definition: UIHouses.h:50
pGlobalEVT_Index
std::array< EventIndex, 4400 > pGlobalEVT_Index
Definition: Events.cpp:46
_evt_raw::v19
unsigned char v19
Definition: Events.h:41
pParty
Party * pParty
Definition: Party.cpp:30
EVENT_NPCSetItem
@ EVENT_NPCSetItem
Definition: Events.h:105
Party_Teleport_Cam_Pitch
int Party_Teleport_Cam_Pitch
Definition: mm7_data.cpp:626
GUIWindow::DeleteButtons
void DeleteButtons()
Definition: GUIWindow.cpp:305
EVENT_SetNPCGroupNews
@ EVENT_SetNPCGroupNews
Definition: Events.h:103
LEVEL_DECORATION_INVISIBLE
@ LEVEL_DECORATION_INVISIBLE
Definition: Decoration.h:14
NPCStats::pNewNPCData
NPCData pNewNPCData[501]
Definition: NPC.h:165
_evt_raw::v27
unsigned char v27
Definition: Events.h:49
current_npc_text
String current_npc_text
Definition: mm7_data.cpp:780
CHARACTER_EXPRESSION_ID
CHARACTER_EXPRESSION_ID
Definition: Player.h:341
LEVEL_DECORATION_TRIGGERED_BY_TOUCH
@ LEVEL_DECORATION_TRIGGERED_BY_TOUCH
Definition: Decoration.h:9
_evt_raw::v25
unsigned char v25
Definition: Events.h:47
_evt_raw::v26
unsigned char v26
Definition: Events.h:48
x
EGLSurface EGLint x
Definition: SDL_egl.h:1596
sub_448CF4_spawn_monsters
void sub_448CF4_spawn_monsters(__int16 typeindex, __int16 level, int count, int x, int y, int z, int group, unsigned int uUniqueName)
Definition: Events.cpp:1280
EVENT_IsActorAlive
@ EVENT_IsActorAlive
Definition: Events.h:107
pGameLoadingUI_ProgressBar
GUIProgressBar * pGameLoadingUI_ProgressBar
Definition: GUIProgressBar.cpp:14
viewparams
struct ViewingParams * viewparams
Definition: mm7_data.cpp:22
ItemsTable::GenerateItem
void GenerateItem(int treasure_level, unsigned int uTreasureType, ItemGen *pItem)
Definition: Items.cpp:680
Player::AddVariable
void AddVariable(enum VariableType var, signed int val)
Definition: Player.cpp:5658
CURRENT_SCREEN::SCREEN_HOUSE
@ SCREEN_HOUSE
group
GLboolean GLuint group
Definition: SDL_opengl_glext.h:4999
pLevelEVT
std::array< char, 9216 > pLevelEVT
Definition: Events.cpp:54
_evt_raw::v13
unsigned char v13
Definition: Events.h:35
Party_Teleport_X_Pos
int Party_Teleport_X_Pos
Definition: mm7_data.cpp:622
ItemGen::uItemID
int uItemID
Definition: Items.h:326
EVENT_SummonItem
@ EVENT_SummonItem
Definition: Events.h:90
MPlayer::Unload
void Unload()
Definition: MediaPlayer.cpp:826
IsActorAlive
int IsActorAlive(unsigned int uType, unsigned int uParam, unsigned int uNumAlive)
Definition: Actor.cpp:3240
stru123::_decor_events
std::array< unsigned char, 125 > _decor_events
Definition: stru123.h:8
SpawnPointMM7::uRadius
uint16_t uRadius
Definition: Indoor.h:315
EVENT_ChangeGroupAlly
@ EVENT_ChangeGroupAlly
Definition: Events.h:111
pIcons_LOD
LODFile_IconsBitmaps * pIcons_LOD
Definition: LOD.cpp:12
LevelDecoration::uFlags
uint16_t uFlags
Definition: Decoration.h:27
Actor::GetDirectionInfo
static void GetDirectionInfo(unsigned int uObj1ID, unsigned int uObj2ID, struct AIDirection *pOut, int a4)
Definition: Actor.cpp:890
dword_5B65D0_dialogue_actor_npc_id
signed int dword_5B65D0_dialogue_actor_npc_id
Definition: mm7_data.cpp:633
AudioPlayer::StopChannels
void StopChannels(int uStartChannel, int uEndChannel)
Definition: AudioPlayer.cpp:331
pActors
std::array< Actor, 500 > pActors
Definition: Actor.cpp:38
Party_Teleport_Cam_Yaw
int Party_Teleport_Cam_Yaw
Definition: mm7_data.cpp:625
uCurrentHouse_Animation
int uCurrentHouse_Animation
Definition: mm7_data.cpp:607
uNumLevelDecorations
size_t uNumLevelDecorations
Definition: Decoration.cpp:9
window
EGLSurface EGLNativeWindowType * window
Definition: SDL_egl.h:1580
EVENT_ChangeDoorState
@ EVENT_ChangeDoorState
Definition: Events.h:74
Party::uFlags
unsigned int uFlags
Definition: Party.h:313
branchless_dialogue_str
String branchless_dialogue_str
Definition: mm7_data.cpp:619
EVENT_RandomGoTo
@ EVENT_RandomGoTo
Definition: Events.h:83
Actor::sNPC_ID
int16_t sNPC_ID
Definition: Actor.h:287
EVENT_ToggleActorFlag
@ EVENT_ToggleActorFlag
Definition: Events.h:82
MapsLongTimers_count
int MapsLongTimers_count
Definition: mm7_data.cpp:630
_evt_raw::v10
unsigned char v10
Definition: Events.h:32
Transition_StopSound_Autosave
void Transition_StopSound_Autosave(const char *pMapName, MapStartPoint start_point)
Definition: Engine.cpp:2464
LEVEL_DECORATION_TRIGGERED_BY_OBJECT
@ LEVEL_DECORATION_TRIGGERED_BY_OBJECT
Definition: Decoration.h:11
SOUND_Invalid
@ SOUND_Invalid
Definition: AudioPlayer.h:11
EVENT_LocationName
@ EVENT_LocationName
Definition: Events.h:65
NPCData
Definition: NPC.h:79
LoadEventsToBuffer
unsigned int LoadEventsToBuffer(const char *pContainerName, char *pBuffer, unsigned int uBufferSize)
Definition: Events.cpp:59
EVENT_SetSprite
@ EVENT_SetSprite
Definition: Events.h:72
SOUND_enter
@ SOUND_enter
Definition: AudioPlayer.h:12
pDialogueNPCCount
int pDialogueNPCCount
Definition: NPC.cpp:26
LevelDecoration
Definition: Decoration.h:20
pCurrentMapName
String pCurrentMapName
Definition: mm7_data.cpp:712
uLevelEVT_Size
unsigned int uLevelEVT_Size
Definition: Events.cpp:52
pLevelEVT_Index
std::array< EventIndex, 4400 > pLevelEVT_Index
Definition: Events.cpp:55
num_event_triggers
size_t num_event_triggers
Definition: mm7_data.cpp:688
EVENT_SummonMonsters
@ EVENT_SummonMonsters
Definition: Events.h:78
EVENT_CheckSeason
@ EVENT_CheckSeason
Definition: Events.h:112
pEvents_LOD
LODFile_IconsBitmaps * pEvents_LOD
Definition: LOD.cpp:10
EventCastSpell
void EventCastSpell(int uSpellID, int uSkillLevel, int uSkill, int fromx, int fromy, int fromz, int tox, int toy, int toz)
Definition: Spells.cpp:429
EVENT_CastSpell
@ EVENT_CastSpell
Definition: Events.h:79
pLevelStr
std::array< char, 9216 > pLevelStr
Definition: Events.cpp:53
_evt_raw::v15
unsigned char v15
Definition: Events.h:37
Chest::Open
static bool Open(int uChestID)
Definition: Chest.cpp:41
NPCData::Location2D
unsigned int Location2D
Definition: NPC.h:88
SPRITE_OBJECT_TYPE
SPRITE_OBJECT_TYPE
Definition: SpriteObject.h:5
EVENT_SetFacesBit
@ EVENT_SetFacesBit
Definition: Events.h:81
game_ui_status_bar_event_string_time_left
unsigned int game_ui_status_bar_event_string_time_left
Definition: mm7_data.cpp:639
CURRENT_SCREEN::SCREEN_GAME
@ SCREEN_GAME
_evt_raw::v11
unsigned char v11
Definition: Events.h:33
OnMapLeave
void OnMapLeave()
Definition: Engine.cpp:2312
uGlobalEVT_Size
unsigned int uGlobalEVT_Size
Definition: Events.cpp:44
Party::uCurrentDayOfMonth
unsigned int uCurrentDayOfMonth
Definition: Party.h:274
GAME_STATE_CHANGE_LOCATION
@ GAME_STATE_CHANGE_LOCATION
Definition: Engine.h:34
uNumSpriteObjects
size_t uNumSpriteObjects
Definition: SpriteObject.cpp:33
EVENT_SetTexture
@ EVENT_SetTexture
Definition: Events.h:71
_evt_raw::v28
unsigned char v28
Definition: Events.h:50
VariableType
VariableType
Definition: Events.h:128
Party_Teleport_Z_Speed
int Party_Teleport_Z_Speed
Definition: mm7_data.cpp:627
EVENT_SpeakNPC
@ EVENT_SpeakNPC
Definition: Events.h:80
NPCData::greet
int greet
Definition: NPC.h:90
HouseDialogPressCloseBtn
int HouseDialogPressCloseBtn()
Definition: UIHouses.cpp:3911
sub_44892E_set_faces_bit
void sub_44892E_set_faces_bit(int sCogNumber, int bit, int on)
Definition: Engine.cpp:1558
LevelDecoration::_idx_in_stru123
int16_t _idx_in_stru123
Definition: Decoration.h:34
pLevelStrOffsets
std::array< unsigned int, 500 > pLevelStrOffsets
Definition: Events.cpp:48
uint
unsigned int uint
Definition: MM7.h:4
uActiveCharacter
unsigned int uActiveCharacter
Definition: mm7_data.cpp:555
NPCData::evt_F
unsigned int evt_F
Definition: NPC.h:98
__debugbreak
void __cdecl __debugbreak(void)
_evt_raw
Definition: Events.h:20
uLevelEVT_NumEvents
signed int uLevelEVT_NumEvents
Definition: Events.cpp:51
pNPCStats
struct NPCStats * pNPCStats
Definition: NPC.cpp:29
HOUSE_DIALOGUE_NULL
@ HOUSE_DIALOGUE_NULL
Definition: UIHouses.h:7
GUIWindow::par1C
unsigned int par1C
Definition: GUIWindow.h:477
SpriteObject::sub_42F7EB_DropItemAt
static bool sub_42F7EB_DropItemAt(SPRITE_OBJECT_TYPE sprite, int x, int y, int z, int a4, int count, int a7, unsigned __int16 attributes, ItemGen *a9)
Definition: SpriteObject.cpp:937
EVENT_InputString
@ EVENT_InputString
Definition: Events.h:84
EnterHouse
bool EnterHouse(enum HOUSE_ID uHouseID)
Definition: UIHouses.cpp:826
GameUI_StatusBar_OnEvent
void GameUI_StatusBar_OnEvent(const String &str, unsigned int num_seconds)
Definition: UIStatusBar.cpp:33
IndoorLocation::ToggleLight
void ToggleLight(signed int uLightID, unsigned int bToggle)
Definition: Indoor.cpp:846
Party::SetHoldingItem
void SetHoldingItem(ItemGen *pItem)
Definition: Party.cpp:150
SpawnPointMM7::vPosition
Vec3_int_ vPosition
Definition: Indoor.h:314
stru_5C6E00
struct stru193_math * stru_5C6E00
Definition: mm7_data.cpp:19
MapsLongTimersList
MapsLongTimer MapsLongTimersList[100]
Definition: mm7_data.cpp:165
_evt_raw::v21
unsigned char v21
Definition: Events.h:43
_evt_raw::v5
unsigned char v5
Definition: Events.h:27
ViewingParams::bRedrawGameUI
int bRedrawGameUI
Definition: Viewport.h:74
Actor::GiveItem
static void GiveItem(signed int uActorID, unsigned int uItemID, unsigned int bGive)
Definition: Actor.cpp:134
SoundID
SoundID
Definition: AudioPlayer.h:10
EventProcessor
void EventProcessor(int uEventID, int targetObj, int canShowMessages, int entry_line)
Definition: Events.cpp:260
EVENT_MoveNPC
@ EVENT_MoveNPC
Definition: Events.h:96
EVENT_OpenChest
@ EVENT_OpenChest
Definition: Events.h:67
EVENT_SetActorItem
@ EVENT_SetActorItem
Definition: Events.h:116
EVENT_ToggleChestFlag
@ EVENT_ToggleChestFlag
Definition: Events.h:114
pAudioPlayer
AudioPlayer * pAudioPlayer
Definition: AudioPlayer.cpp:20
SpawnEncounter
void SpawnEncounter(MapInfo *pMapInfo, SpawnPointMM7 *spawn, int a3, int a4, int a5)
Definition: Actor.cpp:5063
ItemGen
Definition: Items.h:263
EVENT_PlaySound
@ EVENT_PlaySound
Definition: Events.h:63
EVENT_SpeakInHouse
@ EVENT_SpeakInHouse
Definition: Events.h:62
size
GLsizeiptr size
Definition: SDL_opengl_glext.h:540
pMessageQueue_50CBD0
struct GUIMessageQueue * pMessageQueue_50CBD0
Definition: GUIWindow.cpp:86
PlayerSpeech
PlayerSpeech
Definition: Player.h:46
stru_5E4C90_MapPersistVars
stru123 stru_5E4C90_MapPersistVars
Definition: mm7_data.cpp:23
SpawnPointMM7::uGroup
unsigned int uGroup
Definition: Indoor.h:319
EVENT_Substract
@ EVENT_Substract
Definition: Events.h:76
pDialogueWindow
GUIWindow * pDialogueWindow
Definition: GUIWindow.cpp:50
EVENT_Compare
@ EVENT_Compare
Definition: Events.h:73
EVENT_ForPartyMember
@ EVENT_ForPartyMember
Definition: Events.h:91
SpawnPointMM7::uIndex
uint16_t uIndex
Definition: Indoor.h:317
EVENT_GiveItem
@ EVENT_GiveItem
Definition: Events.h:97
VAR_PlayerItemInHands
@ VAR_PlayerItemInHands
Definition: Events.h:144
dword_5C341C
int dword_5C341C
Definition: mm7_data.cpp:635
Party_Teleport_Z_Pos
int Party_Teleport_Z_Pos
Definition: mm7_data.cpp:624
EVENT_PressAnyKey
@ EVENT_PressAnyKey
Definition: Events.h:89
Party::sRotationY
int sRotationY
Definition: Party.h:251
EVENT_StatusText
@ EVENT_StatusText
Definition: Events.h:85
game_ui_status_bar_event_string
String game_ui_status_bar_event_string
Definition: mm7_data.cpp:637
_evt_raw::v29
unsigned char v29
Definition: Events.h:51
GameUI_InitializeDialogue
void GameUI_InitializeDialogue(Actor *actor, int bPlayerSaysHello)
Definition: UIDialogue.cpp:25
event_triggers
std::array< int, 3000 > event_triggers
Definition: mm7_data.cpp:687
MapStartPoint_Party
@ MapStartPoint_Party
Definition: MapInfo.h:28
HOUSE_DARK_GUILD_PIT
@ HOUSE_DARK_GUILD_PIT
Definition: UIHouses.h:95
GUIWindow_House
Definition: UIHouses.h:155
uSomeEVT_NumEvents
signed int uSomeEVT_NumEvents
Definition: Events.cpp:40
HOUSE_BODY_GUILD_ERATHIA
@ HOUSE_BODY_GUILD_ERATHIA
Definition: UIHouses.h:94
_evt_raw::v24
unsigned char v24
Definition: Events.h:46
pDecorationList
struct DecorationList * pDecorationList
Definition: DecorationList.cpp:11
_evt_raw::v12
unsigned char v12
Definition: Events.h:34
EVENT_ToggleIndoorLight
@ EVENT_ToggleIndoorLight
Definition: Events.h:88