1
0
mirror of https://github.com/jummy0/sb2-decomp synced 2025-03-14 20:23:30 +01:00
weird
This commit is contained in:
jummy 2024-09-07 21:26:29 -05:00
parent 985adb2d01
commit ba1bce279e
9 changed files with 716 additions and 356 deletions

View File

@ -38,7 +38,7 @@
#define TITLE "Blupi"
#endif
#define MMTIMER TRUE
#define MMTIMER FALSE
#define THREAD FALSE
// Variables Globals
@ -438,6 +438,10 @@ LRESULT CALLBACK WindowProc(HWND hWnd, UINT message,
if (g_pEvent != NULL &&
g_pEvent->TreatEvent(message, wParam, lParam)) return 0;
char buf[25]; // DEBUG
sprintf(buf, "%d\n", message);
OutputDebug(buf);
switch (message)
{
case WM_TIMER:
@ -584,14 +588,17 @@ LRESULT CALLBACK WindowProc(HWND hWnd, UINT message,
return DefWindowProc(hWnd, message, wParam, lParam);
}
LPTIMECALLBACK TimerStep()
void CALLBACK TimerStep(UINT wTimerID, UINT msg,
DWORD dwUser, DWORD dw1, DWORD dw2)
{
char buf[20];
sprintf(buf, "%d", wTimerID);
OutputDebug(buf);
if (g_bActive && g_timer == 0)
{
g_timer = 1;
PostMessageA(g_hWnd, WM_UPDATE, 0, 0);
PostMessage(g_hWnd, WM_UPDATE, 0, 0);
}
return NULL;
}
// Erreur dans DoInit.
@ -806,7 +813,7 @@ int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
Benchmark();
#if MMTIMER
g_updateTimer = timeSetEvent(g_timerInterval, g_timerInterval / 4, TimerStep(), NULL, TIME_PERIODIC);
g_updateTimer = timeSetEvent(g_timerInterval, g_timerInterval / 4, TimerStep, NULL, TIME_PERIODIC);
#else
SetTimer(g_hWnd, 1, g_timerInterval, NULL);
#endif

View File

@ -5,7 +5,7 @@
#include <stdlib.h>
#include <stdio.h>
#include <ddraw.h>
// #include <minwindef.h>
#include <windef.h>
#include "def.h"
#include "pixmap.h"
@ -22,18 +22,18 @@ using namespace std;
CButton::CButton()
{
m_type = 0;
m_bEnable = TRUE;
m_bHide = FALSE;
m_bSomething = FALSE;
m_state = 0;
m_mouseState = 0;
m_nbMenu = 0;
m_nbToolTips = 0;
m_selMenu = 0;
m_bMouseDown = FALSE;
m_bMinimizeRedraw = FALSE;
m_bRedraw = FALSE;
m_type = 0;
m_bEnable = TRUE;
m_bHide = FALSE;
m_bSomething = FALSE;
m_state = 0;
m_mouseState = 0;
m_nbMenu = 0;
m_nbToolTips = 0;
m_selMenu = 0;
m_bMouseDown = FALSE;
m_bMinimizeRedraw = FALSE;
m_bRedraw = FALSE;
}
// Destructor
@ -46,121 +46,77 @@ CButton::~CButton()
// Create a new Button
BOOL CButton::Create(HWND hWnd, CPixmap *pPixmap, CSound *pSound,
POINT pos, int type, int* pMenu, int nbMenu, int *pToolTips, int nbToolTips, BOOL bMinimizeRedraw, int region, UINT message)
POINT pos, int type, int* pMenu, int nbMenu, int* pToolTips, int nbToolTips, BOOL bMinimizeRedraw, int region, UINT message)
{
POINT iconDim;
int i, icon;
POINT iconDim;
int i, icon;
static int ttypes[] =
{
DIMBUTTONX,DIMBUTTONY,
};
if ( type < 0 || type > 0 ) return FALSE;
iconDim.x = ttypes[type*2+0];
iconDim.y = ttypes[type*2+1];
m_hWnd = hWnd;
m_pPixmap = pPixmap;
m_pSound = pSound;
m_type = type;
m_bMinimizeRedraw = bMinimizeRedraw;
m_bEnable = TRUE;
m_bHide = FALSE;
m_bSomething = FALSE;
m_message = message;
m_pos.x = pos.x;
m_pos.y = pos.y;
m_dim.x = iconDim.x;
m_dim.y = iconDim.y;
m_nbMenu = nbMenu;
m_nbToolTips = nbToolTips;
m_selMenu = 0;
m_state = 0;
m_mouseState = 0;
m_bMouseDown = FALSE;
m_bRedraw = TRUE;
/* Do we need this yet?
///////////////////////////////////////////////////
for ( i=0 ; i<nbMenu ; i++ )
static int ttypes[] =
{
icon = pMenu[i];
DIMBUTTONX,DIMBUTTONY,
};
if ( region == 1 ) // palmiers ?
{
if ( icon == 0 ) icon = 90; // sol normal
if ( icon == 1 ) icon = 91; // sol inflammable
if ( icon == 2 ) icon = 92; // sol inculte
if ( icon == 7 ) icon = 9; // plante
if ( icon == 8 ) icon = 10; // arbre
}
if (type < 0 || type > 0) return FALSE;
if ( region == 2 ) // hiver ?
{
if ( icon == 0 ) icon = 96; // sol normal
if ( icon == 1 ) icon = 97; // sol inflammable
if ( icon == 2 ) icon = 98; // sol inculte
if ( icon == 8 ) icon = 99; // arbre
}
if ( region == 3 ) // sapin ?
{
if ( icon == 0 ) icon = 102; // sol normal
if ( icon == 1 ) icon = 103; // sol inflammable
if ( icon == 2 ) icon = 104; // sol inculte
if ( icon == 8 ) icon = 105; // arbre
}
m_iconMenu[i] = icon;
}
for ( i=0 ; i<nbToolTips ; i++ )
{
m_toolTips[i] = pToolTips[i];
}
iconDim.x = ttypes[type * 2 + 0];
iconDim.y = ttypes[type * 2 + 1];
m_hWnd = hWnd;
m_pPixmap = pPixmap;
m_pSound = pSound;
m_type = type;
m_bMinimizeRedraw = bMinimizeRedraw;
m_bEnable = TRUE;
m_bHide = FALSE;
m_bSomething = FALSE;
m_message = message;
m_pos.x = pos.x;
m_pos.y = pos.y;
m_dim.x = iconDim.x;
m_dim.y = iconDim.y;
m_nbMenu = 0;
m_nbToolTips = 0;
m_selMenu = 0;
m_state = 0;
m_mouseState = 0;
m_bMouseDown = FALSE;
m_bRedraw = TRUE;
return TRUE;
/////////////////////////////////////////////////////
*/
}
// Space for unknown menu function.
void CButton::SetSomethingMenu(int* icon, int somethingMenu)
void CButton::SetIconMenu(int* icon, int iconMenu)
{
int i = somethingMenu;
int* iconMenu;
int menu;
int i = iconMenu;
int* iconMenu2;
if (somethingMenu > 0)
if (0 < iconMenu)
{
for (i = 0; i < somethingMenu; i++)
iconMenu2 = m_iconMenu;
for (i = 0; i < iconMenu; i++)
{
icon++;
m_iconMenu[i] = (int)icon;
m_iconMenu[i] = icon[i];
}
}
m_nbMenu = somethingMenu;
m_nbMenu = iconMenu;
}
void CButton::MenuToolTips(int* menu, int menuTooltips)
void CButton::SetToolTips(int* menu, int menuTooltips)
{
int toolTips;
int* menuTool;
int i;
if (menuTooltips > 0)
if (0 < menuTooltips)
{
menuTool = m_toolTips;
i = menuTooltips;
do
for (i = 0; i < menuTooltips; i++)
{
toolTips = *menu++;
*menuTool++ = toolTips;
--i;
} while (i);
menu++;
m_toolTips[i] = menu[i];
}
}
m_nbToolTips = menuTooltips;
}
@ -173,43 +129,43 @@ void CButton::Draw()
POINT pos;
RECT rect;
if ( m_bMinimizeRedraw && !m_bRedraw ) return;
if (m_bMinimizeRedraw && !m_bRedraw) return;
m_bRedraw = FALSE, m_bSomething = FALSE;
if ( m_bHide ) // Hidden button
if (m_bHide) // Hidden button
{
pos.y = m_pos.y;
pos.x = m_pos.x;
pos.y = m_pos.y;
pos.x = m_pos.x;
return;
}
if( m_bEnable )
if (m_bEnable)
{
m_pPixmap->DrawIcon(-1, CHBUTTON+m_type, m_mouseState, m_pos);
m_pPixmap->DrawIcon(-1, CHBUTTON + m_type, m_mouseState, m_pos);
}
else
{
m_pPixmap->DrawIcon(-1, CHBUTTON+m_type, 4, m_pos);
m_pPixmap->DrawIcon(-1, CHBUTTON + m_type, 4, m_pos);
}
if ( m_nbMenu == 0 ) return;
if (m_nbMenu == 0) return;
pos = m_pos;
if ( m_nbMenu > 0 )
if (m_nbMenu > 0)
{
m_pPixmap->DrawIcon(-1, CHBUTTON+m_type,
m_iconMenu[m_selMenu]+6, pos);
m_pPixmap->DrawIcon(-1, CHBUTTON + m_type,
m_iconMenu[m_selMenu] + 6, pos);
}
if ( m_nbMenu == 1 || !m_bEnable || !m_bMouseDown ) return;
if (m_nbMenu == 1 || !m_bEnable || !m_bMouseDown) return;
pos = m_pos;
pos.x += m_dim.x+2;
for ( i=0 ; i<m_nbMenu ; i++ )
pos.x += m_dim.x + 2;
for (i = 0; i<m_nbMenu; i++)
{
m_pPixmap->DrawIcon(-1, CHBUTTON+m_type, i==m_selMenu?1:0, pos);
m_pPixmap->DrawIcon(-1, CHBUTTON+m_type, m_iconMenu[i]+6, pos);
pos.x += m_dim.x-1;
m_pPixmap->DrawIcon(-1, CHBUTTON + m_type, i == m_selMenu ? 1 : 0, pos);
m_pPixmap->DrawIcon(-1, CHBUTTON + m_type, m_iconMenu[i] + 6, pos);
pos.x += m_dim.x - 1;
}
}
@ -218,7 +174,7 @@ void CButton::Draw()
//////////////////////////////////////////////
void CButton::Redraw()
{
m_bRedraw = TRUE;
m_bRedraw = TRUE;
}
//////////////////////////////////////////////
*/
@ -230,13 +186,13 @@ int CButton::GetState()
void CButton::SetState(int state)
{
if ( m_state != state ||
m_mouseState != state )
if (m_state != state ||
m_mouseState != state)
{
m_bRedraw = TRUE;
}
m_state = state;
m_state = state;
m_mouseState = state;
}
@ -247,7 +203,7 @@ int CButton::GetMenu()
void CButton::SetMenu(int menu)
{
if ( m_selMenu != menu )
if (m_selMenu != menu)
{
m_bRedraw = TRUE;
}
@ -257,7 +213,7 @@ void CButton::SetMenu(int menu)
void CButton::SetEnable(BOOL bEnable)
{
if ( m_bEnable != bEnable )
if (m_bEnable != bEnable)
{
m_bRedraw = TRUE;
}
@ -281,7 +237,7 @@ void CButton::SetSomething(BOOL bSomething)
/////////////////////////////////////////
BOOL CButton::GetHide()
{
return m_bHide;
return m_bHide;
}
/////////////////////////////////////////
*/
@ -289,7 +245,7 @@ BOOL CButton::GetHide()
void CButton::SetHide(BOOL bHide)
{
if ( m_bHide != bHide )
if (m_bHide != bHide)
{
m_bRedraw = TRUE;
}
@ -301,25 +257,25 @@ BOOL CButton::TreatEvent(UINT message, WPARAM wParam, LPARAM lParam)
{
POINT pos;
if ( m_bHide || !m_bEnable ) return FALSE;
if (m_bHide || !m_bEnable) return FALSE;
pos = ConvLongToPos(lParam);
switch( message )
switch (message)
{
case WM_LBUTTONDOWN:
case WM_RBUTTONDOWN:
if ( MouseDown(pos) ) return TRUE;
break;
case WM_LBUTTONDOWN:
case WM_RBUTTONDOWN:
if (MouseDown(pos)) return TRUE;
break;
case WM_MOUSEMOVE:
if ( MouseMove(pos) ) return TRUE;
break;
case WM_LBUTTONUP:
case WM_RBUTTONUP:
if ( MouseUp(pos) ) return FALSE;
break;
case WM_MOUSEMOVE:
if (MouseMove(pos)) return TRUE;
break;
case WM_LBUTTONUP:
case WM_RBUTTONUP:
if (MouseUp(pos)) return FALSE;
break;
}
return FALSE;
@ -342,27 +298,27 @@ int CButton::GetToolTips(POINT pos)
int width = m_dim.x;
int rank;
if ( m_bHide || !m_bEnable ) return -1;
if (m_bHide || !m_bEnable) return -1;
if ( m_nbMenu > 1 && m_bMouseDown ) // Drop-down submenu?
if (m_nbMenu > 1 && m_bMouseDown) // Drop-down submenu?
{
width += 2+(m_dim.x-1)*m_nbMenu;
width += 2 + (m_dim.x - 1)*m_nbMenu;
}
if ( pos.x < m_pos.x ||
pos.x > m_pos.x+width ||
pos.y < m_pos.y ||
pos.y > m_pos.y+m_dim.y ) return -1;
rank = (pos.x=-(m_pos.x+2+1))/(m_dim.x-1);
if ( rank < 0 ) rank = 0;
if ( rank > m_nbToolTips ) return -1;
if (pos.x < m_pos.x ||
pos.x > m_pos.x + width ||
pos.y < m_pos.y ||
pos.y > m_pos.y + m_dim.y) return -1;
if ( m_nbMenu > 1 )
rank = (pos.x = -(m_pos.x + 2 + 1)) / (m_dim.x - 1);
if (rank < 0) rank = 0;
if (rank > m_nbToolTips) return -1;
if (m_nbMenu > 1)
{
if ( m_bMouseDown && rank > 0 )
if (m_bMouseDown && rank > 0)
{
rank --;
rank--;
}
else
{
@ -377,73 +333,71 @@ BOOL CButton::Detect(POINT pos)
{
int width = m_dim.x;
if ( m_bHide || !m_bEnable ) return FALSE;
if (m_bHide || !m_bEnable) return FALSE;
if ( m_nbMenu > 1 && m_bMouseDown )
if (m_nbMenu > 1 && m_bMouseDown)
{
width += 2+(m_dim.x-1)*m_nbMenu;
width += 2 + (m_dim.x - 1)*m_nbMenu;
}
if ( pos.x < m_pos.x ||
pos.x > m_pos.x+width ||
pos.y < m_pos.y ||
pos.y > m_pos.y+m_dim.y ) return FALSE;
return TRUE;
}
BOOL CButton::MouseDown(POINT pos)
{
if ( !Detect(pos) ) return FALSE;
m_mouseState = 1;
m_bMouseDown = TRUE;
m_bRedraw = TRUE;
PostMessage(m_hWnd, WM_UPDATE, 0, 0);
if (pos.x < m_pos.x ||
pos.x > m_pos.x + width ||
pos.y < m_pos.y ||
pos.y > m_pos.y + m_dim.y) return FALSE;
return TRUE;
}
BOOL CButton::MouseMove(POINT pos)
{
BOOL bDetect;
int iState, iMenu;
int selMenu = m_selMenu;
int mouseState;
BOOL BVar3;
int iVar4;
int iVar5;
BOOL BVar6;
int iVar7;
iState = m_mouseState;
iMenu = m_selMenu;
bDetect = Detect(pos);
if ( m_bMouseDown )
{
if ( bDetect ) m_mouseState = 1;
else m_mouseState = m_state;
}
else
{
if ( bDetect ) m_mouseState = m_state+2;
else m_mouseState = m_state;
}
if ( m_nbMenu > 1 &&
m_bMouseDown &&
pos.x > m_pos.x+m_dim.x+2 )
{
m_selMenu = (pos.x-(m_pos.x+m_dim.x+2))/(m_dim.x-1);
if ( m_selMenu >= m_nbMenu )
{
m_selMenu = m_nbMenu-1;
mouseState = m_mouseState;
BVar6 = Detect(pos);
BVar3 = m_bMouseDown;
if (!m_bMouseDown) {
if (!Detect(pos)) {
m_mouseState = m_state;
}
else {
m_mouseState = m_state + 2;
}
}
if ( iState != m_mouseState ||
iMenu != m_selMenu )
{
m_bRedraw = TRUE;
PostMessage(m_hWnd, WM_UPDATE, 0, 0);
else if (Detect(pos)) {
m_mouseState = 1;
}
else {
m_mouseState = m_state;
}
if (m_nbMenu > 1 && m_bMouseDown) {
if ((m_pos.x + m_dim.x + 2 < pos.x))
{
m_selMenu = (pos.x - m_pos.x - m_dim.x - 2) / (m_dim.x - 1);
if (m_selMenu >= m_nbMenu) m_selMenu = m_nbMenu - 1;
}
}
if (mouseState != m_mouseState || selMenu != m_selMenu) m_bRedraw = TRUE;
return BVar3;
}
return m_bMouseDown;
BOOL CButton::MouseDown(POINT pos)
{
if (!Detect(pos)) return FALSE;
m_mouseState = 1;
m_bMouseDown = TRUE;
m_bRedraw = TRUE;
// PostMessage(m_hWnd, WM_UPDATE, 0, 0);
m_pSound->PlayImage(SOUND_CLICK, pos);
return TRUE;
}
BOOL CButton::MouseUp(POINT pos)
@ -454,11 +408,11 @@ BOOL CButton::MouseUp(POINT pos)
m_mouseState = m_state;
m_bMouseDown = FALSE;
m_bRedraw = TRUE;
m_bRedraw = TRUE;
if ( !bDetect ) return FALSE;
if (!bDetect) return FALSE;
if ( m_message != -1 )
if (m_message != -1)
{
PostMessage(m_hWnd, m_message, 0, 0);
}

View File

@ -14,8 +14,8 @@ public:
BOOL Create(HWND hWnd, CPixmap *pPixmap, CSound *pSound,
POINT pos, int type, int* pMenu, int nbMenu, int* pToolTips, int nbToolTips, BOOL bMinimizeRedraw, int region, UINT message);
void SetSomethingMenu(int* icon, int somethingMenu);
void MenuToolTips(int* menu, int menuTooltips);
void SetIconMenu(int* icon, int iconMenu);
void SetToolTips(int* menu, int menuTooltips);
void Draw();
void Redraw();

View File

@ -53,7 +53,7 @@ void CDecor::NetDataFlush()
m_netIcons[i] = -1;
m_netUnk1[i] = 0;
m_netUnk2[i] = 0;
m_netUnk3[i] = 0;
m_netTransports[i] = 0;
m_netPlayerPacketsReceived[i] = 0;
m_netPlayerPacketsReceived2[i] = 0;
m_netTimeSincePacket[i] = 0;
@ -87,9 +87,15 @@ void CDecor::DoNetSmooth(int player)
}
void CDecor::NetFUN_15d50()
void CDecor::NetAdjustToLift()
{
for (int i = 0; i < MAXNETPLAYER; i++)
{
if (m_netPos[i].x != -1 && m_netTransports[i] >= 0 && m_netTransports[i] < MAXMOVEOBJECT)
{
m_netPos[i].y = m_moveObject[m_netTransports[i]].posCurrent.y - 58;
}
}
}
void CDecor::FUN_15da0(int index, short step)

View File

@ -368,7 +368,7 @@ void CDecor::MoveStep()
if (m_phase == WM_PHASE_PLAY || m_phase == WM_PHASE_PLAYTEST) {
BlupiStep();
NetFUN_15d50();
NetAdjustToLift();
NotifStep();
}

View File

@ -253,7 +253,7 @@ public:
void NetFUN_155e0(BYTE _foo, short _bar);
void TreatNetData();
void DoNetSmooth(int player);
void NetFUN_15d50();
void NetAdjustToLift();
void FUN_15da0(int rank, short step);
void NetPlayerCollide(POINT pos, int *out);
void NetMessageIndexFlush();
@ -375,7 +375,7 @@ protected:
int m_netIcons[MAXNETPLAYER];
int m_netUnk1[MAXNETPLAYER];
int m_netUnk2[MAXNETPLAYER];
int m_netUnk3[MAXNETPLAYER];
int m_netTransports[MAXNETPLAYER]; // index of lift ridden by each player, or -1
int m_netPlayerPacketsReceived[MAXNETPLAYER];
int m_netPlayerPacketsReceived2[MAXNETPLAYER];
int m_netTimeSincePacket[MAXNETPLAYER];

View File

@ -475,6 +475,11 @@ enum {
WM_BUTTON38,
WM_BUTTON39,
WM_DIMS1,
WM_DIMS2,
WM_DIMS3,
WM_DIMS4,
WM_READ0 = WM_USER + 300,
WM_READ1,
WM_READ2,
@ -534,12 +539,12 @@ enum {
WM_PHASE_WRITEDESIGN,
WM_PHASE_READDESIGN,
WM_PHASE_CLEARDESIGN,
WM_PHASE_1562,
WM_PHASE_1563,
WM_PHASE_1564,
WM_PHASE_DONAMEGAMER,
WM_PHASE_DOCLEARGAMER,
WM_PHASE_DONAMEDESIGN,
WM_PHASE_1565,
WM_PHASE_1566,
WM_PHASE_1567,
WM_PHASE_DOCLEARDESIGN,
WM_PHASE_SERVICE,
WM_PHASE_DPLAY_DO_SERVICE,
WM_PHASE_DPLAY_CANCEL_SERVICE,

View File

@ -263,7 +263,7 @@ static Phase table[] =
FALSE,
{
{
WM_PHASE_1562,
WM_PHASE_DONAMEGAMER,
0,{ 1, IC_BT_ACCEPT },
0xde, 0x146,
{ 1, 0xae }
@ -283,7 +283,7 @@ static Phase table[] =
FALSE,
{
{
WM_PHASE_1563,
WM_PHASE_DONAMEDESIGN,
0,{ 1, IC_BT_ACCEPT },
0xde, 0x146,
{ 1, 0xb0 }
@ -651,8 +651,8 @@ BOOL CEvent::CreateButtons()
{
iconMenu++;
}
m_buttons->SetSomethingMenu(table[m_index].buttons[i].iconMenu + i + 4, *(int*)iconMenu);
m_buttons->MenuToolTips(table[m_index].buttons[i].toolTips + i + 4, *(int*)table[m_index].buttons[i].toolTips + i);
m_buttons->SetIconMenu(table[m_index].buttons[i].iconMenu + i + 4, *(int*)iconMenu);
m_buttons->SetToolTips(table[m_index].buttons[i].toolTips + i + 4, *(int*)table[m_index].buttons[i].toolTips + i);
}
}
@ -1432,132 +1432,72 @@ BOOL CEvent::TreatEventBase(UINT message, WPARAM wParam, LPARAM lParam)
switch (message)
{
case WM_KEYDOWN:
if (wParam >= 'A' && wParam <= 'Z')
{
if (m_posCheat == 0)
{
m_rankCheat = -1;
for (i = 0; i < 9; i++)
{
if ((char)wParam == cheat_code[i][0])
{
m_rankCheat = i;
break;
}
}
}
if (m_rankCheat != -1)
{
c = cheat_code[m_rankCheat][m_posCheat];
if (m_posCheat != 0 && m_rankCheat == 0) c++;
if ((char)wParam == c)
{
m_posCheat++;
}
}
if (m_phase != WM_PHASE_PLAY)
{
ChangePhase(m_phase);
}
if (bEnable)
{
pos.x = 320;
pos.y = LYIMAGE / 2;
m_pSound->PlayImage(SOUND_JUMPEND, pos, -1);
}
else
{
pos.x = 320;
pos.y = LYIMAGE / 2;
m_pSound->PlayImage(SOUND_RESSORT, pos, -1);
}
m_rankCheat = -1;
m_posCheat = 1;
}
return TRUE;
if (m_phase == WM_PHASE_INIT)
{
ChangePhase(WM_PHASE_INIT);
return TRUE;
}
if (m_phase == WM_PHASE_BYE)
{
PostMessageA(m_hWnd, WM_CLOSE, 0, 0);
}
switch (wParam)
{
case VK_END:
DemoRecStop();
case VK_END:
DemoRecStop();
return TRUE;
case VK_ESCAPE:
if (m_bRunMovie)
{
StopMovie();
m_pSound->SetSuspendSkip(1);
return TRUE;
case VK_ESCAPE:
if (m_bRunMovie)
}
if (m_phase != WM_PHASE_PLAYTEST)
{
if (m_phase != WM_PHASE_SETUP)
{
StopMovie();
m_pSound->SetSuspendSkip(1);
return TRUE;
}
if (m_phase != WM_PHASE_PLAYTEST)
{
if (m_phase != WM_PHASE_SETUP)
if (m_phase != WM_PHASE_NAMEGAMER)
{
if (m_phase != WM_PHASE_NAMEGAMER)
if (m_phase == WM_PHASE_NAMEDESIGN)
{
if (m_phase == WM_PHASE_NAMEDESIGN)
m_pDecor->SetMissionTitle(m_textInput);
ChangePhase(WM_PHASE_INFO);
return TRUE;
}
if ((m_phase == WM_PHASE_INIT) || (m_phase == WM_PHASE_WINMULTI)) ChangePhase(WM_PHASE_GAMER); return TRUE;
if ((m_phase == WM_PHASE_BUILD) || ((m_phase == WM_PHASE_LOSTDESIGN || m_phase == WM_PHASE_LOST))) ChangePhase(WM_PHASE_INFO); return TRUE;
if (((m_phase != WM_PHASE_INFO) && (m_phase != WM_PHASE_STOP)) && (m_phase != WM_PHASE_HELP))
{
if (m_phase == WM_PHASE_SERVICE)
{
m_pDecor->SetMissionTitle(m_textInput);
ChangePhase(WM_PHASE_INFO);
ChangePhase(WM_PHASE_DPLAY_DO_SERVICE);
return TRUE;
}
if ((m_phase == WM_PHASE_INIT) || (m_phase == WM_PHASE_WINMULTI)) ChangePhase(WM_PHASE_GAMER); return TRUE;
if ((m_phase == WM_PHASE_BUILD) || ((m_phase == WM_PHASE_LOSTDESIGN || m_phase == WM_PHASE_LOST))) ChangePhase(WM_PHASE_INFO); return TRUE;
if (((m_phase != WM_PHASE_INFO) && (m_phase != WM_PHASE_STOP)) && (m_phase != WM_PHASE_HELP))
if (m_phase == WM_PHASE_CREATE)
{
if (m_phase == WM_PHASE_SERVICE)
{
ChangePhase(WM_PHASE_DPLAY_DO_SERVICE);
return TRUE;
}
if (m_phase == WM_PHASE_CREATE)
{
ChangePhase(WM_PHASE_DPLAY_CREATE);
return TRUE;
}
if (m_phase == WM_PHASE_MULTI)
{
ChatSend();
return TRUE;
}
if (((m_phase != WM_PHASE_GREAD) && (m_phase != WM_PHASE_GREADp)) || ((m_fileIndex < 0 || LoadState(m_fileIndex) == FALSE)))
{
if (m_phase != WM_PHASE_GWRITE) return TRUE;
if (m_fileIndex < 0) return TRUE;
if (SaveState(m_fileIndex) == FALSE) return TRUE;
}
ChangePhase(WM_PHASE_DPLAY_CREATE);
return TRUE;
}
if (m_phase == WM_PHASE_MULTI)
{
ChatSend();
return TRUE;
}
if (((m_phase != WM_PHASE_GREAD) && (m_phase != WM_PHASE_GREADp)) || ((m_choiceIndex < 0 || LoadState(m_choiceIndex) == FALSE)))
{
if (m_phase != WM_PHASE_GWRITE) return TRUE;
if (m_choiceIndex < 0) return TRUE;
if (SaveState(m_choiceIndex) == FALSE) return TRUE;
}
}
}
strcpy(m_gamerName, m_textInput);
}
strcpy(m_gamerName, m_textInput);
}
}
}
if (m_phase != WM_PHASE_PLAY && m_phase != WM_PHASE_PLAYTEST)
{
return FALSE;
}
// Unknown Function
if (m_phase != WM_PHASE_PLAY && m_phase != WM_PHASE_PLAYTEST)
{
return 0;
}
// Unknown Function
switch (wParam)
{
case WM_LBUTTONDOWN:
case WM_RBUTTONDOWN:
m_bMouseDown = TRUE;
MouseSprite(pos);
@ -1568,9 +1508,278 @@ BOOL CEvent::TreatEventBase(UINT message, WPARAM wParam, LPARAM lParam)
}
if (m_phase == WM_PHASE_PLAY)
{
// if (PlayDown(pos, fwKeys)) return TRUE;
// if (PlayDown(pos, fwKeys)) return TRUE;
}
break;
case WM_MOUSEMOVE:
if (m_mouseType == MOUSETYPEGRA)
{
if (m_bShowMouse)
{
ShowCursor(FALSE); // cache la souris
m_pPixmap->MouseShow(TRUE); // montre sprite
m_bShowMouse = FALSE;
}
}
if (m_mouseType == MOUSETYPEWINPOS &&
(pos.x != m_oldMousePos.x ||
pos.y != m_oldMousePos.y))
{
m_oldMousePos = pos;
ClientToScreen(m_hWnd, &m_oldMousePos);
SetCursorPos(m_oldMousePos.x, m_oldMousePos.y); // (*)
}
m_oldMousePos = pos;
MouseSprite(pos);
if (EventButtons(message, wParam, lParam)) return TRUE;
if (m_phase == WM_PHASE_BUILD)
{
//if (BuildMove(pos, fwKeys)) return TRUE;
}
if (m_phase == WM_PHASE_PLAY)
{
//if (PlayMove(pos, fwKeys)) return TRUE;
}
break;
case WM_NCMOUSEMOVE:
if (m_mouseType == MOUSETYPEGRA)
{
if (!m_bShowMouse)
{
ShowCursor(TRUE); // montre la souris
m_pPixmap->MouseShow(FALSE); // cache sprite
m_bShowMouse = TRUE;
}
}
break;
case WM_LBUTTONUP:
case WM_RBUTTONUP:
m_bMousePress = FALSE;
if (EventButtons(message, wParam, lParam)) return TRUE;
if (m_phase == WM_PHASE_BUILD)
{
//if (BuildUp(pos, fwKeys)) return TRUE;
}
if (m_phase == WM_PHASE_PLAY)
{
//if (PlayUp(pos, fwKeys)) return TRUE;
}
if (m_phase == WM_PHASE_BYE)
{
PostMessage(m_hWnd, WM_CLOSE, 0, 0);
}
break;
case WM_PHASE_INTRO1:
case WM_PHASE_INTRO2:
case WM_PHASE_INIT:
case WM_PHASE_PLAY:
case WM_PHASE_BUILD:
case WM_PHASE_NAMEGAMER:
case WM_PHASE_CLEARGAMER:
case WM_PHASE_INFO:
case WM_PHASE_PLAYTEST:
case WM_PHASE_SETUP:
case WM_PHASE_MUSIC:
case WM_PHASE_PLAYMOVIE:
case WM_PHASE_WINMOVIE:
case WM_PHASE_SETUPp:
case WM_PHASE_REGION:
case WM_PHASE_GAMER:
case WM_PHASE_WINMOVIEDESIGN:
case WM_PHASE_WINMOVIEMULTI:
case WM_PHASE_BYE:
case WM_PHASE_NAMEDESIGN:
case WM_PHASE_WRITEDESIGN:
case WM_PHASE_READDESIGN:
case WM_PHASE_CLEARDESIGN:
case WM_PHASE_SERVICE:
case WM_PHASE_DPLAY_DO_SERVICE:
case WM_PHASE_DPLAY_CANCEL_SERVICE:
case WM_PHASE_SESSION:
case WM_PHASE_1572:
case WM_PHASE_DPLAY_CREATE_LOBBY:
case WM_PHASE_DPLAY_REFRESH:
case WM_PHASE_DPLAY_CANCEL_SESSION:
case WM_PHASE_MULTI:
case WM_PHASE_DPLAY_START_GAME_2:
case WM_PHASE_DPLAY_CANCEL_MULTI:
case WM_PHASE_CREATE:
case WM_PHASE_DPLAY_CREATE:
case WM_PHASE_DPLAY_CANCEL_CREATE:
case WM_PHASE_STOP:
case WM_PHASE_HELP:
case WM_PHASE_GWRITE:
case WM_PHASE_GREADp:
case WM_PHASE_GREAD:
case WM_PHASE_DOQUIT:
case WM_PHASE_1588:
if (ChangePhase(message)) return TRUE;
break;
case WM_PHASE_DOPLAY:
//TODO
break;
case WM_PHASE_PRIVATE:
//
break;
case WM_PHASE_DEMO:
m_demoNumber = 0;
DemoPlayStart();
break;
case WM_PHASE_DONAMEGAMER:
case WM_PHASE_DOCLEARGAMER:
case WM_PHASE_DONAMEDESIGN:
case WM_PHASE_1565:
case WM_PHASE_1566:
case WM_PHASE_DOCLEARDESIGN:
ChangeButtons(message);
return FALSE;
case WM_PREV: // TODO: further is mostly copied from pb
if (m_bPrivate)
{
if (m_private > 0)
{
m_private--;
if (ChangePhase(WM_PHASE_INFO)) return TRUE;
}
}
else if (m_bSchool)
{
if (m_exercice > 0)
{
m_exercice--;
if (ChangePhase(WM_PHASE_INFO)) return TRUE;
}
}
else
{
if (m_mission > 0)
{
m_mission--;
if (ChangePhase(WM_PHASE_INFO)) return TRUE;
}
}
break;
case WM_NEXT:
if (m_bPrivate)
{
if (m_private < 20 - 1)
{
m_private++;
if (ChangePhase(WM_PHASE_INFO)) return TRUE;
}
}
else if (m_bSchool)
{
if (m_exercice < 99)
{
m_exercice++;
if (ChangePhase(WM_PHASE_INFO)) return TRUE;
}
}
else
{
if (m_mission < 99)
{
m_mission++;
if (m_maxMission < m_mission)
{
m_maxMission = m_mission;
}
if (ChangePhase(WM_PHASE_INFO)) return TRUE;
}
}
break;
case WM_DECOR1:
SetState(WM_DECOR1, 1);
SetState(WM_DECOR2, 0);
SetState(WM_DECOR3, 0);
SetState(WM_DECOR4, 0);
SetState(WM_DECOR5, 0);
break;
case WM_DECOR2:
SetState(WM_DECOR1, 0);
SetState(WM_DECOR2, 1);
SetState(WM_DECOR3, 0);
SetState(WM_DECOR4, 0);
SetState(WM_DECOR5, 0);
break;
case WM_DECOR3:
SetState(WM_DECOR1, 0);
SetState(WM_DECOR2, 0);
SetState(WM_DECOR3, 1);
SetState(WM_DECOR4, 0);
SetState(WM_DECOR5, 0);
break;
case WM_DECOR4:
SetState(WM_DECOR1, 0);
SetState(WM_DECOR2, 0);
SetState(WM_DECOR3, 0);
SetState(WM_DECOR4, 1);
SetState(WM_DECOR5, 0);
break;
case WM_DECOR5:
SetState(WM_DECOR1, 0);
SetState(WM_DECOR2, 0);
SetState(WM_DECOR3, 0);
SetState(WM_DECOR4, 0);
SetState(WM_DECOR5, 1);
break;
case WM_BUTTON0:
case WM_BUTTON1:
case WM_BUTTON2:
case WM_BUTTON3:
case WM_BUTTON4:
case WM_BUTTON5:
case WM_BUTTON6:
case WM_BUTTON7:
case WM_BUTTON8:
case WM_BUTTON9:
case WM_BUTTON10:
case WM_BUTTON11:
case WM_BUTTON12:
case WM_BUTTON13:
case WM_BUTTON14:
case WM_BUTTON15:
case WM_BUTTON16:
case WM_BUTTON17:
case WM_BUTTON18:
case WM_BUTTON19:
case WM_BUTTON20:
case WM_BUTTON21:
case WM_BUTTON22:
case WM_BUTTON23:
case WM_BUTTON24:
case WM_BUTTON25:
case WM_BUTTON26:
case WM_BUTTON27:
case WM_BUTTON28:
case WM_BUTTON29:
case WM_BUTTON30:
case WM_BUTTON31:
case WM_BUTTON32:
case WM_BUTTON33:
case WM_BUTTON34:
case WM_BUTTON35:
case WM_BUTTON36:
case WM_BUTTON37:
case WM_BUTTON38:
case WM_BUTTON39:
ChangeButtons(message);
break;
case WM_MOVIE:
StartMovie("movie\\essai.avi");
ChangePhase(WM_PHASE_INIT);
break;
}
return FALSE;
@ -1856,13 +2065,13 @@ void CEvent::ReadAll()
BOOL bPrivate;
BOOL bMission;
if ((-1 < m_fileIndex) && (*(int*)((int)(m_filenameBuffer + -1) + m_fileIndex * 4 + 216) != 0))
if ((-1 < m_choiceIndex) && (*(int*)((int)(m_filenameBuffer + -1) + m_choiceIndex * 4 + 216) != 0))
{
//mission = m_pDecor->MissionStart(m_gamer, 999, bUser);
if (mission != FALSE)
{
read = m_pDecor->Read(m_gamer, m_fileIndex, &bMission, &bPrivate);
read = m_pDecor->Read(m_gamer, m_choiceIndex, &bMission, &bPrivate);
if (read != FALSE)
{
@ -2207,11 +2416,7 @@ void CEvent::SetLives(int lives)
void CEvent::SetSpeed(int speed)
{
int max;
if ( m_bSpeed ) max = 2;
if ( speed > max ) speed = max;
if ( speed > 2 ) speed = 2;
m_speed = speed;
}
@ -2540,3 +2745,190 @@ BOOL CEvent::ReadPlayer()
return TRUE;
}
void CEvent::ChangeButtons(int message)
{
if (m_phase == WM_PHASE_GAMER && message >= WM_BUTTON1 && message <= WM_BUTTON10)
{
m_gamer = message - WM_BUTTON0;
for (int i = 0; i < 10; i++)
{
SetState(WM_BUTTON1 + i, i == m_gamer - 1);
}
ReadInfo(m_gamer);
}
if (m_phase == WM_PHASE_NAMEGAMER && message == WM_PHASE_DONAMEGAMER)
{
WriteInfo(m_gamer, m_textInput);
ChangePhase(WM_PHASE_GAMER);
}
if (m_phase == WM_PHASE_NAMEDESIGN && message == WM_PHASE_DONAMEDESIGN)
{
m_pDecor->SetMissionTitle(m_textInput);
ChangePhase(WM_PHASE_INFO);
}
if (m_phase == WM_PHASE_CLEARGAMER && message == WM_PHASE_DOCLEARGAMER)
{
ClearGamer(m_gamer);
ChangePhase(WM_PHASE_GAMER);
}
if (m_phase == WM_PHASE_CLEARDESIGN && message == WM_PHASE_DOCLEARDESIGN)
{
m_pDecor->SomethingMissionPath(m_gamer, GetWorld(), !m_bBuildOfficialMissions);
ChangePhase(WM_PHASE_INFO);
}
if (m_phase == WM_PHASE_MUSIC)
{
m_pDecor->SetMusic(message - WM_BUTTON0);
ChangePhase(m_phase);
}
if (m_phase == WM_PHASE_REGION)
{
if (message >= WM_BUTTON1 && message <= WM_BUTTON32)
{
m_pDecor->SetRegion(message - WM_BUTTON1);
}
if (message >= WM_DIMS1 && message <= WM_DIMS4)
{
SetState(WM_DIMS1, 0);
SetState(WM_DIMS2, 0);
SetState(WM_DIMS3, 0);
SetState(WM_DIMS4, 0);
SetState(message, 1);
if (message == WM_DIMS1) m_pDecor->SetDim({ MAXCELX, MAXCELY });
if (message == WM_DIMS2) m_pDecor->SetDim({ MAXCELX, 0 });
if (message == WM_DIMS3) m_pDecor->SetDim({ 0, MAXCELY });
if (message == WM_DIMS4) m_pDecor->SetDim({ 0, 0 });
}
}
if (m_phase == WM_PHASE_SERVICE)
{
if (message >= WM_BUTTON1 && message <= WM_BUTTON6)
{
m_choiceIndex = message - WM_BUTTON1 + m_choicePageOffset;
}
if (message == WM_BUTTON10)
{
m_choicePageOffset -= 6;
if (m_choicePageOffset < 0) m_choicePageOffset = 0;
}
if (message == WM_BUTTON11)
{
m_choicePageOffset += 6;
}
SetHide(WM_BUTTON10, m_choicePageOffset == 0);
SetHide(WM_BUTTON11, (m_nbChoices + 5) / 6 * 6 <= m_choicePageOffset + 6);
for (int i = 0; i < 6; i++)
{
if (m_choicePageOffset + i < m_nbChoices)
{
SetHide(WM_BUTTON1 + i, FALSE);
SetState(WM_BUTTON1 + i, m_choicePageOffset == m_choiceIndex);
}
else
{
SetHide(WM_BUTTON1 + i, TRUE);
}
}
}
if (m_phase == WM_PHASE_SESSION)
{
if (message >= WM_BUTTON1 && message <= WM_BUTTON6)
{
m_choiceIndex = message - WM_BUTTON1 + m_choicePageOffset;
}
if (message == WM_BUTTON10)
{
m_choicePageOffset -= 6;
if (m_choicePageOffset < 0) m_choicePageOffset = 0;
}
if (message == WM_BUTTON11)
{
m_choicePageOffset += 6;
}
SetHide(WM_BUTTON10, m_choicePageOffset == 0);
SetHide(WM_BUTTON11, (m_nbChoices + 5) / 6 * 6 <= m_choicePageOffset + 6);
for (int i = 0; i < 6; i++)
{
if (m_choicePageOffset + i < m_nbChoices)
{
SetHide(WM_BUTTON1 + i, FALSE);
SetState(WM_BUTTON1 + i, m_choicePageOffset == m_choiceIndex);
}
else
{
SetHide(WM_BUTTON1 + i, TRUE);
}
}
}
if (m_phase == WM_PHASE_MULTI)
{
if (message >= WM_BUTTON1 && message <= WM_BUTTON4)
{
if (m_pNetwork->m_players[message - WM_BUTTON1].team >= MAXNETPLAYER)
{
m_pNetwork->m_players[message - WM_BUTTON1].team = 0;
}
if (m_pNetwork->IsHost())
{
NetSendLobby();
}
else
{
//TODO
//m_pNetwork->Send(...
}
//DrawMap();
//NetAdjustLobbyButtons();
}
if (message >= WM_BUTTON11 && message <= WM_BUTTON14)
{
m_pNetwork->m_players[message - WM_BUTTON11].ready ^= 1; // toggle ready
if (m_pNetwork->IsHost())
{
NetSendLobby();
}
else
{
//TODO
//m_pNetwork->Send(...
}
//NetAdjustLobbyButtons();
}
if (message == WM_BUTTON20)
{
ChatSend();
}
}
if (m_phase == WM_PHASE_READDESIGN)
{
//TODO
}
if (m_phase == WM_PHASE_WRITEDESIGN)
{
//TODO
}
if (m_phase == WM_PHASE_GREAD || m_phase == WM_PHASE_GREADp)
{
//TODO
}
if (m_phase == WM_PHASE_GWRITE)
{
//TODO
}
if (m_phase == WM_PHASE_SETUP || m_phase == WM_PHASE_SETUPp)
{
//TODO
}
}
BOOL CEvent::ClearGamer(int gamer)
{
char filename[260];
m_6D30 = 0;
sprintf(filename, "data\\info%.3d.blp", gamer);
AddUserPath(filename);
remove(filename);
return TRUE;
}

View File

@ -118,11 +118,6 @@ public:
void FlushInput();
BOOL FlipObject();
void Read(int message);
void Write(int message);
void SetSpeed(int speed);
int GetSpeed();
BOOL GetPause();
@ -141,7 +136,7 @@ public:
BOOL SaveState(int rank);
void SomethingUserMissions(char* lpFilename, LPCSTR fileSomething);
BOOL ClearGamer(int gamer);
protected:
void DrawTextCenter(int res, int x, int y, int font=0);
@ -151,11 +146,8 @@ protected:
int SearchPhase(UINT phase);
void DecorShift(int dx, int dy);
BOOL PlayDown(POINT pos, int fwKeys);
BOOL PlayMove(POINT pos, int fwKeys);
BOOL PlayUp(POINT pos, int fwKeys);
void ChangeButtons(int message);
void BuildFloor(POINT cel, int insIcon);
void BuildWater(POINT cel, int insIcon);
BOOL BuildDown(POINT pos, int fwKeys, BOOL bMix=TRUE);
@ -203,7 +195,7 @@ protected:
char m_gamerNameList[10][100];
void* m_somethingJoystick;
int m_menuIndex;
int m_fileIndex;
int m_choiceIndex;
int m_saveIndex;
int m_menuDecor[10];
BOOL m_bMouseRelease;
@ -299,6 +291,10 @@ protected:
HINSTANCE m_hInstance;
char m_chatZone[100][5];
char m_text[100];
int m_choicePageOffset;
int m_nbChoices;
int m_6D30;
};
extern