Quote:
#include "Stdafx.h"
#include "Sky.h"
#include <cstdlib>
#include <iostream>
#include <windows.h>
struct FRGB
{
float r, g, b;
};
AUX_RGBImageRec* blankimage;
AUX_RGBImageRec* images[32][6];
unsigned int textures[32][6];
int skycolordirection;
int DisplayInitialized, MiniMapInitialized;
FRGB skycolor;
typedef int(*TSkyHook)();
TSkyHook SkyHook = (TSkyHook) 0x000000;
typedef int(*TBlend) (int);
TBlend Blend = (TBlend) 0x000000;
int *MainState = (int*)0x000000;
int *Map = (int*)0x005E9409; // From Minimap research by HueyGTO
typedef int(*TUnBlend) ();
TUnBlend UnBlend = (TUnBlend) 0x000000;
int ShowMiniMap = GetPrivateProfileIntA("VCORP_MAIN", "MiniMap", 0, ".\\MuLegend\\MuLegend.ini");
int Use3Dcamera = GetPrivateProfileIntA("VCORP_MAIN", "Camera3D", 0, ".\\MuLegend\\MuLegend.ini");
int Sky = GetPrivateProfileIntA("VCORP_MAIN", "Sky", 0, ".\\MuLegend\\MuLegend.ini");
int SkyDayNight = GetPrivateProfileIntA("VCORP_MAIN", "Ambiente", 0, ".\\MuLegend\\MuLegend.ini");
int ShowWelcome = GetPrivateProfileIntA("VCORP_MAIN", "Benvenuto", 0, ".\\MuLegend\\MuLegend.ini");
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 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;
}
}
VOID CALLBACK SkyTimerProc(HWND hwnd,UINT uMsg,UINT_PTR idEvent,DWORD dwTime)
{
ChangeSky();
}
void InitDisplay()
{
//SetTimer(FindWindow("MU",NULL),3,60000,(TIMERPROC)CheckIP);
if(Sky)
{
char texturepath[256];
sprintf(texturepath,"%s",".\\Data\\Interface\\Null.bmp");
if(!FileExists(texturepath))
{
MessageBox(0,"Cannot find blank texture","Error",0);
ExitProcess(0);
}
blankimage = auxDIBImageLoad(texturepath);
try
{
for(int i=0 ; i<30; i++)
{
for(int j=0; j<6; j++)
{
images[i][j] = blankimage;
}
sprintf(texturepath,".\\Data\\Interface\\World%d\\Back.bmp",i+1);
if(FileExists(texturepath))
images[i][0] = auxDIBImageLoad(texturepath);
sprintf(texturepath,".\\Data\\Interface\\World%d\\Bottom.bmp",i+1);
if(FileExists(texturepath))
images[i][1] = auxDIBImageLoad(texturepath);
sprintf(texturepath,".\\Data\\Interface\\World%d\\Front.bmp",i+1);
if(FileExists(texturepath))
images[i][2] = auxDIBImageLoad(texturepath);
sprintf(texturepath,".\\Data\\Interface\\World%d\\Left.bmp",i+1);
if(FileExists(texturepath))
images[i][3] = auxDIBImageLoad(texturepath);
sprintf(texturepath,".\\Data\\Interface\\World%d\\Right.bmp",i+1);
if(FileExists(texturepath))
images[i][4] = auxDIBImageLoad(texturepath);
sprintf(texturepath,".\\Data\\Interface\\World%d\\Top.bmp",i+1);
if(FileExists(texturepath))
images[i][5] = auxDIBImageLoad(texturepath);
}
}
catch(...){}
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(SkyDayNight)
{
skycolordirection = 1;
SetTimer(FindWindow("MU",NULL),2,5000,(TIMERPROC)SkyTimerProc);
ChangeSky();
}
}
DisplayInitialized = 1;
}
bool CanDrawSky()
{
char texturepath[256];
sprintf(texturepath,".\\Data\\Interface\\World%d\\Top.bmp",*Map+1);
if(FileExists(texturepath))
return true;
return false;
}
void Display()
{
SkyHook();
*MainState = 5;
if(*MainState == 5/* && !unhautorized*/)
{
if(!DisplayInitialized)
InitDisplay();
if(Sky && 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-3000, y_cam+3000, 1500);
glTexCoord2f(0.0f, 0.0f); glVertex3d(x_cam+3000, y_cam+3000, 1500);
glTexCoord2f(0.0f, 1.0f); glVertex3d(x_cam+3000, y_cam-3000, 1500);
glTexCoord2f(1.0f, 1.0f); glVertex3d(x_cam-3000, y_cam-3000, 1500);
glEnd();
glBindTexture(GL_TEXTURE_2D, textures[*Map][1]);
glBegin(GL_QUADS);
//BOTTOM
glTexCoord2f(1.0f, 1.0f); glVertex3d(x_cam-3000, y_cam+3000, 0);
glTexCoord2f(0.0f, 1.0f); glVertex3d(x_cam+3000, y_cam+3000, 0);
glTexCoord2f(0.0f, 0.0f); glVertex3d(x_cam+3000, y_cam-3000, 0);
glTexCoord2f(1.0f, 0.0f); glVertex3d(x_cam-3000, y_cam-3000, 0);
glEnd();
glBindTexture(GL_TEXTURE_2D, textures[*Map][2]);
glBegin(GL_QUADS);
//FRONT
glTexCoord2f(1.0f, 1.0f); glVertex3d(x_cam-3000, y_cam+3000, 1500);
glTexCoord2f(0.0f, 1.0f); glVertex3d(x_cam+3000, y_cam+3000, 1500);
glTexCoord2f(0.0f, 0.0f); glVertex3d(x_cam+3000, y_cam+3000, 0);
glTexCoord2f(1.0f, 0.0f); glVertex3d(x_cam-3000, y_cam+3000, 0);
glEnd();
glBindTexture(GL_TEXTURE_2D, textures[*Map][0]);
glBegin(GL_QUADS);
//BACK
glTexCoord2f(0.0f, 1.0f); glVertex3d(x_cam-3000, y_cam-3000, 1500);
glTexCoord2f(1.0f, 1.0f); glVertex3d(x_cam+3000, y_cam-3000, 1500);
glTexCoord2f(1.0f, 0.0f); glVertex3d(x_cam+3000, y_cam-3000, 0);
glTexCoord2f(0.0f, 0.0f); glVertex3d(x_cam-3000, y_cam-3000, 0);
glEnd();
glBindTexture(GL_TEXTURE_2D, textures[*Map][3]);
glBegin(GL_QUADS);
//LEFT
glTexCoord2f(1.0f, 1.0f); glVertex3d(x_cam-3000, y_cam-3000, 1500);
glTexCoord2f(0.0f, 1.0f); glVertex3d(x_cam-3000, y_cam+3000, 1500);
glTexCoord2f(0.0f, 0.0f); glVertex3d(x_cam-3000, y_cam+3000, 0);
glTexCoord2f(1.0f, 0.0f); glVertex3d(x_cam-3000, y_cam-3000, 0);
glEnd();
glBindTexture(GL_TEXTURE_2D, textures[*Map][4]);
glBegin(GL_QUADS);
//RIGHT
glTexCoord2f(0.0f, 1.0f); glVertex3d(x_cam+3000, y_cam-3000, 1500);
glTexCoord2f(1.0f, 1.0f); glVertex3d(x_cam+3000, y_cam+3000, 1500);
glTexCoord2f(1.0f, 0.0f); glVertex3d(x_cam+3000, y_cam+3000, 0);
glTexCoord2f(0.0f, 0.0f); glVertex3d(x_cam+3000, y_cam-3000, 0);
glEnd();
UnBlend();
}
}
}
void HookOffset(DWORD my, DWORD tohook, BYTE type)
{
*(BYTE*)tohook = type;
*(DWORD*)(tohook+1) = my;
}
void HookSky()
{
HookOffset((DWORD)&Display,0x5F1439,0xE8);
}
/* FINE SKY */