Skip to content
Permalink
Browse files
Effects Quality option
Removed mipmapping option as it's broken anyway
  • Loading branch information
CookiePLMonster committed Jul 20, 2014
1 parent 8640f45 commit 2c5ee9440dfc3f1e441dafa5fdfeddf2dcabe819
Showing with 145 additions and 12 deletions.
  1. +79 −8 VCS PC/Frontend.cpp
  2. +1 −0 VCS PC/Frontend.h
  3. +20 −2 VCS PC/FxSystem.cpp
  4. +7 −0 VCS PC/FxSystem.h
  5. +38 −2 VCS PC/VCSPC.cpp
@@ -239,7 +239,7 @@ MenuItem CMenuManager::ms_pMenus[] = {
26, "FED_WIS", ACTION_CLICKORARROWS, 27, 0, 0, 2, 0, 0, 26, "FED_WIS", ACTION_CLICKORARROWS, 27, 0, 0, 2, 0, 0,
42, "FED_FXQ", ACTION_CLICKORARROWS, 27, 0, 0, 2, 0, 0, 42, "FED_FXQ", ACTION_CLICKORARROWS, 27, 0, 0, 2, 0, 0,
MENUACTION_TEXTURE_FILTERMODE, "FED_TXF", ACTION_CLICKORARROWS, 27, 0, 0, 2, 0, 0, MENUACTION_TEXTURE_FILTERMODE, "FED_TXF", ACTION_CLICKORARROWS, 27, 0, 0, 2, 0, 0,
43, "FED_MIP", ACTION_CLICKORARROWS, 27, 0, 0, 2, 0, 0, MENUACTION_EFFECTS_QUALITY, "FED_EFF", ACTION_CLICKORARROWS, 27, 0, 0, 2, 0, 0,
44, "FED_AAS", ACTION_CLICKORARROWS, 27, 0, 0, 2, 0, 0, 44, "FED_AAS", ACTION_CLICKORARROWS, 27, 0, 0, 2, 0, 0,
56, "FED_RES", ACTION_CLICKORARROWS, 27, 0, 0, 2, 0, 0, 56, "FED_RES", ACTION_CLICKORARROWS, 27, 0, 0, 2, 0, 0,
5, "FET_DEF", ACTION_STANDARD, 50, 0, 141, 3, 0, 0, 5, "FET_DEF", ACTION_STANDARD, 50, 0, 141, 3, 0, 0,
@@ -460,12 +460,14 @@ void CMenuManager::SaveSettings()


// Graphics Setup // Graphics Setup
const FxQuality_e nFxQuality = g_fx.GetFxQuality(); const FxQuality_e nFxQuality = g_fx.GetFxQuality();
const FxQuality_e nEffectsQuality = Fx_c::GetEffectsQuality();
const unsigned char nFilterQuality = Fx_c::GetTextureFilteringQuality(); const unsigned char nFilterQuality = Fx_c::GetTextureFilteringQuality();
const RwInt32 nSubSystem = RwEngineGetCurrentSubSystem(); const RwInt32 nSubSystem = RwEngineGetCurrentSubSystem();


CFileMgr::Write(hFile, &m_bMipMapping, sizeof(m_bMipMapping)); //CFileMgr::Write(hFile, &m_bMipMapping, sizeof(m_bMipMapping));
CFileMgr::Write(hFile, &m_dwAppliedAntiAliasingLevel, sizeof(m_dwAppliedAntiAliasingLevel)); CFileMgr::Write(hFile, &m_dwAppliedAntiAliasingLevel, sizeof(m_dwAppliedAntiAliasingLevel));
CFileMgr::Write(hFile, &nFxQuality, sizeof(nFxQuality)); CFileMgr::Write(hFile, &nFxQuality, sizeof(nFxQuality));
CFileMgr::Write(hFile, &nEffectsQuality, sizeof(nEffectsQuality));
CFileMgr::Write(hFile, &nFilterQuality, sizeof(nFilterQuality)); CFileMgr::Write(hFile, &nFilterQuality, sizeof(nFilterQuality));
CFileMgr::Write(hFile, &m_fDrawDistance, sizeof(m_fDrawDistance)); CFileMgr::Write(hFile, &m_fDrawDistance, sizeof(m_fDrawDistance));
CFileMgr::Write(hFile, &m_bAspectRatioMode, sizeof(m_bAspectRatioMode)); CFileMgr::Write(hFile, &m_bAspectRatioMode, sizeof(m_bAspectRatioMode));
@@ -529,12 +531,13 @@ void CMenuManager::LoadSettings()
CFileMgr::Read(hFile, LangAcronym, 2); CFileMgr::Read(hFile, LangAcronym, 2);


// Graphics Setup // Graphics Setup
FxQuality_e nFxQuality; FxQuality_e nFxQuality, nEffectsQuality;
unsigned char nFilterQuality; unsigned char nFilterQuality;


CFileMgr::Read(hFile, &m_bMipMapping, sizeof(m_bMipMapping)); //CFileMgr::Read(hFile, &m_bMipMapping, sizeof(m_bMipMapping));
CFileMgr::Read(hFile, &m_dwAntiAliasingLevel, sizeof(m_dwAppliedAntiAliasingLevel)); CFileMgr::Read(hFile, &m_dwAntiAliasingLevel, sizeof(m_dwAppliedAntiAliasingLevel));
CFileMgr::Read(hFile, &nFxQuality, sizeof(nFxQuality)); CFileMgr::Read(hFile, &nFxQuality, sizeof(nFxQuality));
CFileMgr::Read(hFile, &nEffectsQuality, sizeof(nEffectsQuality));
CFileMgr::Read(hFile, &nFilterQuality, sizeof(nFilterQuality)); CFileMgr::Read(hFile, &nFilterQuality, sizeof(nFilterQuality));
CFileMgr::Read(hFile, &m_fDrawDistance, sizeof(m_fDrawDistance)); CFileMgr::Read(hFile, &m_fDrawDistance, sizeof(m_fDrawDistance));
CFileMgr::Read(hFile, &m_bAspectRatioMode, sizeof(m_bAspectRatioMode)); CFileMgr::Read(hFile, &m_bAspectRatioMode, sizeof(m_bAspectRatioMode));
@@ -552,6 +555,7 @@ void CMenuManager::LoadSettings()
m_nLanguage = CText::GetLanguageIndexByAcronym(LangAcronym); m_nLanguage = CText::GetLanguageIndexByAcronym(LangAcronym);


g_fx.SetFxQuality(nFxQuality); g_fx.SetFxQuality(nFxQuality);
Fx_c::SetEffectsQuality(nEffectsQuality);
Fx_c::SetTextureFilteringQuality(nFilterQuality); Fx_c::SetTextureFilteringQuality(nFilterQuality);


AudioEngine.SetMusicMasterVolume(m_nRadioVolume); AudioEngine.SetMusicMasterVolume(m_nRadioVolume);
@@ -1465,11 +1469,12 @@ void CMenuManager::SetDefaultPreferences(signed char bScreen)
// Graphics Setup // Graphics Setup
m_bFrameLimiterMode = 2; m_bFrameLimiterMode = 2;
m_bAspectRatioMode = 0; m_bAspectRatioMode = 0;
m_bMipMapping = true; //m_bMipMapping = true;
m_dwAppliedAntiAliasingLevel = m_dwAntiAliasingLevel = 1; m_dwAppliedAntiAliasingLevel = m_dwAntiAliasingLevel = 1;
m_dwResolution = m_dwAppliedResolution; m_dwResolution = m_dwAppliedResolution;
ms_lodDistScale = m_fDrawDistance = 1.2f; ms_lodDistScale = m_fDrawDistance = 1.2f;
g_fx.SetFxQuality(FXQUALITY_HIGH); g_fx.SetFxQuality(FXQUALITY_HIGH);
Fx_c::SetEffectsQuality(FXQUALITY_HIGH);
Fx_c::SetTextureFilteringQuality(1); // Trilinear Fx_c::SetTextureFilteringQuality(1); // Trilinear


// Reinit widescreen and framelimit stuff // Reinit widescreen and framelimit stuff
@@ -1745,6 +1750,71 @@ void __declspec(naked) TextureFiltering_RightColumn()
} }
} }


void __declspec(naked) EffectsQuality_RightColumn()
{
static const char aFed_Fxl[] = "FED_FXL";
static const char aFed_Fxm[] = "FED_FXM";
static const char aFed_Fxh[] = "FED_FXH";
_asm
{
mov ecx, [TheText]
mov eax, [Fx_c::m_bEffectsQuality]
test eax, eax
jz EffectsQuality_RightColumn_Low
dec eax
jz EffectsQuality_RightColumn_Medium
push offset aFed_Fxh
jmp EffectsQuality_RightColumn_Return

EffectsQuality_RightColumn_Low:
push offset aFed_Fxl
jmp EffectsQuality_RightColumn_Return

EffectsQuality_RightColumn_Medium:
push offset aFed_Fxm

EffectsQuality_RightColumn_Return:
push 57A161h
retn
}
}

void __declspec(naked) AntiAliasing_RightColumn()
{
static const char aFed_Aa1[] = "FED_AA1";
static const char aFed_Aa2[] = "FED_AA2";
static const char aFed_Aa3[] = "FED_AA3";
_asm
{
mov ecx, [TheText]
mov eax, [ebp].m_dwAntiAliasingLevel
cmp eax, 1
jle AntiAliasing_RightColumn_Off
sub eax, 2
jz AntiAliasing_RightColumn_2x
dec eax
jz AntiAliasing_RightColumn_4x
push offset aFed_Aa3
jmp AntiAliasing_RightColumn_Return

AntiAliasing_RightColumn_2x:
push offset aFed_Aa1
jmp AntiAliasing_RightColumn_Return

AntiAliasing_RightColumn_4x:
push offset aFed_Aa2
jmp AntiAliasing_RightColumn_Return

AntiAliasing_RightColumn_Return:
push 57A161h
retn

AntiAliasing_RightColumn_Off:
push 579F65h
retn
}
}

static void __declspec(naked) UserInputArrowSoundMenus() static void __declspec(naked) UserInputArrowSoundMenus()
{ {
_asm _asm
@@ -1771,19 +1841,20 @@ static StaticPatcher Patcher([](){
0x00, 0x01, 0x02, 0x1B, 0x1B, 0x1B, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x00, 0x01, 0x02, 0x1B, 0x1B, 0x1B, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09,
0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x0A, 0x0B, 0x0C, 0x1B, 0x0D, 0x0E, 0x0F, 0x10, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x0A, 0x0B, 0x0C, 0x1B, 0x0D, 0x0E, 0x0F, 0x10,
0x11, 0x12, 0x13, 0x1B, 0x1B, 0x1B, 0x14, 0x1B, 0x15, 0x16, 0x17, 0x1B, 0x1B, 0x11, 0x12, 0x13, 0x1B, 0x1B, 0x1B, 0x14, 0x1B, 0x15, 0x16, 0x17, 0x1B, 0x1B,
0x18, 0x19, 0x1A, 0x1B, 0x1B, 0x1B, 0x1B, 0x1C, 0x1D, 0x1E }; 0x18, 0x19, 0x1A, 0x1B, 0x1B, 0x1B, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F };


static const void* const StandardMenusRightColumn_Addresses[] = { static const void* const StandardMenusRightColumn_Addresses[] = {
(void*)0x579EF0, (void*)0x579DDE, (void*)0x579DE6, (void*)0x579EF0, (void*)0x579DDE, (void*)0x579DE6,
(void*)0x579DB9, (void*)0x579DB1, (void*)0x579DC1, (void*)0x579DB9, (void*)0x579DB1, (void*)0x579DC1,
(void*)0x579DD6, (void*)0x579E37, (void*)0x579E67, (void*)0x579DD6, (void*)0x579E37, (void*)0x579E67,
(void*)0x579DEE, (void*)0x579EAE, (void*)0x579EF8, (void*)0x579DEE, (void*)0x579EAE, (void*)0x579EF8,
(void*)0x57A0D3, (void*)0x579F57, (void*)0x579F6F, AntiAliasing_RightColumn, (void*)0x579F57, (void*)0x579F6F,
(void*)0x579F77, (void*)0x579F7F, (void*)0x579F87, (void*)0x579F77, (void*)0x579F7F, (void*)0x579F87,
(void*)0x579F8F, (void*)0x579F97, (void*)0x57A05A, (void*)0x579F8F, (void*)0x579F97, (void*)0x57A05A,
(void*)0x57A141, (void*)0x579FB0, (void*)0x57A005, (void*)0x57A141, (void*)0x579FB0, (void*)0x57A005,
(void*)0x579E7A, (void*)0x579F4F, (void*)0x579E6F, (void*)0x579E7A, (void*)0x579F4F, (void*)0x579E6F,
(void*)0x57A168, AutoInstallUpdates_RightColumm, CheckEvery_RightColumn, TextureFiltering_RightColumn }; (void*)0x57A168, AutoInstallUpdates_RightColumm, CheckEvery_RightColumn,
TextureFiltering_RightColumn, EffectsQuality_RightColumn };


Memory::Patch<BYTE>(0x579D9C, sizeof(StandardMenusRightColumn_Table)-1); Memory::Patch<BYTE>(0x579D9C, sizeof(StandardMenusRightColumn_Table)-1);
Memory::Patch<const void*>(0x579DA6, StandardMenusRightColumn_Table); Memory::Patch<const void*>(0x579DA6, StandardMenusRightColumn_Table);
@@ -79,6 +79,7 @@ enum eMenuActions
MENUACTION_AUTOINSTALL_UPDATES, MENUACTION_AUTOINSTALL_UPDATES,
MENUACTION_CHECKING_PERIOD, MENUACTION_CHECKING_PERIOD,
MENUACTION_TEXTURE_FILTERMODE, MENUACTION_TEXTURE_FILTERMODE,
MENUACTION_EFFECTS_QUALITY,


NUM_MENU_ACTIONS NUM_MENU_ACTIONS
}; };
@@ -5,7 +5,8 @@


Fx_c& g_fx = *(Fx_c*)0xA9AE00; Fx_c& g_fx = *(Fx_c*)0xA9AE00;


unsigned char Fx_c::m_bTextureFiltering; unsigned char Fx_c::m_bTextureFiltering;
FxQuality_e Fx_c::m_bEffectsQuality;


WRAPPER void Fx_c::SetFxQuality(FxQuality_e eQuality) { WRAPARG(eQuality); EAXJMP(0x49EA40); } WRAPPER void Fx_c::SetFxQuality(FxQuality_e eQuality) { WRAPARG(eQuality); EAXJMP(0x49EA40); }
WRAPPER FxQuality_e Fx_c::GetFxQuality() { EAXJMP(0x49EA50); } WRAPPER FxQuality_e Fx_c::GetFxQuality() { EAXJMP(0x49EA50); }
@@ -44,4 +45,21 @@ unsigned char Fx_c::GetMaxTextureFilteringQuality()
} }
} }
return bCachedMaxQuality; return bCachedMaxQuality;
} }


static StaticPatcher Patcher([](){
Memory::InjectHook(0x4A964D, Fx_c::GetEffectsQuality);
Memory::InjectHook(0x4A9662, Fx_c::GetEffectsQuality);
Memory::InjectHook(0x4A9678, Fx_c::GetEffectsQuality);

Memory::InjectHook(0x4A97A7, Fx_c::GetEffectsQuality);
Memory::InjectHook(0x4A97BC, Fx_c::GetEffectsQuality);
Memory::InjectHook(0x4A97D2, Fx_c::GetEffectsQuality);

Memory::InjectHook(0x4AA475, Fx_c::GetEffectsQuality);
Memory::InjectHook(0x4AA48C, Fx_c::GetEffectsQuality);

Memory::InjectHook(0x4AA56F, Fx_c::GetEffectsQuality);
Memory::InjectHook(0x4AA586, Fx_c::GetEffectsQuality);
});
@@ -14,6 +14,7 @@ class Fx_c
private: private:
// VCS PC class extension // VCS PC class extension
static unsigned char m_bTextureFiltering; static unsigned char m_bTextureFiltering;
static FxQuality_e m_bEffectsQuality;


public: public:
void SetFxQuality(FxQuality_e eQuality); void SetFxQuality(FxQuality_e eQuality);
@@ -26,6 +27,12 @@ class Fx_c
static unsigned char GetTextureFilteringQuality() static unsigned char GetTextureFilteringQuality()
{ return m_bTextureFiltering; } { return m_bTextureFiltering; }


static void SetEffectsQuality(FxQuality_e nQuality)
{ m_bEffectsQuality = nQuality; }

static FxQuality_e GetEffectsQuality()
{ return m_bEffectsQuality; }

static unsigned char GetMaxTextureFilteringQuality(); static unsigned char GetMaxTextureFilteringQuality();
}; };


@@ -222,6 +222,7 @@ void ActivateSerialAction();
void AutoInstallUpdatesAction(); void AutoInstallUpdatesAction();
void CheckEveryAction(); void CheckEveryAction();
void TextureFilteringAction(); void TextureFilteringAction();
void EffectsQualityAction();
void VehAudioHook(); void VehAudioHook();
//void RotorsHook(); //void RotorsHook();
void Language6Action(); void Language6Action();
@@ -484,7 +485,7 @@ const BYTE PCMenuActionsTable[] = {
7, 8, 9, 10, 11, 12, 13, 14, 15, 7, 8, 9, 10, 11, 12, 13, 14, 15,
16, 17, 18, 19, 20, 21, 22, 23, 16, 17, 18, 19, 20, 21, 22, 23,
24, 25, 26, 27, 28, 29, 33, 33, 24, 25, 26, 27, 28, 29, 33, 33,
30, 31, 32, 34, 35, 36, 37, 38, 39, 40 }; 30, 31, 32, 34, 35, 36, 37, 38, 39, 40, 41 };


const void* const PCMenuActionsAddresses[] = { const void* const PCMenuActionsAddresses[] = {
(void*)0x57D397, (void*)0x57D2FA, (void*)0x57D322, (void*)0x57D397, (void*)0x57D2FA, (void*)0x57D322,
@@ -500,7 +501,7 @@ const void* const PCMenuActionsAddresses[] = {
(void*)0x57D21F, (void*)0x57CF1B, (void*)0x57CF3B, (void*)0x57D21F, (void*)0x57CF1B, (void*)0x57CF3B,
(void*)0x57D447, Language6Action, UpdaterMenuAction, (void*)0x57D447, Language6Action, UpdaterMenuAction,
DLCMenuAction, ActivateSerialAction, AutoInstallUpdatesAction, DLCMenuAction, ActivateSerialAction, AutoInstallUpdatesAction,
CheckEveryAction, TextureFilteringAction }; CheckEveryAction, TextureFilteringAction, EffectsQualityAction };


const int iRadioTracks[NUM_RADIOSTATIONS][31] = { const int iRadioTracks[NUM_RADIOSTATIONS][31] = {
{ AA_OFFSET+1, AA_OFFSET+4, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922 }, { AA_OFFSET+1, AA_OFFSET+4, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922 },
@@ -7365,6 +7366,41 @@ void __declspec(naked) TextureFilteringAction()
} }
} }


void __declspec(naked) EffectsQualityAction()
{
_asm
{
mov eax, [Fx_c::m_bEffectsQuality]
mov dl, [esp+0Ch+4]
cmp dl, 0
jl EffectsQualityAction_Previous
inc eax
cmp eax, 2
jna EffectsQualityAction_Return
xor eax, eax
jmp EffectsQualityAction_Return

EffectsQualityAction_Previous:
test eax, eax
jz EffectsQualityAction_ToMax
dec eax
jmp EffectsQualityAction_Return

EffectsQualityAction_ToMax:
mov eax, 2

EffectsQualityAction_Return:
mov [Fx_c::m_bEffectsQuality], eax
mov ecx, esi
call CMenuManager::SaveSettings
pop edi
pop esi
mov al, bl
pop ebx
retn 8
}
}

void __declspec(naked) VehAudioHook() void __declspec(naked) VehAudioHook()
{ {
_asm _asm

0 comments on commit 2c5ee94

Please sign in to comment.