creeme no es necesario volver a un main mas viejo para que sea optimo, solo es aplicar ciertas tecnigas eficientes de engines modernos, y sin necesidad de reescribir todos los sistemas se vuelve muy liviano, ahora si reescribes los sistemas a algo mas eficiente, uff, ese main de 16 bits te va bien hasta en una pc del 2006, ya que si cargas objetos originales del season6 no escalan a texturas mas grandes que 1024, y en su mayoria viene con texturas tan pequeñas de 256 pixles, como también los mesh no tienen huesos grandes, o vertices muy grandes como juegos modernos, lo que afecta mucho el rendimiento es el uso instantaneo de renderizado, por eso solo con aplicar shader no basta, porque sigues haciendo lo mismo de usar cpu para almacenar, y cargar al gpu en cada frame, que es exactamente lo que causa el problema de bajo rendimiento, existe un cuello de botella y es en el render principal, ahora es bonito pensar que se puede refactorizar o apuntar a crear un main de baja version porque es "mas eficiente", pero la realidad lo unico bueno de eso es que reinicias todos los sistemas a tu manera migrando poco a poco, pero si atacas directamente el tema de renderizar de manera instantanea, resuelves el problema de cuello de botella, y te queda un juego muy liviano comparado vs el main.exe season6 original, que puedes escalar a versiones altas, o bajar a versiones bajas, sin pedos, incluso aplicar todo lo que te digo en una main.dll es posible, hice algunas pruebas, y el rendimiento es abismal, pero al tener que tocas muchas offset no es viable hacerlo para emuladores ajenos, por ejemplo no podria crear una libreria .dll que funcione en mu emu louis, o emulador de zeta, o x, tendria que ser necesario implementarlo directo en main.dll hay muchas cosas que mejoran sin reescribir todo, el problema es aplicarlo de la manera adecuada
void CWINHANDLE::OFFSET__fixactiontarget()
{
SetByte(0x00813BF1 + 3, (0x01)); //-- fixed skill tooltip
SetByte(0x004EBD01 + 6, (0x01)); //-- Fix Tooltip Ancient
SetDword(0x0075366A + 3, (0xA)); //-- fixed skill darklord
SetCompleteHook(0xE8, 0x004D6EAA, &MoveCharactersClient);
SetCompleteHook(0xE8, 0x004D7791, &MoveCharactersClient);
SetCompleteHook(0xE8, 0x004D957C, &MoveCharactersClient);
SetCompleteHook(0xE8, 0x0055AFB8, &AddObjectDescription);
SetCompleteHook(0xE8, 0x004D9C8B, &RenderObjectDescription);
}
void CWINHANDLE::OFFSET__animationplaymodel()
{
SetCompleteHook(0xE8, 0x004F0356, FuncToDWORD(&BMD::AnimationPlayModel)); // CSParts::IRender
SetCompleteHook(0xE8, 0x004F05E0, FuncToDWORD(&BMD::AnimationPlayModel)); // CSAnimationParts::Animation
//SetCompleteHook(0xE8, 0x004F1079, FuncToDWORD(&BMD::AnimationPlayModel));
SetCompleteHook(0xE8, 0x00505D07, FuncToDWORD(&BMD::AnimationPlayModel));
SetCompleteHook(0xE8, 0x00505ED4, FuncToDWORD(&BMD::AnimationPlayModel));
SetCompleteHook(0xE8, 0x00507285, FuncToDWORD(&BMD::AnimationPlayModel));
SetCompleteHook(0xE8, 0x0056653D, FuncToDWORD(&BMD::AnimationPlayModel));
SetCompleteHook(0xE8, 0x005EF3CE, FuncToDWORD(&BMD::AnimationPlayModel));
SetCompleteHook(0xE8, 0x005FCEB3, FuncToDWORD(&BMD::AnimationPlayModel));
SetCompleteHook(0xE8, 0x006F53C8, FuncToDWORD(&BMD::AnimationPlayModel));
SetCompleteHook(0xE8, 0x00700FFA, FuncToDWORD(&BMD::AnimationPlayModel));
SetCompleteHook(0xE8, 0x00701279, FuncToDWORD(&BMD::AnimationPlayModel));
SetCompleteHook(0xE8, 0x00701302, FuncToDWORD(&BMD::AnimationPlayModel));
SetCompleteHook(0xE8, 0x007058BF, FuncToDWORD(&BMD::AnimationPlayModel));
SetCompleteHook(0xE8, 0x007077A3, FuncToDWORD(&BMD::AnimationPlayModel));
SetCompleteHook(0xE8, 0x007079EB, FuncToDWORD(&BMD::AnimationPlayModel));
SetCompleteHook(0xE8, 0x00707BB0, FuncToDWORD(&BMD::AnimationPlayModel));
SetCompleteHook(0xE8, 0x00713A89, FuncToDWORD(&BMD::AnimationPlayModel));
SetCompleteHook(0xE8, 0x0071EAC2, FuncToDWORD(&BMD::AnimationPlayModel));
SetCompleteHook(0xE8, 0x00720749, FuncToDWORD(&BMD::AnimationPlayModel));
SetCompleteHook(0xE8, 0x007209C3, FuncToDWORD(&BMD::AnimationPlayModel));
SetCompleteHook(0xE8, 0x00720BAE, FuncToDWORD(&BMD::AnimationPlayModel));
SetCompleteHook(0xE8, 0x0072214E, FuncToDWORD(&BMD::AnimationPlayModel));
SetCompleteHook(0xE8, 0x0072491C, FuncToDWORD(&BMD::AnimationPlayModel));
SetCompleteHook(0xE8, 0x0074749A, FuncToDWORD(&BMD::AnimationPlayModel));
//SetCompleteHook(0xE8, 0x008E77C5, FuncToDWORD(&BMD::AnimationPlayModel));
//SetCompleteHook(0xE8, 0x008F0DC5, FuncToDWORD(&BMD::AnimationPlayModel));
//SetCompleteHook(0xE8, 0x008F4F25, FuncToDWORD(&BMD::AnimationPlayModel));
//SetCompleteHook(0xE8, 0x008F9C95, FuncToDWORD(&BMD::AnimationPlayModel));
SetCompleteHook(0xE8, 0x0092AE37, FuncToDWORD(&BMD::AnimationPlayModel));
}
void CWINHANDLE::OFFSET__playmovephysics()
{
SetCompleteHook(0xE8, 0x0051E75C, FuncToDWORD(&CPhysicsVertex::Move));
SetCompleteHook(0xE9, 0x0051CB20, FuncToDWORD(&CPhysicsVertex::AddToForce));
SetCompleteHook(0xE9, 0x0051C890, FuncToDWORD(&CPhysicsVertex::UpdateForce));
SetCompleteHook(0xE9, 0x0051CF10, FuncToDWORD(&CPhysicsVertex::DoOneTimeMove));
SetCompleteHook(0xE9, 0x0051CFE0, FuncToDWORD(&CPhysicsVertex::AddOneTimeMove));
SetCompleteHook(0xE9, 0x0051E440, FuncToDWORD(&CPhysicsCloth::InitForces));
SetCompleteHook(0xE8, 0x0051E29D, FuncToDWORD(&CPhysicsCloth::Move));
SetCompleteHook(0xE8, 0x0051FED4, FuncToDWORD(&CPhysicsCloth::Move));
}
void CWINHANDLE::Initialize()
{
CWINHANDLE::OFFSET__createjoint();
CWINHANDLE::OFFSET__createeffect();
CWINHANDLE::OFFSET__createparticle();
CWINHANDLE::OFFSET__fixactiontarget();
CWINHANDLE::OFFSET__renderNormalizer();
CWINHANDLE::OFFSET__animationplaymodel();
CWINHANDLE::OFFSET__playmovephysics();
SetCompleteHook(0xE8, 0x005DA43A, &RenderTerrainFace);
SetCompleteHook(0xE8, 0x00860B1D, &OPENGL32__AlphaFunc204);
SetCompleteHook(0xE8, 0x00860B37, &OPENGL32__AlphaFunc205);
SetCompleteHook(0xE9, 0x00547537, &RENDERMESH_INTELLIGEN);
SetCompleteHook(0xE9, 0x004DA3A1, &MAIN_SCENE_THREAD_LOOP);
SetCompleteHook(0xE9, 0x004DE9AF, &LOGINSCENE_CAMERA_MOVE);
SetCompleteHook(0xE9, 0x004DE7CB, &LOGINSCENE_CAMERA_ROTATE);
SetCompleteHook(0xE8, 0x004D9D13, &CWINHANDLE::CalcFPS);
SetCompleteHook(0xE8, 0x004D2103, &CWINHANDLE::OpenMainExe);
SetCompleteHook(0xE8, 0x004CF56C, &CWINHANDLE::CloseMainExe);
SetCompleteHook(0xE8, 0x004D04BA, &CWINHANDLE::CloseMainExe);
SetCompleteHook(0xE8, 0x0077255E, &CWINHANDLE::CloseMainExe);
SetCompleteHook(0xE8, 0x004D9F2A, &CWINHANDLE::Set3DSoundPosition);
}