# HG changeset patch # User Ritor1 # Date 1361791647 -21600 # Node ID 0dbf780e247fa59d4b5c350a43b9705bfa53bee6 # Parent 8822405efad2e0ebc4fb39945dff66e6a3af813b CompareVariable part 1 diff -r 8822405efad2 -r 0dbf780e247f Chest.cpp --- a/Chest.cpp Mon Feb 25 11:10:57 2013 +0600 +++ b/Chest.cpp Mon Feb 25 17:27:27 2013 +0600 @@ -104,9 +104,9 @@ v31 = 813; v32 = 814; v5 = rand() % 4; - v6 = dword_5B5920 >> 3; + v6 = EvtTargetObj >> 3; v35 = v5; - if ( (dword_5B5920 & 7) == OBJECT_Decoration) + if ( (EvtTargetObj & 7) == OBJECT_Decoration) { v16 = v6; v14 = pLevelDecorations[v6].vPosition.x; @@ -116,11 +116,11 @@ } else { - if ( (dword_5B5920 & 7) != OBJECT_BModel) + if ( (EvtTargetObj & 7) != OBJECT_BModel) goto LABEL_12; if ( uCurrentlyLoadedLevelType == LEVEL_Outdoor) { - v7 = &pOutdoor->pBModels[dword_5B5920 >> 9].pFaces[(dword_5B5920 >> 3) & 0x3F]; + v7 = &pOutdoor->pBModels[EvtTargetObj >> 9].pFaces[(EvtTargetObj >> 3) & 0x3F]; v8 = v7->pBoundingBox.y1; v9 = v7->pBoundingBox.z2; v10 = v7->pBoundingBox.x1 + v7->pBoundingBox.x2; diff -r 8822405efad2 -r 0dbf780e247f Events.cpp --- a/Events.cpp Mon Feb 25 11:10:57 2013 +0600 +++ b/Events.cpp Mon Feb 25 17:27:27 2013 +0600 @@ -141,7 +141,7 @@ //----- (0044684A) -------------------------------------------------------- -void EventProcessor(int uEventID, int a2, int a3) +void EventProcessor(int uEventID, int targetObj, int canShowMessages) { unsigned int v3; // eax@5 signed int v4; // esi@7 @@ -198,8 +198,8 @@ Player *v55; // esi@114 Player *v56; // ecx@117 int v57; // ecx@118 - signed int v58; // ebp@124 - Player *v59; // esi@125 + signed int pValue; // ebp@124 + Player *pPlayer; // esi@125 int v60; // eax@126 int v61; // edx@133 int v62; // eax@139 @@ -287,9 +287,9 @@ //v131 = uEventID; v133 = 0; - dword_5B5920 = a2; + EvtTargetObj = targetObj; dword_5B65C4 = 0; - if ( !a1 ) + if ( !uEventID ) { if ( !GameUI_StatusBar_TimedStringTimeLeft ) ShowStatusBarString(pGlobalTXT_LocalizationStrings[521], 2u);// Nothing here @@ -297,7 +297,7 @@ } player_choose = (uActiveCharacter == 0)?6:4; //4 - active or 6 - random player if active =0 curr_seq_num = start_event_seq_number; - if ( _5C3420_pDecoration ) + if ( GlobalEventInfo ) { uSomeEVT_NumEvents = uGlobalEVT_NumEvents; pSomeEVT = pGlobalEVT; @@ -504,21 +504,17 @@ break; case EVENT_SpeakNPC: - if ( a3 ) + 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); + dword_5B65D0_dialogue_actor_npc_id = _evt->v5 + ((_evt->v6 + ((_evt->v7 + ((unsigned int)_evt->v8 << 8)) << 8)) << 8); Dst.uNPC_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); + bDialogueUI_InitializeActor_NPC_ID = _evt->v5 + ((_evt->v6 + ((_evt->v7 + ((unsigned int)_evt->v8 << 8)) << 8)) << 8); } ++curr_seq_num; v4 = v124; @@ -530,12 +526,12 @@ v25 = _evt->v5 + ((_evt->v6 + ((_evt->v7 + ((unsigned int)_evt->v8 << 8)) << 8)) << 8); if ( v25 ) { - stru_5E4C90._decor_events[_5C3420_pDecoration->_idx_in_stru123 - 75] = _evt->v5 - 124; + stru_5E4C90._decor_events[GlobalEventInfo + 28] = _evt->v5 - 124; } else { - v26 = _5C3420_pDecoration; - stru_5E4C90._decor_events[_5C3420_pDecoration->_idx_in_stru123 - 75] = 0; + v26 = (LevelDecoration *)GlobalEventInfo; + stru_5E4C90._decor_events[GlobalEventInfo + 28] = 0; LOBYTE(v26->field_2) |= 0x20u; } ++curr_seq_num; @@ -725,7 +721,7 @@ pVideoPlayer->Unload(); window_SpeakInHouse->Release(); pParty->uFlags &= 0xFFFFFFFDu; - _5C3420_pDecoration = (LevelDecoration *)1; + GlobalEventInfo = 1; if ( EnterHouse((enum HOUSE_TYPE)165) ) { pAudioPlayer->PlaySound((SoundID)0, 0, 0, -1, 0, 0, 0, 0); @@ -824,20 +820,20 @@ //v6 = v123; //v7 = ""; break; - case EVENT_Compare: - v58 = _evt->v7 + ((_evt->v8 + ((_evt->v9 + ((uint)_evt->v10 << 8)) << 8)) << 8); + case EVENT_Compare://_evt->_e_type == 14 cmp in Global.evt event 6 + pValue = _evt->v7 + ((_evt->v8 + ((_evt->v9 + ((uint)_evt->v10 << 8)) << 8)) << 8); if ( player_choose == 5 ) { v130 = 0; - v59 = pParty->pPlayers; + pPlayer = pParty->pPlayers; while ( 1 ) { - LOBYTE(v60) = v59->CompareVariable((enum VariableType)(_evt->v5 + ((uint)_evt->v6 << 8)), v58); + v60 = pPlayer->CompareVariable((enum VariableType)(_evt->v5 + ((uint)_evt->v6 << 8)), pValue); if ( v60 ) break; ++v130; - ++v59; - if ( (signed int)v59 >= (signed int)pParty->pHirelings ) + ++pPlayer; + if ( (signed int)pPlayer >= (signed int)pParty->pHirelings ) { ++curr_seq_num; v4 = v124; @@ -876,9 +872,7 @@ LABEL_138: //v123 = v6; LABEL_139: - LOBYTE(v62) = ((Player *)v6)->CompareVariable( - (enum VariableType)(_evt->v5 + ((uint)_evt->v6 << 8)), - v58); + v62 = ((Player *)v6)->CompareVariable((enum VariableType)(_evt->v5 + ((uint)_evt->v6 << 8)), pValue); LABEL_140: if ( v62 ) goto LABEL_129; @@ -889,10 +883,7 @@ //v7 = ""; break; case EVENT_IsActorAlive: - v62 = IsActorAlive( - _evt->v5, - _evt->v6 + ((_evt->v7 + ((_evt->v8 + ((uint)_evt->v9 << 8)) << 8)) << 8), - _evt->v10); + v62 = IsActorAlive(_evt->v5, _evt->v6 + ((_evt->v7 + ((_evt->v8 + ((uint)_evt->v9 << 8)) << 8)) << 8), _evt->v10); goto LABEL_140; case EVENT_Substract: v63 = (void *)(_evt->v7 + ((_evt->v8 + ((_evt->v9 + ((uint)_evt->v10 << 8)) << 8)) << 8)); @@ -1030,9 +1021,7 @@ v130 = 4; do { - v76->SubtractVariable( - (enum VariableType)(_evt->v5 + ((uint)_evt->v6 << 8)), - v63); + v76->SubtractVariable((enum VariableType)(_evt->v5 + ((uint)_evt->v6 << 8)), v63); ++v76; } while ( (signed int)v76 < (signed int)pParty->pHirelings ); @@ -1082,9 +1071,7 @@ v130 = 4; do { - v79->SetVariable( - (enum VariableType)(_evt->v5 + ((uint)_evt->v6 << 8)), - v77); + v79->SetVariable((enum VariableType)(_evt->v5 + ((uint)_evt->v6 << 8)), v77); ++v79; } while ( (signed int)v79 < (signed int)pParty->pHirelings ); @@ -1108,9 +1095,7 @@ if ( player_choose == 6 ) goto LABEL_208; LABEL_211: - ((Player *)v6)->AddVariable( - (enum VariableType)(_evt->v5 + ((uint)_evt->v6 << 8)), - v80); + ((Player *)v6)->AddVariable((enum VariableType)(_evt->v5 + ((uint)_evt->v6 << 8)), v80); goto LABEL_212; } if ( uActiveCharacter ) @@ -1131,9 +1116,7 @@ v130 = 4; do { - v82->AddVariable( - (enum VariableType)(_evt->v5 + ((uint)_evt->v6 << 8)), - v80); + v82->AddVariable((enum VariableType)(_evt->v5 + ((uint)_evt->v6 << 8)), v80); ++v82; } while ( (signed int)v82 < (signed int)pParty->pHirelings ); @@ -1150,11 +1133,7 @@ case EVENT_InputString: if ( !start_event_seq_number ) { - strcpy( - GameUI_StatusBar_TimedString, - &pLevelStr[pLevelStrOffsets[_evt->v5 - + ((_evt->v6 - + ((_evt->v7 + ((uint)_evt->v8 << 8)) << 8)) << 8)]]); + strcpy(GameUI_StatusBar_TimedString, &pLevelStr[pLevelStrOffsets[_evt->v5 + ((_evt->v6 + ((_evt->v7 + ((uint)_evt->v8 << 8)) << 8)) << 8)]]); v105 = curr_seq_num; v121 = 26; LABEL_295: @@ -1166,10 +1145,7 @@ 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)]]) + 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; @@ -1301,9 +1277,9 @@ break; case EVENT_StatusText: v90 = _evt->v5 + ((_evt->v6 + ((_evt->v7 + ((uint)_evt->v8 << 8)) << 8)) << 8); - if ( _5C3420_pDecoration ) + if ( GlobalEventInfo ) { - if ( _5C3420_pDecoration == (LevelDecoration *)1 ) + if ( GlobalEventInfo == 1 ) { ptr_F8B1E8 = pNPCTopics[v90-1].pText;//(&dword_721664)[8 * v90]; ++curr_seq_num; @@ -1313,7 +1289,7 @@ //v7 = ""; break; } - if ( a3 == 1 ) + if ( canShowMessages == 1 ) { v91 = pNPCTopics[v90-1].pText;//(&dword_721664)[8 * v90]; //LABEL_248: @@ -1328,7 +1304,7 @@ } else { - if ( a3 == 1 ) + if ( canShowMessages == 1 ) { v91 = &pLevelStr[pLevelStrOffsets[v90]]; ShowStatusBarString(v91, 2u); @@ -1348,7 +1324,7 @@ break; case EVENT_ShowMessage: v92 = _evt->v5 + ((_evt->v6 + ((_evt->v7 + ((uint)_evt->v8 << 8)) << 8)) << 8); - if ( _5C3420_pDecoration ) + if ( GlobalEventInfo ) { v93 = (char *)pNPCTopics[v92-1].pText;//(&dword_721664)[8 * v92]; byte_5B0938[0] = 0; @@ -1501,7 +1477,7 @@ } else { - pGameLoadingUI_ProgressBar->uType = (GUIProgressBar::Type)((_5C3420_pDecoration == 0) + 1); + pGameLoadingUI_ProgressBar->uType = (GUIProgressBar::Type)((GlobalEventInfo == 0) + 1); sub_44987B(v99, 0); v133 = 1; if ( pCurrentScreen == SCREEN_HOUSE ) diff -r 8822405efad2 -r 0dbf780e247f Indoor.cpp --- a/Indoor.cpp Mon Feb 25 11:10:57 2013 +0600 +++ b/Indoor.cpp Mon Feb 25 17:27:27 2013 +0600 @@ -41,7 +41,7 @@ LevelDecoration pLevelDecorations[3000]; size_t uNumLevelDecorations; -LevelDecoration *_5C3420_pDecoration; +int GlobalEventInfo; LEVEL_TYPE uCurrentlyLoadedLevelType = LEVEL_null; diff -r 8822405efad2 -r 0dbf780e247f Indoor.h --- a/Indoor.h Mon Feb 25 11:10:57 2013 +0600 +++ b/Indoor.h Mon Feb 25 17:27:27 2013 +0600 @@ -42,7 +42,7 @@ #pragma pack(pop) extern LevelDecoration pLevelDecorations[3000]; extern size_t uNumLevelDecorations; -extern LevelDecoration *_5C3420_pDecoration; +extern int GlobalEventInfo; diff -r 8822405efad2 -r 0dbf780e247f Player.cpp --- a/Player.cpp Mon Feb 25 11:10:57 2013 +0600 +++ b/Player.cpp Mon Feb 25 17:27:27 2013 +0600 @@ -7701,7 +7701,7 @@ //----- (00449BB4) -------------------------------------------------------- -char Player::CompareVariable(enum VariableType var, signed int a1) +char Player::CompareVariable(enum VariableType VarNum, signed int pValue) { Player *v3; // esi@1 signed int v4; // edi@1 @@ -7731,51 +7731,50 @@ int v28; // ebx@161 int v29; // eax@161 + v6 = 0; v3 = this; v4 = -1; - if ( var > VAR_AutoNotes ) - { - switch ( var ) + if ( VarNum > VAR_AutoNotes ) + { + switch ( VarNum ) { case VAR_Invisible: if ( SHIDWORD(pParty->pPartyBuffs[11].uExpireTime) >= 0 && (SHIDWORD(pParty->pPartyBuffs[11].uExpireTime) > 0 || LODWORD(pParty->pPartyBuffs[11].uExpireTime) > 0) ) - goto _return_true; - goto _cmp_against_arg; + return true; + return v4 >= pValue; case VAR_NumDeaths: v4 = pParty->uNumDeaths; - goto _cmp_against_arg; + return v4 >= pValue; case VAR_NumBounties: v4 = pParty->uNumBountiesCollected; - goto _cmp_against_arg; + return v4 >= pValue; case VAR_PrisonTerms: v4 = pParty->uNumPrisonTerms; - goto _cmp_against_arg; + return v4 >= pValue; case VAR_ArenaWinsPage: v4 = (unsigned __int8)pParty->uNumArenaPageWins; - goto _cmp_against_arg; + return v4 >= pValue; case VAR_ArenaWinsSquire: v4 = (unsigned __int8)pParty->uNumArenaSquireWins; - goto _cmp_against_arg; + return v4 >= pValue; case VAR_ArenaWinsKnight: v4 = (unsigned __int8)pParty->uNumArenaKnightWins; - goto _cmp_against_arg; + return v4 >= pValue; case VAR_ArenaWinsLord: v4 = (unsigned __int8)pParty->uNumArenaLordWins; - goto _cmp_against_arg; + return v4 >= pValue; case VAR_ReputationInCurrentLocation: v19 = &pOutdoor->ddm; if ( uCurrentlyLoadedLevelType != LEVEL_Outdoor ) v19 = &pIndoor->dlv; - v20 = v19->uReputation >= a1; - goto _return; + v6 = v19->uReputation >= pValue; + return v6; case VAR_History_28|VAR_Sex: v21 = &pOutdoor->ddm; if ( uCurrentlyLoadedLevelType != LEVEL_Outdoor ) v21 = &pIndoor->dlv; - v20 = v21->field_C_alert == a1; -_return: - LOBYTE(v6) = v20; + v6 = v21->field_C_alert == pValue; return v6; case VAR_MonthEquals2|VAR_Sex: case VAR_MonthEquals2|VAR_Class: @@ -7787,21 +7786,21 @@ case VAR_Counter6: case VAR_Counter7: case VAR_Counter8: - v22 = *(int *)&stru_AA1058[3].pSounds[8 * var + 44304]; - if ( v22 | *(int *)&stru_AA1058[3].pSounds[8 * var + 44300] - && (signed __int64)(__PAIR__(v22, *(int *)&stru_AA1058[3].pSounds[8 * var + 44300]) - + (signed __int64)((double)(460800 * a1) * 0.033333335)) <= (signed __int64)pParty->uTimePlayed ) - goto _return_true; - goto _return_false; + v22 = *(int *)&stru_AA1058[3].pSounds[8 * VarNum + 44304]; + if ( v22 | *(int *)&stru_AA1058[3].pSounds[8 * VarNum + 44300] + && (signed __int64)(__PAIR__(v22, *(int *)&stru_AA1058[3].pSounds[8 * VarNum + 44300]) + + (signed __int64)((double)(460800 * pValue) * 0.033333335)) <= (signed __int64)pParty->uTimePlayed ) + return true; + return false; case VAR_NumSkillPoints: v4 = this->uSkillPoints; - goto _cmp_against_arg; + return v4 >= pValue; case VAR_CircusPrises: v4 = 0; v23 = pParty->pPlayers;//[0].pInventoryItems; do { - v24 = v23->pInventoryItems; + v24 = v23->pInventoryItems; v25 = 138; do { @@ -7824,32 +7823,35 @@ ++v23; } while ( v23 <= &pParty->pPlayers[3] ); - goto _cmp_against_arg; + return v4 >= pValue; case VAR_MonthEquals2: - v17 = pParty->uCurrentMonth == a1; - goto _return2; + v6 = pParty->uCurrentMonth == pValue; + return v6; case VAR_IsFlying: if ( pParty->bFlying && SHIDWORD(pParty->pPartyBuffs[7].uExpireTime) >= 0 && (SHIDWORD(pParty->pPartyBuffs[7].uExpireTime) > 0 || LODWORD(pParty->pPartyBuffs[7].uExpireTime) > 0) ) - goto _return_true; - goto _return_false; + return true; + return false; case VAR_HiredNPCHasSpeciality: - LOBYTE(v6) = CheckHiredNPCSpeciality(a1); + LOBYTE(v6) = CheckHiredNPCSpeciality(pValue); return v6; case VAR_NPCs2: - return pNPCStats->pNewNPCData[a1].Hired(); + return pNPCStats->pNewNPCData[pValue].Hired(); case VAR_MonthEquals|VAR_CurrentSP: v13 = 0x80u >> ((signed __int16)a1 - 1) % 8; v14 = this->field_1A50[((signed __int16)a1 - 1) >> 3]; - goto LABEL_108; + if ( !((unsigned __int8)v13 & v14) ) + return v4 >= pValue; + v4 = pValue; + return v4 >= pValue; case VAR_ItemEquipped: v26 = (ITEM_EQUIP_TYPE)0; v27 = (char *)&this->pEquipment; break; case VAR_GoldInBank: v4 = pParty->uNumGoldInBank; - goto _cmp_against_arg; + return v4 >= pValue; case VAR_ThieverySkill|0x80: v28 = GetActualMight(); v29 = v3->GetBaseStrength(); @@ -7882,70 +7884,65 @@ v9 = v28 - v29 < 0; LABEL_169: if ( v9 ^ v10 ) - goto _cmp_against_arg; - goto _return_true; + return v4 >= pValue; + return true; default: - goto _cmp_against_arg; + return v4 >= pValue; } while ( !v3->HasItemEquipped(v26) - || *(int *)&v3->spellbook.pDarkSpellbook.bIsSpellAvailable[36 * *(int *)v27 + 5] != a1 ) + || *(int *)&v3->spellbook.pDarkSpellbook.bIsSpellAvailable[36 * *(int *)v27 + 5] != pValue ) { v26 = (ITEM_EQUIP_TYPE)((int)v26 + 1); v27 += 4; if ( (signed int)v26 >= 16 ) - { -_return_false: - LOBYTE(v6) = 0; - return v6; - } - } - goto _return_true; - } - if ( var == VAR_AutoNotes ) + return false; + } + return true; + } + if ( VarNum == VAR_AutoNotes ) { v13 = 0x80u >> ((signed __int16)(a1 - 1) - 1) % 8; v14 = pParty->_autonote_bits[((signed __int16)(a1 - 1) - 1) >> 3]; -LABEL_108: if ( !((unsigned __int8)v13 & v14) ) - goto _cmp_against_arg; - goto LABEL_109; - } - if ( var <= VAR_BaseLuck ) - { - if ( var != VAR_BaseLuck ) - { - switch ( var ) + return v4 >= pValue; + v4 = pValue; + return v4 >= pValue; + } + if ( VarNum <= VAR_BaseLuck ) + { + if ( VarNum != VAR_BaseLuck ) + { + switch ( VarNum ) { case VAR_Hour: - if ( (signed __int64)((double)(signed __int64)pParty->uTimePlayed * 0.234375) / 60 / 60 % 24 == a1 ) - goto _return_true; - goto _return_false; + if ( (signed __int64)((double)(signed __int64)pParty->uTimePlayed * 0.234375) / 60 / 60 % 24 == pValue ) + return true; + return false; case VAR_DayOfYear: - v5 = (unsigned int)((signed __int64)((double)(signed __int64)pParty->uTimePlayed * 0.234375) / 60 / 60) / 0x18 - % 0x150 - + 1; - goto LABEL_9; + v5 = (unsigned int)((signed __int64)((double)(signed __int64)pParty->uTimePlayed * 0.234375) / 60 / 60) / 0x18 % 0x150 + 1; + v6 = v5 == pValue; + return v6; case VAR_DayOfWeek: - v5 = (unsigned int)((signed __int64)((double)(signed __int64)pParty->uTimePlayed * 0.234375) / 60 / 60) / 0x18 - % 7; -LABEL_9: - LOBYTE(v6) = v5 == a1; + v5 = (unsigned int)((signed __int64)((double)(signed __int64)pParty->uTimePlayed * 0.234375) / 60 / 60) / 0x18 % 7; + v6 = v5 == pValue; return v6; case VAR_Sex: - v7 = (CHARACTER_RACE)this->uSex; - goto _cmp_against_arg2; + if ( pValue == (CHARACTER_RACE)this->uSex ) + return true; + return v4 >= pValue; case VAR_Class: v7 = (CHARACTER_RACE)this->classType; - goto _cmp_against_arg2; + if ( pValue == v7 ) + return true; + return v4 >= pValue; case VAR_Race: v7 = GetRace(); -_cmp_against_arg2: - if ( a1 == v7 ) - goto _return_true; - goto _cmp_against_arg; + if ( pValue == v7 ) + return true; + return v4 >= pValue; case VAR_CurrentHP: v4 = this->sHealth; - goto _cmp_against_arg; + return v4 >= pValue; case VAR_MaxHP: v8 = GetMaxHealth(); v10 = __OFSUB__(v3->sHealth, v8); @@ -7953,7 +7950,7 @@ goto LABEL_169; case VAR_CurrentSP: v4 = this->sMana; - goto _cmp_against_arg; + return v4 >= pValue; case VAR_MaxSP: v11 = GetMaxMana(); v10 = __OFSUB__(v3->sMana, v11); @@ -7964,135 +7961,136 @@ goto _j_cmp_against_arg; case VAR_ACModifier: v4 = this->sACModifier; - goto _cmp_against_arg; + return v4 >= pValue; case VAR_BaseLevel: v4 = this->uLevel; - goto _cmp_against_arg; + return v4 >= pValue; case VAR_LevelModifier: v4 = this->sLevelModifier; - goto _cmp_against_arg; + return v4 >= pValue; case VAR_Age: v12 = GetActualAge(); goto _j_cmp_against_arg; case VAR_Award: v13 = 0x80u >> ((signed __int16)a1 - 1) % 8; v14 = this->field_152[((signed __int16)a1 - 1) >> 3]; - goto LABEL_108; + if ( !((unsigned __int8)v13 & v14) ) + return v4 >= pValue; + v4 = pValue; + return v4 >= pValue; case VAR_Experience: v4 = LODWORD(this->uExperience); - goto _cmp_against_arg; + return v4 >= pValue; case VAR_QBits_QuestsDone: - v13 = 0x80u >> ((signed __int16)a1 - 1) % 8; - v14 = pParty->_award_bits[((signed __int16)a1 - 1) >> 3]; - goto LABEL_108; + v13 = 0x80u >> (pValue - 1) % 8; + v14 = pParty->_award_bits[(pValue - 1) >> 3]; + if ( !((unsigned __int8)v13 & v14) ) + return false; + return true; case VAR_PlayerItemInHands: v15 = 0; v16 = v3->pInventoryItems; break; case VAR_FixedGold: v4 = pParty->uNumGold; - goto _cmp_against_arg; + return v4 >= pValue; case VAR_MightBonus: v4 = this->uMightBonus; - goto _cmp_against_arg; + return v4 >= pValue; case VAR_IntellectBonus: v4 = this->uIntelligenceBonus; - goto _cmp_against_arg; + return v4 >= pValue; case VAR_PersonalityBonus: v4 = this->uWillpowerBonus; - goto _cmp_against_arg; + return v4 >= pValue; case VAR_EnduranceBonus: v4 = this->uEnduranceBonus; - goto _cmp_against_arg; + return v4 >= pValue; case VAR_SpeedBonus: v4 = this->uSpeedBonus; - goto _cmp_against_arg; + return v4 >= pValue; case VAR_AccuracyBonus: v4 = this->uAccuracyBonus; - goto _cmp_against_arg; + return v4 >= pValue; case VAR_LuckBonus: v4 = this->uLuckBonus; - goto _cmp_against_arg; + return v4 >= pValue; case VAR_BaseMight: v4 = this->uMight; - goto _cmp_against_arg; + return v4 >= pValue; case VAR_BaseIntellect: v4 = this->uIntelligence; - goto _cmp_against_arg; + return v4 >= pValue; case VAR_BasePersonality: v4 = this->uWillpower; - goto _cmp_against_arg; + return v4 >= pValue; case VAR_BaseEndurance: v4 = this->uEndurance; - goto _cmp_against_arg; + return v4 >= pValue; case VAR_BaseSpeed: v4 = this->uSpeed; - goto _cmp_against_arg; + return v4 >= pValue; case VAR_BaseAccuracy: v4 = this->uAccuracy; - goto _cmp_against_arg; + return v4 >= pValue; case VAR_FixedFood: v4 = pParty->uNumFoodRations; - goto _cmp_against_arg; + return v4 >= pValue; default: - goto _cmp_against_arg; - } - while ( v16->uItemID != a1 ) + return v4 >= pValue; + } + while ( v16->uItemID != pValue ) { ++v15; ++v16; if ( v15 >= 138 ) { - v17 = pParty->pPickedItem.uItemID == a1; -_return2: - LOBYTE(v6) = v17; + v6 = pParty->pPickedItem.uItemID == pValue; return v6; } } -_return_true: - LOBYTE(v6) = 1; - return v6; + return true; } v4 = this->uLuck; - goto _cmp_against_arg; - } - if ( var <= VAR_MagicResistance ) - { - if ( var == VAR_MagicResistance ) + return v4 >= pValue; + } + if ( VarNum <= VAR_MagicResistance ) + { + if ( VarNum == VAR_MagicResistance ) { v4 = this->sResMagicBase; } else { - switch ( var ) + switch ( VarNum ) { case VAR_FireResistance: v4 = this->sResFireBase; - goto _cmp_against_arg; + return v4 >= pValue; case VAR_AirResistance: v4 = this->sResAirBase; - goto _cmp_against_arg; + return v4 >= pValue; case VAR_WaterResistance: v4 = this->sResWaterBase; - goto _cmp_against_arg; + return v4 >= pValue; case VAR_EarthResistance: v4 = this->sResEarthBase; - goto _cmp_against_arg; + return v4 >= pValue; case VAR_SpiritResistance: v4 = this->sResSpiritBase; - goto _cmp_against_arg; + return v4 >= pValue; case VAR_MindResistance: v4 = this->sResMindBase; - goto _cmp_against_arg; + return v4 >= pValue; case VAR_BodyResistance: v4 = this->sResBodyBase; - goto _cmp_against_arg; + return v4 >= pValue; case VAR_LightResistance: v4 = this->sResLightBase; - goto _cmp_against_arg; + return v4 >= pValue; case VAR_DarkResistance: v4 = this->sResDarkBase; - goto _cmp_against_arg; + return v4 >= pValue; case VAR_ActualMight: v12 = GetActualMight(); goto _j_cmp_against_arg; @@ -8117,18 +8115,18 @@ v4 = v12; break; default: - goto _cmp_against_arg; - } - } - goto _cmp_against_arg; - } - if ( var <= VAR_DisarmTrapSkill ) - { - if ( var != VAR_DisarmTrapSkill ) - { - if ( var <= VAR_MindResistanceBonus ) - { - switch ( var ) + return v4 >= pValue; + } + } + return v4 >= pValue; + } + if ( VarNum <= VAR_DisarmTrapSkill ) + { + if ( VarNum != VAR_DisarmTrapSkill ) + { + if ( VarNum <= VAR_MindResistanceBonus ) + { + switch ( VarNum ) { case VAR_MindResistanceBonus: v4 = this->sResMindBonus; @@ -8149,63 +8147,60 @@ v4 = this->sResSpiritBonus; break; } - goto _cmp_against_arg; - } - if ( var == VAR_BodyResistanceBonus ) + return v4 >= pValue; + } + if ( VarNum == VAR_BodyResistanceBonus ) { v4 = this->sResBodyBonus; - goto _cmp_against_arg; - } - if ( var == VAR_LightResistanceBonus ) + return v4 >= pValue; + } + if ( VarNum == VAR_LightResistanceBonus ) { v4 = this->sResLightBonus; - goto _cmp_against_arg; - } - if ( var == VAR_DarkResistanceBonus ) + return v4 >= pValue; + } + if ( VarNum == VAR_DarkResistanceBonus ) { v4 = this->sResDarkBonus; - goto _cmp_against_arg; - } - if ( var == VAR_MagicResistanceBonus ) + return v4 >= pValue; + } + if ( VarNum == VAR_MagicResistanceBonus ) { v4 = this->sResMagicBonus; - goto _cmp_against_arg; - } - if ( var <= VAR_MagicResistanceBonus || var > VAR_DiplomacySkill ) - goto _cmp_against_arg; + return v4 >= pValue; + } + if ( VarNum <= VAR_MagicResistanceBonus || VarNum > VAR_DiplomacySkill ) + return v4 >= pValue; } LABEL_90: - v18 = *((short *)&this->pConditions[16] + var); - if ( a1 <= 63 ) + v18 = *((short *)&this->pConditions[16] + VarNum); + if ( pValue <= 63 ) v4 = v18 & 0x3F; else - v4 = a1 & v18; - goto _cmp_against_arg; - } - if ( var == 104 ) + v4 = pValue & v18; + return v4 >= pValue; + } + if ( VarNum == 104 ) goto LABEL_90; - if ( (signed int)var <= 104 ) - goto _cmp_against_arg; - if ( (signed int)var > 0x79 ) - { - if ( var != 122 ) - { - if ( (signed int)var > 122 && var <= VAR_ActiveSpells ) - v4 = (unsigned __int8)byte_5E4C15[var]; - goto _cmp_against_arg; + if ( (signed int)VarNum <= 104 ) + return v4 >= pValue; + if ( (signed int)VarNum > 0x79 ) + { + if ( VarNum != 122 ) + { + if ( (signed int)VarNum > 122 && VarNum <= VAR_ActiveSpells ) + v4 = (unsigned __int8)byte_5E4C15[VarNum]; + return v4 >= pValue; } v4 = GetMajorConditionIdx(); if ( v4 != 18 ) { -_cmp_against_arg: - LOBYTE(v6) = v4 >= a1; - return v6; - } -LABEL_109: - v4 = a1; - goto _cmp_against_arg; - } - return *((int *)this + 2 * var - 210); + return v4 >= pValue; + } + v4 = pValue; + return v4 >= pValue; + } + return *((int *)this + 2 * VarNum - 210); } diff -r 8822405efad2 -r 0dbf780e247f Player.h --- a/Player.h Mon Feb 25 11:10:57 2013 +0600 +++ b/Player.h Mon Feb 25 17:27:27 2013 +0600 @@ -444,7 +444,7 @@ void SetVariable(enum VariableType var, signed int a3); void AddVariable(enum VariableType var, signed int val); void SubtractVariable(enum VariableType var, void *a3); - char CompareVariable(enum VariableType var, signed int a1); + char CompareVariable(enum VariableType VarNum, signed int pValue); void UseItem_DrinkPotion_etc(signed int a2, int a3); bool AddItem(struct ItemGen *pItem); int GetBaseStrength(); diff -r 8822405efad2 -r 0dbf780e247f mm7_1.cpp --- a/mm7_1.cpp Mon Feb 25 11:10:57 2013 +0600 +++ b/mm7_1.cpp Mon Feb 25 17:27:27 2013 +0600 @@ -5274,9 +5274,9 @@ if ( pLevelDecorations[(signed int)(unsigned __int16)v0 >> 3].IsInteractive() ) { v15 = stru_5E4C90._decor_events[v13->_idx_in_stru123 - 75] + 380; - _5C3420_pDecoration = &pLevelDecorations[(signed int)(unsigned __int16)v0 >> 3]; + GlobalEventInfo = (int)&pLevelDecorations[(signed int)(unsigned __int16)v0 >> 3]; EventProcessor(v15, 0, 1); - _5C3420_pDecoration = 0; + GlobalEventInfo = 0; } return; } diff -r 8822405efad2 -r 0dbf780e247f mm7_2.cpp --- a/mm7_2.cpp Mon Feb 25 11:10:57 2013 +0600 +++ b/mm7_2.cpp Mon Feb 25 17:27:27 2013 +0600 @@ -4249,7 +4249,7 @@ pMessageQueue_50CBD0->uNumMessages = pMessageQueue_50CBD0->pMessages[0].field_8 != 0; pKeyActionMap->_459ED1(3); pKeyActionMap->ResetKeys(); - _5C3420_pDecoration = 0; + GlobalEventInfo = 0; ptr_F8B1E8 = 0; if ( pDialogueNPCCount ) { @@ -15002,9 +15002,9 @@ v10 = v8->_idx_in_stru123; v24 = 1; v11 = stru_5E4C90._decor_events[v10 - 75] + 380; - _5C3420_pDecoration = v8; + GlobalEventInfo = (int)v8; EventProcessor(v11, 0, 1); - _5C3420_pDecoration = 0; + GlobalEventInfo = 0; } break; diff -r 8822405efad2 -r 0dbf780e247f mm7_3.cpp --- a/mm7_3.cpp Mon Feb 25 11:10:57 2013 +0600 +++ b/mm7_3.cpp Mon Feb 25 17:27:27 2013 +0600 @@ -14860,7 +14860,7 @@ pEventTimer->Pause(); dword_5C3418 = v4; dword_5C341C = v3; - _591094_decoration = _5C3420_pDecoration; + _591094_decoration = (LevelDecoration *)GlobalEventInfo; pGUIWindow2 = GUIWindow::Create(0, 0, 640u, 480u, (enum WindowType)19, a4, 0); pGUIWindow2->CreateButton(61u, 424u, 0x1Fu, 0x28u, 2, 94, 0x6Eu, 1u, 0x31u, "", 0); pGUIWindow2->CreateButton(177u, 424u, 0x1Fu, 0x28u, 2, 94, 0x6Eu, 2u, 0x32u, "", 0); @@ -14874,11 +14874,11 @@ { pGUIWindow2->Release(); pGUIWindow2 = 0; - _5C3420_pDecoration = _591094_decoration; + GlobalEventInfo = (int)_591094_decoration; start_event_seq_number = dword_5C341C; EventProcessor(dword_5C3418, 0, 1); start_event_seq_number = 0; - _5C3420_pDecoration = 0; + GlobalEventInfo = 0; pEventTimer->Resume(); } diff -r 8822405efad2 -r 0dbf780e247f mm7_4.cpp --- a/mm7_4.cpp Mon Feb 25 11:10:57 2013 +0600 +++ b/mm7_4.cpp Mon Feb 25 17:27:27 2013 +0600 @@ -9462,9 +9462,9 @@ else { ptr_F8B1E8 = 0; - _5C3420_pDecoration = (LevelDecoration *)1; + GlobalEventInfo = 1; EventProcessor(pEventNumber, 0, 1); - _5C3420_pDecoration = 0; + GlobalEventInfo = 0; } } } @@ -12227,10 +12227,10 @@ sub_4BBCDD(); break; default: - _5C3420_pDecoration = (LevelDecoration *)1; + GlobalEventInfo = 1; ptr_F8B1E8 = 0; EventProcessor(v4, 0, 1); - _5C3420_pDecoration = 0; + GlobalEventInfo = 0; break; } } diff -r 8822405efad2 -r 0dbf780e247f mm7_6.cpp --- a/mm7_6.cpp Mon Feb 25 11:10:57 2013 +0600 +++ b/mm7_6.cpp Mon Feb 25 17:27:27 2013 +0600 @@ -6506,9 +6506,9 @@ } if ( v447->IsInteractive() ) { - _5C3420_pDecoration = v447; + GlobalEventInfo = (int)v447; EventProcessor(stru_5E4C90._decor_events[v447->_idx_in_stru123 - 75] + 380, 0, 1); - _5C3420_pDecoration = (LevelDecoration *)v1; + GlobalEventInfo = v1; } } } diff -r 8822405efad2 -r 0dbf780e247f mm7_data.cpp --- a/mm7_data.cpp Mon Feb 25 11:10:57 2013 +0600 +++ b/mm7_data.cpp Mon Feb 25 17:27:27 2013 +0600 @@ -2008,7 +2008,7 @@ _UNKNOWN unk_597F10; // weak int start_event_seq_number; // weak char byte_5B0938[2000]; -int dword_5B5920; // weak +int EvtTargetObj; // 0x5B5920 int _unused_5B5924_is_travel_ui_drawn = false; // 005B5924 int _5B65A8_npcdata_uflags_or_other; // weak int _5B65AC_npcdata_fame_or_other; // weak diff -r 8822405efad2 -r 0dbf780e247f mm7_data.h --- a/mm7_data.h Mon Feb 25 11:10:57 2013 +0600 +++ b/mm7_data.h Mon Feb 25 17:27:27 2013 +0600 @@ -1343,7 +1343,7 @@ extern _UNKNOWN unk_597F10; // weak extern int start_event_seq_number; // weak extern char byte_5B0938[2000]; -extern int dword_5B5920; // weak +extern int EvtTargetObj; // weak extern int _unused_5B5924_is_travel_ui_drawn; // 005B5924 extern int _5B65A8_npcdata_uflags_or_other; // weak extern int _5B65AC_npcdata_fame_or_other; // weak @@ -2341,7 +2341,7 @@ void __cdecl ArenaFight(); struct Texture *__cdecl sub_4BC8D5(); struct GUIButton *__cdecl UI_CreateEndConversationButton(); -void __fastcall sub_4BCACC_bounties(signed int a1); +void __fastcall DrawLearnSkillDialog(signed int uMessageParam); signed int __cdecl sub_4BD8B5(); bool __fastcall sub_4BDAAF(ItemGen *a1, int _2da_idx); void __cdecl sub_4BDB56_buy_skill____();