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,
42, "FED_FXQ", 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,
56, "FED_RES", ACTION_CLICKORARROWS, 27, 0, 0, 2, 0, 0,
5, "FET_DEF", ACTION_STANDARD, 50, 0, 141, 3, 0, 0,
@@ -460,12 +460,14 @@ void CMenuManager::SaveSettings()

// Graphics Setup
const FxQuality_e nFxQuality = g_fx.GetFxQuality();
const FxQuality_e nEffectsQuality = Fx_c::GetEffectsQuality();
const unsigned char nFilterQuality = Fx_c::GetTextureFilteringQuality();
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, &nFxQuality, sizeof(nFxQuality));
CFileMgr::Write(hFile, &nEffectsQuality, sizeof(nEffectsQuality));
CFileMgr::Write(hFile, &nFilterQuality, sizeof(nFilterQuality));
CFileMgr::Write(hFile, &m_fDrawDistance, sizeof(m_fDrawDistance));
CFileMgr::Write(hFile, &m_bAspectRatioMode, sizeof(m_bAspectRatioMode));
@@ -529,12 +531,13 @@ void CMenuManager::LoadSettings()
CFileMgr::Read(hFile, LangAcronym, 2);

// Graphics Setup
FxQuality_e nFxQuality;
FxQuality_e nFxQuality, nEffectsQuality;
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, &nFxQuality, sizeof(nFxQuality));
CFileMgr::Read(hFile, &nEffectsQuality, sizeof(nEffectsQuality));
CFileMgr::Read(hFile, &nFilterQuality, sizeof(nFilterQuality));
CFileMgr::Read(hFile, &m_fDrawDistance, sizeof(m_fDrawDistance));
CFileMgr::Read(hFile, &m_bAspectRatioMode, sizeof(m_bAspectRatioMode));
@@ -552,6 +555,7 @@ void CMenuManager::LoadSettings()
m_nLanguage = CText::GetLanguageIndexByAcronym(LangAcronym);

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

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

// 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()
{
_asm
@@ -1771,19 +1841,20 @@ static StaticPatcher Patcher([](){
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,
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[] = {
(void*)0x579EF0, (void*)0x579DDE, (void*)0x579DE6,
(void*)0x579DB9, (void*)0x579DB1, (void*)0x579DC1,
(void*)0x579DD6, (void*)0x579E37, (void*)0x579E67,
(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*)0x579F8F, (void*)0x579F97, (void*)0x57A05A,
(void*)0x57A141, (void*)0x579FB0, (void*)0x57A005,
(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<const void*>(0x579DA6, StandardMenusRightColumn_Table);
@@ -79,6 +79,7 @@ enum eMenuActions
MENUACTION_AUTOINSTALL_UPDATES,
MENUACTION_CHECKING_PERIOD,
MENUACTION_TEXTURE_FILTERMODE,
MENUACTION_EFFECTS_QUALITY,

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

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 FxQuality_e Fx_c::GetFxQuality() { EAXJMP(0x49EA50); }
@@ -44,4 +45,21 @@ unsigned char Fx_c::GetMaxTextureFilteringQuality()
}
}
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:
// VCS PC class extension
static unsigned char m_bTextureFiltering;
static FxQuality_e m_bEffectsQuality;

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

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

static FxQuality_e GetEffectsQuality()
{ return m_bEffectsQuality; }

static unsigned char GetMaxTextureFilteringQuality();
};

@@ -222,6 +222,7 @@ void ActivateSerialAction();
void AutoInstallUpdatesAction();
void CheckEveryAction();
void TextureFilteringAction();
void EffectsQualityAction();
void VehAudioHook();
//void RotorsHook();
void Language6Action();
@@ -484,7 +485,7 @@ const BYTE PCMenuActionsTable[] = {
7, 8, 9, 10, 11, 12, 13, 14, 15,
16, 17, 18, 19, 20, 21, 22, 23,
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[] = {
(void*)0x57D397, (void*)0x57D2FA, (void*)0x57D322,
@@ -500,7 +501,7 @@ const void* const PCMenuActionsAddresses[] = {
(void*)0x57D21F, (void*)0x57CF1B, (void*)0x57CF3B,
(void*)0x57D447, Language6Action, UpdaterMenuAction,
DLCMenuAction, ActivateSerialAction, AutoInstallUpdatesAction,
CheckEveryAction, TextureFilteringAction };
CheckEveryAction, TextureFilteringAction, EffectsQualityAction };

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 },
@@ -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()
{
_asm

0 comments on commit 2c5ee94

Please sign in to comment.