Code:
#include "StdAfx.h"
#include "SkyBox.h"
#include "ToolKit.h"
#include "Config.h"
struct FRGB
{
float r, g, b;
};
FRGB skycolor;
unsigned int textures[32][6];
bool DisplayInitialized;
typedef int(*TSkyHook)();
TSkyHook SkyHook = (TSkyHook)0x005B9260; //1.03k
typedef int(*TBlend) (int);
TBlend Blend = (TBlend)0x00635FD0; //1.03k
typedef int(*TUnBlend) ();
TUnBlend UnBlend = (TUnBlend)0x00635F50; //1.03k
int *MainState = (int*)0x00E609E8; //1.03k
int *Map = (int*)0x00E61E18; //1.03k
void ChangeSky()
{
SYSTEMTIME sm;
GetLocalTime(&sm);
int hourstate = sm.wHour % 2;
float minutestate = (float)sm.wMinute / 60.0f;
if (hourstate == 0)
{
skycolor.r = minutestate;
skycolor.g = minutestate;
skycolor.b = minutestate;
}
else
{
skycolor.r = 1.0f - minutestate;
skycolor.g = 1.0f - minutestate;
skycolor.b = 1.0f - minutestate;
}
}
bool FileExists(char * name)
{
if (CreateFile(name, 0, 0, 0, OPEN_EXISTING, 0, 0) == INVALID_HANDLE_VALUE)
{
return false;
}
return true;
}
void GetCamCoords(double* x_cam, double* y_cam, double* z_cam)
{
double m[16];
glGetDoublev(GL_MODELVIEW_MATRIX, m);
*x_cam = -m[12] * m[0] - m[13] * m[1] - m[14] * m[2];
*y_cam = -m[12] * m[4] - m[13] * m[5] - m[14] * m[6];
*z_cam = -m[12] * m[8] - m[13] * m[9] - m[14] * m[10];
}
void CALLBACK SkyTimerProc(HWND hwnd, UINT uMsg, UINT_PTR idEvent, DWORD dwTime)
{
ChangeSky();
}
void InitDisplay()
{
SetTimer(FindWindow(__CustomTitle, NULL), 3, 60000, (TIMERPROC)int(Config.SystemSkyBox));
{
char texturepath[256];
sprintf_s(texturepath, "%s", ".\\Data\\Custom\\Sky\\Null.bmp");
if (!FileExists(texturepath))
{
MessageBox(0, "can't find Sky\Null.bmp", "Erro SkyBox", MB_OK | MB_ICONERROR);
ExitProcess(0);
}
AUX_RGBImageRec* images[32][6];
AUX_RGBImageRec* blankimage = auxDIBImageLoad(texturepath);
try
{
for (int i = 0; i < 30; i++)
{
for (int j = 0; j < 6; j++)
{
images[i][j] = blankimage;
}
sprintf_s(texturepath, ".\\Data\\Custom\\Sky\\World%d\\Back.bmp", i + 1);
if (FileExists(texturepath))
{
images[i][0] = auxDIBImageLoad(texturepath);
}
sprintf_s(texturepath, ".\\Data\\Custom\\Sky\\World%d\\Bottom.bmp", i + 1);
if (FileExists(texturepath))
{
images[i][1] = auxDIBImageLoad(texturepath);
}
sprintf_s(texturepath, ".\\Data\\Custom\\Sky\\World%d\\Front.bmp", i + 1);
if (FileExists(texturepath))
{
images[i][2] = auxDIBImageLoad(texturepath);
}
sprintf_s(texturepath, ".\\Data\\Custom\\Sky\\World%d\\Left.bmp", i + 1);
if (FileExists(texturepath))
{
images[i][3] = auxDIBImageLoad(texturepath);
}
sprintf_s(texturepath, ".\\Data\\Custom\\Sky\\World%d\\Right.bmp", i + 1);
if (FileExists(texturepath))
{
images[i][4] = auxDIBImageLoad(texturepath);
}
sprintf_s(texturepath, ".\\Data\\Custom\\Sky\\World%d\\Top.bmp", i + 1);
if (FileExists(texturepath))
{
images[i][5] = auxDIBImageLoad(texturepath);
}
}
}
catch (...)
{
/* NOPE */
}
for (int i = 0; i < 30; i++)
{
for (int j = 0; j < 6; j++)
{
glGenTextures(1, &textures[i][j]);
glBindTexture(GL_TEXTURE_2D, textures[i][j]);
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
glTexImage2D(GL_TEXTURE_2D, 0, 3, images[i][j]->sizeX, images[i][j]->sizeY, 0, GL_RGB, GL_UNSIGNED_BYTE, images[i][j]->data);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
}
}
skycolor.r = 1.0f;
skycolor.g = 1.0f;
skycolor.b = 1.0f;
if (Config.SystemDayNight)
{
SetTimer(FindWindow(__CustomTitle, NULL), 2, 5000, (TIMERPROC)SkyTimerProc);
ChangeSky();
}
}
DisplayInitialized = true;
}
bool CanDrawSky()
{
char texturepath[64];
sprintf_s(texturepath, ".\\Data\\Custom\\Sky\\World%d\\Top.bmp", *Map + 1);
if (FileExists(texturepath))
{
return true;
}
return false;
}
void Display()
{
SkyHook();
*MainState = 5;
if (*MainState == 5)
{
if (!DisplayInitialized)
{
InitDisplay();
}
if (Config.SystemSkyBox && CanDrawSky())
{
double x_cam, y_cam, z_cam;
GetCamCoords(&x_cam, &y_cam, &z_cam);
Blend(1);
glColor3d(skycolor.r, skycolor.g, skycolor.b);
glBindTexture(GL_TEXTURE_2D, textures[*Map][5]);
glBegin(GL_QUADS);
//TOP
glTexCoord2f(1.0f, 0.0f); glVertex3d(x_cam - 2300, y_cam + 2300, 1500);
glTexCoord2f(0.0f, 0.0f); glVertex3d(x_cam + 2300, y_cam + 2300, 1500);
glTexCoord2f(0.0f, 1.0f); glVertex3d(x_cam + 2300, y_cam - 2300, 1500);
glTexCoord2f(1.0f, 1.0f); glVertex3d(x_cam - 2300, y_cam - 2300, 1500);
glEnd();
glBindTexture(GL_TEXTURE_2D, textures[*Map][1]);
glBegin(GL_QUADS);
//BOTTOM
glTexCoord2f(1.0f, 1.0f); glVertex3d(x_cam - 2300, y_cam + 2300, 0);
glTexCoord2f(0.0f, 1.0f); glVertex3d(x_cam + 2300, y_cam + 2300, 0);
glTexCoord2f(0.0f, 0.0f); glVertex3d(x_cam + 2300, y_cam - 2300, 0);
glTexCoord2f(1.0f, 0.0f); glVertex3d(x_cam - 2300, y_cam - 2300, 0);
glEnd();
glBindTexture(GL_TEXTURE_2D, textures[*Map][2]);
glBegin(GL_QUADS);
//FRONT
glTexCoord2f(1.0f, 1.0f); glVertex3d(x_cam - 2300, y_cam + 2300, 1500);
glTexCoord2f(0.0f, 1.0f); glVertex3d(x_cam + 2300, y_cam + 2300, 1500);
glTexCoord2f(0.0f, 0.0f); glVertex3d(x_cam + 2300, y_cam + 2300, 0);
glTexCoord2f(1.0f, 0.0f); glVertex3d(x_cam - 2300, y_cam + 2300, 0);
glEnd();
glBindTexture(GL_TEXTURE_2D, textures[*Map][0]);
glBegin(GL_QUADS);
//BACK
glTexCoord2f(0.0f, 1.0f); glVertex3d(x_cam - 2300, y_cam - 2300, 1500);
glTexCoord2f(1.0f, 1.0f); glVertex3d(x_cam + 2300, y_cam - 2300, 1500);
glTexCoord2f(1.0f, 0.0f); glVertex3d(x_cam + 2300, y_cam - 2300, 0);
glTexCoord2f(0.0f, 0.0f); glVertex3d(x_cam - 2300, y_cam - 2300, 0);
glEnd();
glBindTexture(GL_TEXTURE_2D, textures[*Map][3]);
glBegin(GL_QUADS);
//LEFT
glTexCoord2f(1.0f, 1.0f); glVertex3d(x_cam - 2300, y_cam - 2300, 1500);
glTexCoord2f(0.0f, 1.0f); glVertex3d(x_cam - 2300, y_cam + 2300, 1500);
glTexCoord2f(0.0f, 0.0f); glVertex3d(x_cam - 2300, y_cam + 2300, 0);
glTexCoord2f(1.0f, 0.0f); glVertex3d(x_cam - 2300, y_cam - 2300, 0);
glEnd();
glBindTexture(GL_TEXTURE_2D, textures[*Map][4]);
glBegin(GL_QUADS);
//RIGHT
glTexCoord2f(0.0f, 1.0f); glVertex3d(x_cam + 2300, y_cam - 2300, 1500);
glTexCoord2f(1.0f, 1.0f); glVertex3d(x_cam + 2300, y_cam + 2300, 1500);
glTexCoord2f(1.0f, 0.0f); glVertex3d(x_cam + 2300, y_cam + 2300, 0);
glTexCoord2f(0.0f, 0.0f); glVertex3d(x_cam + 2300, y_cam - 2300, 0);
glEnd();
UnBlend();
}
}
}
void HookSky()
{
DisplayInitialized = false;
ToolKit.HookOffset((DWORD)&Display, 0x4D9AB7, 0xE8); //1.03k
}
.h