Mercurial > mm7
view Events.cpp @ 656:6abf5b610585
OnSelectNPCDialogueOption clean
author | zipi |
---|---|
date | Tue, 12 Mar 2013 21:58:10 +0000 |
parents | 59713bb36033 |
children | 585490c29945 |
line wrap: on
line source
#include <stdlib.h> #include "MapInfo.h" #include "Game.h" #include "GUIWindow.h" #include "GUIFont.h" #include "GUIButton.h" #include "GUIProgressBar.h" #include "Chest.h" #include "stru176.h" #include "LOD.h" #include "NPC.h" #include "Actor.h" #include "Party.h" #include "Math.h" #include "AudioPlayer.h" #include "Indoor.h" #include "Viewport.h" #include "texts.h" #include "Texture.h" #include "Allocator.h" #include "mm7_data.h" #include "stru123.h" #include "stru159.h" #include "Events.h" #include "Events2D.h" #include "UIHouses.h" #include "Weather.h" #include "Party.h" #include "MM7.h" EventIndex pSomeOtherEVT_Events[4400]; signed int uSomeOtherEVT_NumEvents; char *pSomeOtherEVT; EventIndex pSomeEVT_Events[4400]; signed int uSomeEVT_NumEvents; char *pSomeEVT; unsigned int uGlobalEVT_NumEvents; unsigned int uGlobalEVT_Size; char pGlobalEVT[46080]; EventIndex pGlobalEVT_Index[4400]; unsigned int pLevelStrOffsets[500]; unsigned int uLevelStrNumStrings; unsigned int uLevelStrFileSize; signed int uLevelEVT_NumEvents; unsigned int uLevelEVT_Size; char pLevelStr[9216]; char pLevelEVT[9216]; EventIndex pLevelEVT_Index[4400]; _2devent p2DEvents[525]; // weak //----- (00443CE1) -------------------------------------------------------- unsigned int LoadEventsToBuffer(const char *pContainerName, char *pBuffer, unsigned int uBufferSize) { FILE *pLodFile; // eax@1 unsigned int uTextureSize; // esi@3 char Args[60]; // [sp+8h] [bp-B4h]@6 void *ptr; // [sp+B8h] [bp-4h]@1 Texture DstBuf; // [sp+6Ch] [bp-50h]@1 ptr = pEvents_LOD->LoadRaw(pContainerName, 0); pLodFile = pEvents_LOD->FindContainer(pContainerName, 0); if ( !pLodFile ) Abortf("Unable to load %s", pContainerName); fread(&DstBuf, 1, 48, pLodFile); uTextureSize = DstBuf.uDecompressedSize; if ( !DstBuf.uDecompressedSize ) uTextureSize = DstBuf.uTextureSize; memset(&DstBuf, 0, 72); if ( uTextureSize >= (signed int)uBufferSize ) { sprintf(Args, "File %s Size %lu - Buffer size %lu", pContainerName, uTextureSize, uBufferSize); Abortf(Args); } memcpy(pBuffer, ptr, uTextureSize); pAllocator->FreeChunk(ptr); return uTextureSize; } //----- (00443DA1) -------------------------------------------------------- void __cdecl Initialize_GlobalEVT() { struct raw_event_header { unsigned char evt_size; unsigned char evt_id_l; unsigned char evt_id_h; unsigned char evt_sequence_num; } ; uint events_count; unsigned int offset_in; raw_event_header *current_hdr; uGlobalEVT_NumEvents = 0; uGlobalEVT_Size = LoadEventsToBuffer("global.evt", pGlobalEVT, 46080); if ( !uGlobalEVT_Size ) return; memset(pGlobalEVT_Index, 0x80, sizeof(pGlobalEVT_Index));//52800 events_count = uGlobalEVT_NumEvents; current_hdr=(raw_event_header *)pGlobalEVT; offset_in=0; for (events_count = 0, offset_in = 0; offset_in < uGlobalEVT_Size; ++events_count) { pGlobalEVT_Index[events_count].uEventID=current_hdr->evt_id_l+(current_hdr->evt_id_h<<8); pGlobalEVT_Index[events_count].event_sequence_num=current_hdr->evt_sequence_num; pGlobalEVT_Index[events_count].uEventOffsetInEVT=offset_in; offset_in+=current_hdr->evt_size+1; current_hdr=(raw_event_header *)&pGlobalEVT[offset_in]; } uGlobalEVT_NumEvents = events_count; } //----- (00443EF8) -------------------------------------------------------- void LoadLevel_InitializeLevelEvt() { struct raw_event_header { unsigned char evt_size; unsigned char evt_id_l; unsigned char evt_id_h; unsigned char evt_sequence_num; } ; uint events_count; unsigned int offset_in; raw_event_header *current_hdr; if (!uLevelEVT_Size) return; memset(array_5B5928_timers, 0, 3200); memset(pLevelEVT_Index, 80, sizeof(EventIndex)*4400); uLevelEVT_NumEvents = 0; dword_5B65C8_timers_count = 0; current_hdr=(raw_event_header *)pLevelEVT; offset_in=0; for (events_count = 0, offset_in = 0; offset_in < uLevelEVT_Size; ++events_count) { pLevelEVT_Index[events_count].uEventID=current_hdr->evt_id_l+(current_hdr->evt_id_h<<8); pLevelEVT_Index[events_count].event_sequence_num=current_hdr->evt_sequence_num; pLevelEVT_Index[events_count].uEventOffsetInEVT=offset_in; offset_in+=current_hdr->evt_size+1; current_hdr=(raw_event_header *)&pLevelEVT[offset_in]; } uLevelEVT_NumEvents = events_count; /* for (uint i = 0, j = 0; j < uLevelEVT_Size; ++i) { pLevelEVT_Index[i].uEventID = pLevelEVT[j + 1] + ((unsigned short)pLevelEVT[j + 2] << 8); pLevelEVT_Index[i].event_sequence_num = pLevelEVT[j + 3]; pLevelEVT_Index[i].uEventOffsetInEVT = j; j += pLevelEVT[j] + 1; uLevelEVT_NumEvents++; }*/ } //----- (0044684A) -------------------------------------------------------- void EventProcessor(int uEventID, int targetObj, int canShowMessages) { unsigned int v3; // eax@5 signed int v4; // esi@7 //char *v5; // eax@8 Player *v6; // ecx@8 //char *v7; // ebp@8 //signed int v8; // edx@10 //int v9; // edi@12 //ByteArray *v10; // esi@12 int v11; // eax@14 char *v12; // eax@15 //char *v13; // edi@21 int v14; // ebp@21 int v15; // edi@21 const char *v16; // esi@21 bool v17; // edx@21 int v18; // ecx@22 int v19; // ebp@36 signed int v20; // ecx@40 int v21; // eax@40 int v22; // edx@40 int v23; // eax@40 unsigned __int16 v24; // ax@45 int v25; // eax@54 LevelDecoration *v26; // eax@55 int v27; // eax@57 int v28; // ecx@57 int v29; // edx@58 int v30; // eax@58 int v31; // ecx@58 int v32; // esi@58 NPCData *v33; // ecx@58 int v34; // esi@59 int v35; // esi@60 int v36; // esi@61 int v37; // esi@62 int v38; // eax@78 int v39; // ecx@78 size_t v40; // edx@78 Actor *v41; // esi@79 int v42; // eax@84 int v43; // ecx@84 size_t v44; // edx@84 Actor *v45; // esi@85 void *v46; // eax@91 GUIWindow *v47; // eax@93 GUIButton *v48; // ecx@93 GUIButton *v49; // esi@94 char v50; // al@100 Player *v51; // esi@103 Player *v52; // ecx@106 int v53; // ecx@107 char v54; // al@111 Player *v55; // esi@114 Player *v56; // ecx@117 int v57; // ecx@118 signed int pValue; // ebp@124 Player *pPlayer; // esi@125 int v60; // eax@126 int v61; // edx@133 int v62; // eax@139 int v63; // ebp@145 signed int v64; // edi@146 unsigned int v65; // edx@148 Player *v66; // ecx@148 int v67; // esi@148 signed int v68; // eax@151 int v69; // esi@151 Player *v70; // ecx@158 unsigned int v71; // eax@159 int v72; // esi@159 signed int v73; // eax@162 int v74; // esi@162 int v75; // edx@172 Player *v76; // esi@173 signed int v77; // ebp@186 int v78; // edx@186 Player *v79; // esi@187 //signed int v80; // ebp@200 //int v81; // edx@200 Player *v82; // esi@201 int v83; // eax@212 int v84; // ebp@220 signed int v85; // ebp@224 char v86; // al@224 Player *v87; // esi@227 Player *v88; // ecx@231 int v89; // ecx@232 int v90; // eax@243 const char *v91; // ecx@247 int v92; // eax@251 char *v93; // eax@252 int v94; // ecx@262 int v95; // ebp@262 int v96; // edx@262 int v97; // eax@262 unsigned int v98; // edx@265 const char *v99; // esi@267 int v100; // edx@267 //char *v101; // edi@281 unsigned int v102; // esi@281 int v103; // edi@284 int v104; // eax@288 int v105; // edx@294 int v106; // [sp-20h] [bp-4C8h]@278 signed int v107; // [sp-1Ch] [bp-4C4h]@278 unsigned int v108; // [sp-18h] [bp-4C0h]@278 signed int v109; // [sp-14h] [bp-4BCh]@278 signed int v110; // [sp-10h] [bp-4B8h]@278 int v111; // [sp-Ch] [bp-4B4h]@278 // Event *v112; // [sp-8h] [bp-4B0h]@5 int v113; // [sp-8h] [bp-4B0h]@106 int v114; // [sp-8h] [bp-4B0h]@117 signed int v115; // [sp-8h] [bp-4B0h]@231 unsigned int v116; // [sp-8h] [bp-4B0h]@278 int v117; // [sp-4h] [bp-4ACh]@106 int v118; // [sp-4h] [bp-4ACh]@117 int v119; // [sp-4h] [bp-4ACh]@231 int v120; // [sp-4h] [bp-4ACh]@278 int v121; // [sp-4h] [bp-4ACh]@294 int curr_seq_num; // [sp+10h] [bp-498h]@4 //char *v123; // [sp+14h] [bp-494h]@0 signed int v124; // [sp+18h] [bp-490h]@7 //signed int v125; // [sp+1Ch] [bp-48Ch]@155 int v126; // [sp+1Ch] [bp-48Ch]@262 int player_choose; // [sp+20h] [bp-488h]@4 int v128; // [sp+24h] [bp-484h]@21 int v129; // [sp+24h] [bp-484h]@262 signed int v130; // [sp+28h] [bp-480h]@0 //int v131; // [sp+2Ch] [bp-47Ch]@1 int v132; // [sp+30h] [bp-478h]@262 signed int v133; // [sp+34h] [bp-474h]@1 int v134; // [sp+38h] [bp-470h]@262 int v135; // [sp+3Ch] [bp-46Ch]@262 int v136; // [sp+40h] [bp-468h]@40 int v137; // [sp+44h] [bp-464h]@40 int v138; // [sp+48h] [bp-460h]@40 int v139; // [sp+4Ch] [bp-45Ch]@40 ItemGen item; // [sp+50h] [bp-458h]@15 char Source[120]; // [sp+74h] [bp-434h]@15 char Str[120]; // [sp+ECh] [bp-3BCh]@21 Actor Dst; // [sp+164h] [bp-344h]@53 //v131 = uEventID; v133 = 0; EvtTargetObj = targetObj; dword_5B65C4 = 0; if ( !uEventID ) { if ( !GameUI_StatusBar_TimedStringTimeLeft ) ShowStatusBarString(pGlobalTXT_LocalizationStrings[521], 2u);// Nothing here return; } player_choose = (uActiveCharacter == 0)?6:4; //4 - active or 6 - random player if active =0 curr_seq_num = start_event_seq_number; if ( activeLevelDecoration ) { uSomeEVT_NumEvents = uGlobalEVT_NumEvents; pSomeEVT = pGlobalEVT; memcpy(pSomeEVT_Events, pGlobalEVT_Index, sizeof(EventIndex)*4400); //4400 evts } else { uSomeEVT_NumEvents = uLevelEVT_NumEvents; pSomeEVT = pLevelEVT; memcpy(pSomeEVT_Events, pLevelEVT_Index, sizeof(EventIndex)*4400); } v4 = 0; v124 = 0; //for (uint i = 0; i < uSomeEVT_NumEvents; ++i) // { //v6 = v123; //v7 = ""; while ( 1 ) { if ( dword_5B65C4 ) goto LABEL_301; //v8 = v4; if ( pSomeEVT_Events[v4].uEventID == uEventID && pSomeEVT_Events[v4].event_sequence_num == curr_seq_num ) { //v9 = pSomeEVT_Events[v8].uEventOffsetInEVT; //v10 = (ByteArray *)&v5[v9]; auto _evt = (_evt_raw *)(pSomeEVT + pSomeEVT_Events[v4].uEventOffsetInEVT); switch (_evt->_e_type) { case EVENT_CheckSeason: // if ( !sub_4465DF_check_season(_evt->v5) ) { ++curr_seq_num; v4 = v124; break; } v124 = -1; curr_seq_num = _evt->v6 - 1; ++curr_seq_num; break; case EVENT_ShowMovie: { strcpy(Source, (char *)&_evt->v7); v12 = (char *)&item.uExpireTime + strlen(Source) + 7; if ( *v12 == 32 ) *v12 = 0; if ( pVideoPlayer->field_54 ) pVideoPlayer->Unload(); pVideoPlayer->bStopBeforeSchedule = 0; pVideoPlayer->pResetflag = 0; if (pAsyncMouse) pAsyncMouse->Suspend(); v128 = pCurrentScreen; //v13 = &pSomeEVT[v9]; //v14 = (unsigned __int8)v13[5]; //v15 = (unsigned __int8)v13[6]; v14 = _evt->v5; v15 = _evt->v6; strcpy(Str, Source); v16 = RemoveQuotes(Str); VideoPlayer::MovieLoop(v16, 0, v14, 1); if ( !_strcmpi(v16, "arbiter good") ) { pParty->alignment = PartyAlignment_Good; v18 = 0; LOBYTE(v17) = 1; SetUserInterface(PartyAlignment_Good, v17); if ( !v15 || v128 == 3 ) { pCurrentScreen = v128; if ( v128 == 3 ) pGameLoadingUI_ProgressBar->uType = GUIProgressBar::TYPE_Fullscreen; if ( v128 == 13 ) pVideoPlayer->_4BF28F(pAnimatedRooms[uCurrentHouse_Animation].video_name, 1u); } if (pAsyncMouse) pAsyncMouse->Resume(); ++curr_seq_num; v4 = v124; //v6 = v123; //v7 = ""; break; } if ( !_strcmpi(v16, "arbiter evil") ) { v18 = 2; pParty->alignment = PartyAlignment_Evil; LOBYTE(v17) = 1; SetUserInterface(PartyAlignment_Evil, v17); if ( !v15 || v128 == 3 ) { pCurrentScreen = v128; if ( v128 == 3 ) pGameLoadingUI_ProgressBar->uType = GUIProgressBar::TYPE_Fullscreen; if ( v128 == 13 ) pVideoPlayer->_4BF28F(pAnimatedRooms[uCurrentHouse_Animation].video_name, 1u); } if (pAsyncMouse) pAsyncMouse->Resume(); ++curr_seq_num; v4 = v124; //v6 = v123; //v7 = ""; break; } if ( !_strcmpi(v16, "pcout01") ) // moving to harmondale from emerald isle { Rest(0x2760u); pParty->RestAndHeal(); pParty->field_764 = 0; } if ( !v15 || v128 == 3 ) { pCurrentScreen = v128; if ( v128 == 3 ) pGameLoadingUI_ProgressBar->uType = GUIProgressBar::TYPE_Fullscreen; if ( v128 == 13 ) pVideoPlayer->_4BF28F(pAnimatedRooms[uCurrentHouse_Animation].video_name, 1u); } if (pAsyncMouse) pAsyncMouse->Resume(); ++curr_seq_num; v4 = v124; //v6 = v123; //v7 = ""; } break; case EVENT_CheckSkill: { v19 = _evt->v7 + ((_evt->v8 + ((_evt->v9 + ((unsigned int)_evt->v10 << 8)) << 8)) << 8); if ( player_choose < 0 ) goto LABEL_47; if ( player_choose <= 3 ) { v24 = pParty->pPlayers[0].pActiveSkills[3486 * player_choose + _evt->v5]; } else { if ( player_choose == 4 ) { v24 = pPlayers[uActiveCharacter]->pActiveSkills[_evt->v5]; } else { if ( player_choose == 5 ) { v20 = 0; v21 = 3486 * v130 + _evt->v5; v136 = 1; LOWORD(v21) = pParty->pPlayers[0].pActiveSkills[v21]; v137 = v21 & 0x40; v138 = v21 & 0x80; v22 = v21 & 0x100; v23 = v21 & 0x3F; v139 = v22; while ( v23 < v19 || !*(&v136 + _evt->v6) ) { ++v20; if ( v20 >= 4 ) { ++curr_seq_num; v4 = v124; //v6 = v123; //v7 = ""; break; } } v11 = _evt->v11; goto LABEL_130; } LABEL_47: //v10 = (ByteArray *)&v5[v9]; v24 = pParty->pPlayers[0].pActiveSkills[_evt->v5 + 3486 * rand() % 4]; } } v136 = 1; v137 = v24 & 0x40; v138 = v24 & 0x80; v139 = v24 & 0x100; if ( (v24 & 0x3F) >= v19 && *(&v136 + _evt->v6) ) { v11 = _evt->v11; goto LABEL_130; } ++curr_seq_num; v4 = v124; //v6 = v123; //v7 = ""; } break; case EVENT_SpeakNPC: if ( canShowMessages ) { //Actor::Actor(&Dst); memset(&Dst, 0, 0x344u); dword_5B65D0_dialogue_actor_npc_id = _evt->v5 + ((_evt->v6 + ((_evt->v7 + ((unsigned int)_evt->v8 << 8)) << 8)) << 8); Dst.sNPC_ID = dword_5B65D0_dialogue_actor_npc_id; Dst.InitializeDialogue(0); } else { bDialogueUI_InitializeActor_NPC_ID = _evt->v5 + ((_evt->v6 + ((_evt->v7 + ((unsigned int)_evt->v8 << 8)) << 8)) << 8); } ++curr_seq_num; v4 = v124; //v6 = v123; //v7 = ""; break; case EVENT_ChangeEvent: v25 = EVT_DWORD(_evt->v5); if ( v25 ) { stru_5E4C90._decor_events[activeLevelDecoration->_idx_in_stru123] = _evt->v5 - 124; } else { v26 = (LevelDecoration *)activeLevelDecoration; stru_5E4C90._decor_events[activeLevelDecoration ->_idx_in_stru123] = 0; v26->field_2 |= 0x0020; } ++curr_seq_num; v4 = v124; break; case EVENT_SetNPCGreeting: v27 = EVT_DWORD(_evt->v5); pNPCStats->pNewNPCData[v27].uFlags &= 0xFFFFFFFCu; pNPCStats->pNewNPCData[v27].greet = EVT_DWORD(_evt->v9); ++curr_seq_num; v4 = v124; //v6 = v123; //v7 = ""; break; case EVENT_SetNPCTopic: { v29 = _evt->v5 + ((_evt->v6 + ((_evt->v7 + ((uint)_evt->v8 << 8)) << 8)) << 8); v30 = _evt->v10 + ((_evt->v11 + ((_evt->v12 + ((uint)_evt->v13 << 8)) << 8)) << 8); v31 = _evt->v5 + ((_evt->v6 + ((_evt->v7 + ((uint)_evt->v8 << 8)) << 8)) << 8); v32 = _evt->v9; v33 = &pNPCStats->pNewNPCData[v31]; if ( v32 ) { v34 = v32 - 1; if ( v34 ) { v35 = v34 - 1; if ( v35 ) { v36 = v35 - 1; if ( v36 ) { v37 = v36 - 1; if ( v37 ) { if ( v37 == 1 ) v33->evt_F = v30; } else { v33->evt_E = v30; } } else { v33->evt_D = v30; } } else { v33->evt_C = v30; } } else { v33->evt_B = v30; } } else { v33->evt_A = v30; } if ( v29 == 8 ) { if ( v30 == 78 ) { sub_4BD8B5(); window_SpeakInHouse->Release(); pParty->uFlags &= ~2; if ( EnterHouse(HOUSE_DARK_GUILD_PIT) ) { pAudioPlayer->StopChannels(-1, -1); window_SpeakInHouse = GUIWindow::Create(0, 0, 640, 480, WINDOW_HouseInterior, 170, 0); window_SpeakInHouse->CreateButton(0x3Du, 0x1A8u, 0x1Fu, 0, 2, 94, 0x6Eu, 1u, 0x31u, "", 0); window_SpeakInHouse->CreateButton(0xB1u, 0x1A8u, 0x1Fu, 0, 2, 94, 0x6Eu, 2u, 0x32u, "", 0); window_SpeakInHouse->CreateButton(0x124u, 0x1A8u, 0x1Fu, 0, 2, 94, 0x6Eu, 3u, 0x33u, "", 0); window_SpeakInHouse->CreateButton(0x197u, 0x1A8u, 0x1Fu, 0, 2, 94, 0x6Eu, 4u, 0x34u, "", 0); window_SpeakInHouse->CreateButton(0, 0, 0, 0, 1, 0, 0xB0u, 0, 9u, "", 0); ptr_F8B1E8 = pNPCTopics[90].pText; } } } ++curr_seq_num; } v4 = v124; //v6 = v123; //v7 = ""; break; case EVENT_NPCSetItem: sub_448518_npc_set_item(EVT_DWORD(_evt->v5),EVT_DWORD(_evt->v9), _evt->v13); ++curr_seq_num; v4 = v124; break; case EVENT_SetActorItem: Actor::GiveItem(EVT_DWORD(_evt->v5),EVT_DWORD(_evt->v9), _evt->v13); ++curr_seq_num; v4 = v124; break; case EVENT_SetNPCGroupNews: pNPCStats->pGroups_copy[_evt->v5 + ((_evt->v6 + ((_evt->v7 + ((uint)_evt->v8 << 8)) << 8)) << 8)] = _evt->v9 + ((uint)_evt->v10 << 8); ++curr_seq_num; v4 = v124; break; case EVENT_SetActorGroup: __debugbreak(); *(&pActors[0].uGroup + 0x11000000 * _evt->v8 + 209 * (_evt->v5 + ((_evt->v6 + ((uint)_evt->v7 << 8)) << 8))) = _evt->v9 + ((_evt->v10 + ((_evt->v11 + ((uint)_evt->v12 << 8)) << 8)) << 8); ++curr_seq_num; v4 = v124; break; case EVENT_ChangeGroup: v38 = _evt->v5 + ((_evt->v6 + ((_evt->v7 + ((uint)_evt->v8 << 8)) << 8)) << 8); v39 = _evt->v9 + ((_evt->v10 + ((_evt->v11 + ((uint)_evt->v12 << 8)) << 8)) << 8); v40 = uNumActors; __debugbreak(); if ( (signed int)uNumActors > 0 ) { v41 = pActors;//[0].uGroup; do { if ( v41->uGroup == v38 ) v41->uGroup = v39; ++v41; --v40; } while ( v40 ); } ++curr_seq_num; v4 = v124; //v6 = v123; //v7 = ""; break; case EVENT_ChangeGroupAlly: v42 = _evt->v5 + ((_evt->v6 + ((_evt->v7 + ((uint)_evt->v8 << 8)) << 8)) << 8); v43 = _evt->v9 + ((_evt->v10 + ((_evt->v11 + ((uint)_evt->v12 << 8)) << 8)) << 8); v44 = uNumActors; __debugbreak(); if ( (signed int)uNumActors > 0 ) { v45 = pActors;//[0].uAlly; do { if ( v45->uGroup == v42 ) v45->uAlly = v43; ++v45; --v44; } while ( v44 ); } ++curr_seq_num; v4 = v124; //v6 = v123; //v7 = ""; break; case EVENT_MoveNPC: { pNPCStats->pNewNPCData[EVT_DWORD(_evt->v5)].Location2D =EVT_DWORD(_evt->v9); if ( window_SpeakInHouse ) { if ( window_SpeakInHouse->par1C == 165 ) { sub_4BD8B5(); pVideoPlayer->Unload(); window_SpeakInHouse->Release(); pParty->uFlags &= ~2; activeLevelDecoration = (LevelDecoration*)1; if ( EnterHouse(HOUSE_BODY_GUILD_ERATHIA) ) { pAudioPlayer->PlaySound((SoundID)0, 0, 0, -1, 0, 0, 0, 0); window_SpeakInHouse = GUIWindow::Create(0, 0, 640, 480, WINDOW_HouseInterior, 165, 0); v48 = window_SpeakInHouse->pControlsHead; if ( v48 ) { do { v49 = v48->pNext; pAllocator->FreeChunk(v48); v48 = v49; } while ( v49 ); } window_SpeakInHouse->pControlsHead = 0; window_SpeakInHouse->pControlsTail = 0; window_SpeakInHouse->uNumControls = 0; } } else { if ( window_SpeakInHouse->par1C == 553 ) pVideoPlayer->bLoopPlaying = 0; } } } ++curr_seq_num; v4 = v124; break; case EVENT_Jmp: curr_seq_num = _evt->v5 - 1; ++curr_seq_num; v4 = -1; break; case EVENT_ShowFace: if ( _evt->v5 <= 3u ) //someone pParty->pPlayers[_evt->v5].PlayEmotion((CHARACTER_EXPRESSION_ID)_evt->v6, 0); else if ( _evt->v5 == 4 ) //active pParty->pPlayers[uActiveCharacter].PlayEmotion((CHARACTER_EXPRESSION_ID)_evt->v6, 0); else if ( _evt->v5 == 5 ) //all players { for(int i=0; i<4; ++i) pParty->pPlayers[i].PlayEmotion((CHARACTER_EXPRESSION_ID)_evt->v6, 0); } else //random player pParty->pPlayers[rand() % 4].PlayEmotion((CHARACTER_EXPRESSION_ID)_evt->v6, 0); ++curr_seq_num; v4 = v124; break; case EVENT_CharacterAnimation: if ( _evt->v5 <= 3u ) //someone pParty->pPlayers[_evt->v5].PlaySound((PlayerSpeech) _evt->v6, 0); else if ( _evt->v5 == 4 ) //active pParty->pPlayers[uActiveCharacter].PlaySound((PlayerSpeech) _evt->v6, 0); else if ( _evt->v5 == 5 ) //all for(int i=0; i<4; ++i) pParty->pPlayers[i].PlaySound((PlayerSpeech) _evt->v6, 0); else //random pParty->pPlayers[rand() % 4].PlaySound((PlayerSpeech) _evt->v6, 0); ++curr_seq_num; v4 = v124; break; case EVENT_ForPartyMember: player_choose = _evt->v5; ++curr_seq_num; v4 = v124; break; case EVENT_SummonItem: sub_42F7EB_DropItemAt(_evt->v5 + ((_evt->v6 + ((_evt->v7 + ((uint)_evt->v8 << 8)) << 8)) << 8), _evt->v9 + ((_evt->v10 + ((_evt->v11 + ((uint)_evt->v12 << 8)) << 8)) << 8), _evt->v13 + ((_evt->v14 + ((_evt->v15 + ((uint)_evt->v16 << 8)) << 8)) << 8), _evt->v17 + ((_evt->v18 + ((_evt->v19 + ((uint)_evt->v20 << 8)) << 8)) << 8), _evt->v21 + ((_evt->v22 + ((_evt->v23 + ((uint)_evt->v24 << 8)) << 8)) << 8), _evt->v25, _evt->v26, 0, 0); ++curr_seq_num; v4 = v124; //v6 = v123; //v7 = ""; break; case EVENT_Compare: pValue = EVT_DWORD(_evt->v7); if ( player_choose <= 3 ) { if ( pPlayers[player_choose]->CompareVariable((enum VariableType)EVT_WORD(_evt->v5), pValue) ) { v124 = -1; curr_seq_num = _evt->v11 - 1; } } else if ( player_choose == 4 ) //active { if ( uActiveCharacter ) { if ( pPlayers[uActiveCharacter]->CompareVariable((enum VariableType)EVT_WORD(_evt->v5), pValue) ) { v124 = -1; curr_seq_num = _evt->v11 - 1; } } } else if ( player_choose == 5 )//all { v130=0; for(int i = 1; i < 5; ++i) { if ( pPlayers[i]->CompareVariable((enum VariableType)EVT_WORD(_evt->v5), pValue) ) { v124 = -1; curr_seq_num = _evt->v11 - 1; break; } ++v130; } } else if ( player_choose == 6 ) //random { if ( pPlayers[rand() % 4]->CompareVariable((enum VariableType)EVT_WORD(_evt->v5), pValue) ) { v124 = -1; curr_seq_num = _evt->v11 - 1; } } ++curr_seq_num; v4 = v124; break; case EVENT_IsActorAlive: if (IsActorAlive(EVT_BYTE(_evt->v5), EVT_DWORD(_evt->v6), EVT_BYTE(_evt->v10))) { v124 = -1; curr_seq_num = _evt->v11 - 1; } ++curr_seq_num; v4 = v124; break; case EVENT_Substract: pValue = EVT_DWORD(_evt->v7); if ( EVT_WORD(_evt->v5) == VAR_PlayerItemInHands ) { if ( pParty->pPickedItem.uItemID == pValue )//In hand { pMouse->RemoveHoldingItem(); ++curr_seq_num; v4 = v124; break; } v67 = (int)pPlayers[uActiveCharacter]->pInventoryIndices; for ( v65 = 0; v65 < 126; ++v65 ) { if ( (int)&pPlayers[uActiveCharacter]->pInventoryItems[v67] == pValue ) { pPlayers[uActiveCharacter]->RemoveItemAtInventoryIndex(v65); ++curr_seq_num; v4 = v124; break; } v67 += 4; } while ( (signed int)v65 < 126 ); v69 = (int)&pPlayers[uActiveCharacter]->pEquipment; for ( v68 = 0; v68 < 16; ++v68 ) { if ( *(int *)v69 && (int)&pPlayers[uActiveCharacter]->pInventoryItems[v69] == pValue ) { *(&pPlayers[uActiveCharacter]->pEquipment.uOffHand + v68) = 0; ++curr_seq_num; v4 = v124; break; } v69 += 4; } for (int i = 1; i < 5; i++) { v72 = (int)pPlayers[i]->pInventoryIndices; for ( int v71 = 0; v71 < 126; ++v71 ) { if ( (int)&pPlayers[i]->pInventoryItems[v72] == pValue ) { pPlayers[i]->RemoveItemAtInventoryIndex(v71); break; } v72 += 4; } v73 = 0; v74 = (int)&pPlayers[i]->pEquipment; while ( !*(int *)v74 || (int)&pPlayer->pInventoryItems[v74] != pValue ) { ++v73; v74 += 4; if ( v73 >= 16 ) break; } *(&pPlayers[i]->pEquipment.uOffHand + v73) = 0; } } if ( player_choose <= 3 ) { pPlayer = &pParty->pPlayers[player_choose]; pPlayer->SubtractVariable((enum VariableType)EVT_WORD(_evt->v5), pValue); } else if ( player_choose == 4 ) //active { if ( uActiveCharacter ) { pPlayer = pPlayers[uActiveCharacter]; pPlayer->SubtractVariable((enum VariableType)EVT_WORD(_evt->v5), pValue); } } else if ( player_choose == 5 )//all { v130 = 0; for(int i = 1; i < 5; ++i) { if ( pPlayers[i]->SubtractVariable((enum VariableType)EVT_WORD(_evt->v5), pValue) ) break; } ++v130; } else if ( player_choose == 6 ) //random { player_choose = rand() % 4; pPlayer = &pParty->pPlayers[player_choose]; pPlayer->SubtractVariable((enum VariableType)EVT_WORD(_evt->v5), pValue); } ++curr_seq_num; v4 = v124; break; case EVENT_Set: pValue = EVT_DWORD(_evt->v7); if ( player_choose <= 3 ) { pPlayer = &pParty->pPlayers[player_choose]; pPlayer->SetVariable((enum VariableType)EVT_WORD(_evt->v5), pValue); } else if ( player_choose == 4 ) //active { if ( uActiveCharacter ) { pPlayer = pPlayers[uActiveCharacter]; pPlayer->SetVariable((enum VariableType)EVT_WORD(_evt->v5), pValue); } } else if ( player_choose == 5 )//all { //recheck v130 for(int i = 1; i < 5; ++i) pPlayers[i]->SetVariable((enum VariableType)EVT_WORD(_evt->v5), pValue); } else if ( player_choose == 6 ) //random { player_choose = rand() % 4; pPlayer = &pParty->pPlayers[player_choose]; pPlayer->SetVariable((enum VariableType)EVT_WORD(_evt->v5), pValue); } ++curr_seq_num; v4 = v124; break; case EVENT_Add: pValue = EVT_DWORD(_evt->v7); if ( player_choose <= 3 ) { pPlayer = &pParty->pPlayers[player_choose]; pPlayer->AddVariable((enum VariableType)EVT_WORD(_evt->v5), pValue); } else if ( player_choose == 4 ) //active { if ( uActiveCharacter ) { pPlayer = pPlayers[uActiveCharacter]; pPlayer->AddVariable((enum VariableType)EVT_WORD(_evt->v5), pValue); } } else if ( player_choose == 5 )//all { //v130 = 0; for(int i = 1; i < 5; ++i) pPlayers[i]->AddVariable((enum VariableType)EVT_WORD(_evt->v5), pValue); } else if ( player_choose == 6 ) //random { player_choose = rand() % 4; pPlayer = &pParty->pPlayers[player_choose]; pPlayer->AddVariable((enum VariableType)EVT_WORD(_evt->v5), pValue); } v83 = EVT_WORD(_evt->v5); if ( v83 == 21 || v83 == 22 || v83 == 23 || v83 == 24 ) viewparams->bRedrawGameUI = 1; ++curr_seq_num; v4 = v124; break; case EVENT_InputString: if ( !start_event_seq_number ) { strcpy(GameUI_StatusBar_TimedString, &pLevelStr[pLevelStrOffsets[EVT_DWORD(_evt->v5 )]]); v105 = curr_seq_num; v121 = 26; LABEL_295: sub_4451A8_press_any_key(uEventID, v105, v121); LABEL_301: if ( v133 == 1 ) LABEL_302: OnMapLeave(); return; } v84 = _evt->v13 + ((_evt->v14 + ((_evt->v15 + ((uint)_evt->v16 << 8)) << 8)) << 8); if ( !_strcmpi(GameUI_StatusBar_TimedString, &pLevelStr[pLevelStrOffsets[_evt->v9 + ((_evt->v10 + ((_evt->v11 + ((uint)_evt->v12 << 8)) << 8)) << 8)]]) || !_strcmpi(GameUI_StatusBar_TimedString, &pLevelStr[pLevelStrOffsets[v84]]) ) { v11 = _evt->v17; LABEL_130: //v124 = -1; LABEL_131: curr_seq_num = v11 - 1; } ++curr_seq_num; v4 = v124; //v6 = v123; //v7 = ""; break; case EVENT_RandomGoTo: //v124 = -1; v11 = (unsigned __int8)*(&_evt->v5 + rand() % ((_evt->v5 != 0) + (_evt->v6 != 0) + (_evt->v7 != 0) + (_evt->v8 != 0) + (_evt->v9 != 0) + (_evt->v10 != 0))); curr_seq_num = v11 - 1; ++curr_seq_num; v4 = v124; case EVENT_ReceiveDamage: v85 = EVT_DWORD(_evt->v7 ); v86 = _evt->v5; if ( (unsigned __int8)v86 <= 3u ) { v119 = _evt->v6; v115 = EVT_DWORD(_evt->v7 ); v89 = (unsigned __int8)v86; goto LABEL_233; } if ( v86 == 4 ) { if ( !uActiveCharacter ) { ++curr_seq_num; v4 = v124; //v6 = v123; //v7 = ""; break; } v119 = _evt->v6; v88 = pPlayers[uActiveCharacter]; v115 = EVT_DWORD(_evt->v7 ); goto LABEL_234; } if ( v86 != 5 ) { v119 = _evt->v6; v115 = EVT_DWORD(_evt->v7 ); v89 = rand() % 4; LABEL_233: v88 = &pParty->pPlayers[v89]; LABEL_234: v88->ReceiveDamage(v115, v119); ++curr_seq_num; v4 = v124; //v6 = v123; //v7 = ""; break; } v87 = pParty->pPlayers; do { v87->ReceiveDamage(v85, _evt->v6); ++v87; } while ( (signed int)v87 < (signed int)pParty->pHirelings ); ++curr_seq_num; v4 = v124; //v6 = v123; //v7 = ""; break; case EVENT_ToggleIndoorLight: pIndoor->ToggleLight(EVT_DWORD(_evt->v5 ), _evt->v9); ++curr_seq_num; v4 = v124; //v6 = v123; //v7 = ""; break; case EVENT_SetFacesBit: sub_44892E_set_faces_bit(EVT_DWORD(_evt->v5),EVT_DWORD(_evt->v9), _evt->v13); ++curr_seq_num; v4 = v124; //v6 = v123; //v7 = ""; break; case EVENT_ToggleChestFlag: Chest::ToggleFlag(EVT_DWORD(_evt->v5 ), EVT_DWORD(_evt->v9 ), _evt->v13); ++curr_seq_num; v4 = v124; //v6 = v123; //v7 = ""; break; case EVENT_ToggleActorFlag: Actor::ToggleFlag(EVT_DWORD(_evt->v5 ), EVT_DWORD(_evt->v9 ), _evt->v13); ++curr_seq_num; v4 = v124; //v6 = v123; //v7 = ""; break; case EVENT_ToggleActorGroupFlag: ToggleActorGroupFlag(EVT_DWORD(_evt->v5 ), EVT_DWORD(_evt->v9 ), _evt->v13); ++curr_seq_num; v4 = v124; //v6 = v123; //v7 = ""; break; case EVENT_SetSnow: if ( !_evt->v5 ) pWeather->bRenderSnow = _evt->v6 != 0; ++curr_seq_num; v4 = v124; //v6 = v123; //v7 = ""; break; case EVENT_StatusText: v90 = EVT_DWORD(_evt->v5 ); if ( activeLevelDecoration ) { if ( activeLevelDecoration == (LevelDecoration*)1 ) { ptr_F8B1E8 = pNPCTopics[v90-1].pText;//(&dword_721664)[8 * v90]; } if ( canShowMessages == 1 ) { v91 = pNPCTopics[v90-1].pText;//(&dword_721664)[8 * v90]; //LABEL_248: ShowStatusBarString(v91, 2u); } } else { if ( canShowMessages == 1 ) { v91 = &pLevelStr[pLevelStrOffsets[v90]]; ShowStatusBarString(v91, 2u); } } ++curr_seq_num; v4 = v124; //v6 = v123; //v7 = ""; break; case EVENT_ShowMessage: v92 = EVT_DWORD(_evt->v5 ); if ( activeLevelDecoration ) { v93 = (char *)pNPCTopics[v92-1].pText;//(&dword_721664)[8 * v92]; byte_5B0938[0] = 0; ptr_F8B1E8 = v93; } else { strcpy(byte_5B0938, &pLevelStr[pLevelStrOffsets[v92]]); } ++curr_seq_num; v4 = v124; //v6 = v123; //v7 = ""; break; case EVENT_CastSpell: sub_448DF8_cast_spell(_evt->v5, _evt->v6, _evt->v7, EVT_DWORD(_evt->v8 ), EVT_DWORD(_evt->v12 ), EVT_DWORD(_evt->v16 ), EVT_DWORD(_evt->v20 ), EVT_DWORD(_evt->v24 ), EVT_DWORD(_evt->v28 )); ++curr_seq_num; v4 = v124; break; case EVENT_SetTexture: sub_44861E_set_texture(EVT_DWORD(_evt->v5 ), (char *)&_evt->v9); ++curr_seq_num; v4 = v124; //v6 = v123; //v7 = ""; break; case EVENT_SetSprite: SetDecorationSprite(EVT_DWORD(_evt->v5 ), _evt->v9, (char *)&_evt->v10); ++curr_seq_num; v4 = v124; //v6 = v123; //v7 = ""; break; case EVENT_SummonMonsters: sub_448CF4_spawn_monsters(_evt->v5, _evt->v6, _evt->v7,EVT_DWORD(_evt->v8 ), EVT_DWORD(_evt->v12 ), EVT_DWORD(_evt->v16 ), EVT_DWORD(_evt->v20 ), EVT_DWORD(_evt->v24 )); ++curr_seq_num; v4 = v124; //v6 = v123; //v7 = ""; break; case EVENT_MouseOver: case EVENT_LocationName: --curr_seq_num; ++curr_seq_num; v4 = v124; //v6 = v123; //v7 = ""; break; case EVENT_ChangeDoorState: sub_449A49_door_switch_animation(_evt->v5, _evt->v6); ++curr_seq_num; v4 = v124; //v6 = v123; //v7 = ""; break; case EVENT_OpenChest: if ( !Chest::Open(_evt->v5) ) goto LABEL_301; ++curr_seq_num; v4 = v124; //v6 = v123; //v7 = ""; break; case EVENT_MoveToMap: v94 = _evt->v5 + ((_evt->v6 + ((_evt->v7 + ((uint)_evt->v8 << 8)) << 8)) << 8); v135 = _evt->v5 + ((_evt->v6 + ((_evt->v7 + ((uint)_evt->v8 << 8)) << 8)) << 8); v132 = _evt->v9 + ((_evt->v10 + ((_evt->v11 + ((uint)_evt->v12 << 8)) << 8)) << 8); v126 = _evt->v13 + ((_evt->v14 + ((_evt->v15 + ((uint)_evt->v16 << 8)) << 8)) << 8); v129 = _evt->v17 + ((_evt->v18 + ((_evt->v19 + ((uint)_evt->v20 << 8)) << 8)) << 8); v95 = _evt->v21 + ((_evt->v22 + ((_evt->v23 + ((uint)_evt->v24 << 8)) << 8)) << 8); v96 = _evt->v25; v97 = v96 + ((_evt->v26 + ((_evt->v27 + ((uint)_evt->v28 << 8)) << 8)) << 8); v134 = v96 + ((_evt->v26 + ((_evt->v27 + ((uint)_evt->v28 << 8)) << 8)) << 8); if ( _evt->v29 || _evt->v30 ) { if ( pRenderer->pRenderD3D && !pRenderer->bWindowMode ) pRenderer->_49FD3A(); sub_444839_move_map(_evt->v29, _evt->v30, v135, v132, v126, v129, v95, v134, (char *)&_evt->v31); dword_5C3418 = uEventID; dword_5C341C = curr_seq_num + 1; goto LABEL_301; } _5B65AC_npcdata_fame_or_other = _evt->v9 + ((_evt->v10 + ((_evt->v11 + ((uint)_evt->v12 << 8)) << 8)) << 8); _5B65A8_npcdata_uflags_or_other = v94; _5B65B0_npcdata_rep_or_other = v126; if ( v129 == -1 ) { v98 = _5B65B4_npcdata_loword_house_or_other; } else { v98 = v129 & stru_5C6E00->uDoublePiMask; _5B65B4_npcdata_loword_house_or_other = v129 & stru_5C6E00->uDoublePiMask; } v99 = (char *)&_evt->v31; _5B65B8_npcdata_hiword_house_or_other = v95; dword_5B65BC = v97; v100 = v94 | v132 | v126 | v95 | v97 | v98; dword_5B65C0 = v100; if ( *v99 == 48 ) { if ( v100 ) { pParty->vPosition.x = v135; pParty->vPosition.y = v132; pParty->vPosition.z = v126; pParty->uFallStartY = v126; if ( _5B65B4_npcdata_loword_house_or_other != -1 ) pParty->sRotationY = _5B65B4_npcdata_loword_house_or_other; _5B65B4_npcdata_loword_house_or_other = -1; v120 = 0; v116 = 0; v111 = 0; v110 = 0; v109 = -1; v108 = 0; v107 = 0; pParty->sRotationX = v95; pParty->uFallSpeed = v134; dword_5B65C0 = 0; dword_5B65BC = 0; _5B65B8_npcdata_hiword_house_or_other = 0; _5B65B0_npcdata_rep_or_other = 0; _5B65AC_npcdata_fame_or_other = 0; _5B65A8_npcdata_uflags_or_other = 0; v106 = 232; LABEL_280: pAudioPlayer->PlaySound((SoundID)v106, v107, v108, v109, v110, v111, v116, v120); } } else { pGameLoadingUI_ProgressBar->uType = (GUIProgressBar::Type)((activeLevelDecoration == NULL) + 1); sub_44987B(v99, 0); v133 = 1; if ( pCurrentScreen == SCREEN_HOUSE ) { if ( uGameState == 2 ) { pAudioPlayer->StopChannels(-1, -1); dialog_menu_id = 0; while ( sub_4BD8B5() ) ; pVideoPlayer->Unload(); window_SpeakInHouse->Release(); window_SpeakInHouse = 0; if ( pMessageQueue_50CBD0->uNumMessages ) pMessageQueue_50CBD0->uNumMessages = pMessageQueue_50CBD0->pMessages[0].field_8 != 0; pCurrentScreen = SCREEN_GAME; viewparams->bRedrawGameUI = 1; pDialogueNPCCount = 0; pDialogueWindow->Release(); dialog_menu_id = 0; pDialogueWindow = 0; pIcons_LOD->_40F9C5(); } goto LABEL_302; } } ++curr_seq_num; v4 = v124; //v6 = v123; //v7 = ""; break; case EVENT_PlaySound: v120 = 0; v116 = 0; v111 = 0; v110 = _evt->v13 + ((_evt->v14 + ((_evt->v15 + ((uint)_evt->v16 << 8)) << 8)) << 8); v109 = _evt->v9 + ((_evt->v10 + ((_evt->v11 + ((uint)_evt->v12 << 8)) << 8)) << 8); v108 = 0; v107 = 0; v106 = _evt->v5 + ((_evt->v6 + ((_evt->v7 + ((uint)_evt->v8 << 8)) << 8)) << 8); goto LABEL_280; case EVENT_GiveItem: item.Reset(); //v101 = &pSomeEVT[v9]; v102 = _evt->v7 + ((_evt->v8 + ((_evt->v9 + ((uint)_evt->v10 << 8)) << 8)) << 8); pItemsTable->GenerateItem(_evt->v5, _evt->v6, &item); if ( v102 ) item.uItemID = v102; pParty->SetHoldingItem(&item); ++curr_seq_num; v4 = v124; //v6 = v123; //v7 = ""; break; case EVENT_SpeakInHouse: if ( EnterHouse((enum HOUSE_ID)EVT_DWORD(_evt->v5))) { if ( pRenderer->pRenderD3D && !pRenderer->bWindowMode ) pRenderer->_49FD3A(); pAudioPlayer->PlaySound((SoundID)0, 0, 0, -1, 0, 0, 0, 0); pAudioPlayer->PlaySound(SOUND_EnteringAHouse, 814, 0, -1, 0, 0, 0, 0); v104 = 187; if ( uCurrentHouse_Animation != 167 ) v104 = EVT_DWORD(_evt->v5); window_SpeakInHouse = GUIWindow::Create(0, 0, 640, 480, WINDOW_HouseInterior, v104, 0); window_SpeakInHouse->CreateButton( 61, 424, 31, 0, 2, 94, 0x6Eu, 1, 49, "", 0); window_SpeakInHouse->CreateButton(177, 424, 31, 0, 2, 94, 0x6Eu, 2, 50, "", 0); window_SpeakInHouse->CreateButton(292, 424, 31, 0, 2, 94, 0x6Eu, 3, 51, "", 0); window_SpeakInHouse->CreateButton(407, 424, 31, 0, 2, 94, 0x6Eu, 4, 52, "", 0); window_SpeakInHouse->CreateButton( 0, 0, 0, 0, 1, 0, 0xB0u, 0, 9u, "", 0); } ++curr_seq_num; v4 = v124; //v6 = v123; //v7 = ""; break; case EVENT_PressAnyKey: v121 = 33; v105 = curr_seq_num + 1; goto LABEL_295; case EVENT_Exit: if ( v133 == 1 ) OnMapLeave(); return; default: ++curr_seq_num; v4 = v124; //v6 = v123; //v7 = ""; break; } } ++v4; v124 = v4; if ( v4 >= uSomeEVT_NumEvents ) goto LABEL_301; //} } }