mirror of
https://github.com/isledecomp/isle.git
synced 2026-01-27 02:01:16 +00:00
Improve Paint match
This commit is contained in:
parent
2d469417a9
commit
03b19f301b
@ -6,11 +6,11 @@
|
|||||||
// SIZE 0x20
|
// SIZE 0x20
|
||||||
struct PizzaMissionStateEntry {
|
struct PizzaMissionStateEntry {
|
||||||
public:
|
public:
|
||||||
undefined2 m_unk0x00;
|
undefined2 m_unk0x00; // 0x00
|
||||||
MxU8 m_id;
|
MxU8 m_id; // 0x02
|
||||||
undefined m_unk0x03[0x15];
|
undefined m_unk0x03[0x15]; // 0x03
|
||||||
MxU16 m_color;
|
MxU16 m_color; // 0x18
|
||||||
undefined m_unk0x18[6];
|
undefined m_unk0x18[6]; // 0x1a
|
||||||
};
|
};
|
||||||
|
|
||||||
// VTABLE: LEGO1 0x100d7408
|
// VTABLE: LEGO1 0x100d7408
|
||||||
|
|||||||
@ -7,6 +7,7 @@
|
|||||||
struct RaceStateEntry {
|
struct RaceStateEntry {
|
||||||
public:
|
public:
|
||||||
inline MxS16 GetUnknown0x02() { return m_unk0x02; }
|
inline MxS16 GetUnknown0x02() { return m_unk0x02; }
|
||||||
|
inline MxU16 GetColor() { return m_color; }
|
||||||
|
|
||||||
// TODO: Possibly private
|
// TODO: Possibly private
|
||||||
MxU8 m_id; // 0x00
|
MxU8 m_id; // 0x00
|
||||||
@ -37,7 +38,6 @@ class RaceState : public LegoState {
|
|||||||
|
|
||||||
RaceStateEntry* GetState(MxU8 p_id);
|
RaceStateEntry* GetState(MxU8 p_id);
|
||||||
|
|
||||||
inline MxU16 GetColor(MxU8 p_id) { return GetState(p_id)->m_color; }
|
|
||||||
inline undefined4 GetUnknown0x28() { return m_unk0x28; }
|
inline undefined4 GetUnknown0x28() { return m_unk0x28; }
|
||||||
|
|
||||||
// SYNTHETIC: LEGO1 0x1000f6f0
|
// SYNTHETIC: LEGO1 0x1000f6f0
|
||||||
|
|||||||
@ -13,7 +13,7 @@
|
|||||||
class Score : public LegoWorld {
|
class Score : public LegoWorld {
|
||||||
public:
|
public:
|
||||||
Score();
|
Score();
|
||||||
~Score() override; // vtable+0x00
|
~Score() override;
|
||||||
MxLong Notify(MxParam& p_param) override; // vtable+0x04
|
MxLong Notify(MxParam& p_param) override; // vtable+0x04
|
||||||
|
|
||||||
// FUNCTION: LEGO1 0x100010c0
|
// FUNCTION: LEGO1 0x100010c0
|
||||||
@ -32,11 +32,11 @@ class Score : public LegoWorld {
|
|||||||
// SYNTHETIC: LEGO1 0x100011e0
|
// SYNTHETIC: LEGO1 0x100011e0
|
||||||
// Score::`scalar deleting destructor'
|
// Score::`scalar deleting destructor'
|
||||||
|
|
||||||
MxResult Create(MxDSAction& p_dsAction) override; // vtable+18
|
MxResult Create(MxDSAction& p_dsAction) override; // vtable+0x18
|
||||||
void ReadyWorld() override; // vtable+50
|
void ReadyWorld() override; // vtable+0x50
|
||||||
MxBool VTable0x5c() override; // vtable+5c
|
MxBool VTable0x5c() override; // vtable+0x5c
|
||||||
MxBool VTable0x64() override; // vtable+64
|
MxBool VTable0x64() override; // vtable+0x64
|
||||||
void Enable(MxBool p_enable) override; // vtable+68
|
void Enable(MxBool p_enable) override; // vtable+0x68
|
||||||
|
|
||||||
void Paint();
|
void Paint();
|
||||||
MxLong FUN_10001510(MxEndActionNotificationParam& p_param);
|
MxLong FUN_10001510(MxEndActionNotificationParam& p_param);
|
||||||
@ -44,12 +44,11 @@ class Score : public LegoWorld {
|
|||||||
void FillArea(MxU32 p_x, MxU32 p_y, MxS16 p_color);
|
void FillArea(MxU32 p_x, MxU32 p_y, MxS16 p_color);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
LegoGameState::Area m_destLocation;
|
|
||||||
ScoreState* m_state;
|
|
||||||
MxU8* m_surface;
|
|
||||||
|
|
||||||
private:
|
|
||||||
void DeleteScript();
|
void DeleteScript();
|
||||||
|
|
||||||
|
LegoGameState::Area m_destLocation; // 0xf8
|
||||||
|
ScoreState* m_state; // 0xfc
|
||||||
|
MxU8* m_surface; // 0x100
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // SCORE_H
|
#endif // SCORE_H
|
||||||
|
|||||||
@ -54,12 +54,11 @@ class TowTrackMissionState : public LegoState {
|
|||||||
MxU16 m_unk0x16; // 0x16
|
MxU16 m_unk0x16; // 0x16
|
||||||
MxU16 m_unk0x18; // 0x18
|
MxU16 m_unk0x18; // 0x18
|
||||||
MxU16 m_unk0x1a; // 0x1a
|
MxU16 m_unk0x1a; // 0x1a
|
||||||
MxU16 m_unk0x1c; // 0x1c
|
MxU16 m_color1; // 0x1c
|
||||||
MxU16 m_color1; // 0x1e
|
MxU16 m_color2; // 0x1e
|
||||||
MxU16 m_color2; // 0x20
|
MxU16 m_color3; // 0x20
|
||||||
MxU16 m_color3; // 0x22
|
MxU16 m_color4; // 0x22
|
||||||
MxU16 m_color4; // 0x24
|
MxU16 m_color5; // 0x24
|
||||||
MxU16 m_color5; // 0x26
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // TOWTRACKMISSIONSTATE_H
|
#endif // TOWTRACKMISSIONSTATE_H
|
||||||
|
|||||||
@ -25,6 +25,7 @@ RaceStateEntry* RaceState::GetState(MxU8 p_id)
|
|||||||
if (i >= 5) {
|
if (i >= 5) {
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (m_state[i].m_id == p_id) {
|
if (m_state[i].m_id == p_id) {
|
||||||
return m_state + i;
|
return m_state + i;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -13,11 +13,11 @@ TowTrackMissionState::TowTrackMissionState()
|
|||||||
m_unk0x0c = 0;
|
m_unk0x0c = 0;
|
||||||
m_unk0x1a = 0;
|
m_unk0x1a = 0;
|
||||||
m_unk0x10 = 0;
|
m_unk0x10 = 0;
|
||||||
m_unk0x1c = 0;
|
|
||||||
m_color1 = 0;
|
m_color1 = 0;
|
||||||
m_color2 = 0;
|
m_color2 = 0;
|
||||||
m_color3 = 0;
|
m_color3 = 0;
|
||||||
m_color4 = 0;
|
m_color4 = 0;
|
||||||
|
m_color5 = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
// FUNCTION: LEGO1 0x1004dde0
|
// FUNCTION: LEGO1 0x1004dde0
|
||||||
@ -31,11 +31,11 @@ MxResult TowTrackMissionState::Serialize(LegoFile* p_legoFile)
|
|||||||
p_legoFile->Read(&m_unk0x16, sizeof(m_unk0x16));
|
p_legoFile->Read(&m_unk0x16, sizeof(m_unk0x16));
|
||||||
p_legoFile->Read(&m_unk0x18, sizeof(m_unk0x18));
|
p_legoFile->Read(&m_unk0x18, sizeof(m_unk0x18));
|
||||||
p_legoFile->Read(&m_unk0x1a, sizeof(m_unk0x1a));
|
p_legoFile->Read(&m_unk0x1a, sizeof(m_unk0x1a));
|
||||||
p_legoFile->Read(&m_unk0x1c, sizeof(m_unk0x1c));
|
|
||||||
p_legoFile->Read(&m_color1, sizeof(m_color1));
|
p_legoFile->Read(&m_color1, sizeof(m_color1));
|
||||||
p_legoFile->Read(&m_color2, sizeof(m_color2));
|
p_legoFile->Read(&m_color2, sizeof(m_color2));
|
||||||
p_legoFile->Read(&m_color3, sizeof(m_color3));
|
p_legoFile->Read(&m_color3, sizeof(m_color3));
|
||||||
p_legoFile->Read(&m_color4, sizeof(m_color4));
|
p_legoFile->Read(&m_color4, sizeof(m_color4));
|
||||||
|
p_legoFile->Read(&m_color5, sizeof(m_color5));
|
||||||
}
|
}
|
||||||
else if (p_legoFile->IsWriteMode()) {
|
else if (p_legoFile->IsWriteMode()) {
|
||||||
MxU16 write = m_unk0x12;
|
MxU16 write = m_unk0x12;
|
||||||
@ -53,9 +53,6 @@ MxResult TowTrackMissionState::Serialize(LegoFile* p_legoFile)
|
|||||||
write = m_unk0x1a;
|
write = m_unk0x1a;
|
||||||
p_legoFile->Write(&write, sizeof(m_unk0x12));
|
p_legoFile->Write(&write, sizeof(m_unk0x12));
|
||||||
|
|
||||||
write = m_unk0x1c;
|
|
||||||
p_legoFile->Write(&write, sizeof(m_unk0x12));
|
|
||||||
|
|
||||||
write = m_color1;
|
write = m_color1;
|
||||||
p_legoFile->Write(&write, sizeof(m_unk0x12));
|
p_legoFile->Write(&write, sizeof(m_unk0x12));
|
||||||
|
|
||||||
@ -67,6 +64,9 @@ MxResult TowTrackMissionState::Serialize(LegoFile* p_legoFile)
|
|||||||
|
|
||||||
write = m_color4;
|
write = m_color4;
|
||||||
p_legoFile->Write(&write, sizeof(m_unk0x12));
|
p_legoFile->Write(&write, sizeof(m_unk0x12));
|
||||||
|
|
||||||
|
write = m_color5;
|
||||||
|
p_legoFile->Write(&write, sizeof(m_unk0x12));
|
||||||
}
|
}
|
||||||
|
|
||||||
return SUCCESS;
|
return SUCCESS;
|
||||||
|
|||||||
@ -1,7 +1,9 @@
|
|||||||
#include "score.h"
|
#include "score.h"
|
||||||
|
|
||||||
#include "ambulancemissionstate.h"
|
#include "ambulancemissionstate.h"
|
||||||
|
#include "carracestate.h"
|
||||||
#include "infoscor_actions.h"
|
#include "infoscor_actions.h"
|
||||||
|
#include "jetskiracestate.h"
|
||||||
#include "jukebox.h"
|
#include "jukebox.h"
|
||||||
#include "jukebox_actions.h"
|
#include "jukebox_actions.h"
|
||||||
#include "legocontrolmanager.h"
|
#include "legocontrolmanager.h"
|
||||||
@ -234,58 +236,53 @@ void Score::Enable(MxBool p_enable)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// FUNCTION: LEGO1 0x100019d0
|
// FUNCTION: LEGO1 0x100019d0
|
||||||
|
// FUNCTION: BETA10 0x100f47d8
|
||||||
void Score::Paint()
|
void Score::Paint()
|
||||||
{
|
{
|
||||||
LegoTextureInfo* gd = TextureContainer()->Get("bigcube.gif");
|
LegoTextureInfo* cube = TextureContainer()->Get("bigcube.gif");
|
||||||
|
|
||||||
if (gd) {
|
if (cube != NULL) {
|
||||||
RaceState* l78 = (RaceState*) GameState()->GetState("JetskiRaceState");
|
JetskiRaceState* jetskiRaceState = (JetskiRaceState*) GameState()->GetState("JetskiRaceState");
|
||||||
RaceState* l70 = (RaceState*) GameState()->GetState("CarRaceState");
|
CarRaceState* carRaceState = (CarRaceState*) GameState()->GetState("CarRaceState");
|
||||||
TowTrackMissionState* lesi = (TowTrackMissionState*) GameState()->GetState("TowTrackMissionState");
|
TowTrackMissionState* towTrackMissionState =
|
||||||
PizzaMissionState* l74 = (PizzaMissionState*) GameState()->GetState("PizzaMissionState");
|
(TowTrackMissionState*) GameState()->GetState("TowTrackMissionState");
|
||||||
AmbulanceMissionState* lebp = (AmbulanceMissionState*) GameState()->GetState("AmbulanceMissionState");
|
PizzaMissionState* pizzaMissionState = (PizzaMissionState*) GameState()->GetState("PizzaMissionState");
|
||||||
|
AmbulanceMissionState* ambulanceMissionState =
|
||||||
|
(AmbulanceMissionState*) GameState()->GetState("AmbulanceMissionState");
|
||||||
|
|
||||||
DDSURFACEDESC desc;
|
DDSURFACEDESC desc;
|
||||||
memset(&desc, 0, sizeof(desc));
|
memset(&desc, 0, sizeof(desc));
|
||||||
desc.dwSize = sizeof(desc);
|
desc.dwSize = sizeof(desc);
|
||||||
if (gd->m_surface->Lock(NULL, &desc, 0, NULL) == DD_OK) {
|
|
||||||
|
if (cube->m_surface->Lock(NULL, &desc, 0, NULL) == DD_OK) {
|
||||||
if (desc.lPitch != desc.dwWidth) {
|
if (desc.lPitch != desc.dwWidth) {
|
||||||
gd->m_surface->Unlock(desc.lpSurface);
|
cube->m_surface->Unlock(desc.lpSurface);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
m_surface = (MxU8*) desc.lpSurface;
|
||||||
|
|
||||||
for (MxU8 id = 1; id <= 5; id++) {
|
for (MxU8 id = 1; id <= 5; id++) {
|
||||||
m_surface = (MxU8*) desc.lpSurface;
|
MxU16 color;
|
||||||
MxU16 color = 0;
|
|
||||||
if (l70) {
|
color = carRaceState ? carRaceState->GetState(id)->GetColor() : 0;
|
||||||
color = l70->GetColor(id);
|
FillArea(0, id - 1, color);
|
||||||
}
|
|
||||||
MxU32 row = id - 1;
|
color = jetskiRaceState ? jetskiRaceState->GetState(id)->GetColor() : 0;
|
||||||
FillArea(0, row, color);
|
FillArea(1, id - 1, color);
|
||||||
color = 0;
|
|
||||||
if (l78) {
|
color = pizzaMissionState ? pizzaMissionState->GetColor(id) : 0;
|
||||||
color = l78->GetColor(id);
|
FillArea(2, id - 1, color);
|
||||||
}
|
|
||||||
FillArea(1, row, color);
|
color = towTrackMissionState ? towTrackMissionState->GetColor(id) : 0;
|
||||||
color = 0;
|
FillArea(3, id - 1, color);
|
||||||
if (l74) {
|
|
||||||
color = l74->GetColor(id);
|
color = ambulanceMissionState ? ambulanceMissionState->GetColor(id) : 0;
|
||||||
}
|
FillArea(4, id - 1, color);
|
||||||
FillArea(2, row, color);
|
|
||||||
color = 0;
|
|
||||||
if (lesi) {
|
|
||||||
color = lesi->GetColor(id);
|
|
||||||
}
|
|
||||||
FillArea(3, row, color);
|
|
||||||
color = 0;
|
|
||||||
if (lebp) {
|
|
||||||
color = lebp->GetColor(id);
|
|
||||||
}
|
|
||||||
FillArea(4, row, color);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
gd->m_surface->Unlock(desc.lpSurface);
|
cube->m_surface->Unlock(desc.lpSurface);
|
||||||
gd->m_texture->Changed(TRUE, FALSE);
|
cube->m_texture->Changed(TRUE, FALSE);
|
||||||
m_surface = NULL;
|
m_surface = NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -45,10 +45,9 @@ class LegoContainer {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// FUNCTION: BETA10 0x1007bc00
|
||||||
inline T* Get(const char* p_name)
|
inline T* Get(const char* p_name)
|
||||||
{
|
{
|
||||||
// TODO: Score::Paint matches better with no `value` on the stack,
|
|
||||||
// while LegoModelPresenter::CreateROI only matches with `value`
|
|
||||||
T* value = NULL;
|
T* value = NULL;
|
||||||
|
|
||||||
#ifdef COMPAT_MODE
|
#ifdef COMPAT_MODE
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user