Mercurial > mm7
changeset 1808:4002c0fe5efc
Слияние
author | Ritor1 |
---|---|
date | Mon, 07 Oct 2013 09:31:32 +0600 |
parents | 04b92ce868e3 (current diff) 3a41be960164 (diff) |
children | 8f20f7e1091d |
files | mm7_4.cpp |
diffstat | 14 files changed, 895 insertions(+), 777 deletions(-) [+] |
line wrap: on
line diff
--- a/CastSpellInfo.cpp Mon Oct 07 09:31:18 2013 +0600 +++ b/CastSpellInfo.cpp Mon Oct 07 09:31:32 2013 +0600 @@ -3833,7 +3833,7 @@ } v608 = pCastSpell->uPlayerID_2; if ( v608 != 4 && v608 != 5 - || (v609 = (signed int)*(&pFontCChar + v608 + (unsigned __int8)pParty->field_709), v609 <= 0) + || (v609 = (signed int)*(&pFontCChar + v608 + pParty->hirelingScrollPosition), v609 <= 0) || v609 >= 3 ) { ShowStatusBarString(pGlobalTXT_LocalizationStrings[428], 2); // Spell failed
--- a/NPC.cpp Mon Oct 07 09:31:18 2013 +0600 +++ b/NPC.cpp Mon Oct 07 09:31:32 2013 +0600 @@ -1520,7 +1520,7 @@ } //LOBYTE(v2->uFlags) |= 0x80u; pCurrentNPCInfo->uFlags |= 128; - pParty->field_709 = 0; + pParty->hirelingScrollPosition = 0; pParty->CountHirelings(); if ( pParty->pHirelings[0].pName ) { @@ -1535,7 +1535,7 @@ v22 = pParty->pHireling1Name; } strcpy(v22, v24); - pParty->field_709 = 0; + pParty->hirelingScrollPosition = 0; pParty->CountHirelings(); PrepareHouse((HOUSE_ID)(int)window_SpeakInHouse->ptr_1C); dialog_menu_id = HOUSE_DIALOGUE_MAIN;
--- a/Party.cpp Mon Oct 07 09:31:18 2013 +0600 +++ b/Party.cpp Mon Oct 07 09:31:32 2013 +0600 @@ -355,7 +355,7 @@ pHireling1Name[0] = 0; pHireling2Name[0] = 0; - pParty->field_709 = 0; + pParty->hirelingScrollPosition = 0; memset(pHirelings, 0, 2 * sizeof(*pHirelings)); strcpy(this->pPlayers[0].pName, pGlobalTXT_LocalizationStrings[509]); //Zoltan @@ -1042,7 +1042,7 @@ Assert(sizeof(NPCData) == 0x4C); memset(hireling, 0, sizeof(*hireling)); - pParty->field_709 = 0; + pParty->hirelingScrollPosition = 0; pParty->CountHirelings(); viewparams->bRedrawGameUI = true; }
--- a/Party.h Mon Oct 07 09:31:18 2013 +0600 +++ b/Party.h Mon Oct 07 09:31:32 2013 +0600 @@ -242,7 +242,7 @@ int uFallStartY; unsigned int bFlying; char field_708; - char field_709; + unsigned __int8 hirelingScrollPosition; char field_70A; char field_70B; unsigned int uCurrentYear;
--- a/Player.cpp Mon Oct 07 09:31:18 2013 +0600 +++ b/Player.cpp Mon Oct 07 09:31:32 2013 +0600 @@ -5809,7 +5809,7 @@ _449B7E_toggle_bit((unsigned char *)field_1A50, var_value, 1u); return; case VAR_NPCs2: - pParty->field_709 = 0; + pParty->hirelingScrollPosition = 0; LOBYTE(pNPCStats->pNewNPCData[var_value].uFlags) |= 0x80u; pParty->CountHirelings(); viewparams->bRedrawGameUI = true; @@ -6017,563 +6017,573 @@ //----- (0044AFFB) -------------------------------------------------------- void Player::AddVariable(enum VariableType var_type, signed int val) { - char v3; // bl@1 - Player *v4; // esi@1 signed int uPlayerIdx; // edi@1 int v6; // eax@15 unsigned int v7; // esi@18 - int *v8; // ebx@21 - int v9; // eax@22 - signed int v10; // eax@24 - int v11; // eax@27 - __int16 *v12; // esi@28 - Player *v13; // ecx@34 - Player *v14; // ecx@36 - char *v15; // ecx@37 - unsigned __int8 v16; // cf@38 - Player *v17; // ecx@42 - __int16 *v18; // esi@53 - __int16 *v19; // esi@62 - char *v20; // esi@107 - __int16 v21; // dx@107 - int v22; // ecx@107 - Player *v23; // ecx@132 - int v24; // eax@132 - int v25; // eax@150 - char v26; // zf@151 DDM_DLV_Header *v27; // eax@153 - signed int v28; // eax@176 - int v29; // [sp-8h] [bp-40h]@84 - // signed int v30; // [sp-4h] [bp-3Ch]@4 - int v31; // [sp-4h] [bp-3Ch]@84 ItemGen item; // [sp+Ch] [bp-2Ch]@45 - unsigned int v33; // [sp+30h] [bp-8h]@34 - char v34; // [sp+37h] [bp-1h]@1 - - auto Dst = this; - v3 = 0; - v34 = 0; - v4 = Dst; + uPlayerIdx = 0; - if ( Dst == pPlayers[2] ) + if ( this == pPlayers[2] ) uPlayerIdx = 1; - else if ( Dst == pPlayers[3] ) + else if ( this == pPlayers[3] ) uPlayerIdx = 2; - else if ( Dst == pPlayers[4] ) + else if ( this == pPlayers[4] ) uPlayerIdx = 3; - if ( var_type <= VAR_AutoNotes ) - { - if ( var_type != VAR_AutoNotes ) + if ( var_type >= VAR_Counter1 && var_type <= VAR_Counter10) + { + pParty->PartyTimes.CounterEventValues[var_type - VAR_Counter1] = pParty->uTimePlayed; + return; + } + + if ( var_type >= VAR_UnknownTimeEvent0 && var_type <= VAR_UnknownTimeEvent19 ) + { + pParty->PartyTimes._s_times[var_type - VAR_UnknownTimeEvent0] = pParty->uTimePlayed; + PlayAwardSound(uPlayerIdx); + return; + } + + if ( var_type >= VAR_MapPersistentVariable_0 && var_type <= VAR_MapPersistentVariable_99 ) + { + if ( (unsigned __int8)val + (unsigned __int8)byte_5E4C15[var_type] <= 255 ) + byte_5E4C15[var_type] += val; + else + byte_5E4C15[var_type] = -1; + return; + } + + if ( var_type >= VAR_History_0 && var_type <= VAR_History_28) + { + if (!pParty->PartyTimes.HistoryEventTimes[var_type - VAR_History_0]) { - if ( var_type <= VAR_ActualMight ) + pParty->PartyTimes.HistoryEventTimes[var_type - VAR_History_0] = pParty->uTimePlayed; + if (pStorylineText->StoreLine[var_type - VAR_History_0].pText = 0) + { + bFlashHistoryBook = 1; + PlayAwardSound(uPlayerIdx); + } + } + return; + } + + switch ( var_type ) + { + case VAR_RandomGold: + if ( val == 0 ) + val = 1; + v6 = rand(); + party_finds_gold(v6 % val + 1, 1); + GameUI_DrawFoodAndGold(); + return; + case VAR_RandomFood: + if ( val == 0 ) + val = 1; + v7 = rand() % val + 1; + Party::GiveFood(v7); + sprintf(pTmpBuf.data(), pGlobalTXT_LocalizationStrings[502], v7);// You find %lu food + ShowStatusBarString(pTmpBuf.data(), 2u); + GameUI_DrawFoodAndGold(); + PlayAwardSound(uPlayerIdx); + return; + case VAR_Sex: + this->uSex = (PLAYER_SEX)val; + PlayAwardSound_Anim97(uPlayerIdx); + return; + case VAR_Class: + this->classType = (PLAYER_CLASS_TYPE)val; + PlayAwardSound_Anim97(uPlayerIdx); + return; + case VAR_CurrentHP: + this->sHealth = min(this->sHealth + val, this->GetMaxHealth() ); + PlayAwardSound_Anim97(uPlayerIdx); + return; + case VAR_MaxHP: + this->_health_related = 0; + this->uFullHealthBonus = 0; + this->sHealth = this->GetMaxHealth(); + return; + case VAR_CurrentSP: + this->sMana = min(this->sMana + val, this->GetMaxMana() ); + PlayAwardSound_Anim97(uPlayerIdx); + return; + case VAR_MaxSP: + this->_mana_related = 0; + this->uFullManaBonus = 0; + this->sMana = GetMaxMana(); + return; + case VAR_ACModifier: + this->sACModifier = min(this->sACModifier + val, 255); + PlayAwardSound_Anim97(uPlayerIdx); + return; + case VAR_BaseLevel: + this->uLevel = min(this->uLevel + val, 255); + PlayAwardSound_Anim97(uPlayerIdx); + return; + case VAR_LevelModifier: + this->sLevelModifier = min(this->sLevelModifier + val, 255); + PlayAwardSound_Anim97(uPlayerIdx); + return; + case VAR_Age: + this->sAgeModifier += val; + return; + case VAR_Award: + if (_449B57_test_bit(this->_achieved_awards_bits, val) && pAwards[val].pText ) + { + PlayAwardSound_Anim97_Face(uPlayerIdx, SPEECH_96); + } + _449B7E_toggle_bit(this->_achieved_awards_bits, val, 1); + return; + case VAR_Experience: + this->uExperience = min(this->uExperience + val, 4000000000i64); + PlayAwardSound_Anim97(uPlayerIdx); + return; + case VAR_QBits_QuestsDone: + if ( !_449B57_test_bit(pParty->_quest_bits, val) && pQuestTable[val] ) + { + bFlashQuestBook = 1; + PlayAwardSound_Anim97_Face(uPlayerIdx, SPEECH_93); + } + _449B7E_toggle_bit(pParty->_quest_bits, val, 1); + return; + case VAR_PlayerItemInHands: + item.Reset(); + item.uAttributes = 1; + item.uItemID = val; + if ( val >= ITEM_ARTIFACT_PUCK && val <= ITEM_RELIC_MEKORIGS_HAMMER ) + pParty->pIsArtifactFound[val-500] = 1; + else if ( val >= ITEM_WAND_FIRE && val <= ITEM_WAND_INCENERATION ) { - if ( var_type != VAR_ActualMight ) - { - switch ( var_type ) - { - case VAR_RandomGold: - if ( !val ) - val = 1; - v6 = rand(); - party_finds_gold(v6 % val + 1, 1); - GameUI_DrawFoodAndGold(); - return; - case VAR_RandomFood: - if ( !val ) - val = 1; - v7 = rand() % val + 1; - Party::GiveFood(v7); - sprintf(pTmpBuf.data(), pGlobalTXT_LocalizationStrings[502], v7);// You find %lu food - ShowStatusBarString(pTmpBuf.data(), 2u); - GameUI_DrawFoodAndGold(); - goto _play_sound; - case VAR_Sex: - Dst->uSex = (PLAYER_SEX)val; - pGame->pStru6Instance->SetPlayerBuffAnim(0x97u, uPlayerIdx); - goto _play_sound; - case VAR_Class: - Dst->classType = (PLAYER_CLASS_TYPE)val; - pGame->pStru6Instance->SetPlayerBuffAnim(0x97u, uPlayerIdx); - goto _play_sound; - case VAR_CurrentHP: - v8 = &Dst->sHealth; - *v8 += val; - if ( Dst->sHealth <= Dst->GetMaxHealth() ) - { - pGame->pStru6Instance->SetPlayerBuffAnim(0x97u, uPlayerIdx); - goto _play_sound; - } - v9 = v4->GetMaxHealth(); - goto LABEL_23; - case VAR_MaxHP: - v10 = Dst->GetMaxHealth(); - v4->_health_related = 0; - v4->uFullHealthBonus = 0; - v4->sHealth = v10; - return; - case VAR_CurrentSP: - v8 = &Dst->sMana; - *v8 += val; - if ( Dst->sMana > GetMaxMana() ) - { - v9 = v4->GetMaxMana(); -LABEL_23: - *v8 = v9; - } - pGame->pStru6Instance->SetPlayerBuffAnim(0x97u, uPlayerIdx); - goto _play_sound; - case VAR_MaxSP: - v11 = GetMaxMana(); - v4->_mana_related = 0; - v4->uFullManaBonus = 0; - v4->sMana = v11; - return; - case VAR_ACModifier: - v12 = &Dst->sACModifier; - goto LABEL_29; - case VAR_BaseLevel: - v12 = (__int16 *)&Dst->uLevel; - goto LABEL_29; - case VAR_LevelModifier: - v12 = &Dst->sLevelModifier; -LABEL_29: - *v12 += val; - if ( *v12 > 255 ) - *v12 = 255; - pGame->pStru6Instance->SetPlayerBuffAnim(0x97u, uPlayerIdx); - goto _play_sound; - case VAR_Age: - Dst->sAgeModifier += val; - return; - case VAR_Award: - v13 = pPlayers[uPlayerIdx + 1]; - if (_449B57_test_bit((unsigned __int8 *)pPlayers[uPlayerIdx + 1]->_achieved_awards_bits, val) - - && pAwards[val].pText ) - { - v14 = pPlayers[uPlayerIdx + 1]; - v34 = 1; - v3 = 1; - v14->PlaySound(SPEECH_96, 0); - } - v15 = (char *)v4->_achieved_awards_bits; - _449B7E_toggle_bit((unsigned char *)v15, val, 1); - if ( v34 != 1 ) - { - if ( v3 != 1 ) - return; - goto _play_sound; - } - pGame->pStru6Instance->SetPlayerBuffAnim(0x97u, uPlayerIdx); - if ( v3 != 1 ) - return; - goto _play_sound; - case VAR_Experience: - v16 = __CFADD__(val, LODWORD(Dst->uExperience)); - LODWORD(Dst->uExperience) += val; - HIDWORD(Dst->uExperience) += ((unsigned __int64)val >> 32) + v16; - if ( (signed __int64)Dst->uExperience > 4000000000i64 ) - Dst->uExperience = 4000000000i64; - pGame->pStru6Instance->SetPlayerBuffAnim(0x97u, uPlayerIdx); - goto _play_sound; - case VAR_QBits_QuestsDone: - if ( !((unsigned __int8)(0x80u >> ((signed __int16)val - 1) % 8) & pParty->_quest_bits[((signed __int16)val - 1) >> 3]) - //&& (&dword_722F10)[4 * val] ) - && pQuestTable[val] ) - { - //v17 = pPlayers[uPlayerIdx + 1]; - bFlashQuestBook = 1; - v34 = 1; - v3 = 1; - pPlayers[uPlayerIdx + 1]->PlaySound(SPEECH_93, 0); - } - v15 = (char *)pParty->_quest_bits; - _449B7E_toggle_bit((unsigned char *)v15, val, 1); - if ( v34 != 1 ) - { - if ( v3 != 1 ) - return; - goto _play_sound; - } - pGame->pStru6Instance->SetPlayerBuffAnim(0x97u, uPlayerIdx); - if ( v3 != 1 ) - return; - goto _play_sound; - case VAR_PlayerItemInHands: - item.Reset(); - item.Reset(); - item.uAttributes = 1; - item.uItemID = val; - if ( val >= ITEM_ARTIFACT_PUCK && val <= ITEM_RELIC_MEKORIGS_HAMMER ) - pParty->pIsArtifactFound[val-500] = 1; - if ( val >= ITEM_WAND_FIRE && val <= ITEM_WAND_INCENERATION ) - { - item.uNumCharges = rand() % 6 + item.GetDamageMod() + 1; - item.uMaxCharges = LOBYTE(item.uNumCharges); - } - pParty->SetHoldingItem(&item); - return; - case VAR_FixedGold: - party_finds_gold(val, 1); - return; - case VAR_BaseMight: - v18 = (__int16 *)&Dst->uMight; - goto LABEL_82; - case VAR_BaseIntellect: - v18 = (__int16 *)&Dst->uIntelligence; - goto LABEL_82; - case VAR_BasePersonality: - v18 = (__int16 *)&Dst->uWillpower; - goto LABEL_82; - case VAR_BaseEndurance: - v18 = (__int16 *)&Dst->uEndurance; - goto LABEL_82; - case VAR_BaseSpeed: - v18 = (__int16 *)&Dst->uSpeed; - goto LABEL_82; - case VAR_BaseAccuracy: - v18 = (__int16 *)&Dst->uAccuracy; - goto LABEL_82; - case VAR_BaseLuck: - v18 = (__int16 *)&Dst->uLuck; - goto LABEL_82; - case VAR_FixedFood: - Party::GiveFood(val); - sprintfex(pTmpBuf.data(), pGlobalTXT_LocalizationStrings[502], val); - ShowStatusBarString(pTmpBuf.data(), 2u); - if ( pParty->uNumFoodRations > 0xFFFF ) - Party::SetFood(0xFFFFu); - goto _play_sound; - case VAR_MightBonus: - goto LABEL_62; - case VAR_IntellectBonus: - goto LABEL_66; - case VAR_PersonalityBonus: - goto LABEL_67; - case VAR_EnduranceBonus: - goto LABEL_68; - case VAR_SpeedBonus: - goto LABEL_69; - case VAR_AccuracyBonus: - goto LABEL_70; - case VAR_LuckBonus: - goto LABEL_71; - default: - return; - } - return; - } -LABEL_62: - v19 = (__int16 *)&Dst->uMightBonus; - goto LABEL_113; + item.uNumCharges = rand() % 6 + item.GetDamageMod() + 1; + item.uMaxCharges = LOBYTE(item.uNumCharges); } - if ( var_type <= VAR_FireResistanceBonus ) - { - if ( var_type != VAR_FireResistanceBonus ) + pParty->SetHoldingItem(&item); + return; + case VAR_FixedGold: + party_finds_gold(val, 1); + return; + case VAR_BaseMight: + this->uMight = min(this->uMight + val, 255); + PlayAwardSound_Anim97_Face(uPlayerIdx, SPEECH_92); + return; + case VAR_BaseIntellect: + this->uIntelligence = min(this->uIntelligence + val, 255); + PlayAwardSound_Anim97_Face(uPlayerIdx, SPEECH_92); + return; + case VAR_BasePersonality: + this->uWillpower = min(this->uWillpower + val, 255); + PlayAwardSound_Anim97_Face(uPlayerIdx, SPEECH_92); + return; + case VAR_BaseEndurance: + this->uEndurance = min(this->uEndurance + val, 255); + PlayAwardSound_Anim97_Face(uPlayerIdx, SPEECH_92); + return; + case VAR_BaseSpeed: + this->uSpeed = min(this->uSpeed + val, 255); + PlayAwardSound_Anim97_Face(uPlayerIdx, SPEECH_92); + return; + case VAR_BaseAccuracy: + this->uAccuracy = min(this->uAccuracy + val, 255); + PlayAwardSound_Anim97_Face(uPlayerIdx, SPEECH_92); + return; + case VAR_BaseLuck: + this->uLuck = min(this->uLuck + val, 255); + PlayAwardSound_Anim97_Face(uPlayerIdx, SPEECH_92); + return; + case VAR_FixedFood: + Party::GiveFood(val); + sprintfex(pTmpBuf.data(), pGlobalTXT_LocalizationStrings[502], val); + ShowStatusBarString(pTmpBuf.data(), 2u); + if ( pParty->uNumFoodRations > 0xFFFF ) + Party::SetFood(0xFFFFu); + PlayAwardSound(uPlayerIdx); + return; + case VAR_MightBonus: + case VAR_ActualMight: + this->uMightBonus = min(this->uMightBonus + val, 255); + PlayAwardSound_Anim97_Face(uPlayerIdx, SPEECH_91); + return; + case VAR_IntellectBonus: + case VAR_ActualIntellect: + this->uIntelligenceBonus = min(this->uIntelligenceBonus + val, 255); + PlayAwardSound_Anim97_Face(uPlayerIdx, SPEECH_91); + return; + case VAR_PersonalityBonus: + case VAR_ActualPersonality: + this->uWillpowerBonus = min(this->uWillpowerBonus + val, 255); + PlayAwardSound_Anim97_Face(uPlayerIdx, SPEECH_91); + return; + case VAR_EnduranceBonus: + case VAR_ActualEndurance: + this->uEnduranceBonus = min(this->uEnduranceBonus + val, 255); + PlayAwardSound_Anim97_Face(uPlayerIdx, SPEECH_91); + return; + case VAR_SpeedBonus: + case VAR_ActualSpeed: + this->uSpeedBonus = min(this->uSpeedBonus + val, 255); + PlayAwardSound_Anim97_Face(uPlayerIdx, SPEECH_91); + return; + case VAR_AccuracyBonus: + case VAR_ActualAccuracy: + this->uAccuracyBonus = min(this->uAccuracyBonus + val, 255); + PlayAwardSound_Anim97_Face(uPlayerIdx, SPEECH_91); + return; + case VAR_LuckBonus: + case VAR_ActualLuck: + this->uLuckBonus = min(this->uLuckBonus + val, 255); + PlayAwardSound_Anim97_Face(uPlayerIdx, SPEECH_91); + return; + case VAR_FireResistance: + this->sResFireBase = min(this->sResFireBase + val, 255); + PlayAwardSound_Anim97_Face(uPlayerIdx, SPEECH_92); + return; + case VAR_AirResistance: + this->sResAirBase = min(this->sResAirBase + val, 255); + PlayAwardSound_Anim97_Face(uPlayerIdx, SPEECH_92); + return; + case VAR_WaterResistance: + this->sResWaterBase = min(this->sResWaterBase + val, 255); + PlayAwardSound_Anim97_Face(uPlayerIdx, SPEECH_92); + return; + case VAR_EarthResistance: + this->sResEarthBase = min(this->sResEarthBase + val, 255); + PlayAwardSound_Anim97_Face(uPlayerIdx, SPEECH_92); + return; + case VAR_SpiritResistance: + this->sResSpiritBase = min(this->sResSpiritBase + val, 255); + PlayAwardSound_Anim97_Face(uPlayerIdx, SPEECH_92); + return; + case VAR_MindResistance: + this->sResMindBase = min(this->sResMindBase + val, 255); + PlayAwardSound_Anim97_Face(uPlayerIdx, SPEECH_92); + return; + case VAR_BodyResistance: + this->sResBodyBase = min(this->sResBodyBase + val, 255); + PlayAwardSound_Anim97_Face(uPlayerIdx, SPEECH_92); + return; + case VAR_LightResistance: + this->sResLightBase = min(this->sResLightBase + val, 255); + PlayAwardSound_Anim97_Face(uPlayerIdx, SPEECH_92); + return; + case VAR_DarkResistance: + this->sResDarkBase = min(this->sResDarkBase + val, 255); + PlayAwardSound_Anim97_Face(uPlayerIdx, SPEECH_92); + return; + case VAR_MagicResistance: + this->sResMagicBase = min(this->sResMagicBase + val, 255); + PlayAwardSound_Anim97_Face(uPlayerIdx, SPEECH_92); + return; + case VAR_FireResistanceBonus: + this->sResFireBonus = min(this->sResFireBonus + val, 255); + PlayAwardSound_Anim97_Face(uPlayerIdx, SPEECH_91); + return; + case VAR_AirResistanceBonus: + this->sResAirBonus = min(this->sResAirBonus + val, 255); + PlayAwardSound_Anim97_Face(uPlayerIdx, SPEECH_91); + return; + case VAR_WaterResistanceBonus: + this->sResWaterBonus = min(this->sResWaterBonus + val, 255); + PlayAwardSound_Anim97_Face(uPlayerIdx, SPEECH_91); + return; + case VAR_EarthResistanceBonus: + this->sResEarthBonus = min(this->sResEarthBonus + val, 255); + PlayAwardSound_Anim97_Face(uPlayerIdx, SPEECH_91); + return; + case VAR_SpiritResistanceBonus: + this->sResSpiritBonus = min(this->sResSpiritBonus + val, 255); + PlayAwardSound_Anim97_Face(uPlayerIdx, SPEECH_91); + return; + case VAR_MindResistanceBonus: + this->sResMindBonus = min(this->sResMindBonus + val, 255); + PlayAwardSound_Anim97_Face(uPlayerIdx, SPEECH_91); + return; + case VAR_BodyResistanceBonus: + this->sResBodyBonus = min(this->sResBodyBonus + val, 255); + PlayAwardSound_Anim97_Face(uPlayerIdx, SPEECH_91); + return; + case VAR_LightResistanceBonus: + this->sResLightBonus = min(this->sResLightBonus + val, 255); + PlayAwardSound_Anim97_Face(uPlayerIdx, SPEECH_91); + return; + case VAR_DarkResistanceBonus: + this->sResDarkBonus = min(this->sResDarkBonus + val, 255); + PlayAwardSound_Anim97_Face(uPlayerIdx, SPEECH_91); + return; + case VAR_MagicResistanceBonus: + this->sResMagicBonus = min(this->sResMagicBonus + val, 255); + PlayAwardSound_Anim97_Face(uPlayerIdx, SPEECH_91); + return; + case VAR_Cursed: + this->SetCondition(Condition_Cursed, 1); + PlayAwardSound_Anim97(uPlayerIdx); + return; + case VAR_Weak: + this->SetCondition(Condition_Weak, 1); + PlayAwardSound_Anim97(uPlayerIdx); + return; + case VAR_Asleep: + this->SetCondition(Condition_Sleep, 1); + PlayAwardSound_Anim97(uPlayerIdx); + return; + case VAR_Afraid: + this->SetCondition(Condition_Fear, 1); + PlayAwardSound_Anim97(uPlayerIdx); + return; + case VAR_Drunk: + this->SetCondition(Condition_Drunk, 1); + PlayAwardSound_Anim97(uPlayerIdx); + return; + case VAR_Insane: + this->SetCondition(Condition_Insane, 1); + PlayAwardSound_Anim97(uPlayerIdx); + return; + case VAR_PoisonedGreen: + this->SetCondition(Condition_Poison1, 1); + PlayAwardSound_Anim97(uPlayerIdx); + return; + case VAR_DiseasedGreen: + this->SetCondition(Condition_Disease1, 1); + PlayAwardSound_Anim97(uPlayerIdx); + return; + case VAR_PoisonedYellow: + this->SetCondition(Condition_Poison2, 1); + PlayAwardSound_Anim97(uPlayerIdx); + return; + case VAR_DiseasedYellow: + this->SetCondition(Condition_Disease2, 1); + PlayAwardSound_Anim97(uPlayerIdx); + return; + case VAR_PoisonedRed: + this->SetCondition(Condition_Poison3, 1); + PlayAwardSound_Anim97(uPlayerIdx); + return; + case VAR_DiseasedRed: + this->SetCondition(Condition_Disease3, 1); + PlayAwardSound_Anim97(uPlayerIdx); + return; + case VAR_Paralyzed: + this->SetCondition(Condition_Paralyzed, 1); + PlayAwardSound_Anim97(uPlayerIdx); + return; + case VAR_Unconsious: + this->SetCondition(Condition_Unconcious, 1); + PlayAwardSound_Anim97(uPlayerIdx); + return; + case VAR_Dead: + this->SetCondition(Condition_Dead, 1); + PlayAwardSound_Anim97(uPlayerIdx); + return; + case VAR_Stoned: + this->SetCondition(Condition_Pertified, 1); + PlayAwardSound_Anim97(uPlayerIdx); + return; + case VAR_Eradicated: + this->SetCondition(Condition_Eradicated, 1); + PlayAwardSound_Anim97(uPlayerIdx); + return; + case VAR_MajorCondition : + memset(this, 0, 0xA0u); + PlayAwardSound_Anim97(uPlayerIdx); + return; + case VAR_AutoNotes: + if ( !_449B57_test_bit(pParty->_autonote_bits, val) && pAutonoteTxt[val].pText ) { - switch ( var_type ) - { - case VAR_ActualIntellect: -LABEL_66: - v19 = (__int16 *)&Dst->uIntelligenceBonus; - goto LABEL_113; - case VAR_ActualPersonality: -LABEL_67: - v19 = (__int16 *)&Dst->uWillpowerBonus; - goto LABEL_113; - case VAR_ActualEndurance: -LABEL_68: - v19 = (__int16 *)&Dst->uEnduranceBonus; - goto LABEL_113; - case VAR_ActualSpeed: -LABEL_69: - v19 = (__int16 *)&Dst->uSpeedBonus; - goto LABEL_113; - case VAR_ActualAccuracy: -LABEL_70: - v19 = (__int16 *)&Dst->uAccuracyBonus; - goto LABEL_113; - case VAR_ActualLuck: -LABEL_71: - v19 = (__int16 *)&Dst->uLuckBonus; - goto LABEL_113; - case VAR_FireResistance: - v18 = &Dst->sResFireBase; - goto LABEL_82; - case VAR_AirResistance: - v18 = &Dst->sResAirBase; - goto LABEL_82; - case VAR_WaterResistance: - v18 = &Dst->sResWaterBase; - goto LABEL_82; - case VAR_EarthResistance: - v18 = &Dst->sResEarthBase; - goto LABEL_82; - case VAR_SpiritResistance: - v18 = &Dst->sResSpiritBase; - goto LABEL_82; - case VAR_MindResistance: - v18 = &Dst->sResMindBase; - goto LABEL_82; - case VAR_BodyResistance: - v18 = &Dst->sResBodyBase; - goto LABEL_82; - case VAR_LightResistance: - v18 = &Dst->sResLightBase; - goto LABEL_82; - case VAR_DarkResistance: - v18 = &Dst->sResDarkBase; - goto LABEL_82; - case VAR_MagicResistance: - v18 = &Dst->sResMagicBase; -LABEL_82: - *v18 += val; - if ( *v18 > 255 ) - *v18 = 255; - pPlayers[uPlayerIdx + 1]->PlaySound(SPEECH_92, 0); - pGame->pStru6Instance->SetPlayerBuffAnim(0x97u, uPlayerIdx); - goto _play_sound; - default: - return; - } - return; + this->PlaySound(SPEECH_96, 0); + bFlashAutonotesBook = 1; + _506568_autonote_type = pAutonoteTxt[val].eType; + pGame->pStru6Instance->SetPlayerBuffAnim(0x97u, uPlayerIdx); } - v19 = &Dst->sResFireBonus; -LABEL_113: - *v19 += val; - if ( *v19 > 255 ) - *v19 = 255; - v31 = 0; - v29 = SPEECH_91; - pPlayers[uPlayerIdx + 1]->PlaySound((PlayerSpeech)v29, v31); - pGame->pStru6Instance->SetPlayerBuffAnim(0x97u, uPlayerIdx); - goto _play_sound; - } - if ( var_type <= VAR_DisarmTrapSkill ) - { - if ( var_type != VAR_DisarmTrapSkill ) - { - if ( var_type <= VAR_BodyResistanceBonus ) - { - switch ( var_type ) - { - case VAR_BodyResistanceBonus: - v19 = &Dst->sResBodyBonus; - break; - case VAR_AirResistanceBonus: - v19 = &Dst->sResAirBonus; - break; - case VAR_WaterResistanceBonus: - v19 = &Dst->sResWaterBonus; - break; - case VAR_EarthResistanceBonus: - v19 = &Dst->sResEarthBonus; - break; - case VAR_SpiritResistanceBonus: - v19 = &Dst->sResSpiritBonus; - break; - default: - if ( var_type != 62 ) - return; - v19 = &Dst->sResMindBonus; - break; - } - goto LABEL_113; - } - if ( var_type == VAR_LightResistanceBonus ) - { - v19 = &Dst->sResLightBonus; - goto LABEL_113; - } - if ( var_type == VAR_DarkResistanceBonus ) - { - v19 = &Dst->sResDarkBonus; - goto LABEL_113; - } - if ( var_type == VAR_MagicResistanceBonus ) - { - v19 = &Dst->sResMagicBonus; - goto LABEL_113; - } - if ( var_type <= VAR_MagicResistanceBonus || var_type > VAR_DiplomacySkill ) - return; - } - goto LABEL_106; - } - if ( var_type == VAR_LearningSkill ) - { -LABEL_106: - if ( val <= VAR_BodyResistanceBonus ) - { - *((short *)&Dst->pConditions[16] + var_type) = (unsigned __int8)val | *((char *)&Dst->pConditions[16] + 2 * var_type) & VAR_BodyResistanceBonus; - } - else - { - v20 = (char *)&Dst->pConditions[16] + 2 * var_type; - v21 = *(short *)v20; - v22 = (unsigned __int8)val + (v21 & VAR_BodyResistanceBonus); - if ( v22 > 60 ) - LOWORD(v22) = 60; - LOBYTE(v21) = v21 & 0xC0; - *(short *)v20 = v22 | v21; - } - pGame->pStru6Instance->SetPlayerBuffAnim(0x97u, uPlayerIdx); - goto _play_sound; - } - if ( var_type <= VAR_LearningSkill ) + _449B7E_toggle_bit(pParty->_autonote_bits, val, 1); + PlayAwardSound(uPlayerIdx); return; - if ( var_type <= VAR_Eradicated ) - { - Dst->SetCondition(var_type - 105, 0); - } - else - { - if ( var_type != VAR_MajorCondition ) - { - if ( var_type > VAR_MajorCondition && var_type <= VAR_MapPersistentVariable_99 ) - { - if ( (unsigned __int8)val + (unsigned __int8)byte_5E4C15[var_type] <= 255 ) - byte_5E4C15[var_type] += val; - else - byte_5E4C15[var_type] = -1; - } - return; - } - memset(Dst, 0, 0xA0u); - } - pGame->pStru6Instance->SetPlayerBuffAnim(0x97u, uPlayerIdx); - goto _play_sound; - } - if ( !((unsigned __int8)(0x80u >> ((signed __int16)val - 1) % 8) & pParty->_autonote_bits[((signed __int16)val - 1) >> 3]) - //&& (&dword_723718_autonote_related)[8 * val] ) - && pAutonoteTxt[val].pText ) - { - v23 = pPlayers[uPlayerIdx + 1]; - v34 = 1; - v23->PlaySound(SPEECH_96, 0); - //v24 = pAutonoteTxt[val].eType;//dword_72371C[2 * val]; - bFlashAutonotesBook = 1; - _506568_autonote_type = pAutonoteTxt[val].eType; - } - _449B7E_toggle_bit(pParty->_autonote_bits, val, 1); - v3 = 1; - if ( v34 != 1 ) - { - if ( v3 != 1 ) - return; - goto _play_sound; - } - pGame->pStru6Instance->SetPlayerBuffAnim(0x97u, uPlayerIdx); - if ( v3 != 1 ) - return; - goto _play_sound; - } - if ( var_type > VAR_GoldInBank ) - { - if ( var_type == 307 ) - { + case VAR_PlayerBits: + _449B7E_toggle_bit((unsigned char *)this->field_1A50, val, 1u); + return; + case VAR_NPCs2: + pParty->hirelingScrollPosition = 0; + LOBYTE(pNPCStats->pNewNPCData[val].uFlags) |= 0x80u; + pParty->CountHirelings(); + viewparams->bRedrawGameUI = true; + return; + case VAR_NumSkillPoints: + this->uSkillPoints += val; + return; + case VAR_ReputationInCurrentLocation: + v27 = &pOutdoor->ddm; + if ( uCurrentlyLoadedLevelType != LEVEL_Outdoor ) + v27 = &pIndoor->dlv; + v27->uReputation += val; + if ( v27->uReputation > 10000 ) + v27->uReputation = 10000; + return; + case VAR_GoldInBank: + pParty->uNumGoldInBank += val; + return; + case VAR_NumDeaths: pParty->uNumDeaths += val; - if ( v34 != 1 ) - { - if ( v3 != 1 ) - return; - goto _play_sound; - } - pGame->pStru6Instance->SetPlayerBuffAnim(0x97u, uPlayerIdx); - if ( v3 != 1 ) - return; - goto _play_sound; - } - switch ( var_type ) - { - case 308: - pParty->uNumBountiesCollected += val; - break; - case 309: - pParty->uNumPrisonTerms += val; - break; - case 310: - pParty->uNumArenaPageWins += val; - break; - case 311: - pParty->uNumArenaSquireWins += val; - break; - case 312: - pParty->uNumArenaKnightWins += val; - break; - case 313: - pParty->uNumArenaLordWins += val; - break; - } + return; + case VAR_NumBounties: + pParty->uNumBountiesCollected += val; + return; + case VAR_PrisonTerms: + pParty->uNumPrisonTerms += val; + return; + case VAR_ArenaWinsPage: + pParty->uNumArenaPageWins += val; + return; + case VAR_ArenaWinsSquire: + pParty->uNumArenaSquireWins += val; + return; + case VAR_ArenaWinsKnight: + pParty->uNumArenaKnightWins += val; + return; + case VAR_ArenaWinsLord: + pParty->uNumArenaLordWins += val; + return; + case VAR_StaffSkill: + AddSkillByEvent(&Player::skillStaff, val, uPlayerIdx); + return; + case VAR_SwordSkill: + AddSkillByEvent(&Player::skillSword, val, uPlayerIdx); + return; + case VAR_DaggerSkill: + AddSkillByEvent(&Player::skillDagger, val, uPlayerIdx); + return; + case VAR_AxeSkill: + AddSkillByEvent(&Player::skillAxe, val, uPlayerIdx); + return; + case VAR_SpearSkill: + AddSkillByEvent(&Player::skillSpear, val, uPlayerIdx); + return; + case VAR_BowSkill: + AddSkillByEvent(&Player::skillBow, val, uPlayerIdx); + return; + case VAR_MaceSkill: + AddSkillByEvent(&Player::skillMace, val, uPlayerIdx); + return; + case VAR_BlasterSkill: + AddSkillByEvent(&Player::skillBlaster, val, uPlayerIdx); + return; + case VAR_ShieldSkill: + AddSkillByEvent(&Player::skillShield, val, uPlayerIdx); + return; + case VAR_LeatherSkill: + AddSkillByEvent(&Player::skillLeather, val, uPlayerIdx); + return; + case VAR_SkillChain: + AddSkillByEvent(&Player::skillChain, val, uPlayerIdx); + return; + case VAR_PlateSkill: + AddSkillByEvent(&Player::skillPlate, val, uPlayerIdx); + return; + case VAR_FireSkill: + AddSkillByEvent(&Player::skillFire, val, uPlayerIdx); + return; + case VAR_AirSkill: + AddSkillByEvent(&Player::skillAir, val, uPlayerIdx); + return; + case VAR_WaterSkill: + AddSkillByEvent(&Player::skillWater, val, uPlayerIdx); + return; + case VAR_EarthSkill: + AddSkillByEvent(&Player::skillEarth, val, uPlayerIdx); + return; + case VAR_SpiritSkill: + AddSkillByEvent(&Player::skillSpirit, val, uPlayerIdx); + return; + case VAR_MindSkill: + AddSkillByEvent(&Player::skillMind, val, uPlayerIdx); + return; + case VAR_BodySkill: + AddSkillByEvent(&Player::skillBody, val, uPlayerIdx); + return; + case VAR_LightSkill: + AddSkillByEvent(&Player::skillLight, val, uPlayerIdx); + return; + case VAR_DarkSkill: + AddSkillByEvent(&Player::skillDark, val, uPlayerIdx); + return; + case VAR_IdentifyItemSkill: + AddSkillByEvent(&Player::skillItemId, val, uPlayerIdx); + return; + case VAR_MerchantSkill: + AddSkillByEvent(&Player::skillMerchant, val, uPlayerIdx); + return; + case VAR_RepairSkill: + AddSkillByEvent(&Player::skillRepair, val, uPlayerIdx); + return; + case VAR_BodybuildingSkill: + AddSkillByEvent(&Player::skillBodybuilding, val, uPlayerIdx); + return; + case VAR_MeditationSkill: + AddSkillByEvent(&Player::skillMeditation, val, uPlayerIdx); + return; + case VAR_PerceptionSkill: + AddSkillByEvent(&Player::skillPerception, val, uPlayerIdx); + return; + case VAR_DiplomacySkill: + AddSkillByEvent(&Player::skillDiplomacy, val, uPlayerIdx); + return; + case VAR_ThieverySkill: + Error ("Thieving unsupported"); + return; + case VAR_DisarmTrapSkill: + AddSkillByEvent(&Player::skillDisarmTrap, val, uPlayerIdx); + return; + case VAR_DodgeSkill: + AddSkillByEvent(&Player::skillDodge, val, uPlayerIdx); + return; + case VAR_UnarmedSkill: + AddSkillByEvent(&Player::skillUnarmed, val, uPlayerIdx); + return; + case VAR_IdentifyMonsterSkill: + AddSkillByEvent(&Player::skillMonsterId, val, uPlayerIdx); + return; + case VAR_ArmsmasterSkill: + AddSkillByEvent(&Player::skillArmsmaster, val, uPlayerIdx); + return; + case VAR_StealingSkill: + AddSkillByEvent(&Player::skillStealing, val, uPlayerIdx); + return; + case VAR_AlchemySkill: + AddSkillByEvent(&Player::skillAlchemy, val, uPlayerIdx); + return; + case VAR_LearningSkill: + AddSkillByEvent(&Player::skillLearning, val, uPlayerIdx); + return; + default: + return; + } +} + +//----- (new function) -------------------------------------------------------- +void Player::PlayAwardSound_Anim97(int currPlayerId) +{ + pGame->pStru6Instance->SetPlayerBuffAnim(0x97u, currPlayerId); + PlayAwardSound(currPlayerId); +} + +//----- (new function) -------------------------------------------------------- +void Player::PlayAwardSound_Anim97_Face(int currPlayerId, PlayerSpeech speech) +{ + this->PlaySound(speech, 0); + PlayAwardSound_Anim97(currPlayerId); +} + +//----- (new function) -------------------------------------------------------- +void Player::AddSkillByEvent( unsigned __int16 Player::* skillToSet, unsigned __int16 addSkillValue, int currPlayerId ) +{ + if ( addSkillValue > 63 ) + { + this->*skillToSet = (unsigned __int8)addSkillValue | this->*skillToSet & 63; } else { - if ( var_type == VAR_GoldInBank ) - { - pParty->uNumGoldInBank += val; - return; - } - if ( var_type <= VAR_Counter8 ) - { - if ( (signed int)var_type >= 245 ) - { - *(int *)&stru_AA1058[3].pSounds[8 * var_type + 44300] = LODWORD(pParty->uTimePlayed); - *(int *)&stru_AA1058[3].pSounds[8 * var_type + 44304] = HIDWORD(pParty->uTimePlayed); - } - else - { - switch ( var_type ) - { - case VAR_PlayerBits: - _449B7E_toggle_bit((unsigned char *)Dst->field_1A50, val, 1u); - break; - case VAR_NPCs2: - pParty->field_709 = 0; - LOBYTE(pNPCStats->pNewNPCData[val].uFlags) |= 0x80u; - pParty->CountHirelings(); - viewparams->bRedrawGameUI = true; - break; - case VAR_NumSkillPoints: - Dst->uSkillPoints += val; - break; - } - } - return; - } - if ( var_type < VAR_Counter9 ) - return; - if ( (signed int)var_type <= 274 ) - { - *(int *)&stru_AA1058[3].pSounds[8 * var_type + 44532] = LODWORD(pParty->uTimePlayed); - *(int *)&stru_AA1058[3].pSounds[8 * var_type + 44536] = HIDWORD(pParty->uTimePlayed); - goto _play_sound; - } - if ( var_type != VAR_ReputationInCurrentLocation ) - { - if ( var_type <= VAR_ReputationInCurrentLocation - || var_type > VAR_History_28 - || (v25 = var_type - 276, pParty->PartyTimes.HistoryEventTimes[v25]) - || (pParty->PartyTimes.HistoryEventTimes[var_type - 276] = pParty->uTimePlayed, - v26 = pStorylineText->StoreLine[v25].pText==0,//*(&pStorylineText->field_0 + 3 * v25) == 0, - v26) ) - return; - bFlashHistoryBook = 1; -_play_sound: - v28 = 8 * uPlayerIdx + 400; - LOBYTE(v28) = PID(OBJECT_Player,uPlayerIdx - 112); - pAudioPlayer->PlaySound(SOUND_20001, v28, 0, -1, 0, 0, 0, 0); - return; - } - v27 = &pOutdoor->ddm; - if ( uCurrentlyLoadedLevelType != LEVEL_Outdoor ) - v27 = &pIndoor->dlv; - v27->uReputation += val; - if ( v27->uReputation > 10000 ) - v27->uReputation = 10000; - } -} - + this->*skillToSet = min(this->*skillToSet + addSkillValue, 60) | this->*skillToSet & 0xC0; + } + PlayAwardSound_Anim97(currPlayerId); + return; +} //----- (0044B9C4) -------------------------------------------------------- bool Player::SubtractVariable(enum VariableType VarNum, signed int pValue) @@ -6629,14 +6639,14 @@ VarNum = (VariableType)0; GetNewNPCData(sDialogue_SpeakingActorNPC_ID, (int*)&VarNum); result = (bool) pValue; - dword_5B65CC = 0; + npcIdToDismissAfterDialogue = 0; if ( (int)VarNum == pValue ) { - dword_5B65CC = (int)pValue; + npcIdToDismissAfterDialogue = (int)pValue; } else { - pParty->field_709 = 0; + pParty->hirelingScrollPosition = 0; LOBYTE(pNPCStats->pNewNPCData[(int)pValue].uFlags) &= 0x7Fu; pParty->CountHirelings(); viewparams->bRedrawGameUI = true; @@ -6664,7 +6674,7 @@ memset(pParty->pHirelings, 0, 0x4Cu); if ( pParty->pHirelings[1].uProfession == pValue ) memset(&pParty->pHirelings[1], 0, 0x4Cu); - pParty->field_709 = 0; + pParty->hirelingScrollPosition = 0; pParty->CountHirelings(); break; case 243:
--- a/Player.h Mon Oct 07 09:31:18 2013 +0600 +++ b/Player.h Mon Oct 07 09:31:32 2013 +0600 @@ -603,8 +603,11 @@ bool WearsItemAnyWhere(int item_id); float GetArmorRecoveryMultiplierFromSkillLevel( unsigned char armour_skill_type, float param2, float param3, float param4, float param5 ); void SetSkillByEvent(unsigned __int16 Player::* skillToSet, unsigned __int16 skillValue, int currPlayerId); + void AddSkillByEvent( unsigned __int16 Player::* skillToSet, unsigned __int16 addSkillValue, int currPlayerId ); + void PlayAwardSound_Anim(int currPlayerId); void PlayAwardSound_Anim_Face(int currPlayerId, PlayerSpeech speech); - void PlayAwardSound_Anim(int currPlayerId); + void PlayAwardSound_Anim97(int currPlayerId); + void PlayAwardSound_Anim97_Face(int currPlayerId, PlayerSpeech speech); bool IsWeak(); bool IsDead();
--- a/Render.cpp Mon Oct 07 09:31:18 2013 +0600 +++ b/Render.cpp Mon Oct 07 09:31:32 2013 +0600 @@ -8767,6 +8767,8 @@ { pNextVertices = depth_num_vertices++; memcpy(&array_507D30[pNextVertices], &array_50AC10[i], 0x30); + //array_507D30[pNextVertices]._rhw = 1.0 / (array_50AC10[i].vWorldViewPosition.x + 0.0000001); + //array_507D30[pNextVertices].flt_2C = array_50AC10[i].flt_2C; } previous_vertices_flag = current_vertices_flag; }
--- a/UI/UiGame.cpp Mon Oct 07 09:31:18 2013 +0600 +++ b/UI/UiGame.cpp Mon Oct 07 09:31:32 2013 +0600 @@ -187,9 +187,9 @@ } } } - if ( (signed int)((char *)_this + (unsigned __int8)pParty->field_709) < v1 ) + if ( (signed int)((char *)_this + pParty->hirelingScrollPosition) < v1 ) { - sDialogue_SpeakingActorNPC_ID = -1 - (unsigned __int8)pParty->field_709 - (int)_this; + sDialogue_SpeakingActorNPC_ID = -1 - pParty->hirelingScrollPosition - (int)_this; pNPC = GetNewNPCData(sDialogue_SpeakingActorNPC_ID, &a2); if ( pNPC ) { @@ -2161,7 +2161,7 @@ } } - for ( int i = (unsigned __int8)pParty->field_709; i < v22 && pNPC_limit_ID < 2; i++ ) + for ( int i = pParty->hirelingScrollPosition; i < v22 && pNPC_limit_ID < 2; i++ ) { if ( (unsigned __int8)pTmpBuf[i] >= 2 ) {
--- a/mm7_2.cpp Mon Oct 07 09:31:18 2013 +0600 +++ b/mm7_2.cpp Mon Oct 07 09:31:32 2013 +0600 @@ -2752,124 +2752,26 @@ //----- (0045828B) -------------------------------------------------------- unsigned int __fastcall GetSpellColor(signed int a1) { - unsigned __int16 v1; // dx@3 - unsigned __int16 v2; // cx@6 - unsigned __int16 v4; // [sp-4h] [bp-4h]@3 - - if ( a1 < 1 ) - { - if ( a1 < 12 ) - { - if ( a1 < 23 ) - { - if ( a1 < 34 ) - { - if ( a1 < 45 ) - { - if ( a1 < 56 ) - { - if ( a1 < 67 ) - { - if ( a1 < 78 ) - { - if ( a1 < 89 ) - { - v4 = 0; - v1 = 0; - v2 = 0; - return TargetColor(v2, v1, v4); - } - } - else - { -LABEL_25: - if ( a1 < 89 ) - { - v4 = 155; - v2 = 255; - v1 = v2; - return TargetColor(v2, v1, v4); - } - } - if ( a1 < 100 ) - { - v4 = 240; - v2 = 192; - v1 = v2; - return TargetColor(v2, v1, v4); - } - v4 = 0; - v1 = 0; - v2 = 0; - return TargetColor(v2, v1, v4); - } -LABEL_21: - if ( a1 < 78 ) - { - v4 = 0; - v1 = 128; - v2 = 255; - return TargetColor(v2, v1, v4); - } - goto LABEL_25; - } -LABEL_18: - if ( a1 < 67 ) - { - v4 = 255; - v1 = 15; - v2 = 235; - return TargetColor(v2, v1, v4); - } - goto LABEL_21; - } -LABEL_15: - if ( a1 < 56 ) - { - v2 = 225; - v4 = v2; - v1 = v2; - return TargetColor(v2, v1, v4); - } - goto LABEL_18; - } -LABEL_11: - if ( a1 < 45 ) - { - v2 = 128; - v4 = v2; - v1 = v2; - return TargetColor(v2, v1, v4); - } - goto LABEL_15; - } -LABEL_8: - if ( a1 < 34 ) - { - v4 = 255; - v1 = 128; - v2 = 0; - return TargetColor(v2, v1, v4); - } - goto LABEL_11; - } - } - else - { - if ( a1 < 12 ) - { - v4 = 0; - v1 = 85; - v2 = 255; - return TargetColor(v2, v1, v4); - } - } - if ( a1 >= 23 ) - goto LABEL_8; - v4 = 255; - v1 = 212; - v2 = 150; - return TargetColor(v2, v1, v4); + if ( a1 == 0 ) + return TargetColor(0, 0, 0); + if ( a1 < 12 ) + return TargetColor(255, 85, 0); + if ( a1 < 23 ) + return TargetColor(150, 212, 255); + if ( a1 < 34 ) + return TargetColor(0, 128, 255); + if ( a1 < 45 ) + return TargetColor(128, 128, 128); + if ( a1 < 56 ) + return TargetColor(225, 225, 225); + if ( a1 < 67 ) + return TargetColor(235, 15, 255); + if ( a1 < 78 ) + return TargetColor(255, 128, 0); + if ( a1 < 89 ) + return TargetColor(255, 255, 155); + if ( a1 < 100 ) + return TargetColor(192, 192, 240); } //----- (004610AA) -------------------------------------------------------- @@ -2937,7 +2839,8 @@ //{ v3 = pActor->pMonsterInfo.uID; v17 = 0; - if ( v3 >= 115 && v3 <= 186 || v3 >= 232 && v3 <= 249 ) + if ( pActor->pMonsterInfo.uID >= 115 && pActor->pMonsterInfo.uID <= 186 + || pActor->pMonsterInfo.uID >= 232 && pActor->pMonsterInfo.uID <= 249 ) v17 = 1; //v1 = 0; v4 = (v3 - 1) % 3;
--- a/mm7_3.cpp Mon Oct 07 09:31:18 2013 +0600 +++ b/mm7_3.cpp Mon Oct 07 09:31:32 2013 +0600 @@ -751,102 +751,102 @@ //----- (0047050A) -------------------------------------------------------- int stru141_actor_collision_object::_47050A(int dt) { - stru141_actor_collision_object *v2; // esi@1 + //stru141_actor_collision_object *v2; // esi@1 //signed int v3; // eax@1 //int v4; // ecx@1 //int v5; // edx@1 //int v6; // edx@1 int v7; // eax@1 - int v8; // eax@3 + //int v8; // eax@3 signed int result; // eax@4 - int v10; // eax@5 - int v11; // eax@5 - int v12; // ebx@5 - int v13; // edx@5 - int v14; // edi@5 - int v15; // ecx@5 - int v16; // eax@5 + //int v10; // eax@5 + //int v11; // eax@5 + //int v12; // ebx@5 + //int v13; // edx@5 + //int v14; // edi@5 + //int v15; // ecx@5 + //int v16; // eax@5 int v17; // eax@5 int v18; // eax@7 - int v19; // edx@9 - int v20; // edi@9 + //int v19; // edx@9 + //int v20; // edi@9 int v21; // eax@9 int v22; // eax@11 - int v23; // edx@13 - int v24; // eax@13 - int v25; // eax@14 - int v26; // eax@16 - int v27; // eax@17 - int v28; // [sp+14h] [bp+8h]@5 - - v2 = this; + //int v23; // edx@13 + //int v24; // eax@13 + //int v25; // eax@14 + //int v26; // eax@16 + //int v27; // eax@17 + //int v28; // [sp+14h] [bp+8h]@5 + + //v2 = this; int speed = 1 | integer_sqrt(this->velocity.z * this->velocity.z + this->velocity.y * this->velocity.y + this->velocity.x * this->velocity.x); - v2->direction.x = 65536 / speed * v2->velocity.x; - v2->direction.y = 65536 / speed * v2->velocity.y; - v2->direction.z = 65536 / speed * v2->velocity.z; - - v2->speed = speed; - v2->inv_speed = 65536 / speed; + this->direction.x = 65536 / speed * this->velocity.x; + this->direction.y = 65536 / speed * this->velocity.y; + this->direction.z = 65536 / speed * this->velocity.z; + + this->speed = speed; + this->inv_speed = 65536 / speed; if (dt) v7 = dt; else v7 = pEventTimer->dt_in_some_format; - v8 = fixpoint_mul(v7, speed) - v2->field_70; // speed * dt - something - v2->field_6C = v8; - if ( v8 > 0 ) - { - v10 = fixpoint_mul(v8, v2->direction.x) + v2->normal.x; - v2->field_4C = v10; - v2->normal2.x = v10; - v11 = fixpoint_mul(v2->field_6C, v2->direction.y) + v2->normal.y; - v2->field_50 = v11; - v2->normal2.y = v11; - v2->normal2.z = fixpoint_mul(v2->field_6C, v2->direction.z) + v2->normal.z; - v12 = v2->position.z; - v13 = v2->normal.x; - v14 = v2->normal2.x; - v15 = v2->prolly_normal_d; - v16 = v12 + fixpoint_mul(v2->field_6C, v2->direction.z); - v28 = v16; - v2->field_54 = v16; - v17 = v13; - if ( v13 >= v14 ) - v17 = v14; - v2->sMaxX = v17 - v15; - v18 = v15 + v13; - if ( v13 <= v14 ) - v18 = v15 + v14; - v19 = v2->normal.y; - v20 = v2->normal2.y; - v2->sMinX = v18; - v21 = v19; - if ( v19 >= v20 ) - v21 = v20; - v2->sMaxY = v21 - v15; - v22 = v15 + v19; - if ( v19 <= v20 ) - v22 = v20 + v15; - v23 = v2->normal2.z; - v2->sMinY = v22; - v24 = v2->normal.z; - if ( v24 >= v23 ) - v25 = v23 - v15; + //v8 = fixpoint_mul(v7, speed) - this->field_70; // speed * dt - something + this->field_6C = fixpoint_mul(v7, speed) - this->field_70; + if ( this->field_6C > 0 ) + { + //v10 = fixpoint_mul(v8, this->direction.x) + this->normal.x; + this->field_4C = fixpoint_mul(this->field_6C, this->direction.x) + this->normal.x; + this->normal2.x = fixpoint_mul(this->field_6C, this->direction.x) + this->normal.x; + //v11 = fixpoint_mul(this->field_6C, this->direction.y) + this->normal.y; + this->field_50 = fixpoint_mul(this->field_6C, this->direction.y) + this->normal.y; + this->normal2.y = fixpoint_mul(this->field_6C, this->direction.y) + this->normal.y; + this->normal2.z = fixpoint_mul(this->field_6C, this->direction.z) + this->normal.z; + //v12 = this->position.z; + //v13 = this->normal.x; + //v14 = this->normal2.x; + //v15 = this->prolly_normal_d; + //v16 = this->position.z + fixpoint_mul(this->field_6C, this->direction.z); + //v28 = this->position.z + fixpoint_mul(this->field_6C, this->direction.z); + this->field_54 = this->position.z + fixpoint_mul(this->field_6C, this->direction.z); + v17 = this->normal.x; + if ( v17 >= this->normal2.x ) + v17 = this->normal2.x; + this->sMaxX = v17 - this->prolly_normal_d; + v18 = this->prolly_normal_d + this->normal.x; + if ( this->normal.x <= this->normal2.x ) + v18 = this->prolly_normal_d + this->normal2.x; + //v19 = this->normal.y; + //v20 = this->normal2.y; + this->sMinX = v18; + v21 = this->normal.y; + if ( v21 >= this->normal2.y ) + v21 = this->normal2.y; + this->sMaxY = v21 - this->prolly_normal_d; + v22 = this->prolly_normal_d + this->normal.y; + if ( this->normal.y <= this->normal2.y ) + v22 = this->normal2.y + this->prolly_normal_d; + //v23 = this->normal2.z; + this->sMinY = v22; + //v24 = this->normal.z; + if ( this->normal.z >= this->normal2.z ) + this->sMaxZ = this->normal2.z - this->prolly_normal_d; else - v25 = v24 - v15; - v2->sMaxZ = v25; - v26 = v2->field_8_radius; - if ( v12 <= v28 ) - v27 = v28 + v26; + this->sMaxZ = this->normal.z - this->prolly_normal_d; + //this->sMaxZ = v25; + //v26 = this->field_8_radius; + if ( this->position.z <= this->position.z + fixpoint_mul(this->field_6C, this->direction.z) ) + this->sMinZ = (this->position.z + fixpoint_mul(this->field_6C, this->direction.z)) + this->field_8_radius; else - v27 = v12 + v26; - v2->uFaceID = 0; - v2->field_80 = -1; - v2->field_88 = -1; - v2->sMinZ = v27; - v2->field_7C = 0xFFFFFFu; + this->sMinZ = this->position.z + this->field_8_radius; + this->uFaceID = 0; + this->field_80 = -1; + this->field_88 = -1; + //this->sMinZ = v27; + this->field_7C = 0xFFFFFFu; result = 0; } else @@ -5048,21 +5048,22 @@ break; } - pShading = fixpoint_div(v34, pViewportBR_Y); + pShading = fixpoint_div(v34, pViewportBR_Y);//53570690 = -33554432 / -41049 if ( pShading < 0 ) pShading = pODMRenderParams->shading_dist_mist; - + int a = ((unsigned __int64)(pSkyPolygon.ptr_38->field_10 * v13) >> 16);//16316 v37 += ((unsigned __int64)(pSkyPolygon.ptr_38->field_10 * v13) >> 16); + int b = ((unsigned __int64)(pSkyPolygon.ptr_38->field_1C * v13) >> 16); screen_center_x += ((unsigned __int64)(pSkyPolygon.ptr_38->field_1C * v13) >> 16); v35 = 224 * pMiscTimer->uTotalGameTimeElapsed + fixpoint_mul(v37, pShading) / 8;// screen_center_x = 224 * pMiscTimer->uTotalGameTimeElapsed + fixpoint_mul(screen_center_x, pShading) / 8; - //array_50AC10[vertex_id].vWorldViewPosition.x = pODMRenderParams->shading_dist_mist; - //array_50AC10[vertex_id].vWorldPosition.x = v36 / (pSky.pTexture->uTextureHeight * 65536.0); + array_50AC10[vertex_id].vWorldViewPosition.x = pODMRenderParams->shading_dist_mist; + //array_50AC10[vertex_id].vWorldPosition.x = v36 / (pSkyPolygon.pTexture->uTextureHeight * 65536.0); //array_50AC10[vertex_id].vWorldPosition.y = 1.0 / (pODMRenderParams->shading_dist_mist >> 16); - //array_50AC10[vertex_id].vWorldPosition.z = v35 / (pSky.pTexture->uTextureWidth * 65536.0); - //array_50AC10[vertex_id]._rhw = 1.0f / (pShading >> 16); - //array_50AC10[vertex_id].u = (double)v35 / (65536.0 * pSkyPolygon.pTexture->uTextureWidth); + //array_50AC10[vertex_id].vWorldPosition.z = v35 / (pSkyPolygon.pTexture->uTextureWidth * 65536.0); + //array_50AC10[vertex_id]._rhw = 1.0f / (pShading >> 16);//1.0 / (array_50AC10[vertex_id].vWorldViewPosition.x + 0.0000001); + //array_50AC10[vertex_id].u = (double)v35 / (65536.0 * pSkyPolygon.pTexture->uTextureWidth);//t - pParty->sRotationY / 1024.0f //array_50AC10[vertex_id].v = (double)screen_center_x / (65536.0 * pSkyPolygon.pTexture->uTextureHeight); //----------------------------------------------------------------------------------------- @@ -5080,6 +5081,206 @@ pRenderer->DrawSkyPolygon(pSkyPolygon.uNumVertices, &pSkyPolygon, pBitmaps_LOD->pHardwareTextures[pSkyPolygon.uTileBitmapID]); //} } +/*void Render::DrawSkyD3D() +{ + int v0; // esi@2 + int v1; // eax@2 + double v2; // st7@2 + double v3; // st6@2 + double v4; // st5@2 + double v5; // st4@2 + double v6; // st7@2 + char *v7; // esi@3 + int v8; // eax@4 + int v9; // eax@4 + int v10; // ebx@4 + signed __int64 v11; // qax@6 + double v12; // st7@6 + int v13; // edi@6 + int v14; // ecx@6 + int v15; // eax@8 + int v16; // eax@12 + signed __int64 v17; // qtt@13 + signed int v18; // ecx@13 + Texture *v19; // eax@15 + double v20; // st6@15 + double v21; // st7@15 + double v22; // st6@15 + unsigned __int8 v23; // sf@15 + unsigned __int8 v24; // of@15 + struct Polygon pSkyPolygon; // [sp+14h] [bp-150h]@1 + double v26; // [sp+120h] [bp-44h]@4 + float v27; // [sp+128h] [bp-3Ch]@4 + float v28; // [sp+12Ch] [bp-38h]@2 + int v29; // [sp+130h] [bp-34h]@4 + int v30; // [sp+134h] [bp-30h]@1 + int v31; // [sp+138h] [bp-2Ch]@2 + int v32; // [sp+13Ch] [bp-28h]@6 + int v33; // [sp+140h] [bp-24h]@2 + signed __int64 v34; // [sp+144h] [bp-20h]@1 + int v35; // [sp+148h] [bp-1Ch]@4 + double v36; // [sp+14Ch] [bp-18h]@2 + int v37; // [sp+154h] [bp-10h]@8 + int v38; // [sp+158h] [bp-Ch]@1 + int v39; // [sp+15Ch] [bp-8h]@4 + int v40; // [sp+160h] [bp-4h]@7 + + v30 = (signed __int64)((double)(pODMRenderParams->int_fov_rad * pGame->pIndoorCameraD3D->vPartyPos.z) + / ((double)pODMRenderParams->int_fov_rad + 8192.0) + + (double)(pViewport->uScreenCenterY + 7));//include "+ 7" + //v34 = cos((double)pGame->pIndoorCameraD3D->sRotationX * 0.0030664064) * (double)pODMRenderParams->shading_dist_mist; + /*v38 = (signed __int64)((double)(pViewport->uScreenCenterY + 7) + - (double)pODMRenderParams->int_fov_rad + / (v34 + 0.0000001) + * (sin((double)pGame->pIndoorCameraD3D->sRotationX * 0.0030664064) + * (double)-pODMRenderParams->shading_dist_mist + - (double)pGame->pIndoorCameraD3D->vPartyPos.z));*/ + /*v34 = cos((double)pGame->pIndoorCameraD3D->sRotationX * 0.0030664064) * 0x2000; + v38 = (signed __int64)((double)(pViewport->uScreenCenterY + 7) + - (double)pODMRenderParams->int_fov_rad + / (v34 + 0.0000001) + * (sin((double)pGame->pIndoorCameraD3D->sRotationX * 0.0030664064) + * (double)-0x2000 + - (double)pGame->pIndoorCameraD3D->vPartyPos.z)); + pSkyPolygon.Create_48607B(&stru_8019C8);// ptr_38 + pSkyPolygon.ptr_38->_48694B_frustum_sky(); + pSkyPolygon.uTileBitmapID = pOutdoor->uSky_TextureID;//179(original 166) + pSkyPolygon.pTexture = (Texture *)(SLOWORD(pOutdoor->uSky_TextureID) != -1 ? (int)&pBitmaps_LOD->pTextures[SLOWORD(pOutdoor->uSky_TextureID)] : 0); + if ( pSkyPolygon.pTexture ) + { + v0 = pGame->pIndoorCameraD3D->sRotationX; + pSkyPolygon.dimming_level = 0; + pSkyPolygon.uNumVertices = 4; + pSkyPolygon.v_18.x = -stru_5C6E00->Sin(pGame->pIndoorCameraD3D->sRotationX + 16); + pSkyPolygon.v_18.y = 0; + v1 = stru_5C6E00->Cos(v0 + 16); + v2 = (double)(signed int)pViewport->uViewportTL_X; + pSkyPolygon.v_18.z = -v1; + array_50AC10[0].vWorldViewProjX = v2; + v3 = (double)(signed int)pViewport->uViewportTL_Y; + array_50AC10[0].vWorldViewProjY = v3; + array_50AC10[1].vWorldViewProjX = v2; + v4 = (double)v38; + pSkyPolygon.sTextureDeltaU = 224 * pMiscTimer->uTotalGameTimeElapsed; + pSkyPolygon.sTextureDeltaV = 224 * pMiscTimer->uTotalGameTimeElapsed; + v28 = v4; + array_50AC10[1].vWorldViewProjY = v4; + v5 = (double)(signed int)pViewport->uViewportBR_X; + array_50AC10[2].vWorldViewProjX = v5; + v38 = pViewport->uViewportBR_X - pViewport->uViewportTL_X; + pSkyPolygon.field_24 = 0x2000000u; + array_50AC10[2].vWorldViewProjY = v4; + array_50AC10[3].vWorldViewProjX = v5; + array_50AC10[3].vWorldViewProjY = v3; + v36 = (double)(pViewport->uViewportBR_X - pViewport->uViewportTL_X) * 0.5; + v6 = tan(0.6457717418670654); + v31 = 0; + v33 = 65536 / (signed int)(signed __int64)(v36 / v6 + 0.5); + if ( (signed int)pSkyPolygon.uNumVertices <= 0 ) + goto LABEL_16; + v7 = (char *)&array_50AC10[0].vWorldViewProjY; + while ( 1 ) + { + LODWORD(v27) = *(_DWORD *)v7; + v26 = v27 + 6.7553994e15; + v29 = v27; + v38 = pSkyPolygon.ptr_38->field_14; + v39 = (unsigned __int64)(v38 * (signed __int64)(v33 * (v30 - v27))) >> 16; + v8 = v39 + pSkyPolygon.ptr_38->field_C; + v39 = v33 * (v30 - v27); + v35 = v8; + v38 = pSkyPolygon.ptr_38->field_20; + v39 = (unsigned __int64)(v38 * (signed __int64)(v33 * (v30 - v27))) >> 16; + v36 = v39 + pSkyPolygon.ptr_38->field_18; + v38 = pSkyPolygon.v_18.z; + v9 = (unsigned __int64)(pSkyPolygon.v_18.z * (signed __int64)(v33 * (v30 - v27))) >> 16; + v10 = pSkyPolygon.v_18.x + v9; + v39 = pSkyPolygon.v_18.x + v9; + if ( pSkyPolygon.v_18.x + v9 > 0 ) + { + v10 = 0; + v39 = 0; + } + v11 = (signed __int64)*((float *)v7 - 1); + v38 = v10; + v12 = *(float *)v7 - 1.0; + v13 = v33 * (pViewport->uScreenCenterX - v11); + v34 = -pSkyPolygon.field_24; + v32 = (signed __int64)v12; + v14 = v33 * (v30 - v32); + while ( 1 ) + { + v40 = v14; + if ( !v10 ) + goto LABEL_12; + v37 = abs((int)v34 >> 14); + v15 = abs(v10); + if ( v37 <= v15 || v32 <= (signed int)pViewport->uViewportTL_Y ) + { + if ( v39 <= 0 ) + break; + } + v14 = v40; +LABEL_12: + v37 = pSkyPolygon.v_18.z; + v16 = (unsigned __int64)(pSkyPolygon.v_18.z * (signed __int64)v14) >> 16; + --v32; + v14 += v33; + v10 = pSkyPolygon.v_18.x + v16; + v39 = pSkyPolygon.v_18.x + v16; + v38 = pSkyPolygon.v_18.x + v16; + } + LODWORD(v17) = LODWORD(v34) << 16; + //HIDWORD(v17) = LODWORD(v34) >> 16; + HIDWORD(v17) = v34 >> 16; + //v17 = (int)v34 >> 16; + //v17 = v17 << 16; + v40 = v17 / v38;//v38 = -42331 + v18 = v17 / v38; + if ( v18 < 0 ) + v18 = pODMRenderParams->shading_dist_mist; + v40 = v13; + v37 = pSkyPolygon.ptr_38->field_10; + v40 = v13; + v37 = v35 + ((unsigned __int64)(v37 * (signed __int64)v13) >> 16); + v35 = pSkyPolygon.ptr_38->field_1C; + v36 += (unsigned __int64)(v35 * (signed __int64)v13) >> 16; + v35 = 224 * pMiscTimer->uTotalGameTimeElapsed + + ((signed int)((unsigned __int64)(v37 * (signed __int64)v18) >> 16) >> 3); + v40 = (unsigned __int64)(v36 * (signed __int64)v18) >> 16; + v19 = pSkyPolygon.pTexture; + v36 = pSkyPolygon.pTexture->uTextureWidth; + v7 += 48; + v20 = (double)v36 * 65536.0; + HIDWORD(v36) = 224 * pMiscTimer->uTotalGameTimeElapsed + (v40 >> 3); + ++v31; + array_50AC10[v31 - 1].u = (double)v35 / v20; + v21 = (double)SHIDWORD(v36); + HIDWORD(v36) = v19->uTextureHeight; + v22 = (double)SHIDWORD(v36); + HIDWORD(v36) = v18 >> 16; + //v24 = __OFSUB__(v31, pSkyPolygon.uNumVertices); + //v23 = ((v31 - pSkyPolygon.uNumVertices) & 0x80000000u) != 0; + array_50AC10[v31 - 1].v = v21 / (v22 * 65536.0); + //array_50AC10[v31 - 1].vWorldViewPosition.x = (double)pODMRenderParams->shading_dist_mist; + array_50AC10[v31 - 1].vWorldViewPosition.x = (double)0x2000; + array_50AC10[v31 - 1]._rhw = 1.0 / (double)SHIDWORD(v36); + //if ( !(v23 ^ v24) ) + if ( v31 == pSkyPolygon.uNumVertices ) + { +LABEL_16: + pRenderer->DrawSkyPolygon(pSkyPolygon.uNumVertices, + &pSkyPolygon, pBitmaps_LOD->pHardwareTextures[(signed __int16)pSkyPolygon.uTileBitmapID]); + array_50AC10[0].vWorldViewProjY = v28; + array_50AC10[1].vWorldViewProjY = array_50AC10[1].vWorldViewProjY + 30.0; + array_50AC10[2].vWorldViewProjY = array_50AC10[2].vWorldViewProjY + 30.0; + array_50AC10[3].vWorldViewProjY = v28; + pRenderer->DrawSkyPolygon(pSkyPolygon.uNumVertices, &pSkyPolygon, pBitmaps_LOD->pHardwareTextures[(signed __int16)pSkyPolygon.uTileBitmapID]); + return; + } + } + } +}*/ //----- (0047A384) -------------------------------------------------------- void ODM_LoadAndInitialize(const char *pLevelFilename, ODMRenderParams *thisa)
--- a/mm7_4.cpp Mon Oct 07 09:31:18 2013 +0600 +++ b/mm7_4.cpp Mon Oct 07 09:31:32 2013 +0600 @@ -1404,7 +1404,7 @@ int v8; // [sp+Ch] [bp-8h]@3 int v9; // [sp+10h] [bp-4h]@2 int a2a; // [sp+1Ch] [bp+8h]@1 - + return 0; v3 = 0; result = word_4EE088_sound_ids[uSoundID]; v5 = this; @@ -3445,7 +3445,7 @@ v11 = &pParty->pHirelings[1]; memset(v11, 0, sizeof(NPCData)); } - pParty->field_709 = 0; + pParty->hirelingScrollPosition = 0; pParty->CountHirelings(); dword_591084 = 0; pMessageQueue_50CBD0->AddMessage(UIMSG_Escape, 1, 0); @@ -3493,7 +3493,7 @@ v13 = pParty->pHireling1Name; } strcpy(v13, v15); - pParty->field_709 = 0; + pParty->hirelingScrollPosition = 0; pParty->CountHirelings(); pMessageQueue_50CBD0->AddMessage(UIMSG_Escape, 1, 0); @@ -3554,7 +3554,7 @@ v11 = &pParty->pHirelings[1]; memset(v11, 0, sizeof(NPCData)); } - pParty->field_709 = 0; + pParty->hirelingScrollPosition = 0; pParty->CountHirelings(); dword_591084 = 0; pMessageQueue_50CBD0->AddMessage(UIMSG_Escape, 1, 0);
--- a/mm7_5.cpp Mon Oct 07 09:31:18 2013 +0600 +++ b/mm7_5.cpp Mon Oct 07 09:31:32 2013 +0600 @@ -357,11 +357,11 @@ //while ( _this < (signed int)pNPCStats->uNumNewNPCs ); } - if ( (signed int)(hireling_idx + (unsigned __int8)pParty->field_709) < uAction ) + if ( (signed int)(hireling_idx + pParty->hirelingScrollPosition) < uAction ) { //Actor::Actor(&actor); memset(&actor, 0, 0x344u); - actor.sNPC_ID += -1 - (unsigned __int8)pParty->field_709 - hireling_idx; + actor.sNPC_ID += -1 - pParty->hirelingScrollPosition - hireling_idx; pActor = &actor; GameUI_InitializeDialogue(&actor, true); } @@ -1343,26 +1343,26 @@ if ( uCurrentHouse_Animation == 153 ) PlayHouseSound(0x99u, HouseSound_Greeting_2); pVideoPlayer->Unload(); - if ( dword_5B65CC ) + if ( npcIdToDismissAfterDialogue ) { - pParty->field_709 = 0; - LOBYTE(pNPCStats->pNewNPCData[dword_5B65CC].uFlags) &= 0x7Fu; + pParty->hirelingScrollPosition = 0; + LOBYTE(pNPCStats->pNewNPCData[npcIdToDismissAfterDialogue].uFlags) &= 0x7Fu; pParty->CountHirelings(); viewparams->bRedrawGameUI = true; - dword_5B65CC = 0; + npcIdToDismissAfterDialogue = 0; } DialogueEnding(); pCurrentScreen = SCREEN_GAME; viewparams->bRedrawGameUI = true; continue; case SCREEN_NPC_DIALOGUE://click escape - if ( dword_5B65CC ) + if ( npcIdToDismissAfterDialogue ) { - pParty->field_709 = 0; - LOBYTE(pNPCStats->pNewNPCData[dword_5B65CC].uFlags) &= 0x7Fu; + pParty->hirelingScrollPosition = 0; + LOBYTE(pNPCStats->pNewNPCData[npcIdToDismissAfterDialogue].uFlags) &= 0x7Fu; pParty->CountHirelings(); viewparams->bRedrawGameUI = true; - dword_5B65CC = 0; + npcIdToDismissAfterDialogue = 0; } //goto LABEL_317; DialogueEnding(); @@ -1574,22 +1574,22 @@ { GUIWindow::Create(626, 179, 0, 0, WINDOW_PressedButton2, (int)pBtn_NPCRight, 0); v37 = (pParty->pHirelings[0].pName != 0) + (pParty->pHirelings[1].pName != 0) + (unsigned __int8)pParty->field_70A - 2; - if ( (unsigned __int8)pParty->field_709 < v37 ) + if ( pParty->hirelingScrollPosition < v37 ) { - ++pParty->field_709;//??? maybe number of the first cell??? - if ( (unsigned __int8)pParty->field_709 >= v37 ) - pParty->field_709 = (pParty->pHirelings[0].pName != 0) + (pParty->pHirelings[1].pName != 0) + pParty->field_70A - 2; + ++pParty->hirelingScrollPosition;//??? maybe number of the first cell??? + if ( pParty->hirelingScrollPosition >= v37 ) + pParty->hirelingScrollPosition = (pParty->pHirelings[0].pName != 0) + (pParty->pHirelings[1].pName != 0) + pParty->field_70A - 2; } } else { GUIWindow::Create(469, 179, 0, 0, WINDOW_PressedButton2, (int)pBtn_NPCLeft, 0); - if ( pParty->field_709 ) + /*if ( pParty->field_709 ) { --pParty->field_709; if ( pParty->field_709 < 1 ) pParty->field_709 = 0; - } + }*/ } GameUI_DrawHiredNPCs(); continue;
--- a/mm7_data.cpp Mon Oct 07 09:31:18 2013 +0600 +++ b/mm7_data.cpp Mon Oct 07 09:31:32 2013 +0600 @@ -1055,7 +1055,7 @@ int dword_5B65C0; // weak int dword_5B65C4; // weak int dword_5B65C8_timers_count; // weak -int dword_5B65CC; // weak +int npcIdToDismissAfterDialogue; // weak signed int dword_5B65D0_dialogue_actor_npc_id; // weak int dword_5C3418; // weak int dword_5C341C; // weak @@ -1348,7 +1348,6 @@ int dword_F8B1F4; // weak - //_UNKNOWN unk_F8BA50; // weak char byte_F8BC0C; // weak int bGameoverLoop = 0; // weak
--- a/mm7_data.h Mon Oct 07 09:31:18 2013 +0600 +++ b/mm7_data.h Mon Oct 07 09:31:32 2013 +0600 @@ -703,7 +703,7 @@ extern int dword_5B65C0; // weak extern int dword_5B65C4; // weak extern int dword_5B65C8_timers_count; // weak -extern int dword_5B65CC; // weak +extern int npcIdToDismissAfterDialogue; // weak extern int dword_5B65D0_dialogue_actor_npc_id; // weak extern int dword_5C3418; // weak extern int dword_5C341C; // weak