//-------------------------------------------------------------------------------------------------------#include "StdAfx.h"
#include "Smoke.h"
#include "Util.h"
//#include "MemScript.h"
//-------------------------------------------------------------------------------------------------------
DWORD pItemType = 0;
float a = 0.0f, b = 0.0f, c = 0.0f;
Smoke gSmoke;
//-------------------------------------------------------------------------------------------------------
Smoke::Smoke()
{
for (int i = 0; i < MAX_SMOKE_EFFECT; i++)
{
this->RGB[i].Index = i;
this->RGB[i].ColorR = 1;
this->RGB[i].ColorG = 1;
this->RGB[i].ColorB = 1;
}
}
//-------------------------------------------------------------------------------------------------------
Smoke::~Smoke()
{
//--
}
void Smoke::LoadEffects()
{
#ifdef load_smoke
CMemScript* lpMemScript = new CMemScript;
//--
if (lpMemScript == 0)
{
MessageBox(NULL, "Smoke couldn't be loaded", "Error", MB_OK | MB_ICONERROR);
ExitProcess(1);
return;
}
//--
if (lpMemScript->SetBuffer(SMOKE_FILE_PATH) == 0)
{
MessageBox(NULL, "Smoke not found", "Error", MB_OK | MB_ICONERROR);
delete lpMemScript;
ExitProcess(1);
return;
}
//--
try
{
while (true)
{
if (lpMemScript->GetToken() == TOKEN_END)
{
break;
}
//--
int section = lpMemScript->GetNumber();
//--
while (true)
{
if (section == 0)
{
for (int i = 0; i < MAX_SMOKE_EFFECT; i++)
{
if (strcmp("end", lpMemScript->GetAsString()) == 0)
{
break;
}
//--
this->RGB[i].Index = lpMemScript->GetNumber();
this->RGB[i].ColorR = (float)(lpMemScript->GetAsFloatNumber());
this->RGB[i].ColorG = (float)(lpMemScript->GetAsFloatNumber());
this->RGB[i].ColorB = (float)(lpMemScript->GetAsFloatNumber());
//--
}
}
else{ break; }
}
}
}
catch (...)
{
MessageBox(NULL, lpMemScript->GetLastError(), "Error", MB_OK | MB_ICONERROR);
}
delete lpMemScript;
#endif
this->RGB[4].Index = 4;
this->RGB[4].ColorR = 0.3f;
this->RGB[4].ColorG = 0.8f;
this->RGB[4].ColorB = 1.0f;
}
//-------------------------------------------------------------------------------------------------------
__declspec(naked) void Smoke::SetItemEffect()
{
__asm
{
Mov pItemType, Eax
}
for (int i = ITEM_GET(11, 0); i < ITEM_GET(11, 255); i++)
{
if (pItemType == i)
{
__asm
{
Mov Esi, HDK_ITEM_EFFECT_ALLOW
JMP Esi
}
}
}
__asm
{
Mov Esi, HDK_ITEM_EFFECT_NOT_ALLOW
JMP Esi
}
}
__declspec(naked) void Smoke::SetColorEffect()
{
__asm
{
Mov pItemType, Ecx
}
switch (pItemType)
{
//dorado
case ITEM_GET(11, 0):case ITEM_GET(11, 2):case ITEM_GET(11, 5):case ITEM_GET(11, 7):case ITEM_GET(11, 8):case ITEM_GET(11, 10):case ITEM_GET(11, 11):
case ITEM_GET(11, 16):case ITEM_GET(11, 22):case ITEM_GET(11, 29):case ITEM_GET(11, 33):case ITEM_GET(11, 35):case ITEM_GET(11, 38):case ITEM_GET(11, 46):
{
a = 0.88f;
b = 0.7638f;
c = 0.0088f;
__asm
{
//R
MOV EDX, DWORD PTR SS : [EBP + 0xC]
MOV EAX, a
MOV DWORD PTR DS : [EDX + 0x9C], EAX //Red Color Value
//G
MOV EAX, DWORD PTR SS : [EBP + 0xC]
MOV ECX, b
MOV DWORD PTR DS : [EAX + 0xA0], ECX //Green Color Value
//B
MOV ECX, DWORD PTR SS : [EBP + 0xC]
MOV EDX, c
MOV DWORD PTR DS : [ECX + 0xA4], EDX //Blue Color Value
}
}
break;
//rojo
case ITEM_GET(11, 1):case ITEM_GET(11, 21):case ITEM_GET(11, 24):case ITEM_GET(11, 37):case ITEM_GET(11, 48):case ITEM_GET(11, 51):
{
a = 0.89f;
b = 0.2884f;
c = 0.1958f;
__asm
{
//R
MOV EDX, DWORD PTR SS : [EBP + 0xC]
MOV EAX, a
MOV DWORD PTR DS : [EDX + 0x9C], EAX //Red Color Value
//G
MOV EAX, DWORD PTR SS : [EBP + 0xC]
MOV ECX, b
MOV DWORD PTR DS : [EAX + 0xA0], ECX //Green Color Value
//B
MOV ECX, DWORD PTR SS : [EBP + 0xC]
MOV EDX, c
MOV DWORD PTR DS : [ECX + 0xA4], EDX //Blue Color Value
}
}
break;
//azul
case ITEM_GET(11, 3):case ITEM_GET(11, 9):case ITEM_GET(11, 12):case ITEM_GET(11, 17):case ITEM_GET(11, 25):case ITEM_GET(11, 28):case ITEM_GET(11, 30):
{
a = 0.1584f;
b = 0.6034f;
c = 0.88f;
__asm
{
//R
MOV EDX, DWORD PTR SS : [EBP + 0xC]
MOV EAX, a
MOV DWORD PTR DS : [EDX + 0x9C], EAX //Red Color Value
//G
MOV EAX, DWORD PTR SS : [EBP + 0xC]
MOV ECX, b
MOV DWORD PTR DS : [EAX + 0xA0], ECX //Green Color Value
//B
MOV ECX, DWORD PTR SS : [EBP + 0xC]
MOV EDX, c
MOV DWORD PTR DS : [ECX + 0xA4], EDX //Blue Color Value
}
}
break;
//verde
case ITEM_GET(11, 6):case ITEM_GET(11, 13):case ITEM_GET(11, 26):case ITEM_GET(11, 31):case ITEM_GET(11, 36):case ITEM_GET(11, 39):case ITEM_GET(11, 50):
{
a = 0.4875f;
b = 0.75f;
c = 0.5444f;
__asm
{
//R
MOV EDX, DWORD PTR SS : [EBP + 0xC]
MOV EAX, a
MOV DWORD PTR DS : [EDX + 0x9C], EAX //Red Color Value
//G
MOV EAX, DWORD PTR SS : [EBP + 0xC]
MOV ECX, b
MOV DWORD PTR DS : [EAX + 0xA0], ECX //Green Color Value
//B
MOV ECX, DWORD PTR SS : [EBP + 0xC]
MOV EDX, c
MOV DWORD PTR DS : [ECX + 0xA4], EDX //Blue Color Value
}
}
break;
//morado
case ITEM_GET(11, 15):case ITEM_GET(11, 19):case ITEM_GET(11, 20):case ITEM_GET(11, 23):case ITEM_GET(11, 32):case ITEM_GET(11, 44):
{
a = 0.6573f; //R
b = 0.3198f; //G
c = 0.78f; //B
__asm
{
//R
MOV EDX, DWORD PTR SS : [EBP + 0xC]
MOV EAX, a
MOV DWORD PTR DS : [EDX + 0x9C], EAX //Red Color Value
//G
MOV EAX, DWORD PTR SS : [EBP + 0xC]
MOV ECX, b
MOV DWORD PTR DS : [EAX + 0xA0], ECX //Green Color Value
//B
MOV ECX, DWORD PTR SS : [EBP + 0xC]
MOV EDX, c
MOV DWORD PTR DS : [ECX + 0xA4], EDX //Blue Color Value
}
}
break;
//rosa
case ITEM_GET(11, 40):case ITEM_GET(11, 41):case ITEM_GET(11, 42):case ITEM_GET(11, 43):case ITEM_GET(11, 47):case ITEM_GET(11, 49):case ITEM_GET(11, 53):
{
a = 0.92f; //R
b = 0.3864f; //G
c = 0.8489f; //B
__asm
{
//R
MOV EDX, DWORD PTR SS : [EBP + 0xC]
MOV EAX, a
MOV DWORD PTR DS : [EDX + 0x9C], EAX //Red Color Value
//G
MOV EAX, DWORD PTR SS : [EBP + 0xC]
MOV ECX, b
MOV DWORD PTR DS : [EAX + 0xA0], ECX //Green Color Value
//B
MOV ECX, DWORD PTR SS : [EBP + 0xC]
MOV EDX, c
MOV DWORD PTR DS : [ECX + 0xA4], EDX //Blue Color Value
}
}
break;
//blanco
default:
{
a = 0.9f;
b = 0.9f;
c = 0.9f;
__asm
{
//R
MOV EDX, DWORD PTR SS : [EBP + 0xC]
MOV EAX, a
MOV DWORD PTR DS : [EDX + 0x9C], EAX //Red Color Value
//G
MOV EAX, DWORD PTR SS : [EBP + 0xC]
MOV ECX, b
MOV DWORD PTR DS : [EAX + 0xA0], ECX //Green Color Value
//B
MOV ECX, DWORD PTR SS : [EBP + 0xC]
MOV EDX, c
MOV DWORD PTR DS : [ECX + 0xA4], EDX //Blue Color Value
}
}
break;
}
__asm
{
Mov Esi, HDK_NEXT_ITEM_COLOR
JMP Esi
}
}
void Smoke::AttachNewEffect()
{
//--
for (int i = 0; i < 11; i++)
{
SetByte(HDK_SET_ITEM_EFFECT, 0x90);
}
//--
SetCompleteHook(0xE9, HDK_SET_ITEM_EFFECT, &Smoke::SetItemEffect);
//--
for (int i = 0; i < 47; i++)
{
SetByte(HDK_SET_COLOR_EFFECT, 0x90);
}
//--
SetCompleteHook(0xE9, HDK_SET_COLOR_EFFECT, &Smoke::SetColorEffect);
//--
}