# HG changeset patch # User Ritor1 # Date 1394383199 -21600 # Node ID fd788d2e9585139f5b1ca26960b7d749395f3028 # Parent 6532bbac1a9e5a10fe899e6512cab0715dcd62ae EventProcessor cleaned and ODM_NearClip fix diff -r 6532bbac1a9e -r fd788d2e9585 Chest.cpp --- a/Chest.cpp Sat Mar 08 23:53:09 2014 +0600 +++ b/Chest.cpp Sun Mar 09 22:39:59 2014 +0600 @@ -302,26 +302,26 @@ item_texture = pIcons_LOD->GetTexture(item_texture_id); v6 = item_texture->uTextureWidth; if ( v6 < 14 ) - v6 = 14; + v6 = 14; texture_cell_width = ((v6 - 14) >> 5) + 1; v8 = item_texture->uTextureHeight; if ( v8 < 14 ) v8 = 14; texture_cell_height = ((v8 - 14) >> 5) + 1; if ( !areWeLoadingTexture ) - { - item_texture->Release(); - pIcons_LOD->SyncLoadedFilesCount(); - } + { + item_texture->Release(); + pIcons_LOD->SyncLoadedFilesCount(); + } if ( (texture_cell_width + test_cell_position % chest_cell_width <= chest_cell_width) && (texture_cell_height + test_cell_position / chest_cell_width <= chest_cell_heght) ) - { //we not put over borders + { //we not put over borders _row = 0; if ( texture_cell_height <= 0 ) return true; _cell_rows = 0; while ( 1 ) - { + { _column = 0; if ( texture_cell_width > 0 ) { @@ -371,7 +371,7 @@ //----- (0041FFA2) -------------------------------------------------------- int Chest::PutItemInChest(int position, ItemGen *put_item, signed int uChestID) -{ +{//(rus: положить предмет в ящик) ItemGen *v4; // edi@1 int v5; // esi@1 int result; // eax@11 @@ -571,18 +571,15 @@ //----- (00448A17) -------------------------------------------------------- void Chest::ToggleFlag(signed int uChestID, unsigned __int16 uFlag, unsigned int bToggle) - { - unsigned __int16 *pFlags; // eax@3 - - if ( uChestID >= 0 && uChestID <= 19 ) - { - pFlags = &pChests[uChestID].uFlags; - if ( bToggle ) - *pFlags |= uFlag; - else - *pFlags &= ~uFlag; - } - } +{ + if ( uChestID >= 0 && uChestID <= 19 ) + { + if ( bToggle ) + pChests[uChestID].uFlags |= uFlag; + else + pChests[uChestID].uFlags &= ~uFlag; + } +} //----- (00458B03) -------------------------------------------------------- void ChestList::ToFile() @@ -698,9 +695,8 @@ //----- (00420B13) -------------------------------------------------------- void __fastcall sub_420B13(int a1, int a2) -{ +{ //Give item from chest(rus: Взять предмет из ящика) void *v2; // eax@1 - ItemGen *v3; // ebx@1 unsigned int v4; // eax@1 Texture *texture; // ecx@1 signed int v6; // eax@1 @@ -716,20 +712,12 @@ int i; // ecx@10 int v17; // [sp+Ch] [bp-14h]@1 int v18; // [sp+10h] [bp-10h]@3 - int v19; // [sp+14h] [bp-Ch]@1 - int v20; // [sp+18h] [bp-8h]@1 int v21; // [sp+1Ch] [bp-4h]@5 int v22; // [sp+1Ch] [bp-4h]@8 - v19 = a2; - v2 = pChestWindow->ptr_1C; - v20 = (int)v2; - v2 = (void *)(5324 * (int)v2); - //v3 = (ItemGen *)((char *)v2 + 36 * a1 + (int)((char *)pChests + 4)); - v3 = &pChests[v20].igChestItems[a1]; - //v17 = pChestWidthsByType[*(short *)((char *)v2 + (int)pChests)]; - v17 = pChestWidthsByType[pChests[v20].uChestBitmapID]; - v4 = pIcons_LOD->LoadTexture(v3->GetIconName(), TEXTURE_16BIT_PALETTE); + v2 = (void *)(5324 * (int)pChestWindow->ptr_1C); + v17 = pChestWidthsByType[pChests[(int)pChestWindow->ptr_1C].uChestBitmapID]; + v4 = pIcons_LOD->LoadTexture(pChests[(int)pChestWindow->ptr_1C].igChestItems[a1].GetIconName(), TEXTURE_16BIT_PALETTE); texture = pIcons_LOD->GetTexture(v4); v6 = texture->uTextureWidth; @@ -744,59 +732,48 @@ v8 = 14; v10 = ((v8 - 14) >> 5) + 1; v21 = v10; + if ( !areWeLoadingTexture ) { - texture->Release(); - pIcons_LOD->SyncLoadedFilesCount(); - v10 = v21; + texture->Release(); + pIcons_LOD->SyncLoadedFilesCount(); + v10 = v21; } if ( v10 > 0 ) { - v11 = 0; - v22 = v10; - do + v11 = 0; + for ( v22 = v10; v22; --v22 ) + { + if ( v9 > 0 ) { - if ( v9 > 0 ) - { - v12 = v9; - //v13 = &pChests[0].pInventoryIndices[v19 + v11 + 2662 * (int)v20]; - v13 = &pChests[v20].pInventoryIndices[v19 + v11]; - v14 = v12 & 1; - v12 >>= 1; - memset(v13, 0, 4 * v12); - v15 = (int)((char *)v13 + 4 * v12); - for ( i = v14; i; --i ) - { - *(short *)v15 = 0; - v15 += 2; - } - v9 = v18; - } - v11 += v17; - --v22; + v12 = v9; + v13 = &pChests[(int)pChestWindow->ptr_1C].pInventoryIndices[a2 + v11]; + v14 = v12 & 1; + v12 >>= 1; + memset(&pChests[(int)pChestWindow->ptr_1C].pInventoryIndices[a2 + v11], 0, 4 * v12); + v15 = (int)((char *)v13 + 4 * v12); + for ( i = v14; i; --i ) + { + *(short *)v15 = 0; + v15 += 2; + } + v9 = v18; } - while ( v22 ); + v11 += v17; + } } - v3->Reset(); + pChests[(int)pChestWindow->ptr_1C].igChestItems[a1].Reset(); } // 506128: using guessed type int areWeLoadingTexture; //----- (00420E01) -------------------------------------------------------- void OnChestLeftClick() { - int chest_id; // edi@1 - POINT *v1; // esi@2 int v2; // eax@2 int v3; // ebx@4 int v4; // esi@6 - int v5; // ecx@6 - //SpriteObject v6; // [sp+Ch] [bp-80h]@1 - POINT v7; // [sp+7Ch] [bp-10h]@2 - POINT a2; // [sp+84h] [bp-8h]@2 + POINT cursor; // [sp+84h] [bp-8h]@2 SpriteObject v6; // [sp+Ch] [bp-80h]@1 - //SpriteObject::SpriteObject(&v6); - - chest_id = pGUIWindow_CurrentMenu->par1C; if ( pParty->pPickedItem.uItemID ) { if ( Chest::PutItemInChest(-1, &pParty->pPickedItem, pGUIWindow_CurrentMenu->par1C) ) @@ -804,22 +781,22 @@ } else { - v1 = pMouse->GetCursorPos(&a2); - v2 = pRenderer->pActiveZBuffer[v1->x + pSRZBufferLineOffsets[pMouse->GetCursorPos(&v7)->y]] & 0xFFFF; + pMouse->GetCursorPos(&cursor); + v2 = pRenderer->pActiveZBuffer[cursor.x + pSRZBufferLineOffsets[cursor.y]] & 0xFFFF; if ( v2 ) { if ( v2 ) v3 = v2 - 1; else v3 = -1; - v4 = pChests[chest_id].pInventoryIndices[v3] - 1; - if ( pChests[chest_id].igChestItems[v4].GetItemEquipType() == EQUIP_GOLD ) + v4 = pChests[(int)pGUIWindow_CurrentMenu->par1C].pInventoryIndices[v3] - 1; + if ( pChests[(int)pGUIWindow_CurrentMenu->par1C].igChestItems[v4].GetItemEquipType() == EQUIP_GOLD ) { - pParty->PartyFindsGold(pChests[chest_id].igChestItems[v4].uSpecEnchantmentType, 0); + pParty->PartyFindsGold(pChests[(int)pGUIWindow_CurrentMenu->par1C].igChestItems[v4].uSpecEnchantmentType, 0); viewparams->bRedrawGameUI = 1; } else - pParty->SetHoldingItem(&pChests[chest_id].igChestItems[v4]); + pParty->SetHoldingItem(&pChests[(int)pGUIWindow_CurrentMenu->par1C].igChestItems[v4]); sub_420B13(v4, v3); } } diff -r 6532bbac1a9e -r fd788d2e9585 Events.cpp --- a/Events.cpp Sat Mar 08 23:53:09 2014 +0600 +++ b/Events.cpp Sun Mar 09 22:39:59 2014 +0600 @@ -282,7 +282,6 @@ { unsigned int v3; // eax@5 signed int v4; // esi@7 - Player *v6; // ecx@8 int v11; // eax@14 char *v12; // eax@15 const char *v16; // esi@21 @@ -307,12 +306,8 @@ 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 @@ -347,8 +342,6 @@ 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 @@ -376,15 +369,11 @@ int v118; // [sp-4h] [bp-4ACh]@117 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 @@ -398,7 +387,6 @@ char Str[120]; // [sp+ECh] [bp-3BCh]@21 Actor Dst; // [sp+164h] [bp-344h]@53 - //v131 = uEventID; v133 = 0; EvtTargetObj = targetObj; dword_5B65C4_cancelEventProcessing = 0; @@ -410,79 +398,64 @@ return; } */ if ( !uEventID ) - { + { if ( !GameUI_Footer_TimeLeft ) 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 = entry_line; if ( activeLevelDecoration ) - { + { uSomeEVT_NumEvents = uGlobalEVT_NumEvents; pSomeEVT = pGlobalEVT.data(); memcpy(pSomeEVT_Events.data(), pGlobalEVT_Index.data(), sizeof(EventIndex)*4400); //4400 evts - } + } else - { + { uSomeEVT_NumEvents = uLevelEVT_NumEvents; pSomeEVT = pLevelEVT.data(); memcpy(pSomeEVT_Events.data(), pLevelEVT_Index.data(), sizeof(EventIndex)*4400); - } + } - v4 = 0; - v124 = 0; - //for (uint i = 0; i < uSomeEVT_NumEvents; ++i) - // { - //v6 = v123; - //v7 = ""; - while ( 1 ) - { + for ( v4 = 0; v4 < uSomeEVT_NumEvents; ++v4 ) + { if ( dword_5B65C4_cancelEventProcessing ) { if ( v133 == 1 ) OnMapLeave(); return; } - //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]; _evt_raw * _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; + //v4 = v124; break; - } - v124 = -1; + } + v4 = -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->bBufferLoaded) + if (pVideoPlayer->bBufferLoaded) pVideoPlayer->Unload(); pVideoPlayer->bStopBeforeSchedule = 0; pVideoPlayer->pResetflag = 0; 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); pVideoPlayer->MovieLoop(v16, 0, _evt->v5, 1); @@ -493,66 +466,52 @@ LOBYTE(v17) = 1; SetUserInterface(PartyAlignment_Good, v17); if ( !_evt->v6 || v128 == 3 ) - { + { pCurrentScreen = v128; if ( v128 == 3 ) pGameLoadingUI_ProgressBar->uType = GUIProgressBar::TYPE_Fullscreen; if ( v128 == 13 ) pVideoPlayer->OpenHouseMovie(pAnimatedRooms[uCurrentHouse_Animation].video_name, 1u); - } - + } ++curr_seq_num; - v4 = v124; - - //v6 = v123; - //v7 = ""; break; - } + } if ( !_stricmp(v16, "arbiter evil") ) - { + { v18 = 2; pParty->alignment = PartyAlignment_Evil; LOBYTE(v17) = 1; SetUserInterface(PartyAlignment_Evil, v17); if ( !_evt->v6 || v128 == 3 ) - { + { pCurrentScreen = v128; if ( v128 == 3 ) pGameLoadingUI_ProgressBar->uType = GUIProgressBar::TYPE_Fullscreen; if ( v128 == 13 ) pVideoPlayer->OpenHouseMovie(pAnimatedRooms[uCurrentHouse_Animation].video_name, 1u); - } + } ++curr_seq_num; - v4 = v124; - - //v6 = v123; - //v7 = ""; - break; - } + } if ( !_stricmp(v16, "pcout01") ) // moving to harmondale from emerald isle - { + { Rest(0x2760u); pParty->RestAndHeal(); pParty->days_played_without_rest = 0; - } + } if ( !_evt->v6 || v128 == 3 ) - { + { pCurrentScreen = v128; if ( v128 == 3 ) pGameLoadingUI_ProgressBar->uType = GUIProgressBar::TYPE_Fullscreen; if ( v128 == 13 ) pVideoPlayer->OpenHouseMovie(pAnimatedRooms[uCurrentHouse_Animation].video_name, 1); - } + } ++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; @@ -581,17 +540,11 @@ if ( v20 >= 4 ) { ++curr_seq_num; - v4 = v124; - - //v6 = v123; - //v7 = ""; break; } } - //v11 = _evt->v11; curr_seq_num = _evt->v11 - 1; ++curr_seq_num; - v4 = v124; break; } LABEL_47: @@ -607,14 +560,9 @@ { curr_seq_num = _evt->v11 - 1; ++curr_seq_num; - v4 = v124; break; } ++curr_seq_num; - v4 = v124; - - //v6 = v123; - //v7 = ""; } break; @@ -630,23 +578,17 @@ 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 ( EVT_DWORD(_evt->v5) ) stru_5E4C90_MapPersistVars._decor_events[activeLevelDecoration->_idx_in_stru123] = _evt->v5 - 124; else - { + { v26 = (LevelDecoration *)activeLevelDecoration; stru_5E4C90_MapPersistVars._decor_events[activeLevelDecoration ->_idx_in_stru123] = 0; v26->uFlags |= LEVEL_DECORATION_INVISIBLE; - } + } ++curr_seq_num; - v4 = v124; break; case EVENT_SetNPCGreeting: @@ -654,10 +596,6 @@ 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: { @@ -700,79 +638,48 @@ } ++curr_seq_num; } - v4 = v124; 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.data();//[0].uGroup; - do - { - if ( v41->uGroup == v38 ) - v41->uGroup = v39; - ++v41; - --v40; - } - while ( v40 ); - } + for ( uint actor_id = 0; actor_id < uNumActors; actor_id++ ) + { + if ( pActors[actor_id].uGroup == v38 ) + pActors[actor_id].uGroup = v39; + } ++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.data();//[0].uAlly; - do - { - if ( v45->uGroup == v42 ) - v45->uAlly = v43; - ++v45; - --v44; - } - while ( v44 ); - } + for ( uint actor_id = 0; actor_id < uNumActors; actor_id++ ) + { + if ( pActors[actor_id].uGroup == v42 ) + pActors[actor_id].uAlly = v43; + } ++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 ) { @@ -812,9 +719,7 @@ } } - ++curr_seq_num; - v4 = v124; - + ++curr_seq_num; break; case EVENT_Jmp: curr_seq_num = _evt->v5 - 1; @@ -835,26 +740,22 @@ 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 + if ( _evt->v5 <= 3 ) //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) + 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), @@ -864,10 +765,6 @@ _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); @@ -875,7 +772,7 @@ { if ( pPlayers[player_choose]->CompareVariable((enum VariableType)EVT_WORD(_evt->v5), pValue) ) { - v124 = -1; + // v124 = -1; curr_seq_num = _evt->v11 - 1; } } @@ -885,7 +782,7 @@ { if ( pPlayers[uActiveCharacter]->CompareVariable((enum VariableType)EVT_WORD(_evt->v5), pValue) ) { - v124 = -1; + // v124 = -1; curr_seq_num = _evt->v11 - 1; } } @@ -897,7 +794,7 @@ { if ( pPlayers[i]->CompareVariable((enum VariableType)EVT_WORD(_evt->v5), pValue) ) { - v124 = -1; + // v124 = -1; curr_seq_num = _evt->v11 - 1; break; } @@ -908,21 +805,21 @@ { if ( pPlayers[rand() % 4 + 1]->CompareVariable((enum VariableType)EVT_WORD(_evt->v5), pValue) ) { - v124 = -1; + // v124 = -1; curr_seq_num = _evt->v11 - 1; } } ++curr_seq_num; - v4 = v124; + v4 = -1; break; case EVENT_IsActorAlive: if (IsActorAlive(EVT_BYTE(_evt->v5), EVT_DWORD(_evt->v6), EVT_BYTE(_evt->v10))) - { - v124 = -1; + { + //v124 = -1; curr_seq_num = _evt->v11 - 1; - } + } ++curr_seq_num; - v4 = v124; + v4 = -1; break; case EVENT_Substract: pValue = EVT_DWORD(_evt->v7); @@ -1010,7 +907,6 @@ else if ( player_choose == 6 ) //random pParty->pPlayers[rand() % 4].SubtractVariable((enum VariableType)EVT_WORD(_evt->v5), pValue); ++curr_seq_num; - v4 = v124; break; case EVENT_Set: pValue = EVT_DWORD(_evt->v7); @@ -1023,14 +919,13 @@ } else if ( player_choose == 5 )//all { - //recheck v130 + //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 pParty->pPlayers[rand() % 4].SetVariable((enum VariableType)EVT_WORD(_evt->v5), pValue); ++curr_seq_num; - v4 = v124; break; case EVENT_Add: pValue = EVT_DWORD(_evt->v7); @@ -1059,34 +954,25 @@ viewparams->bRedrawGameUI = true; } ++curr_seq_num; - v4 = v124; break; case EVENT_InputString: if ( !entry_line ) - { + { strcpy(GameUI_Footer_TimedString.data(), &pLevelStr[pLevelStrOffsets[EVT_DWORD(_evt->v5 )]]); - //v105 = curr_seq_num; - //v121 = 26; sub_4451A8_press_any_key(uEventID, curr_seq_num, 26); if ( v133 == 1 ) OnMapLeave(); return; - } + } v84 = _evt->v13 + ((_evt->v14 + ((_evt->v15 + ((uint)_evt->v16 << 8)) << 8)) << 8); if ( !_stricmp(GameUI_Footer_TimedString.data(), &pLevelStr[pLevelStrOffsets[_evt->v9 + ((_evt->v10 + ((_evt->v11 + ((uint)_evt->v12 << 8)) << 8)) << 8)]]) || !_stricmp(GameUI_Footer_TimedString.data(), &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 = ""; + v4 = -1; break; case EVENT_RandomGoTo: //v124 = -1; @@ -1094,105 +980,65 @@ + (_evt->v10 != 0))); curr_seq_num = v11 - 1; ++curr_seq_num; - v4 = v124; + v4 = -1; break; case EVENT_ReceiveDamage: if ( (unsigned __int8)_evt->v5 <= 3 ) - { - //v119 = _evt->v6; - //v115 = EVT_DWORD(_evt->v7 ); + { pParty->pPlayers[(unsigned __int8)_evt->v5].ReceiveDamage(EVT_DWORD(_evt->v7 ), (DAMAGE_TYPE)_evt->v6); ++curr_seq_num; - v4 = v124; break; - } + } if ( _evt->v5 == 4 ) - { + { if ( !uActiveCharacter ) - { + { ++curr_seq_num; - v4 = v124; - - //v6 = v123; - //v7 = ""; break; - } + } pPlayers[uActiveCharacter]->ReceiveDamage(EVT_DWORD(_evt->v7 ), (DAMAGE_TYPE)_evt->v6); ++curr_seq_num; - v4 = v124; break; - } + } if ( _evt->v5 != 5 ) - { + { pParty->pPlayers[rand() % 4].ReceiveDamage(EVT_DWORD(_evt->v7 ), (DAMAGE_TYPE)_evt->v6); ++curr_seq_num; - v4 = v124; - - //v6 = v123; - //v7 = ""; break; - } + } for ( uint pl_id = 0;pl_id < 4; pl_id++ ) pParty->pPlayers[pl_id].ReceiveDamage(EVT_DWORD(_evt->v7 ), (DAMAGE_TYPE)_evt->v6); ++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 ) current_npc_text = pNPCTopics[v90-1].pText;//(&dword_721664)[8 * v90]; if ( canShowMessages == 1 ) @@ -1201,96 +1047,64 @@ //LABEL_248: ShowStatusBarString(v91, 2); } - } + } else + { + if ( canShowMessages == 1 ) { - if ( canShowMessages == 1 ) - { v91 = &pLevelStr[pLevelStrOffsets[v90]]; - ShowStatusBarString(v91, 2u); - } + ShowStatusBarString(v91, 2); } + } ++curr_seq_num; - v4 = v124; - - //v6 = v123; - //v7 = ""; break; case EVENT_ShowMessage: - //v92 = EVT_DWORD(_evt->v5 ); if ( activeLevelDecoration ) - { + { current_npc_text = pNPCTopics[EVT_DWORD(_evt->v5 )-1].pText;//(&dword_721664)[8 * v92]; byte_5B0938[0] = 0; - //current_npc_text = v93; - } + } else strcpy(byte_5B0938.data(), &pLevelStr[pLevelStrOffsets[EVT_DWORD(_evt->v5 )]]); ++curr_seq_num; - v4 = v124; - - //v6 = v123; - //v7 = ""; break; case EVENT_CastSpell: EventCastSpell(_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: Door_switch_animation(_evt->v5, _evt->v6); ++curr_seq_num; - v4 = v124; break; case EVENT_OpenChest: if ( !Chest::Open(_evt->v5) ) - { + { if ( v133 == 1 ) OnMapLeave(); return; - } + } ++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); @@ -1318,10 +1132,10 @@ 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; @@ -1381,10 +1195,6 @@ } } ++curr_seq_num; - v4 = v124; - - //v6 = v123; - //v7 = ""; break; case EVENT_PlaySound: v110 = _evt->v13 + ((_evt->v14 + ((_evt->v15 + ((uint)_evt->v16 << 8)) << 8)) << 8); @@ -1392,20 +1202,15 @@ v106 = _evt->v5 + ((_evt->v6 + ((_evt->v7 + ((uint)_evt->v8 << 8)) << 8)) << 8); pAudioPlayer->PlaySound((SoundID)v106, 0, 0, v109, v110, 0, 0, 0); ++curr_seq_num; - v4 = v124; break; 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))) @@ -1424,14 +1229,8 @@ window_SpeakInHouse->CreateButton( 0, 0, 0, 0, 1, 0, UIMSG_CycleCharacters, 0, '\t', "", 0); } ++curr_seq_num; - v4 = v124; - - //v6 = v123; - //v7 = ""; break; case EVENT_PressAnyKey: - //v121 = 33; - //v105 = curr_seq_num + 1; sub_4451A8_press_any_key(uEventID, curr_seq_num + 1, 33); if ( v133 == 1 ) OnMapLeave(); @@ -1442,22 +1241,13 @@ return; default: ++curr_seq_num; - v4 = v124; - - //v6 = v123; - //v7 = ""; break; } } - ++v4; - v124 = v4; - if ( v4 >= uSomeEVT_NumEvents ) - { - if ( v133 == 1 ) - OnMapLeave(); - return; } - } + if ( v133 == 1 ) + OnMapLeave(); + return; } //----- (00444732) -------------------------------------------------------- @@ -1480,8 +1270,8 @@ { if ( pLevelEVT_Index[event_index].uEventID == uEventID ) { - test_evt=(_evt_raw*)&pLevelEVT[pLevelEVT_Index[event_index].uEventOffsetInEVT]; - last_evt=test_evt; + test_evt=(_evt_raw*)&pLevelEVT[pLevelEVT_Index[event_index].uEventOffsetInEVT]; + last_evt=test_evt; event_pos = pLevelEVT_Index[event_index+1].uEventOffsetInEVT; if ( test_evt->_e_type == EVENT_MouseOver ) break; @@ -1490,7 +1280,7 @@ if ( event_index >= uLevelEVT_NumEvents ) return NULL; } - test_evt=(_evt_raw*)&pLevelEVT[event_pos]; + test_evt=(_evt_raw*)&pLevelEVT[event_pos]; if ( test_evt->_e_type== EVENT_SpeakInHouse ) { str_index = EVT_DWORD(test_evt->v5); @@ -1498,10 +1288,10 @@ } else { - for ( i = event_index+1; pLevelEVT_Index[i].uEventID == uEventID; ++i ) + for ( i = event_index + 1; pLevelEVT_Index[i].uEventID == uEventID; ++i ) { event_pos = pLevelEVT_Index[i].uEventOffsetInEVT; - test_evt=(_evt_raw*)&pLevelEVT[event_pos]; + test_evt=(_evt_raw*)&pLevelEVT[event_pos]; if ( test_evt->_e_type == EVENT_SpeakInHouse ) { str_index = EVT_DWORD(test_evt->v5); diff -r 6532bbac1a9e -r fd788d2e9585 GUIButton.cpp --- a/GUIButton.cpp Sat Mar 08 23:53:09 2014 +0600 +++ b/GUIButton.cpp Sun Mar 09 22:39:59 2014 +0600 @@ -114,73 +114,51 @@ //----- (0041D0D8) -------------------------------------------------------- void GUIButton::Release() { - GUIWindow *v1; // eax@2 - GUIButton *v2; // edx@2 - GUIButton *v3; // eax@6 - GUIButton *ptr; - - ptr=this; - if ( ptr ) + if ( this ) { - v1 = ptr->pParent; - v2 = ptr->pNext; - if ( ptr == v1->pControlsHead ) + if ( this == this->pParent->pControlsHead ) { - if ( v2 ) + if ( this->pNext ) { - v1->pControlsHead = v2; - ptr->pNext->pPrev = 0; + this->pParent->pControlsHead = this->pNext; + this->pNext->pPrev = 0; } else { - v1->pControlsHead = 0; - ptr->pParent->pControlsTail = 0; + this->pParent->pControlsHead = 0; + this->pParent->pControlsTail = 0; } } else { - v3 = ptr->pPrev; - if ( v2 ) + if ( this->pNext ) { - v3->pNext = v2; - ptr->pNext->pPrev = v3; + this->pPrev->pNext = this->pNext; + this->pNext->pPrev = this->pPrev; } else { - v3->pNext = 0; - ptr->pParent->pControlsTail = v3; + this->pPrev->pNext = 0; + this->pParent->pControlsTail = this->pPrev; } } - --ptr->pParent->uNumControls; + --this->pParent->uNumControls; } } - //----- (00415180) -------------------------------------------------------- void GUIButton::DrawLabel( const char *label_text, struct GUIFont *pFont, int a5, int uFontShadowColor ) - { - const char *v5; // ebx@1 - GUIButton *v6; // esi@1 - int v7; // eax@1 - - v5 = label_text; - v6 = this; +{ //strlen(edx0); - v7 = pFont->GetLineWidth(label_text); - return pParent->DrawText( - pFont, - v6->uX + (signed int)(v6->uWidth - v7) / 2, - v6->uY + (signed int)(v6->uHeight - pFont->uFontHeight) / 2, - a5, - label_text, - 0, - 0, - uFontShadowColor); + return pParent->DrawText(pFont, + this->uX + (signed int)(this->uWidth - pFont->GetLineWidth(label_text)) / 2, + this->uY + (signed int)(this->uHeight - pFont->uFontHeight) / 2, + a5, label_text, 0, 0, uFontShadowColor); } //----- (004B36CC) -------------------------------------------------------- void CreateButtonInColumn( int column_pos, unsigned int control_id ) { - pDialogueWindow->CreateButton( 480, 30 * column_pos + 146, 140, 30, 1, 0, UIMSG_SelectShopDialogueOption, control_id, 0, "", 0); + pDialogueWindow->CreateButton( 480, 30 * column_pos + 146, 140, 30, 1, 0, UIMSG_SelectShopDialogueOption, control_id, 0, "", 0); } //----- (00419379) -------------------------------------------------------- void ReleaseAwardsScrollBar() diff -r 6532bbac1a9e -r fd788d2e9585 Game.cpp --- a/Game.cpp Sat Mar 08 23:53:09 2014 +0600 +++ b/Game.cpp Sun Mar 09 22:39:59 2014 +0600 @@ -72,14 +72,11 @@ //----- (0044103C) -------------------------------------------------------- void Game::Draw() { - //float v2; // ST24_4@11 - //double v3; // ST28_8@11 int v4; // edi@26 - //int v5; // eax@35 uFlags2 &= ~0x02; if ( pParty->_497FC5_check_party_perception_against_level() ) - uFlags2 |= 2u; + uFlags2 |= 2; pGame->pIndoorCameraD3D->sRotationX = pParty->sRotationX; pGame->pIndoorCameraD3D->sRotationY = pParty->sRotationY; diff -r 6532bbac1a9e -r fd788d2e9585 GammaControl.cpp --- a/GammaControl.cpp Sat Mar 08 23:53:09 2014 +0600 +++ b/GammaControl.cpp Sun Mar 09 22:39:59 2014 +0600 @@ -23,30 +23,25 @@ double v2; // st7@1 unsigned __int16 *v3; // ecx@1 double v4; // st6@2 - double result; // st7@7 signed int v6; // [sp+0h] [bp-8h]@1 signed int v7; // [sp+4h] [bp-4h]@1 - v7 = 0; v2 = 0.0; v6 = 256; v3 = a1->green; - do + for ( v7 = 0; v7 < 256; ++v7 ) { v4 = ((double)*(v3 - 256) + (double)v3[256] + (double)*v3) * 0.000015259022 * 0.33333334; if ( v4 == 0.0 ) --v6; else v2 = v2 + (double)v7 * 0.0039215689 / v4; - ++v7; ++v3; } - while ( v7 < 256 ); if ( v6 ) - result = v2 / (double)v6; + return v2 / (double)v6; else - result = 1.0; - return result; + return 1.0; } //----- (0044F408) -------------------------------------------------------- @@ -66,42 +61,33 @@ signed __int64 v4; // qax@3 signed int v6; // [sp+Ch] [bp-4h]@1 - v6 = 0; v2 = pRamp->green; - do + for ( v6 = 0; v6 < 256; ++v6 ) { v3 = (double)v6 * 0.0039215689 * this->fGamma; if ( v3 >= 1.0 || (v4 = (signed __int64)(v3 * 65535.0), (signed int)v4 > 65535) ) - { - LODWORD(v4) = 65535; - } + LODWORD(v4) = 65535; else if ( (signed int)v4 < 0 ) - { LODWORD(v4) = 0; - } else { if ( (signed int)v4 > 65535 ) LODWORD(v4) = 65535; } - ++v6; v2[256] = v4; *v2 = v4; *(v2 - 256) = v4; ++v2; } - while ( v6 < 256 ); return v4; } //----- (0044F4D9) -------------------------------------------------------- void GammaController::Initialize(float gamma) { - GammaController *v2; // esi@1 double v3; // st7@3 double v4; // st6@4 - v2 = this; //if (pVersion->pVersionInfo.dwPlatformId != VER_PLATFORM_WIN32_NT || //pVersion->pVersionInfo.dwMajorVersion != 4) { @@ -117,19 +103,13 @@ v3 = gamma; } else - { v3 = 0.1; - } - v2->fGamma = v3; - InitGammaRamp(&v2->field_60C); - SetGammaRamp(&v2->field_60C); + this->fGamma = v3; + InitGammaRamp(&this->field_60C); + SetGammaRamp(&this->field_60C); } } - - - - //----- (0044F215) -------------------------------------------------------- GammaController::GammaController() { @@ -139,29 +119,20 @@ fGamma = flt_4D8670_default_gamma; } - - //----- (0044F24B) -------------------------------------------------------- void GammaController::InitializeFromSurface(IDirectDrawSurface4 *a2) { - GammaController *v2; // esi@1 - IDirectDrawGammaControl **v3; // edi@1 - IDirectDrawGammaControl *v4; // eax@1 - - v2 = this; - v3 = &this->pGammaControl; this->pSurface = a2; - v4 = this->pGammaControl; - if ( v4 ) + if ( this->pGammaControl ) { - v4->Release(); - *v3 = 0; + this->pGammaControl->Release(); + this->pGammaControl = 0; } if ( pRenderer->IsGammaSupported() ) { - ErrD3D(a2->QueryInterface(IID_IDirectDrawGammaControl, (LPVOID *)v3)); + ErrD3D(a2->QueryInterface(IID_IDirectDrawGammaControl, (LPVOID *)&this->pGammaControl)); GetRamp(); - memcpy(&v2->field_60C, &v2->pDefaultRamp, 0x600u); - fGamma = _44F377(&v2->field_60C); + memcpy(&this->field_60C, &this->pDefaultRamp, 0x600u); + fGamma = _44F377(&this->field_60C); } } \ No newline at end of file diff -r 6532bbac1a9e -r fd788d2e9585 Render.cpp --- a/Render.cpp Sat Mar 08 23:53:09 2014 +0600 +++ b/Render.cpp Sun Mar 09 22:39:59 2014 +0600 @@ -8485,18 +8485,18 @@ { //t = near_clip - v0.x / v1.x - v0.x (формула получения точки пересечения отрезка с плоскостью) t = (8.0 - array_50AC10[i].vWorldViewPosition.x) / (array_50AC10[i + 1].vWorldViewPosition.x - array_50AC10[i].vWorldViewPosition.x); - array_507D30[out_num_vertices].vWorldViewPosition.y = fixpoint_mul((array_50AC10[i + 1].vWorldViewPosition.y - array_50AC10[i].vWorldViewPosition.y), t) + array_50AC10[i].vWorldViewPosition.y; - array_507D30[out_num_vertices].vWorldViewPosition.z = fixpoint_mul((array_50AC10[i + 1].vWorldViewPosition.z - array_50AC10[i].vWorldViewPosition.z), t) + array_50AC10[i].vWorldViewPosition.z; - array_507D30[out_num_vertices].u = fixpoint_mul((array_50AC10[i + 1].u - array_50AC10[i].u), t) + array_50AC10[i].u; - array_507D30[out_num_vertices].v = fixpoint_mul((array_50AC10[i + 1].v - array_50AC10[i].v), t) + array_50AC10[i].v; + array_507D30[out_num_vertices].vWorldViewPosition.y = (array_50AC10[i + 1].vWorldViewPosition.y - array_50AC10[i].vWorldViewPosition.y) * t + array_50AC10[i].vWorldViewPosition.y; + array_507D30[out_num_vertices].vWorldViewPosition.z = (array_50AC10[i + 1].vWorldViewPosition.z - array_50AC10[i].vWorldViewPosition.z) * t + array_50AC10[i].vWorldViewPosition.z; + array_507D30[out_num_vertices].u = (array_50AC10[i + 1].u - array_50AC10[i].u) * t + array_50AC10[i].u; + array_507D30[out_num_vertices].v = (array_50AC10[i + 1].v - array_50AC10[i].v) * t + array_50AC10[i].v; } else { t = (8.0 - array_50AC10[i + 1].vWorldViewPosition.x) / (array_50AC10[i].vWorldViewPosition.x - array_50AC10[i + 1].vWorldViewPosition.x); - array_507D30[out_num_vertices].vWorldViewPosition.y = fixpoint_mul((array_50AC10[i].vWorldViewPosition.y - array_50AC10[i + 1].vWorldViewPosition.y), t) + array_50AC10[i + 1].vWorldViewPosition.y; - array_507D30[out_num_vertices].vWorldViewPosition.z = fixpoint_mul((array_50AC10[i].vWorldViewPosition.z - array_50AC10[i + 1].vWorldViewPosition.z), t) + array_50AC10[i + 1].vWorldViewPosition.z; - array_507D30[out_num_vertices].u = fixpoint_mul((array_50AC10[i].u - array_50AC10[i + 1].u), t) + array_50AC10[i + 1].u; - array_507D30[out_num_vertices].v = fixpoint_mul((array_50AC10[i].v - array_50AC10[i + 1].v), t) + array_50AC10[i + 1].v; + array_507D30[out_num_vertices].vWorldViewPosition.y = (array_50AC10[i].vWorldViewPosition.y - array_50AC10[i + 1].vWorldViewPosition.y) * t + array_50AC10[i + 1].vWorldViewPosition.y; + array_507D30[out_num_vertices].vWorldViewPosition.z = (array_50AC10[i].vWorldViewPosition.z - array_50AC10[i + 1].vWorldViewPosition.z) * t + array_50AC10[i + 1].vWorldViewPosition.z; + array_507D30[out_num_vertices].u = (array_50AC10[i].u - array_50AC10[i + 1].u) * t + array_50AC10[i + 1].u; + array_507D30[out_num_vertices].v = (array_50AC10[i].v - array_50AC10[i + 1].v) * t + array_50AC10[i + 1].v; } array_507D30[out_num_vertices].vWorldViewPosition.x = 8.0; array_507D30[out_num_vertices]._rhw = 1.0 / 8.0;