#include "stdafx.h"
#include "Resolution.h"
#include "Util.h"
void InitResolution()
{
SetByte(0x0064819B, 0x1D);
SetCompleteHook(0xE9, 0x00648274, &ResolutionSwitch);
SetCompleteHook(0xE9, 0x00649553, &ResolutionSwitchFont);
SetCompleteHook(0xE9, 0x004EECA1, &ResolutionMoveList);
SetCompleteHook(0xE9, 0x004EE5EB, &ResolutionMoveList2);
SetCompleteHook(0xE8, 0x0045D554, &ResolutionKanturu);
}
__declspec(naked) void ResolutionSwitch()
{
static DWORD ResolutionSwitchAddress1 = 0x00648302;
_asm
{
Mov Edx, Dword Ptr Ds : [0x07AFEC78]; //MAIN_RESOLUTION
Mov Dword Ptr Ss : [Ebp - 0x338], Edx;
Cmp Dword Ptr Ss : [Ebp - 0x338], 0x00;
Jnz NEXT1;
Mov Dword Ptr Ds : [0x0077E350], 640; //MAIN_RESOLUTION_X
Mov Dword Ptr Ds : [0x0077E354], 480; //MAIN_RESOLUTION_Y
Jmp EXIT;
NEXT1:
Cmp Dword Ptr Ss : [Ebp - 0x338], 0x01;
Jnz NEXT2;
Mov Dword Ptr Ds : [0x0077E350], 800; //MAIN_RESOLUTION_X
Mov Dword Ptr Ds : [0x0077E354], 600; //MAIN_RESOLUTION_Y
Jmp EXIT;
NEXT2:
Cmp Dword Ptr Ss : [Ebp - 0x338], 0x02;
Jnz NEXT3;
Mov Dword Ptr Ds : [0x0077E350], 1024; //MAIN_RESOLUTION_X
Mov Dword Ptr Ds : [0x0077E354], 768; //MAIN_RESOLUTION_Y
Jmp EXIT;
NEXT3:
Cmp Dword Ptr Ss : [Ebp - 0x338], 0x03;
Jnz NEXT4;
Mov Dword Ptr Ds : [0x0077E350], 1280; //MAIN_RESOLUTION_X
Mov Dword Ptr Ds : [0x0077E354], 1024; //MAIN_RESOLUTION_Y
Jmp EXIT;
NEXT4:
Cmp Dword Ptr Ss : [Ebp - 0x338], 0x04;
Jnz NEXT5;
Mov Dword Ptr Ds : [0x0077E350], 1360; //MAIN_RESOLUTION_X
Mov Dword Ptr Ds : [0x0077E354], 768; //MAIN_RESOLUTION_Y
Jmp EXIT;
NEXT5:
Cmp Dword Ptr Ss : [Ebp - 0x338], 0x05;
Jnz NEXT6;
Mov Dword Ptr Ds : [0x0077E350], 1440; //MAIN_RESOLUTION_X
Mov Dword Ptr Ds : [0x0077E354], 900; //MAIN_RESOLUTION_Y
Jmp EXIT;
NEXT6:
Cmp Dword Ptr Ss : [Ebp - 0x338], 0x06;
Jnz NEXT7;
Mov Dword Ptr Ds : [0x0077E350], 1600; //MAIN_RESOLUTION_X
Mov Dword Ptr Ds : [0x0077E354], 900; //MAIN_RESOLUTION_Y
Jmp EXIT;
NEXT7:
Cmp Dword Ptr Ss : [Ebp - 0x338], 0x07;
Jnz NEXT8;
Mov Dword Ptr Ds : [0x0077E350], 1680; //MAIN_RESOLUTION_X
Mov Dword Ptr Ds : [0x0077E354], 1050; //MAIN_RESOLUTION_Y
Jmp EXIT;
NEXT8:
Cmp Dword Ptr Ss : [Ebp - 0x338], 0x08;
Jnz EXIT;
Mov Dword Ptr Ds : [0x0077E350], 1920; //MAIN_RESOLUTION_X
Mov Dword Ptr Ds : [0x0077E354], 1080; //MAIN_RESOLUTION_Y
EXIT:
Jmp[ResolutionSwitchAddress1];
}
}
__declspec(naked) void ResolutionSwitchFont()
{
static DWORD ResolutionSwitchFontAddress1 = 0x006495CD;
static DWORD Resolution_ClipX1 = 0x007588B4;
static DWORD Resolution_ClipX2 = 0X007588C0;
static float Float2000 = 2000.0f;
_asm
{
Mov Edx, Dword Ptr Ds : [0x0077E350]; //MAIN_RESOLUTION_X
Mov Dword Ptr Ss : [Ebp - 0xEDC], Edx;
Cmp Dword Ptr Ss : [Ebp - 0xEDC], 640;
Jnz NEXT1;
Mov Dword Ptr Ds : [0x07513340], 0x0C; //MAIN_FONT_SIZE
Jmp EXIT;
NEXT1:
Cmp Dword Ptr Ss : [Ebp - 0xEDC], 800;
Jnz NEXT2;
Mov Dword Ptr Ds : [0x07513340], 0x0D; //MAIN_FONT_SIZE
Jmp EXIT;
NEXT2:
Cmp Dword Ptr Ss : [Ebp - 0xEDC], 1024;
Jnz NEXT3;
Mov Dword Ptr Ds : [0x07513340], 0x0E; //MAIN_FONT_SIZE
Jmp EXIT;
NEXT3:
Cmp Dword Ptr Ss : [Ebp - 0xEDC], 1280;
Jnz NEXT4;
Mov Dword Ptr Ds : [0x07513340], 0x0F; //MAIN_FONT_SIZE
Jmp EXIT;
NEXT4:
Mov Dword Ptr Ds : [0x07513340], 0x0F; //MAIN_FONT_SIZE
Push Float2000;
Push Resolution_ClipX1;
Call[SetFloat];
Add Esp, 0x08;
Push Float2000;
Push Resolution_ClipX2;
Call[SetFloat];
Add Esp, 0x08;
EXIT:
Jmp[ResolutionSwitchFontAddress1];
}
}
__declspec(naked) void ResolutionMoveList()
{
static DWORD ResolutionMoveListAddress1 = 0x004EED49;
static DWORD ResolutionMoveListAddress2 = 0x004EECAC;
_asm
{
Mov Eax, Dword Ptr Ds : [0x0077E350]; //MAIN_RESOLUTION_X
Mov Dword Ptr Ss : [Ebp - 0x1B4], Eax;
Cmp Dword Ptr Ss : [Ebp - 0x1B4], 0x500;
Jbe EXIT;
Jmp[ResolutionMoveListAddress1];
EXIT:
Jmp[ResolutionMoveListAddress2];
}
}
__declspec(naked) void ResolutionMoveList2()
{
static DWORD ResolutionMoveListAddress3 = 0x004EE693;
static DWORD ResolutionMoveListAddress4 = 0x004EE5F6;
_asm
{
Mov Eax, Dword Ptr Ds : [0x0077E350]; //MAIN_RESOLUTION_X
Mov Dword Ptr Ss : [Ebp - 0x1B4], Eax;
Cmp Dword Ptr Ss : [Ebp - 0x1B4], 0x500;
Jbe EXIT;
Jmp[ResolutionMoveListAddress3];
EXIT:
Jmp[ResolutionMoveListAddress4];
}
}
bool ResolutionKanturu()
{
if (m_Resolution >= 4)
{
*(WORD*)(*(DWORD*)(0x0078F7BC) + 0x0C) = 0xD7;
}
return ((bool(__stdcall*)(int Code)) 0x0045E06F)(30);
}