mirror of
https://github.com/jummy0/sb2-decomp
synced 2025-03-15 04:24:48 +01:00
split CDecor into multiple cpp's
intellisense doesn't like files with 10k lines
This commit is contained in:
parent
9066260431
commit
bf63b599b0
12
blupi.cpp
12
blupi.cpp
@ -335,19 +335,13 @@ void SetDecor()
|
||||
|
||||
phase = g_pEvent->GetPhase();
|
||||
|
||||
rect = { 0, 0, LXIMAGE, LYIMAGE };
|
||||
|
||||
if (phase == WM_PHASE_PLAY || phase == WM_PHASE_PLAYTEST || phase == WM_PHASE_BUILD)
|
||||
{
|
||||
rect.bottom = LYIMAGE;
|
||||
rect.right = LXIMAGE;
|
||||
rect.top = 0;
|
||||
rect.left = 0;
|
||||
g_pDecor->Build(rect);
|
||||
}
|
||||
else {
|
||||
rect.bottom = LYIMAGE;
|
||||
rect.right = LXIMAGE;
|
||||
rect.top = 0;
|
||||
rect.left = 0;
|
||||
g_pPixmap->DrawImage(-1, 0, rect, 1);
|
||||
}
|
||||
|
||||
@ -753,7 +747,7 @@ static BOOL DoInit(HINSTANCE hInstance, LPSTR lpCmdLine, int nCmdShow)
|
||||
g_pEvent = new CEvent;
|
||||
if (g_pEvent == NULL) return InitFail("New event", FALSE);
|
||||
|
||||
g_pEvent->Create(hInstance, g_hWnd, g_pPixmap, g_pDecor, g_pSound, g_pMovie, g_pNetwork);
|
||||
g_pEvent->Create(hInstance, g_hWnd, g_pPixmap, g_pDecor, g_pSound, g_pNetwork, g_pMovie);
|
||||
g_pEvent->SetFullScreen(g_bFullScreen);
|
||||
g_pEvent->SetMouseType(g_mouseType);
|
||||
#if _INTRO
|
||||
|
@ -156,9 +156,7 @@ void CButton::Draw()
|
||||
|
||||
if ( m_bHide ) // is button hidden ?
|
||||
{
|
||||
pos.y = m_pos.y;
|
||||
pos.x = m_pos.x;
|
||||
m_pPixmap->DrawPart(-1, CHBACK, m_pos, rect, 1); // draw the background
|
||||
m_pPixmap->DrawPart(-1, CHBACK, m_pos, { m_pos.x, m_pos.y, m_pos.x + m_dim.x, m_pos.y + m_dim.y }, 1); // draw the background
|
||||
return;
|
||||
}
|
||||
|
||||
|
780
decblock.cpp
Normal file
780
decblock.cpp
Normal file
@ -0,0 +1,780 @@
|
||||
// DecBlock.cpp
|
||||
//
|
||||
|
||||
#include "def.h"
|
||||
#include "decor.h"
|
||||
#include "misc.h"
|
||||
|
||||
BOOL CDecor::BlitzActif(int celx, int cely)
|
||||
{
|
||||
if (m_phase == WM_PHASE_BUILD) {
|
||||
//TODO: rewrite this like a human
|
||||
int foo = m_time >> 31;
|
||||
return 1 - (((m_time ^ foo) - foo & 1 ^ foo) == foo);
|
||||
}
|
||||
|
||||
POINT pos = { celx * DIMOBJX, cely * DIMOBJY };
|
||||
|
||||
int num = m_time % 100;
|
||||
|
||||
if (m_blupiPos.x >= pos.x - 80 && m_blupiPos.x <= pos.x + 80 &&
|
||||
m_blupiPos.y >= pos.y - 500 && m_blupiPos.y <= pos.y + 500)
|
||||
{
|
||||
if (m_time % 100 < 70 && cely > 0 && m_decor[celx][cely - 1].icon == 0x130)
|
||||
{
|
||||
PlaySound(SOUND_BLITZ, pos, 0);
|
||||
}
|
||||
|
||||
for (int i = 0; table_blitz[i] != -1; i++)
|
||||
{
|
||||
if (m_time % 100 == i) return TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
int CDecor::SoundEnviron(int sound, int obstacle)
|
||||
{
|
||||
if ((obstacle >= 32 && obstacle <= 34) || (obstacle >= 41 && obstacle <= 47) || (obstacle >= 139 && obstacle <= 143))
|
||||
{
|
||||
if (sound == SOUND_JUMPTOC)
|
||||
{
|
||||
return 79;
|
||||
}
|
||||
if (sound == SOUND_JUMPEND)
|
||||
{
|
||||
return 78;
|
||||
}
|
||||
}
|
||||
if ((obstacle >= 1 && obstacle <= 28) || (obstacle >= 78 && obstacle <= 90) || (obstacle >= 250 && obstacle <= 260) || (obstacle >= 311 && obstacle <= 316) || (obstacle >= 324 && obstacle <= 329))
|
||||
{
|
||||
if (sound == SOUND_JUMPTOC)
|
||||
{
|
||||
return 81;
|
||||
}
|
||||
if (sound == SOUND_JUMPEND)
|
||||
{
|
||||
return 80;
|
||||
}
|
||||
}
|
||||
if ((obstacle >= 284 && obstacle <= 303) || obstacle == 338)
|
||||
{
|
||||
if (sound == SOUND_JUMPTOC)
|
||||
{
|
||||
return 83;
|
||||
}
|
||||
if (sound == SOUND_JUMPEND)
|
||||
{
|
||||
return 82;
|
||||
}
|
||||
}
|
||||
if (obstacle >= 341 && obstacle <= 363)
|
||||
{
|
||||
if (sound == SOUND_JUMPTOC)
|
||||
{
|
||||
return 85;
|
||||
}
|
||||
if (sound == SOUND_JUMPEND)
|
||||
{
|
||||
return 84;
|
||||
}
|
||||
}
|
||||
if (obstacle >= 215 && obstacle <= 234)
|
||||
{
|
||||
if (sound == SOUND_JUMPTOC)
|
||||
{
|
||||
return 87;
|
||||
}
|
||||
if (sound == SOUND_JUMPEND)
|
||||
{
|
||||
return 86;
|
||||
}
|
||||
}
|
||||
if (obstacle >= 246 && obstacle <= 249)
|
||||
{
|
||||
if (sound == SOUND_JUMPTOC)
|
||||
{
|
||||
return 89;
|
||||
}
|
||||
if (sound == SOUND_JUMPEND)
|
||||
{
|
||||
return 88;
|
||||
}
|
||||
}
|
||||
if (obstacle >= 107 && obstacle <= 109)
|
||||
{
|
||||
if (sound == SOUND_JUMPTOC)
|
||||
{
|
||||
return 91;
|
||||
}
|
||||
if (sound == SOUND_JUMPEND)
|
||||
{
|
||||
return 90;
|
||||
}
|
||||
}
|
||||
return sound;
|
||||
}
|
||||
|
||||
|
||||
int CDecor::IsWorld(POINT pos)
|
||||
{
|
||||
pos.x += 30;
|
||||
pos.y += 30;
|
||||
if (pos.x < 0 || pos.x >= 6400 || pos.y < 0 || pos.y >= 6400)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
int icon = m_decor[pos.x / 64, pos.y / 64]->icon;
|
||||
if (icon >= 158 && icon <= 165)
|
||||
{
|
||||
return icon - 158 + 1;
|
||||
}
|
||||
if (icon >= 166 && icon <= 173)
|
||||
{
|
||||
return icon - 166 + 1;
|
||||
}
|
||||
if (icon == 309 || icon == 310)
|
||||
{
|
||||
return 9;
|
||||
}
|
||||
if (icon >= 411 && icon <= 415)
|
||||
{
|
||||
return icon - 411 + 10;
|
||||
}
|
||||
if (icon >= 416 && icon <= 420)
|
||||
{
|
||||
return icon - 416 + 10;
|
||||
}
|
||||
if (icon >= 174 && icon <= 181)
|
||||
{
|
||||
return icon - 174 + 1;
|
||||
}
|
||||
if (icon == 184)
|
||||
{
|
||||
return 199;
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
void CDecor::ActiveSwitch(BOOL bState, POINT cel)
|
||||
{
|
||||
POINT pos;
|
||||
pos.x = cel.x * 64;
|
||||
pos.y = cel.y * 64;
|
||||
ModifDecor(pos, bState ? 384 : 385);
|
||||
PlaySoundB(bState ? 77 : 76, pos);
|
||||
cel.x -= 20;
|
||||
for (int i = 0; i < 41; i++)
|
||||
{
|
||||
if (cel.x >= 0 && cel.x < 100 && m_decor[cel.x, cel.y]->icon == (bState ? 379 : 378))
|
||||
{
|
||||
pos.x = cel.x * 64;
|
||||
pos.y = cel.y * 64;
|
||||
ModifDecor(pos, bState ? 378 : 379);
|
||||
}
|
||||
cel.x++;
|
||||
}
|
||||
}
|
||||
|
||||
int CDecor::GetTypeBarre(POINT pos)
|
||||
{
|
||||
POINT pos2 = pos;
|
||||
pos.x += 30;
|
||||
pos.y += 22;
|
||||
if (pos.y % 64 > 44)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
if (pos.x < 0 || pos.x >= 6400 || pos.y < 0 || pos.y >= 6400)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
int icon = m_decor[pos.x / 64, pos.y / 64]->icon;
|
||||
if (icon != 138 && icon != 202)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
if (pos.y >= 6336)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
icon = m_decor[pos.x / 64, pos.y / 64 + 1]->icon;
|
||||
if (IsPassIcon(icon))
|
||||
{
|
||||
return 2;
|
||||
}
|
||||
RECT rect = BlupiRect(pos2);
|
||||
rect.top = pos2.y + 60 - 2;
|
||||
rect.bottom = pos2.y + 60 - 1;
|
||||
if (DecorDetect(rect, TRUE))
|
||||
{
|
||||
return 2;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
BOOL CDecor::IsLave(POINT pos)
|
||||
{
|
||||
pos.x += 30;
|
||||
return pos.x >= 0 && pos.x < 6400 && pos.y >= 0 && pos.y < 6400 && m_decor[pos.x / 64, pos.y / 64]->icon == 68;
|
||||
}
|
||||
|
||||
BOOL CDecor::IsPiege(POINT pos)
|
||||
{
|
||||
pos.x += 30;
|
||||
pos.y += 60;
|
||||
return pos.x % 64 >= 15 && pos.x % 64 <= 49 && pos.x >= 0 && pos.x < 6400 && pos.y >= 0 && pos.y < 6400 && m_decor[pos.x / 64, pos.y / 64]->icon == 373;
|
||||
}
|
||||
|
||||
BOOL CDecor::IsGoutte(POINT pos, BOOL bAlways)
|
||||
{
|
||||
pos.x += 30;
|
||||
if (pos.x % 64 < 15 || pos.x % 64 > 49)
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
if (pos.x < 0 || pos.x >= 6400 || pos.y < 0 || pos.y >= 6400)
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
int icon = m_decor[pos.x / 64, pos.y / 64]->icon;
|
||||
if (bAlways)
|
||||
{
|
||||
return icon == 404 || icon == 410;
|
||||
}
|
||||
return icon == 404;
|
||||
}
|
||||
|
||||
BOOL CDecor::IsScie(POINT pos)
|
||||
{
|
||||
pos.x += 30;
|
||||
return pos.x % 64 >= 4 && pos.x % 64 <= 60 && pos.x >= 0 && pos.x < 6400 && pos.y >= 0 && pos.y < 6400 && m_decor[pos.x / 64, pos.y / 64]->icon == 378;
|
||||
}
|
||||
|
||||
BOOL CDecor::IsSwitch(POINT pos, POINT celSwitch)
|
||||
{
|
||||
pos.x += 30;
|
||||
if (pos.x % 64 < 4 || pos.x % 64 > 60)
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
if (pos.x < 0 || pos.x >= 6400 || pos.y < 0 || pos.y >= 6400)
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
celSwitch.x = pos.x / 64;
|
||||
celSwitch.y = pos.y / 64;
|
||||
return m_decor[pos.x / 64, pos.y / 64]->icon == 384 || m_decor[pos.x / 64, pos.y / 64]->icon == 385;
|
||||
}
|
||||
|
||||
BOOL CDecor::IsEcraseur(POINT pos)
|
||||
{
|
||||
if (m_time / 3 % 10 > 2)
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
pos.x += 30;
|
||||
return pos.x >= 0 && pos.x < 6400 && pos.y >= 0 && pos.y < 6400 && m_decor[pos.x / 64, pos.y / 64]->icon == 317;
|
||||
}
|
||||
|
||||
BOOL CDecor::IsBlitz(POINT pos, BOOL bAlways)
|
||||
{
|
||||
pos.x += 30;
|
||||
if (pos.x < 0 || pos.x >= 6400 || pos.y < 0 || pos.y >= 6400)
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
POINT tinyPoint;
|
||||
tinyPoint.x = pos.x / 64;
|
||||
tinyPoint.y = pos.y / 64;
|
||||
return m_decor[tinyPoint.x, tinyPoint.y]->icon == 305 && (bAlways || BlitzActif(tinyPoint.x, tinyPoint.y));
|
||||
}
|
||||
|
||||
BOOL CDecor::IsRessort(POINT pos)
|
||||
{
|
||||
pos.x += 30;
|
||||
pos.y += 60;
|
||||
return pos.x >= 0 && pos.x < 6400 && pos.y >= 0 && pos.y < 6400 && m_decor[pos.x / 64, pos.y / 64]->icon == 211;
|
||||
}
|
||||
|
||||
BOOL CDecor::IsTemp(POINT pos)
|
||||
{
|
||||
pos.x += 30;
|
||||
pos.y += 60;
|
||||
return pos.x >= 0 && pos.x < 6400 && pos.y >= 0 && pos.y < 6400 && m_decor[pos.x / 64, pos.y / 64]->icon == 324;
|
||||
}
|
||||
|
||||
BOOL CDecor::IsBridge(POINT pos, POINT celBridge)
|
||||
{
|
||||
pos.x += 30;
|
||||
pos.y += 60;
|
||||
if (pos.x >= 0 && pos.x < 6400 && pos.y >= 0 && pos.y < 6400 && m_decor[pos.x / 64, pos.y / 64]->icon == 364)
|
||||
{
|
||||
celBridge.x = pos.x / 64;
|
||||
celBridge.y = pos.y / 64;
|
||||
return TRUE;
|
||||
}
|
||||
pos.y -= 60;
|
||||
if (pos.x >= 0 && pos.x < 6400 && pos.y >= 0 && pos.y < 6400 && m_decor[pos.x / 64, pos.y / 64]->icon == 364)
|
||||
{
|
||||
celBridge.x = pos.x / 64;
|
||||
celBridge.y = pos.y / 64;
|
||||
return TRUE;
|
||||
}
|
||||
return FALSE;
|
||||
|
||||
}
|
||||
|
||||
int CDecor::IsDoor(POINT pos, POINT celPorte)
|
||||
{
|
||||
int num;
|
||||
if (m_blupiDir == 1)
|
||||
{
|
||||
num = -60;
|
||||
}
|
||||
else
|
||||
{
|
||||
num = 60;
|
||||
}
|
||||
pos.x += 30;
|
||||
for (int i = 0; i < 2; i++)
|
||||
{
|
||||
if (pos.x >= 0 && pos.x < 6400 && pos.y >= 0 && pos.y < 6400 && m_decor[pos.x / 64, pos.y / 64]->icon >= 334 && m_decor[pos.x / 64, pos.y / 64]->icon <= 336)
|
||||
{
|
||||
celPorte.x = pos.x / 64;
|
||||
celPorte.y = pos.y / 64;
|
||||
return m_decor[pos.x / 64, pos.y / 64]->icon;
|
||||
}
|
||||
pos.x += num;
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
int CDecor::IsTeleporte(POINT pos)
|
||||
{
|
||||
if (pos.x % 64 > 6)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
pos.x += 30;
|
||||
pos.y -= 60;
|
||||
if (pos.x < 0 || pos.x >= 6400 || pos.y < 0 || pos.y >= 6400)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
if (m_decor[pos.x / 64, pos.y / 64]->icon >= 330 && m_decor[pos.x / 64, pos.y / 64]->icon <= 333)
|
||||
{
|
||||
return m_decor[pos.x / 64, pos.y / 64]->icon;
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
BOOL CDecor::SearchTeleporte(POINT pos, POINT newpos)
|
||||
{
|
||||
int num = IsTeleporte(pos);
|
||||
if (num == -1)
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
for (int i = 0; i < 100; i++)
|
||||
{
|
||||
for (int j = 0; j < 100; j++)
|
||||
{
|
||||
if (num == m_decor[i][j]->icon)
|
||||
{
|
||||
newpos.x = i * 64;
|
||||
newpos.y = j * 64 + 60;
|
||||
if (newpos.x < pos.x - 40 || newpos.x > pos.x + 40 || newpos.y < pos.y - 40 || newpos.y > pos.y + 40)
|
||||
{
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
BOOL CDecor::IsSurfWater(POINT pos)
|
||||
{
|
||||
if (pos.y % 64 < 64 - BLUPISURF)
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
int icon = m_decor[(pos.x + 30) / 64, pos.y / 64]->icon;
|
||||
int icon2 = m_decor[(pos.x + 30) / 64, (pos.y + BLUPISURF) / 64]->icon;
|
||||
return icon != 92 && icon2 == 92;
|
||||
}
|
||||
|
||||
BOOL CDecor::IsDeepWater(POINT pos)
|
||||
{
|
||||
int num = (pos.x + 30) / 64;
|
||||
int num2 = pos.y / 64;
|
||||
if (num < 0 || num >= 100 || num2 < 0 || num2 >= 100)
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
int icon = m_decor[num, num2]->icon;
|
||||
return icon == 91 || icon == 92;
|
||||
}
|
||||
|
||||
BOOL CDecor::IsOutWater(POINT pos)
|
||||
{
|
||||
int icon = m_decor[(pos.x + 30) / 64, (pos.y + 30) / 64]->icon;
|
||||
return icon != 91 && icon != 92 && IsPassIcon(icon);
|
||||
}
|
||||
|
||||
BOOL CDecor::IsPassIcon(int icon)
|
||||
{
|
||||
if (icon == 324 && m_time / 4 % 20 >= 18)
|
||||
{
|
||||
return TRUE;
|
||||
}
|
||||
if (icon >= 0 && icon < MAXQUART)
|
||||
{
|
||||
for (int i = 0; i < 16; i++)
|
||||
{
|
||||
if (table_decor_quart[icon * 16 + i] != 0)
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
BOOL CDecor::IsBlocIcon(int icon)
|
||||
{
|
||||
if (icon < 0 || icon >= MAXQUART)
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
if (icon == 324 && m_time / 4 % 20 < 18)
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
for (int i = 0; i < 16; i++)
|
||||
{
|
||||
if (table_decor_quart[icon * 16 + i] == 0)
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
BOOL CDecor::IsVentillo(POINT pos)
|
||||
{
|
||||
int num = 0;
|
||||
BOOL flag = FALSE;
|
||||
POINT tinyPoint;
|
||||
pos.x += 30;
|
||||
pos.y += 30;
|
||||
if (pos.x < 0 || pos.x >= 6400 || pos.y < 0 || pos.y >= 6400)
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
int icon = m_decor[pos.x / 64, pos.y / 64]->icon;
|
||||
if (icon < 126 || icon > 137)
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
if (icon == 126)
|
||||
{
|
||||
if (pos.x % 64 <= 16)
|
||||
{
|
||||
flag = TRUE;
|
||||
}
|
||||
tinyPoint.x = -64;
|
||||
tinyPoint.y = 0;
|
||||
num = 110;
|
||||
}
|
||||
if (icon == 129)
|
||||
{
|
||||
if (pos.x % 64 >= 48)
|
||||
{
|
||||
flag = TRUE;
|
||||
}
|
||||
tinyPoint.x = 64;
|
||||
tinyPoint.y = 0;
|
||||
num = 114;
|
||||
}
|
||||
if (icon == 132)
|
||||
{
|
||||
if (pos.y % 64 <= 32)
|
||||
{
|
||||
flag = TRUE;;
|
||||
}
|
||||
tinyPoint.x = 0;
|
||||
tinyPoint.y = -64;
|
||||
num = 118;
|
||||
}
|
||||
if (icon == 135)
|
||||
{
|
||||
if (pos.y % 64 >= 48)
|
||||
{
|
||||
flag = TRUE;
|
||||
}
|
||||
tinyPoint.x = 0;
|
||||
tinyPoint.y = 64;
|
||||
num = 122;
|
||||
}
|
||||
if (!flag)
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
ModifDecor(pos, -1);
|
||||
do
|
||||
{
|
||||
pos.x += tinyPoint.x;
|
||||
pos.y += tinyPoint.y;
|
||||
if (num != m_decor[pos.x / 64, pos.y / 64]->icon)
|
||||
{
|
||||
break;
|
||||
}
|
||||
ModifDecor(pos, -1);
|
||||
} while (pos.x >= 0 && pos.x < 6400 && pos.y >= 0 && pos.y < 6400);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
void CDecor::ModifDecor(POINT pos, int icon, BOOL bMulti)
|
||||
{// TODO: this
|
||||
int icon2 = m_decor[pos.x / 64, pos.y / 64]->icon;
|
||||
if (icon == -1 && icon >= 126 && icon2 <= 137)
|
||||
{
|
||||
ByeByeAdd(1, icon2, pos, 17.0, 1.0);
|
||||
}
|
||||
m_decor[pos.x / 64, pos.y / 64]->icon = icon;
|
||||
}
|
||||
|
||||
BOOL CDecor::IsRightBorder(POINT pos, POINT offset)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
|
||||
BOOL CDecor::IsFromage(int x, int y)
|
||||
{
|
||||
if (x < 0 || x >= 100 || y < 0 || y >= 100)
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
int icon = m_decor[x, y]->icon;
|
||||
return (icon >= 246 && icon <= 249) || icon == 339;
|
||||
}
|
||||
|
||||
BOOL CDecor::IsGrotte(int x, int y)
|
||||
{
|
||||
if (x < 0 || x >= 100 || y < 0 || y >= 100)
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
int icon = m_decor[x, y]->icon;
|
||||
return icon = 284 || icon == 301 || icon == 337;
|
||||
}
|
||||
|
||||
void CDecor::AdaptMidBorder(int x, int y)
|
||||
{
|
||||
if (x < 0 || x >= 100 || y < 0 || y >= 100)
|
||||
{
|
||||
return;
|
||||
}
|
||||
int num = 15;
|
||||
if (!IsRightBorder(x, y + 1, 0, -1))
|
||||
{
|
||||
num &= -2;
|
||||
}
|
||||
if (!IsRightBorder(x, y + 1, 0, 1))
|
||||
{
|
||||
num &= -3;
|
||||
}
|
||||
if (!IsRightBorder(x + 1, y, -1, 0))
|
||||
{
|
||||
num &= -5;
|
||||
}
|
||||
if (!IsRightBorder(x - 1, y, 1, 0))
|
||||
{
|
||||
num &= -9;
|
||||
}
|
||||
int num2 = m_decor[x, y]->icon;
|
||||
if (num2 == 156)
|
||||
{
|
||||
num2 = 35;
|
||||
}
|
||||
if (num2 == 252 || num2 == 253)
|
||||
{
|
||||
num2 = 251;
|
||||
}
|
||||
if (num2 == 255)
|
||||
{
|
||||
num2 = 254;
|
||||
}
|
||||
if (num2 == 362)
|
||||
{
|
||||
num2 = 347;
|
||||
}
|
||||
if (num2 == 363)
|
||||
{
|
||||
num2 = 348;
|
||||
}
|
||||
if (num2 >= 341 && num2 <= 346)
|
||||
{
|
||||
num2 = 341;
|
||||
}
|
||||
for (int i = 0; i < 144; i++)
|
||||
{
|
||||
if (num2 == table_adapt_decor[i])
|
||||
{
|
||||
num2 = table_adapt_decor[i / 16 * 16 + num];
|
||||
if (num2 == 35 && m_random->next() % 2 == 0)
|
||||
{
|
||||
num2 = 156;
|
||||
}
|
||||
if (num2 == 251)
|
||||
{
|
||||
num2 = m_random->next(251, 253);
|
||||
}
|
||||
if (num2 == 254 && m_random->next() % 2 == 0)
|
||||
{
|
||||
num2 = 255;
|
||||
}
|
||||
if (num2 == 347 && m_random->next() % 2 == 0)
|
||||
{
|
||||
num2 = 362;
|
||||
}
|
||||
if (num2 == 348 && m_random->next() % 2 == 0)
|
||||
{
|
||||
num2 = 363;
|
||||
}
|
||||
if (num2 == 341)
|
||||
{
|
||||
num2 = m_random->next(341, 346);
|
||||
}
|
||||
m_decor[x, y]->icon = num2;
|
||||
return;
|
||||
}
|
||||
}
|
||||
num2 = m_decor[x, y]->icon;
|
||||
if (num2 == -1 || (num2 >= 264 && num2 <= 282))
|
||||
{
|
||||
num = 15;
|
||||
if (!IsFromage(x, y + 1))
|
||||
{
|
||||
num &= -2;
|
||||
}
|
||||
if (!IsFromage(x, y - 1))
|
||||
{
|
||||
num &= -3;
|
||||
}
|
||||
if (!IsFromage(x + 1, y))
|
||||
{
|
||||
num &= -5;
|
||||
}
|
||||
if (!IsFromage(x - 1, y))
|
||||
{
|
||||
num &= -9;
|
||||
}
|
||||
num2 = table_adapt_fromage[num];
|
||||
if (num2 == 268 && m_random->next() % 2 == 0)
|
||||
{
|
||||
num2 = 279;
|
||||
}
|
||||
if (num2 == 269 && m_random->next() % 2 == 0)
|
||||
{
|
||||
num2 = 280;
|
||||
}
|
||||
if (num2 == 264 && m_random->next() % 2 == 0)
|
||||
{
|
||||
num2 = 281;
|
||||
}
|
||||
if (num2 == 265 && m_random->next() % 2 == 0)
|
||||
{
|
||||
num2 = 282;
|
||||
}
|
||||
m_decor[x, y]->icon = num2;
|
||||
}
|
||||
num2 = m_decor[x, y]->icon;
|
||||
if (num2 == -1 || (num2 >= 285 && num2 <= 303 && num2 != 301))
|
||||
{
|
||||
num = 15;
|
||||
if (!IsGrotte(x, y + 1))
|
||||
{
|
||||
num &= -2;
|
||||
}
|
||||
if (!IsGrotte(x, y - 1))
|
||||
{
|
||||
num &= -3;
|
||||
}
|
||||
if (!IsGrotte(x + 1, y))
|
||||
{
|
||||
num &= -5;
|
||||
}
|
||||
if (!IsGrotte(x - 1, y))
|
||||
{
|
||||
num &= -9;
|
||||
}
|
||||
num2 = table_adapt_fromage[num + 16];
|
||||
if (num2 == 289 && m_random->next() % 2 == 0)
|
||||
{
|
||||
num2 == 300;
|
||||
}
|
||||
if (num2 == 285 && m_random->next() % 2 == 0)
|
||||
{
|
||||
num2 = 302;
|
||||
}
|
||||
if (num2 == 286 && m_random->next() % 2 == 0)
|
||||
{
|
||||
num2 = 303;
|
||||
}
|
||||
m_decor[x, y]->icon = num2;
|
||||
}
|
||||
}
|
||||
|
||||
void CDecor::AdaptBorder(POINT cel)
|
||||
{
|
||||
AdaptMidBorder(cel.x, cel.y);
|
||||
AdaptMidBorder(cel.x + 1, cel.y);
|
||||
AdaptMidBorder(cel.x - 1, cel.y);
|
||||
AdaptMidBorder(cel.x, cel.y + 1);
|
||||
AdaptMidBorder(cel.x, cel.y - 1);
|
||||
int icon = m_decor[cel.x, cel.y]->icon;
|
||||
if (icon != -1 && !IsPassIcon(icon))
|
||||
{
|
||||
MoveObjectDelete(cel);
|
||||
}
|
||||
icon = m_decor[cel.x, cel.y]->icon;
|
||||
if (icon == 304)
|
||||
{
|
||||
for (int i = 0; i < 4; i++)
|
||||
{
|
||||
cel.y++;
|
||||
if (cel.y >= 100)
|
||||
{
|
||||
break;
|
||||
}
|
||||
icon = m_decor[cel.x, cel.y]->icon;
|
||||
if (icon != -1)
|
||||
{
|
||||
break;
|
||||
}
|
||||
m_decor[cel.x, cel.y]->icon = 305;
|
||||
}
|
||||
}
|
||||
if (icon == -1)
|
||||
{
|
||||
for (int i = 0; i < 4; i++)
|
||||
{
|
||||
cel.y++;
|
||||
if (cel.y >= 100)
|
||||
{
|
||||
return;
|
||||
}
|
||||
icon = m_decor[cel.x, cel.y]->icon;
|
||||
if (icon != 305)
|
||||
{
|
||||
return;
|
||||
}
|
||||
m_decor[cel.x, cel.y]->icon = -1;
|
||||
}
|
||||
}
|
||||
}
|
4281
decblupi.cpp
4281
decblupi.cpp
File diff suppressed because it is too large
Load Diff
654
decdesign.cpp
Normal file
654
decdesign.cpp
Normal file
@ -0,0 +1,654 @@
|
||||
// DecDesign.cpp
|
||||
//
|
||||
|
||||
#include "def.h"
|
||||
#include "decor.h"
|
||||
#include "misc.h"
|
||||
|
||||
POINT CDecor::ScreenPosToCelPos(POINT pos)
|
||||
{
|
||||
if (pos.x >= 0 && pos.x < LXIMAGE && pos.y >= 0 && pos.y < LYIMAGE) {
|
||||
return {
|
||||
(m_posDecor.x + m_dimCelHili.x * -32 + 32 + pos.x) / 64,
|
||||
(m_posDecor.y + m_dimCelHili.y * -32 + 32 + pos.y) / 64
|
||||
};
|
||||
}
|
||||
else return { -1, -1 };
|
||||
}
|
||||
|
||||
void CDecor::SetCelPosFromScreenPos(POINT pos)
|
||||
{
|
||||
m_posCelHili = ScreenPosToCelPos(pos);
|
||||
}
|
||||
|
||||
void CDecor::SetFieldCC38AndStuff(int _foo, int _bar)
|
||||
{
|
||||
m_dimCelHili = { 1, 1 };
|
||||
if (_foo == 2 && _bar != 3 && _bar != 9 && _bar != 10) m_dimCelHili = { 2, 2 };
|
||||
if (_foo == 3) m_iconLift = _bar;
|
||||
if (_foo == 4) m_iconLift = _bar + 20;
|
||||
if (_foo == 5) m_iconLift = _bar + 40;
|
||||
m_2ndPositionCalculationSlot = -1;
|
||||
}
|
||||
|
||||
void CDecor::DeleteCel(POINT cel)
|
||||
{
|
||||
m_2ndPositionCalculationSlot = -1;
|
||||
|
||||
if (!IsValidCel(cel)) return;
|
||||
|
||||
m_decor[cel.x][cel.y].icon = -1;
|
||||
AdaptBorder(cel);
|
||||
m_bigDecor[cel.x][cel.y].icon = -1;
|
||||
MoveObjectDelete(cel);
|
||||
}
|
||||
|
||||
void CDecor::PlaceMenuItem(short *pCel, int *pTable, int lastIndex, BYTE flags, int currentIcon, BOOL bRand)
|
||||
{
|
||||
if (bRand) {
|
||||
*pCel = pTable[rand() % (pTable[0] + 1)];
|
||||
}
|
||||
else if (!flags & 8) {
|
||||
if (flags & 1) {
|
||||
lastIndex++;
|
||||
if (*pCel == pTable[lastIndex] && currentIcon != 0 && pTable[0] <= lastIndex) {
|
||||
lastIndex = 0;
|
||||
}
|
||||
*pCel = pTable[lastIndex + 1];
|
||||
}
|
||||
}
|
||||
else {
|
||||
*pCel = pTable[lastIndex + 1];
|
||||
}
|
||||
}
|
||||
|
||||
void CDecor::PlaceItemFromMenu1(POINT cel, int index, BYTE flags, int currentIcon)
|
||||
{
|
||||
m_2ndPositionCalculationSlot = -1;
|
||||
|
||||
short *pIcon = &m_decor[cel.x][cel.y].icon;
|
||||
short *pIconBig = &m_bigDecor[cel.x][cel.y].icon;
|
||||
|
||||
if (!IsValidCel(cel)) return;
|
||||
|
||||
switch (index) {
|
||||
case 0: // Tree
|
||||
PlaceMenuItem(pIconBig, table_366b0, m_lastDecorIndexes[0], flags, *pIconBig, TRUE);
|
||||
break;
|
||||
case 1: // Palmtree
|
||||
PlaceMenuItem(pIconBig, table_366c0, m_lastDecorIndexes[1], flags, *pIconBig, TRUE);
|
||||
break;
|
||||
case 2: // Decorative plant
|
||||
PlaceMenuItem(pIconBig, table_366d8, m_lastDecorIndexes[2], flags, *pIconBig, TRUE);
|
||||
break;
|
||||
case 3: // Marine plant
|
||||
*pIcon = Object::Marine_1;
|
||||
break;
|
||||
case 4: // House
|
||||
PlaceMenuItem(pIconBig, table_366e8, m_lastDecorIndexes[3], flags, *pIconBig, TRUE);
|
||||
break;
|
||||
case 5: // Mechanical background
|
||||
PlaceMenuItem(pIconBig, table_366f8, m_lastDecorIndexes[4], flags, *pIconBig, TRUE);
|
||||
break;
|
||||
case 6: // Kid's stuff background
|
||||
PlaceMenuItem(pIconBig, table_36710, m_lastDecorIndexes[5], flags, *pIconBig, TRUE);
|
||||
break;
|
||||
case 7: // Green slime 2
|
||||
PlaceMenuItem(pIconBig, table_36748, m_lastDecorIndexes[6], flags, *pIconBig, TRUE);
|
||||
break;
|
||||
case 8: // Element for Palace
|
||||
PlaceMenuItem(pIconBig, table_36520, m_lastDecorIndexes[7], flags, *pIconBig, TRUE);
|
||||
break;
|
||||
case 9: // Support
|
||||
PlaceMenuItem(pIcon, table_36670, m_lastDecorIndexes[8], flags, *pIcon, TRUE);
|
||||
break;
|
||||
case 10: // Spider's web
|
||||
PlaceMenuItem(pIcon, table_366a0, m_lastDecorIndexes[9], flags, *pIcon, TRUE);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void CDecor::PlaceItemFromMenu2(POINT cel, int index, BYTE flags, int currentIcon)
|
||||
{
|
||||
m_2ndPositionCalculationSlot = -1;
|
||||
|
||||
short *pIcon = &m_decor[cel.x][cel.y].icon;
|
||||
|
||||
if (!IsValidCel(cel)) return;
|
||||
|
||||
m_iconLift = index;
|
||||
|
||||
switch (index) {
|
||||
case 0: // Square tech-blocks
|
||||
PlaceMenuItem(pIcon, table_36418, m_lastDecorIndexes[10], flags, *pIcon, TRUE);
|
||||
break;
|
||||
case 1: // Special tech-blocks
|
||||
PlaceMenuItem(pIcon, table_36458, m_lastDecorIndexes[11], flags, *pIcon, TRUE);
|
||||
break;
|
||||
case 2: // Triangular tech-blocks
|
||||
PlaceMenuItem(pIcon, table_36488, m_lastDecorIndexes[12], flags, *pIcon, FALSE);
|
||||
break;
|
||||
case 3: // Secret tech-block
|
||||
PlaceMenuItem(pIcon, table_364a0, m_lastDecorIndexes[13], flags, *pIcon, FALSE);
|
||||
break;
|
||||
case 4: // Mechanical square
|
||||
PlaceMenuItem(pIcon, table_364b0, m_lastDecorIndexes[14], flags, *pIcon, TRUE);
|
||||
break;
|
||||
case 5: // Special mechanical
|
||||
PlaceMenuItem(pIcon, table_364d0, m_lastDecorIndexes[15], flags, *pIcon, FALSE);
|
||||
break;
|
||||
case 6: // Secret mechanical
|
||||
PlaceMenuItem(pIcon, table_364e8, m_lastDecorIndexes[16], flags, *pIcon, FALSE);
|
||||
break;
|
||||
case 7: // Pipes
|
||||
*pIcon = Object::Pipes_1;
|
||||
break;
|
||||
}
|
||||
AdaptBorder(cel);
|
||||
}
|
||||
|
||||
void CDecor::PlaceItemFromMenu3(POINT cel, int index, BYTE flags, int currentIcon)
|
||||
{
|
||||
m_2ndPositionCalculationSlot = -1;
|
||||
|
||||
short *pIcon = &m_decor[cel.x][cel.y].icon;
|
||||
|
||||
if (!IsValidCel(cel)) return;
|
||||
|
||||
m_iconLift = index + 20;
|
||||
|
||||
switch (index) {
|
||||
case 0: // Square rock
|
||||
PlaceMenuItem(pIcon, table_36530, m_lastDecorIndexes[20], flags, *pIcon, FALSE);
|
||||
break;
|
||||
case 1: // Triangular rock
|
||||
PlaceMenuItem(pIcon, table_36538, m_lastDecorIndexes[21], flags, *pIcon, FALSE);
|
||||
break;
|
||||
case 2: // Secret rock
|
||||
PlaceMenuItem(pIcon, table_36548, m_lastDecorIndexes[22], flags, *pIcon, FALSE);
|
||||
break;
|
||||
case 3: // Cave
|
||||
// todo
|
||||
break;
|
||||
case 4: // Secret cave
|
||||
*pIcon = Object::CaveSecret;
|
||||
break;
|
||||
case 5: // Cheese
|
||||
*pIcon = Random(Object::CheeseSquare_1, Object::CheeseSquare_4);
|
||||
break;
|
||||
case 6: // Secret cheese
|
||||
*pIcon = Object::CheeseSecret;
|
||||
break;
|
||||
case 7: // Green slime 2
|
||||
*pIcon = Object::Slime_1;
|
||||
break;
|
||||
case 8: // Grass
|
||||
PlaceMenuItem(pIcon, table_365d0, m_lastDecorIndexes[23], flags, *pIcon, FALSE);
|
||||
break;
|
||||
case 9: // Water
|
||||
PlaceMenuItem(pIcon, table_36630, m_lastDecorIndexes[24], flags, *pIcon, FALSE);
|
||||
break;
|
||||
}
|
||||
AdaptBorder(cel);
|
||||
}
|
||||
|
||||
void CDecor::PlaceItemFromMenu4(POINT cel, int index, BYTE flags, int currentIcon)
|
||||
{
|
||||
m_2ndPositionCalculationSlot = -1;
|
||||
|
||||
short *pIcon = &m_decor[cel.x][cel.y].icon;
|
||||
|
||||
if (!IsValidCel(cel)) return;
|
||||
|
||||
m_iconLift = index + 40;
|
||||
|
||||
switch (index) {
|
||||
case 0: // Palace
|
||||
break;
|
||||
case 1: // Element for Palace
|
||||
break;
|
||||
case 2: // Building facade
|
||||
break;
|
||||
case 3: // Roof
|
||||
break;
|
||||
case 4: // Bricks
|
||||
break;
|
||||
case 5: // Furniture
|
||||
break;
|
||||
case 6: // Wooden wall
|
||||
break;
|
||||
case 7: // Kid's stuff square
|
||||
break;
|
||||
case 8: // Special Kid's stuff
|
||||
break;
|
||||
case 9: // Invisible block
|
||||
break;
|
||||
}
|
||||
AdaptBorder(cel);
|
||||
}
|
||||
|
||||
void CDecor::PlaceItemFromMenu5(POINT cel, int index, BYTE flags, int currentIcon)
|
||||
{
|
||||
m_2ndPositionCalculationSlot = -1;
|
||||
|
||||
int mobId;
|
||||
MoveObject* pMob;
|
||||
|
||||
short *pIcon = &m_decor[cel.x][cel.y].icon;
|
||||
|
||||
if (!IsValidCel(cel)) return;
|
||||
|
||||
switch (index) {
|
||||
case 0: // Bomb
|
||||
MoveObjectDelete(cel);
|
||||
mobId = MoveObjectFree();
|
||||
if (mobId == -1) return;
|
||||
pMob = &m_moveObject[mobId];
|
||||
pMob->type = TYPE_BOMBEDOWN;
|
||||
pMob->stepAdvance = 1;
|
||||
pMob->stepRecede = 1;
|
||||
pMob->timeStopStart = 0;
|
||||
pMob->timeStopEnd = 0;
|
||||
pMob->posStart = { cel.x * 64 + 2, cel.y * 64 + 4 };
|
||||
pMob->posEnd = pMob->posStart;
|
||||
pMob->posCurrent = pMob->posStart;
|
||||
pMob->step = STEP_STOPSTART;
|
||||
pMob->time = 0;
|
||||
pMob->phase = 0;
|
||||
pMob->channel = CHELEMENT;
|
||||
pMob->icon = 0x0c;
|
||||
break;
|
||||
case 1: // Hanging bomb
|
||||
MoveObjectDelete(cel);
|
||||
mobId = MoveObjectFree();
|
||||
if (mobId == -1) return;
|
||||
pMob = &m_moveObject[mobId];
|
||||
pMob->type = TYPE_BOMBEUP;
|
||||
pMob->stepAdvance = 1;
|
||||
pMob->stepRecede = 1;
|
||||
pMob->timeStopStart = 0;
|
||||
pMob->timeStopEnd = 0;
|
||||
pMob->posStart = { cel.x * 64 + 2, cel.y * 64 };
|
||||
pMob->posEnd = pMob->posStart;
|
||||
pMob->posCurrent = pMob->posStart;
|
||||
pMob->step = STEP_STOPSTART;
|
||||
pMob->time = 0;
|
||||
pMob->phase = 0;
|
||||
pMob->channel = CHELEMENT;
|
||||
pMob->icon = 0x30;
|
||||
break;
|
||||
case 2: // Homing bomb
|
||||
MoveObjectDelete(cel);
|
||||
mobId = MoveObjectFree();
|
||||
if (mobId == -1) return;
|
||||
pMob = &m_moveObject[mobId];
|
||||
pMob->type = TYPE_BOMBEFOLLOW1;
|
||||
pMob->stepAdvance = 1;
|
||||
pMob->stepRecede = 1;
|
||||
pMob->timeStopStart = 0;
|
||||
pMob->timeStopEnd = 0;
|
||||
pMob->posStart = { cel.x * 64, cel.y * 64 };
|
||||
pMob->posEnd = pMob->posStart;
|
||||
pMob->posCurrent = pMob->posStart;
|
||||
pMob->step = STEP_STOPSTART;
|
||||
pMob->time = 0;
|
||||
pMob->phase = 0;
|
||||
pMob->channel = CHELEMENT;
|
||||
pMob->icon = 0x100;
|
||||
break;
|
||||
case 3: // Lava
|
||||
PlaceMenuItem(pIcon, table_decor_lave, m_lastDecorIndexes[40], flags, *pIcon, FALSE);
|
||||
break;
|
||||
case 4: // Fan
|
||||
PlaceMenuItem(pIcon, table_decor_ventillog, m_lastDecorIndexes[41], flags, *pIcon, FALSE);
|
||||
break;
|
||||
case 5: // Wind
|
||||
PlaceMenuItem(pIcon, table_decor_ventg, m_lastDecorIndexes[42], flags, *pIcon, FALSE);
|
||||
break;
|
||||
case 6: // Slime trap (floor)
|
||||
*pIcon = Object::SlimeTrapFloor_1;
|
||||
break;
|
||||
case 7: // Slime trap (ceiling)
|
||||
*pIcon = Object::SlimeTrapCeiling_1;
|
||||
break;
|
||||
case 8: // Circular saw
|
||||
PlaceMenuItem(pIcon, table_decor_scie, m_lastDecorIndexes[43], flags, *pIcon, FALSE);
|
||||
break;
|
||||
case 9: // Inverter
|
||||
MoveObjectDelete(cel);
|
||||
mobId = MoveObjectFree();
|
||||
if (mobId == -1) return;
|
||||
pMob = &m_moveObject[mobId];
|
||||
pMob->type = TYPE_INVERT;
|
||||
pMob->stepAdvance = 1;
|
||||
pMob->stepRecede = 1;
|
||||
pMob->timeStopStart = 0;
|
||||
pMob->timeStopEnd = 0;
|
||||
pMob->posStart = { cel.x * 64 + 2, cel.y * 64 + 8 };
|
||||
pMob->posEnd = pMob->posStart;
|
||||
pMob->posCurrent = pMob->posStart;
|
||||
pMob->step = STEP_STOPSTART;
|
||||
pMob->time = 0;
|
||||
pMob->phase = 0;
|
||||
pMob->channel = CHELEMENT;
|
||||
pMob->icon = 0xBB;
|
||||
break;
|
||||
case 10: // Lightning
|
||||
*pIcon = Object::LightningMachine;
|
||||
break;
|
||||
case 11: // Crusher
|
||||
*pIcon = Object::Crusher_1;
|
||||
break;
|
||||
}
|
||||
AdaptBorder(cel);
|
||||
}
|
||||
|
||||
void CDecor::PlaceItemFromMenu6(POINT cel, int index, BYTE flags, int currentIcon)
|
||||
{
|
||||
m_2ndPositionCalculationSlot = -1;
|
||||
|
||||
short *pIcon = &m_decor[cel.x][cel.y].icon;
|
||||
|
||||
if (!IsValidCel(cel) || currentIcon == 0) return;
|
||||
|
||||
switch (m_iconLift) {
|
||||
|
||||
}
|
||||
|
||||
switch (index) {
|
||||
case 0: // Slow lift
|
||||
case 1: // Normal lift
|
||||
case 2: // Fast lift
|
||||
case 3: // Fast/Slow lift
|
||||
case 4: // Lift with conveyor belt
|
||||
case 5: // Bulldozer
|
||||
case 6: // Fish
|
||||
case 7: // Bird
|
||||
case 8: // Wasp
|
||||
case 9: // Slime creature
|
||||
case 10: // Moving bomb
|
||||
case 11: // Heliported ennemy
|
||||
case 12: // Motorized ennemy
|
||||
}
|
||||
}
|
||||
|
||||
void CDecor::PlaceItemFromMenu7(POINT cel, int index, BYTE flags, int currentIcon)
|
||||
{
|
||||
m_2ndPositionCalculationSlot = -1;
|
||||
|
||||
MoveObject* pMob;
|
||||
int mobId;
|
||||
|
||||
short *pIcon = &m_decor[cel.x][cel.y].icon;
|
||||
|
||||
if (!IsValidCel(cel)) return;
|
||||
|
||||
switch (index) {
|
||||
case 0: // Chest
|
||||
MoveObjectDelete(cel);
|
||||
mobId = MoveObjectFree();
|
||||
if (mobId == -1) return;
|
||||
pMob = &m_moveObject[mobId];
|
||||
pMob->type = TYPE_TRESOR;
|
||||
pMob->stepAdvance = 1;
|
||||
pMob->stepRecede = 1;
|
||||
pMob->timeStopStart = 0;
|
||||
pMob->timeStopEnd = 0;
|
||||
pMob->posStart = { cel.x * 64 + 2, cel.y * 64 + 4 };
|
||||
pMob->posEnd = pMob->posStart;
|
||||
pMob->posCurrent = pMob->posStart;
|
||||
pMob->step = STEP_STOPSTART;
|
||||
pMob->time = 0;
|
||||
pMob->phase = 0;
|
||||
pMob->channel = CHELEMENT;
|
||||
pMob->icon = 0x00;
|
||||
break;
|
||||
case 1: // Egg
|
||||
MoveObjectDelete(cel);
|
||||
mobId = MoveObjectFree();
|
||||
if (mobId == -1) return;
|
||||
pMob = &m_moveObject[mobId];
|
||||
pMob->type = TYPE_EGG;
|
||||
pMob->stepAdvance = 1;
|
||||
pMob->stepRecede = 1;
|
||||
pMob->timeStopStart = 0;
|
||||
pMob->timeStopEnd = 0;
|
||||
pMob->posStart = { cel.x * 64 + 2, cel.y * 64 + 8 };
|
||||
pMob->posEnd = pMob->posStart;
|
||||
pMob->posCurrent = pMob->posStart;
|
||||
pMob->step = STEP_STOPSTART;
|
||||
pMob->time = 0;
|
||||
pMob->phase = 0;
|
||||
pMob->channel = CHELEMENT;
|
||||
pMob->icon = 0x15;
|
||||
break;
|
||||
case 2: // Lollipop
|
||||
MoveObjectDelete(cel);
|
||||
mobId = MoveObjectFree();
|
||||
if (mobId == -1) return;
|
||||
pMob = &m_moveObject[mobId];
|
||||
pMob->type = TYPE_POWER;
|
||||
pMob->stepAdvance = 1;
|
||||
pMob->stepRecede = 1;
|
||||
pMob->timeStopStart = 0;
|
||||
pMob->timeStopEnd = 0;
|
||||
pMob->posStart = { cel.x * 64 + 2, cel.y * 64 + 8 };
|
||||
pMob->posEnd = pMob->posStart;
|
||||
pMob->posCurrent = pMob->posStart;
|
||||
pMob->step = STEP_STOPSTART;
|
||||
pMob->time = 0;
|
||||
pMob->phase = 0;
|
||||
pMob->channel = CHELEMENT;
|
||||
pMob->icon = 0x88;
|
||||
break;
|
||||
case 3: // Shield
|
||||
MoveObjectDelete(cel);
|
||||
mobId = MoveObjectFree();
|
||||
if (mobId == -1) return;
|
||||
pMob = &m_moveObject[mobId];
|
||||
pMob->type = TYPE_SHIELD;
|
||||
pMob->stepAdvance = 1;
|
||||
pMob->stepRecede = 1;
|
||||
pMob->timeStopStart = 0;
|
||||
pMob->timeStopEnd = 0;
|
||||
pMob->posStart = { cel.x * 64 + 2, cel.y * 64 + 8 };
|
||||
pMob->posEnd = pMob->posStart;
|
||||
pMob->posCurrent = pMob->posStart;
|
||||
pMob->step = STEP_STOPSTART;
|
||||
pMob->time = 0;
|
||||
pMob->phase = 0;
|
||||
pMob->channel = CHELEMENT;
|
||||
pMob->icon = 0x90;
|
||||
break;
|
||||
case 4: // Invisibility potion
|
||||
MoveObjectDelete(cel);
|
||||
mobId = MoveObjectFree();
|
||||
if (mobId == -1) return;
|
||||
pMob = &m_moveObject[mobId];
|
||||
pMob->type = TYPE_DRINK;
|
||||
pMob->stepAdvance = 1;
|
||||
pMob->stepRecede = 1;
|
||||
pMob->timeStopStart = 0;
|
||||
pMob->timeStopEnd = 0;
|
||||
pMob->posStart = { cel.x * 64 + 2, cel.y * 64 + 6 };
|
||||
pMob->posEnd = pMob->posStart;
|
||||
pMob->posCurrent = pMob->posStart;
|
||||
pMob->step = STEP_STOPSTART;
|
||||
pMob->time = 0;
|
||||
pMob->phase = 0;
|
||||
pMob->channel = CHELEMENT;
|
||||
pMob->icon = 0xB2;
|
||||
break;
|
||||
case 5: // Glue supply
|
||||
MoveObjectDelete(cel);
|
||||
mobId = MoveObjectFree();
|
||||
if (mobId == -1) return;
|
||||
pMob = &m_moveObject[mobId];
|
||||
pMob->type = TYPE_BULLET;
|
||||
pMob->stepAdvance = 1;
|
||||
pMob->stepRecede = 1;
|
||||
pMob->timeStopStart = 0;
|
||||
pMob->timeStopEnd = 0;
|
||||
pMob->posStart = { cel.x * 64 + 2, cel.y * 64 + 4 };
|
||||
pMob->posEnd = pMob->posStart;
|
||||
pMob->posCurrent = pMob->posStart;
|
||||
pMob->step = STEP_STOPSTART;
|
||||
pMob->time = 0;
|
||||
pMob->phase = 0;
|
||||
pMob->channel = CHELEMENT;
|
||||
pMob->icon = 0xB1;
|
||||
break;
|
||||
case 6: // Recharging device
|
||||
MoveObjectDelete(cel);
|
||||
mobId = MoveObjectFree();
|
||||
if (mobId == -1) return;
|
||||
pMob = &m_moveObject[mobId];
|
||||
pMob->type = TYPE_CHARGE;
|
||||
pMob->stepAdvance = 1;
|
||||
pMob->stepRecede = 1;
|
||||
pMob->timeStopStart = 0;
|
||||
pMob->timeStopEnd = 0;
|
||||
pMob->posStart = { cel.x * 64 + 2, cel.y * 64 + 4 };
|
||||
pMob->posEnd = pMob->posStart;
|
||||
pMob->posCurrent = pMob->posStart;
|
||||
pMob->step = STEP_STOPSTART;
|
||||
pMob->time = 0;
|
||||
pMob->phase = 0;
|
||||
pMob->channel = CHELEMENT;
|
||||
pMob->icon = 0xEE;
|
||||
break;
|
||||
case 7: // Personal bomb
|
||||
int type;
|
||||
mobId = MoveObjectSearch(cel, -1);
|
||||
if (mobId != -1 && currentIcon != 0) {
|
||||
if (mobId >= TYPE_BOMBEPERSO4) {
|
||||
m_lastDecorIndexes[60] = 0;
|
||||
}
|
||||
else {
|
||||
m_lastDecorIndexes[60] = m_moveObject[mobId].type - TYPE_BOMBEPERSO1;
|
||||
}
|
||||
}
|
||||
type = m_lastDecorIndexes[60] + TYPE_BOMBEPERSO1;
|
||||
MoveObjectDelete(cel);
|
||||
mobId = MoveObjectFree();
|
||||
if (mobId == -1) return;
|
||||
pMob = &m_moveObject[mobId];
|
||||
pMob->type = type;
|
||||
pMob->stepAdvance = 1;
|
||||
pMob->stepRecede = 1;
|
||||
pMob->timeStopStart = 0;
|
||||
pMob->timeStopEnd = 0;
|
||||
pMob->posStart = { cel.x * 64 + 2, cel.y * 64 + 6 };
|
||||
pMob->posEnd = pMob->posStart;
|
||||
pMob->posCurrent = pMob->posStart;
|
||||
pMob->step = STEP_STOPSTART;
|
||||
pMob->time = 0;
|
||||
pMob->phase = 0;
|
||||
switch (type) {
|
||||
default:
|
||||
case TYPE_BOMBEPERSO1:
|
||||
pMob->channel = CHBLUPI;
|
||||
break;
|
||||
case TYPE_BOMBEPERSO2:
|
||||
pMob->channel = CHBLUPI1;
|
||||
break;
|
||||
case TYPE_BOMBEPERSO3:
|
||||
pMob->channel = CHBLUPI2;
|
||||
break;
|
||||
case TYPE_BOMBEPERSO4:
|
||||
pMob->channel = CHBLUPI3;
|
||||
break;
|
||||
}
|
||||
pMob->icon = 0x101;
|
||||
break;
|
||||
case 8: // Dynamite
|
||||
MoveObjectDelete(cel);
|
||||
mobId = MoveObjectFree();
|
||||
if (mobId == -1) return;
|
||||
pMob = &m_moveObject[mobId];
|
||||
pMob->type = TYPE_DYNAMITE;
|
||||
pMob->stepAdvance = 1;
|
||||
pMob->stepRecede = 1;
|
||||
pMob->timeStopStart = 0;
|
||||
pMob->timeStopEnd = 0;
|
||||
pMob->posStart = { cel.x * 64 + 2, cel.y * 64 + 6 };
|
||||
pMob->posEnd = pMob->posStart;
|
||||
pMob->posCurrent = pMob->posStart;
|
||||
pMob->step = STEP_STOPSTART;
|
||||
pMob->time = 0;
|
||||
pMob->phase = 0;
|
||||
pMob->channel = CHELEMENT;
|
||||
pMob->icon = 0xFC;
|
||||
break;
|
||||
}
|
||||
AdaptBorder(cel);
|
||||
}
|
||||
|
||||
void CDecor::PlaceItemFromMenu8(POINT cel, int index, BYTE flags, int currentIcon)
|
||||
{
|
||||
m_2ndPositionCalculationSlot = -1;
|
||||
|
||||
short *pIcon = &m_decor[cel.x][cel.y].icon;
|
||||
|
||||
if (!IsValidCel(cel)) return;
|
||||
|
||||
switch (index) {
|
||||
case 0: // Key
|
||||
case 1: // Door
|
||||
case 2: // Closed while not all chests have been found
|
||||
case 3: // Teleporter
|
||||
case 4: // Bar to hang from
|
||||
case 5: // Spring
|
||||
case 6: // Vanishing bloc
|
||||
case 7: // Fragile bridge
|
||||
case 8: // Wooden case
|
||||
case 9: // Secret wooden case
|
||||
}
|
||||
}
|
||||
|
||||
void CDecor::PlaceItemFromMenu9(POINT cel, int index, BYTE flags, int currentIcon)
|
||||
{
|
||||
m_2ndPositionCalculationSlot = -1;
|
||||
|
||||
short *pIcon = &m_decor[cel.x][cel.y].icon;
|
||||
|
||||
if (!IsValidCel(cel)) return;
|
||||
|
||||
switch (index) {
|
||||
case 0: // Hovercraft
|
||||
case 1: // Helicopter
|
||||
case 2: // Skateboard
|
||||
case 3: // Jeep
|
||||
case 4: // Glue tank
|
||||
}
|
||||
}
|
||||
|
||||
void CDecor::PlaceItemFromMenu10(POINT cel, int index, BYTE flags, int currentIcon)
|
||||
{
|
||||
m_2ndPositionCalculationSlot = -1;
|
||||
|
||||
short *pIcon = &m_decor[cel.x][cel.y].icon;
|
||||
|
||||
if (!IsValidCel(cel)) return;
|
||||
|
||||
switch (index) {
|
||||
case 0: // Goal
|
||||
case 1: // Yellow Blupi
|
||||
case 2: // Orange Blupi
|
||||
case 3: // Blue Blupi
|
||||
case 4: // Green Blupi
|
||||
case 5: // Door
|
||||
case 6: // Level start
|
||||
case 7: // Key
|
||||
}
|
||||
}
|
||||
|
||||
char* CDecor::GetMissionTitle()
|
||||
{
|
||||
return m_missionTitle;
|
||||
}
|
||||
|
||||
void CDecor::SetMissionTitle(char *str)
|
||||
{
|
||||
strcpy(m_missionTitle, str);
|
||||
}
|
218
decio.cpp
Normal file
218
decio.cpp
Normal file
@ -0,0 +1,218 @@
|
||||
// DecIO.cpp
|
||||
//
|
||||
|
||||
#include "def.h"
|
||||
#include "decor.h"
|
||||
#include "misc.h"
|
||||
|
||||
void CDecor::GetMissionPath(char* str, int user, int mission, BOOL bUser)
|
||||
{
|
||||
if (bUser != 0)
|
||||
{
|
||||
sprintf(str, "data\%.3d-%.3d.blp", user, mission);
|
||||
AddUserPath(str);
|
||||
return;
|
||||
}
|
||||
sprintf(str, "data\world%.3d.blp", mission);
|
||||
AddUserPath(str);
|
||||
return;
|
||||
}
|
||||
|
||||
BOOL CDecor::CurrentWrite(int gamer, int mission, BOOL bUser)
|
||||
{
|
||||
char filename[MAX_PATH];
|
||||
FILE* file = NULL;
|
||||
DescFile* pBuffer = NULL;
|
||||
int nb, i;
|
||||
|
||||
InitDecor();
|
||||
GetMissionPath(filename, gamer, mission, bUser);
|
||||
|
||||
file = fopen(filename, "wb");
|
||||
if (file == NULL) goto error;
|
||||
|
||||
pBuffer = (DescFile*)malloc(sizeof(DescFile));
|
||||
if (pBuffer == NULL) goto error;
|
||||
memset(pBuffer, 0, sizeof(DescFile));
|
||||
|
||||
pBuffer->cameraPos = m_posDecor;
|
||||
pBuffer->worldDim = m_dimDecor;
|
||||
pBuffer->music = m_music;
|
||||
pBuffer->region = m_region;
|
||||
|
||||
for (i = 0; i < MAXBUTTON; i++)
|
||||
{
|
||||
pBuffer->ButtonExist[i] = m_buttonExist[i];
|
||||
}
|
||||
for (i = 0; i < 4; i++)
|
||||
{
|
||||
pBuffer->memoPos[i] = m_memoPos[i];
|
||||
}
|
||||
|
||||
error:
|
||||
if (pBuffer != NULL) free(pBuffer);
|
||||
if (file != NULL) fclose(file);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
BOOL CDecor::CurrentRead(int gamer, int mission, BOOL bUser)
|
||||
{
|
||||
char filename[MAX_PATH];
|
||||
FILE* file = NULL;
|
||||
DescFile* pBuffer = NULL;
|
||||
int majRev, minRev;
|
||||
int nb, i, x, y;
|
||||
OldBlupi oldBlupi;
|
||||
|
||||
Init(-1, -1);
|
||||
|
||||
if (bUser)
|
||||
{
|
||||
sprintf(filename, "data\\user%.3d.blp", rank);
|
||||
AddUserPath(filename);
|
||||
}
|
||||
else
|
||||
{
|
||||
sprintf(filename, "data\\world%.3d.blp", rank);
|
||||
if (rank < 200)
|
||||
{
|
||||
AddCDPath(filename);
|
||||
}
|
||||
}
|
||||
|
||||
file = fopen(filename, "rb");
|
||||
if (file == NULL) goto error;
|
||||
|
||||
pBuffer = (DescFile*)malloc(sizeof(DescFile));
|
||||
if (pBuffer == NULL) goto error;
|
||||
|
||||
nb = fread(pBuffer, sizeof(DescFile), 1, file);
|
||||
if (nb < 1) goto error;
|
||||
|
||||
majRev = pBuffer->majRev;
|
||||
minRev = pBuffer->minRev;
|
||||
|
||||
if (majRev == 1 && minRev == 0) goto error;
|
||||
|
||||
if (majRev == 1 && minRev == 3)
|
||||
{
|
||||
if (pBuffer->nbDecor != MAXCELX * MAXCELY ||
|
||||
pBuffer->lgDecor != sizeof(Cellule) ||
|
||||
pBuffer->nbBlupi != MAXBLUPI ||
|
||||
pBuffer->lgBlupi != sizeof(OldBlupi) ||
|
||||
pBuffer->nbMove != MAXMOVE ||
|
||||
pBuffer->lgMove != sizeof(Move)) goto error;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (pBuffer->nbDecor != MAXCELX * MAXCELY ||
|
||||
pBuffer->lgDecor != sizeof(Cellule) ||
|
||||
pBuffer->nbBlupi != MAXBLUPI ||
|
||||
pBuffer->lgBlupi != sizeof(Blupi) ||
|
||||
pBuffer->nbMove != MAXMOVE ||
|
||||
pBuffer->lgMove != sizeof(Move)) goto error;
|
||||
}
|
||||
|
||||
SetCoin(pBuffer->celCoin);
|
||||
if (bUser)
|
||||
{
|
||||
world = pBuffer->world;
|
||||
time = pBuffer->time;
|
||||
total = pBuffer->totalTime;
|
||||
}
|
||||
m_celHome = pBuffer->celCoin;
|
||||
m_term = pBuffer->term;
|
||||
m_music = pBuffer->music;
|
||||
m_region = pBuffer->region;
|
||||
|
||||
if (bUser)
|
||||
{
|
||||
m_skill = pBuffer->skill;
|
||||
}
|
||||
|
||||
for (i = 0; i < MAXBUTTON; i++)
|
||||
{
|
||||
m_buttonExist[i] = pBuffer->buttonExist[i];
|
||||
}
|
||||
|
||||
for (i = 0; i < 4; i++)
|
||||
{
|
||||
m_memoPos[i] = pBuffer->memoPos[i];
|
||||
}
|
||||
|
||||
nb = fread(m_decor, sizeof(Cellule), MAXCELX * MAXCELY / 4, file);
|
||||
if (nb < MAXCELX * MAXCELY / 4) goto error;
|
||||
if (majRev == 1 && minRev < 5)
|
||||
{
|
||||
for (x = 0; x < MAXCELX / 2; x++)
|
||||
{
|
||||
for (y = 0; y < MAXCELY / 2; y++)
|
||||
{
|
||||
if (m_decor[x][y].objectIcon >= 128 &&
|
||||
m_decor[x][y].objectIcon <= 130)
|
||||
{
|
||||
m_decor[x][y].objectIcon -= 128 - 17;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (majRev == 1 && minRev == 3)
|
||||
{
|
||||
memset(m_blupi, 0, sizeof(Blupi) * MAXBLUPI);
|
||||
for (i = 0; i < MAXBLUPI; i++)
|
||||
{
|
||||
nb = fread(&oldBlupi, sizeof(OldBlupi), 1, file);
|
||||
if (nb != 1) goto error;
|
||||
memcpy(m_blupi + i, &oldBlupi, sizeof(OldBlupi));
|
||||
ListFlush(i);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
nb = fread(m_blupi, sizeof(Blupi), MAXBLUPI, file);
|
||||
if (nb < MAXBLUPI) goto error;
|
||||
}
|
||||
|
||||
nb = fread(m_move, sizeof(Move), MAXMOVE, file);
|
||||
if (nb < MAXMOVE) goto error;
|
||||
|
||||
nb = fread(m_lastDrapeau, sizeof(POINT), MAXLASTDRAPEAU, file);
|
||||
if (nb < MAXLASTDRAPEAU)
|
||||
{
|
||||
InitDrapeau();
|
||||
}
|
||||
|
||||
BlupiDeselect();
|
||||
|
||||
free(pBuffer);
|
||||
fclose(file);
|
||||
return TRUE;
|
||||
|
||||
error:
|
||||
if (pBuffer != NULL) free(pBuffer);
|
||||
if (file != NULL) fclose(file);
|
||||
|
||||
Flush();
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
BOOL CDecor::SomethingMissionPath(int gamer, int mission, BOOL bUser)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
BOOL CDecor::MissionStart(int gamer, int mission, BOOL bUser)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
BOOL CDecor::Read(int gamer, int mission, BOOL *pbMission, BOOL *pbPrivate)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
BOOL CDecor::Write(int gamer, int mission, char* param3)
|
||||
{
|
||||
|
||||
}
|
2214
decmove.cpp
Normal file
2214
decmove.cpp
Normal file
File diff suppressed because it is too large
Load Diff
@ -1,4 +0,0 @@
|
||||
#pragma once
|
||||
|
||||
short* GetListMoves(int rank);
|
||||
short* GetListIcons(int rank);
|
197
decnet.cpp
Normal file
197
decnet.cpp
Normal file
@ -0,0 +1,197 @@
|
||||
// DecNet.cpp
|
||||
//
|
||||
|
||||
#include "def.h"
|
||||
#include "decor.h"
|
||||
#include "misc.h"
|
||||
#include "network.h"
|
||||
|
||||
void CDecor::NetStopCloud(int rank)
|
||||
{
|
||||
NetMessage msg;
|
||||
|
||||
msg.data1 = 0;
|
||||
msg.x = 0;
|
||||
msg.y = 0;
|
||||
msg.type = MESS_STOPCLOUD;
|
||||
msg.channel = rank;
|
||||
NetMessagePush(&msg);
|
||||
return;
|
||||
}
|
||||
|
||||
void CDecor::NetPlaySound(short channel, POINT pos)
|
||||
{
|
||||
NetMessage msg;
|
||||
|
||||
msg.y = pos.y;
|
||||
msg.x = pos.x;
|
||||
msg.type = MESS_PLAYSOUND;
|
||||
msg.data1 = 0;
|
||||
msg.channel = channel;
|
||||
NetMessagePush(&msg);
|
||||
return;
|
||||
}
|
||||
|
||||
void CDecor::NetStopSound(short channel)
|
||||
{
|
||||
NetMessage msg;
|
||||
|
||||
msg.data1 = 0;
|
||||
msg.x = 0;
|
||||
msg.y = 0;
|
||||
msg.type = MESS_STOPSOUND;
|
||||
msg.channel = channel;
|
||||
NetMessagePush(&msg);
|
||||
}
|
||||
|
||||
void CDecor::NetDataFlush()
|
||||
{
|
||||
for (int i = 0; i < MAXNETPLAYER; i++)
|
||||
{
|
||||
m_netPos[i].x = 0;
|
||||
m_netPos[i].y = 0;
|
||||
m_netIcons[i] = -1;
|
||||
m_netUnk1[i] = 0;
|
||||
m_netUnk2[i] = 0;
|
||||
m_netUnk3[i] = 0;
|
||||
m_netPlayerPacketsReceived[i] = 0;
|
||||
m_netPlayerPacketsReceived2[i] = 0;
|
||||
m_netTimeSincePacket[i] = 0;
|
||||
m_netVitesses[i].x = 0;
|
||||
m_netVitesses[i].y = 0;
|
||||
m_netUnk4[i].x = 0;
|
||||
m_netUnk4[i].y = 0;
|
||||
}
|
||||
m_netPacketsSent = 0;
|
||||
m_netPacketsSent2 = 0;
|
||||
m_netPacketsReceived = 0;
|
||||
m_netPacketsReceived2 = 0;
|
||||
m_netPacketIcon = -1;
|
||||
NetMessageIndexFlush();
|
||||
}
|
||||
|
||||
void CDecor::NetFUN_155e0(BYTE _foo, short _bar)
|
||||
{
|
||||
char data[4]{ 4, _foo, _bar & 0xff, _bar >> 8 };
|
||||
m_pNetwork->Send(&data, 4, DPSEND_GUARANTEED);
|
||||
return;
|
||||
}
|
||||
|
||||
void CDecor::TreatNetData()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void CDecor::DoNetSmooth(int player)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void CDecor::NetFUN_15d50()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void CDecor::FUN_15da0(int index, short step)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
|
||||
void CDecor::NetPlayerCollide(POINT pos, int* out)
|
||||
{
|
||||
tagRECT rect1;
|
||||
RECT rect2;
|
||||
RECT rect3;
|
||||
//TODO
|
||||
|
||||
}
|
||||
|
||||
void CDecor::NetMessageIndexFlush()
|
||||
{
|
||||
m_netMessageIndex1 = 0;
|
||||
m_netMessageIndex2 = 0;
|
||||
m_netMessageIndex3 = 0;
|
||||
return;
|
||||
}
|
||||
|
||||
BOOL CDecor::NetMessagePush(NetMessage* message)
|
||||
{
|
||||
NetMessage* messages;
|
||||
BYTE data;
|
||||
short pos;
|
||||
int i;
|
||||
|
||||
if (m_netMessageIndex1 == MAXNETMESSAGE) return FALSE;
|
||||
|
||||
CopyMemory(&m_netMessages[m_netMessageIndex2], message, sizeof(NetMessage));
|
||||
m_netMessageIndex1++;
|
||||
m_netMessageIndex2++;
|
||||
if (m_netMessageIndex2 == MAXNETMESSAGE)
|
||||
{
|
||||
m_netMessageIndex2 = 0;
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
BOOL CDecor::NetMessagePop(NetMessage* message)
|
||||
{
|
||||
if (m_netMessageIndex1 == 0) return FALSE;
|
||||
|
||||
CopyMemory(message, &m_netMessages[m_netMessageIndex3], sizeof(NetMessage));
|
||||
m_netMessageIndex1--;
|
||||
m_netMessageIndex3++;
|
||||
if (m_netMessageIndex3 == MAXNETMESSAGE)
|
||||
{
|
||||
m_netMessageIndex3 = 0;
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
void CDecor::NotifFlush()
|
||||
{
|
||||
for (int i = 0; i < MAXNOTIF; i++)
|
||||
{
|
||||
m_notifText[i][0] = '\0';
|
||||
}
|
||||
|
||||
m_notifTime = 0;
|
||||
}
|
||||
|
||||
void CDecor::NotifPop()
|
||||
{
|
||||
for (int i = MAXNOTIF; i > 0; --i)
|
||||
{
|
||||
strcpy()
|
||||
m_notifText[MAXNOTIF - 1][0] = '\0';
|
||||
m_notifTime = NOTIFDELAY; // idk
|
||||
}
|
||||
}
|
||||
|
||||
void CDecor::NotifPush(char *str)
|
||||
{
|
||||
int i;
|
||||
for (i = 0; i < MAXNOTIF; i++)
|
||||
{
|
||||
if (m_notifText[i][0] != '\0') break;
|
||||
}
|
||||
if (i >= MAXNOTIF)
|
||||
{
|
||||
NotifPop();
|
||||
i = MAXNOTIF - 1;
|
||||
}
|
||||
strcpy(m_notifText[i], str);
|
||||
m_notifTime = NOTIFDELAY;
|
||||
m_pSound->PlayImage(SOUND_TRESOR, { LXIMAGE / 2, LYIMAGE / 2 }, -1);
|
||||
}
|
||||
|
||||
void CDecor::NotifStep()
|
||||
{
|
||||
if (m_notifTime == 0)
|
||||
{
|
||||
NotifPop();
|
||||
}
|
||||
else {
|
||||
m_notifTime--;
|
||||
}
|
||||
}
|
357
decor.h
357
decor.h
@ -3,20 +3,18 @@
|
||||
#pragma once
|
||||
|
||||
#include <Windows.h>
|
||||
#include <minwindef.h>
|
||||
|
||||
#include "DEF.H"
|
||||
#include "JAUGE.H"
|
||||
#include "SOUND.H"
|
||||
#include "PIXMAP.H"
|
||||
#include "network.h"
|
||||
#include "jauge.h"
|
||||
#include "event.h"
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#define MAXNETMESSAGE 20
|
||||
#define MAXMOVEOBJECT 200
|
||||
#define MAXNOTIF 4
|
||||
|
||||
// Descripteur d'une cellule du décor.
|
||||
typedef struct
|
||||
@ -70,17 +68,11 @@ public:
|
||||
~CDecor();
|
||||
|
||||
// Decor.cpp
|
||||
void SetShiftOffset(POINT offset);
|
||||
POINT ConvCelToPos(POINT cel);
|
||||
POINT ConvPosToCel(POINT pos, BOOL bMap=FALSE);
|
||||
POINT ConvPosToCel2(POINT pos);
|
||||
|
||||
void Create(HWND hWnd, CSound *pSound, CPixmap *pPixmap, CNetwork *pNetwork);
|
||||
void Create(HWND hWnd, CSound *pSound, CPixmap *pPixmap,
|
||||
CNetwork *pNetwork);
|
||||
BOOL LoadImages();
|
||||
void InitGamer();
|
||||
BOOL AddLinkCaisse(int rank);
|
||||
void InitDecor(int channel, int icon);
|
||||
void InitAfterBuild();
|
||||
void InitDecor();
|
||||
void SetTime(int time);
|
||||
int GetTime();
|
||||
void PlayPrepare(BOOL bTest);
|
||||
@ -90,115 +82,103 @@ public:
|
||||
int GetBlupiChannelStandard();
|
||||
int GetBlupiChannelActual();
|
||||
int GetIconPerso();
|
||||
BOOL BlitzActif(int celx, int cely);
|
||||
void Build(RECT rect);
|
||||
void DrawInfo();
|
||||
POINT DecorNextAction();
|
||||
void TreatInput(UINT input);
|
||||
void SetSpeedX(double speed);
|
||||
void SetSpeedY(double speed);
|
||||
int SoundEnviron(int sound, int obstacle);
|
||||
void StopSound(CSound sound);
|
||||
void AdaptMotorVehicleSound();
|
||||
BOOL TestPushCaisse(int i, POINT pos, BOOL bPop);
|
||||
void SearchLinkCaisse(int rank, BOOL bPop);
|
||||
void ResetHili();
|
||||
BOOL LoadImages();
|
||||
BOOL LoadBackgroundImages();
|
||||
BOOL TestPushOneCaisse(int i, POINT move, int b);
|
||||
void ClearFog();
|
||||
void ClearFire();
|
||||
void SetBuild(BOOL bBuild);
|
||||
void EnableFog(BOOL bEnable);
|
||||
BOOL GetInvincible();
|
||||
void SetInvincible(BOOL bInvincible);
|
||||
BOOL GetSuper();
|
||||
void SetSuper(BOOL bSuper);
|
||||
void FlipOutline();
|
||||
BOOL PutFloor(POINT cel, int channel, int icon);
|
||||
BOOL PutObject(POINT cel, int channel, int icon);
|
||||
BOOL GetFloor(POINT cel, int &channel, int &icon);
|
||||
BOOL GetObject(POINT cel, int &channel, int &icon);
|
||||
BOOL SetFire(POINT cel, BOOL bFire);
|
||||
void SetInput(int keys);
|
||||
void SetJoystickEnable(BOOL bJoystick);
|
||||
void SetFieldD814(BOOL param_1);
|
||||
void PlaySoundB(int sound, POINT pos, BOOL bLocal);
|
||||
void StopSound(int sound);
|
||||
void AdaptMotorVehicleSound(POINT pos);
|
||||
void VehicleSoundsPhase(int phase);
|
||||
|
||||
void SetCoin(POINT coin, BOOL bCenter=FALSE);
|
||||
POINT GetCoin();
|
||||
POINT GetHome();
|
||||
void MemoPos(int rank, BOOL bRecord);
|
||||
|
||||
void SetTime(int time);
|
||||
int GetTime();
|
||||
|
||||
void SetMusic(int music);
|
||||
int GetMusic();
|
||||
|
||||
void SetSkill(int skill);
|
||||
int GetSkill();
|
||||
|
||||
void SetRegion(int region);
|
||||
int GetRegion();
|
||||
|
||||
void SetInfoMode(BOOL bInfo);
|
||||
BOOL GetInfoMode();
|
||||
void SetInfoHeight(int height);
|
||||
int GetInfoHeight();
|
||||
|
||||
int GetTargetLevel();
|
||||
void GetBlupiInfo(BOOL bHelico, BOOL bJeep, BOOL bSkate, BOOL bNage);
|
||||
|
||||
char* GetButtonExist();
|
||||
|
||||
void BuildPutBlupi();
|
||||
void BuildMoveFloor(int x, int y, POINT pos, int rank);
|
||||
void BuildMoveObject(int x, int y, POINT pos, int rank);
|
||||
void BuildGround(RECT clip);
|
||||
void Build(RECT clip, POINT posMouse);
|
||||
void NextPhase(int mode);
|
||||
|
||||
int CountFloor(int channel, int icon);
|
||||
int CelOkForAction(POINT cel, int action, int rank,
|
||||
int icons[4][4],
|
||||
POINT &celOutline1,
|
||||
POINT &celOutline2);
|
||||
int CelOkForAction(POINT cel, int action, int rank);
|
||||
int GetHiliRankBlupi(int nb);
|
||||
void CelHili(POINT pos, int action);
|
||||
void CelHiliButton(POINT cel, int button);
|
||||
void CelHiliRepeat(int list);
|
||||
int GetResHili(POINT posMouse);
|
||||
void HideTooltips(BOOL bHide);
|
||||
|
||||
void UndoOpen();
|
||||
void UndoClose();
|
||||
void UndoCopy();
|
||||
void UndoBack();
|
||||
BOOL IsUndo();
|
||||
BOOL GetShowSecret();
|
||||
BOOL GetNetPacked();
|
||||
BOOL GetNetMovePredict();
|
||||
UINT GetPhase();
|
||||
char GetMissionTitle();
|
||||
void SetRegion(int region);
|
||||
int GetMusic();
|
||||
void SetMusic(int music);
|
||||
void GetDims(POINT* ptr);
|
||||
void SetDims(POINT dims);
|
||||
POINT GetDim();
|
||||
void SetDim(POINT dim);
|
||||
int GetNbVies();
|
||||
void SetNbVies(int nbVies);
|
||||
BOOL GetPause();
|
||||
void SetPause(BOOL bPause);
|
||||
void GetDoors(int doors);
|
||||
void InitalizeDoors();
|
||||
void SetAllMissions(BOOL CheatDoors);
|
||||
void CheatAction(int cheat, MoveObject moveObject);
|
||||
void SetAccessBuild(BOOL build);
|
||||
void SetNetPacked(BOOL net);
|
||||
void SetNetMovePredict(BOOL netmove);
|
||||
void InitializeDoors(GameData *gameData);
|
||||
void MemorizeDoors(BYTE* doors);
|
||||
void SetAllMissions(BOOL bAllMissions);
|
||||
void CheatAction(int cheat);
|
||||
BOOL GetSuperBlupi();
|
||||
void SetSuperBlupi(BOOL bSuperBlupi);
|
||||
BOOL GetDrawSecret();
|
||||
void SetDrawSecret(BOOL bDrawSecret);
|
||||
void SetBuildOfficialMissions(BOOL bBuildOfficialMissions);
|
||||
BOOL GetNetPacked();
|
||||
void SetNetPacked(BOOL bNetPacked);
|
||||
BOOL GetNetMovePredict();
|
||||
void SetNetMovePredict(BOOL bNetMovePredict);
|
||||
BOOL GetNetDebug();
|
||||
void SetNetDebug(BOOL bNetDebug);
|
||||
void UpdateNetDebug(char *str);
|
||||
void OutputNetDebug(char* text);
|
||||
void SetMulti(BOOL bMulti);
|
||||
void SetTeam(int team);
|
||||
POINT VoyageGetPosVie(int nbVies);
|
||||
void VoyageInit(POINT start, POINT end, int icon, int channel);
|
||||
void VoyageStep();
|
||||
void VoyageDraw();
|
||||
BOOL DrawMap(BOOL bPlay, int team);
|
||||
|
||||
// DecBlock.cpp
|
||||
BOOL BlitzActif(int celx, int cely);
|
||||
int SoundEnviron(int sound, int obstacle);
|
||||
int IsWorld(POINT pos);
|
||||
void ActiveSwitch(BOOL bState, POINT cel);
|
||||
char GetTypeBarre(POINT pos);
|
||||
BOOL IsLave(POINT pos);
|
||||
BOOL IsPiege(POINT pos);
|
||||
BOOL IsGoutte(POINT pos, BOOL bAlways);
|
||||
BOOL IsScie(POINT pos);
|
||||
BOOL IsSwitch(POINT pos, POINT celSwitch);
|
||||
BOOL IsEcraseur(POINT pos);
|
||||
BOOL IsBlitz(POINT pos, BOOL bAlways);
|
||||
BOOL IsRessort(POINT pos);
|
||||
BOOL IsTemp(POINT pos);
|
||||
BOOL IsBridge(POINT pos, POINT celBridge);
|
||||
int IsDoor(POINT pos, POINT celPorte);
|
||||
int IsTeleporte(POINT pos);
|
||||
BOOL SearchTeleporte(POINT pos, POINT newpos);
|
||||
BOOL IsSurfWater(POINT pos);
|
||||
BOOL IsDeepWater(POINT pos);
|
||||
BOOL IsOutWater(POINT pos);
|
||||
BOOL IsPassIcon(int icon);
|
||||
BOOL IsBlocIcon(int icon);
|
||||
BOOL IsVentillo(POINT pos);
|
||||
void ModifDecor(POINT pos, int icon, BOOL _foo);
|
||||
BOOL IsRightBorder(POINT cel, POINT offset);
|
||||
BOOL IsFromage(int x, int y);
|
||||
BOOL IsGrotte(int x, int y);
|
||||
void AdaptMidBorder(int x, int y);
|
||||
void AdaptBorder(POINT cel);
|
||||
|
||||
// DecDesign.cpp
|
||||
POINT ScreenPosToCelPos(POINT pos);
|
||||
void SetCelPosFromScreenPos(POINT pos);
|
||||
void SetFieldCC38AndStuff(int _foo, int _bar);
|
||||
void DeleteCel(POINT cel);
|
||||
void PlaceMenuItem(short *pCel, int *pTable, int lastIndex, BYTE flags, int currentIcon, BOOL bRand);
|
||||
void PlaceItemFromMenu1(POINT cel, int index, BYTE flags, int currentIcon);
|
||||
void PlaceItemFromMenu2(POINT cel, int index, BYTE flags, int currentIcon);
|
||||
void PlaceItemFromMenu3(POINT cel, int index, BYTE flags, int currentIcon);
|
||||
void PlaceItemFromMenu4(POINT cel, int index, BYTE flags, int currentIcon);
|
||||
void PlaceItemFromMenu5(POINT cel, int index, BYTE flags, int currentIcon);
|
||||
void PlaceItemFromMenu6(POINT cel, int index, BYTE flags, int currentIcon);
|
||||
void PlaceItemFromMenu7(POINT cel, int index, BYTE flags, int currentIcon);
|
||||
void PlaceItemFromMenu8(POINT cel, int index, BYTE flags, int currentIcon);
|
||||
void PlaceItemFromMenu9(POINT cel, int index, BYTE flags, int currentIcon);
|
||||
void PlaceItemFromMenu10(POINT cel, int index, BYTE flags, int currentIcon);
|
||||
char* GetMissionTitle();
|
||||
void SetMissionTitle(char *str);
|
||||
|
||||
// DecBlupi.cpp
|
||||
void BlupiSearchIcon();
|
||||
BOOL BlupiIsGround();
|
||||
RECT BlupiRect(POINT pos);
|
||||
@ -209,31 +189,15 @@ public:
|
||||
POINT GetPosDecor(POINT pos);
|
||||
void BlupiAddFifo(POINT pos);
|
||||
BOOL DecorDetect(RECT rect, BOOL bCaisse);
|
||||
BOOL TestPath(RECT rect, POINT start, POINT *end);
|
||||
void GetBlupiInfo(BOOL *pbHelico, BOOL *pbJeep, BOOL *pbSkate,
|
||||
BOOL *pbNage);
|
||||
|
||||
// DecMove.cpp
|
||||
BOOL TestPath(RECT rect, POINT start, POINT end);
|
||||
void MoveObjectPollution();
|
||||
void MoveObjectPlouf(POINT pos);
|
||||
void MoveObjectTiplouf(POINT pos);
|
||||
int GetBlupiChannelStandard();
|
||||
void MoveObjectBlup(POINT pos);
|
||||
void ActiveSwitch(BOOL bState, POINT cel);
|
||||
BOOL IsLave(POINT pos);
|
||||
BOOL IsPiege(POINT pos);
|
||||
BOOL IsGoutte(POINT pos, BOOL bAlways);
|
||||
BOOL IsScie(POINT pos);
|
||||
BOOL IsSwitch(POINT pos, POINT *celSwitch);
|
||||
BOOL IsEcraseur(POINT pos);
|
||||
BOOL IsBlitz(POINT pos, BOOL bAlways);
|
||||
BOOL IsRessort(POINT pos);
|
||||
BOOL IsTemp(POINT pos);
|
||||
BOOL IsBridge(POINT pos, POINT *celBridge);
|
||||
int IsDoor(POINT pos, POINT *celPorte);
|
||||
int IsTeleporte(POINT pos);
|
||||
BOOL SearchTeleporte(POINT pos, POINT *newpos);
|
||||
BOOL IsSurfWater(POINT pos);
|
||||
BOOL IsDeepWater(POINT pos);
|
||||
BOOL IsOutWater(POINT pos);
|
||||
BOOL IsPassIcon(int icon);
|
||||
BOOL IsBlocIcon(int icon);
|
||||
void FlushBalleTraj();
|
||||
void SetBalleTraj(POINT pos);
|
||||
BOOL IsBalleTraj(POINT pos);
|
||||
@ -241,28 +205,9 @@ public:
|
||||
void SetMoveTraj(POINT pos);
|
||||
BOOL IsMoveTraj(POINT pos);
|
||||
int SearchDistRight(POINT pos, POINT dir, int type);
|
||||
BOOL IsVentillo(POINT pos);
|
||||
void NetStopCloud(int rank);
|
||||
void StartSploutchGlu(POINT pos);
|
||||
BOOL ObjectStart(POINT pos, int type, int speed, int _foo);
|
||||
BOOL ObjectDelete(POINT pos, int type, int _foo);
|
||||
void ModifDecor(POINT pos, int icon, BOOL _foo);
|
||||
void NetPlaySound(short channel, POINT pos);
|
||||
void NetStopSound(short channel);
|
||||
void NetDataFlush();
|
||||
void FUN_155e0(byte _foo, short _bar);
|
||||
void TreatNetData();
|
||||
void DoNetSmooth(int player);
|
||||
void NetFUN_15d50();
|
||||
void FUN_15da0(int rank, short phase);
|
||||
void NetPlayerCollide(POINT pos, int &result);
|
||||
void NetMessageIndexFlush();
|
||||
BOOL NetMessagePush(NetMessage *message);
|
||||
BOOL NetMessagePop(NetMessage *message);
|
||||
void NotifFlush();
|
||||
void NotifPop();
|
||||
void NotifPush(char *str);
|
||||
void NotifStep();
|
||||
BOOL ObjectStart(POINT pos, int type, int speed);
|
||||
BOOL ObjectDelete(POINT pos, int type);
|
||||
void MoveObjectStep();
|
||||
void MoveObjectStepLine(int i);
|
||||
void* MoveObjectStepIcon(int i);
|
||||
@ -271,7 +216,6 @@ public:
|
||||
int AscenseurVertigo(int i, BOOL *bVertigoLeft, BOOL *bVertigoRight);
|
||||
BOOL AscenseurShift(int i);
|
||||
void AscenseurSynchro(int i);
|
||||
|
||||
void UpdateCaisse();
|
||||
BOOL TestPushCaisse(int i, POINT pos, BOOL bPop);
|
||||
BOOL TestPushOneCaisse(int i, POINT move, int b);
|
||||
@ -286,66 +230,51 @@ public:
|
||||
int MoveAscenseurDetect(POINT pos, int height);
|
||||
int MoveChargeDetect(POINT pos);
|
||||
int MovePersoDetect(POINT pos);
|
||||
int MoveObjectSomething(POINT pos);
|
||||
int MoveBalleDetect(POINT pos);
|
||||
int MoveObjectDelete(POINT pos);
|
||||
int MoveObjectFree();
|
||||
int SortGetType(int type);
|
||||
void MoveObjectSort();
|
||||
void MoveObjectPriority(int i);
|
||||
int MoveObjectSearch(POINT pos, int type);
|
||||
void VoyageGetPosVie(POINT *out, int nbVies);
|
||||
void VoyageInit(POINT start, POINT end, int icon, int channel);
|
||||
void VoyageStep();
|
||||
void VoyageDraw();
|
||||
BOOL IsRightBorder(int x, int y, int dx, int dy);
|
||||
BOOL IsFromage(int x, int y);
|
||||
BOOL IsGrotte(int x, int y);
|
||||
void AdaptMidBorder(int x, int y);
|
||||
void AdaptBorder(POINT cel);
|
||||
BOOL MultiplayerCameraSomething(int foo, int bar);
|
||||
|
||||
// DecNet.cpp
|
||||
void NetStopCloud(int rank);
|
||||
void NetPlaySound(short channel, POINT pos);
|
||||
void NetStopSound(short channel);
|
||||
void NetDataFlush();
|
||||
void NetFUN_155e0(BYTE _foo, short _bar);
|
||||
void TreatNetData();
|
||||
void DoNetSmooth(int player);
|
||||
void NetFUN_15d50();
|
||||
void FUN_15da0(int rank, short step);
|
||||
void NetPlayerCollide(POINT pos, int *out);
|
||||
void NetMessageIndexFlush();
|
||||
BOOL NetMessagePush(NetMessage *message);
|
||||
BOOL NetMessagePop(NetMessage *message);
|
||||
void NotifFlush();
|
||||
void NotifPop();
|
||||
void NotifPush(char *str);
|
||||
void NotifStep();
|
||||
|
||||
// DecIO.cpp
|
||||
void GetMissionPath(char *out, int gamer, int mission, BOOL bUser);
|
||||
BOOL CurrentWrite(int gamer, int mission, BOOL bUser);
|
||||
BOOL CurrentRead(int gamer, int mission, BOOL bUser);
|
||||
BOOL MissionPathSomething(int gamer, int mission, BOOL bUser);
|
||||
BOOL Read(int gamer, int mission, BOOL bUser);
|
||||
BOOL FUN_1bad0(int foo, int bar, void *baz, void *qux);
|
||||
BOOL FUN_1c190(int foo, int bar, char *str);
|
||||
BOOL SomethingMissionPath(int gamer, int mission, BOOL bUser);
|
||||
BOOL MissionStart(int gamer, int mission, BOOL bUser);
|
||||
BOOL Read(int gamer, int mission, BOOL *pbMission, BOOL *pbPrivate);
|
||||
BOOL Write(int gamer, int mission, char* param3);
|
||||
|
||||
BOOL SearchWorld(int world, POINT *blupi, int *dir);
|
||||
BOOL SearchDoor(int n, POINT *cel, POINT *blupi);
|
||||
BOOL AdaptDoors(BOOL bPrivate, int mission);
|
||||
void AdaptDoors(BOOL bPrivate, int mission);
|
||||
void OpenDoorsTresor();
|
||||
void OpenDoor(POINT cel);
|
||||
void OpenDoorsWin();
|
||||
void OpenGoldsWin();
|
||||
void DoorsLost();
|
||||
|
||||
void SetMission(int mission);
|
||||
|
||||
// ?
|
||||
void GetMissionsCleared();
|
||||
void SetDemoState(BOOL demoState);
|
||||
BOOL CurrentWrite(int gamer, int mission, BOOL bUser);
|
||||
BOOL CurrentRead(int gamer, int mission, BOOL bUser);
|
||||
void SetJoystickEnable(BOOL bJoystick);
|
||||
BOOL GetShowSecret();
|
||||
|
||||
void MemorizeDoors(BYTE* doors);
|
||||
|
||||
|
||||
// Network Related Functions
|
||||
void NetMessageIndexFlush();
|
||||
void NotifFlush();
|
||||
void NetDataFlush();
|
||||
void NetPlaySound(short channel, POINT pos);
|
||||
void NetStopCloud(int rank);
|
||||
BOOL NetMessagePush(NetMessage* message);
|
||||
BOOL DrawMap(BOOL bPlay, int player);
|
||||
void NetSendData(BYTE bufferSize, UCHAR send);
|
||||
void NetPlayerCollide(POINT pos, int* out);
|
||||
void TreatNetData();
|
||||
void OutputNetDebug(char* text);
|
||||
|
||||
|
||||
protected:
|
||||
HWND m_hWnd;
|
||||
CSound* m_pSound;
|
||||
@ -363,15 +292,12 @@ protected:
|
||||
POINT m_posCelHili;
|
||||
POINT m_dimCelHili;
|
||||
int m_2ndPositionCalculationSlot;
|
||||
|
||||
int m_phase;
|
||||
int m_term;
|
||||
int m_music;
|
||||
int m_region;
|
||||
int m_lastRegion;
|
||||
|
||||
int m_iconLift;
|
||||
|
||||
int m_time;
|
||||
char m_missionTitle[100];
|
||||
BOOL m_bPause;
|
||||
@ -392,15 +318,14 @@ protected:
|
||||
int m_blupiTransport;
|
||||
BOOL m_blupiFocus;
|
||||
BOOL m_blupiAir;
|
||||
BOOL* m_blupiHelico;
|
||||
BOOL m_blupiHelico;
|
||||
BOOL m_blupiOver;
|
||||
BOOL m_blupiJeep;
|
||||
BOOL m_blupiTank;
|
||||
BOOL m_blupiSkate;
|
||||
BOOL m_blupiNage;
|
||||
BOOL m_blupiSurf;
|
||||
BOOL m_bInWind;
|
||||
BOOL m_blupiVent;
|
||||
BOOL m_blupiVent;
|
||||
BOOL m_blupiSuspend;
|
||||
BOOL m_blupiJumpAie;
|
||||
BOOL m_blupiShield;
|
||||
@ -429,30 +354,30 @@ protected:
|
||||
POINT m_blupiFifoPos[10];
|
||||
POINT m_blupiStartPos[4];
|
||||
int m_blupiStartDir[4];
|
||||
int m_D42C;
|
||||
int m_jaugeSomething1;
|
||||
int m_jaugeSomething2;
|
||||
int m_jaugeSomething3;
|
||||
int m_jaugeSomething4;
|
||||
BOOL m_bMulti;
|
||||
int m_team;
|
||||
int m_netPacketsSent;
|
||||
int m_netPacketsSent2;
|
||||
int m_netPacketsReceived;
|
||||
int m_netPacketsReceived2;
|
||||
|
||||
int unknown[55];
|
||||
|
||||
POINT m_netPos[MAXNETPLAYER];
|
||||
int m_netIcons[MAXNETPLAYER];
|
||||
int m_netUnk1[MAXNETPLAYER];
|
||||
int m_netUnk2[MAXNETPLAYER];
|
||||
int m_netUnk3[MAXNETPLAYER];
|
||||
int m_netPlayerPacketsReceived[MAXNETPLAYER];
|
||||
int m_netPlayerPacketsReceived2[MAXNETPLAYER];
|
||||
int m_netTimeSincePacket[MAXNETPLAYER];
|
||||
POINT m_netVitesses[MAXNETPLAYER];
|
||||
POINT m_netUnk4[MAXNETPLAYER];
|
||||
POINT m_netPacketPos;
|
||||
int m_netPacketIcon;
|
||||
NetMessage m_netMessages[MAXNETMESSAGE];
|
||||
int m_soundEventIndex1;
|
||||
int m_soundEventIndex2;
|
||||
|
||||
int m_D5DC;
|
||||
|
||||
char m_messages[4][100];
|
||||
|
||||
int m_D770;
|
||||
|
||||
int m_netMessageIndex1;
|
||||
int m_netMessageIndex2;
|
||||
int m_netMessageIndex3;
|
||||
char m_notifText[4][100];
|
||||
int m_notifTime;
|
||||
CJauge m_jauges[2];
|
||||
int m_blupiLevel;
|
||||
int m_blupiEnergyUnused;
|
||||
@ -478,9 +403,7 @@ protected:
|
||||
int m_totalTresor;
|
||||
int m_goalPhase;
|
||||
int m_detectIcon;
|
||||
|
||||
int m_D8F8;
|
||||
|
||||
POINT m_scrollPoint;
|
||||
POINT m_scrollAdd;
|
||||
int m_voyageIcon;
|
||||
@ -492,9 +415,7 @@ protected:
|
||||
int m_decorAction;
|
||||
int m_decorPhase;
|
||||
int m_lastDecorIndexes[200];
|
||||
|
||||
int reserve[11];
|
||||
|
||||
BYTE dummy[100000];
|
||||
};
|
||||
|
||||
|
24
def.h
24
def.h
@ -11,6 +11,7 @@
|
||||
#define _SE FALSE // TRUE eGames Special Edition
|
||||
#define _NOCD TRUE
|
||||
|
||||
#define MAXGAMER 8
|
||||
|
||||
#define LXIMAGE 640 // dimensions de la fenêtre de jeu
|
||||
#define LYIMAGE 480
|
||||
@ -84,11 +85,23 @@ namespace Ch {
|
||||
};
|
||||
};
|
||||
|
||||
#define MESS_LOBBY 4
|
||||
#define NETEVENTMAX 20
|
||||
|
||||
#define PK_PLAYSOUND 40
|
||||
#define MESS_RESUME 0
|
||||
#define MESS_PAUSE 1
|
||||
#define MESS_LOBBY 4
|
||||
#define MESS_LEAVE 8
|
||||
#define MESS_LOST 9
|
||||
#define MESS_START 10
|
||||
#define MESS_PAUSE2 12
|
||||
#define MESS_OBJECTSTART 20
|
||||
#define MESS_OBJECTDELETE 21
|
||||
#define MESS_MODIFDECOR 30
|
||||
#define MESS_PLAYSOUND 40
|
||||
#define MESS_STOPSOUND 41
|
||||
#define MESS_ASCENSEURSTART 50
|
||||
#define MESS_ASCENSEUREND 51
|
||||
#define MESS_STOPCLOUD 60
|
||||
|
||||
#define MAXNETMESSAGE 20
|
||||
|
||||
// Directions :
|
||||
|
||||
@ -676,6 +689,7 @@ namespace Sound {
|
||||
#define KEY_DOWN (1 << 3)
|
||||
#define KEY_JUMP (1 << 4)
|
||||
#define KEY_FIRE (1 << 5)
|
||||
#define KEY_NONE 0
|
||||
|
||||
namespace Key {
|
||||
enum Key {
|
||||
@ -984,6 +998,8 @@ namespace Key {
|
||||
#define WM_PHASE_DOQUIT 1587
|
||||
#define WM_PHASE_GAMER 1545
|
||||
|
||||
#define WM_PHASE_CLEARGAMER 1528
|
||||
|
||||
// Types de gestion de la souris.
|
||||
|
||||
#define MOUSETYPEGRA 1
|
||||
|
229
event.cpp
229
event.cpp
@ -1490,8 +1490,8 @@ CEvent::~CEvent()
|
||||
WriteInfo(); // Read the file "info.blp"
|
||||
}
|
||||
|
||||
void CEvent::Create(HWND hWnd, CPixmap *pPixmap, CDecor *pDecor,
|
||||
CSound *pSound, CMovie *pMovie, CNetwork *pNetwork)
|
||||
void CEvent::Create(HINSTANCE hInstance, HWND hWnd, CPixmap *pPixmap, CDecor *pDecor,
|
||||
CSound *pSound, CNetwork *pNetwork, CMovie *pMovie)
|
||||
{
|
||||
HINSTANCE hInstance;
|
||||
POINT pos;
|
||||
@ -1506,7 +1506,6 @@ void CEvent::Create(HWND hWnd, CPixmap *pPixmap, CDecor *pDecor,
|
||||
m_gamer = 1;
|
||||
|
||||
ReadInfo(1);
|
||||
return;
|
||||
}
|
||||
|
||||
int CEvent::GetButtonIndex(int button)
|
||||
@ -1664,7 +1663,7 @@ void CEvent::FlushInput()
|
||||
{
|
||||
m_input = 0;
|
||||
|
||||
m_pDecor->SetInput(0);
|
||||
m_pDecor->SetInput(KEY_NONE);
|
||||
return;
|
||||
|
||||
}
|
||||
@ -1702,7 +1701,7 @@ BOOL CEvent::CreateButtons()
|
||||
|
||||
void CEvent::ReadInput()
|
||||
{
|
||||
BOOL something;
|
||||
BOOL bCanCrouch;
|
||||
MMRESULT joyPos;
|
||||
int i;
|
||||
UINT keyInput;
|
||||
@ -1715,33 +1714,29 @@ void CEvent::ReadInput()
|
||||
UINT bJoyID;
|
||||
|
||||
|
||||
if (m_bMulti != FALSE)
|
||||
if (m_bMulti)
|
||||
{
|
||||
m_pDecor->TreatNetData();
|
||||
}
|
||||
|
||||
if ((m_somethingJoystick == (void*)0) || (m_bDemoPlay != FALSE))
|
||||
if (m_somethingJoystick == NULL || m_bDemoPlay)
|
||||
{
|
||||
m_pDecor->SetJoystickEnable(FALSE);
|
||||
}
|
||||
else
|
||||
{
|
||||
m_pDecor->GetBlupiInfo(&bHelicopter, &bCar, &bSkateboard, &bWater);
|
||||
something = TRUE;
|
||||
bCanCrouch = TRUE;
|
||||
|
||||
if (((bHelicopter != FALSE) || (bCar != FALSE)) || (bSkateboard != FALSE))
|
||||
if (bHelicopter || bCar || bSkateboard)
|
||||
{
|
||||
something = FALSE;
|
||||
bCanCrouch = FALSE;
|
||||
}
|
||||
bJoyID = m_joyID;
|
||||
joyInfo = &joy;
|
||||
|
||||
for (i != 0; i = 13; i++)
|
||||
{
|
||||
joyInfo->dwSize = 0;
|
||||
joyInfo = (JOYINFOEX*)&joyInfo->dwFlags;
|
||||
}
|
||||
joy.dwSize = 52;
|
||||
ZeroMemory(&joy, sizeof(joy));
|
||||
|
||||
joy.dwSize = sizeof(JOYINFOEX);
|
||||
joy.dwFlags = 255;
|
||||
|
||||
joyPos = joyGetPosEx(bJoyID, &joy);
|
||||
@ -1750,57 +1745,53 @@ void CEvent::ReadInput()
|
||||
{
|
||||
m_input = 0;
|
||||
|
||||
if ((int)joy.dwXpos < 16384)
|
||||
if (joy.dwXpos < 16384)
|
||||
{
|
||||
m_input = KEY_LEFT;
|
||||
}
|
||||
if ((m_input == KEY_NONE) && ((int)joy.dwYpos < 16384))
|
||||
if (m_input == KEY_NONE && joy.dwYpos < 16384)
|
||||
{
|
||||
m_input = KEY_UP;
|
||||
}
|
||||
if (((m_input == KEY_NONE) || (something)) && (49152 < (int)joy.dwYpos))
|
||||
if (m_input == KEY_NONE || joy.dwYpos > 49152)
|
||||
{
|
||||
m_input = m_input | KEY_DOWN;
|
||||
}
|
||||
if (((BYTE)joy.dwButtons & JOY_BUTTON1) != 0)
|
||||
if (joy.dwButtons & JOY_BUTTON1)
|
||||
{
|
||||
m_input = m_input & ~(INPUT_DOWN | INPUT_UP) | KEY_JUMP;
|
||||
m_input = m_input & ~(KEY_DOWN | KEY_UP) | KEY_JUMP;
|
||||
}
|
||||
if (((BYTE)joy.dwButtons & JOY_BUTTON2) != 0)
|
||||
if (joy.dwButtons & JOY_BUTTON2)
|
||||
{
|
||||
if (bSkateboard == FALSE)
|
||||
{
|
||||
keyInput = m_input & ~INPUT_DOWN | KEY_UP | KEY_JUMP;
|
||||
if (bSkateboard) {
|
||||
keyInput = m_input & ~(KEY_DOWN | KEY_UP) | KEY_JUMP;
|
||||
}
|
||||
else
|
||||
{
|
||||
keyInput = m_input & ~(INPUT_DOWN | INPUT_UP) | KEY_JUMP;
|
||||
else {
|
||||
keyInput = m_input & ~KEY_DOWN | KEY_UP | KEY_JUMP;
|
||||
}
|
||||
m_input = keyInput;
|
||||
}
|
||||
if (((BYTE)joy.dwButtons & JOY_BUTTON3) != 0)
|
||||
if (joy.dwButtons & JOY_BUTTON3)
|
||||
{
|
||||
if (bHelicopter == FALSE)
|
||||
{
|
||||
if (bSkateboard == FALSE)
|
||||
{
|
||||
keyInput = m_input | KEY_DOWN | KEY_JUMP;
|
||||
}
|
||||
else
|
||||
{
|
||||
keyInput = m_input & ~(INPUT_DOWN | INPUT_UP) | KEY_JUMP;
|
||||
}
|
||||
}
|
||||
else
|
||||
if (bHelicopter)
|
||||
{
|
||||
keyInput = m_input | KEY_DOWN;
|
||||
}
|
||||
else {
|
||||
if (bSkateboard) {
|
||||
keyInput = m_input & ~(KEY_DOWN | KEY_UP) | KEY_JUMP;
|
||||
}
|
||||
else {
|
||||
keyInput = m_input | KEY_DOWN | KEY_JUMP;
|
||||
}
|
||||
}
|
||||
|
||||
m_input = keyInput;
|
||||
m_input = keyInput & ~INPUT_UP;
|
||||
m_input = keyInput & ~KEY_UP;
|
||||
}
|
||||
if (((BYTE)joy.dwButtons & JOY_BUTTON4) != 0)
|
||||
if (joy.dwButtons & JOY_BUTTON4)
|
||||
{
|
||||
m_input = m_input & ~(INPUT_DOWN | INPUT_UP) | KEY_FIRE;
|
||||
m_input = m_input & ~(KEY_DOWN | KEY_UP) | KEY_FIRE;
|
||||
}
|
||||
m_pDecor->SetInput(m_input);
|
||||
m_pDecor->SetJoystickEnable(TRUE);
|
||||
@ -1819,18 +1810,14 @@ void CEvent::NetSetPause(BOOL bPause, int players)
|
||||
|
||||
bPause_ = bPause;
|
||||
m_pDecor->SetPause(bPause);
|
||||
if ((m_phase == WM_PHASE_PLAY) || (m_phase == WM_PHASE_PLAYTEST))
|
||||
if (m_phase == WM_PHASE_PLAY || m_phase == WM_PHASE_PLAYTEST)
|
||||
{
|
||||
if (bPause_ == FALSE)
|
||||
{
|
||||
m_pSound->RestartMusic();
|
||||
}
|
||||
else
|
||||
{
|
||||
if (bPause_)
|
||||
m_pSound->SuspendMusic();
|
||||
}
|
||||
else
|
||||
m_pSound->RestartMusic();
|
||||
}
|
||||
if ((m_bMulti != FALSE) && (players != 0))
|
||||
if (m_bMulti && players != 0)
|
||||
{
|
||||
m_pNetwork->Send(&bPause, 3, DPSEND_GUARANTEED);
|
||||
}
|
||||
@ -1839,91 +1826,73 @@ void CEvent::NetSetPause(BOOL bPause, int players)
|
||||
|
||||
void CEvent::NetSendLobby()
|
||||
{
|
||||
int i;
|
||||
NetPlayer* player;
|
||||
NetPlayer* playerPacket;
|
||||
UCHAR packet[132];
|
||||
CNetwork* pNetwork;
|
||||
|
||||
packet._2_2_ = (int*)&m_multi;
|
||||
packet[2] = *(short*)&m_multi;
|
||||
pNetwork = m_pNetwork;
|
||||
packet[0] = 132;
|
||||
packet[1] = MESS_LOBBY;
|
||||
player = pNetwork->m_players;
|
||||
playerPacket = (NetPlayer*)(packet + 4);
|
||||
for (i != 0; i = sizeof(NetPlayer); i++)
|
||||
for (int i = 0; i < sizeof(NetPlayer); i++)
|
||||
{
|
||||
playerPacket = (NetPlayer*)player;
|
||||
player = (NetPlayer*)&player->dpid;
|
||||
playerPacket++;
|
||||
}
|
||||
pNetwork->Send(packet, 132, DPSEND_GUARANTEED);
|
||||
return;
|
||||
}
|
||||
|
||||
int CEvent::NetSearchPlayer(DPID dpid)
|
||||
{
|
||||
int i;
|
||||
BYTE* pDpid;
|
||||
|
||||
i = 0;
|
||||
pDpid = (BYTE*)&m_pNetwork->m_players[0].dpid;
|
||||
|
||||
while ((pDpid[-4] == 0 || (dpid != *(DPID*)pDpid)))
|
||||
for (int i = 0; i < MAXNETPLAYER; i++)
|
||||
{
|
||||
i++;
|
||||
pDpid = pDpid + sizeof(NetPlayer);
|
||||
if (3 < i)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
if (m_pNetwork->m_players[i].bIsPresent && m_pNetwork->m_players[0].dpid == dpid) return i;
|
||||
}
|
||||
return i;
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
void CEvent::NetStartPlay()
|
||||
{
|
||||
BOOL host;
|
||||
int i;
|
||||
int* player;
|
||||
DPID player;
|
||||
char message[2];
|
||||
char str[52];
|
||||
CNetwork* pNetwork;
|
||||
|
||||
OutputNetDebug("CEvent::NetStartPlay");
|
||||
host = m_pNetwork->IsHost();
|
||||
|
||||
if (host != FALSE)
|
||||
if (m_pNetwork->IsHost())
|
||||
{
|
||||
message[0] = '\x02';
|
||||
message[1] = '\a';
|
||||
message[0] = 2;
|
||||
message[1] = MESS_START;
|
||||
m_pNetwork->Send(message, 2, DPSEND_GUARANTEED);
|
||||
OutputNetDebug("Sending_MESS_START");
|
||||
OutputNetDebug("Sending MESS_START");
|
||||
}
|
||||
m_pDecor->SetTeam(0);
|
||||
pNetwork = m_pNetwork;
|
||||
|
||||
i = 0;
|
||||
player = &pNetwork->m_players[0].dpid;
|
||||
|
||||
while ((((NetPlayer*)(player + -1))->bIsPresent == FALSE || (pNetwork->m_dpid != player)))
|
||||
for (int i = 0; i < MAXNETPLAYER; i++)
|
||||
{
|
||||
i++;
|
||||
player = player + 8;
|
||||
if (3 < i)
|
||||
if (m_pNetwork->m_players[i].bIsPresent && m_pNetwork->m_players[0].dpid == m_pNetwork->m_dpid)
|
||||
{
|
||||
m_bMulti = TRUE;
|
||||
m_bPrivate = FALSE;
|
||||
m_pDecor->SetMulti(TRUE);
|
||||
m_pDecor->SetTeam(pNetwork->m_players[i].team);
|
||||
sprintf(str, "color=%d", m_pNetwork->m_players[i].team);
|
||||
OutputNetDebug(str);
|
||||
return;
|
||||
}
|
||||
}
|
||||
m_pDecor->SetTeam((int)pNetwork->m_players[i].team);
|
||||
sprintf(str, "color=%d", (int)m_pNetwork->m_players[i].team);
|
||||
OutputNetDebug(str);
|
||||
|
||||
m_bMulti = TRUE;
|
||||
m_bPrivate = FALSE;
|
||||
m_pDecor->SetMulti(TRUE);
|
||||
}
|
||||
|
||||
void CEvent::NetSend(NetMessageType message, USHORT data)
|
||||
void CEvent::NetFUN_1d6b0(UINT message, USHORT data)
|
||||
{
|
||||
UCHAR packet[4];
|
||||
|
||||
@ -1936,13 +1905,9 @@ void CEvent::NetSend(NetMessageType message, USHORT data)
|
||||
return;
|
||||
}
|
||||
|
||||
void CEvent::NetDraw()
|
||||
void CEvent::NetDrawMap()
|
||||
{
|
||||
int player;
|
||||
|
||||
player = NetSearchPlayer(m_pNetwork->m_dpid);
|
||||
m_pDecor->DrawMap(TRUE, player);
|
||||
return;
|
||||
m_pDecor->DrawMap(TRUE, NetSearchPlayer(m_pNetwork->m_dpid));
|
||||
}
|
||||
|
||||
void CEvent::ChatSend()
|
||||
@ -1998,17 +1963,63 @@ void AddCheatCode(char *pDst, char *pSrc)
|
||||
}
|
||||
|
||||
|
||||
void CEvent::DrawTextCenter(int res, int x, int y, int font)
|
||||
void CEvent::DrawTextCenter(int res, POINT pos, int font)
|
||||
{
|
||||
char text[100];
|
||||
POINT pos;
|
||||
|
||||
LoadString(res, text, 100);
|
||||
pos.x = x;
|
||||
pos.y = y;
|
||||
::DrawTextCenter(m_pPixmap, pos, text, font);
|
||||
}
|
||||
|
||||
BOOL CEvent::AddPhaseText()
|
||||
{
|
||||
char text[100];
|
||||
|
||||
|
||||
if (m_phase != WM_PHASE_INSERT && m_phase != WM_PHASE_BYE)
|
||||
{
|
||||
text[0] = 0;
|
||||
|
||||
if (m_bBuildOfficialMissions) AddCheatCode(text, cheat_code[0]);
|
||||
if (m_bAllMissions) AddCheatCode(text, cheat_code[1]);
|
||||
if (m_pDecor->GetSuperBlupi()) AddCheatCode(text, cheat_code[3]);
|
||||
if (m_pDecor->GetDrawSecret()) AddCheatCode(text, cheat_code[11]);
|
||||
if (m_pDecor->GetNetPacked()) AddCheatCode(text, cheat_code[19]);
|
||||
if (m_pDecor->GetNetMovePredict()) AddCheatCode(text, cheat_code[21]);
|
||||
|
||||
m_pDecor->OutputNetDebug(text);
|
||||
|
||||
if (m_phase != WM_PHASE_PLAY && m_phase != WM_PHASE_PLAYTEST && m_phase != WM_PHASE_BUILD)
|
||||
{
|
||||
m_pPixmap->DrawPart(-1, CHDECOR, { 2, 2 }, { 2, 2, 302, 14 }, 1, FALSE);
|
||||
}
|
||||
DrawTextLeft(m_pPixmap, { 2, 2 }, text, CHLITTLE);
|
||||
}
|
||||
if (m_phase == WM_PHASE_INIT)
|
||||
{
|
||||
DrawTextB(m_pPixmap, { 414, 446 }, "Version 2.2", FONTLITTLE);
|
||||
}
|
||||
if (m_phase == WM_PHASE_GAMER)
|
||||
{
|
||||
LoadString(TX_ChoosePlayer@2, text, 100);
|
||||
DrawTextLeft(m_pPixmap, { LXIMAGE / 2 - GetTextWidth(text, 0) / 2, 26 }, text, FONTRED);
|
||||
|
||||
POINT pos { 110, 69 };
|
||||
for (int i = 0; i < MAXGAMER; i++)
|
||||
{
|
||||
DrawTextB(m_pPixmap, pos, m_gamerNameList[i], FONTWHITE);
|
||||
pos.y += DIMBUTTONY;
|
||||
}
|
||||
|
||||
//SetEnable(WM_PHASE_CLEARGAMER); // TODO
|
||||
}
|
||||
if (m_phase == WM_PHASE_CREATE)
|
||||
{
|
||||
LoadString(0xFA, text, 100);
|
||||
// TODO
|
||||
}
|
||||
}
|
||||
|
||||
BOOL CEvent::DrawButtons()
|
||||
{
|
||||
int i;
|
||||
@ -2209,11 +2220,9 @@ BOOL CEvent::TextSomething()
|
||||
return 1;
|
||||
}
|
||||
|
||||
POINT CEvent::GetLastMousePos(POINT out)
|
||||
POINT CEvent::GetLastMousePos()
|
||||
{
|
||||
out.x = m_oldMousePos.x;
|
||||
out.y = m_oldMousePos.y;
|
||||
return;
|
||||
return m_oldMousePos;
|
||||
}
|
||||
|
||||
BOOL CEvent::TreatEvent(UINT message, WPARAM wParam, LPARAM lParam)
|
||||
@ -2537,12 +2546,12 @@ int CEvent::GetWorldGroup()
|
||||
|
||||
void CEvent::SetMission(int index)
|
||||
{
|
||||
if (m_bPrivate != 0)
|
||||
if (m_bPrivate)
|
||||
{
|
||||
m_private = index;
|
||||
return;
|
||||
}
|
||||
if (m_bMulti != 0)
|
||||
if (m_bMulti)
|
||||
{
|
||||
m_multi = index;
|
||||
return;
|
||||
@ -3018,7 +3027,7 @@ BOOL CEvent::DemoPlayStart()
|
||||
m_bDemoPlay = TRUE;
|
||||
m_bDemoRec = FALSE;
|
||||
|
||||
if (!m_pDecor->Read(header.world, FALSE, world, time, total))
|
||||
if (!m_pDecor->CurrentRead(header.world, FALSE, world, time, total))
|
||||
{
|
||||
DemoPlayStop();
|
||||
return FALSE;
|
||||
|
55
event.h
55
event.h
@ -61,40 +61,6 @@ typedef struct
|
||||
}
|
||||
DemoEvent;
|
||||
|
||||
typedef enum
|
||||
{
|
||||
cheat_cleanall = 2,
|
||||
cheat_funskate = 6,
|
||||
cheat_givecopter = 7,
|
||||
cheat_jeepdrive = 8,
|
||||
cheat_alltreasure = 9,
|
||||
cheat_endgoal = 10,
|
||||
cheat_roundshield = 12,
|
||||
cheat_quicklollipop = 13,
|
||||
cheat_tenbombs = 14,
|
||||
cheat_birdlime = 15,
|
||||
cheat_drivetank = 16,
|
||||
cheat_powercharge = 17,
|
||||
cheat_hidedrink = 18,
|
||||
cheat_iovercraft = 22,
|
||||
cheat_udynamite = 23,
|
||||
cheat_wellkeys = 24
|
||||
}
|
||||
cheat;
|
||||
|
||||
typedef enum
|
||||
{
|
||||
KEY_NONE,
|
||||
KEY_LEFT,
|
||||
KEY_RIGHT,
|
||||
KEY_UP,
|
||||
KEY_DOWN,
|
||||
KEY_JUMP,
|
||||
INPUT_DOWN,
|
||||
INPUT_UP,
|
||||
KEY_FIRE
|
||||
};
|
||||
|
||||
class CEvent
|
||||
{
|
||||
public:
|
||||
@ -104,7 +70,7 @@ public:
|
||||
|
||||
void OutputNetDebug(const char* str);
|
||||
POINT GetMousePos();
|
||||
void Create(HWND hWnd, CPixmap *pPixmap, CDecor *pDecor, CSound *pSound, CMovie *pMovie, CNetwork *pNetwork);
|
||||
void Create(HINSTANCE hInstance, HWND hWnd, CPixmap *pPixmap, CDecor *pDecor, CSound *pSound, CNetwork *pNetwork, CMovie *pMovie);
|
||||
void SetFullScreen(BOOL bFullScreen);
|
||||
void SetMouseType(int mouseType);
|
||||
int GetWorld();
|
||||
@ -113,7 +79,7 @@ public:
|
||||
int GetImageWorld();
|
||||
BOOL IsHelpHide();
|
||||
BOOL ChangePhase(UINT phase);
|
||||
WMessage GetPhase();
|
||||
UINT GetPhase();
|
||||
void MovieToStart();
|
||||
BOOL NetworkNuggets(int fuck);
|
||||
void HandleInputs();
|
||||
@ -149,7 +115,7 @@ public:
|
||||
void WaitMouse(BOOL bWait);
|
||||
void HideMouse(BOOL bHide);
|
||||
void FillMouse(int bFill);
|
||||
POINT GetLastMousePos(POINT out);
|
||||
POINT GetLastMousePos();
|
||||
BOOL TreatEvent(UINT message, WPARAM wParam, LPARAM lParam);
|
||||
BOOL TreatEventBase(UINT message, WPARAM wParam, LPARAM lParam);
|
||||
|
||||
@ -179,10 +145,10 @@ public:
|
||||
|
||||
void IntroStep();
|
||||
|
||||
void AddPhaseText();
|
||||
BOOL AddPhaseText();
|
||||
void ReadInput();
|
||||
|
||||
void DrawTextCenter(int res, int x, int y, int font=0);
|
||||
void DrawTextCenter(int res, POINT pos, int font=0);
|
||||
BOOL CreateButtons();
|
||||
BOOL EventButtons(UINT message, WPARAM wParam, LPARAM lParam);
|
||||
BOOL MouseOnButton(POINT pos);
|
||||
@ -221,8 +187,8 @@ public:
|
||||
BOOL NetEnumSessions();
|
||||
int NetSearchPlayer(DPID dpid);
|
||||
void NetStartPlay();
|
||||
void NetSend(NetMessageType message, USHORT data);
|
||||
void NetDraw();
|
||||
void NetFUN_1d6b0(UINT message, USHORT data);
|
||||
void NetDrawMap();
|
||||
void ChatSend();
|
||||
|
||||
void MouseRelease();
|
||||
@ -246,7 +212,7 @@ protected:
|
||||
BOOL m_bSchool;
|
||||
BOOL m_bPrivate;
|
||||
BOOL m_bMulti;
|
||||
BOOL m_bAccessBuild;
|
||||
BOOL m_bBuildOfficialMissions;
|
||||
BOOL m_bFullScreen;
|
||||
int m_mouseType;
|
||||
HWND m_hWnd;
|
||||
@ -256,7 +222,7 @@ protected:
|
||||
CMovie* m_pMovie;
|
||||
CNetwork* m_pNetwork;
|
||||
char m_movieToStart[MAX_PATH];
|
||||
WMessage m_phaseAfterMovie;
|
||||
UINT m_phaseAfterMovie;
|
||||
CButton m_buttons[MAXBUTTON];
|
||||
int m_lastFloor[MAXBUTTON];
|
||||
int m_lastObject[MAXBUTTON];
|
||||
@ -324,7 +290,8 @@ protected:
|
||||
int m_textHiliEnd;
|
||||
int m_textCursorIndex;
|
||||
char m_textInput[100];
|
||||
char m_pPlayerName[100];
|
||||
char m_gamerName[100];
|
||||
char m_gamerNameList[10][100];
|
||||
int m_lives;
|
||||
int m_multi;
|
||||
HINSTANCE m_hInstance;
|
||||
|
@ -7,7 +7,7 @@
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#define MAXSESSION 100
|
||||
#define MAXPLAYERS 4
|
||||
#define MAXNETPLAYER 4
|
||||
|
||||
typedef struct
|
||||
{
|
||||
@ -57,14 +57,14 @@ public:
|
||||
void FreeUnknownList();
|
||||
BOOL IsHost();
|
||||
|
||||
NetPlayer m_players[4];
|
||||
DPID m_dpid;
|
||||
protected:
|
||||
LPDIRECTPLAY2 m_pDP;
|
||||
NamedGUIDList m_providers;
|
||||
NamedGUIDList m_sessions;
|
||||
NamedGUIDList m_unknown;
|
||||
BOOL m_bHost;
|
||||
DPID m_dpid;
|
||||
NetPlayer m_players[4];
|
||||
};
|
||||
|
||||
static BOOL EnumProvidersCallback(LPGUID lpguidSP, LPSTR lpSTName,
|
||||
|
@ -96,7 +96,7 @@
|
||||
<Link>
|
||||
<SubSystem>Windows</SubSystem>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<AdditionalDependencies>winmm.lib;ddraw.lib;dsound.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
<AdditionalDependencies>winmm.lib;ddraw.lib;dsound.lib;dplay.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||
|
522
text.cpp
522
text.cpp
@ -9,10 +9,267 @@
|
||||
#include "text.h"
|
||||
#include "texttables.h"
|
||||
|
||||
#pragma warning (disable: 4996)
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
static CharOffset table_offsets[] =
|
||||
{
|
||||
{ 1, 0, 0, -1, 0, 0 },
|
||||
{ 1, 0, 0, -1, 0, 0 },
|
||||
{ 1, 0, 0, -1, 0, 0 },
|
||||
{ 1, 0, 0, -1, 0, 0 },
|
||||
{ 1, 0, 0, -1, 0, 0 },
|
||||
{ 1, 0, 0, -1, 0, 0 },
|
||||
{ 1, 0, 0, -1, 0, 0 },
|
||||
{ 1, 0, 0, -1, 0, 0 },
|
||||
{ 1, 0, 0, -1, 0, 0 },
|
||||
{ 1, 0, 0, -1, 0, 0 },
|
||||
{ 1, 0, 0, -1, 0, 0 },
|
||||
{ 1, 0, 0, -1, 0, 0 },
|
||||
{ 1, 0, 0, -1, 0, 0 },
|
||||
{ 1, 0, 0, -1, 0, 0 },
|
||||
{ 1, 0, 0, -1, 0, 0 },
|
||||
{ 1, 0, 0, -1, 0, 0 },
|
||||
{ 1, 0, 0, -1, 0, 0 },
|
||||
{ 1, 0, 0, -1, 0, 0 },
|
||||
{ 1, 0, 0, -1, 0, 0 },
|
||||
{ 1, 0, 0, -1, 0, 0 },
|
||||
{ 1, 0, 0, -1, 0, 0 },
|
||||
{ 1, 0, 0, -1, 0, 0 },
|
||||
{ 1, 0, 0, -1, 0, 0 },
|
||||
{ 1, 0, 0, -1, 0, 0 },
|
||||
{ 1, 0, 0, -1, 0, 0 },
|
||||
{ 1, 0, 0, -1, 0, 0 },
|
||||
{ 1, 0, 0, -1, 0, 0 },
|
||||
{ 1, 0, 0, -1, 0, 0 },
|
||||
{ 1, 0, 0, -1, 0, 0 },
|
||||
{ 1, 0, 0, -1, 0, 0 },
|
||||
{ 1, 0, 0, -1, 0, 0 },
|
||||
{ 1, 0, 0, -1, 0, 0 },
|
||||
{ ' ', 0, 0, -1, 0, 0 },
|
||||
{ '!', 0, 0, -1, 0, 0 },
|
||||
{ '"', 0, 0, -1, 0, 0 },
|
||||
{ '#', 0, 0, -1, 0, 0 },
|
||||
{ '$', 0, 0, -1, 0, 0 },
|
||||
{ '%', 0, 0, -1, 0, 0 },
|
||||
{ '&', 0, 0, -1, 0, 0 },
|
||||
{ '\'', 0, 0, -1, 0, 0 },
|
||||
{ '(', 0, 0, -1, 0, 0 },
|
||||
{ ')', 0, 0, -1, 0, 0 },
|
||||
{ '*', 0, 0, -1, 0, 0 },
|
||||
{ '+', 0, 0, -1, 0, 0 },
|
||||
{ ',', 0, 0, -1, 0, 0 },
|
||||
{ '-', 0, 0, -1, 0, 0 },
|
||||
{ '.', 0, 0, -1, 0, 0 },
|
||||
{ '/', 0, 0, -1, 0, 0 },
|
||||
{ '0', 0, 0, -1, 0, 0 },
|
||||
{ '1', 0, 0, -1, 0, 0 },
|
||||
{ '2', 0, 0, -1, 0, 0 },
|
||||
{ '3', 0, 0, -1, 0, 0 },
|
||||
{ '4', 0, 0, -1, 0, 0 },
|
||||
{ '5', 0, 0, -1, 0, 0 },
|
||||
{ '6', 0, 0, -1, 0, 0 },
|
||||
{ '7', 0, 0, -1, 0, 0 },
|
||||
{ '8', 0, 0, -1, 0, 0 },
|
||||
{ '9', 0, 0, -1, 0, 0 },
|
||||
{ ':', 0, 0, -1, 0, 0 },
|
||||
{ ';', 0, 0, -1, 0, 0 },
|
||||
{ '<', 0, 0, -1, 0, 0 },
|
||||
{ '=', 0, 0, -1, 0, 0 },
|
||||
{ '>', 0, 0, -1, 0, 0 },
|
||||
{ '?', 0, 0, -1, 0, 0 },
|
||||
{ '@', 0, 0, -1, 0, 0 },
|
||||
{ 'A', 0, 0, -1, 0, 0 },
|
||||
{ 'B', 0, 0, -1, 0, 0 },
|
||||
{ 'C', 0, 0, -1, 0, 0 },
|
||||
{ 'D', 0, 0, -1, 0, 0 },
|
||||
{ 'E', 0, 0, -1, 0, 0 },
|
||||
{ 'F', 0, 0, -1, 0, 0 },
|
||||
{ 'G', 0, 0, -1, 0, 0 },
|
||||
{ 'H', 0, 0, -1, 0, 0 },
|
||||
{ 'I', 0, 0, -1, 0, 0 },
|
||||
{ 'J', 0, 0, -1, 0, 0 },
|
||||
{ 'K', 0, 0, -1, 0, 0 },
|
||||
{ 'L', 0, 0, -1, 0, 0 },
|
||||
{ 'M', 0, 0, -1, 0, 0 },
|
||||
{ 'N', 0, 0, -1, 0, 0 },
|
||||
{ 'O', 0, 0, -1, 0, 0 },
|
||||
{ 'P', 0, 0, -1, 0, 0 },
|
||||
{ 'Q', 0, 0, -1, 0, 0 },
|
||||
{ 'R', 0, 0, -1, 0, 0 },
|
||||
{ 'S', 0, 0, -1, 0, 0 },
|
||||
{ 'T', 0, 0, -1, 0, 0 },
|
||||
{ 'U', 0, 0, -1, 0, 0 },
|
||||
{ 'V', 0, 0, -1, 0, 0 },
|
||||
{ 'W', 0, 0, -1, 0, 0 },
|
||||
{ 'X', 0, 0, -1, 0, 0 },
|
||||
{ 'Y', 0, 0, -1, 0, 0 },
|
||||
{ 'Z', 0, 0, -1, 0, 0 },
|
||||
{ '[', 0, 0, -1, 0, 0 },
|
||||
{ '\\', 0, 0, -1, 0, 0 },
|
||||
{ ']', 0, 0, -1, 0, 0 },
|
||||
{ '^', 0, 0, -1, 0, 0 },
|
||||
{ '_', 0, 0, -1, 0, 0 },
|
||||
{ '`', 0, 0, -1, 0, 0 },
|
||||
{ 'a', 0, 0, -1, 0, 0 },
|
||||
{ 'b', 0, 0, -1, 0, 0 },
|
||||
{ 'c', 0, 0, -1, 0, 0 },
|
||||
{ 'd', 0, 0, -1, 0, 0 },
|
||||
{ 'e', 0, 0, -1, 0, 0 },
|
||||
{ 'f', 0, 0, -1, 0, 0 },
|
||||
{ 'g', 0, 0, -1, 0, 0 },
|
||||
{ 'h', 0, 0, -1, 0, 0 },
|
||||
{ 'i', 0, 0, -1, 0, 0 },
|
||||
{ 'j', 0, 0, -1, 0, 0 },
|
||||
{ 'k', 0, 0, -1, 0, 0 },
|
||||
{ 'l', 0, 0, -1, 0, 0 },
|
||||
{ 'm', 0, 0, -1, 0, 0 },
|
||||
{ 'n', 0, 0, -1, 0, 0 },
|
||||
{ 'o', 0, 0, -1, 0, 0 },
|
||||
{ 'p', 0, 0, -1, 0, 0 },
|
||||
{ 'q', 0, 0, -1, 0, 0 },
|
||||
{ 'r', 0, 0, -1, 0, 0 },
|
||||
{ 's', 0, 0, -1, 0, 0 },
|
||||
{ 't', 0, 0, -1, 0, 0 },
|
||||
{ 'u', 0, 0, -1, 0, 0 },
|
||||
{ 'v', 0, 0, -1, 0, 0 },
|
||||
{ 'w', 0, 0, -1, 0, 0 },
|
||||
{ 'x', 0, 0, -1, 0, 0 },
|
||||
{ 'y', 0, 0, -1, 0, 0 },
|
||||
{ 'z', 0, 0, -1, 0, 0 },
|
||||
{ '{', 0, 0, -1, 0, 0 },
|
||||
{ '|', 0, 0, -1, 0, 0 },
|
||||
{ '}', 0, 0, -1, 0, 0 },
|
||||
{ '~', 0, 0, -1, 0, 0 },
|
||||
{ 0x7f, 0, 0, -1, 0, 0 },
|
||||
{ 1, 0, 0, -1, 0, 0 },
|
||||
{ 1, 0, 0, -1, 0, 0 },
|
||||
{ 1, 0, 0, -1, 0, 0 },
|
||||
{ 1, 0, 0, -1, 0, 0 },
|
||||
{ 1, 0, 0, -1, 0, 0 },
|
||||
{ 1, 0, 0, -1, 0, 0 },
|
||||
{ 1, 0, 0, -1, 0, 0 },
|
||||
{ 1, 0, 0, -1, 0, 0 },
|
||||
{ 1, 0, 0, -1, 0, 0 },
|
||||
{ 1, 0, 0, -1, 0, 0 },
|
||||
{ 1, 0, 0, -1, 0, 0 },
|
||||
{ 1, 0, 0, -1, 0, 0 },
|
||||
{ 1, 0, 0, -1, 0, 0 },
|
||||
{ 1, 0, 0, -1, 0, 0 },
|
||||
{ 1, 0, 0, -1, 0, 0 },
|
||||
{ 1, 0, 0, -1, 0, 0 },
|
||||
{ 1, 0, 0, -1, 0, 0 },
|
||||
{ 1, 0, 0, -1, 0, 0 },
|
||||
{ 1, 0, 0, -1, 0, 0 },
|
||||
{ 1, 0, 0, -1, 0, 0 },
|
||||
{ 1, 0, 0, -1, 0, 0 },
|
||||
{ 1, 0, 0, -1, 0, 0 },
|
||||
{ 1, 0, 0, -1, 0, 0 },
|
||||
{ 1, 0, 0, -1, 0, 0 },
|
||||
{ 1, 0, 0, -1, 0, 0 },
|
||||
{ 1, 0, 0, -1, 0, 0 },
|
||||
{ 1, 0, 0, -1, 0, 0 },
|
||||
{ 1, 0, 0, -1, 0, 0 },
|
||||
{ 1, 0, 0, -1, 0, 0 },
|
||||
{ 1, 0, 0, -1, 0, 0 },
|
||||
{ 1, 0, 0, -1, 0, 0 },
|
||||
{ 1, 0, 0, -1, 0, 0 },
|
||||
{ 1, 0, 0, -1, 0, 0 },
|
||||
{ 0x05, 0, 0, -1, 0, 0 },
|
||||
{ 1, 0, 0, -1, 0, 0 },
|
||||
{ 1, 0, 0, -1, 0, 0 },
|
||||
{ 1, 0, 0, -1, 0, 0 },
|
||||
{ 1, 0, 0, -1, 0, 0 },
|
||||
{ 1, 0, 0, -1, 0, 0 },
|
||||
{ 1, 0, 0, -1, 0, 0 },
|
||||
{ 1, 0, 0, -1, 0, 0 },
|
||||
{ 1, 0, 0, -1, 0, 0 },
|
||||
{ 1, 0, 0, -1, 0, 0 },
|
||||
{ 1, 0, 0, -1, 0, 0 },
|
||||
{ 1, 0, 0, -1, 0, 0 },
|
||||
{ 1, 0, 0, -1, 0, 0 },
|
||||
{ 1, 0, 0, -1, 0, 0 },
|
||||
{ 1, 0, 0, -1, 0, 0 },
|
||||
{ 1, 0, 0, -1, 0, 0 },
|
||||
{ 1, 0, 0, -1, 0, 0 },
|
||||
{ 1, 0, 0, -1, 0, 0 },
|
||||
{ 1, 0, 0, -1, 0, 0 },
|
||||
{ 1, 0, 0, -1, 0, 0 },
|
||||
{ 1, 0, 0, -1, 0, 0 },
|
||||
{ 1, 0, 0, -1, 0, 0 },
|
||||
{ 1, 0, 0, -1, 0, 0 },
|
||||
{ 1, 0, 0, -1, 0, 0 },
|
||||
{ 1, 0, 0, -1, 0, 0 },
|
||||
{ 1, 0, 0, -1, 0, 0 },
|
||||
{ 1, 0, 0, -1, 0, 0 },
|
||||
{ 1, 0, 0, -1, 0, 0 },
|
||||
{ 1, 0, 0, -1, 0, 0 },
|
||||
{ 1, 0, 0, -1, 0, 0 },
|
||||
{ 0x04, 0, 0, -1, 0, 0 },
|
||||
{ 1, 0, 0, -1, 0, 0 },
|
||||
{ 1, 0, 0, -1, 0, 0 },
|
||||
{ 1, 0, 0, -1, 0, 0 },
|
||||
{ 1, 0, 0, -1, 0, 0 },
|
||||
{ 1, 0, 0, -1, 0, 0 },
|
||||
{ 1, 0, 0, -1, 0, 0 },
|
||||
{ 1, 0, 0, -1, 0, 0 },
|
||||
{ 1, 0, 0, -1, 0, 0 },
|
||||
{ 1, 0, 0, -1, 0, 0 },
|
||||
{ 1, 0, 0, -1, 0, 0 },
|
||||
{ 1, 0, 0, -1, 0, 0 },
|
||||
{ 1, 0, 0, -1, 0, 0 },
|
||||
{ 1, 0, 0, -1, 0, 0 },
|
||||
{ 1, 0, 0, -1, 0, 0 },
|
||||
{ 1, 0, 0, -1, 0, 0 },
|
||||
{ 1, 0, 0, -1, 0, 0 },
|
||||
{ 1, 0, 0, -1, 0, 0 },
|
||||
{ 1, 0, 0, -1, 0, 0 },
|
||||
{ 1, 0, 0, -1, 0, 0 },
|
||||
{ 1, 0, 0, -1, 0, 0 },
|
||||
{ 1, 0, 0, -1, 0, 0 },
|
||||
{ 1, 0, 0, -1, 0, 0 },
|
||||
{ 1, 0, 0, -1, 0, 0 },
|
||||
{ 1, 0, 0, -1, 0, 0 },
|
||||
{ 1, 0, 0, -1, 0, 0 },
|
||||
{ 1, 0, 0, -1, 0, 0 },
|
||||
{ 1, 0, 0, -1, 0, 0 },
|
||||
{ 1, 0, 0, -1, 0, 0 },
|
||||
{ 1, 0, 0, -1, 0, 0 },
|
||||
{ 1, 0, 0, -1, 0, 0 },
|
||||
{ 1, 0, 0, -1, 0, 0 },
|
||||
{ 1, 0, 0, -1, 0, 0 },
|
||||
{ 0x10, 0, 0, -1, 0, 0 },
|
||||
{ 'a', 0, 0, 2, 2, 0 },
|
||||
{ 0x11, 0, 0, -1, 0, 0 },
|
||||
{ 1, 0, 0, -1, 0, 0 },
|
||||
{ 0x1b, 0, 0, -1, 0, 0 },
|
||||
{ 1, 0, 0, -1, 0, 0 },
|
||||
{ 1, 0, 0, -1, 0, 0 },
|
||||
{ 0x1d, 0, 0, -1, 0, 0 },
|
||||
{ 0x13, 0, 0, -1, 0, 0 },
|
||||
{ 0x12, 0, 0, -1, 0, 0 },
|
||||
{ 0x15, 0, 0, -1, 0, 0 },
|
||||
{ 0x14, 0, 0, -1, 0, 0 },
|
||||
{ 1, 0, 0, -1, 0, 0 },
|
||||
{ 'i', 0, 0, 2, -1, 0 },
|
||||
{ 0x17, 0, 0, -1, 0, 0 },
|
||||
{ 0x16, 0, 0, -1, 0, 0 },
|
||||
{ 1, 0, 0, -1, 0, 0 },
|
||||
{ 'n', 0, 0, '~', -1, 0 },
|
||||
{ 1, 0, 0, -1, 0, 0 },
|
||||
{ 'o', 0, 0, 2, 1, 0 },
|
||||
{ 0x18, 0, 0, -1, 0, 0 },
|
||||
{ 1, 0, 0, -1, 0, 0 },
|
||||
{ 0x1c, 0, 0, -1, 0, 0 },
|
||||
{ 1, 0, 0, -1, 0, 0 },
|
||||
{ 1, 0, 0, -1, 0, 0 },
|
||||
{ 0x19, 0, 0, -1, 0, 0 },
|
||||
{ 'u', 0, 0, 2, 2, 0 },
|
||||
{ 0x1a, 0, 0, -1, 0, 0 },
|
||||
{ 0x0f, 0, 0, -1, 0, 0 },
|
||||
{ 1, 0, 0, -1, 0, 0 },
|
||||
{ 1, 0, 0, -1, 0, 0 },
|
||||
{ 1, 0, 0, -1, 0, 0 }
|
||||
};
|
||||
|
||||
// Retourne l'offset pour un caract<63>re donn<6E>.
|
||||
|
||||
@ -40,7 +297,7 @@ int GetOffset(char c)
|
||||
|
||||
// Retourne la longueur d'un caract<63>re.
|
||||
|
||||
int GetCharWidth(char c, int font)
|
||||
int GetCharWidthB(char c, int font)
|
||||
{
|
||||
static unsigned char table_width[128] =
|
||||
{
|
||||
@ -76,148 +333,105 @@ int GetCharWidth(char c, int font)
|
||||
}
|
||||
}
|
||||
|
||||
void DrawCharSingle(CPixmap *pPixmap, POINT pos, char *pText, int font)
|
||||
{
|
||||
if (font == FONTLITTLE)
|
||||
{
|
||||
pPixmap->DrawIcon(-1, CHLITTLE, *pText, pos, 0, FALSE);
|
||||
}
|
||||
else
|
||||
{
|
||||
pPixmap->DrawIcon(-1, CHTEXT, *pText + font * 128, pos, 0, FALSE);
|
||||
}
|
||||
}
|
||||
|
||||
void DrawChar(CPixmap *pPixmap, POINT *pos, char c, int font)
|
||||
{
|
||||
POINT pos2 { table_offsets[c].charOffsetX + pos->x, table_offsets[c].charOffsetY + pos->y };
|
||||
DrawCharSingle(pPixmap, pos2, &table_offsets[c].charIcon, font);
|
||||
if (table_offsets[c].accentIcon != -1)
|
||||
{
|
||||
pos2 = { table_offsets[c].accentOffsetX + pos->x, table_offsets[c].accentOffsetY + pos->y };
|
||||
DrawCharSingle(pPixmap, pos2, &table_offsets[c].accentIcon, font);
|
||||
}
|
||||
pos->x += GetCharWidthB(c, font);
|
||||
}
|
||||
|
||||
void DrawTextLeft(CPixmap *pPixmap, POINT pos, char *pText, int font)
|
||||
{
|
||||
DrawTextB(pPixmap, pos, pText, font);
|
||||
}
|
||||
|
||||
// Affiche un texte.
|
||||
|
||||
void DrawTextB(CPixmap *pPixmap, POINT pos, char *pText, int font)
|
||||
{
|
||||
int rank;
|
||||
|
||||
if ( font == FONTLITTLE )
|
||||
while (*pText != 0)
|
||||
{
|
||||
while ( *pText != 0 )
|
||||
{
|
||||
rank = GetOffset(*pText);
|
||||
pPixmap->DrawIcon(-1, CHLITTLE, rank, pos);
|
||||
|
||||
pos.x += GetCharWidth(*pText++, font);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
while ( *pText != 0 )
|
||||
{
|
||||
rank = GetOffset(*pText);
|
||||
rank += 128*font;
|
||||
pPixmap->DrawIcon(-1, CHTEXT, rank, pos);
|
||||
|
||||
pos.x += GetCharWidth(*pText++, font);
|
||||
}
|
||||
DrawChar(pPixmap, &pos, *pText++, font);
|
||||
}
|
||||
}
|
||||
|
||||
void DrawTextLeft(CPixmap* pPixmap, POINT pos, char *text, int font)
|
||||
{
|
||||
DrawTextB(pPixmap, pos, text, font);
|
||||
return;
|
||||
}
|
||||
|
||||
/*
|
||||
void DrawTextNew(CPixmap* pPixmap, POINT pos, char* pText, int font)
|
||||
{
|
||||
char text;
|
||||
|
||||
text = *pText;
|
||||
|
||||
while (text != '\0')
|
||||
{
|
||||
pText = pText + 1;
|
||||
DrawChar(pPixmap, &pos, text, font);
|
||||
text = *pText;
|
||||
}
|
||||
}
|
||||
*/
|
||||
|
||||
//Implement later
|
||||
|
||||
void DrawChar(CPixmap* pPixmap, POINT* pos, char c, double size)
|
||||
{
|
||||
POINT pos2;
|
||||
int num = (int)((short)c * 6);
|
||||
int num2 = (int)table_char[num];
|
||||
pos2.x = pos->x + (int)table_char[num + 1];
|
||||
pos2.y = pos->y + (int)table_char[num + 2];
|
||||
DrawCharSingle(pPixmap, pos2, num2, size);
|
||||
num2 = (int)table_char[num + 3];
|
||||
if (num2 != -1)
|
||||
{
|
||||
pos2.x = pos->x + (int)table_char[num + 4];
|
||||
pos2.y = pos->y + (int)table_char[num + 5];
|
||||
DrawCharSingle(pPixmap, pos2, num2, size);
|
||||
}
|
||||
pos->x += GetCharWidth(c, size);
|
||||
}
|
||||
|
||||
void DrawCharSingle(CPixmap pPixmap, POINT pos, int rank, double size)
|
||||
{
|
||||
pPixmap.DrawChar(rank, pos, size);
|
||||
}
|
||||
|
||||
void GetSomethingDrawText(CPixmap* pPixmap, POINT pos, char* pText, int font)
|
||||
{
|
||||
DrawTextNew(pPixmap, pos, pText, font);
|
||||
return;
|
||||
}
|
||||
|
||||
// Affiche un texte pench<63>.
|
||||
// Affiche un texte penché.
|
||||
|
||||
void DrawTextPente(CPixmap *pPixmap, POINT pos, char *pText,
|
||||
int pente, int font)
|
||||
int pente, int font)
|
||||
{
|
||||
int rank, lg, rel, start;
|
||||
|
||||
start = pos.y;
|
||||
rel = 0;
|
||||
while ( *pText != 0 )
|
||||
while (*pText != 0)
|
||||
{
|
||||
rank = GetOffset(*pText);
|
||||
rank += 128*font;
|
||||
rank += 128 * font;
|
||||
pPixmap->DrawIcon(-1, CHTEXT, rank, pos);
|
||||
|
||||
lg = GetCharWidth(*pText++, font);
|
||||
lg = GetCharWidthB(*pText++, font);
|
||||
rel += lg;
|
||||
pos.x += lg;
|
||||
pos.y = start + rel/pente;
|
||||
pos.y = start + rel / pente;
|
||||
}
|
||||
}
|
||||
|
||||
// Affiche un pav<EFBFBD> de texte.
|
||||
// Une ligne vide est affich<EFBFBD>e avec un demi interligne !
|
||||
// Affiche un pavé de texte.
|
||||
// Une ligne vide est affichée avec un demi interligne !
|
||||
// Si part != -1, n'affiche que les lignes qui commencent
|
||||
// par "n|", avec n=part.
|
||||
|
||||
void DrawTextRect(CPixmap *pPixmap, POINT pos, char *pText,
|
||||
int pente, int font, int part)
|
||||
int pente, int font, int part)
|
||||
{
|
||||
char text[100];
|
||||
char* pDest;
|
||||
int itl;
|
||||
|
||||
if ( font == FONTLITTLE ) itl = DIMLITTLEY;
|
||||
if (font == FONTLITTLE) itl = DIMLITTLEY;
|
||||
else itl = DIMTEXTY;
|
||||
|
||||
while ( *pText != 0 )
|
||||
while (*pText != 0)
|
||||
{
|
||||
pDest = text;
|
||||
while ( *pText != 0 && *pText != '\r' && *pText != '\n' )
|
||||
while (*pText != 0 && *pText != '\r' && *pText != '\n')
|
||||
{
|
||||
*pDest++ = *pText++;
|
||||
}
|
||||
*pDest = 0;
|
||||
if ( *pText == '\r' ) pText ++; // saute '\r'
|
||||
if ( *pText == '\n' ) pText ++; // saute '\n'
|
||||
if (*pText == '\r') pText++; // saute '\r'
|
||||
if (*pText == '\n') pText++; // saute '\n'
|
||||
|
||||
pDest = text;
|
||||
if ( text[0] != 0 && text[1] == '|' ) // commence par "n|" ?
|
||||
if (text[0] != 0 && text[1] == '|') // commence par "n|" ?
|
||||
{
|
||||
if ( part != -1 && part != text[0]-'0' ) continue;
|
||||
if (part != -1 && part != text[0] - '0') continue;
|
||||
pDest += 2; // saute "n|"
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( part != -1 ) continue;
|
||||
if (part != -1) continue;
|
||||
}
|
||||
|
||||
if ( pente == 0 )
|
||||
if (pente == 0)
|
||||
{
|
||||
DrawTextB(pPixmap, pos, pDest, font);
|
||||
}
|
||||
@ -226,19 +440,19 @@ void DrawTextRect(CPixmap *pPixmap, POINT pos, char *pText,
|
||||
DrawTextPente(pPixmap, pos, pDest, pente, font);
|
||||
}
|
||||
|
||||
if ( pDest[0] == 0 ) // ligne vide ?
|
||||
if (pDest[0] == 0) // ligne vide ?
|
||||
{
|
||||
pos.y += itl/2; // descend de 1/2 ligne
|
||||
pos.y += itl / 2; // descend de 1/2 ligne
|
||||
}
|
||||
else
|
||||
{
|
||||
pos.y += itl; // passe <EFBFBD> la ligne suivante
|
||||
pos.y += itl; // passe à la ligne suivante
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Affiche un texte centr<EFBFBD> pouvant <20>ventuellement
|
||||
// contenir plusieurs lignes s<EFBFBD>par<EFBFBD>es par des '\n'.
|
||||
// Affiche un texte centré pouvant éventuellement
|
||||
// contenir plusieurs lignes séparées par des '\n'.
|
||||
|
||||
void DrawTextCenter(CPixmap *pPixmap, POINT pos, char *pText, int font)
|
||||
{
|
||||
@ -247,32 +461,32 @@ void DrawTextCenter(CPixmap *pPixmap, POINT pos, char *pText, int font)
|
||||
int itl;
|
||||
POINT start;
|
||||
|
||||
if ( font == FONTLITTLE ) itl = DIMLITTLEY;
|
||||
if (font == FONTLITTLE) itl = DIMLITTLEY;
|
||||
else itl = DIMTEXTY;
|
||||
|
||||
while ( *pText != 0 )
|
||||
while (*pText != 0)
|
||||
{
|
||||
pDest = text;
|
||||
while ( *pText != 0 && *pText != '\r' && *pText != '\n' )
|
||||
while (*pText != 0 && *pText != '\r' && *pText != '\n')
|
||||
{
|
||||
*pDest++ = *pText++;
|
||||
}
|
||||
*pDest = 0;
|
||||
if ( *pText == '\r' ) pText ++; // saute '\r'
|
||||
if ( *pText == '\n' ) pText ++; // saute '\n'
|
||||
if (*pText == '\r') pText++; // saute '\r'
|
||||
if (*pText == '\n') pText++; // saute '\n'
|
||||
|
||||
pDest = text;
|
||||
start.x = pos.x - GetTextWidth(pDest)/2;
|
||||
start.x = pos.x - GetTextWidth(pDest) / 2;
|
||||
start.y = pos.y;
|
||||
DrawTextB(pPixmap, start, pDest, font);
|
||||
|
||||
if ( pDest[0] == 0 ) // ligne vide ?
|
||||
if (pDest[0] == 0) // ligne vide ?
|
||||
{
|
||||
pos.y += itl/2; // descend de 1/2 ligne
|
||||
pos.y += itl / 2; // descend de 1/2 ligne
|
||||
}
|
||||
else
|
||||
{
|
||||
pos.y += itl; // passe <EFBFBD> la ligne suivante
|
||||
pos.y += itl; // passe à la ligne suivante
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -284,40 +498,40 @@ int GetTextHeight(char *pText, int font, int part)
|
||||
char text[100];
|
||||
char* pDest;
|
||||
int itl;
|
||||
int h=0;
|
||||
int h = 0;
|
||||
|
||||
if ( font == FONTLITTLE ) itl = DIMLITTLEY;
|
||||
if (font == FONTLITTLE) itl = DIMLITTLEY;
|
||||
else itl = DIMTEXTY;
|
||||
|
||||
while ( *pText != 0 )
|
||||
while (*pText != 0)
|
||||
{
|
||||
pDest = text;
|
||||
while ( *pText != 0 && *pText != '\r' && *pText != '\n' )
|
||||
while (*pText != 0 && *pText != '\r' && *pText != '\n')
|
||||
{
|
||||
*pDest++ = *pText++;
|
||||
}
|
||||
*pDest = 0;
|
||||
if ( *pText == '\r' ) pText ++; // saute '\r'
|
||||
if ( *pText == '\n' ) pText ++; // saute '\n'
|
||||
if (*pText == '\r') pText++; // saute '\r'
|
||||
if (*pText == '\n') pText++; // saute '\n'
|
||||
|
||||
pDest = text;
|
||||
if ( text[0] != 0 && text[1] == '|' ) // commence par "n|" ?
|
||||
if (text[0] != 0 && text[1] == '|') // commence par "n|" ?
|
||||
{
|
||||
if ( part != -1 && part != text[0]-'0' ) continue;
|
||||
if (part != -1 && part != text[0] - '0') continue;
|
||||
pDest += 2; // saute "n|"
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( part != -1 ) continue;
|
||||
if (part != -1) continue;
|
||||
}
|
||||
|
||||
if ( pDest[0] == 0 ) // ligne vide ?
|
||||
if (pDest[0] == 0) // ligne vide ?
|
||||
{
|
||||
h += itl/2; // descend de 1/2 ligne
|
||||
h += itl / 2; // descend de 1/2 ligne
|
||||
}
|
||||
else
|
||||
{
|
||||
h += itl; // passe <EFBFBD> la ligne suivante
|
||||
h += itl; // passe à la ligne suivante
|
||||
}
|
||||
}
|
||||
|
||||
@ -330,72 +544,10 @@ int GetTextWidth(char *pText, int font)
|
||||
{
|
||||
int width = 0;
|
||||
|
||||
while ( *pText != 0 )
|
||||
while (*pText != 0)
|
||||
{
|
||||
width += GetCharWidth(*pText++, font);
|
||||
width += GetCharWidthB(*pText++, font);
|
||||
}
|
||||
|
||||
return width;
|
||||
}
|
||||
|
||||
|
||||
// Retourne la longueur d'un grand chiffre.
|
||||
|
||||
void GetBignumInfo(int num, int &start, int &lg)
|
||||
{
|
||||
static int table[11] =
|
||||
{
|
||||
0,53,87,133,164,217,253,297,340,382,426
|
||||
};
|
||||
|
||||
start = table[num];
|
||||
lg = table[num+1]-table[num];
|
||||
}
|
||||
|
||||
// Affiche un grand nombre.
|
||||
|
||||
void DrawBignum(CPixmap *pPixmap, POINT pos, int num)
|
||||
{
|
||||
char string[10];
|
||||
int i = 0;
|
||||
int start, lg;
|
||||
RECT rect;
|
||||
|
||||
sprintf(string, "%d", num);
|
||||
|
||||
rect.top = 0;
|
||||
rect.bottom = 52;
|
||||
while ( string[i] != 0 )
|
||||
{
|
||||
GetBignumInfo(string[i]-'0', start, lg);
|
||||
|
||||
rect.left = start;
|
||||
rect.right = start+lg;
|
||||
pPixmap->DrawPart(-1, CHBIGNUM, pos, rect);
|
||||
pos.x += lg+4;
|
||||
|
||||
i ++;
|
||||
}
|
||||
}
|
||||
|
||||
// Retourne la longueur d'un grand nombre.
|
||||
|
||||
int GetBignumWidth(int num)
|
||||
{
|
||||
char string[10];
|
||||
int i = 0;
|
||||
int start, lg;
|
||||
int width = -4;
|
||||
|
||||
sprintf(string, "%d", num);
|
||||
|
||||
while ( string[i] != 0 )
|
||||
{
|
||||
GetBignumInfo(string[i]-'0', start, lg);
|
||||
width += lg+4;
|
||||
i ++;
|
||||
}
|
||||
|
||||
return width;
|
||||
}
|
||||
|
||||
|
30
text.h
30
text.h
@ -19,43 +19,31 @@ typedef struct
|
||||
CharOffset;
|
||||
|
||||
extern
|
||||
void DrawTextB(CPixmap *pPixmap, POINT pos, char *pText, int font);
|
||||
void DrawCharSingle(CPixmap *pPixmap, POINT pos, char *pText, int font);
|
||||
|
||||
extern
|
||||
void DrawTextLeft(CPixmap* pPixmap, POINT pos, char *text, int font);
|
||||
void DrawChar(CPixmap *pPixmap, POINT *pos, char c, int font);
|
||||
|
||||
extern
|
||||
void DrawTextNew(CPixmap *pPixmap, POINT pos, char* pText, int font);
|
||||
void DrawTextLeft(CPixmap *pPixmap, POINT pos, char *pText, int font);
|
||||
|
||||
extern
|
||||
void DrawChar(CPixmap* pPixmap, POINT pos, char* pText, double size);
|
||||
|
||||
extern
|
||||
void DrawCharSingle(CPixmap* pPixmap, POINT pos, int rank, double size);
|
||||
|
||||
extern
|
||||
void DrawTextNew(CPixmap* pPixmap, POINT pos, char* pText, int font);
|
||||
void DrawTextB(CPixmap *pPixmap, POINT pos, char *pText, int font = 0);
|
||||
|
||||
extern
|
||||
void DrawTextPente(CPixmap *pPixmap, POINT pos, char *pText,
|
||||
int pente, int font=0);
|
||||
int pente, int font = 0);
|
||||
|
||||
extern
|
||||
void DrawTextRect(CPixmap *pPixmap, POINT pos, char *pText,
|
||||
int pente, int font=0, int part=-1);
|
||||
int pente, int font = 0, int part = -1);
|
||||
|
||||
extern
|
||||
void DrawTextCenter(CPixmap *pPixmap, POINT pos, char *pText, int font=0);
|
||||
void DrawTextCenter(CPixmap *pPixmap, POINT pos, char *pText, int font = 0);
|
||||
|
||||
extern
|
||||
int GetTextHeight(char *pText, int font=0, int part=-1);
|
||||
int GetTextHeight(char *pText, int font = 0, int part = -1);
|
||||
|
||||
extern
|
||||
int GetTextWidth(char *pText, int font=0);
|
||||
|
||||
extern
|
||||
void DrawBignum(CPixmap *pPixmap, POINT pos, int num);
|
||||
|
||||
extern
|
||||
int GetBignumWidth(int num);
|
||||
int GetTextWidth(char *pText, int font = 0);
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user